<?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>226887</bug_id>
          
          <creation_ts>2021-06-10 11:25:38 -0700</creation_ts>
          <short_desc>Adopt Span in more places</short_desc>
          <delta_ts>2025-09-27 08:52:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>alecflett</cc>
    
    <cc>annulen</cc>
    
    <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>benjamin</cc>
    
    <cc>berto</cc>
    
    <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>galpeter</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>hta</cc>
    
    <cc>japhet</cc>
    
    <cc>jer.noble</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>joepeck</cc>
    
    <cc>jsbell</cc>
    
    <cc>kangil.han</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>msaboff</cc>
    
    <cc>philipj</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>tommyw</cc>
    
    <cc>toyoshim</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bot-watchers-bugzilla</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>yutak</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1768623</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-06-10 11:25:38 -0700</bug_when>
    <thetext>Adopt Span in more places</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768628</commentid>
    <comment_count>1</comment_count>
      <attachid>431097</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-06-10 11:30:31 -0700</bug_when>
    <thetext>Created attachment 431097
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769164</commentid>
    <comment_count>2</comment_count>
      <attachid>431249</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-06-11 19:40:04 -0700</bug_when>
    <thetext>Created attachment 431249
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769194</commentid>
    <comment_count>3</comment_count>
      <attachid>431255</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-06-12 07:51:38 -0700</bug_when>
    <thetext>Created attachment 431255
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769195</commentid>
    <comment_count>4</comment_count>
      <attachid>431256</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-06-12 07:58:58 -0700</bug_when>
    <thetext>Created attachment 431256
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769200</commentid>
    <comment_count>5</comment_count>
      <attachid>431258</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-06-12 08:21:57 -0700</bug_when>
    <thetext>Created attachment 431258
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769201</commentid>
    <comment_count>6</comment_count>
      <attachid>431259</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-06-12 08:23:23 -0700</bug_when>
    <thetext>Created attachment 431259
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769239</commentid>
    <comment_count>7</comment_count>
      <attachid>431267</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-06-12 18:37:13 -0700</bug_when>
    <thetext>Created attachment 431267
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769265</commentid>
    <comment_count>8</comment_count>
      <attachid>431276</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-06-13 08:18:00 -0700</bug_when>
    <thetext>Created attachment 431276
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769266</commentid>
    <comment_count>9</comment_count>
      <attachid>431277</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-06-13 08:23:40 -0700</bug_when>
    <thetext>Created attachment 431277
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769269</commentid>
    <comment_count>10</comment_count>
      <attachid>431278</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-06-13 09:39:46 -0700</bug_when>
    <thetext>Created attachment 431278
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769270</commentid>
    <comment_count>11</comment_count>
      <attachid>431279</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-06-13 09:46:18 -0700</bug_when>
    <thetext>Created attachment 431279
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769297</commentid>
    <comment_count>12</comment_count>
      <attachid>431286</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-06-13 12:51:23 -0700</bug_when>
    <thetext>Created attachment 431286
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769302</commentid>
    <comment_count>13</comment_count>
      <attachid>431289</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-06-13 14:53:51 -0700</bug_when>
    <thetext>Created attachment 431289
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769303</commentid>
    <comment_count>14</comment_count>
      <attachid>431290</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-06-13 15:18:01 -0700</bug_when>
    <thetext>Created attachment 431290
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769304</commentid>
    <comment_count>15</comment_count>
      <attachid>431291</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-06-13 15:32:59 -0700</bug_when>
    <thetext>Created attachment 431291
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769306</commentid>
    <comment_count>16</comment_count>
      <attachid>431292</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-06-13 15:54:41 -0700</bug_when>
    <thetext>Created attachment 431292
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769307</commentid>
    <comment_count>17</comment_count>
      <attachid>431293</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-06-13 16:00:38 -0700</bug_when>
    <thetext>Created attachment 431293
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769308</commentid>
    <comment_count>18</comment_count>
      <attachid>431294</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-06-13 16:12:55 -0700</bug_when>
    <thetext>Created attachment 431294
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769315</commentid>
    <comment_count>19</comment_count>
      <attachid>431296</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-06-13 19:06:48 -0700</bug_when>
    <thetext>Created attachment 431296
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769316</commentid>
    <comment_count>20</comment_count>
      <attachid>431297</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-06-13 19:09:28 -0700</bug_when>
    <thetext>Created attachment 431297
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769423</commentid>
    <comment_count>21</comment_count>
      <attachid>431332</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-06-14 09:22:12 -0700</bug_when>
    <thetext>Created attachment 431332
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769425</commentid>
    <comment_count>22</comment_count>
      <attachid>431334</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-06-14 09:25:49 -0700</bug_when>
    <thetext>Created attachment 431334
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769441</commentid>
    <comment_count>23</comment_count>
      <attachid>431341</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-06-14 10:10:49 -0700</bug_when>
    <thetext>Created attachment 431341
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769828</commentid>
    <comment_count>24</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2021-06-15 09:11:35 -0700</bug_when>
    <thetext>There is something wrong with patches on this bug with jsc queue. The bot disconnects (or maybe hangs) while running jsc tests with these patches. Because of that, jsc build keep getting retried, and the bots keep busy trying to process these patches. It would be nice to figure out why is this happening, so that we can try to avoid that.

e.g.:
https://ews-build.webkit.org/#/builders/1/builds/42397
https://ews-build.webkit.org/#/builders/1/builds/42392
https://ews-build.webkit.org/#/builders/1/builds/42387
https://ews-build.webkit.org/#/builders/1/builds/42381
https://ews-build.webkit.org/#/builders/1/builds/42378
https://ews-build.webkit.org/#/builders/1/builds/42374
https://ews-build.webkit.org/#/builders/1/builds/42371
https://ews-build.webkit.org/#/builders/1/builds/42369
https://ews-build.webkit.org/#/builders/1/builds/42365
https://ews-build.webkit.org/#/builders/1/builds/42358
https://ews-build.webkit.org/#/builders/1/builds/42354
https://ews-build.webkit.org/#/builders/1/builds/42349
https://ews-build.webkit.org/#/builders/1/builds/42343
https://ews-build.webkit.org/#/builders/1/builds/42341
https://ews-build.webkit.org/#/builders/1/builds/42328
https://ews-build.webkit.org/#/builders/1/builds/42324
https://ews-build.webkit.org/#/builders/1/builds/42320
https://ews-build.webkit.org/#/builders/1/builds/42315
https://ews-build.webkit.org/#/builders/1/builds/42311
https://ews-build.webkit.org/#/builders/1/builds/42308
https://ews-build.webkit.org/#/builders/1/builds/42303
https://ews-build.webkit.org/#/builders/1/builds/42296
https://ews-build.webkit.org/#/builders/1/builds/42293
https://ews-build.webkit.org/#/builders/1/builds/42291
https://ews-build.webkit.org/#/builders/1/builds/42287
https://ews-build.webkit.org/#/builders/1/builds/42280
https://ews-build.webkit.org/#/builders/1/builds/42276
...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1770730</commentid>
    <comment_count>25</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-17 11:26:45 -0700</bug_when>
    <thetext>&lt;rdar://problem/79461930&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431097</attachid>
            <date>2021-06-10 11:30:31 -0700</date>
            <delta_ts>2021-06-11 19:39:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226887-20210610113030.patch</filename>
            <type>text/plain</type>
            <size>117537</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5tbQkocmV2aXNpb24gMjc4NzEz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5tbQkod29ya2luZyBjb3B5
KQpAQCAtMTM0LDEzICsxMzQsMTMgQEAgKyAoaW5zdGFuY2V0eXBlKXNjcmlwdE9mVHlwZTooSlNT
Y3JpcHRUeQogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIGNyZWF0ZUVycm9yKFtO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRmlsZSBhdCBwYXRoICVAIGNvdWxkIG5vdCBiZSBt
YXBwZWQuIiwgc3RhdGljX2Nhc3Q8TlNTdHJpbmcgKj4oc3lzdGVtUGF0aCldLCBlcnJvcik7CiAK
LSAgICBpZiAoIWNoYXJhY3RlcnNBcmVBbGxBU0NJSShyZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpKSkKKyAgICBpZiAoIWNoYXJh
Y3RlcnNBcmVBbGxBU0NJSShyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oZmlsZURhdGEu
ZGF0YSgpLmRhdGEoKSksIGZpbGVEYXRhLmRhdGEoKS5zaXplKCkpKQogICAgICAgICByZXR1cm4g
Y3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJOb3QgYWxsIGNoYXJhY3Rl
cnMgaW4gZmlsZSBhdCAlQCBhcmUgQVNDSUkuIiwgc3RhdGljX2Nhc3Q8TlNTdHJpbmcgKj4oc3lz
dGVtUGF0aCldLCBlcnJvcik7CiAKICAgICBhdXRvIHJlc3VsdCA9IGFkb3B0TlMoW1tKU1Njcmlw
dCBhbGxvY10gaW5pdF0pOwogICAgIHJlc3VsdC0+bV92aXJ0dWFsTWFjaGluZSA9IHZtOwogICAg
IHJlc3VsdC0+bV90eXBlID0gdHlwZTsKLSAgICByZXN1bHQtPm1fc291cmNlID0gU3RyaW5nKFN0
cmluZ0ltcGw6OmNyZWF0ZVdpdGhvdXRDb3B5aW5nKGJpdHdpc2VfY2FzdDxjb25zdCBMQ2hhcio+
KGZpbGVEYXRhLmRhdGEoKSksIGZpbGVEYXRhLnNpemUoKSkpOworICAgIHJlc3VsdC0+bV9zb3Vy
Y2UgPSBTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcoYml0d2lzZV9jYXN0
PGNvbnN0IExDaGFyKj4oZmlsZURhdGEuZGF0YSgpLmRhdGEoKSksIGZpbGVEYXRhLmRhdGEoKS5z
aXplKCkpKTsKICAgICByZXN1bHQtPm1fbWFwcGVkU291cmNlID0gV1RGTW92ZShmaWxlRGF0YSk7
CiAgICAgcmVzdWx0LT5tX3NvdXJjZVVSTCA9IHNvdXJjZVVSTDsKICAgICByZXN1bHQtPm1fY2Fj
aGVQYXRoID0gY2FjaGVQYXRoOwpAQCAtMTY4LDI0ICsxNjgsMjMgQEAgLSAodm9pZClyZWFkQ2Fj
aGUKICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IHVpbnQ4
X3QqIGZpbGVEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4obWFwcGVkRmls
ZS5kYXRhKCkpOwotICAgIHVuc2lnbmVkIGZpbGVUb3RhbFNpemUgPSBtYXBwZWRGaWxlLnNpemUo
KTsKKyAgICBhdXRvIGZpbGVEYXRhID0gbWFwcGVkRmlsZS5kYXRhKCk7CiAKICAgICAvLyBFbnN1
cmUgd2UgYXQgbGVhc3QgaGF2ZSBhIFNIQTE6OkRpZ2VzdCB0byByZWFkLgotICAgIGlmIChmaWxl
VG90YWxTaXplIDwgc2l6ZW9mKFNIQTE6OkRpZ2VzdCkpIHsKKyAgICBpZiAoZmlsZURhdGEuc2l6
ZSgpIDwgc2l6ZW9mKFNIQTE6OkRpZ2VzdCkpIHsKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRl
RmlsZShjYWNoZUZpbGVuYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHVuc2ln
bmVkIGZpbGVEYXRhU2l6ZSA9IGZpbGVUb3RhbFNpemUgLSBzaXplb2YoU0hBMTo6RGlnZXN0KTsK
KyAgICB1bnNpZ25lZCBmaWxlRGF0YVNpemUgPSBmaWxlRGF0YS5zaXplKCkgLSBzaXplb2YoU0hB
MTo6RGlnZXN0KTsKIAogICAgIFNIQTE6OkRpZ2VzdCBjb21wdXRlZEhhc2g7CiAgICAgU0hBMSBz
aGExOwotICAgIHNoYTEuYWRkQnl0ZXMoZmlsZURhdGEsIGZpbGVEYXRhU2l6ZSk7CisgICAgc2hh
MS5hZGRCeXRlcyhmaWxlRGF0YS5maXJzdChmaWxlRGF0YVNpemUpKTsKICAgICBzaGExLmNvbXB1
dGVIYXNoKGNvbXB1dGVkSGFzaCk7CiAKICAgICBTSEExOjpEaWdlc3QgZmlsZUhhc2g7Ci0gICAg
bWVtY3B5KCZmaWxlSGFzaCwgZmlsZURhdGEgKyBmaWxlRGF0YVNpemUsIHNpemVvZihTSEExOjpE
aWdlc3QpKTsKKyAgICBtZW1jcHkoJmZpbGVIYXNoLCBmaWxlRGF0YS5kYXRhKCkgKyBmaWxlRGF0
YVNpemUsIHNpemVvZihTSEExOjpEaWdlc3QpKTsKIAogICAgIGlmIChjb21wdXRlZEhhc2ggIT0g
ZmlsZUhhc2gpIHsKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShjYWNoZUZpbGVuYW1l
KTsKQEAgLTM0Myw3ICszNDIsNyBAQCAtIChCT09MKXdyaXRlQ2FjaGU6KFN0cmluZyYpZXJyb3IK
IAogICAgIFNIQTE6OkRpZ2VzdCBjb21wdXRlZEhhc2g7CiAgICAgU0hBMSBzaGExOwotICAgIHNo
YTEuYWRkQnl0ZXMobV9jYWNoZWRCeXRlY29kZS0+ZGF0YSgpLCBtX2NhY2hlZEJ5dGVjb2RlLT5z
aXplKCkpOworICAgIHNoYTEuYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgbV9jYWNoZWRCeXRlY29k
ZS0+ZGF0YSgpLCBtX2NhY2hlZEJ5dGVjb2RlLT5zaXplKCkgfSkpOwogICAgIHNoYTEuY29tcHV0
ZUhhc2goY29tcHV0ZWRIYXNoKTsKICAgICBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZSh0ZW1wRkQs
IGNvbXB1dGVkSGFzaC5kYXRhKCksIHNpemVvZihjb21wdXRlZEhhc2gpKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0hhc2guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tIYXNoLmNwcAkocmV2
aXNpb24gMjc4NzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
a0hhc2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MiwxMCArNjIsMTAgQEAgQ29kZUJsb2NrSGFz
aDo6Q29kZUJsb2NrSGFzaChjb25zdCBTb3VyYwogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBz
dHIubGVuZ3RoKCk7CiAgICAgICAgIHVuc2lnbmVkIHN0ZXAgPSAobGVuZ3RoID4+IDEwKSArIDE7
CiAKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KCZsZW5ndGgp
LCBzaXplb2YobGVuZ3RoKSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsg
Jmxlbmd0aCwgMSB9KSk7CiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIFVDaGFyIGNoYXJhY3Rl
ciA9IHN0cltpbmRleF07Ci0gICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGJpdHdpc2VfY2FzdDx1
aW50OF90Kj4oJmNoYXJhY3RlciksIHNpemVvZihjaGFyYWN0ZXIpKTsKKyAgICAgICAgICAgIHNo
YTEuYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgJmNoYXJhY3RlciwgMSB9KSk7CiAgICAgICAgICAg
ICBvbGRJbmRleCA9IGluZGV4OwogICAgICAgICAgICAgaW5kZXggKz0gc3RlcDsKICAgICAgICAg
fSB3aGlsZSAoaW5kZXggPiBvbGRJbmRleCAmJiBpbmRleCA8IGxlbmd0aCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1JlbW90ZUluc3BlY3RvclV0
aWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Jl
bW90ZS9nbGliL1JlbW90ZUluc3BlY3RvclV0aWxzLmNwcAkocmV2aXNpb24gMjc4NzEzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0
b3JVdGlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgY29uc3QgQ1N0cmlu
ZyYgYmFja2VuZENvbW1hbmRzSGFzaCgpCiAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSA9IGdf
Ynl0ZXNfZ2V0X2RhdGEoYnl0ZXMuZ2V0KCksICZkYXRhU2l6ZSk7CiAgICAgICAgIEFTU0VSVChk
YXRhU2l6ZSk7CiAgICAgICAgIFNIQTEgc2hhMTsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhzdGF0
aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSksIGRhdGFTaXplKTsKKyAgICAgICAgc2hhMS5h
ZGRCeXRlcyhhc0J5dGVzKCBTcGFuIHsgZGF0YSwgZGF0YVNpemUgfSkpOwogICAgICAgICBoZXhE
aWdlc3QgPSBzaGExLmNvbXB1dGVIZXhEaWdlc3QoKTsKICAgICB9CiAgICAgcmV0dXJuIGhleERp
Z2VzdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIu
aAkocmV2aXNpb24gMjc4NzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPHd0
Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogI2luY2x1ZGUgPHd0Zi9QYWNrZWRSZWZQdHIuaD4KICNp
bmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRl
ZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtODAsNyArODEsMTAgQEAg
cHVibGljOgogICAgIAogICAgIHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuZ2V0
TWF5QmVOdWxsKHNpemVJbkJ5dGVzKCkpOyB9CiAgICAgdW5zaWduZWQgc2l6ZUluQnl0ZXMoKSBj
b25zdCB7IHJldHVybiBtX3NpemVJbkJ5dGVzOyB9Ci0gICAgCisKKyAgICBTcGFuPHN0ZDo6Ynl0
ZT4gd3JpdGFibGVCeXRlcygpIHsgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8c3RkOjpieXRlKj4oZGF0
YSgpKSwgc2l6ZUluQnl0ZXMoKSB9OyB9CisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGJ5dGVz
KCkgY29uc3QgeyByZXR1cm4geyBzdGF0aWNfY2FzdDxjb25zdCBzdGQ6OmJ5dGUqPihkYXRhKCkp
LCBzaXplSW5CeXRlcygpIH07IH0KKwogICAgIGJvb2wgaXNTaGFyZWQoKSBjb25zdCB7IHJldHVy
biBtX3NoYXJlZDsgfQogICAgIAogcHJpdmF0ZToKQEAgLTEyNyw3ICsxMzEsOSBAQCBwdWJsaWM6
CiAgICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKICAgICBpbmxpbmUgY29uc3Qgdm9pZCogZGF0YSgp
IGNvbnN0OwogICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7Ci0gICAgCisg
ICAgaW5saW5lIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCk7CisgICAgaW5saW5lIFNw
YW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAgICAgdm9pZCBtYWtlU2hhcmVk
KCk7CiAgICAgdm9pZCBzZXRTaGFyaW5nTW9kZShBcnJheUJ1ZmZlclNoYXJpbmdNb2RlKTsKICAg
ICBpbmxpbmUgYm9vbCBpc1NoYXJlZCgpIGNvbnN0OwpAQCAtMTk3LDYgKzIwMywxNiBAQCB1bnNp
Z25lZCBBcnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fY29udGVu
dHMuc2l6ZUluQnl0ZXMoKTsKIH0KIAorU3BhbjxzdGQ6OmJ5dGU+IEFycmF5QnVmZmVyOjp3cml0
YWJsZUJ5dGVzKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZW50cy53cml0YWJsZUJ5dGVzKCk7Cit9
CisKK1NwYW48Y29uc3Qgc3RkOjpieXRlPiBBcnJheUJ1ZmZlcjo6Ynl0ZXMoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2NvbnRlbnRzLmJ5dGVzKCk7Cit9CisKIGJvb2wgQXJyYXlCdWZmZXI6Omlz
U2hhcmVkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb250ZW50cy5pc1NoYXJlZCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmgJ
KHJldmlzaW9uIDI3ODcxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4Niw5IEBAIHB1YmxpYzoKIAog
ICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVMZW5ndGg7IH0K
IAorICAgIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCkgeyByZXR1cm4geyBzdGF0aWNf
Y2FzdDxzdGQ6OmJ5dGUqPihkYXRhKCkpLCBieXRlTGVuZ3RoKCkgfTsgfQorICAgIFNwYW48Y29u
c3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0IHsgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8Y29uc3Qg
c3RkOjpieXRlKj4oZGF0YSgpKSwgYnl0ZUxlbmd0aCgpIH07IH0KKwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgc2V0RGV0YWNoYWJsZShib29sKTsKICAgICBib29sIGlzRGV0YWNoYWJsZSgp
IGNvbnN0IHsgcmV0dXJuIG1faXNEZXRhY2hhYmxlOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NhY2hlUGF5bG9hZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNwcAkocmV2aXNpb24gMjc4NzEzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsMjcgKzMwLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogCiBDYWNoZVBheWxv
YWQgQ2FjaGVQYXlsb2FkOjptYWtlTWFwcGVkUGF5bG9hZChGaWxlU3lzdGVtOjpNYXBwZWRGaWxl
RGF0YSYmIGRhdGEpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZCh0cnVlLCBkYXRhLmxlYWtI
YW5kbGUoKSwgZGF0YS5zaXplKCkpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQodHJ1ZSwgZGF0
YS5sZWFrSGFuZGxlKCkpOwogfQogCiBDYWNoZVBheWxvYWQgQ2FjaGVQYXlsb2FkOjptYWtlTWFs
bG9jUGF5bG9hZChNYWxsb2NQdHI8dWludDhfdCwgVk1NYWxsb2M+JiYgZGF0YSwgc2l6ZV90IHNp
emUpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZChmYWxzZSwgZGF0YS5sZWFrUHRyKCksIHNp
emUpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQoZmFsc2UsIGFzV3JpdGFibGVCeXRlcyhTcGFu
IHsgZGF0YS5sZWFrUHRyKCksIHNpemUgfSkpOwogfQogCiBDYWNoZVBheWxvYWQgQ2FjaGVQYXls
b2FkOjptYWtlRW1wdHlQYXlsb2FkKCkKIHsKLSAgICByZXR1cm4gQ2FjaGVQYXlsb2FkKHRydWUs
IG51bGxwdHIsIDApOworICAgIHJldHVybiBDYWNoZVBheWxvYWQodHJ1ZSwgeyB9KTsKIH0KIAog
Q2FjaGVQYXlsb2FkOjpDYWNoZVBheWxvYWQoQ2FjaGVQYXlsb2FkJiYgb3RoZXIpCiB7Ci0gICAg
bV9tYXBwZWQgPSBvdGhlci5tX21hcHBlZDsKLSAgICBtX3NpemUgPSBvdGhlci5tX3NpemU7Ci0g
ICAgbV9kYXRhID0gb3RoZXIubV9kYXRhOwotICAgIG90aGVyLm1fbWFwcGVkID0gZmFsc2U7Ci0g
ICAgb3RoZXIubV9kYXRhID0gbnVsbHB0cjsKLSAgICBvdGhlci5tX3NpemUgPSAwOworICAgIG1f
bWFwcGVkID0gc3RkOjpleGNoYW5nZShvdGhlci5tX21hcHBlZCwgZmFsc2UpOworICAgIG1fZGF0
YSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLCB7IH0pOwogfQogCiBDYWNoZVBheWxvYWQ6
On5DYWNoZVBheWxvYWQoKQpAQCAtNjcsMTIgKzYzLDEzIEBAIENhY2hlUGF5bG9hZCYgQ2FjaGVQ
YXlsb2FkOjpvcGVyYXRvcj0oQ2EKIAogdm9pZCBDYWNoZVBheWxvYWQ6OmZyZWVEYXRhKCkKIHsK
LSAgICBpZiAoIW1fZGF0YSkKKyAgICBpZiAoIW1fZGF0YS5kYXRhKCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBpZiAobV9tYXBwZWQpIHsKLSAgICAgICAgRmlsZVN5c3RlbTo6dW5tYXBWaWV3T2ZG
aWxlKG1fZGF0YSwgbV9zaXplKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZmFzdEZyZWUobV9kYXRh
KTsKKworICAgIGlmIChtX21hcHBlZCkKKyAgICAgICAgRmlsZVN5c3RlbTo6dW5tYXBWaWV3T2ZG
aWxlKG1fZGF0YSk7CisgICAgZWxzZQorICAgICAgICBmYXN0RnJlZShtX2RhdGEuZGF0YSgpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWNoZVBheWxvYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYWNoZVBheWxvYWQuaAkocmV2aXNpb24gMjc4NzEzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDcgQEAKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CiAj
aW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewogCkBAIC00MSwyMiArNDIsMjAgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIH5DYWNoZVBheWxvYWQoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBDYWNoZVBheWxv
YWQmIG9wZXJhdG9yPShDYWNoZVBheWxvYWQmJiBvdGhlcik7CiAKLSAgICBjb25zdCB1aW50OF90
KiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgc2l6ZV90IHNpemUoKSBjb25z
dCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBjb25zdCB1aW50OF90KiBkYXRhKCkgY29uc3QgeyBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9kYXRhLmRhdGEoKSk7IH0KKyAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5zaXplKCk7IH0KIAogcHJpdmF0ZToK
LSAgICBDYWNoZVBheWxvYWQoYm9vbCBtYXBwZWQsIHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKQor
ICAgIENhY2hlUGF5bG9hZChib29sIG1hcHBlZCwgU3BhbjxzdGQ6OmJ5dGU+IGRhdGEpCiAgICAg
ICAgIDogbV9tYXBwZWQobWFwcGVkKQotICAgICAgICAsIG1fc2l6ZShzaXplKQotICAgICAgICAs
IG1fZGF0YShzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGF0YSkpCisgICAgICAgICwgbV9kYXRhKGRh
dGEpCiAgICAgewogICAgIH0KIAogICAgIHZvaWQgZnJlZURhdGEoKTsKIAogICAgIGJvb2wgbV9t
YXBwZWQ7Ci0gICAgc2l6ZV90IG1fc2l6ZTsKLSAgICB1aW50OF90KiBtX2RhdGE7CisgICAgU3Bh
bjxzdGQ6OmJ5dGU+IG1fZGF0YTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAJ
KHJldmlzaW9uIDI3ODcxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TdHJl
YW1pbmdQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNyArMjYxLDcgQEAgYXV0byBT
dHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKGNvbnN0IHVpbgogICAgIH0KIAogICAgIGlmIChVTkxJ
S0VMWShPcHRpb25zOjp1c2VFYWdlcldlYkFzc2VtYmx5TW9kdWxlSGFzaGluZygpKSkKLSAgICAg
ICAgbV9oYXNoZXIuYWRkQnl0ZXMoYnl0ZXMsIGJ5dGVzU2l6ZSk7CisgICAgICAgIG1faGFzaGVy
LmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7IGJ5dGVzLCBieXRlc1NpemUgfSApKTsKIAogICAgIHNp
emVfdCBvZmZzZXRJbkJ5dGVzID0gMDsKICAgICB3aGlsZSAodHJ1ZSkgewpJbmRleDogU291cmNl
L1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlz
aW9uIDI3ODcxMykKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsNjggQEAKKzIwMjEtMDYtMTAgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgor
CisgICAgICAgIEFkb3B0IFNwYW4gaW4gbW9yZSBwbGFjZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjg4NworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtXSVBdCisKKyAgICAgICAgKiBXVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvRmlsZVN5c3RlbS5jcHA6CisgICAg
ICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpNYXBwZWRGaWxlRGF0YTo6fk1hcHBlZEZpbGVEYXRh
KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjptYXBGaWxl
SGFuZGxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OnVubWFwVmlld09mRmlsZSk6
CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjptYXBUb0ZpbGUpOgorICAgICAgICAqIHd0
Zi9GaWxlU3lzdGVtLmg6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpNYXBwZWRGaWxl
RGF0YTo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBs
OjpNYXBwZWRGaWxlRGF0YTo6ZGF0YSBjb25zdCk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1J
bXBsOjpNYXBwZWRGaWxlRGF0YTo6bGVha0hhbmRsZSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0
ZW1JbXBsOjpNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEpOgorICAgICAgICAoV1RGOjpG
aWxlU3lzdGVtSW1wbDo6TWFwcGVkRmlsZURhdGE6Om9wZXJhdG9yPSk6CisgICAgICAgIChXVEY6
OkZpbGVTeXN0ZW1JbXBsOjpNYXBwZWRGaWxlRGF0YTo6c2l6ZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9TSEExLmNwcDoKKyAgICAgICAgKFdU
Rjo6U0hBMTo6YWRkQnl0ZXMpOgorICAgICAgICAoV1RGOjpTSEExOjpmaW5hbGl6ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OlNIQTE6OnByb2Nlc3NCbG9jayk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OlNIQTE6OnJlc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6U0hBMTo6aGV4RGln
ZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6U0hBMTo6Y29tcHV0ZUhleERpZ2VzdCk6IERl
bGV0ZWQuCisgICAgICAgICogd3RmL1NIQTEuaDoKKyAgICAgICAgKFdURjo6U0hBMTo6YWRkQnl0
ZXMpOgorICAgICAgICAqIHd0Zi9WZWN0b3IuaDoKKyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2Uv
UGVyc2lzdGVudENvZGVycy5jcHA6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxD
U3RyaW5nPjo6ZW5jb2RlKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPENTdHJp
bmc+OjpkZWNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8U3RyaW5nPjo6
ZW5jb2RlKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OmRlY29kZVN0cmluZ1RleHQpOgor
ICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKToK
KyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29kZSk6
CisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaDoKKyAgICAgICAg
KiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwOgorICAgICAgICAoV1RGOjpQ
ZXJzaXN0ZW5jZTo6RGVjb2Rlcjo6RGVjb2Rlcik6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNl
OjpEZWNvZGVyOjpidWZmZXJQb2ludGVyRm9yRGlyZWN0UmVhZCk6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAoV1RG
OjpQZXJzaXN0ZW5jZTo6RGVjb2Rlcjo6dmVyaWZ5Q2hlY2tzdW0pOgorICAgICAgICAoV1RGOjpQ
ZXJzaXN0ZW5jZTo6RGVjb2Rlcjo6fkRlY29kZXIpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9w
ZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oOgorICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5j
ZS9QZXJzaXN0ZW50RW5jb2Rlci5jcHA6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNv
ZGVyOjpncm93KToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6OnVwZGF0ZUNo
ZWNrc3VtRm9yRGF0YSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjplbmNv
ZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6
ZW5jb2RlTnVtYmVyKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6OmVuY29k
ZUNoZWNrc3VtKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6OkVuY29kZXIp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6fkVuY29kZXIp
OiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5o
OgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6YnVmZmVyIGNvbnN0KToKKyAg
ICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVy
KToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6OmJ1ZmZlclNpemUgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAqIHd0Zi90ZXh0L0Jhc2U2NC5oOgorICAgICAgICAoV1RGOjpi
YXNlNjRFbmNvZGVUb1ZlY3Rvcik6CisgICAgICAgIChXVEY6OmJhc2U2NEVuY29kZVRvU3RyaW5n
KToKKyAgICAgICAgKiB3dGYvdGV4dC9DU3RyaW5nLmg6CisKIDIwMjEtMDYtMDkgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBBdm9pZCBzb21lIGNhbGxzIHRvIFN0
cmluZ1ZpZXc6OnRvU3RyaW5nKCkgLyBTdHJpbmdWaWV3Ojp0b1N0cmluZ1dpdGhvdXRDb3B5aW5n
KCkKSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjc4NzEzKQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMTI1Nyw4ICsxMjU3LDkgQEAKIAkJCQk3OTM2RDZBOTFDOTlGOEFF
MDAwRDFBRUQgLyogU21hbGxTZXQuaCAqLywKIAkJCQlBMzBENDEyRDFGMERFMTNGMDBCNzE5NTQg
LyogU29mdExpbmtpbmcuaCAqLywKIAkJCQk5MzE1NkM4RDI2MkM5ODIyMDBFQUUyN0IgLyogU29y
dGVkQXJyYXlNYXAuaCAqLywKLQkJCQk3OTAzOEUwNTIyNEIwNUE3MDA0QzA3MzggLyogU3Bhbm5p
bmdUcmVlLmggKi8sCiAJCQkJQkNBMzBDN0YyNjZEMzAzNDAwMEQyMzBDIC8qIFNwYW4uaCAqLywK
KwkJCQlCQ0EzMEM3RjI2NkQzMDM0MDAwRDIzMEMgLyogU3Bhbi5oICovLAorCQkJCTc5MDM4RTA1
MjI0QjA1QTcwMDRDMDczOCAvKiBTcGFubmluZ1RyZWUuaCAqLywKIAkJCQlBOEE0NzMwRDE1MUE4
MjVCMDA0MTIzRkYgLyogU3BlY3RydW0uaCAqLywKIAkJCQlBOEE0NzMwRTE1MUE4MjVCMDA0MTIz
RkYgLyogU3RhY2tCb3VuZHMuY3BwICovLAogCQkJCUE4QTQ3MzBGMTUxQTgyNUIwMDQxMjNGRiAv
KiBTdGFja0JvdW5kcy5oICovLApJbmRleDogU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAJKHJldmlzaW9uIDI3
ODcxMykKKysrIFNvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMTksOSArMzE5LDkgQEAgYm9vbCBleGNsdWRlRnJvbUJhY2t1cChjb25zdCBTdHJpbmcmKQog
CiBNYXBwZWRGaWxlRGF0YTo6fk1hcHBlZEZpbGVEYXRhKCkKIHsKLSAgICBpZiAoIW1fZmlsZURh
dGEpCisgICAgaWYgKCFtX2ZpbGVEYXRhLmRhdGEoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHVu
bWFwVmlld09mRmlsZShtX2ZpbGVEYXRhLCBtX2ZpbGVTaXplKTsKKyAgICB1bm1hcFZpZXdPZkZp
bGUobV9maWxlRGF0YSk7CiB9CiAKIE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShjb25z
dCBTdHJpbmcmIGZpbGVQYXRoLCBNYXBwZWRGaWxlTW9kZSBtYXBNb2RlLCBib29sJiBzdWNjZXNz
KQpAQCAtMzgzLDE0ICszODMsMTMgQEAgYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRs
ZShQbGF0ZgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgbV9maWxlRGF0YSA9
IGRhdGE7Ci0gICAgbV9maWxlU2l6ZSA9IHNpemU7CisgICAgbV9maWxlRGF0YSA9IFNwYW4geyBy
ZWludGVycHJldF9jYXN0PHN0ZDo6Ynl0ZSo+KGRhdGEpLCBzaXplIH07CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWJvb2wgdW5tYXBWaWV3T2ZGaWxlKHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHNpemUp
Citib29sIHVubWFwVmlld09mRmlsZShTcGFuPHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKLSAgICByZXR1
cm4gIW11bm1hcChidWZmZXIsIHNpemUpOworICAgIHJldHVybiAhbXVubWFwKGRhdGEuZGF0YSgp
LCBkYXRhLnNpemUoKSk7CiB9CiAKICNlbmRpZgpAQCAtNDM4LDcgKzQzNyw3IEBAIFN0cmluZyBj
cmVhdGVUZW1wb3JhcnlaaXBBcmNoaXZlKGNvbnN0IFMKIH0KICNlbmRpZgogCi1NYXBwZWRGaWxl
RGF0YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBzaXplX3QgYnl0ZXNTaXplLCBGdW5j
dGlvbjx2b2lkKGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCosIHNpemVfdCk+Jik+
JiYgYXBwbHksIFBsYXRmb3JtRmlsZUhhbmRsZSogb3V0cHV0SGFuZGxlKQorTWFwcGVkRmlsZURh
dGEgbWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVuY3Rp
b248dm9pZChjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+Jik+JiYg
YXBwbHksIFBsYXRmb3JtRmlsZUhhbmRsZSogb3V0cHV0SGFuZGxlKQogewogICAgIGNvbnN0ZXhw
ciBib29sIGZhaWxJZkZpbGVFeGlzdHMgPSB0cnVlOwogICAgIGF1dG8gaGFuZGxlID0gRmlsZVN5
c3RlbTo6b3BlbkZpbGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkV3JpdGUs
IEZpbGVTeXN0ZW06OkZpbGVBY2Nlc3NQZXJtaXNzaW9uOjpVc2VyLCBmYWlsSWZGaWxlRXhpc3Rz
KTsKQEAgLTQ1NSwxMiArNDU0LDEyIEBAIE1hcHBlZEZpbGVEYXRhIG1hcFRvRmlsZShjb25zdCBT
dHJpbmcmIHAKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICB2b2lkKiBtYXAgPSBj
b25zdF9jYXN0PHZvaWQqPihtYXBwZWRGaWxlLmRhdGEoKSk7Ci0gICAgdWludDhfdCogbWFwRGF0
YSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtYXApOworICAgIGF1dG8gbWFwID0gbWFwcGVkRmls
ZS5kYXRhKCkuZGF0YSgpOworICAgIGF1dG8gbWFwRGF0YSA9IG1hcDsKIAotICAgIGFwcGx5KFsm
bWFwRGF0YV0oY29uc3QgdWludDhfdCogY2h1bmssIHNpemVfdCBjaHVua1NpemUpIHsKLSAgICAg
ICAgbWVtY3B5KG1hcERhdGEsIGNodW5rLCBjaHVua1NpemUpOwotICAgICAgICBtYXBEYXRhICs9
IGNodW5rU2l6ZTsKKyAgICBhcHBseShbJm1hcERhdGFdKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBj
aHVuaykgeworICAgICAgICBtZW1jcHkobWFwRGF0YSwgY2h1bmsuZGF0YSgpLCBjaHVuay5zaXpl
KCkpOworICAgICAgICBtYXBEYXRhICs9IGNodW5rLnNpemUoKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfSk7CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgJKHJldmlzaW9uIDI3ODcxMykKKysr
IFNvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQs
NyBAQAogI2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNs
dWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL1dhbGxUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CkBAIC0yMTAsNyArMjExLDcgQEAgV1RGX0VYUE9SVF9QUklWQVRFIFN0
cmluZyByZWFsUGF0aChjb25zdAogV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNTYWZlVG9Vc2VN
ZW1vcnlNYXBGb3JQYXRoKGNvbnN0IFN0cmluZyYpOwogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQg
bWFrZVNhZmVUb1VzZU1lbW9yeU1hcEZvclBhdGgoY29uc3QgU3RyaW5nJik7CiAKLVdURl9FWFBP
UlRfUFJJVkFURSBib29sIHVubWFwVmlld09mRmlsZSh2b2lkKiBidWZmZXIsIHNpemVfdCk7CitX
VEZfRVhQT1JUX1BSSVZBVEUgYm9vbCB1bm1hcFZpZXdPZkZpbGUoU3BhbjxzdGQ6OmJ5dGU+KTsK
IAogY2xhc3MgTWFwcGVkRmlsZURhdGEgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpA
QCAtMjIzLDE3ICsyMjQsMTUgQEAgcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSB+TWFw
cGVkRmlsZURhdGEoKTsKICAgICBNYXBwZWRGaWxlRGF0YSYgb3BlcmF0b3I9KE1hcHBlZEZpbGVE
YXRhJiYpOwogCi0gICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEh
bV9maWxlRGF0YTsgfQotICAgIGNvbnN0IHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2Zp
bGVEYXRhOyB9Ci0gICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZVNpemU7
IH0KKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2ZpbGVE
YXRhLmRhdGEoKTsgfQorICAgIFNwYW48c3RkOjpieXRlPiBkYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9maWxlRGF0YTsgfQogCi0gICAgdm9pZCogbGVha0hhbmRsZSgpIHsgcmV0dXJuIHN0ZDo6ZXhj
aGFuZ2UobV9maWxlRGF0YSwgbnVsbHB0cik7IH0KKyAgICBXQVJOX1VOVVNFRF9SRVRVUk4gU3Bh
bjxzdGQ6OmJ5dGU+IGxlYWtIYW5kbGUoKSB7IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fZmlsZURh
dGEsIHsgfSk7IH0KIAogcHJpdmF0ZToKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBtYXBG
aWxlSGFuZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgRmlsZU9wZW5Nb2RlLCBNYXBwZWRGaWxlTW9k
ZSk7CiAKLSAgICB2b2lkKiBtX2ZpbGVEYXRhIHsgbnVsbHB0ciB9OwotICAgIHVuc2lnbmVkIG1f
ZmlsZVNpemUgeyAwIH07CisgICAgU3BhbjxzdGQ6OmJ5dGU+IG1fZmlsZURhdGE7CiB9OwogCiBp
bmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKFBsYXRmb3JtRmlsZUhhbmRsZSBo
YW5kbGUsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUsIGJvb2wmIHN1Y2Nlc3MpCkBAIC0yNDcsMjEg
KzI0NiwxOSBAQCBpbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKFBsCiB9CiAK
IGlubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoTWFwcGVkRmlsZURhdGEmJiBv
dGhlcikKLSAgICA6IG1fZmlsZURhdGEoc3RkOjpleGNoYW5nZShvdGhlci5tX2ZpbGVEYXRhLCBu
dWxscHRyKSkKLSAgICAsIG1fZmlsZVNpemUoc3RkOjpleGNoYW5nZShvdGhlci5tX2ZpbGVTaXpl
LCAwKSkKKyAgICA6IG1fZmlsZURhdGEoc3RkOjpleGNoYW5nZShvdGhlci5tX2ZpbGVEYXRhLCB7
IH0pKQogewogfQogCiBpbmxpbmUgTWFwcGVkRmlsZURhdGEmIE1hcHBlZEZpbGVEYXRhOjpvcGVy
YXRvcj0oTWFwcGVkRmlsZURhdGEmJiBvdGhlcikKIHsKLSAgICBtX2ZpbGVEYXRhID0gc3RkOjpl
eGNoYW5nZShvdGhlci5tX2ZpbGVEYXRhLCBudWxscHRyKTsKLSAgICBtX2ZpbGVTaXplID0gc3Rk
OjpleGNoYW5nZShvdGhlci5tX2ZpbGVTaXplLCAwKTsKKyAgICBtX2ZpbGVEYXRhID0gc3RkOjpl
eGNoYW5nZShvdGhlci5tX2ZpbGVEYXRhLCB7IH0pOwogICAgIHJldHVybiAqdGhpczsKIH0KIAog
Ly8gVGhpcyBjcmVhdGVzIHRoZSBkZXN0aW5hdGlvbiBmaWxlLCBtYXBzIGl0LCB3cml0ZSB0aGUg
cHJvdmlkZWQgZGF0YSB0byBpdCBhbmQgcmV0dXJucyB0aGUgbWFwcGVkIGZpbGUuCiAvLyBUaGlz
IGZ1bmN0aW9uIGZhaWxzIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBmaWxlIGF0IHRoZSBkZXN0aW5h
dGlvbiBwYXRoLgotV1RGX0VYUE9SVF9QUklWQVRFIE1hcHBlZEZpbGVEYXRhIG1hcFRvRmlsZShj
b25zdCBTdHJpbmcmIHBhdGgsIHNpemVfdCBieXRlc1NpemUsIEZ1bmN0aW9uPHZvaWQoY29uc3Qg
RnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mKT4mJiBhcHBseSwgUGxhdGZv
cm1GaWxlSGFuZGxlKiA9IG51bGxwdHIpOworV1RGX0VYUE9SVF9QUklWQVRFIE1hcHBlZEZpbGVE
YXRhIG1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIHNpemVfdCBieXRlc1NpemUsIEZ1bmN0
aW9uPHZvaWQoY29uc3QgRnVuY3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYpPiYm
IGFwcGx5LCBQbGF0Zm9ybUZpbGVIYW5kbGUqID0gbnVsbHB0cik7CiAKIH0gLy8gbmFtZXNwYWNl
IEZpbGVTeXN0ZW1JbXBsCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L1NIQTEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NIQTEuY3BwCShyZXZpc2lv
biAyNzg3MTMpCisrKyBTb3VyY2UvV1RGL3d0Zi9TSEExLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDYsMTAgKzQ2LDEwIEBAIFNIQTE6OlNIQTEoKQogICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFS
QVRJT05TX0VORAogfQogCi12b2lkIFNIQTE6OmFkZEJ5dGVzKGNvbnN0IHVpbnQ4X3QqIGlucHV0
LCBzaXplX3QgbGVuZ3RoKQordm9pZCBTSEExOjphZGRCeXRlcyhTcGFuPGNvbnN0IHN0ZDo6Ynl0
ZT4gaW5wdXQpCiB7CiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAg
ICBDQ19TSEExX1VwZGF0ZSgmbV9jb250ZXh0LCBpbnB1dCwgbGVuZ3RoKTsKKyAgICBDQ19TSEEx
X1VwZGF0ZSgmbV9jb250ZXh0LCBpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSk7CiAgICAgQUxM
T1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiB9CiAKQEAgLTEwMSwxMSArMTAxLDExIEBA
IFNIQTE6OlNIQTEoKQogICAgIHJlc2V0KCk7CiB9CiAKLXZvaWQgU0hBMTo6YWRkQnl0ZXMoY29u
c3QgdWludDhfdCogaW5wdXQsIHNpemVfdCBsZW5ndGgpCit2b2lkIFNIQTE6OmFkZEJ5dGVzKFNw
YW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCkKIHsKLSAgICB3aGlsZSAobGVuZ3RoLS0pIHsKKyAg
ICBmb3IgKGF1dG8gYnl0ZSA6IGlucHV0KQogICAgICAgICBBU1NFUlQobV9jdXJzb3IgPCA2NCk7
Ci0gICAgICAgIG1fYnVmZmVyW21fY3Vyc29yKytdID0gKmlucHV0Kys7CisgICAgICAgIG1fYnVm
ZmVyW21fY3Vyc29yKytdID0gc3RkOjp0b19pbnRlZ2VyPHVpbnQ4X3Q+KGJ5dGUpOwogICAgICAg
ICArK21fdG90YWxCeXRlczsKICAgICAgICAgaWYgKG1fY3Vyc29yID09IDY0KQogICAgICAgICAg
ICAgcHJvY2Vzc0Jsb2NrKCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TSEExLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvU0hBMS5oCShyZXZpc2lvbiAyNzg3MTMpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9TSEExLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSA8YXJyYXk+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCkBAIC00NSwx
NSArNDYsOCBAQCBjbGFzcyBTSEExIHsKIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
U0hBMSgpOwogCi0gICAgdm9pZCBhZGRCeXRlcyhjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0
KQotICAgIHsKLSAgICAgICAgYWRkQnl0ZXMoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkpOwot
ICAgIH0KLSAgICB2b2lkIGFkZEJ5dGVzKGNvbnN0IENTdHJpbmcmIGlucHV0KQotICAgIHsKLSAg
ICAgICAgYWRkQnl0ZXMoaW5wdXQuZGF0YUFzVUludDhQdHIoKSwgaW5wdXQubGVuZ3RoKCkpOwot
ICAgIH0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRCeXRlcyhjb25zdCB1aW50OF90
KiBpbnB1dCwgc2l6ZV90IGxlbmd0aCk7CisgICAgdm9pZCBhZGRCeXRlcyhjb25zdCBDU3RyaW5n
JiBpbnB1dCkgeyBhZGRCeXRlcyhpbnB1dC5ieXRlcygpKTsgfQorICAgIFdURl9FWFBPUlRfUFJJ
VkFURSB2b2lkIGFkZEJ5dGVzKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAKICAgICAvLyBTaXpl
IG9mIHRoZSBTSEExIGhhc2gKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGNvbnN0ZXhw
ciBzaXplX3QgaGFzaFNpemUgPSAyMDsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCShyZXZpc2lvbiAyNzg3MTMpCisr
KyBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjEzLDYgKzYxMyw3
IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKICAgICB0eXBlZGVmIFQgVmFsdWVUeXBlOworICAgIHR5
cGVkZWYgVCB2YWx1ZV90eXBlOwogCiAgICAgdHlwZWRlZiBUKiBpdGVyYXRvcjsKICAgICB0eXBl
ZGVmIGNvbnN0IFQqIGNvbnN0X2l0ZXJhdG9yOwpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lz
dGVuY2UvUGVyc2lzdGVudENvZGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
cGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5jcHAJKHJldmlzaW9uIDI3ODcxMykKKysrIFNv
dXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgQ29kZXI8Q1N0cmluZz46OmVuY29kZShFbmNvZGVy
JiBlbmMKIAogICAgIHVpbnQzMl90IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKICAgICBlbmNv
ZGVyIDw8IGxlbmd0aDsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShzdHJpbmcu
ZGF0YUFzVUludDhQdHIoKSwgbGVuZ3RoKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3Ro
RGF0YSh7IHN0cmluZy5kYXRhQXNVSW50OFB0cigpLCBsZW5ndGggfSk7CiB9CiAKIHN0ZDo6b3B0
aW9uYWw8Q1N0cmluZz4gQ29kZXI8Q1N0cmluZz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQpA
QCAtNzgsNyArNzgsNyBAQCBzdGQ6Om9wdGlvbmFsPENTdHJpbmc+IENvZGVyPENTdHJpbmc+Ojpk
CiAKICAgICBjaGFyKiBidWZmZXI7CiAgICAgQ1N0cmluZyBzdHJpbmcgPSBDU3RyaW5nOjpuZXdV
bmluaXRpYWxpemVkKCpsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUZp
eGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIpLCAqbGVuZ3Ro
KSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHsgcmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgKmxlbmd0aCB9KSkKICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKIAogICAgIHJldHVybiBzdHJpbmc7CkBAIC05OCw5ICs5OCw5IEBAIHZvaWQgQ29k
ZXI8U3RyaW5nPjo6ZW5jb2RlKEVuY29kZXImIGVuY28KICAgICBlbmNvZGVyIDw8IGxlbmd0aCA8
PCBpczhCaXQ7CiAKICAgICBpZiAoaXM4Qml0KQotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVk
TGVuZ3RoRGF0YShzdHJpbmcuY2hhcmFjdGVyczgoKSwgbGVuZ3RoKTsKKyAgICAgICAgZW5jb2Rl
ci5lbmNvZGVGaXhlZExlbmd0aERhdGEoeyBzdHJpbmcuY2hhcmFjdGVyczgoKSwgbGVuZ3RoIH0p
OwogICAgIGVsc2UKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnMxNigpKSwgbGVuZ3Ro
ICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KHsgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnMxNigp
KSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSB9KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+CkBAIC0xMTIsNyArMTEyLDcgQEAgc3RhdGljIGlubGluZSBzdGQ6Om9wdGlv
bmFsPFN0cmluZz4gZGVjbwogCiAgICAgQ2hhcmFjdGVyVHlwZSogYnVmZmVyOwogICAgIFN0cmlu
ZyBzdHJpbmcgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwot
ICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJhY3RlclR5cGUpKSkKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHsgcmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJhY3RlclR5cGUpIH0pKQogICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIAogICAgIHJldHVybiBzdHJpbmc7CkBAIC0xNDIs
MTMgKzE0MiwxMyBAQCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gQ29kZXI8U3RyaW5nPjo6ZGVjCiAK
IHZvaWQgQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0
IFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQogewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZp
eGVkTGVuZ3RoRGF0YShkaWdlc3QpOwogfQogCiBzdGQ6Om9wdGlvbmFsPFNIQTE6OkRpZ2VzdD4g
Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgU0hB
MTo6RGlnZXN0IHRtcDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHRt
cC5kYXRhKCksIHNpemVvZih0bXApKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5n
dGhEYXRhKHRtcCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgcmV0dXJuIHRt
cDsKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29k
ZXJzLmgJKHJldmlzaW9uIDI3ODcxMykKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1Bl
cnNpc3RlbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw3IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICBzdGF0aWMgdm9pZCBlbmNv
ZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVj
dG9yKQogICAgIHsKICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odmVj
dG9yLnNpemUoKSk7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6ZSgp
ICogc2l6ZW9mKFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoeyBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih2ZWN0b3IuZGF0YSgpKSwgdmVjdG9yLnNp
emUoKSAqIHNpemVvZihUKSB9KTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIHN0ZDo6b3B0aW9u
YWw8VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCkBA
IC0xNzMsNyArMTczLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFj
aQogICAgICAgICBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IHRlbXA7CiAgICAgICAgIHRlbXAu
Z3JvdyhzaXplKTsKIAotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHRlbXAuZGF0YSgpKSwgc2l6ZSAqIHNpemVvZihU
KSkpCisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoeyByZWludGVy
cHJldF9jYXN0PHVpbnQ4X3QqPih0ZW1wLmRhdGEoKSksIHNpemUgKiBzaXplb2YoVCkgfSkpCiAg
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgICAgIHJldHVybiB0ZW1wOwpJ
bmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVy
LmNwcAkocmV2aXNpb24gMjc4NzEzKQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVy
c2lzdGVudERlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyMyArMzEsMjYgQEAKIG5h
bWVzcGFjZSBXVEYgewogbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAotRGVjb2Rlcjo6RGVjb2Rl
cihjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKQotICAgIDogbV9idWZm
ZXIoYnVmZmVyKQotICAgICwgbV9idWZmZXJQb3NpdGlvbihidWZmZXIpCi0gICAgLCBtX2J1ZmZl
ckVuZChidWZmZXIgKyBidWZmZXJTaXplKQorRGVjb2Rlcjo6RGVjb2RlcihTcGFuPGNvbnN0IHVp
bnQ4X3Q+IGJ1ZmZlcikKKyAgICA6IERlY29kZXIoYXNCeXRlcyhidWZmZXIpKQogewogfQogCi1E
ZWNvZGVyOjp+RGVjb2RlcigpCitEZWNvZGVyOjpEZWNvZGVyKFNwYW48Y29uc3Qgc3RkOjpieXRl
PiBidWZmZXIpCisgICAgOiBtX2J1ZmZlcihidWZmZXIuZGF0YSgpKQorICAgICwgbV9idWZmZXJQ
b3NpdGlvbihidWZmZXIuZGF0YSgpKQorICAgICwgbV9idWZmZXJFbmQoYnVmZmVyLmRhdGEoKSAr
IGJ1ZmZlci5zaXplKCkpCiB7CiB9CiAKK0RlY29kZXI6On5EZWNvZGVyKCkgPSBkZWZhdWx0Owor
CiBib29sIERlY29kZXI6OmJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZV90IHNpemUp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIHNpemUgPD0gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2J1ZmZl
ckVuZCAtIG1fYnVmZmVyUG9zaXRpb24pOwogfQogCi1jb25zdCB1aW50OF90KiBEZWNvZGVyOjpi
dWZmZXJQb2ludGVyRm9yRGlyZWN0UmVhZChzaXplX3Qgc2l6ZSkKK2NvbnN0IHN0ZDo6Ynl0ZSog
RGVjb2Rlcjo6YnVmZmVyUG9pbnRlckZvckRpcmVjdFJlYWQoc2l6ZV90IHNpemUpCiB7CiAgICAg
aWYgKCFidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKHNpemUpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKQEAgLTU1LDE2ICs1OCwyMSBAQCBjb25zdCB1aW50OF90KiBEZWNvZGVyOjpidWZm
ZXJQb2ludGVyRm9yCiAgICAgYXV0byBkYXRhID0gbV9idWZmZXJQb3NpdGlvbjsKICAgICBtX2J1
ZmZlclBvc2l0aW9uICs9IHNpemU7CiAKLSAgICBFbmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvckRh
dGEobV9zaGExLCBkYXRhLCBzaXplKTsKKyAgICBFbmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvckRh
dGEobV9zaGExLCBTcGFuIHsgZGF0YSwgc2l6ZSB9KTsKICAgICByZXR1cm4gZGF0YTsKIH0KIAot
Ym9vbCBEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCogZGF0YSwgc2l6ZV90
IHNpemUpCitib29sIERlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPHVpbnQ4X3Q+
IGRhdGEpCit7CisgICAgcmV0dXJuIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShhc1dyaXRhYmxlQnl0
ZXMoZGF0YSkpOworfQorCitib29sIERlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFu
PHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKLSAgICBhdXRvIGJ1ZmZlciA9IGJ1ZmZlclBvaW50ZXJGb3JE
aXJlY3RSZWFkKHNpemUpOworICAgIGF1dG8gYnVmZmVyID0gYnVmZmVyUG9pbnRlckZvckRpcmVj
dFJlYWQoZGF0YS5zaXplKCkpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgbWVtY3B5KGRhdGEsIGJ1ZmZlciwgc2l6ZSk7CisgICAgbWVtY3B5KGRhdGEuZGF0
YSgpLCBidWZmZXIsIGRhdGEuc2l6ZSgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTM5
LDcgKzE0Nyw3IEBAIGJvb2wgRGVjb2Rlcjo6dmVyaWZ5Q2hlY2tzdW0oKQogICAgIG1fc2hhMS5j
b21wdXRlSGFzaChjb21wdXRlZEhhc2gpOwogCiAgICAgU0hBMTo6RGlnZXN0IHNhdmVkSGFzaDsK
LSAgICBpZiAoIWRlY29kZUZpeGVkTGVuZ3RoRGF0YShzYXZlZEhhc2guZGF0YSgpLCBzaXplb2Yo
c2F2ZWRIYXNoKSkpCisgICAgaWYgKCFkZWNvZGVGaXhlZExlbmd0aERhdGEoc2F2ZWRIYXNoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIGNvbXB1dGVkSGFzaCA9PSBzYXZl
ZEhhc2g7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRE
ZWNvZGVyLmgJKHJldmlzaW9uIDI3ODcxMykKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNl
L1BlcnNpc3RlbnREZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAog
I2luY2x1ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL1NIQTEuaD4KKyNpbmNs
dWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29k
ZXIuaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC0zNSw3ICszNiw4IEBAIG5hbWVzcGFjZSBQZXJz
aXN0ZW5jZSB7CiBjbGFzcyBEZWNvZGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVjb2Rlcihjb25zdCB1aW50OF90KiBi
dWZmZXIsIHNpemVfdCBidWZmZXJTaXplKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVjb2Rl
cihTcGFuPGNvbnN0IHVpbnQ4X3Q+KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVjb2RlcihT
cGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwogICAgIFdURl9FWFBPUlRfUFJJVkFURSB+RGVjb2Rlcigp
OwogCiAgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyRW5kIC0gbV9i
dWZmZXI7IH0KQEAgLTQzLDcgKzQ1LDggQEAgcHVibGljOgogCiAgICAgV1RGX0VYUE9SVF9QUklW
QVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIHZlcmlmeUNoZWNrc3VtKCk7CiAKLSAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlRml4ZWRMZW5ndGhE
YXRhKHVpbnQ4X3QqLCBzaXplX3QpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBXQVJOX1VOVVNF
RF9SRVRVUk4gYm9vbCBkZWNvZGVGaXhlZExlbmd0aERhdGEoU3Bhbjx1aW50OF90Pik7CisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZUZpeGVkTGVu
Z3RoRGF0YShTcGFuPHN0ZDo6Ynl0ZT4pOwogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIERlY29k
ZXImIG9wZXJhdG9yPj4oc3RkOjpvcHRpb25hbDxib29sPiYpOwogICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBEZWNvZGVyJiBvcGVyYXRvcj4+KHN0ZDo6b3B0aW9uYWw8dWludDhfdD4mKTsKQEAgLTg0
LDcgKzg3LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbnVtRWxlbWVudHMgPD0gc3RkOjpu
dW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAvIHNpemVvZihUKSAmJiBidWZmZXJJc0xhcmdl
RW5vdWdoVG9Db250YWluKG51bUVsZW1lbnRzICogc2l6ZW9mKFQpKTsKICAgICB9CiAKLSAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgV0FSTl9VTlVTRURfUkVUVVJOIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZl
clBvaW50ZXJGb3JEaXJlY3RSZWFkKHNpemVfdCBudW1CeXRlcyk7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBjb25zdCBzdGQ6OmJ5dGUqIGJ1ZmZlclBvaW50ZXJG
b3JEaXJlY3RSZWFkKHNpemVfdCBudW1CeXRlcyk7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNJUENEZWNvZGVyID0gZmFsc2U7CiAKQEAgLTkyLDkgKzk1LDkgQEAgcHJpdmF0ZToKICAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgYnVmZmVySXNMYXJn
ZUVub3VnaFRvQ29udGFpbihzaXplX3QpIGNvbnN0OwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5
cGU+IERlY29kZXImIGRlY29kZU51bWJlcihzdGQ6Om9wdGlvbmFsPFR5cGU+Jik7CiAKLSAgICBj
b25zdCB1aW50OF90KiBtX2J1ZmZlcjsKLSAgICBjb25zdCB1aW50OF90KiBtX2J1ZmZlclBvc2l0
aW9uOwotICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyRW5kOworICAgIGNvbnN0IHN0ZDo6Ynl0
ZSogbV9idWZmZXI7CisgICAgY29uc3Qgc3RkOjpieXRlKiBtX2J1ZmZlclBvc2l0aW9uOworICAg
IGNvbnN0IHN0ZDo6Ynl0ZSogbV9idWZmZXJFbmQ7CiAKICAgICBTSEExIG1fc2hhMTsKIH07Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIu
Y3BwCShyZXZpc2lvbiAyNzg3MTMpCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJz
aXN0ZW50RW5jb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDM0ICszMSwzOSBAQAogbmFt
ZXNwYWNlIFdURiB7CiBuYW1lc3BhY2UgUGVyc2lzdGVuY2UgewogCi1FbmNvZGVyOjpFbmNvZGVy
KCkKK0VuY29kZXI6OkVuY29kZXIoKSA9IGRlZmF1bHQ7CitFbmNvZGVyOjp+RW5jb2RlcigpID0g
ZGVmYXVsdDsKKworc3RkOjpieXRlKiBFbmNvZGVyOjpncm93KHNpemVfdCBzaXplKQogeworICAg
IHNpemVfdCBuZXdQb3NpdGlvbiA9IG1fYnVmZmVyLnNpemUoKTsKKyAgICBtX2J1ZmZlci5ncm93
KG1fYnVmZmVyLnNpemUoKSArIHNpemUpOworICAgIHJldHVybiBtX2J1ZmZlci5kYXRhKCkgKyBu
ZXdQb3NpdGlvbjsKIH0KIAotRW5jb2Rlcjo6fkVuY29kZXIoKQordm9pZCBFbmNvZGVyOjp1cGRh
dGVDaGVja3N1bUZvckRhdGEoU0hBMSYgc2hhMSwgU3Bhbjxjb25zdCB1aW50OF90PiBkYXRhKQog
eworICAgIHJldHVybiB1cGRhdGVDaGVja3N1bUZvckRhdGEoc2hhMSwgYXNCeXRlcyhkYXRhKSk7
CiB9CiAKLXVpbnQ4X3QqIEVuY29kZXI6Omdyb3coc2l6ZV90IHNpemUpCit2b2lkIEVuY29kZXI6
OnVwZGF0ZUNoZWNrc3VtRm9yRGF0YShTSEExJiBzaGExLCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
ZGF0YSkKIHsKLSAgICBzaXplX3QgbmV3UG9zaXRpb24gPSBtX2J1ZmZlci5zaXplKCk7Ci0gICAg
bV9idWZmZXIuZ3JvdyhtX2J1ZmZlci5zaXplKCkgKyBzaXplKTsKLSAgICByZXR1cm4gbV9idWZm
ZXIuZGF0YSgpICsgbmV3UG9zaXRpb247CisgICAgYXV0byB0eXBlU2FsdCA9IFNhbHQ8dWludDhf
dCo+Ojp2YWx1ZTsKKyAgICBzaGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7ICZ0eXBlU2FsdCwg
MSB9KSk7CisgICAgc2hhMS5hZGRCeXRlcyhkYXRhKTsKIH0KIAotdm9pZCBFbmNvZGVyOjp1cGRh
dGVDaGVja3N1bUZvckRhdGEoU0hBMSYgc2hhMSwgY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90
IHNpemUpCit2b2lkIEVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHVp
bnQ4X3Q+IGRhdGEpCiB7Ci0gICAgYXV0byB0eXBlU2FsdCA9IFNhbHQ8dWludDhfdCo+Ojp2YWx1
ZTsKLSAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ0eXBlU2Fs
dCksIHNpemVvZih0eXBlU2FsdCkpOwotICAgIHNoYTEuYWRkQnl0ZXMoZGF0YSwgc2l6ZSk7Cisg
ICAgcmV0dXJuIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShhc0J5dGVzKGRhdGEpKTsKIH0KIAotdm9p
ZCBFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6
ZV90IHNpemUpCit2b2lkIEVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0
IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKLSAgICB1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBk
YXRhLCBzaXplKTsKKyAgICB1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhKTsKIAot
ICAgIHVpbnQ4X3QqIGJ1ZmZlciA9IGdyb3coc2l6ZSk7Ci0gICAgbWVtY3B5KGJ1ZmZlciwgZGF0
YSwgc2l6ZSk7CisgICAgYXV0byogYnVmZmVyID0gZ3JvdyhkYXRhLnNpemUoKSk7CisgICAgbWVt
Y3B5KGJ1ZmZlciwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVHlwZT4KQEAgLTY2LDcgKzcxLDcgQEAgRW5jb2RlciYgRW5jb2Rlcjo6ZW5jb2RlTnVt
YmVyKFR5cGUgdmFsdQogewogICAgIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKG1f
c2hhMSwgdmFsdWUpOwogCi0gICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhzaXplb2YoVHlwZSkp
OworICAgIGF1dG8qIGJ1ZmZlciA9IGdyb3coc2l6ZW9mKFR5cGUpKTsKICAgICBtZW1jcHkoYnVm
ZmVyLCAmdmFsdWUsIHNpemVvZihUeXBlKSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQpAQCAtMTI1
LDcgKzEzMCw3IEBAIHZvaWQgRW5jb2Rlcjo6ZW5jb2RlQ2hlY2tzdW0oKQogewogICAgIFNIQTE6
OkRpZ2VzdCBoYXNoOwogICAgIG1fc2hhMS5jb21wdXRlSGFzaChoYXNoKTsKLSAgICBlbmNvZGVG
aXhlZExlbmd0aERhdGEoaGFzaC5kYXRhKCksIGhhc2guc2l6ZSgpKTsKKyAgICBlbmNvZGVGaXhl
ZExlbmd0aERhdGEoYXNCeXRlcyhTcGFuIHsgaGFzaCB9KSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaAkocmV2aXNpb24g
Mjc4NzEzKQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0VudW1U
cmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvU0hBMS5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0
ZW50Q29kZXIuaD4KIApAQCAtNDMsNyArNDQsOCBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIH5FbmNvZGVyKCk7CiAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGVD
aGVja3N1bSgpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZUZpeGVkTGVuZ3Ro
RGF0YShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoU3Bhbjxjb25zdCB1aW50OF90Pik7CisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48Y29uc3Qgc3RkOjpi
eXRlPik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6
aXNfZW51bTxUPjo6dmFsdWU+KiA9IG51bGxwdHI+CiAgICAgRW5jb2RlciYgb3BlcmF0b3I8PChj
b25zdCBUJiB0KQpAQCAtNzAsMjMgKzcyLDIyIEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgRW5jb2RlciYgb3BlcmF0b3I8PChmbG9hdCk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRF
IEVuY29kZXImIG9wZXJhdG9yPDwoZG91YmxlKTsKIAotICAgIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZl
cigpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKTsgfQotICAgIHNpemVfdCBidWZmZXJT
aXplKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuc2l6ZSgpOyB9Ci0KLSAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBjb25zdCB1
aW50OF90Kiwgc2l6ZV90KTsKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnVmZmVyKCkgY29u
c3QgeyByZXR1cm4gbV9idWZmZXI7IH0KKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBTcGFuPGNvbnN0IHVpbnQ4X3Q+
KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JE
YXRhKFNIQTEmLCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwogICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUeXBlPiBzdGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZvck51bWJlcihTSEExJiwgVHlwZSk7
CiAKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJUENFbmNvZGVyID0gZmFsc2U7CiAKIHBy
aXZhdGU6Ci0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiBFbmNvZGVyJiBlbmNvZGVOdW1i
ZXIoVHlwZSk7CiAKLSAgICB1aW50OF90KiBncm93KHNpemVfdCk7CisgICAgc3RkOjpieXRlKiBn
cm93KHNpemVfdCk7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4gc3RydWN0IFNhbHQ7
CiAKLSAgICBWZWN0b3I8dWludDhfdCwgNDA5Nj4gbV9idWZmZXI7CisgICAgVmVjdG9yPHN0ZDo6
Ynl0ZSwgNDA5Nj4gbV9idWZmZXI7CiAgICAgU0hBMSBtX3NoYTE7CiB9OwogCkBAIC0xMDYsOCAr
MTA3LDggQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+CiB2b2lkIEVuY29kZXI6OnVwZGF0ZUNo
ZWNrc3VtRm9yTnVtYmVyKFNIQTEmIHNoYTEsIFR5cGUgdmFsdWUpCiB7CiAgICAgYXV0byB0eXBl
U2FsdCA9IFNhbHQ8VHlwZT46OnZhbHVlOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7Ci0gICAgc2hhMS5h
ZGRCeXRlcyhyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWUpLCBzaXplb2YodmFsdWUp
KTsKKyAgICBzaGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7ICZ0eXBlU2FsdCwgMSB9KSk7Cisg
ICAgc2hhMS5hZGRCeXRlcyhhc0J5dGVzKFNwYW4geyAmdmFsdWUsIDEgfSkpOwogfQogCiB9Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL3RleHQvQmFzZTY0LmgJKHJldmlzaW9uIDI3ODcxMykKKysrIFNvdXJjZS9XVEYvd3Rm
L3RleHQvQmFzZTY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorI2luY2x1ZGUg
PHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNjAsMTQgKzYxLDEyIEBAIFdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShjb24KIFdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQsIExDaGFyKiwgdW5zaWduZWQs
IEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMs
IEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CiAKIFdURl9FWFBP
UlRfUFJJVkFURSBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3Qgdm9p
ZCosIHVuc2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRv
Tm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQp
OwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNl
cnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci1WZWN0
b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPGNoYXI+JiwgQmFz
ZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFz
ZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKIFZlY3Rvcjx1aW50OF90
PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBDU3RyaW5nJiwgQmFzZTY0RW5jb2RlUG9saWN5
ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0g
QmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBO
PiBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoU3BhbjxULCBOPiwgQmFzZTY0
RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0
RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKIAogV1RGX0VYUE9SVF9QUklW
QVRFIFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdCB2b2lkKiwgdW5zaWduZWQsIEJh
c2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJh
c2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci1TdHJpbmcgYmFzZTY0
RW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgQmFzZTY0RW5jb2RlUG9saWN5
ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0g
QmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKLVN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhj
b25zdCBWZWN0b3I8Y2hhcj4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xp
Y3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRl
ZmF1bHQpOwogU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IENTdHJpbmcmLCBCYXNl
NjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNl
NjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwordGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IE4+IFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuPFQsIE4+LCBC
YXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBC
YXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwogCiBXVEZfRVhQT1JU
X1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25z
dCBTdHJpbmcmLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERl
Y29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUg
c3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShTdHJpbmdWaWV3LCBP
cHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJh
c2U2NERlY29kZU1hcDo6RGVmYXVsdCk7CkBAIC03NiwzNCArNzUsMjQgQEAgV1RGX0VYUE9SVF9Q
UklWQVRFIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPAogV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0
aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgdWludDhfdCosIHVuc2ln
bmVkLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1h
cCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpv
cHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBjaGFyKiwgdW5zaWdu
ZWQsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFw
ID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKIAotaW5saW5lIFZlY3Rvcjx1aW50OF90PiBi
YXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0LCBCYXNlNjRF
bmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQotewotICAgIHJldHVybiBi
YXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5LCBt
YXApOwotfQotCi1pbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNv
bnN0IFZlY3RvcjxjaGFyPiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2
NEVuY29kZU1hcCBtYXApCi17Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlucHV0
LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7Ci19Ci0KIGlubGluZSBWZWN0b3I8
dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgQ1N0cmluZyYgaW5wdXQsIEJhc2U2
NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgcmV0dXJu
IGJhc2U2NEVuY29kZVRvVmVjdG9yKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIHBvbGlj
eSwgbWFwKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuYnl0ZXMoKSwg
cG9saWN5LCBtYXApOwogfQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJh
c2U2NEVuY29kZU1hcCBtYXApCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgTj4gVmVjdG9y
PHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKFNwYW48VCwgTj4gaW5wdXQsIEJhc2U2NEVu
Y29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgcmV0dXJuIGJh
c2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1h
cCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlucHV0LmRhdGEoKSwgaW5wdXQu
c2l6ZV9ieXRlcygpLCBwb2xpY3ksIG1hcCk7CiB9CiAKLWlubGluZSBTdHJpbmcgYmFzZTY0RW5j
b2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5
IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKK2lubGluZSBTdHJpbmcgYmFzZTY0RW5jb2Rl
VG9TdHJpbmcoY29uc3QgQ1N0cmluZyYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ks
IEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5n
KGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGJh
c2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LmJ5dGVzKCksIHBvbGljeSwgbWFwKTsKIH0KIAotaW5s
aW5lIFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdCBDU3RyaW5nJiBpbnB1dCwgQmFz
ZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBOPiBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoU3BhbjxULCBO
PiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkK
IHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5wdXQuZGF0YSgpLCBpbnB1dC5s
ZW5ndGgoKSwgcG9saWN5LCBtYXApOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhp
bnB1dC5kYXRhKCksIGlucHV0LnNpemVfYnl0ZXMoKSwgcG9saWN5LCBtYXApOwogfQogCiAKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL3RleHQvQ1N0cmluZy5oCShyZXZpc2lvbiAyNzg3MTMpCisrKyBTb3VyY2UvV1RGL3d0
Zi90ZXh0L0NTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1
ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KIAogbmFtZXNwYWNlIFdURiB7
CiAKQEAgLTM5LDkgKzQwLDExIEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElG
SUVSKEMKIGNsYXNzIENTdHJpbmdCdWZmZXIgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxDU3Ry
aW5nQnVmZmVyPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURfV0lUSF9IRUFQX0lERU5U
SUZJRVIoQ1N0cmluZ0J1ZmZlcik7CiBwdWJsaWM6Ci0gICAgY29uc3QgY2hhciogZGF0YSgpIHsg
cmV0dXJuIG11dGFibGVEYXRhKCk7IH0KKyAgICBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3QgeyBy
ZXR1cm4gY29uc3RfY2FzdDxDU3RyaW5nQnVmZmVyKj4odGhpcyktPm11dGFibGVEYXRhKCk7IH0K
ICAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KIAorICAgIFNw
YW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0IHsgcmV0dXJuIGFzQnl0ZXMoU3BhbiB7
IGRhdGEoKSwgbGVuZ3RoKCkgfSk7IH0KKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ1N0
cmluZzsKIApAQCAtNjYsNiArNjksMjAgQEAgcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgQ1N0cmluZyBuZXdVbmluaXRpYWxpemVkKHNpemVfdCBsZW5ndGgsIGNoYXIqJiBj
aGFyYWN0ZXJCdWZmZXIpOwogICAgIENTdHJpbmcoSGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkg
OiBtX2J1ZmZlcihIYXNoVGFibGVEZWxldGVkVmFsdWUpIHsgfQogCisgICAgU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+IGJ5dGVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2J1ZmZlcikKKyAg
ICAgICAgICAgIHJldHVybiBtX2J1ZmZlci0+Ynl0ZXMoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICB9CisKKyAgICBTcGFuPHN0ZDo6Ynl0ZT4gbXV0YWJsZUJ5dGVzKCkKKyAgICB7CisgICAg
ICAgIGlmIChhdXRvIG11dGFibGVEYXRhID0gdGhpcy0+bXV0YWJsZURhdGEoKSkKKyAgICAgICAg
ICAgIHJldHVybiBhc1dyaXRhYmxlQnl0ZXMoU3BhbiB7IG11dGFibGVEYXRhLCBtX2J1ZmZlci0+
bGVuZ3RoKCkgfSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCiAgICAgY29uc3QgY2hh
ciogZGF0YSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9idWZmZXIgPyBtX2J1ZmZl
ci0+ZGF0YSgpIDogbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODcxMykKKysr
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBA
CisyMDIxLTA2LTEwICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogTW9kdWxlcy9oaWdobGlnaHQvQXBw
SGlnaGxpZ2h0Lmg6CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHQ6OmVuY29kZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHQ6OmRlY29kZSk6CisgICAgICAgICog
TW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6dG9TaGFyZWRCdWZmZXIgY29uc3QpOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvclJlc3BvbnNlRGF0YS5oOgorICAg
ICAgICAoV2ViQ29yZTo6ZW5jb2RlQXJyYXlCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZGVj
b2RlQXJyYXlCdWZmZXIpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3Jl
ZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oOgorICAgICAgICAoV2ViQ29yZTo6UHVibGljS2V5Q3Jl
ZGVudGlhbENyZWF0aW9uT3B0aW9uczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmg6CisgICAgICAgIChXZWJD
b3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcjo6ZW5jb2RlIGNvbnN0KToKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRXZWJTb2NrZXRBY2NlcHQp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0J1ZmZlclNvdXJjZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6QnVmZmVyU291cmNlOjpieXRlcyBjb25zdCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OmRlY29kZSk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvU2VyaWFsaXplZE5G
QS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6U2VyaWFsaXplZE5G
QTo6cG9pbnRlckF0T2Zmc2V0SW5GaWxlIGNvbnN0KToKKyAgICAgICAgKiBjcnlwdG8vbWFjL1Nl
cmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQW5k
U3RvcmVNYXN0ZXJLZXkpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Omhhc2hQb2ludGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBhdGNoU3VwcG9ydDo6Y3JlYXRlRGlnZXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OmFkZFN0cmluZ1RvU0hBMSk6IERlbGV0ZWQuCisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZpY2F0ZSk6CisgICAgICAgICogaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yTmV0d29ya0FnZW50OjpnZXRTZXJpYWxpemVkQ2VydGlmaWNhdGUpOgorICAgICAgICAq
IHBsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBh
c3RlYm9hcmRDdXN0b21EYXRhOjpjcmVhdGVTaGFyZWRCdWZmZXIgY29uc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZm
ZXI6OlNoYXJlZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmFwcGVu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpkYXRhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmJ5dGVz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6ZGVjb2RlciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpzaXplIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaDoKKyAgICAgICAgKFdlYkNv
cmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Nb2RlbC5oOgorICAgICAgICAoV2ViQ29yZTo6TW9kZWw6OmVuY29kZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNb2RlbDo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6UGl4ZWxCdWZm
ZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6ZGVjb2Rl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2Fw
YWJpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpDYXBhYmlsaXR5VmFsdWVPclJhbmdlOjpl
bmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FwYWJpbGl0eVZhbHVlT3JSYW5nZTo6
ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZFN0cmluZ1RvU0hBMSk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHA6CisgICAg
ICAgIChXVEY6OlBlcnNpc3RlbmNlOjplbmNvZGVDRkRhdGEpOgorICAgICAgICAoV1RGOjpQZXJz
aXN0ZW5jZTo6ZGVjb2RlQ0ZEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlU3Rh
dGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2Ip
OgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaDoKKyAgICAgICAgKiB3
b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzKToKKyAgICAgICAg
KiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTV1NjcmlwdFN0b3JhZ2U6OnN0b3JlKToKKwogMjAyMS0wNi0xMCAgQ2hyaXMgRHVt
ZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEVuYWJsZSBXZWJQYWdlJ3MgcmVsZWFz
ZSBsb2dnaW5nIGluIGVwaGVtZXJhbCBzZXNzaW9ucwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0LmgJKHJldmlzaW9uIDI3ODcxMykKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIEFw
cEhpZ2hsaWdodDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2Rl
ciA8PCBzdGF0aWNfY2FzdDxzaXplX3Q+KGhpZ2hsaWdodC0+c2l6ZSgpKTsKLSAgICBlbmNvZGVy
LmVuY29kZUZpeGVkTGVuZ3RoRGF0YShoaWdobGlnaHQtPmRhdGEoKSwgaGlnaGxpZ2h0LT5zaXpl
KCksIDEpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKCpoaWdobGlnaHQsIDEp
OwogCiAgICAgZW5jb2RlciA8PCB0ZXh0OwogCkBAIC03NSw3ICs3NSw3IEBAIHN0ZDo6b3B0aW9u
YWw8QXBwSGlnaGxpZ2h0PiBBcHBIaWdobGlnaHQKIAogICAgIFZlY3Rvcjx1aW50OF90PiBoaWdo
bGlnaHQ7CiAgICAgaGlnaGxpZ2h0Lmdyb3coKmxlbmd0aCk7Ci0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZUZpeGVkTGVuZ3RoRGF0YShoaWdobGlnaHQuZGF0YSgpLCBoaWdobGlnaHQuc2l6ZSgpLCAx
KSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGhpZ2hsaWdodCwgMSkp
CiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKICAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6
b3B0aW9uYWw8U3RyaW5nPj4gdGV4dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGln
aGxpZ2h0L0FwcEhpZ2hsaWdodFJhbmdlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhLmNwcAkocmV2aXNp
b24gMjc4NzEzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxp
Z2h0UmFuZ2VEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBSZWY8U2hh
cmVkQnVmZmVyPiBBcHBIaWdobGlnaHRSYW5nZURhdGE6CiB7CiAgICAgV1RGOjpQZXJzaXN0ZW5j
ZTo6RW5jb2RlciBlbmNvZGVyOwogICAgIGVuY29kZXIgPDwgKnRoaXM7Ci0gICAgcmV0dXJuIFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgp
KTsKKyAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZW5jb2Rlci5idWZmZXIoKSk7CiB9
CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhOjpO
b2RlUGF0aENvbXBvbmVudDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRpY2F0b3JSZXNwb25zZURhdGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRp
Y2F0b3JSZXNwb25zZURhdGEuaAkocmV2aXNpb24gMjc4NzEzKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yUmVzcG9uc2VEYXRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU5LDcgKzU5LDcgQEAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHN0YXRpYyB2b2lk
IGVuY29kZUFycmF5QnVmZmVyKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEFycmF5QnVmZmVyJiBi
dWZmZXIpCiB7CiAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYnVmZmVyLmJ5
dGVMZW5ndGgoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RhdGljX2Nh
c3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZlci5kYXRhKCkpLCBidWZmZXIuYnl0ZUxlbmd0aCgpLCAx
KTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShidWZmZXIuYnl0ZXMoKSwgMSk7
CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CkBAIC03NSw3ICs3NSw3IEBAIFJlZlB0cjxB
cnJheUJ1ZmZlcj4gZGVjb2RlQXJyYXlCdWZmZXIoRGUKICAgICBhdXRvIGJ1ZmZlciA9IEFycmF5
QnVmZmVyOjp0cnlDcmVhdGUobGVuZ3RoLnZhbHVlKCksIHNpemVvZih1aW50OF90KSk7CiAgICAg
aWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGVGaXhlZExlbmd0aERhdGEoc3RhdGljX2Nhc3Q8dWludDhfdCo+KGJ1ZmZlci0+ZGF0YSgp
KSwgbGVuZ3RoLnZhbHVlKCksIDEpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0
aERhdGEoYnVmZmVyLT53cml0YWJsZUJ5dGVzKCksIDEpKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICByZXR1cm4gYnVmZmVyOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3Jl
YXRpb25PcHRpb25zLmgJKHJldmlzaW9uIDI3ODcxMykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDEsOCArMTQxLDggQEAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQg
UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBycC5pZCA8PCBycC5uYW1lIDw8IHJwLmljb247
Ci0gICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odXNlci5pZC5sZW5ndGgoKSk7
Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEodXNlci5pZC5kYXRhKCksIHVzZXIu
aWQubGVuZ3RoKCksIDEpOworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHVz
ZXIuaWQuYnl0ZXMoKS5zaXplKCkpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KHVzZXIuaWQuYnl0ZXMoKSwgMSk7CiAgICAgZW5jb2RlciA8PCB1c2VyLmRpc3BsYXlOYW1lIDw8
IHVzZXIubmFtZSA8PCB1c2VyLmljb24gPDwgcHViS2V5Q3JlZFBhcmFtcyA8PCB0aW1lb3V0IDw8
IGV4Y2x1ZGVDcmVkZW50aWFscyA8PCBhdXRoZW50aWNhdG9yU2VsZWN0aW9uIDw8IGF0dGVzdGF0
aW9uIDw8IGV4dGVuc2lvbnM7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9y
LmgJKHJldmlzaW9uIDI3ODcxMykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4v
UHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsOCAr
NDcsOCBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBQdWJsaWNLZXlDcmVkZW50aWFs
RGVzY3JpcHRvcjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2Rl
ciA8PCB0eXBlOwotICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGlkLmxlbmd0
aCgpKTsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShpZC5kYXRhKCksIGlkLmxl
bmd0aCgpLCAxKTsKKyAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihpZC5ieXRl
cygpLnNpemUoKSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoaWQuYnl0ZXMo
KSwgMSk7CiAgICAgZW5jb2RlciA8PCB0cmFuc3BvcnRzOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtl
LmNwcAkocmV2aXNpb24gMjc4NzEzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2Nr
ZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMywxMyArMTAz
LDE0IEBAIHN0YXRpYyBTdHJpbmcgZ2VuZXJhdGVTZWNXZWJTb2NrZXRLZXkoKQogU3RyaW5nIFdl
YlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRXZWJTb2NrZXRBY2NlcHQoY29uc3QgU3RyaW5n
JiBzZWNXZWJTb2NrZXRLZXkpCiB7CiAgICAgY29uc3RleHByIHVpbnQ4X3Qgd2ViU29ja2V0S2V5
R1VJRFtdID0gIjI1OEVBRkE1LUU5MTQtNDdEQS05NUNBLUM1QUIwREM4NUIxMSI7CisKICAgICBT
SEExIHNoYTE7Ci0gICAgQ1N0cmluZyBrZXlEYXRhID0gc2VjV2ViU29ja2V0S2V5LmFzY2lpKCk7
Ci0gICAgc2hhMS5hZGRCeXRlcyhrZXlEYXRhLmRhdGFBc1VJbnQ4UHRyKCksIGtleURhdGEubGVu
Z3RoKCkpOwotICAgIHNoYTEuYWRkQnl0ZXMod2ViU29ja2V0S2V5R1VJRCwgc3RkOjpzaXplKHdl
YlNvY2tldEtleUdVSUQpIC0gMSk7CisgICAgc2hhMS5hZGRCeXRlcyhzZWNXZWJTb2NrZXRLZXku
YXNjaWkoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhhc0J5dGVzKFNwYW4geyB3ZWJTb2NrZXRLZXlH
VUlEIH0pKTsKKwogICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwogICAgIHNoYTEuY29tcHV0ZUhhc2go
aGFzaCk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGhhc2guZGF0YSgpLCBTSEEx
OjpoYXNoU2l6ZSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKFNwYW4geyBoYXNo
IH0pOwogfQogCiBXZWJTb2NrZXRIYW5kc2hha2U6OldlYlNvY2tldEhhbmRzaGFrZShjb25zdCBV
UkwmIHVybCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQs
IGNvbnN0IFN0cmluZyYgY2xpZW50T3JpZ2luLCBib29sIGFsbG93Q29va2llcykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0J1ZmZlclNvdXJjZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0J1ZmZlclNvdXJjZS5oCShyZXZpc2lvbiAyNzg3MTMp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9CdWZmZXJTb3VyY2UuaAkod29ya2luZyBj
b3B5KQpAQCAtNTcsNiArNTcsMTMgQEAgcHVibGljOgogICAgICAgICB9LCBtX3ZhcmlhbnQpOwog
ICAgIH0KIAorICAgIFNwYW48Y29uc3QgdWludDhfdD4gYnl0ZXMoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFdURjo6dmlzaXQoW10oYXV0byYgYnVmZmVyKSAtPiBTcGFuPGNvbnN0IHVp
bnQ4X3Q+IHsKKyAgICAgICAgICAgIHJldHVybiBidWZmZXIgPyBTcGFuPGNvbnN0IHVpbnQ4X3Q+
IHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZlci0+ZGF0YSgpKSwgYnVmZmVyLT5i
eXRlTGVuZ3RoKCkgfSA6IFNwYW48Y29uc3QgdWludDhfdD4geyB9OworICAgICAgICB9LCBtX3Zh
cmlhbnQpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBWYXJpYW50VHlwZSBtX3ZhcmlhbnQ7CiB9
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmgJKHJldmlzaW9uIDI3ODcxMykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQsMTUgKzE2
NCwxNSBAQCB2b2lkIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZW5jb2RlKEVuY29kCiAKICAgICBp
ZiAoaGFzQXJyYXkpIHsKICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
bV9hcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXktPnNpemUoKSk7Ci0gICAgICAgIGZvciAoY29uc3Qg
YXV0byAmYXJyYXlCdWZmZXJDb250ZW50cyA6ICptX2FycmF5QnVmZmVyQ29udGVudHNBcnJheSkg
eworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGFycmF5QnVmZmVyQ29udGVudHMgOiAqbV9hcnJh
eUJ1ZmZlckNvbnRlbnRzQXJyYXkpIHsKICAgICAgICAgICAgIGVuY29kZXIgPDwgYXJyYXlCdWZm
ZXJDb250ZW50cy5zaXplSW5CeXRlcygpOwotICAgICAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhl
ZExlbmd0aERhdGEoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGFycmF5QnVmZmVyQ29udGVu
dHMuZGF0YSgpKSwgYXJyYXlCdWZmZXJDb250ZW50cy5zaXplSW5CeXRlcygpLCAxKTsKKyAgICAg
ICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGFycmF5QnVmZmVyQ29udGVudHMu
Ynl0ZXMoKSwgMSk7CiAgICAgICAgIH0KICAgICB9CiAKICNpZiBFTkFCTEUoV0VCX1JUQykKICAg
ICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihtX2RldGFjaGVkUlRDRGF0YUNoYW5u
ZWxzLnNpemUoKSk7Ci0gICAgZm9yIChjb25zdCBhdXRvICZjaGFubmVsIDogbV9kZXRhY2hlZFJU
Q0RhdGFDaGFubmVscykKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGNoYW5uZWwgOiBtX2RldGFjaGVk
UlRDRGF0YUNoYW5uZWxzKQogICAgICAgICBlbmNvZGVyIDw8ICpjaGFubmVsOwogI2VuZGlmCiB9
CkBAIC0yMDYsNyArMjA2LDcgQEAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFs
aXplZAogICAgICAgICAgICAgYXV0byBidWZmZXIgPSBHaWdhY2FnZTo6dHJ5TWFsbG9jKEdpZ2Fj
YWdlOjpQcmltaXRpdmUsIGJ1ZmZlclNpemUpOwogICAgICAgICAgICAgaWYgKCFidWZmZXIpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHN0YXRpY19jYXN0PHVpbnQ4X3QqPihidWZmZXIpLCBidWZm
ZXJTaXplLCAxKSkgeworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3Ro
RGF0YShTcGFuIHsgc3RhdGljX2Nhc3Q8c3RkOjpieXRlKj4oYnVmZmVyKSwgYnVmZmVyU2l6ZSB9
LCAxKSkgewogICAgICAgICAgICAgICAgIEdpZ2FjYWdlOjpmcmVlKEdpZ2FjYWdlOjpQcmltaXRp
dmUsIGJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9TZXJpYWxpemVkTkZB
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9TZXJp
YWxpemVkTkZBLmNwcAkocmV2aXNpb24gMjc4NzEzKQorKysgU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvU2VyaWFsaXplZE5GQS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw3ICsx
MDcsNyBAQCBTZXJpYWxpemVkTkZBOjpTZXJpYWxpemVkTkZBKEZpbGVTeXN0ZW06CiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgogY29uc3QgVCogU2VyaWFsaXplZE5GQTo6cG9pbnRlckF0T2Zmc2V0SW5G
aWxlKHNpemVfdCBvZmZzZXQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgVCo+KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihtX2ZpbGUuZGF0YSgpKSArIG9m
ZnNldCk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KG1fZmlsZS5kYXRh
KCkuZGF0YSgpICsgb2Zmc2V0KTsKIH0KIAogYXV0byBTZXJpYWxpemVkTkZBOjpub2RlcygpIGNv
bnN0IC0+IGNvbnN0IFJhbmdlPEltbXV0YWJsZU5GQU5vZGU+CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vbWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvU2VyaWFsaXplZENyeXB0b0tleVdyYXBNYWMubW0J
KHJldmlzaW9uIDI3ODcxMykKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvU2VyaWFsaXpl
ZENyeXB0b0tleVdyYXBNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEyNSw3ICsxMjUsNyBAQCBB
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKICAgICB9CiAjZW5kaWYKIAotICAgIGF1
dG8gYmFzZTY0RW5jb2RlZE1hc3RlcktleURhdGEgPSBiYXNlNjRFbmNvZGVUb1ZlY3RvcihtYXN0
ZXJLZXlEYXRhKTsKKyAgICBhdXRvIGJhc2U2NEVuY29kZWRNYXN0ZXJLZXlEYXRhID0gYmFzZTY0
RW5jb2RlVG9WZWN0b3IoU3BhbiB7IG1hc3RlcktleURhdGEgfSk7CiAKICAgICAvLyBDYW5ub3Qg
dXNlIGtTZWNDbGFzc0tleSBiZWNhdXNlIG9mIDxyZGFyOi8vcHJvYmxlbS8xNjA2ODIwNz4uCiAg
ICAgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzID0gQHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJl
dmlzaW9uIDI3ODcxMykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTYwMyw3ICsxNjAzLDggQEAgRXhjZXB0aW9uT3I8dm9pZD4gTm9kZTo6c2V0VGV4
dENvbnRlbnQoYwogc3RhdGljIFNIQTE6OkRpZ2VzdCBoYXNoUG9pbnRlcihjb25zdCB2b2lkKiBw
b2ludGVyKQogewogICAgIFNIQTEgc2hhMTsKLSAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZwb2ludGVyKSwgc2l6ZW9mKHBvaW50ZXIpKTsKKyAgICBz
aGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7ICZwb2ludGVyLCAxIH0pKTsKKwogICAgIFNIQTE6
OkRpZ2VzdCBkaWdlc3Q7CiAgICAgc2hhMS5jb21wdXRlSGFzaChkaWdlc3QpOwogICAgIHJldHVy
biBkaWdlc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBw
b3J0LmNwcAkocmV2aXNpb24gMjc4NzEzKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RP
TVBhdGNoU3VwcG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5NCwyOCArMzk0LDIzIEBAIEV4
Y2VwdGlvbk9yPHZvaWQ+IERPTVBhdGNoU3VwcG9ydDo6aW5uZXIKICAgICByZXR1cm4geyB9Owog
fQogCi1zdGF0aWMgdm9pZCBhZGRTdHJpbmdUb1NIQTEoU0hBMSYgc2hhMSwgY29uc3QgU3RyaW5n
JiBzdHJpbmcpCi17Ci0gICAgQ1N0cmluZyBjU3RyaW5nID0gc3RyaW5nLnV0ZjgoKTsKLSAgICBz
aGExLmFkZEJ5dGVzKGNTdHJpbmcuZGF0YUFzVUludDhQdHIoKSwgY1N0cmluZy5sZW5ndGgoKSk7
Ci19Ci0KIHN0ZDo6dW5pcXVlX3B0cjxET01QYXRjaFN1cHBvcnQ6OkRpZ2VzdD4gRE9NUGF0Y2hT
dXBwb3J0OjpjcmVhdGVEaWdlc3QoTm9kZSYgbm9kZSwgVW51c2VkTm9kZXNNYXAqIHVudXNlZE5v
ZGVzTWFwKQogewogICAgIGF1dG8gZGlnZXN0ID0gbWFrZVVuaXF1ZTxEaWdlc3Q+KCk7CiAgICAg
ZGlnZXN0LT5ub2RlID0gJm5vZGU7CisKICAgICBTSEExIHNoYTE7CiAKICAgICBhdXRvIG5vZGVU
eXBlID0gbm9kZS5ub2RlVHlwZSgpOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4oJm5vZGVUeXBlKSwgc2l6ZW9mKG5vZGVUeXBlKSk7Ci0gICAgYWRk
U3RyaW5nVG9TSEExKHNoYTEsIG5vZGUubm9kZU5hbWUoKSk7Ci0gICAgYWRkU3RyaW5nVG9TSEEx
KHNoYTEsIG5vZGUubm9kZVZhbHVlKCkpOworICAgIHNoYTEuYWRkQnl0ZXMoYXNCeXRlcyhTcGFu
IHsgJm5vZGVUeXBlLCAxIH0pKTsKKyAgICBzaGExLmFkZEJ5dGVzKG5vZGUubm9kZU5hbWUoKS51
dGY4KCkpOworICAgIHNoYTEuYWRkQnl0ZXMobm9kZS5ub2RlVmFsdWUoKS51dGY4KCkpOwogCiAg
ICAgaWYgKG5vZGUubm9kZVR5cGUoKSA9PSBOb2RlOjpFTEVNRU5UX05PREUpIHsKICAgICAgICAg
Tm9kZSogY2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQoKTsKICAgICAgICAgd2hpbGUgKGNoaWxkKSB7
CiAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8RGlnZXN0PiBjaGlsZEluZm8gPSBjcmVhdGVE
aWdlc3QoKmNoaWxkLCB1bnVzZWROb2Rlc01hcCk7Ci0gICAgICAgICAgICBhZGRTdHJpbmdUb1NI
QTEoc2hhMSwgY2hpbGRJbmZvLT5zaGExKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoY2hp
bGRJbmZvLT5zaGExLnV0ZjgoKSk7CiAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2li
bGluZygpOwogICAgICAgICAgICAgZGlnZXN0LT5jaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShjaGls
ZEluZm8pKTsKICAgICAgICAgfQpAQCAtNDI0LDE5ICs0MTksMTkgQEAgc3RkOjp1bmlxdWVfcHRy
PERPTVBhdGNoU3VwcG9ydDo6RGlnZXN0PgogICAgICAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1
dGVzV2l0aG91dFVwZGF0ZSgpKSB7CiAgICAgICAgICAgICBTSEExIGF0dHJzU0hBMTsKICAgICAg
ICAgICAgIGZvciAoYXV0byYgYXR0cmlidXRlIDogZWxlbWVudC5hdHRyaWJ1dGVzSXRlcmF0b3Io
KSkgewotICAgICAgICAgICAgICAgIGFkZFN0cmluZ1RvU0hBMShhdHRyc1NIQTEsIGF0dHJpYnV0
ZS5uYW1lKCkudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgYWRkU3RyaW5nVG9TSEExKGF0
dHJzU0hBMSwgYXR0cmlidXRlLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIGF0dHJzU0hBMS5h
ZGRCeXRlcyhhdHRyaWJ1dGUubmFtZSgpLnRvU3RyaW5nKCkudXRmOCgpKTsKKyAgICAgICAgICAg
ICAgICBhdHRyc1NIQTEuYWRkQnl0ZXMoYXR0cmlidXRlLnZhbHVlKCkuc3RyaW5nKCkudXRmOCgp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFNIQTE6OkRpZ2VzdCBhdHRyc0hhc2g7CiAg
ICAgICAgICAgICBhdHRyc1NIQTEuY29tcHV0ZUhhc2goYXR0cnNIYXNoKTsKLSAgICAgICAgICAg
IGRpZ2VzdC0+YXR0cnNTSEExID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoYXR0cnNIYXNoLmRhdGEo
KSwgMTApOwotICAgICAgICAgICAgYWRkU3RyaW5nVG9TSEExKHNoYTEsIGRpZ2VzdC0+YXR0cnNT
SEExKTsKKyAgICAgICAgICAgIGRpZ2VzdC0+YXR0cnNTSEExID0gYmFzZTY0RW5jb2RlVG9TdHJp
bmcoU3BhbiB7IGF0dHJzSGFzaCB9KTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoZGlnZXN0
LT5hdHRyc1NIQTEudXRmOCgpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIFNIQTE6OkRpZ2Vz
dCBoYXNoOwogICAgIHNoYTEuY29tcHV0ZUhhc2goaGFzaCk7Ci0gICAgZGlnZXN0LT5zaGExID0g
YmFzZTY0RW5jb2RlVG9TdHJpbmcoaGFzaC5kYXRhKCksIDEwKTsKKyAgICBkaWdlc3QtPnNoYTEg
PSBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgaGFzaCB9KTsKICAgICBpZiAodW51c2VkTm9k
ZXNNYXApCiAgICAgICAgIHVudXNlZE5vZGVzTWFwLT5hZGQoZGlnZXN0LT5zaGExLCBkaWdlc3Qu
Z2V0KCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmRIb3N0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmRIb3N0LmNwcAkocmV2aXNpb24gMjc4NzEzKQorKysgU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYw
Miw3ICs2MDIsNyBAQCBib29sIEluc3BlY3RvckZyb250ZW5kSG9zdDo6c2hvd0NlcnRpZmljCiAg
ICAgaWYgKCFkYXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBXVEY6OlBlcnNpc3Rl
bmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXplKCkpOworICAgIFdU
Rjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlciB7ICpkYXRhIH07CiAgICAgc3RkOjpvcHRp
b25hbDxDZXJ0aWZpY2F0ZUluZm8+IGNlcnRpZmljYXRlSW5mbzsKICAgICBkZWNvZGVyID4+IGNl
cnRpZmljYXRlSW5mbzsKICAgICBpZiAoIWNlcnRpZmljYXRlSW5mbykKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtB
Z2VudC5jcHAJKHJldmlzaW9uIDI3ODcxMykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwNCw3
ICsxMDA0LDcgQEAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0bwogCiAg
ICAgV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciBlbmNvZGVyOwogICAgIFdURjo6UGVyc2lzdGVu
Y2U6OkNvZGVyPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz46OmVuY29kZShlbmNvZGVyLCBjZXJ0
aWZpY2F0ZS52YWx1ZSgpKTsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoZW5jb2Rl
ci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOworICAgIHJldHVybiBiYXNlNjRFbmNv
ZGVUb1N0cmluZyhlbmNvZGVyLmJ1ZmZlcigpKTsKIH0KIAogV2ViU29ja2V0KiBJbnNwZWN0b3JO
ZXR3b3JrQWdlbnQ6OndlYlNvY2tldEZvclJlcXVlc3RJZChjb25zdCBQcm90b2NvbDo6TmV0d29y
azo6UmVxdWVzdElkJiByZXF1ZXN0SWQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Q
YXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEuY3BwCShyZXZpc2lvbiAyNzg3MTMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg5LDcgKzg5LDcgQEAgUmVmPFNoYXJlZEJ1ZmZlcj4gUGFzdGVib2FyZEN1c3RvbURh
dGE6OgogICAgIGVuY29kZXIgPDwgbV9vcmlnaW47CiAgICAgZW5jb2RlciA8PCBzYW1lT3JpZ2lu
Q3VzdG9tU3RyaW5nRGF0YSgpOwogICAgIGVuY29kZXIgPDwgb3JkZXJlZFR5cGVzKCk7Ci0gICAg
cmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVm
ZmVyU2l6ZSgpKTsKKyAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZW5jb2Rlci5idWZm
ZXIoKSk7CiB9CiAKIFBhc3RlYm9hcmRDdXN0b21EYXRhIFBhc3RlYm9hcmRDdXN0b21EYXRhOjpm
cm9tUGVyc2lzdGVuY2VEZWNvZGVyKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXImJiBkZWNvZGVy
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCShyZXZpc2lv
biAyNzg3MTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiwxOCArMzYsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1TaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qg
c2l6ZSkKK1NoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBk
YXRhKQogewotICAgIGFwcGVuZChkYXRhLCBzaXplKTsKLX0KLQotU2hhcmVkQnVmZmVyOjpTaGFy
ZWRCdWZmZXIoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpCi17Ci0gICAgYXBwZW5kKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBzaXplKTsKKyAgICBhcHBlbmQo
ZGF0YSk7CiB9CiAKIFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKEZpbGVTeXN0ZW06Ok1hcHBl
ZEZpbGVEYXRhJiYgZmlsZURhdGEpCi0gICAgOiBtX3NpemUoZmlsZURhdGEuc2l6ZSgpKQorICAg
IDogbV9zaXplKGZpbGVEYXRhLmRhdGEoKS5zaXplKCkpCiB7CiAgICAgbV9zZWdtZW50cy5hcHBl
bmQoezAsIERhdGFTZWdtZW50OjpjcmVhdGUoV1RGTW92ZShmaWxlRGF0YSkpfSk7CiB9CkBAIC0x
ODgsMTMgKzE4MywxMyBAQCB2b2lkIFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKGNvbnN0IFNoYXJlZEJ1
CiAgICAgQVNTRVJUKGludGVybmFsbHlDb25zaXN0ZW50KCkpOwogfQogCi12b2lkIFNoYXJlZEJ1
ZmZlcjo6YXBwZW5kKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5ndGgpCit2b2lkIFNo
YXJlZEJ1ZmZlcjo6YXBwZW5kKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhKQogewogICAgIEFT
U0VSVCghbV9oYXNCZWVuQ29tYmluZWRJbnRvT25lU2VnbWVudCk7CiAgICAgVmVjdG9yPHVpbnQ4
X3Q+IHZlY3RvcjsKLSAgICB2ZWN0b3IuYXBwZW5kKGRhdGEsIGxlbmd0aCk7Ci0gICAgbV9zZWdt
ZW50cy5hcHBlbmQoe21fc2l6ZSwgRGF0YVNlZ21lbnQ6OmNyZWF0ZShXVEZNb3ZlKHZlY3Rvcikp
fSk7Ci0gICAgbV9zaXplICs9IGxlbmd0aDsKKyAgICB2ZWN0b3IuYXBwZW5kKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuZGF0YSgpKSwgZGF0YS5zaXplKCkpOworICAgIG1f
c2VnbWVudHMuYXBwZW5kKHsgbV9zaXplLCBEYXRhU2VnbWVudDo6Y3JlYXRlKFdURk1vdmUodmVj
dG9yKSkgfSk7CisgICAgbV9zaXplICs9IGRhdGEuc2l6ZSgpOwogICAgIEFTU0VSVChpbnRlcm5h
bGx5Q29uc2lzdGVudCgpKTsKIH0KIApAQCAtMzAxLDExICsyOTYsNDAgQEAgY29uc3QgdWludDhf
dCogU2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVudAogI2lmIFVTRShHU1RSRUFNRVIpCiAgICAgICAg
IFtdKGNvbnN0IFJlZlB0cjxHc3RNYXBwZWRPd25lZEJ1ZmZlcj4mIGRhdGEpIHsgcmV0dXJuIGRh
dGEtPmRhdGEoKTsgfSwKICNlbmRpZgotICAgICAgICBbXShjb25zdCBGaWxlU3lzdGVtOjpNYXBw
ZWRGaWxlRGF0YSYgZGF0YSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRh
dGEuZGF0YSgpKTsgfQorICAgICAgICBbXShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0
YSYgZGF0YSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5k
YXRhKCkuZGF0YSgpKTsgfQogICAgICk7CiAgICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwg
bV9pbW11dGFibGVEYXRhKTsKIH0KIAorU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IFNoYXJlZEJ1ZmZl
cjo6RGF0YVNlZ21lbnQ6OmJ5dGVzKCkgY29uc3QKK3sKKyAgICBhdXRvIHZpc2l0b3IgPSBXVEY6
Om1ha2VWaXNpdG9yKAorICAgICAgICBbXShjb25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEpIHsK
KyAgICAgICAgICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBkYXRhIH0pOworICAgICAgICB9LAor
I2lmIFVTRShDRikKKyAgICAgICAgW10oY29uc3QgUmV0YWluUHRyPENGRGF0YVJlZj4mIGRhdGEp
IHsKKyAgICAgICAgICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBDRkRhdGFHZXRCeXRlUHRyKGRh
dGEuZ2V0KCkpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KENGRGF0YUdldExlbmd0aChkYXRhLmdldCgp
KSkgfSk7CisgICAgICAgIH0sCisjZW5kaWYKKyNpZiBVU0UoR0xJQikKKyAgICAgICAgW10oY29u
c3QgR1JlZlB0cjxHQnl0ZXM+JiBkYXRhKSB7CisgICAgICAgICAgICByZXR1cm4gYXNCeXRlcyhT
cGFuIHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGdfYnl0ZXNfZ2V0X2RhdGEoZGF0YS5n
ZXQoKSwgbnVsbHB0cikpLCBnX2J5dGVzX2dldF9zaXplKGRhdGEuZ2V0KCkpIH0pOworICAgICAg
ICB9LAorI2VuZGlmCisjaWYgVVNFKEdTVFJFQU1FUikKKyAgICAgICAgW10oY29uc3QgUmVmUHRy
PEdzdE1hcHBlZE93bmVkQnVmZmVyPiYgZGF0YSkgeworICAgICAgICAgICAgcmV0dXJuIGFzQnl0
ZXMoU3BhbiB7IGRhdGEtPmRhdGEoKSwgZGF0YS0+c2l6ZSgpIH0pOworICAgICAgICB9LAorI2Vu
ZGlmCisgICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBkYXRhKSB7
CisgICAgICAgICAgICByZXR1cm4gZGF0YS5kYXRhKCk7CisgICAgICAgIH0KKyAgICApOworICAg
IHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIG1faW1tdXRhYmxlRGF0YSk7CisKK30KKwogYm9v
bCBTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50Ojpjb250YWluc01hcHBlZEZpbGVEYXRhKCkgY29u
c3QKIHsKICAgICByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxGaWxlU3lzdGVtOjpNYXBw
ZWRGaWxlRGF0YT4obV9pbW11dGFibGVEYXRhKTsKQEAgLTMxOSw3ICszNDMsNyBAQCB2b2lkIFNo
YXJlZEJ1ZmZlcjo6aGludE1lbW9yeU5vdE5lZWRlZFNvCiAKIFdURjo6UGVyc2lzdGVuY2U6OkRl
Y29kZXIgU2hhcmVkQnVmZmVyOjpkZWNvZGVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4geyByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKCkpLCBzaXplKCkgfTsKKyAgICByZXR1
cm4geyAqdGhpcyB9OwogfQogCiBib29sIFNoYXJlZEJ1ZmZlcjo6b3BlcmF0b3I9PShjb25zdCBT
aGFyZWRCdWZmZXImIG90aGVyKSBjb25zdApAQCAtMzg0LDcgKzQwOCw3IEBAIHNpemVfdCBTaGFy
ZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpzaXplKCkKICNpZiBVU0UoR1NUUkVBTUVSKQogICAgICAg
ICBbXShjb25zdCBSZWZQdHI8R3N0TWFwcGVkT3duZWRCdWZmZXI+JiBkYXRhKSB7IHJldHVybiBk
YXRhLT5zaXplKCk7IH0sCiAjZW5kaWYKLSAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6TWFw
cGVkRmlsZURhdGEmIGRhdGEpIHsgcmV0dXJuIGRhdGEuc2l6ZSgpOyB9CisgICAgICAgIFtdKGNv
bnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBkYXRhKSB7IHJldHVybiBkYXRhLmRhdGEo
KS5zaXplKCk7IH0KICAgICApOwogICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIG1faW1t
dXRhYmxlRGF0YSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZm
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIu
aAkocmV2aXNpb24gMjc4NzEzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVm
ZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDggKzY3LDEyIEBAIGNsYXNzIFNoYXJlZEJ1ZmZl
ckRhdGFWaWV3OwogY2xhc3MgV0VCQ09SRV9FWFBPUlQgU2hhcmVkQnVmZmVyIDogcHVibGljIFJl
ZkNvdW50ZWQ8U2hhcmVkQnVmZmVyPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxTaGFyZWRC
dWZmZXI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hhcmVkQnVmZmVyKTsgfQot
ICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoY29uc3QgdWludDhfdCogZGF0YSwg
c2l6ZV90IHNpemUpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hhcmVkQnVmZmVyKGRhdGEsIHNp
emUpKTsgfQotICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoY29uc3QgY2hhciog
ZGF0YSwgc2l6ZV90IHNpemUpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hhcmVkQnVmZmVyKGRh
dGEsIHNpemUpKTsgfQorICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoU3Bhbjxj
b25zdCBzdGQ6OmJ5dGU+IGRhdGEpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hhcmVkQnVmZmVy
KGRhdGEpKTsgfQorICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoU3Bhbjxjb25z
dCB1aW50OF90PiBkYXRhKSB7IHJldHVybiBjcmVhdGUoYXNCeXRlcyhkYXRhKSk7IH0KKyAgICBz
dGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKFNwYW48Y29uc3QgY2hhcj4gZGF0YSkgeyBy
ZXR1cm4gY3JlYXRlKGFzQnl0ZXMoZGF0YSkpOyB9CisgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZm
ZXI+IGNyZWF0ZShjb25zdCBzdGQ6OmJ5dGUqIGRhdGEsIHNpemVfdCBzaXplKSB7IHJldHVybiBj
cmVhdGUoU3BhbiB7IGRhdGEsIHNpemUgfSk7IH0KKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZl
cj4gY3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7IHJldHVybiBjcmVh
dGUoU3BhbiB7IGRhdGEsIHNpemUgfSk7IH0KKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4g
Y3JlYXRlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKSB7IHJldHVybiBjcmVhdGUoU3Bh
biB7IGRhdGEsIHNpemUgfSk7IH0KICAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRl
KEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYgbWFwcGVkRmlsZURhdGEpIHsgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgU2hhcmVkQnVmZmVyKFdURk1vdmUobWFwcGVkRmlsZURhdGEpKSk7IH0KIAog
ICAgIGVudW0gY2xhc3MgTWF5VXNlRmlsZU1hcHBpbmcgOiBib29sIHsgTm8sIFllcyB9OwpAQCAt
MTAxLDYgKzEwNSw4IEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTogQXVkaXQgdGhlIGNhbGwgc2l0
ZXMgb2YgdGhpcyBmdW5jdGlvbiBhbmQgcmVwbGFjZSB0aGVtIHdpdGggaXRlcmF0aW9uIGlmIHBv
c3NpYmxlLgogICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEoKSBjb25zdDsKICAgICBjb25zdCBjaGFy
KiBkYXRhQXNDaGFyUHRyKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBj
aGFyKj4oZGF0YSgpKTsgfQorICAgIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0
IHsgcmV0dXJuIGFzQnl0ZXMoU3BhbiB7IGRhdGEoKSwgc2l6ZSgpIH0pOyB9CisKICAgICBWZWN0
b3I8dWludDhfdD4gY29weURhdGEoKSB7IHJldHVybiB7IGRhdGEoKSwgc2l6ZSgpIH07IH0KIAog
ICAgIC8vIENvbWJpbmVzIGFsbCB0aGUgc2VnbWVudHMgaW50byBhIFZlY3RvciBhbmQgcmV0dXJu
cyB0aGF0IHZlY3RvciBhZnRlciBjbGVhcmluZyB0aGUgU2hhcmVkQnVmZmVyLgpAQCAtMTE1LDgg
KzEyMSwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIXNp
emUoKTsgfQogCiAgICAgdm9pZCBhcHBlbmQoY29uc3QgU2hhcmVkQnVmZmVyJik7Ci0gICAgdm9p
ZCBhcHBlbmQoY29uc3QgdWludDhfdCosIHNpemVfdCk7Ci0gICAgdm9pZCBhcHBlbmQoY29uc3Qg
Y2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCkgeyBhcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OF90Kj4oZGF0YSksIGxlbmd0aCk7IH0KKyAgICB2b2lkIGFwcGVuZChTcGFuPGNvbnN0
IHN0ZDo6Ynl0ZT4pOworICAgIHZvaWQgYXBwZW5kKFNwYW48Y29uc3QgdWludDhfdD4gZGF0YSkg
eyBhcHBlbmQoYXNCeXRlcyhkYXRhKSk7IH0KKyAgICB2b2lkIGFwcGVuZChTcGFuPGNvbnN0IGNo
YXI+IGRhdGEpIHsgYXBwZW5kKGFzQnl0ZXMoZGF0YSkpOyB9CisgICAgdm9pZCBhcHBlbmQoY29u
c3Qgc3RkOjpieXRlKiBkYXRhLCBzaXplX3QgbGVuZ3RoKSB7IGFwcGVuZChTcGFuIHsgZGF0YSwg
bGVuZ3RoIH0pOyB9CisgICAgdm9pZCBhcHBlbmQoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90
IGxlbmd0aCkgeyBhcHBlbmQoU3BhbiB7IGRhdGEsIGxlbmd0aCB9KTsgfQorICAgIHZvaWQgYXBw
ZW5kKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpIHsgYXBwZW5kKFNwYW4geyBkYXRh
LCBsZW5ndGggfSk7IH0KICAgICB2b2lkIGFwcGVuZChWZWN0b3I8dWludDhfdD4mJik7CiAKICAg
ICB2b2lkIGNsZWFyKCk7CkBAIC0xMzEsNiArMTQxLDggQEAgcHVibGljOgogICAgICAgICBXRUJD
T1JFX0VYUE9SVCBjb25zdCB1aW50OF90KiBkYXRhKCkgY29uc3Q7CiAgICAgICAgIFdFQkNPUkVf
RVhQT1JUIHNpemVfdCBzaXplKCkgY29uc3Q7CiAKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgU3Bh
bjxjb25zdCBzdGQ6OmJ5dGU+IGJ5dGVzKCkgY29uc3Q7CisKICAgICAgICAgc3RhdGljIFJlZjxE
YXRhU2VnbWVudD4gY3JlYXRlKFZlY3Rvcjx1aW50OF90PiYmIGRhdGEpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIGRhdGEuc2hyaW5rVG9GaXQoKTsKQEAgLTIxMiw4ICsyMjQsNyBAQCBwdWJsaWM6
CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgU2hhcmVkQnVmZmVyKCkgPSBkZWZhdWx0OwotICAg
IGV4cGxpY2l0IFNoYXJlZEJ1ZmZlcihjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKLSAgICBleHBs
aWNpdCBTaGFyZWRCdWZmZXIoY29uc3QgY2hhciosIHNpemVfdCk7CisgICAgZXhwbGljaXQgU2hh
cmVkQnVmZmVyKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgZXhwbGljaXQgU2hhcmVkQnVm
ZmVyKFZlY3Rvcjx1aW50OF90PiYmKTsKICAgICBleHBsaWNpdCBTaGFyZWRCdWZmZXIoRmlsZVN5
c3RlbTo6TWFwcGVkRmlsZURhdGEmJik7CiAjaWYgVVNFKENGKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQ0FBdWRpb1N0cmVh
bURlc2NyaXB0aW9uLmgJKHJldmlzaW9uIDI3ODcxMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL2NvY29hL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgi
CiAjaW5jbHVkZSA8Q29yZUF1ZGlvL0NvcmVBdWRpb1R5cGVzLmg+CisjaW5jbHVkZSA8d3RmL1Nw
YW4uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC04MCwxMyArODEsMTMgQEAgcHJpdmF0
ZToKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlv
bjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7Ci0gICAgZW5jb2Rlci5lbmNvZGVG
aXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oJm1fc3RyZWFt
RGVzY3JpcHRpb24pLCBzaXplb2YobV9zdHJlYW1EZXNjcmlwdGlvbiksIDEpOworICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGFzQnl0ZXMoU3BhbiB7ICZtX3N0cmVhbURlc2NyaXB0
aW9uLCAxIH0pLCAxKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KIGJvb2wgQ0FBdWRp
b1N0cmVhbURlc2NyaXB0aW9uOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgQ0FBdWRpb1N0cmVh
bURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKIHsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVG
aXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJmRlc2NyaXB0aW9uLm1f
c3RyZWFtRGVzY3JpcHRpb24pLCBzaXplb2YoZGVzY3JpcHRpb24ubV9zdHJlYW1EZXNjcmlwdGlv
biksIDEpOworICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShhc1dyaXRh
YmxlQnl0ZXMoU3BhbiB7ICZkZXNjcmlwdGlvbi5tX3N0cmVhbURlc2NyaXB0aW9uLCAxIH0pLCAx
KTsKIH0KIAogaW5saW5lIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiB0b0NBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbihjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01vZGVsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTW9kZWwuaAkocmV2aXNpb24gMjc4
NzEzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTW9kZWwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBN
b2RlbDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDxzaXplX3Q+KG1fZGF0YS0+c2l6ZSgpKTsKLSAgICBlbmNvZGVyLmVuY29kZUZp
eGVkTGVuZ3RoRGF0YShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCksIDEpOworICAgIGVu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKG1fZGF0YS0+Ynl0ZXMoKSwgMSk7CiB9CiAKIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+CkBAIC03NCw3ICs3NCw3IEBAIFJlZlB0cjxNb2RlbD4gTW9k
ZWw6OmRlY29kZShEZWNvZGVyJiBkZWMKIAogICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAg
IGRhdGEuZ3JvdygqbGVuZ3RoKTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhE
YXRhKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgMSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgZGF0YSB9LCAxKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICByZXR1cm4gTW9kZWw6OmNyZWF0ZShTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZN
b3ZlKGRhdGEpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhl
bEJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1BpeGVsQnVmZmVyLmgJKHJldmlzaW9uIDI3ODcxMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcg
QEAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBQaXhlbEJ1ZmZlcgogCiAgICAgZW5jb2Rl
ciA8PCBtX2Zvcm1hdDsKICAgICBlbmNvZGVyIDw8IG1fc2l6ZTsKLSAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5ieXRlTGVuZ3RoKCksIDEp
OworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKG1fZGF0YS0+Ynl0ZXMoKSwgMSk7
CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+
IFBpeGVsQnVmZmVyOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKQEAgLTExMyw3ICsxMTMsNyBA
QCB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGQ6Om9wdGlvbmFsPFBpCiAgICAgaWYgKCFyZXN1
bHQpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBpZiAoIWRlY29kZXIuZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKHJlc3VsdC0+bV9kYXRhLT5kYXRhKCksIHJlc3VsdC0+bV9kYXRh
LT5ieXRlTGVuZ3RoKCksIDEpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERh
dGEocmVzdWx0LT5tX2RhdGEtPndyaXRhYmxlQnl0ZXMoKSwgMSkpCiAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CiAKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1l
TWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMuaAkocmV2aXNpb24gMjc4NzEzKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGll
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTYgKzExNCwxNiBAQCBwcml2YXRlOgogdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZTo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIpIGNvbnN0CiB7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERh
dGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oJm1fbWluT3JWYWx1ZSksIHNpemVv
ZihWYWx1ZVVuaW9uKSwgYWxpZ25vZihWYWx1ZVVuaW9uKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVG
aXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oJm1fbWF4KSwg
c2l6ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZhbHVlVW5pb24pKTsKKyAgICBlbmNvZGVyLmVu
Y29kZUZpeGVkTGVuZ3RoRGF0YShhc0J5dGVzKFNwYW4geyAmbV9taW5PclZhbHVlLCAxIH0pLCBh
bGlnbm9mKFZhbHVlVW5pb24pKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShh
c0J5dGVzKFNwYW4geyAmbV9tYXgsIDEgfSksIGFsaWdub2YoVmFsdWVVbmlvbikpOwogICAgIGVu
Y29kZXIgPDwgbV90eXBlOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgogYm9vbCBDYXBh
YmlsaXR5VmFsdWVPclJhbmdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgQ2FwYWJpbGl0eVZh
bHVlT3JSYW5nZSYgdmFsdWVPclJhbmdlKQogewotICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZp
eGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWVPclJhbmdlLm1f
bWluT3JWYWx1ZSksIHNpemVvZihWYWx1ZVVuaW9uKSwgYWxpZ25vZihWYWx1ZVVuaW9uKSkKLSAg
ICAgICAgJiYgZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4oJnZhbHVlT3JSYW5nZS5tX21heCksIHNpemVvZihWYWx1ZVVuaW9uKSwgYWxpZ25v
ZihWYWx1ZVVuaW9uKSkKKyAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEo
YXNXcml0YWJsZUJ5dGVzKFNwYW4geyAmdmFsdWVPclJhbmdlLm1fbWluT3JWYWx1ZSwgMSB9KSwg
YWxpZ25vZihWYWx1ZVVuaW9uKSkKKyAgICAgICAgJiYgZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0
aERhdGEoYXNXcml0YWJsZUJ5dGVzKFNwYW4geyAmdmFsdWVPclJhbmdlLm1fbWF4LCAxIH0pLCBh
bGlnbm9mKFZhbHVlVW5pb24pKQogICAgICAgICAmJiBkZWNvZGVyLmRlY29kZSh2YWx1ZU9yUmFu
Z2UubV90eXBlKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAJ
KHJldmlzaW9uIDI3ODcxMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksMTMg
KzEzOSwxMyBAQCBzdGF0aWMgdm9pZCBhZGRTdHJpbmdUb1NIQTEoU0hBMSYgc2hhMSwgCiAKICAg
ICBpZiAoc3RyaW5nLmlzOEJpdCgpICYmIHN0cmluZy5pc0FsbEFTQ0lJKCkpIHsKICAgICAgICAg
Y29uc3QgdWludDhfdCBudWxsQnl0ZSA9IDA7Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMoc3RyaW5n
LmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSk7Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMo
Jm51bGxCeXRlLCAxKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhhc0J5dGVzKFNwYW4geyBzdHJp
bmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpIH0pKTsKKyAgICAgICAgc2hhMS5hZGRC
eXRlcyhhc0J5dGVzKFNwYW4geyAmbnVsbEJ5dGUsIDEgfSkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgYXV0byB1dGY4ID0gc3RyaW5nLnV0ZjgoKTsKLSAgICBzaGExLmFkZEJ5dGVz
KHV0ZjguZGF0YUFzVUludDhQdHIoKSwgdXRmOC5sZW5ndGgoKSArIDEpOyAvLyBJbmNsdWRlIHRl
cm1pbmF0aW5nIG51bGwgYnl0ZS4KKyAgICBzaGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7IHV0
ZjguZGF0YUFzVUludDhQdHIoKSwgdXRmOC5sZW5ndGgoKSArIDEgfSkpOyAvLyBJbmNsdWRlIHRl
cm1pbmF0aW5nIG51bGwgYnl0ZS4KIH0KIAogU3RyaW5nIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50
ZXI6Omhhc2hTdHJpbmdXaXRoU2FsdChjb25zdCBTdHJpbmcmIGlkLCBjb25zdCBTdHJpbmcmIGhh
c2hTYWx0KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZp
Y2F0ZUluZm9DRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHAJKHJldmlzaW9uIDI3ODcxMykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ2VydGlmaWNhdGVJbmZvQ0ZOZXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNyArMjEwLDcgQEAgc3RhdGljIHZvaWQgZW5jb2Rl
Q0ZEYXRhKEVuY29kZXImIGVuY29kZQogICAgIGNvbnN0IHVpbnQ4X3QqIGJ5dGVQdHIgPSBDRkRh
dGFHZXRCeXRlUHRyKGRhdGEpOwogCiAgICAgZW5jb2RlciA8PCBsZW5ndGg7Ci0gICAgZW5jb2Rl
ci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYnl0ZVB0ciwgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5n
dGgpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgYnl0ZVB0ciwg
c3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpIH0pOwogfQogCiBzdGF0aWMgc3RkOjpvcHRpb25h
bDxSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4gZGVjb2RlQ0ZEYXRhKERlY29kZXImIGRlY29kZXIpCkBA
IC0yMjUsNyArMjI1LDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0YWluUHRyPENGRGF0YVJl
ZgogICAgIGlmICghcG9pbnRlcikKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAg
IHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0ZShudWxscHRyLCBwb2ludGVyLCAqc2l6ZSkpOwor
ICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0ZShudWxscHRyLCByZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQ4X3QqPihwb2ludGVyKSwgKnNpemUpKTsKIH0KIAogI2lmIEhBVkUoU0VDX1RS
VVNUX1NFUklBTElaQVRJT04pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FM
aXRlU3RhdGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9z
cWwvU1FMaXRlU3RhdGVtZW50LmNwcAkocmV2aXNpb24gMjc4NzEzKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1
LDcgKzg1LDcgQEAgYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OmV4ZWN1dGVDb21tYW5kKCkKICAgICBy
ZXR1cm4gc3RlcCgpID09IFNRTElURV9ET05FOwogfQogCi1pbnQgU1FMaXRlU3RhdGVtZW50Ojpi
aW5kQmxvYihpbnQgaW5kZXgsIFNwYW48Y29uc3QgdWludDhfdD4gYmxvYikKK2ludCBTUUxpdGVT
dGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGJsb2Ip
CiB7CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkpOwpAQCAtOTUsNiArOTUsMTEgQEAg
aW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IoaW50IGluZGV4LAogICAgIHJldHVybiBzcWxp
dGUzX2JpbmRfYmxvYihtX3N0YXRlbWVudCwgaW5kZXgsIGJsb2IuZGF0YSgpLCBibG9iLnNpemUo
KSwgU1FMSVRFX1RSQU5TSUVOVCk7CiB9CiAKK2ludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9i
KGludCBpbmRleCwgU3Bhbjxjb25zdCB1aW50OF90PiBibG9iKQoreworICAgIHJldHVybiBiaW5k
QmxvYihpbmRleCwgYXNCeXRlcyhibG9iKSk7Cit9CisKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJp
bmRCbG9iKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0KQogewogICAgIC8vIFN0cmluZzo6
Y2hhcmFjdGVycygpIHJldHVybnMgMCBmb3IgdGhlIGVtcHR5IHN0cmluZywgd2hpY2ggU1FMaXRl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5o
CShyZXZpc2lvbiAyNzg3MTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRl
U3RhdGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAgcHVibGljOgogICAg
IFdFQkNPUkVfRVhQT1JUIH5TUUxpdGVTdGF0ZW1lbnQoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBT
UUxpdGVTdGF0ZW1lbnQoU1FMaXRlU3RhdGVtZW50JiYpOwogICAgIAorICAgIFdFQkNPUkVfRVhQ
T1JUIGludCBiaW5kQmxvYihpbnQgaW5kZXgsIFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAgICAg
V0VCQ09SRV9FWFBPUlQgaW50IGJpbmRCbG9iKGludCBpbmRleCwgU3Bhbjxjb25zdCB1aW50OF90
Pik7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJpbmRCbG9iKGludCBpbmRleCwgY29uc3QgU3Ry
aW5nJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJpbmRUZXh0KGludCBpbmRleCwgU3RyaW5n
Vmlldyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lz
dHJhdGlvbkRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3JrZXJz
L3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcAkocmV2aXNpb24gMjc4NzEz
KQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25E
YXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1OSwxMCArNDU5LDEwIEBAIGJvb2wgUmVn
aXN0cmF0aW9uRGF0YWJhc2U6OmRvUHVzaENoYW5nZXMKICAgICAgICAgICAgIHx8IGluc2VydFN0
YXRlbWVudC0+YmluZFRleHQoNiwgdXBkYXRlVmlhQ2FjaGVUb1N0cmluZyhkYXRhLnJlZ2lzdHJh
dGlvbi51cGRhdGVWaWFDYWNoZSkpICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwgaW5zZXJ0
U3RhdGVtZW50LT5iaW5kVGV4dCg3LCBkYXRhLnNjcmlwdFVSTC5zdHJpbmcoKSkgIT0gU1FMSVRF
X09LCiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDgsIHdvcmtlclR5
cGVUb1N0cmluZyhkYXRhLndvcmtlclR5cGUpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8
IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoOSwgU3BhbiB7IGNzcEVuY29kZXIuYnVmZmVyKCks
IGNzcEVuY29kZXIuYnVmZmVyU2l6ZSgpIH0pICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwg
aW5zZXJ0U3RhdGVtZW50LT5iaW5kQmxvYig5LCBjc3BFbmNvZGVyLmJ1ZmZlcigpKSAhPSBTUUxJ
VEVfT0sKICAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRleHQoMTAsIGRhdGEu
cmVmZXJyZXJQb2xpY3kpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVt
ZW50LT5iaW5kQmxvYigxMSwgU3BhbiB7IHNjcmlwdFJlc291cmNlTWFwRW5jb2Rlci5idWZmZXIo
KSwgc2NyaXB0UmVzb3VyY2VNYXBFbmNvZGVyLmJ1ZmZlclNpemUoKSB9KSAhPSBTUUxJVEVfT0sK
LSAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoMTIsIFNwYW4geyBjZXJ0
aWZpY2F0ZUluZm9FbmNvZGVyLmJ1ZmZlcigpLCBjZXJ0aWZpY2F0ZUluZm9FbmNvZGVyLmJ1ZmZl
clNpemUoKSB9KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+
YmluZEJsb2IoMTEsIHNjcmlwdFJlc291cmNlTWFwRW5jb2Rlci5idWZmZXIoKSkgIT0gU1FMSVRF
X09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDEyLCBjZXJ0aWZp
Y2F0ZUluZm9FbmNvZGVyLmJ1ZmZlcigpKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAgIHx8IGlu
c2VydFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUihTZXJ2aWNlV29ya2VyLCAiRmFpbGVkIHRvIHN0b3JlIHJlZ2lzdHJhdGlv
biBkYXRhIGludG8gcmVjb3JkcyB0YWJsZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJy
b3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtNTE3LDcgKzUxNyw3IEBAIFN0cmluZyBSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1w
b3J0UmVjb3IKICAgICAgICAgc3RkOjpvcHRpb25hbDxDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNw
b25zZUhlYWRlcnM+IGNvbnRlbnRTZWN1cml0eVBvbGljeTsKICAgICAgICAgYXV0byBjb250ZW50
U2VjdXJpdHlQb2xpY3lEYXRhU3BhbiA9IHNxbC0+Y29sdW1uQmxvYkFzU3Bhbig4KTsKICAgICAg
ICAgaWYgKGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGFTcGFuLnNpemUoKSkgewotICAgICAgICAg
ICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBjc3BEZWNvZGVyKGNvbnRlbnRTZWN1cml0eVBv
bGljeURhdGFTcGFuLmRhdGEoKSwgY29udGVudFNlY3VyaXR5UG9saWN5RGF0YVNwYW4uc2l6ZSgp
KTsKKyAgICAgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgY3NwRGVjb2RlciB7IGNv
bnRlbnRTZWN1cml0eVBvbGljeURhdGFTcGFuIH07CiAgICAgICAgICAgICBjc3BEZWNvZGVyID4+
IGNvbnRlbnRTZWN1cml0eVBvbGljeTsKICAgICAgICAgICAgIGlmICghY29udGVudFNlY3VyaXR5
UG9saWN5KSB7CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtl
ciwgIlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzOiBGYWlsZWQgdG8gZGVjb2Rl
IGNvbnRlbnRTZWN1cml0eVBvbGljeSIpOwpAQCAtNTMwLDcgKzUzMCw3IEBAIFN0cmluZyBSZWdp
c3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3IKICAgICAgICAgSGFzaE1hcDxVUkwsIFNlcnZp
Y2VXb3JrZXJDb250ZXh0RGF0YTo6SW1wb3J0ZWRTY3JpcHQ+IHNjcmlwdFJlc291cmNlTWFwOwog
ICAgICAgICBhdXRvIHNjcmlwdFJlc291cmNlTWFwRGF0YVNwYW4gPSBzcWwtPmNvbHVtbkJsb2JB
c1NwYW4oMTApOwogICAgICAgICBpZiAoc2NyaXB0UmVzb3VyY2VNYXBEYXRhU3Bhbi5zaXplKCkp
IHsKLSAgICAgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgc2NyaXB0UmVzb3VyY2VN
YXBEZWNvZGVyKHNjcmlwdFJlc291cmNlTWFwRGF0YVNwYW4uZGF0YSgpLCBzY3JpcHRSZXNvdXJj
ZU1hcERhdGFTcGFuLnNpemUoKSk7CisgICAgICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNv
ZGVyIHNjcmlwdFJlc291cmNlTWFwRGVjb2RlciB7IHNjcmlwdFJlc291cmNlTWFwRGF0YVNwYW4g
fTsKICAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8SGFzaE1hcDxVUkwsIEltcG9ydGVkU2NyaXB0
QXR0cmlidXRlcz4+IHNjcmlwdFJlc291cmNlTWFwV2l0aG91dFNjcmlwdHM7CiAgICAgICAgICAg
ICBzY3JpcHRSZXNvdXJjZU1hcERlY29kZXIgPj4gc2NyaXB0UmVzb3VyY2VNYXBXaXRob3V0U2Ny
aXB0czsKICAgICAgICAgICAgIGlmICghc2NyaXB0UmVzb3VyY2VNYXBXaXRob3V0U2NyaXB0cykg
ewpAQCAtNTQzLDcgKzU0Myw3IEBAIFN0cmluZyBSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0
UmVjb3IKICAgICAgICAgYXV0byBjZXJ0aWZpY2F0ZUluZm9EYXRhU3BhbiA9IHNxbC0+Y29sdW1u
QmxvYkFzU3BhbigxMSk7CiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q2VydGlmaWNhdGVJbmZvPiBj
ZXJ0aWZpY2F0ZUluZm87CiAKLSAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBjZXJ0
aWZpY2F0ZUluZm9EZWNvZGVyKGNlcnRpZmljYXRlSW5mb0RhdGFTcGFuLmRhdGEoKSwgY2VydGlm
aWNhdGVJbmZvRGF0YVNwYW4uc2l6ZSgpKTsKKyAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVj
b2RlciBjZXJ0aWZpY2F0ZUluZm9EZWNvZGVyIHsgY2VydGlmaWNhdGVJbmZvRGF0YVNwYW4gfTsK
ICAgICAgICAgY2VydGlmaWNhdGVJbmZvRGVjb2RlciA+PiBjZXJ0aWZpY2F0ZUluZm87CiAgICAg
ICAgIGlmICghY2VydGlmaWNhdGVJbmZvKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJP
UihTZXJ2aWNlV29ya2VyLCAiUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yZHM6IEZh
aWxlZCB0byBkZWNvZGUgY2VydGlmaWNhdGVJbmZvIik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93
b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NjcmlwdFN0b3JhZ2UuY3Bw
CShyZXZpc2lvbiAyNzg3MTMpCisrKyBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2Vy
dmVyL1NXU2NyaXB0U3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDkgKzg2LDkgQEAg
U2NyaXB0QnVmZmVyIFNXU2NyaXB0U3RvcmFnZTo6c3RvcmUoY29ucwogICAgIGF1dG8gc2NyaXB0
UGF0aCA9IHRoaXMtPnNjcmlwdFBhdGgocmVnaXN0cmF0aW9uS2V5LCBzY3JpcHRVUkwpOwogICAg
IEZpbGVTeXN0ZW06Om1ha2VBbGxEaXJlY3RvcmllcyhGaWxlU3lzdGVtOjpwYXJlbnRQYXRoKHNj
cmlwdFBhdGgpKTsKIAotICAgIGF1dG8gaXRlcmF0ZU92ZXJCdWZmZXJBbmRXcml0ZURhdGEgPSBb
Jl0oY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIHdyaXRlRGF0
YSkgewotICAgICAgICBmb3IgKGF1dG8gaXQgPSBzY3JpcHQuYnVmZmVyKCktPmJlZ2luKCk7IGl0
ICE9IHNjcmlwdC5idWZmZXIoKS0+ZW5kKCk7ICsraXQpCi0gICAgICAgICAgICB3cml0ZURhdGEo
aXQtPnNlZ21lbnQtPmRhdGEoKSwgaXQtPnNlZ21lbnQtPnNpemUoKSk7CisgICAgYXV0byBpdGVy
YXRlT3ZlckJ1ZmZlckFuZFdyaXRlRGF0YSA9IFsmXShjb25zdCBGdW5jdGlvbjxib29sKFNwYW48
Y29uc3Qgc3RkOjpieXRlPik+JiB3cml0ZURhdGEpIHsKKyAgICAgICAgZm9yIChhdXRvJiBzZWdt
ZW50RW50cnkgOiAqc2NyaXB0LmJ1ZmZlcigpKQorICAgICAgICAgICAgd3JpdGVEYXRhKHNlZ21l
bnRFbnRyeS5zZWdtZW50LT5ieXRlcygpKTsKICAgICB9OwogCiAgICAgaWYgKCFzaG91bGRVc2VG
aWxlTWFwcGluZyhzY3JpcHQuYnVmZmVyKCktPnNpemUoKSkpIHsKQEAgLTk3LDggKzk3LDggQEAg
U2NyaXB0QnVmZmVyIFNXU2NyaXB0U3RvcmFnZTo6c3RvcmUoY29ucwogICAgICAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIlNXU2NyaXB0U3RvcmFnZTo6c3RvcmU6IEZh
aWx1cmUgdG8gc3RvcmUgJXMsIEZpbGVTeXN0ZW06Om9wZW5GaWxlKCkgZmFpbGVkIiwgc2NyaXB0
UGF0aC51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIH0K
LSAgICAgICAgaXRlcmF0ZU92ZXJCdWZmZXJBbmRXcml0ZURhdGEoWyZdKGNvbnN0IHVpbnQ4X3Qq
IGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gICAgICAgICAgICBGaWxlU3lzdGVtOjp3cml0ZVRvRmls
ZShoYW5kbGUsIGRhdGEsIHNpemUpOworICAgICAgICBpdGVyYXRlT3ZlckJ1ZmZlckFuZFdyaXRl
RGF0YShbJl0oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpIHsKKyAgICAgICAgICAgIEZpbGVT
eXN0ZW06OndyaXRlVG9GaWxlKGhhbmRsZSwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9KTsKICAgICAgICAgRmlsZVN5c3RlbTo6
Y2xvc2VGaWxlKGhhbmRsZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjc4NzEzKQorKysgU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw4MSBAQAorMjAy
MS0wNi0xMCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRvcHQg
U3BhbiBpbiBtb3JlIHBsYWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hl
U3RvcmFnZUVuZ2luZUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpD
YWNoZTo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6ZGVj
b2RlUmVjb3JkSGVhZGVyKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0
b3JhZ2VFbmdpbmVDYWNoZXMuY3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNh
Y2hlczo6c3RvcmVPcmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hl
czo6cmVhZE9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6ZW5jb2RlQ2Fj
aGVOYW1lcyk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6ZGVjb2RlQ2FjaGVzTmFt
ZXMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6Om1hcFRvRmlsZSBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Y29tcHV0ZVNIQTEpOgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaDoKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhY2hlOjpEYXRhOjpEYXRhKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6RGF0YTo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6
OkRhdGE6OmFkb3B0TWFwKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVFbnRyeS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6OmVu
Y29kZUFzU3RvcmFnZVJlY29yZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNo
ZTo6RW50cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZUtleS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNo
ZTo6aGFzaFN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6S2V5Ojpjb21w
dXRlSGFzaCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6S2V5Ojpjb21w
dXRlUGFydGl0aW9uSGFzaCBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
ZGVjb2RlUmVjb3JkTWV0YURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmVu
Y29kZVJlY29yZE1ldGFEYXRhKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6U3VicmVzb3VyY2VzRW50cnk6OmVuY29kZUFzU3RvcmFnZVJlY29yZCBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3VicmVzb3VyY2VzRW50cnk6OmRlY29kZVN0
b3JhZ2VSZWNvcmQpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVyLmg6Cisg
ICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6
QXJndW1lbnRDb2RlcjxDU3RyaW5nPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRD
b2RlcjxDU3RyaW5nPjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxTdHJp
bmc+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpkZWNvZGVTdHJpbmdUZXh0KToKKyAgICAgICAg
KElQQzo6QXJndW1lbnRDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUpOgorICAgICAgICAoSVBD
OjpBcmd1bWVudENvZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29kZSk6CisgICAgICAgICogUGxhdGZv
cm0vSVBDL0FyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgIChJUEM6OlNpbXBsZUFyZ3VtZW50Q29k
ZXI6OmVuY29kZSk6CisgICAgICAgIChJUEM6OlNpbXBsZUFyZ3VtZW50Q29kZXI6OmRlY29kZSk6
CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FycmF5UmVmZXJlbmNlLmg6CisgICAgICAgICogUGxh
dGZvcm0vSVBDL0RlY29kZXIuY3BwOgorICAgICAgICAoSVBDOjpEZWNvZGVyOjpkZWNvZGVGaXhl
ZExlbmd0aERhdGEpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9EZWNvZGVyLmg6CisgICAgICAg
IChJUEM6OkRlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgICogUGxhdGZv
cm0vSVBDL0VuY29kZXIuY3BwOgorICAgICAgICAoSVBDOjpFbmNvZGVyOjplbmNvZGVGaXhlZExl
bmd0aERhdGEpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9FbmNvZGVyLmg6CisgICAgICAgICog
UGxhdGZvcm0vSVBDL1NoYXJlZEJ1ZmZlckNvcHkuY3BwOgorICAgICAgICAoSVBDOjpTaGFyZWRC
dWZmZXJDb3B5OjplbmNvZGUgY29uc3QpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9TdHJlYW1D
b25uZWN0aW9uRW5jb2Rlci5oOgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2Rl
cnMuY3BwOgorICAgICAgICAoSVBDOjplbmNvZGVTaGFyZWRCdWZmZXIpOgorICAgICAgICAoSVBD
OjpkZWNvZGVTaGFyZWRCdWZmZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJQ29udGVu
dFJ1bGVMaXN0U3RvcmUuY3BwOgorICAgICAgICAoQVBJOjplbmNvZGVDb250ZW50UnVsZUxpc3RN
ZXRhRGF0YSk6CisgICAgICAgIChBUEk6OmdldERhdGEpOgorICAgICAgICAoQVBJOjpkZWNvZGVD
b250ZW50UnVsZUxpc3RNZXRhRGF0YSk6CisgICAgICAgIChBUEk6OndyaXRlRGF0YVRvRmlsZSk6
CisgICAgICAgICogVUlQcm9jZXNzL21hYy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpIaXN0b3J5RW50cnlEYXRhRW5jb2Rlcjo6b3BlcmF0b3I8PCk6Cisg
ICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFFbmNvZGVyOjplbmNvZGVBcml0aG1ldGlj
VHlwZSk6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFFbmNvZGVyOjplbmNvZGVG
aXhlZExlbmd0aERhdGEpOgorICAgICAgICAoV2ViS2l0OjpIaXN0b3J5RW50cnlEYXRhRGVjb2Rl
cjo6b3BlcmF0b3I+Pik6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFEZWNvZGVy
OjpkZWNvZGVBcml0aG1ldGljVHlwZSk6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURh
dGFEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQ
STo6ZW5jb2RlVHlwZWRBcnJheSk6CisKIDIwMjEtMDYtMTAgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KIAogICAgICAgICBFbmFibGUgV2ViUGFnZSdzIHJlbGVhc2UgbG9nZ2luZyBp
biBlcGhlbWVyYWwgc2Vzc2lvbnMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCShy
ZXZpc2lvbiAyNzg3MTMpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0Nh
Y2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTY1LDcgKzU2NSw3
IEBAIFN0b3JhZ2U6OlJlY29yZCBDYWNoZTo6ZW5jb2RlKGNvbnN0IFJlY28KIAogICAgIGVuY29k
ZXIuZW5jb2RlQ2hlY2tzdW0oKTsKIAotICAgIERhdGEgaGVhZGVyKGVuY29kZXIuYnVmZmVyKCks
IGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICBEYXRhIGhlYWRlcihlbmNvZGVyLmJ1ZmZlcigp
KTsKICAgICBEYXRhIGJvZHk7CiAgICAgV1RGOjpzd2l0Y2hPbihyZWNvcmQucmVzcG9uc2VCb2R5
LCBbXShjb25zdCBSZWY8V2ViQ29yZTo6Rm9ybURhdGE+JiBmb3JtRGF0YSkgewogICAgICAgICAv
LyBGSVhNRTogU3RvcmUgZm9ybSBkYXRhIGJvZHkuCkBAIC02MzAsNyArNjMwLDcgQEAgc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RE9NQ2FjaGVFbgogCiBzdGQ6Om9wdGlvbmFsPENhY2hl
OjpEZWNvZGVkUmVjb3JkPiBDYWNoZTo6ZGVjb2RlUmVjb3JkSGVhZGVyKGNvbnN0IFN0b3JhZ2U6
OlJlY29yZCYgc3RvcmFnZSkKIHsKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29k
ZXIoc3RvcmFnZS5oZWFkZXIuZGF0YSgpLCBzdG9yYWdlLmhlYWRlci5zaXplKCkpOworICAgIFdU
Rjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihzdG9yYWdlLmhlYWRlcik7CiAKICAgICBz
dGQ6Om9wdGlvbmFsPGRvdWJsZT4gaW5zZXJ0aW9uVGltZTsKICAgICBkZWNvZGVyID4+IGluc2Vy
dGlvblRpbWU7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hl
U3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCShyZXZpc2lvbiAy
Nzg3MTMpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFn
ZUVuZ2luZUNhY2hlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSwxNCArMTA1LDE0IEBAIHZv
aWQgQ2FjaGVzOjpzdG9yZU9yaWdpbihDb21wbGV0aW9uQ2FsbGIKICAgICBlbmNvZGVyIDw8IG1f
b3JpZ2luLmNsaWVudE9yaWdpbi5wcm90b2NvbDsKICAgICBlbmNvZGVyIDw8IG1fb3JpZ2luLmNs
aWVudE9yaWdpbi5ob3N0OwogICAgIGVuY29kZXIgPDwgbV9vcmlnaW4uY2xpZW50T3JpZ2luLnBv
cnQ7Ci0gICAgbV9lbmdpbmUtPndyaXRlRmlsZShjYWNoZXNPcmlnaW5GaWxlbmFtZShtX3Jvb3RQ
YXRoKSwgRGF0YSB7IGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpIH0sIFtw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildIChzdGQ6Om9wdGlvbmFsPEVycm9yPiYmIGVycm9yKSBtdXRh
YmxlIHsKKyAgICBtX2VuZ2luZS0+d3JpdGVGaWxlKGNhY2hlc09yaWdpbkZpbGVuYW1lKG1fcm9v
dFBhdGgpLCBEYXRhIHsgZW5jb2Rlci5idWZmZXIoKSB9LCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSAoc3RkOjpvcHRpb25hbDxFcnJvcj4mJiBlcnJvcikgbXV0YWJsZSB7CiAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKFdURk1vdmUoZXJyb3IpKTsKICAgICB9KTsKIH0KIAogc3RkOjpvcHRpb25h
bDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+IENhY2hlczo6cmVhZE9yaWdpbihjb25zdCBEYXRhJiBk
YXRhKQogewotICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihkYXRhLmRhdGEo
KSwgZGF0YS5zaXplKCkpOworICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2Rlcihk
YXRhKTsKIAogICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiB0
b3BPcmlnaW47CiAgICAgZGVjb2RlciA+PiB0b3BPcmlnaW47CkBAIC00MDQsMTIgKzQwNCwxMiBA
QCBzdGF0aWMgaW5saW5lIERhdGEgZW5jb2RlQ2FjaGVOYW1lcyhjb25zCiAgICAgICAgIGVuY29k
ZXIgPDwgY2FjaGUudW5pcXVlTmFtZSgpOwogICAgIH0KIAotICAgIHJldHVybiBEYXRhIHsgZW5j
b2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkgfTsKKyAgICByZXR1cm4gRGF0YSB7
IGVuY29kZXIuYnVmZmVyKCkgfTsKIH0KIAogc3RhdGljIGlubGluZSBFeHBlY3RlZDxWZWN0b3I8
c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4sIEVycm9yPiBkZWNvZGVDYWNoZXNOYW1lcyhjb25z
dCBEYXRhJiBkYXRhKQogewotICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2Rlcihk
YXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOworICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIg
ZGVjb2RlcihkYXRhKTsKICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBjb3VudDsKICAgICBk
ZWNvZGVyID4+IGNvdW50OwogICAgIGlmICghY291bnQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAJKHJl
dmlzaW9uIDI3ODcxMykKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgbmFtZXNw
YWNlIE5ldHdvcmtDYWNoZSB7CiBEYXRhIERhdGE6Om1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBh
dGgpIGNvbnN0CiB7CiAgICAgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZTsK
LSAgICBhdXRvIGFwcGx5RGF0YSA9IFsmXShjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4
X3QqLCBzaXplX3QpPiYgYXBwbGllcikgeyBhcHBseShhcHBsaWVyKTsgfTsKKyAgICBhdXRvIGFw
cGx5RGF0YSA9IFsmXShjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+
JiBhcHBsaWVyKSB7IGFwcGx5KGFwcGxpZXIpOyB9OwogICAgIGF1dG8gbWFwcGVkRmlsZSA9IEZp
bGVTeXN0ZW06Om1hcFRvRmlsZShwYXRoLCBzaXplKCksIFdURk1vdmUoYXBwbHlEYXRhKSwgJmhh
bmRsZSk7CiAgICAgaWYgKCFtYXBwZWRGaWxlKQogICAgICAgICByZXR1cm4geyB9OwpAQCAtODYs
OSArODYsOSBAQCBEYXRhIGFkb3B0QW5kTWFwRmlsZShGaWxlU3lzdGVtOjpQbGF0Zm9yCiBTSEEx
OjpEaWdlc3QgY29tcHV0ZVNIQTEoY29uc3QgRGF0YSYgZGF0YSwgY29uc3QgU2FsdCYgc2FsdCkK
IHsKICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhzYWx0LmRhdGEoKSwgc2FsdC5z
aXplKCkpOwotICAgIGRhdGEuYXBwbHkoWyZzaGExXShjb25zdCB1aW50OF90KiBkYXRhLCBzaXpl
X3Qgc2l6ZSkgewotICAgICAgICBzaGExLmFkZEJ5dGVzKGRhdGEsIHNpemUpOworICAgIHNoYTEu
YWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgc2FsdCB9KSk7CisgICAgZGF0YS5hcHBseShbJnNoYTFd
KFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhKSB7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoZGF0
YSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0pOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaAkocmV2
aXNpb24gMjc4NzEzKQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRl
IDx3dGYvRmlsZVN5c3RlbS5oPgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbkRpc3BhdGNoZXIuaD4K
ICNpbmNsdWRlIDx3dGYvU0hBMS5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8
d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKQEAgLTU0LDYgKzU1LDEwIEBAIGNsYXNzIERhdGEgewogcHVibGljOgogICAgIERhdGEo
KSB7IH0KICAgICBEYXRhKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOworICAgIERhdGEoU3Bhbjxj
b25zdCBzdGQ6OmJ5dGU+IGRhdGEpCisgICAgICAgIDogRGF0YShyZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQ4X3QqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKQorICAgIHsKKyAgICB9CiAK
ICAgICB+RGF0YSgpIHsgfQogCkBAIC03OSw3ICs4NCw3IEBAIHB1YmxpYzoKIAogICAgIERhdGEg
c3VicmFuZ2Uoc2l6ZV90IG9mZnNldCwgc2l6ZV90KSBjb25zdDsKIAotICAgIGJvb2wgYXBwbHko
Y29uc3QgRnVuY3Rpb248Ym9vbCAoY29uc3QgdWludDhfdCosIHNpemVfdCk+JikgY29uc3Q7Cisg
ICAgYm9vbCBhcHBseShjb25zdCBGdW5jdGlvbjxib29sIChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4p
PiYpIGNvbnN0OwogCiAgICAgRGF0YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKSBjb25z
dDsKIApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVEYXRhQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0JKHJldmlzaW9uIDI3ODcxMykKKysrIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC02OSwxMiArNjksMTIgQEAgYm9vbCBEYXRhOjppc051bGwoKSBj
b25zdAogICAgIHJldHVybiAhbV9kaXNwYXRjaERhdGE7CiB9CiAKLWJvb2wgRGF0YTo6YXBwbHko
Y29uc3QgRnVuY3Rpb248Ym9vbCAoY29uc3QgdWludDhfdCosIHNpemVfdCk+JiBhcHBsaWVyKSBj
b25zdAorYm9vbCBEYXRhOjphcHBseShjb25zdCBGdW5jdGlvbjxib29sIChTcGFuPGNvbnN0IHN0
ZDo6Ynl0ZT4pPiYgYXBwbGllcikgY29uc3QKIHsKICAgICBpZiAoIW1fc2l6ZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBkaXNwYXRjaF9kYXRhX2FwcGx5KG1fZGlzcGF0Y2hE
YXRhLmdldCgpLCBbJmFwcGxpZXJdKGRpc3BhdGNoX2RhdGFfdCwgc2l6ZV90LCBjb25zdCB2b2lk
KiBkYXRhLCBzaXplX3Qgc2l6ZSkgewotICAgICAgICByZXR1cm4gYXBwbGllcihzdGF0aWNfY2Fz
dDxjb25zdCB1aW50OF90Kj4oZGF0YSksIHNpemUpOworICAgICAgICByZXR1cm4gYXBwbGllcihT
cGFuIHsgc3RhdGljX2Nhc3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSksIHNpemUgfSk7CiAgICAg
fSk7CiB9CiAKQEAgLTk0LDE0ICs5NCwxMSBAQCBEYXRhIGNvbmNhdGVuYXRlKGNvbnN0IERhdGEm
IGEsIGNvbnN0IERhCiAKIERhdGEgRGF0YTo6YWRvcHRNYXAoRmlsZVN5c3RlbTo6TWFwcGVkRmls
ZURhdGEmJiBtYXBwZWRGaWxlLCBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmQpCiB7
Ci0gICAgc2l6ZV90IHNpemUgPSBtYXBwZWRGaWxlLnNpemUoKTsKLSAgICB2b2lkKiBtYXAgPSBt
YXBwZWRGaWxlLmxlYWtIYW5kbGUoKTsKLSAgICBBU1NFUlQobWFwKTsKLSAgICBBU1NFUlQobWFw
ICE9IE1BUF9GQUlMRUQpOworICAgIGF1dG8gbWFwID0gbWFwcGVkRmlsZS5sZWFrSGFuZGxlKCk7
CisgICAgQVNTRVJUKG1hcC5kYXRhKCkpOworICAgIEFTU0VSVChtYXAuZGF0YSgpICE9IE1BUF9G
QUlMRUQpOwogICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShmZCk7Ci0gICAgYXV0byBib2R5TWFw
ID0gYWRvcHRPU09iamVjdChkaXNwYXRjaF9kYXRhX2NyZWF0ZShtYXAsIHNpemUsIGRpc3BhdGNo
X2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIFtt
YXAsIHNpemVdIHsKLSAgICAgICAgbXVubWFwKG1hcCwgc2l6ZSk7Ci0gICAgfSkpOworICAgIGF1
dG8gYm9keU1hcCA9IGFkb3B0T1NPYmplY3QoZGlzcGF0Y2hfZGF0YV9jcmVhdGUobWFwLmRhdGEo
KSwgbWFwLnNpemUoKSwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9Q
UklPUklUWV9ERUZBVUxULCAwKSwgRElTUEFUQ0hfREFUQV9ERVNUUlVDVE9SX01VTk1BUCkpOwog
ICAgIHJldHVybiB7IFdURk1vdmUoYm9keU1hcCksIERhdGE6OkJhY2tpbmc6Ok1hcCB9OwogfQog
CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVu
dHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZUVudHJ5LmNwcAkocmV2aXNpb24gMjc4NzEzKQorKysgU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk5LDEwICs5OSwxMCBAQCBTdG9yYWdlOjpSZWNvcmQgRW50cnk6OmVuY29kZUFzU3Rv
cmFnZVJlCiAgICAgCiAgICAgZW5jb2Rlci5lbmNvZGVDaGVja3N1bSgpOwogCi0gICAgRGF0YSBo
ZWFkZXIoZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOworICAgIERhdGEg
aGVhZGVyIHsgZW5jb2Rlci5idWZmZXIoKSB9OwogICAgIERhdGEgYm9keTsKICAgICBpZiAobV9i
dWZmZXIpCi0gICAgICAgIGJvZHkgPSB7IG1fYnVmZmVyLT5kYXRhKCksIG1fYnVmZmVyLT5zaXpl
KCkgfTsKKyAgICAgICAgYm9keSA9IHsgbV9idWZmZXItPmJ5dGVzKCkgfTsKIAogICAgIHJldHVy
biB7IG1fa2V5LCBtX3RpbWVTdGFtcCwgaGVhZGVyLCBib2R5LCB7IH0gfTsKIH0KQEAgLTExMSw3
ICsxMTEsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IEVudHJ5OjpkZWNvZGVTdG9yCiB7CiAg
ICAgYXV0byBlbnRyeSA9IG1ha2VVbmlxdWU8RW50cnk+KHN0b3JhZ2VFbnRyeSk7CiAKLSAgICBX
VEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoc3RvcmFnZUVudHJ5LmhlYWRlci5kYXRh
KCksIHN0b3JhZ2VFbnRyeS5oZWFkZXIuc2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpE
ZWNvZGVyIGRlY29kZXIgeyBzdG9yYWdlRW50cnkuaGVhZGVyIH07CiAgICAgV2ViQ29yZTo6UmVz
b3VyY2VSZXNwb25zZSByZXNwb25zZTsKICAgICBpZiAoIVdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2U6OmRlY29kZShkZWNvZGVyLCByZXNwb25zZSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpJ
bmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlS2V5LmNwcAkocmV2aXNpb24gMjc4NzEzKQorKysgU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
OCwxMyArODgsMTMgQEAgc3RhdGljIHZvaWQgaGFzaFN0cmluZyhTSEExJiBzaGExLCBjb25zdAog
CiAgICAgaWYgKHN0cmluZy5pczhCaXQoKSAmJiBzdHJpbmcuaXNBbGxBU0NJSSgpKSB7CiAgICAg
ICAgIGNvbnN0IHVpbnQ4X3QgbnVsbEJ5dGUgPSAwOwotICAgICAgICBzaGExLmFkZEJ5dGVzKHN0
cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAgICAgICBzaGExLmFkZEJ5
dGVzKCZudWxsQnl0ZSwgMSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsg
c3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSB9KSk7CisgICAgICAgIHNoYTEu
YWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgJm51bGxCeXRlLCAxIH0pKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBhdXRvIGNTdHJpbmcgPSBzdHJpbmcudXRmOCgpOwogICAgIC8vIEluY2x1
ZGUgdGVybWluYXRpbmcgbnVsbCBieXRlLgotICAgIHNoYTEuYWRkQnl0ZXMoY1N0cmluZy5kYXRh
QXNVSW50OFB0cigpLCBjU3RyaW5nLmxlbmd0aCgpICsgMSk7CisgICAgc2hhMS5hZGRCeXRlcyhh
c0J5dGVzKFNwYW4geyBjU3RyaW5nLmRhdGFBc1VJbnQ4UHRyKCksIGNTdHJpbmcubGVuZ3RoKCkg
KyAxIH0pKTsKIH0KIAogS2V5OjpIYXNoVHlwZSBLZXk6OmNvbXB1dGVIYXNoKGNvbnN0IFNhbHQm
IHNhbHQpIGNvbnN0CkBAIC0xMDIsNyArMTAyLDcgQEAgS2V5OjpIYXNoVHlwZSBLZXk6OmNvbXB1
dGVIYXNoKGNvbnN0IFNhbAogICAgIC8vIFdlIGRvbid0IHJlYWxseSBuZWVkIGEgY3J5cHRvZ3Jh
cGhpYyBoYXNoLiBUaGUga2V5IGlzIGFsd2F5cyB2ZXJpZmllZCBhZ2FpbnN0IHRoZSBlbnRyeSBo
ZWFkZXIuCiAgICAgLy8gU0hBMSBqdXN0IGhhcHBlbnMgdG8gYmUgc3VpdGFibHkgc2l6ZWQsIGZh
c3QgYW5kIGF2YWlsYWJsZS4KICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhzYWx0
LmRhdGEoKSwgc2FsdC5zaXplKCkpOworICAgIHNoYTEuYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsg
c2FsdCB9KSk7CiAKICAgICBoYXNoU3RyaW5nKHNoYTEsIG1fcGFydGl0aW9uKTsKICAgICBoYXNo
U3RyaW5nKHNoYTEsIG1fdHlwZSk7CkBAIC0xMTcsNyArMTE3LDcgQEAgS2V5OjpIYXNoVHlwZSBL
ZXk6OmNvbXB1dGVIYXNoKGNvbnN0IFNhbAogS2V5OjpIYXNoVHlwZSBLZXk6OmNvbXB1dGVQYXJ0
aXRpb25IYXNoKGNvbnN0IFNhbHQmIHNhbHQpIGNvbnN0CiB7CiAgICAgU0hBMSBzaGExOwotICAg
IHNoYTEuYWRkQnl0ZXMoc2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKTsKKyAgICBzaGExLmFkZEJ5
dGVzKGFzQnl0ZXMoU3BhbiB7IHNhbHQgfSkpOwogCiAgICAgaGFzaFN0cmluZyhzaGExLCBtX3Bh
cnRpdGlvbik7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlU3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAkocmV2aXNpb24gMjc4NzEzKQor
KysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU0LDggKzQ1NCw4IEBAIHN0cnVjdCBSZWNvcmRNZXRh
RGF0YSB7CiBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlUmVjb3JkTWV0YURh
dGEoUmVjb3JkTWV0YURhdGEmIG1ldGFEYXRhLCBjb25zdCBEYXRhJiBmaWxlRGF0YSkKIHsKICAg
ICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBmaWxlRGF0YS5hcHBseShbJm1ldGFEYXRhLCAm
c3VjY2Vzc10oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgV1RG
OjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOworICAgIGZpbGVEYXRh
LmFwcGx5KFsmbWV0YURhdGEsICZzdWNjZXNzXShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkg
eworICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YSk7CiAgICAg
ICAgIAogICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBjYWNoZVN0b3JhZ2VWZXJzaW9u
OwogICAgICAgICBkZWNvZGVyID4+IGNhY2hlU3RvcmFnZVZlcnNpb247CkBAIC01ODYsNyArNTg2
LDcgQEAgc3RhdGljIERhdGEgZW5jb2RlUmVjb3JkTWV0YURhdGEoY29uc3QgUgogCiAgICAgZW5j
b2Rlci5lbmNvZGVDaGVja3N1bSgpOwogCi0gICAgcmV0dXJuIERhdGEoZW5jb2Rlci5idWZmZXIo
KSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOworICAgIHJldHVybiB7IGVuY29kZXIuYnVmZmVyKCkg
fTsKIH0KIAogc3RkOjpvcHRpb25hbDxCbG9iU3RvcmFnZTo6QmxvYj4gU3RvcmFnZTo6c3RvcmVC
b2R5QXNCbG9iKFdyaXRlT3BlcmF0aW9uJiB3cml0ZU9wZXJhdGlvbikKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwCShyZXZpc2lvbiAyNzg3MTMpCisrKyBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0Vu
dHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDE0ICsxMjMsMTQgQEAgU3RvcmFnZTo6UmVj
b3JkIFN1YnJlc291cmNlc0VudHJ5OjplbmNvZAogCiAgICAgZW5jb2Rlci5lbmNvZGVDaGVja3N1
bSgpOwogCi0gICAgcmV0dXJuIHsgbV9rZXksIG1fdGltZVN0YW1wLCB7IGVuY29kZXIuYnVmZmVy
KCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpIH0sIHsgfSwgeyB9fTsKKyAgICByZXR1cm4geyBtX2tl
eSwgbV90aW1lU3RhbXAsIHsgZW5jb2Rlci5idWZmZXIoKSB9LCB7IH0sIHsgfX07CiB9CiAKIHN0
ZDo6dW5pcXVlX3B0cjxTdWJyZXNvdXJjZXNFbnRyeT4gU3VicmVzb3VyY2VzRW50cnk6OmRlY29k
ZVN0b3JhZ2VSZWNvcmQoY29uc3QgU3RvcmFnZTo6UmVjb3JkJiBzdG9yYWdlRW50cnkpCiB7CiAg
ICAgYXV0byBlbnRyeSA9IG1ha2VVbmlxdWU8U3VicmVzb3VyY2VzRW50cnk+KHN0b3JhZ2VFbnRy
eSk7CiAKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoc3RvcmFnZUVudHJ5
LmhlYWRlci5kYXRhKCksIHN0b3JhZ2VFbnRyeS5oZWFkZXIuc2l6ZSgpKTsKKyAgICBXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyBzdG9yYWdlRW50cnkuaGVhZGVyIH07CiAgICAg
c3RkOjpvcHRpb25hbDxWZWN0b3I8U3VicmVzb3VyY2VJbmZvPj4gc3VicmVzb3VyY2VzOwogICAg
IGRlY29kZXIgPj4gc3VicmVzb3VyY2VzOwogICAgIGlmICghc3VicmVzb3VyY2VzKQpJbmRleDog
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2Rlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXIuaAkocmV2aXNpb24gMjc4
NzEzKQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2Rlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OSwxMyArNzksMTMgQEAgc3RydWN0IEFyZ3VtZW50Q29kZXI8VCwgdHlw
ZW5hbWUgc3RkOjplbgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+CiAgICAgc3RhdGlj
IHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIFQgdmFsdWUpCiAgICAgewotICAgICAgICBl
bmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPigmdmFsdWUpLCBzaXplb2YoVCksIGFsaWdub2YoVCkpOworICAgICAgICBlbmNvZGVyLmVu
Y29kZUZpeGVkTGVuZ3RoRGF0YShhc0J5dGVzKFNwYW4geyAmdmFsdWUsIDEgfSksIGFsaWdub2Yo
VCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFQ+IGRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQogICAgIHsKICAgICAgICAgVCByZXN1bHQ7Ci0gICAgICAgIGlmIChkZWNvZGVy
LmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmcmVzdWx0
KSwgc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKSkKKyAgICAgICAgaWYgKGRlY29kZXIuZGVjb2RlRml4
ZWRMZW5ndGhEYXRhKFNwYW4geyAmcmVzdWx0LCAxIH0pKQogICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyNzg3
MTMpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBBcmd1bWVudENvZGVyPENTdHJpbmc+
OjplbmNvZGUoRW5jbwogCiAgICAgdWludDMyX3QgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwog
ICAgIGVuY29kZXIgPDwgbGVuZ3RoOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KHN0cmluZy5kYXRhQXNVSW50OFB0cigpLCBsZW5ndGgsIDEpOworICAgIGVuY29kZXIuZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKHN0cmluZy5ieXRlcygpLCAxKTsKIH0KIAogV0FSTl9VTlVTRURfUkVU
VVJOIGJvb2wgQXJndW1lbnRDb2RlcjxDU3RyaW5nPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IENTdHJpbmcmIHJlc3VsdCkKQEAgLTEwMyw3ICsxMDMsNyBAQCBXQVJOX1VOVVNFRF9SRVRVUk4g
Ym9vbCBBcmd1bWVudENvZGVyPENTCiAKICAgICBjaGFyKiBidWZmZXI7CiAgICAgQ1N0cmluZyBz
dHJpbmcgPSBDU3RyaW5nOjpuZXdVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KGJ1ZmZlciksIGxlbmd0aCwgMSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVu
Z3RoRGF0YShhc1dyaXRhYmxlQnl0ZXMoU3BhbiB7IGJ1ZmZlciwgbGVuZ3RoIH0pLCAxKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmVzdWx0ID0gc3RyaW5nOwpAQCAtMTI1LDkgKzEy
NSw5IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxTdHJpbmc+OjplbmNvZGUoRW5jb2QKICAgICBlbmNv
ZGVyIDw8IGxlbmd0aCA8PCBpczhCaXQ7CiAKICAgICBpZiAoaXM4Qml0KQotICAgICAgICBlbmNv
ZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShzdHJpbmcuY2hhcmFjdGVyczgoKSwgbGVuZ3RoICog
c2l6ZW9mKExDaGFyKSwgYWxpZ25vZihMQ2hhcikpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZp
eGVkTGVuZ3RoRGF0YShhc0J5dGVzKFNwYW4geyBzdHJpbmcuY2hhcmFjdGVyczgoKSwgbGVuZ3Ro
IH0pLCBhbGlnbm9mKExDaGFyKSk7CiAgICAgZWxzZQotICAgICAgICBlbmNvZGVyLmVuY29kZUZp
eGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzdHJpbmcuY2hh
cmFjdGVyczE2KCkpLCBsZW5ndGggKiBzaXplb2YoVUNoYXIpLCBhbGlnbm9mKFVDaGFyKSk7Cisg
ICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGFzQnl0ZXMoU3BhbiB7IHN0cmlu
Zy5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoIH0pLCBhbGlnbm9mKFVDaGFyKSk7CiB9CiB0ZW1wbGF0
ZQogdm9pZCBBcmd1bWVudENvZGVyPFN0cmluZz46OmVuY29kZTxFbmNvZGVyPihFbmNvZGVyJiwg
Y29uc3QgU3RyaW5nJik7CkBAIC0xNDMsNyArMTQzLDcgQEAgc3RhdGljIGlubGluZSBzdGQ6Om9w
dGlvbmFsPFN0cmluZz4gZGVjbwogICAgIAogICAgIENoYXJhY3RlclR5cGUqIGJ1ZmZlcjsKICAg
ICBTdHJpbmcgc3RyaW5nID0gU3RyaW5nOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVm
ZmVyKTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KGJ1ZmZlciksIGxlbmd0aCAqIHNpemVvZihDaGFyYWN0ZXJUeXBlKSwg
YWxpZ25vZihDaGFyYWN0ZXJUeXBlKSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVu
Z3RoRGF0YShTcGFuIHsgYnVmZmVyLCBsZW5ndGggfSkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CiAgICAgCiAgICAgcmV0dXJuIHN0cmluZzsKQEAgLTE4MSwxMiArMTgxLDEyIEBAIFdB
Uk5fVU5VU0VEX1JFVFVSTiBib29sIEFyZ3VtZW50Q29kZXI8U3QKIAogdm9pZCBBcmd1bWVudENv
ZGVyPFNIQTE6OkRpZ2VzdD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTSEExOjpE
aWdlc3QmIGRpZ2VzdCkKIHsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShkaWdl
c3QuZGF0YSgpLCBzaXplb2YoZGlnZXN0KSwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoU3BhbiB7IGRpZ2VzdCB9LCAxKTsKIH0KIAogV0FSTl9VTlVTRURfUkVUVVJOIGJv
b2wgQXJndW1lbnRDb2RlcjxTSEExOjpEaWdlc3Q+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwg
U0hBMTo6RGlnZXN0JiBkaWdlc3QpCiB7Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpLCAxKTsKKyAgICByZXR1cm4g
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IGRpZ2VzdCB9LCAxKTsKIH0KIAog
I2lmIEhBVkUoQVVESVRfVE9LRU4pCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9B
cmd1bWVudENvZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L0FyZ3VtZW50Q29kZXJzLmgJKHJldmlzaW9uIDI3ODcxMykKKysrIFNvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEyICs0NSwx
MiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgU2ltcGxlQXJndW1lCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRW5jb2Rlcj4KICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5j
b2RlciwgY29uc3QgVCYgdCkKICAgICB7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZ0KSwgc2l6ZW9mKFQpLCBh
bGlnbm9mKFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7
ICZ0LCAxIH0pOwogICAgIH0KIAogICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVCYgdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdCks
IHNpemVvZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZp
eGVkTGVuZ3RoRGF0YShTcGFuIHsgJnQsIDEgfSk7CiAgICAgfQogfTsKIApAQCAtNjEsMTMgKzYx
LDE0IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBFeHRlbnQ+IHN0cnUKICAgICB7CiAg
ICAgICAgIGlmICghRXh0ZW50KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBlbmNvZGVy
LmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihh
cnJheVJlZmVyZW5jZS5kYXRhKCkpLCBhcnJheVJlZmVyZW5jZS5zaXplKCkgKiBzaXplb2YoVCks
IGFsaWdub2YoVCkpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFu
IHsgYXJyYXlSZWZlcmVuY2UuZGF0YSgpLCBhcnJheVJlZmVyZW5jZS5zaXplKCkgfSk7CiAgICAg
fQogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEFycmF5UmVmZXJlbmNlVHlwZT4gZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCiAgICAgewogICAgICAgICBpZiAoIUV4dGVudCkKICAgICAgICAgICAg
IHJldHVybiBBcnJheVJlZmVyZW5jZVR5cGUoKTsKLSAgICAgICAgY29uc3QgdWludDhfdCogZGF0
YSA9IGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhSZWZlcmVuY2UoRXh0ZW50ICogc2l6ZW9mKFQp
LCBhbGlnbm9mKFQpKTsKKworICAgICAgICBjb25zdCBhdXRvKiBkYXRhID0gZGVjb2Rlci5kZWNv
ZGVGaXhlZExlbmd0aFJlZmVyZW5jZShFeHRlbnQgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpOwog
ICAgICAgICBpZiAoIWRhdGEpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAg
ICAgICByZXR1cm4gQXJyYXlSZWZlcmVuY2VUeXBlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+
KGRhdGEpLCBFeHRlbnQpOwpAQCAtODIsNyArODMsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgQXJndW1lbnRDb2RlCiAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KGFycmF5UmVmZXJlbmNlLnNpemUoKSk7CiAgICAgICAgIGlmICghYXJyYXlSZWZlcmVuY2Uu
c2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVk
TGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihhcnJheVJlZmVyZW5j
ZS5kYXRhKCkpLCBhcnJheVJlZmVyZW5jZS5zaXplKCkgKiBzaXplb2YoVCksIGFsaWdub2YoVCkp
OworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgYXJyYXlSZWZl
cmVuY2UuZGF0YSgpLCBhcnJheVJlZmVyZW5jZS5zaXplKCkgfSk7CiAgICAgfQogICAgIHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPEFycmF5UmVmZXJlbmNlVHlwZT4gZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCiAgICAgewpAQCAtOTYsNyArOTcsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
QXJndW1lbnRDb2RlCiAgICAgICAgIGlmIChVTkxJS0VMWShkYXRhU2l6ZS5oYXNPdmVyZmxvd2Vk
KCkpKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgICAgICBjb25zdCB1
aW50OF90KiBkYXRhID0gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aFJlZmVyZW5jZShkYXRhU2l6
ZSwgYWxpZ25vZihUKSk7CisgICAgICAgIGNvbnN0IGF1dG8qIGRhdGEgPSBkZWNvZGVyLmRlY29k
ZUZpeGVkTGVuZ3RoUmVmZXJlbmNlKGRhdGFTaXplLCBhbGlnbm9mKFQpKTsKICAgICAgICAgaWYg
KCFkYXRhKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAgICAgcmV0dXJu
IEFycmF5UmVmZXJlbmNlVHlwZShyZWludGVycHJldF9jYXN0PGNvbnN0IFQqPihkYXRhKSwgc3Rh
dGljX2Nhc3Q8c2l6ZV90PihzaXplKSk7CkBAIC00MjMsNyArNDI0LDcgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyLCBjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlciwgbWluQ2FwYWNpdHk+JiB2ZWN0b3IpCiAgICAgewogICAgICAgICBlbmNvZGVyIDw8IHN0
YXRpY19jYXN0PHVpbnQ2NF90Pih2ZWN0b3Iuc2l6ZSgpKTsKLSAgICAgICAgZW5jb2Rlci5lbmNv
ZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4odmVjdG9y
LmRhdGEoKSksIHZlY3Rvci5zaXplKCkgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpOworICAgICAg
ICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShhc0J5dGVzKFNwYW4geyB2ZWN0b3IgfSks
IGFsaWdub2YoVCkpOwogICAgIH0KICAgICAKICAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJO
IGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwg
T3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mIHZlY3RvcikKQEAgLTQ0Niw3ICs0NDcsNyBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpCiAgICAgICAgIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4gdGVtcDsK
ICAgICAgICAgdGVtcC5ncm93KHNpemUpOwogCi0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVG
aXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4odGVtcC5kYXRhKCkpLCBz
aXplICogc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgdGVtcCB9KSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgICAgICB2ZWN0b3Iuc3dhcCh0ZW1wKTsKQEAgLTQ3Myw3ICs0NzQsNyBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpCiAgICAgICAgIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4gdmVjdG9yOwogICAg
ICAgICB2ZWN0b3IuZ3JvdyhzaXplKTsKIAotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4
ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCBz
aXplICogc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgdmVjdG9yIH0pKQogICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKIAogICAgICAgICByZXR1cm4gdmVjdG9yOwpJbmRleDogU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9JUEMvQXJyYXlSZWZlcmVuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL0lQQy9BcnJheVJlZmVyZW5jZS5oCShyZXZpc2lvbiAyNzg3MTMpCisrKyBT
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9BcnJheVJlZmVyZW5jZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw2ICszMCw4IEBACiAKIG5hbWVzcGFjZSBJUEMgewogCisvLyBGSVhNRTogUmVwbGFj
ZSB3aXRoIDx3dGYvU3Bhbi5oPgorCiBpbmxpbmUgY29uc3RleHByIHNpemVfdCBhcnJheVJlZmVy
ZW5jZUR5bmFtaWNFeHRlbnQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpOwog
CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IEV4dGVudCA9IGFycmF5UmVmZXJlbmNlRHlu
YW1pY0V4dGVudD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuY3BwCShy
ZXZpc2lvbiAyNzg3MTMpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDEzICsyMDYsMTMgQEAgYm9vbCBEZWNvZGVyOjpidWZm
ZXJJc0xhcmdlRW5vdWdoVG9Db250YQogICAgIHJldHVybiBhbGlnbmVkQnVmZmVySXNMYXJnZUVu
b3VnaFRvQ29udGFpbihyb3VuZFVwVG9BbGlnbm1lbnQobV9idWZmZXJQb3MsIGFsaWdubWVudCks
IG1fYnVmZmVyLCBtX2J1ZmZlckVuZCwgc2l6ZSk7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25t
ZW50KQorYm9vbCBEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbjxzdGQ6OmJ5dGU+
IGRhdGEsIHNpemVfdCBhbGlnbm1lbnQpCiB7Ci0gICAgaWYgKCFhbGlnbkJ1ZmZlclBvc2l0aW9u
KGFsaWdubWVudCwgc2l6ZSkpCisgICAgaWYgKCFhbGlnbkJ1ZmZlclBvc2l0aW9uKGFsaWdubWVu
dCwgZGF0YS5zaXplKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtZW1jcHkoZGF0
YSwgbV9idWZmZXJQb3MsIHNpemUpOwotICAgIG1fYnVmZmVyUG9zICs9IHNpemU7CisgICAgbWVt
Y3B5KGRhdGEuZGF0YSgpLCBtX2J1ZmZlclBvcywgZGF0YS5zaXplKCkpOworICAgIG1fYnVmZmVy
UG9zICs9IGRhdGEuc2l6ZSgpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5oCShyZXZpc2lvbiAyNzg3MTMpCisrKyBTb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDEz
IEBAIHB1YmxpYzoKICAgICBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBpc1ZhbGlkKCkgY29uc3Qg
eyByZXR1cm4gbV9idWZmZXJQb3MgIT0gbnVsbHB0cjsgfQogICAgIHZvaWQgbWFya0ludmFsaWQo
KSB7IG1fYnVmZmVyUG9zID0gbnVsbHB0cjsgfQogCi0gICAgV0FSTl9VTlVTRURfUkVUVVJOIGJv
b2wgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqIGRhdGEsIHNpemVfdCwgc2l6ZV90IGFs
aWdubWVudCk7CisgICAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlRml4ZWRMZW5ndGhE
YXRhKFNwYW48c3RkOjpieXRlPiwgc2l6ZV90IGFsaWdubWVudCk7CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgTj4KKyAgICBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVG
aXhlZExlbmd0aERhdGEoU3BhbjxULCBOPiBkYXRhLCBzaXplX3QgYWxpZ25tZW50ID0gYWxpZ25v
ZihUKSkKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVGaXhlZExlbmd0aERhdGEoYXNXcml0
YWJsZUJ5dGVzKGRhdGEpLCBhbGlnbm1lbnQpOworICAgIH0KIAogICAgIC8vIFRoZSBkYXRhIGlu
IHRoZSByZXR1cm5lZCBwb2ludGVyIGhlcmUgd2lsbCBvbmx5IGJlIHZhbGlkIGZvciB0aGUgbGlm
ZXRpbWUgb2YgdGhlIERlY29kZXIgb2JqZWN0LgogICAgIC8vIFJldHVybnMgbnVsbHB0ciBvbiBm
YWlsdXJlLgpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5jcHAJKHJldmlz
aW9uIDI3ODcxMykKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29kZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMDIsMTIgKzIwMiwxMiBAQCB1aW50OF90KiBFbmNvZGVyOjpncm93
KHNpemVfdCBhbGlnbm1lbnQsCiAgICAgcmV0dXJuIG1fYnVmZmVyICsgYWxpZ25lZFNpemU7CiB9
CiAKLXZvaWQgRW5jb2Rlcjo6ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqIGRh
dGEsIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50KQordm9pZCBFbmNvZGVyOjplbmNvZGVG
aXhlZExlbmd0aERhdGEoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEsIHNpemVfdCBhbGlnbm1l
bnQpCiB7Ci0gICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGRhdGEpICUg
YWxpZ25tZW50KSk7CisgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGRh
dGEuZGF0YSgpKSAlIGFsaWdubWVudCkpOwogCi0gICAgdWludDhfdCogYnVmZmVyID0gZ3Jvdyhh
bGlnbm1lbnQsIHNpemUpOwotICAgIG1lbWNweShidWZmZXIsIGRhdGEsIHNpemUpOworICAgIGF1
dG8qIGJ1ZmZlciA9IGdyb3coYWxpZ25tZW50LCBkYXRhLnNpemUoKSk7CisgICAgbWVtY3B5KGJ1
ZmZlciwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKIH0KIAogdm9pZCBFbmNvZGVyOjphZGRB
dHRhY2htZW50KEF0dGFjaG1lbnQmJiBhdHRhY2htZW50KQpJbmRleDogU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9JUEMvRW5jb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vSVBDL0VuY29kZXIuaAkocmV2aXNpb24gMjc4NzEzKQorKysgU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvRW5jb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5j
bHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgog
I2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIElQQyB7CkBAIC02MCw3ICs2MSwxMyBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIHdyYXBGb3JUZXN0aW5nKFVuaXF1ZVJlZjxFbmNvZGVyPiYmKTsK
IAotICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNp
emVfdCwgc2l6ZV90IGFsaWdubWVudCk7CisgICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEo
U3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEsIHNpemVfdCBhbGlnbm1lbnQpOworCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IE4+CisgICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERh
dGEoU3BhbjxULCBOPiBkYXRhLCBzaXplX3QgYWxpZ25tZW50ID0gYWxpZ25vZihUKSkKKyAgICB7
CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShhc0J5dGVzKGRhdGEpLCBhbGlnbm1lbnQp
OworICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgRW5jb2RlciYgb3BlcmF0
b3I8PChUJiYgdCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1NoYXJlZEJ1ZmZl
ckNvcHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1NoYXJl
ZEJ1ZmZlckNvcHkuY3BwCShyZXZpc2lvbiAyNzg3MTMpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9TaGFyZWRCdWZmZXJDb3B5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMs
NyBAQCB2b2lkIFNoYXJlZEJ1ZmZlckNvcHk6OmVuY29kZShFbmNvZGVyJiBlCiAgICAgaWYgKCFi
dWZmZXJTaXplKQogICAgICAgICByZXR1cm47CiAgICAgZm9yIChhdXRvJiBzZWdtZW50IDogKm1f
YnVmZmVyKQotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShzZWdtZW50LnNl
Z21lbnQtPmRhdGEoKSwgc2VnbWVudC5zZWdtZW50LT5zaXplKCksIDEpOworICAgICAgICBlbmNv
ZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShzZWdtZW50LnNlZ21lbnQtPmJ5dGVzKCksIDEpOwog
fQogCiBzdGQ6Om9wdGlvbmFsPFNoYXJlZEJ1ZmZlckNvcHk+IFNoYXJlZEJ1ZmZlckNvcHk6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
U3RyZWFtQ29ubmVjdGlvbkVuY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uRW5jb2Rlci5oCShyZXZpc2lvbiAyNzg3MTMpCisr
KyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uRW5jb2Rlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJBcmd1bWVudENvZGVy
cy5oIgogI2luY2x1ZGUgIk1lc3NhZ2VOYW1lcy5oIgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAj
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgSVBDIHsKQEAgLTUzLDIx
ICs1NCwyNyBAQCBwdWJsaWM6CiAKICAgICB+U3RyZWFtQ29ubmVjdGlvbkVuY29kZXIoKSA9IGRl
ZmF1bHQ7CiAKLSAgICBib29sIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShjb25zdCB1aW50OF90KiBk
YXRhLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVudCkKKyAgICBib29sIGVuY29kZUZpeGVk
TGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSwgc2l6ZV90IGFsaWdubWVudCkK
ICAgICB7CiAgICAgICAgIHNpemVfdCBidWZmZXJQb2ludGVyID0gc3RhdGljX2Nhc3Q8c2l6ZV90
PihyZWludGVycHJldF9jYXN0PGludHB0cl90PihtX2J1ZmZlciArIG1fZW5jb2RlZFNpemUpKTsK
ICAgICAgICAgc2l6ZV90IG5ld0J1ZmZlclBvaW50ZXIgPSByb3VuZFVwVG9NdWx0aXBsZU9mKGFs
aWdubWVudCwgYnVmZmVyUG9pbnRlcik7CiAgICAgICAgIGlmIChuZXdCdWZmZXJQb2ludGVyIDwg
YnVmZmVyUG9pbnRlcikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaW50cHRy
X3QgYWxpZ25lZFNpemUgPSBtX2VuY29kZWRTaXplICsgKG5ld0J1ZmZlclBvaW50ZXIgLSBidWZm
ZXJQb2ludGVyKTsKLSAgICAgICAgaWYgKCFyZXNlcnZlKGFsaWduZWRTaXplLCBzaXplKSkKKyAg
ICAgICAgaWYgKCFyZXNlcnZlKGFsaWduZWRTaXplLCBkYXRhLnNpemUoKSkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHVpbnQ4X3QqIGJ1ZmZlciA9IG1fYnVmZmVyICsgYWxp
Z25lZFNpemU7Ci0gICAgICAgIG1lbWNweShidWZmZXIsIGRhdGEsIHNpemUpOwotICAgICAgICBt
X2VuY29kZWRTaXplID0gYWxpZ25lZFNpemUgKyBzaXplOworICAgICAgICBhdXRvKiBidWZmZXIg
PSBtX2J1ZmZlciArIGFsaWduZWRTaXplOworICAgICAgICBtZW1jcHkoYnVmZmVyLCBkYXRhLmRh
dGEoKSwgZGF0YS5zaXplKCkpOworICAgICAgICBtX2VuY29kZWRTaXplID0gYWxpZ25lZFNpemUg
KyBkYXRhLnNpemUoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IE4+CisgICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEo
U3BhbjxULCBOPiBkYXRhLCBzaXplX3QgYWxpZ25tZW50ID0gYWxpZ25vZihUKSkKKyAgICB7Cisg
ICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShhc0J5dGVzKGRhdGEpLCBhbGlnbm1lbnQpOwor
ICAgIH0KKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgU3RyZWFtQ29ubmVjdGlvbkVu
Y29kZXImIG9wZXJhdG9yPDwoVCYmIHQpCiAgICAgewpJbmRleDogU291cmNlL1dlYktpdC9TaGFy
ZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyNzg3MTMpCisrKyBT
b3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDQsNyArMTQ0LDcgQEAgc3RhdGljIHZvaWQgZW5jb2RlU2hhcmVkQnVmZmVyKEVu
Y29kZXImIAogICAgIC8vIG92ZXIgdGhlIElQQy4gQ29ubmVjdGlvblVuaXguY3BwIGFscmVhZHkg
dXNlcyBzaGFyZWQgbWVtb3J5IHRvIHNlbmQgYW55IElQQyBtZXNzYWdlIHRoYXQgaXMKICAgICAv
LyB0b28gbGFyZ2UuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjA4NTcxLgogICAgIGZvciAoY29uc3QgYXV0byYgZWxlbWVudCA6ICpidWZmZXIpCi0gICAgICAg
IGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGVsZW1lbnQuc2VnbWVudC0+ZGF0YSgpLCBl
bGVtZW50LnNlZ21lbnQtPnNpemUoKSwgMSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKGVsZW1lbnQuc2VnbWVudC0+Ynl0ZXMoKSwgMSk7CiAjZWxzZQogICAgIFNoYXJl
ZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKICAgICBhdXRvIHNoYXJlZE1lbW9yeUJ1ZmZlciA9IFNo
YXJlZE1lbW9yeTo6Y29weUJ1ZmZlcigqYnVmZmVyKTsKQEAgLTE4MCw3ICsxODAsNyBAQCBzdGF0
aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlU2hhCiAKICAgICBWZWN0b3I8dWludDhf
dD4gZGF0YTsKICAgICBkYXRhLmdyb3coYnVmZmVyU2l6ZSk7Ci0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZUZpeGVkTGVuZ3RoRGF0YShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksIDEpKQorICAgIGlm
ICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IGRhdGEgfSwgMSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdU
Rk1vdmUoZGF0YSkpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRl
bnRSdWxlTGlzdFN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuY3BwCShyZXZpc2lvbiAyNzg3MTMpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzEsMTggKzEzMSwyMCBAQCBzdGF0aWMgV2ViS2l0OjpOZXR3b3Jr
Q2FjaGU6OkRhdGEgZW5jb2RlCiAgICAgZW5jb2RlciA8PCBtZXRhRGF0YS5jb25kaXRpb25lZEZp
bHRlcnNCeXRlY29kZVNpemU7CiAgICAgZW5jb2RlciA8PCBtZXRhRGF0YS5jb25kaXRpb25zQXBw
bHlPbmx5VG9Eb21haW47CiAKLSAgICBBU1NFUlQoZW5jb2Rlci5idWZmZXJTaXplKCkgPT0gQ29u
dGVudFJ1bGVMaXN0RmlsZUhlYWRlclNpemUpOwotICAgIHJldHVybiBXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6RGF0YShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAg
QVNTRVJUKGVuY29kZXIuYnVmZmVyKCkuc2l6ZSgpID09IENvbnRlbnRSdWxlTGlzdEZpbGVIZWFk
ZXJTaXplKTsKKyAgICByZXR1cm4gV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGEgeyBlbmNvZGVy
LmJ1ZmZlcigpIH07CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgZ2V0RGF0YShjb25z
dCBUJiwgY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mKTsKLXRl
bXBsYXRlPD4gdm9pZCBnZXREYXRhKGNvbnN0IFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhJiBk
YXRhLCBjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYgZnVuY3Rp
b24pCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGdldERhdGEoY29uc3QgVCYsIGNvbnN0IEZ1
bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mKTsKKwordGVtcGxhdGU8PiB2b2lk
IGdldERhdGEoY29uc3QgV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGEmIGRhdGEsIGNvbnN0IEZ1
bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mIGZ1bmN0aW9uKQogewogICAgIGRh
dGEuYXBwbHkoZnVuY3Rpb24pOwogfQotdGVtcGxhdGU8PiB2b2lkIGdldERhdGEoY29uc3QgV2Vi
Q29yZTo6U2hhcmVkQnVmZmVyJiBkYXRhLCBjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4
X3QqLCBzaXplX3QpPiYgZnVuY3Rpb24pCisKK3RlbXBsYXRlPD4gdm9pZCBnZXREYXRhKGNvbnN0
IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlciYgZGF0YSwgY29uc3QgRnVuY3Rpb248Ym9vbChTcGFuPGNv
bnN0IHN0ZDo6Ynl0ZT4pPiYgZnVuY3Rpb24pCiB7Ci0gICAgZnVuY3Rpb24oZGF0YS5kYXRhKCks
IGRhdGEuc2l6ZSgpKTsKKyAgICBmdW5jdGlvbihkYXRhLmJ5dGVzKCkpOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgpAQCAtMTUwLDEzICsxNTIsMTMgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8
Q29udGVudFJ1bGVMaXN0TWV0YQogewogICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwogICAgIENv
bnRlbnRSdWxlTGlzdE1ldGFEYXRhIG1ldGFEYXRhOwotICAgIGdldERhdGEoZmlsZURhdGEsIFsm
bWV0YURhdGEsICZzdWNjZXNzLCAmZmlsZURhdGFdKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVf
dCBzaXplKSB7CisgICAgZ2V0RGF0YShmaWxlRGF0YSwgWyZtZXRhRGF0YSwgJnN1Y2Nlc3MsICZm
aWxlRGF0YV0oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpIHsKICAgICAgICAgLy8gVGhlIGZp
bGUgZGF0YSBzaG91bGQgYmUgbWFwcGVkIGludG8gb25lIGNvbnRpbnVvdXMgbWVtb3J5IHNlZ21l
bnQgc28gdGhlIHNpemUKICAgICAgICAgLy8gcGFzc2VkIHRvIHRoZSBhcHBsaWVyIHNob3VsZCBh
bHdheXMgZXF1YWwgdGhlIGRhdGEgc2l6ZS4KLSAgICAgICAgaWYgKHNpemUgIT0gZmlsZURhdGEu
c2l6ZSgpKQorICAgICAgICBpZiAoZGF0YS5zaXplKCkgIT0gZmlsZURhdGEuc2l6ZSgpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29k
ZXIgZGVjb2RlcihkYXRhLCBzaXplKTsKKyAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2Rl
ciBkZWNvZGVyIHsgZGF0YSB9OwogICAgICAgICAKICAgICAgICAgc3RkOjpvcHRpb25hbDx1aW50
MzJfdD4gdmVyc2lvbjsKICAgICAgICAgZGVjb2RlciA+PiB2ZXJzaW9uOwpAQCAtMjI4LDggKzIz
MCw4IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPE1hcHBlZERhdGE+IG9wZW5BbmQKIHN0YXRpYyBi
b29sIHdyaXRlRGF0YVRvRmlsZShjb25zdCBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YSYgZmls
ZURhdGEsIFBsYXRmb3JtRmlsZUhhbmRsZSBmZCkKIHsKICAgICBib29sIHN1Y2Nlc3MgPSB0cnVl
OwotICAgIGZpbGVEYXRhLmFwcGx5KFtmZCwgJnN1Y2Nlc3NdKGNvbnN0IHVpbnQ4X3QqIGRhdGEs
IHNpemVfdCBzaXplKSB7Ci0gICAgICAgIGlmICh3cml0ZVRvRmlsZShmZCwgZGF0YSwgc2l6ZSkg
PT0gLTEpIHsKKyAgICBmaWxlRGF0YS5hcHBseShbZmQsICZzdWNjZXNzXShTcGFuPGNvbnN0IHN0
ZDo6Ynl0ZT4gZGF0YSkgeworICAgICAgICBpZiAod3JpdGVUb0ZpbGUoZmQsIGRhdGEuZGF0YSgp
LCBkYXRhLnNpemUoKSkgPT0gLTEpIHsKICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL0xlZ2FjeVNlc3Npb25TdGF0ZUNvZGluZy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL0xlZ2FjeVNlc3Npb25TdGF0ZUNvZGluZy5jcHAJ
KHJldmlzaW9uIDI3ODcxMykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9MZWdhY3lT
ZXNzaW9uU3RhdGVDb2RpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksNyArMTI5LDcgQEAg
cHVibGljOgogICAgICAgICAqdGhpcyA8PCBsZW5ndGg7CiAKICAgICAgICAgKnRoaXMgPDwgc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KGxlbmd0aCAqIHNpemVvZihVQ2hhcikpOwotICAgICAgICBlbmNv
ZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oU3RyaW5n
Vmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCkuZ2V0KCkpLCBsZW5ndGggKiBzaXpl
b2YoVUNoYXIpLCBhbGlnbm9mKFVDaGFyKSk7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0
YShTcGFuIHsgU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCkuZ2V0KCks
IGxlbmd0aCB9KTsKIAogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQpAQCAtMTM3LDcgKzEz
Nyw3IEBAIHB1YmxpYzoKICAgICBIaXN0b3J5RW50cnlEYXRhRW5jb2RlciYgb3BlcmF0b3I8PChj
b25zdCBWZWN0b3I8dWludDhfdD4mIHZhbHVlKQogICAgIHsKICAgICAgICAgKnRoaXMgPDwgc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KHZhbHVlLnNpemUoKSk7Ci0gICAgICAgIGVuY29kZUZpeGVkTGVu
Z3RoRGF0YSh2YWx1ZS5kYXRhKCksIHZhbHVlLnNpemUoKSwgMSk7CisgICAgICAgIGVuY29kZUZp
eGVkTGVuZ3RoRGF0YShTcGFuIHsgdmFsdWUgfSwgMSk7CiAKICAgICAgICAgcmV0dXJuICp0aGlz
OwogICAgIH0KQEAgLTE0NSw3ICsxNDUsNyBAQCBwdWJsaWM6CiAgICAgSGlzdG9yeUVudHJ5RGF0
YUVuY29kZXImIG9wZXJhdG9yPDwoY29uc3QgVmVjdG9yPGNoYXI+JiB2YWx1ZSkKICAgICB7CiAg
ICAgICAgICp0aGlzIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1ZS5zaXplKCkpOwotICAg
ICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4odmFsdWUuZGF0YSgpKSwgdmFsdWUuc2l6ZSgpLCAxKTsKKyAgICAgICAgZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKFNwYW4geyB2YWx1ZSB9LCAxKTsKIAogICAgICAgICByZXR1cm4gKnRoaXM7CiAg
ICAgfQpAQCAtMjA2LDE3ICsyMDYsMjMgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19hcml0aG1ldGljPFR5cGU+Ojp2YWx1ZSwgIiIpOwogCi0gICAgICAg
IGVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWUp
LCBzaXplb2YodmFsdWUpLCBzaXplb2YodmFsdWUpKTsKKyAgICAgICAgZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKGFzQnl0ZXMoU3BhbiB7ICZ2YWx1ZSwgMSB9KSwgc2l6ZW9mKHZhbHVlKSk7CiAgICAg
ICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKLSAgICB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0
YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgYWxpZ25tZW50KQor
ICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRh
LCB1bnNpZ25lZCBhbGlnbm1lbnQpCiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChkYXRh
IHx8ICFzaXplKTsKLSAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KGRhdGEpICUgYWxpZ25tZW50KSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRhdGEuZGF0YSgp
IHx8ICFkYXRhLnNpemUoKSk7CisgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90PihkYXRhLmRhdGEoKSkgJSBhbGlnbm1lbnQpKTsKIAotICAgICAgICB1aW50OF90KiBi
dWZmZXIgPSBncm93KGFsaWdubWVudCwgc2l6ZSk7Ci0gICAgICAgIG1lbWNweShidWZmZXIsIGRh
dGEsIHNpemUpOworICAgICAgICBhdXRvKiBidWZmZXIgPSBncm93KGFsaWdubWVudCwgZGF0YS5z
aXplKCkpOworICAgICAgICBtZW1jcHkoYnVmZmVyLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkp
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBOPgorICAgIHZvaWQg
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48VCwgTj4gZGF0YSwgc2l6ZV90IGFsaWdubWVudCA9
IGFsaWdub2YoVCkpCisgICAgeworICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEoYXNCeXRl
cyhkYXRhKSwgYWxpZ25tZW50KTsKICAgICB9CiAKICAgICB1aW50OF90KiBncm93KHVuc2lnbmVk
IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCkBAIC02MDEsNyArNjA3LDcgQEAgcHVibGljOgogCiAg
ICAgICAgIFVDaGFyKiBidWZmZXI7CiAgICAgICAgIGF1dG8gc3RyaW5nID0gU3RyaW5nOjpjcmVh
dGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICAgICAgZGVjb2RlRml4ZWRMZW5n
dGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1ZmZlciksIGxlbmd0aCAqIHNpemVv
ZihVQ2hhciksIGFsaWdub2YoVUNoYXIpKTsKKyAgICAgICAgZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KFNwYW4geyBidWZmZXIsIGxlbmd0aCB9LCBhbGlnbm9mKFVDaGFyKSk7CiAKICAgICAgICAgdmFs
dWUgPSBzdHJpbmc7CiAgICAgICAgIHJldHVybiAqdGhpczsKQEAgLTczNywxNyArNzQzLDIzIEBA
IHByaXZhdGU6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19hcml0aG1ldGljPFR5cGU+
Ojp2YWx1ZSwgIiIpOwogICAgICAgICB2YWx1ZSA9IFR5cGUoKTsKIAotICAgICAgICBkZWNvZGVG
aXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnZhbHVlKSwgc2l6ZW9m
KHZhbHVlKSwgc2l6ZW9mKHZhbHVlKSk7CisgICAgICAgIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShT
cGFuIHsgJnZhbHVlLCAxIH0sIHNpemVvZih2YWx1ZSkpOwogICAgICAgICByZXR1cm4gKnRoaXM7
CiAgICAgfQogCi0gICAgdm9pZCBkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCogZGF0YSwg
c2l6ZV90IHNpemUsIHVuc2lnbmVkIGFsaWdubWVudCkKKyAgICB2b2lkIGRlY29kZUZpeGVkTGVu
Z3RoRGF0YShTcGFuPHN0ZDo6Ynl0ZT4gZGF0YSwgdW5zaWduZWQgYWxpZ25tZW50KQogICAgIHsK
LSAgICAgICAgaWYgKCFhbGlnbkJ1ZmZlclBvc2l0aW9uKGFsaWdubWVudCwgc2l6ZSkpCisgICAg
ICAgIGlmICghYWxpZ25CdWZmZXJQb3NpdGlvbihhbGlnbm1lbnQsIGRhdGEuc2l6ZSgpKSkKICAg
ICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBtZW1jcHkoZGF0YSwgbV9idWZmZXIsIHNpemUp
OwotICAgICAgICBtX2J1ZmZlciArPSBzaXplOworICAgICAgICBtZW1jcHkoZGF0YS5kYXRhKCks
IG1fYnVmZmVyLCBkYXRhLnNpemUoKSk7CisgICAgICAgIG1fYnVmZmVyICs9IGRhdGEuc2l6ZSgp
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBOPgorICAgIHZvaWQg
ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48VCwgTj4gZGF0YSwgc2l6ZV90IGFsaWdubWVudCkK
KyAgICB7CisgICAgICAgIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShhc1dyaXRhYmxlQnl0ZXMoZGF0
YSksIGFsaWdubWVudCk7CiAgICAgfQogCiAgICAgYm9vbCBhbGlnbkJ1ZmZlclBvc2l0aW9uKHVu
c2lnbmVkIGFsaWdubWVudCwgc2l6ZV90IHNpemUpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcAkocmV2aXNpb24gMjc4NzEz
KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY5MSw3ICs2OTEsNyBAQCBzdGF0aWMgYm9vbCBlbmNvZGVUeXBl
ZEFycmF5KElQQzo6RW5jb2RlCiAgICAgaWYgKCFkYXRhLmJ1ZmZlcikKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5idWZmZXIpLCBkYXRhLmxlbmd0aCwgMSk7CisgICAg
ZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3Qgc3RkOjpieXRlKj4oZGF0YS5idWZmZXIpLCBkYXRhLmxlbmd0aCB9LCAxKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9FbnZpcm9ubWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9FbnZpcm9ubWVudC5jcHAJ
KHJldmlzaW9uIDI3ODcxMykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRW52aXJvbm1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNyArMTU2LDcgQEAgYm9vbCBFbnZpcm9ubWVudDo6
Y29tcHV0ZUlzRGVidWdIZWFwRW5hYgogICAgIHJldHVybiB0cnVlOwogI2VuZGlmCiAKLSAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIGJtYWxs
b2MK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431249</attachid>
            <date>2021-06-11 19:40:04 -0700</date>
            <delta_ts>2021-06-12 07:51:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226887-20210611194003.patch</filename>
            <type>text/plain</type>
            <size>126128</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5tbQkocmV2aXNpb24gMjc4NzYz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5tbQkod29ya2luZyBjb3B5
KQpAQCAtMTM0LDEzICsxMzQsMTMgQEAgKyAoaW5zdGFuY2V0eXBlKXNjcmlwdE9mVHlwZTooSlNT
Y3JpcHRUeQogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIGNyZWF0ZUVycm9yKFtO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRmlsZSBhdCBwYXRoICVAIGNvdWxkIG5vdCBiZSBt
YXBwZWQuIiwgc3RhdGljX2Nhc3Q8TlNTdHJpbmcgKj4oc3lzdGVtUGF0aCldLCBlcnJvcik7CiAK
LSAgICBpZiAoIWNoYXJhY3RlcnNBcmVBbGxBU0NJSShyZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpKSkKKyAgICBpZiAoIWNoYXJh
Y3RlcnNBcmVBbGxBU0NJSShyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oZmlsZURhdGEu
ZGF0YSgpLmRhdGEoKSksIGZpbGVEYXRhLmRhdGEoKS5zaXplKCkpKQogICAgICAgICByZXR1cm4g
Y3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJOb3QgYWxsIGNoYXJhY3Rl
cnMgaW4gZmlsZSBhdCAlQCBhcmUgQVNDSUkuIiwgc3RhdGljX2Nhc3Q8TlNTdHJpbmcgKj4oc3lz
dGVtUGF0aCldLCBlcnJvcik7CiAKICAgICBhdXRvIHJlc3VsdCA9IGFkb3B0TlMoW1tKU1Njcmlw
dCBhbGxvY10gaW5pdF0pOwogICAgIHJlc3VsdC0+bV92aXJ0dWFsTWFjaGluZSA9IHZtOwogICAg
IHJlc3VsdC0+bV90eXBlID0gdHlwZTsKLSAgICByZXN1bHQtPm1fc291cmNlID0gU3RyaW5nKFN0
cmluZ0ltcGw6OmNyZWF0ZVdpdGhvdXRDb3B5aW5nKGJpdHdpc2VfY2FzdDxjb25zdCBMQ2hhcio+
KGZpbGVEYXRhLmRhdGEoKSksIGZpbGVEYXRhLnNpemUoKSkpOworICAgIHJlc3VsdC0+bV9zb3Vy
Y2UgPSBTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcoYml0d2lzZV9jYXN0
PGNvbnN0IExDaGFyKj4oZmlsZURhdGEuZGF0YSgpLmRhdGEoKSksIGZpbGVEYXRhLmRhdGEoKS5z
aXplKCkpKTsKICAgICByZXN1bHQtPm1fbWFwcGVkU291cmNlID0gV1RGTW92ZShmaWxlRGF0YSk7
CiAgICAgcmVzdWx0LT5tX3NvdXJjZVVSTCA9IHNvdXJjZVVSTDsKICAgICByZXN1bHQtPm1fY2Fj
aGVQYXRoID0gY2FjaGVQYXRoOwpAQCAtMTY4LDI0ICsxNjgsMjMgQEAgLSAodm9pZClyZWFkQ2Fj
aGUKICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IHVpbnQ4
X3QqIGZpbGVEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4obWFwcGVkRmls
ZS5kYXRhKCkpOwotICAgIHVuc2lnbmVkIGZpbGVUb3RhbFNpemUgPSBtYXBwZWRGaWxlLnNpemUo
KTsKKyAgICBhdXRvIGZpbGVEYXRhID0gbWFwcGVkRmlsZS5kYXRhKCk7CiAKICAgICAvLyBFbnN1
cmUgd2UgYXQgbGVhc3QgaGF2ZSBhIFNIQTE6OkRpZ2VzdCB0byByZWFkLgotICAgIGlmIChmaWxl
VG90YWxTaXplIDwgc2l6ZW9mKFNIQTE6OkRpZ2VzdCkpIHsKKyAgICBpZiAoZmlsZURhdGEuc2l6
ZSgpIDwgc2l6ZW9mKFNIQTE6OkRpZ2VzdCkpIHsKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRl
RmlsZShjYWNoZUZpbGVuYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHVuc2ln
bmVkIGZpbGVEYXRhU2l6ZSA9IGZpbGVUb3RhbFNpemUgLSBzaXplb2YoU0hBMTo6RGlnZXN0KTsK
KyAgICB1bnNpZ25lZCBmaWxlRGF0YVNpemUgPSBmaWxlRGF0YS5zaXplKCkgLSBzaXplb2YoU0hB
MTo6RGlnZXN0KTsKIAogICAgIFNIQTE6OkRpZ2VzdCBjb21wdXRlZEhhc2g7CiAgICAgU0hBMSBz
aGExOwotICAgIHNoYTEuYWRkQnl0ZXMoZmlsZURhdGEsIGZpbGVEYXRhU2l6ZSk7CisgICAgc2hh
MS5hZGRCeXRlcyhmaWxlRGF0YS5maXJzdChmaWxlRGF0YVNpemUpKTsKICAgICBzaGExLmNvbXB1
dGVIYXNoKGNvbXB1dGVkSGFzaCk7CiAKICAgICBTSEExOjpEaWdlc3QgZmlsZUhhc2g7Ci0gICAg
bWVtY3B5KCZmaWxlSGFzaCwgZmlsZURhdGEgKyBmaWxlRGF0YVNpemUsIHNpemVvZihTSEExOjpE
aWdlc3QpKTsKKyAgICBtZW1jcHkoJmZpbGVIYXNoLCBmaWxlRGF0YS5kYXRhKCkgKyBmaWxlRGF0
YVNpemUsIHNpemVvZihTSEExOjpEaWdlc3QpKTsKIAogICAgIGlmIChjb21wdXRlZEhhc2ggIT0g
ZmlsZUhhc2gpIHsKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShjYWNoZUZpbGVuYW1l
KTsKQEAgLTM0Myw3ICszNDIsNyBAQCAtIChCT09MKXdyaXRlQ2FjaGU6KFN0cmluZyYpZXJyb3IK
IAogICAgIFNIQTE6OkRpZ2VzdCBjb21wdXRlZEhhc2g7CiAgICAgU0hBMSBzaGExOwotICAgIHNo
YTEuYWRkQnl0ZXMobV9jYWNoZWRCeXRlY29kZS0+ZGF0YSgpLCBtX2NhY2hlZEJ5dGVjb2RlLT5z
aXplKCkpOworICAgIHNoYTEuYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgbV9jYWNoZWRCeXRlY29k
ZS0+ZGF0YSgpLCBtX2NhY2hlZEJ5dGVjb2RlLT5zaXplKCkgfSkpOwogICAgIHNoYTEuY29tcHV0
ZUhhc2goY29tcHV0ZWRIYXNoKTsKICAgICBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZSh0ZW1wRkQs
IGNvbXB1dGVkSGFzaC5kYXRhKCksIHNpemVvZihjb21wdXRlZEhhc2gpKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0hhc2guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tIYXNoLmNwcAkocmV2
aXNpb24gMjc4NzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
a0hhc2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MiwxMCArNjIsMTAgQEAgQ29kZUJsb2NrSGFz
aDo6Q29kZUJsb2NrSGFzaChjb25zdCBTb3VyYwogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBz
dHIubGVuZ3RoKCk7CiAgICAgICAgIHVuc2lnbmVkIHN0ZXAgPSAobGVuZ3RoID4+IDEwKSArIDE7
CiAKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KCZsZW5ndGgp
LCBzaXplb2YobGVuZ3RoKSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsg
Jmxlbmd0aCwgMSB9KSk7CiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIFVDaGFyIGNoYXJhY3Rl
ciA9IHN0cltpbmRleF07Ci0gICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGJpdHdpc2VfY2FzdDx1
aW50OF90Kj4oJmNoYXJhY3RlciksIHNpemVvZihjaGFyYWN0ZXIpKTsKKyAgICAgICAgICAgIHNo
YTEuYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgJmNoYXJhY3RlciwgMSB9KSk7CiAgICAgICAgICAg
ICBvbGRJbmRleCA9IGluZGV4OwogICAgICAgICAgICAgaW5kZXggKz0gc3RlcDsKICAgICAgICAg
fSB3aGlsZSAoaW5kZXggPiBvbGRJbmRleCAmJiBpbmRleCA8IGxlbmd0aCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1JlbW90ZUluc3BlY3RvclV0
aWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Jl
bW90ZS9nbGliL1JlbW90ZUluc3BlY3RvclV0aWxzLmNwcAkocmV2aXNpb24gMjc4NzYzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0
b3JVdGlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgY29uc3QgQ1N0cmlu
ZyYgYmFja2VuZENvbW1hbmRzSGFzaCgpCiAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSA9IGdf
Ynl0ZXNfZ2V0X2RhdGEoYnl0ZXMuZ2V0KCksICZkYXRhU2l6ZSk7CiAgICAgICAgIEFTU0VSVChk
YXRhU2l6ZSk7CiAgICAgICAgIFNIQTEgc2hhMTsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhzdGF0
aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSksIGRhdGFTaXplKTsKKyAgICAgICAgc2hhMS5h
ZGRCeXRlcyhhc0J5dGVzKCBTcGFuIHsgZGF0YSwgZGF0YVNpemUgfSkpOwogICAgICAgICBoZXhE
aWdlc3QgPSBzaGExLmNvbXB1dGVIZXhEaWdlc3QoKTsKICAgICB9CiAgICAgcmV0dXJuIGhleERp
Z2VzdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIu
aAkocmV2aXNpb24gMjc4NzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPHd0
Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogI2luY2x1ZGUgPHd0Zi9QYWNrZWRSZWZQdHIuaD4KICNp
bmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRl
ZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtODAsNyArODEsMTAgQEAg
cHVibGljOgogICAgIAogICAgIHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuZ2V0
TWF5QmVOdWxsKHNpemVJbkJ5dGVzKCkpOyB9CiAgICAgdW5zaWduZWQgc2l6ZUluQnl0ZXMoKSBj
b25zdCB7IHJldHVybiBtX3NpemVJbkJ5dGVzOyB9Ci0gICAgCisKKyAgICBTcGFuPHN0ZDo6Ynl0
ZT4gd3JpdGFibGVCeXRlcygpIHsgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8c3RkOjpieXRlKj4oZGF0
YSgpKSwgc2l6ZUluQnl0ZXMoKSB9OyB9CisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGJ5dGVz
KCkgY29uc3QgeyByZXR1cm4geyBzdGF0aWNfY2FzdDxjb25zdCBzdGQ6OmJ5dGUqPihkYXRhKCkp
LCBzaXplSW5CeXRlcygpIH07IH0KKwogICAgIGJvb2wgaXNTaGFyZWQoKSBjb25zdCB7IHJldHVy
biBtX3NoYXJlZDsgfQogICAgIAogcHJpdmF0ZToKQEAgLTEyNyw3ICsxMzEsOSBAQCBwdWJsaWM6
CiAgICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKICAgICBpbmxpbmUgY29uc3Qgdm9pZCogZGF0YSgp
IGNvbnN0OwogICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7Ci0gICAgCisg
ICAgaW5saW5lIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCk7CisgICAgaW5saW5lIFNw
YW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAgICAgdm9pZCBtYWtlU2hhcmVk
KCk7CiAgICAgdm9pZCBzZXRTaGFyaW5nTW9kZShBcnJheUJ1ZmZlclNoYXJpbmdNb2RlKTsKICAg
ICBpbmxpbmUgYm9vbCBpc1NoYXJlZCgpIGNvbnN0OwpAQCAtMTk3LDYgKzIwMywxNiBAQCB1bnNp
Z25lZCBBcnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fY29udGVu
dHMuc2l6ZUluQnl0ZXMoKTsKIH0KIAorU3BhbjxzdGQ6OmJ5dGU+IEFycmF5QnVmZmVyOjp3cml0
YWJsZUJ5dGVzKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZW50cy53cml0YWJsZUJ5dGVzKCk7Cit9
CisKK1NwYW48Y29uc3Qgc3RkOjpieXRlPiBBcnJheUJ1ZmZlcjo6Ynl0ZXMoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2NvbnRlbnRzLmJ5dGVzKCk7Cit9CisKIGJvb2wgQXJyYXlCdWZmZXI6Omlz
U2hhcmVkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb250ZW50cy5pc1NoYXJlZCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmgJ
KHJldmlzaW9uIDI3ODc2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4Niw5IEBAIHB1YmxpYzoKIAog
ICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVMZW5ndGg7IH0K
IAorICAgIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCkgeyByZXR1cm4geyBzdGF0aWNf
Y2FzdDxzdGQ6OmJ5dGUqPihkYXRhKCkpLCBieXRlTGVuZ3RoKCkgfTsgfQorICAgIFNwYW48Y29u
c3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0IHsgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8Y29uc3Qg
c3RkOjpieXRlKj4oZGF0YSgpKSwgYnl0ZUxlbmd0aCgpIH07IH0KKwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgc2V0RGV0YWNoYWJsZShib29sKTsKICAgICBib29sIGlzRGV0YWNoYWJsZSgp
IGNvbnN0IHsgcmV0dXJuIG1faXNEZXRhY2hhYmxlOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NhY2hlUGF5bG9hZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNwcAkocmV2aXNpb24gMjc4NzYzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsMjcgKzMwLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogCiBDYWNoZVBheWxv
YWQgQ2FjaGVQYXlsb2FkOjptYWtlTWFwcGVkUGF5bG9hZChGaWxlU3lzdGVtOjpNYXBwZWRGaWxl
RGF0YSYmIGRhdGEpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZCh0cnVlLCBkYXRhLmxlYWtI
YW5kbGUoKSwgZGF0YS5zaXplKCkpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQodHJ1ZSwgZGF0
YS5sZWFrSGFuZGxlKCkpOwogfQogCiBDYWNoZVBheWxvYWQgQ2FjaGVQYXlsb2FkOjptYWtlTWFs
bG9jUGF5bG9hZChNYWxsb2NQdHI8dWludDhfdCwgVk1NYWxsb2M+JiYgZGF0YSwgc2l6ZV90IHNp
emUpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZChmYWxzZSwgZGF0YS5sZWFrUHRyKCksIHNp
emUpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQoZmFsc2UsIGFzV3JpdGFibGVCeXRlcyhTcGFu
IHsgZGF0YS5sZWFrUHRyKCksIHNpemUgfSkpOwogfQogCiBDYWNoZVBheWxvYWQgQ2FjaGVQYXls
b2FkOjptYWtlRW1wdHlQYXlsb2FkKCkKIHsKLSAgICByZXR1cm4gQ2FjaGVQYXlsb2FkKHRydWUs
IG51bGxwdHIsIDApOworICAgIHJldHVybiBDYWNoZVBheWxvYWQodHJ1ZSwgeyB9KTsKIH0KIAog
Q2FjaGVQYXlsb2FkOjpDYWNoZVBheWxvYWQoQ2FjaGVQYXlsb2FkJiYgb3RoZXIpCiB7Ci0gICAg
bV9tYXBwZWQgPSBvdGhlci5tX21hcHBlZDsKLSAgICBtX3NpemUgPSBvdGhlci5tX3NpemU7Ci0g
ICAgbV9kYXRhID0gb3RoZXIubV9kYXRhOwotICAgIG90aGVyLm1fbWFwcGVkID0gZmFsc2U7Ci0g
ICAgb3RoZXIubV9kYXRhID0gbnVsbHB0cjsKLSAgICBvdGhlci5tX3NpemUgPSAwOworICAgIG1f
bWFwcGVkID0gc3RkOjpleGNoYW5nZShvdGhlci5tX21hcHBlZCwgZmFsc2UpOworICAgIG1fZGF0
YSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLCB7IH0pOwogfQogCiBDYWNoZVBheWxvYWQ6
On5DYWNoZVBheWxvYWQoKQpAQCAtNjcsMTIgKzYzLDEzIEBAIENhY2hlUGF5bG9hZCYgQ2FjaGVQ
YXlsb2FkOjpvcGVyYXRvcj0oQ2EKIAogdm9pZCBDYWNoZVBheWxvYWQ6OmZyZWVEYXRhKCkKIHsK
LSAgICBpZiAoIW1fZGF0YSkKKyAgICBpZiAoIW1fZGF0YS5kYXRhKCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBpZiAobV9tYXBwZWQpIHsKLSAgICAgICAgRmlsZVN5c3RlbTo6dW5tYXBWaWV3T2ZG
aWxlKG1fZGF0YSwgbV9zaXplKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZmFzdEZyZWUobV9kYXRh
KTsKKworICAgIGlmIChtX21hcHBlZCkKKyAgICAgICAgRmlsZVN5c3RlbTo6dW5tYXBWaWV3T2ZG
aWxlKG1fZGF0YSk7CisgICAgZWxzZQorICAgICAgICBmYXN0RnJlZShtX2RhdGEuZGF0YSgpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWNoZVBheWxvYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYWNoZVBheWxvYWQuaAkocmV2aXNpb24gMjc4NzYzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDcgQEAKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CiAj
aW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewogCkBAIC00MSwyMiArNDIsMjAgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIH5DYWNoZVBheWxvYWQoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBDYWNoZVBheWxv
YWQmIG9wZXJhdG9yPShDYWNoZVBheWxvYWQmJiBvdGhlcik7CiAKLSAgICBjb25zdCB1aW50OF90
KiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgc2l6ZV90IHNpemUoKSBjb25z
dCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBjb25zdCB1aW50OF90KiBkYXRhKCkgY29uc3QgeyBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9kYXRhLmRhdGEoKSk7IH0KKyAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5zaXplKCk7IH0KIAogcHJpdmF0ZToK
LSAgICBDYWNoZVBheWxvYWQoYm9vbCBtYXBwZWQsIHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKQor
ICAgIENhY2hlUGF5bG9hZChib29sIG1hcHBlZCwgU3BhbjxzdGQ6OmJ5dGU+IGRhdGEpCiAgICAg
ICAgIDogbV9tYXBwZWQobWFwcGVkKQotICAgICAgICAsIG1fc2l6ZShzaXplKQotICAgICAgICAs
IG1fZGF0YShzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGF0YSkpCisgICAgICAgICwgbV9kYXRhKGRh
dGEpCiAgICAgewogICAgIH0KIAogICAgIHZvaWQgZnJlZURhdGEoKTsKIAogICAgIGJvb2wgbV9t
YXBwZWQ7Ci0gICAgc2l6ZV90IG1fc2l6ZTsKLSAgICB1aW50OF90KiBtX2RhdGE7CisgICAgU3Bh
bjxzdGQ6OmJ5dGU+IG1fZGF0YTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAJ
KHJldmlzaW9uIDI3ODc2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TdHJl
YW1pbmdQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNyArMjYxLDcgQEAgYXV0byBT
dHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKGNvbnN0IHVpbgogICAgIH0KIAogICAgIGlmIChVTkxJ
S0VMWShPcHRpb25zOjp1c2VFYWdlcldlYkFzc2VtYmx5TW9kdWxlSGFzaGluZygpKSkKLSAgICAg
ICAgbV9oYXNoZXIuYWRkQnl0ZXMoYnl0ZXMsIGJ5dGVzU2l6ZSk7CisgICAgICAgIG1faGFzaGVy
LmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7IGJ5dGVzLCBieXRlc1NpemUgfSApKTsKIAogICAgIHNp
emVfdCBvZmZzZXRJbkJ5dGVzID0gMDsKICAgICB3aGlsZSAodHJ1ZSkgewpJbmRleDogU291cmNl
L1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlz
aW9uIDI3ODc2MykKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsNjggQEAKKzIwMjEtMDYtMTEgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgor
CisgICAgICAgIEFkb3B0IFNwYW4gaW4gbW9yZSBwbGFjZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjg4NworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtXSVBdCisKKyAgICAgICAgKiBXVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvRmlsZVN5c3RlbS5jcHA6CisgICAg
ICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpNYXBwZWRGaWxlRGF0YTo6fk1hcHBlZEZpbGVEYXRh
KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjptYXBGaWxl
SGFuZGxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OnVubWFwVmlld09mRmlsZSk6
CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjptYXBUb0ZpbGUpOgorICAgICAgICAqIHd0
Zi9GaWxlU3lzdGVtLmg6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpNYXBwZWRGaWxl
RGF0YTo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBs
OjpNYXBwZWRGaWxlRGF0YTo6ZGF0YSBjb25zdCk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1J
bXBsOjpNYXBwZWRGaWxlRGF0YTo6bGVha0hhbmRsZSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0
ZW1JbXBsOjpNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEpOgorICAgICAgICAoV1RGOjpG
aWxlU3lzdGVtSW1wbDo6TWFwcGVkRmlsZURhdGE6Om9wZXJhdG9yPSk6CisgICAgICAgIChXVEY6
OkZpbGVTeXN0ZW1JbXBsOjpNYXBwZWRGaWxlRGF0YTo6c2l6ZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9TSEExLmNwcDoKKyAgICAgICAgKFdU
Rjo6U0hBMTo6YWRkQnl0ZXMpOgorICAgICAgICAoV1RGOjpTSEExOjpmaW5hbGl6ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OlNIQTE6OnByb2Nlc3NCbG9jayk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OlNIQTE6OnJlc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6U0hBMTo6aGV4RGln
ZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6U0hBMTo6Y29tcHV0ZUhleERpZ2VzdCk6IERl
bGV0ZWQuCisgICAgICAgICogd3RmL1NIQTEuaDoKKyAgICAgICAgKFdURjo6U0hBMTo6YWRkQnl0
ZXMpOgorICAgICAgICAqIHd0Zi9WZWN0b3IuaDoKKyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2Uv
UGVyc2lzdGVudENvZGVycy5jcHA6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxD
U3RyaW5nPjo6ZW5jb2RlKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPENTdHJp
bmc+OjpkZWNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8U3RyaW5nPjo6
ZW5jb2RlKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OmRlY29kZVN0cmluZ1RleHQpOgor
ICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKToK
KyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29kZSk6
CisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaDoKKyAgICAgICAg
KiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwOgorICAgICAgICAoV1RGOjpQ
ZXJzaXN0ZW5jZTo6RGVjb2Rlcjo6RGVjb2Rlcik6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNl
OjpEZWNvZGVyOjpidWZmZXJQb2ludGVyRm9yRGlyZWN0UmVhZCk6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAoV1RG
OjpQZXJzaXN0ZW5jZTo6RGVjb2Rlcjo6dmVyaWZ5Q2hlY2tzdW0pOgorICAgICAgICAoV1RGOjpQ
ZXJzaXN0ZW5jZTo6RGVjb2Rlcjo6fkRlY29kZXIpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9w
ZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oOgorICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5j
ZS9QZXJzaXN0ZW50RW5jb2Rlci5jcHA6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNv
ZGVyOjpncm93KToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6OnVwZGF0ZUNo
ZWNrc3VtRm9yRGF0YSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjplbmNv
ZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6
ZW5jb2RlTnVtYmVyKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6OmVuY29k
ZUNoZWNrc3VtKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6OkVuY29kZXIp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6fkVuY29kZXIp
OiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5o
OgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6YnVmZmVyIGNvbnN0KToKKyAg
ICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVy
KToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6OmJ1ZmZlclNpemUgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAqIHd0Zi90ZXh0L0Jhc2U2NC5oOgorICAgICAgICAoV1RGOjpi
YXNlNjRFbmNvZGVUb1ZlY3Rvcik6CisgICAgICAgIChXVEY6OmJhc2U2NEVuY29kZVRvU3RyaW5n
KToKKyAgICAgICAgKiB3dGYvdGV4dC9DU3RyaW5nLmg6CisKIDIwMjEtMDYtMDkgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBBdm9pZCBzb21lIGNhbGxzIHRvIFN0
cmluZ1ZpZXc6OnRvU3RyaW5nKCkgLyBTdHJpbmdWaWV3Ojp0b1N0cmluZ1dpdGhvdXRDb3B5aW5n
KCkKSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjc4NzYzKQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMTI1Nyw4ICsxMjU3LDkgQEAKIAkJCQk3OTM2RDZBOTFDOTlGOEFF
MDAwRDFBRUQgLyogU21hbGxTZXQuaCAqLywKIAkJCQlBMzBENDEyRDFGMERFMTNGMDBCNzE5NTQg
LyogU29mdExpbmtpbmcuaCAqLywKIAkJCQk5MzE1NkM4RDI2MkM5ODIyMDBFQUUyN0IgLyogU29y
dGVkQXJyYXlNYXAuaCAqLywKLQkJCQk3OTAzOEUwNTIyNEIwNUE3MDA0QzA3MzggLyogU3Bhbm5p
bmdUcmVlLmggKi8sCiAJCQkJQkNBMzBDN0YyNjZEMzAzNDAwMEQyMzBDIC8qIFNwYW4uaCAqLywK
KwkJCQlCQ0EzMEM3RjI2NkQzMDM0MDAwRDIzMEMgLyogU3Bhbi5oICovLAorCQkJCTc5MDM4RTA1
MjI0QjA1QTcwMDRDMDczOCAvKiBTcGFubmluZ1RyZWUuaCAqLywKIAkJCQlBOEE0NzMwRDE1MUE4
MjVCMDA0MTIzRkYgLyogU3BlY3RydW0uaCAqLywKIAkJCQlBOEE0NzMwRTE1MUE4MjVCMDA0MTIz
RkYgLyogU3RhY2tCb3VuZHMuY3BwICovLAogCQkJCUE4QTQ3MzBGMTUxQTgyNUIwMDQxMjNGRiAv
KiBTdGFja0JvdW5kcy5oICovLApJbmRleDogU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAJKHJldmlzaW9uIDI3
ODc2MykKKysrIFNvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMTksOSArMzE5LDkgQEAgYm9vbCBleGNsdWRlRnJvbUJhY2t1cChjb25zdCBTdHJpbmcmKQog
CiBNYXBwZWRGaWxlRGF0YTo6fk1hcHBlZEZpbGVEYXRhKCkKIHsKLSAgICBpZiAoIW1fZmlsZURh
dGEpCisgICAgaWYgKCFtX2ZpbGVEYXRhLmRhdGEoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHVu
bWFwVmlld09mRmlsZShtX2ZpbGVEYXRhLCBtX2ZpbGVTaXplKTsKKyAgICB1bm1hcFZpZXdPZkZp
bGUobV9maWxlRGF0YSk7CiB9CiAKIE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShjb25z
dCBTdHJpbmcmIGZpbGVQYXRoLCBNYXBwZWRGaWxlTW9kZSBtYXBNb2RlLCBib29sJiBzdWNjZXNz
KQpAQCAtMzgzLDE0ICszODMsMTMgQEAgYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRs
ZShQbGF0ZgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgbV9maWxlRGF0YSA9
IGRhdGE7Ci0gICAgbV9maWxlU2l6ZSA9IHNpemU7CisgICAgbV9maWxlRGF0YSA9IFNwYW4geyBy
ZWludGVycHJldF9jYXN0PHN0ZDo6Ynl0ZSo+KGRhdGEpLCBzaXplIH07CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWJvb2wgdW5tYXBWaWV3T2ZGaWxlKHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHNpemUp
Citib29sIHVubWFwVmlld09mRmlsZShTcGFuPHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKLSAgICByZXR1
cm4gIW11bm1hcChidWZmZXIsIHNpemUpOworICAgIHJldHVybiAhbXVubWFwKGRhdGEuZGF0YSgp
LCBkYXRhLnNpemUoKSk7CiB9CiAKICNlbmRpZgpAQCAtNDM4LDcgKzQzNyw3IEBAIFN0cmluZyBj
cmVhdGVUZW1wb3JhcnlaaXBBcmNoaXZlKGNvbnN0IFMKIH0KICNlbmRpZgogCi1NYXBwZWRGaWxl
RGF0YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBzaXplX3QgYnl0ZXNTaXplLCBGdW5j
dGlvbjx2b2lkKGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCosIHNpemVfdCk+Jik+
JiYgYXBwbHksIFBsYXRmb3JtRmlsZUhhbmRsZSogb3V0cHV0SGFuZGxlKQorTWFwcGVkRmlsZURh
dGEgbWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVuY3Rp
b248dm9pZChjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+Jik+JiYg
YXBwbHksIFBsYXRmb3JtRmlsZUhhbmRsZSogb3V0cHV0SGFuZGxlKQogewogICAgIGNvbnN0ZXhw
ciBib29sIGZhaWxJZkZpbGVFeGlzdHMgPSB0cnVlOwogICAgIGF1dG8gaGFuZGxlID0gRmlsZVN5
c3RlbTo6b3BlbkZpbGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkV3JpdGUs
IEZpbGVTeXN0ZW06OkZpbGVBY2Nlc3NQZXJtaXNzaW9uOjpVc2VyLCBmYWlsSWZGaWxlRXhpc3Rz
KTsKQEAgLTQ1NSwxMiArNDU0LDEyIEBAIE1hcHBlZEZpbGVEYXRhIG1hcFRvRmlsZShjb25zdCBT
dHJpbmcmIHAKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICB2b2lkKiBtYXAgPSBj
b25zdF9jYXN0PHZvaWQqPihtYXBwZWRGaWxlLmRhdGEoKSk7Ci0gICAgdWludDhfdCogbWFwRGF0
YSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtYXApOworICAgIGF1dG8gbWFwID0gbWFwcGVkRmls
ZS5kYXRhKCkuZGF0YSgpOworICAgIGF1dG8gbWFwRGF0YSA9IG1hcDsKIAotICAgIGFwcGx5KFsm
bWFwRGF0YV0oY29uc3QgdWludDhfdCogY2h1bmssIHNpemVfdCBjaHVua1NpemUpIHsKLSAgICAg
ICAgbWVtY3B5KG1hcERhdGEsIGNodW5rLCBjaHVua1NpemUpOwotICAgICAgICBtYXBEYXRhICs9
IGNodW5rU2l6ZTsKKyAgICBhcHBseShbJm1hcERhdGFdKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBj
aHVuaykgeworICAgICAgICBtZW1jcHkobWFwRGF0YSwgY2h1bmsuZGF0YSgpLCBjaHVuay5zaXpl
KCkpOworICAgICAgICBtYXBEYXRhICs9IGNodW5rLnNpemUoKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfSk7CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgJKHJldmlzaW9uIDI3ODc2MykKKysr
IFNvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQs
NyBAQAogI2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNs
dWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL1dhbGxUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CkBAIC0yMTAsNyArMjExLDcgQEAgV1RGX0VYUE9SVF9QUklWQVRFIFN0
cmluZyByZWFsUGF0aChjb25zdAogV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNTYWZlVG9Vc2VN
ZW1vcnlNYXBGb3JQYXRoKGNvbnN0IFN0cmluZyYpOwogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQg
bWFrZVNhZmVUb1VzZU1lbW9yeU1hcEZvclBhdGgoY29uc3QgU3RyaW5nJik7CiAKLVdURl9FWFBP
UlRfUFJJVkFURSBib29sIHVubWFwVmlld09mRmlsZSh2b2lkKiBidWZmZXIsIHNpemVfdCk7CitX
VEZfRVhQT1JUX1BSSVZBVEUgYm9vbCB1bm1hcFZpZXdPZkZpbGUoU3BhbjxzdGQ6OmJ5dGU+KTsK
IAogY2xhc3MgTWFwcGVkRmlsZURhdGEgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpA
QCAtMjIzLDE3ICsyMjQsMTUgQEAgcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSB+TWFw
cGVkRmlsZURhdGEoKTsKICAgICBNYXBwZWRGaWxlRGF0YSYgb3BlcmF0b3I9KE1hcHBlZEZpbGVE
YXRhJiYpOwogCi0gICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEh
bV9maWxlRGF0YTsgfQotICAgIGNvbnN0IHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2Zp
bGVEYXRhOyB9Ci0gICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZVNpemU7
IH0KKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2ZpbGVE
YXRhLmRhdGEoKTsgfQorICAgIFNwYW48c3RkOjpieXRlPiBkYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9maWxlRGF0YTsgfQogCi0gICAgdm9pZCogbGVha0hhbmRsZSgpIHsgcmV0dXJuIHN0ZDo6ZXhj
aGFuZ2UobV9maWxlRGF0YSwgbnVsbHB0cik7IH0KKyAgICBXQVJOX1VOVVNFRF9SRVRVUk4gU3Bh
bjxzdGQ6OmJ5dGU+IGxlYWtIYW5kbGUoKSB7IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fZmlsZURh
dGEsIHsgfSk7IH0KIAogcHJpdmF0ZToKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBtYXBG
aWxlSGFuZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgRmlsZU9wZW5Nb2RlLCBNYXBwZWRGaWxlTW9k
ZSk7CiAKLSAgICB2b2lkKiBtX2ZpbGVEYXRhIHsgbnVsbHB0ciB9OwotICAgIHVuc2lnbmVkIG1f
ZmlsZVNpemUgeyAwIH07CisgICAgU3BhbjxzdGQ6OmJ5dGU+IG1fZmlsZURhdGE7CiB9OwogCiBp
bmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKFBsYXRmb3JtRmlsZUhhbmRsZSBo
YW5kbGUsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUsIGJvb2wmIHN1Y2Nlc3MpCkBAIC0yNDcsMjEg
KzI0NiwxOSBAQCBpbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKFBsCiB9CiAK
IGlubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoTWFwcGVkRmlsZURhdGEmJiBv
dGhlcikKLSAgICA6IG1fZmlsZURhdGEoc3RkOjpleGNoYW5nZShvdGhlci5tX2ZpbGVEYXRhLCBu
dWxscHRyKSkKLSAgICAsIG1fZmlsZVNpemUoc3RkOjpleGNoYW5nZShvdGhlci5tX2ZpbGVTaXpl
LCAwKSkKKyAgICA6IG1fZmlsZURhdGEoc3RkOjpleGNoYW5nZShvdGhlci5tX2ZpbGVEYXRhLCB7
IH0pKQogewogfQogCiBpbmxpbmUgTWFwcGVkRmlsZURhdGEmIE1hcHBlZEZpbGVEYXRhOjpvcGVy
YXRvcj0oTWFwcGVkRmlsZURhdGEmJiBvdGhlcikKIHsKLSAgICBtX2ZpbGVEYXRhID0gc3RkOjpl
eGNoYW5nZShvdGhlci5tX2ZpbGVEYXRhLCBudWxscHRyKTsKLSAgICBtX2ZpbGVTaXplID0gc3Rk
OjpleGNoYW5nZShvdGhlci5tX2ZpbGVTaXplLCAwKTsKKyAgICBtX2ZpbGVEYXRhID0gc3RkOjpl
eGNoYW5nZShvdGhlci5tX2ZpbGVEYXRhLCB7IH0pOwogICAgIHJldHVybiAqdGhpczsKIH0KIAog
Ly8gVGhpcyBjcmVhdGVzIHRoZSBkZXN0aW5hdGlvbiBmaWxlLCBtYXBzIGl0LCB3cml0ZSB0aGUg
cHJvdmlkZWQgZGF0YSB0byBpdCBhbmQgcmV0dXJucyB0aGUgbWFwcGVkIGZpbGUuCiAvLyBUaGlz
IGZ1bmN0aW9uIGZhaWxzIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBmaWxlIGF0IHRoZSBkZXN0aW5h
dGlvbiBwYXRoLgotV1RGX0VYUE9SVF9QUklWQVRFIE1hcHBlZEZpbGVEYXRhIG1hcFRvRmlsZShj
b25zdCBTdHJpbmcmIHBhdGgsIHNpemVfdCBieXRlc1NpemUsIEZ1bmN0aW9uPHZvaWQoY29uc3Qg
RnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mKT4mJiBhcHBseSwgUGxhdGZv
cm1GaWxlSGFuZGxlKiA9IG51bGxwdHIpOworV1RGX0VYUE9SVF9QUklWQVRFIE1hcHBlZEZpbGVE
YXRhIG1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIHNpemVfdCBieXRlc1NpemUsIEZ1bmN0
aW9uPHZvaWQoY29uc3QgRnVuY3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYpPiYm
IGFwcGx5LCBQbGF0Zm9ybUZpbGVIYW5kbGUqID0gbnVsbHB0cik7CiAKIH0gLy8gbmFtZXNwYWNl
IEZpbGVTeXN0ZW1JbXBsCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L1NIQTEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NIQTEuY3BwCShyZXZpc2lv
biAyNzg3NjMpCisrKyBTb3VyY2UvV1RGL3d0Zi9TSEExLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDYsMTAgKzQ2LDEwIEBAIFNIQTE6OlNIQTEoKQogICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFS
QVRJT05TX0VORAogfQogCi12b2lkIFNIQTE6OmFkZEJ5dGVzKGNvbnN0IHVpbnQ4X3QqIGlucHV0
LCBzaXplX3QgbGVuZ3RoKQordm9pZCBTSEExOjphZGRCeXRlcyhTcGFuPGNvbnN0IHN0ZDo6Ynl0
ZT4gaW5wdXQpCiB7CiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAg
ICBDQ19TSEExX1VwZGF0ZSgmbV9jb250ZXh0LCBpbnB1dCwgbGVuZ3RoKTsKKyAgICBDQ19TSEEx
X1VwZGF0ZSgmbV9jb250ZXh0LCBpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSk7CiAgICAgQUxM
T1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiB9CiAKQEAgLTEwMSwxMSArMTAxLDExIEBA
IFNIQTE6OlNIQTEoKQogICAgIHJlc2V0KCk7CiB9CiAKLXZvaWQgU0hBMTo6YWRkQnl0ZXMoY29u
c3QgdWludDhfdCogaW5wdXQsIHNpemVfdCBsZW5ndGgpCit2b2lkIFNIQTE6OmFkZEJ5dGVzKFNw
YW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCkKIHsKLSAgICB3aGlsZSAobGVuZ3RoLS0pIHsKKyAg
ICBmb3IgKGF1dG8gYnl0ZSA6IGlucHV0KSB7CiAgICAgICAgIEFTU0VSVChtX2N1cnNvciA8IDY0
KTsKLSAgICAgICAgbV9idWZmZXJbbV9jdXJzb3IrK10gPSAqaW5wdXQrKzsKKyAgICAgICAgbV9i
dWZmZXJbbV9jdXJzb3IrK10gPSBzdGQ6OnRvX2ludGVnZXI8dWludDhfdD4oYnl0ZSk7CiAgICAg
ICAgICsrbV90b3RhbEJ5dGVzOwogICAgICAgICBpZiAobV9jdXJzb3IgPT0gNjQpCiAgICAgICAg
ICAgICBwcm9jZXNzQmxvY2soKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1NIQTEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TSEExLmgJKHJldmlzaW9uIDI3ODc2MykKKysrIFNvdXJj
ZS9XVEYvd3RmL1NIQTEuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlIDxhcnJheT4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKQEAgLTQ1
LDE1ICs0Niw4IEBAIGNsYXNzIFNIQTEgewogcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBTSEExKCk7CiAKLSAgICB2b2lkIGFkZEJ5dGVzKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaW5w
dXQpCi0gICAgewotICAgICAgICBhZGRCeXRlcyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSk7
Ci0gICAgfQotICAgIHZvaWQgYWRkQnl0ZXMoY29uc3QgQ1N0cmluZyYgaW5wdXQpCi0gICAgewot
ICAgICAgICBhZGRCeXRlcyhpbnB1dC5kYXRhQXNVSW50OFB0cigpLCBpbnB1dC5sZW5ndGgoKSk7
Ci0gICAgfQotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGFkZEJ5dGVzKGNvbnN0IHVpbnQ4
X3QqIGlucHV0LCBzaXplX3QgbGVuZ3RoKTsKKyAgICB2b2lkIGFkZEJ5dGVzKGNvbnN0IENTdHJp
bmcmIGlucHV0KSB7IGFkZEJ5dGVzKGlucHV0LmJ5dGVzKCkpOyB9CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQgYWRkQnl0ZXMoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KTsKIAogICAgIC8vIFNp
emUgb2YgdGhlIFNIQTEgaGFzaAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgY29uc3Rl
eHByIHNpemVfdCBoYXNoU2l6ZSA9IDIwOwpJbmRleDogU291cmNlL1dURi93dGYvVmVjdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvVmVjdG9yLmgJKHJldmlzaW9uIDI3ODc2MykK
KysrIFNvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MTMsNiArNjEz
LDcgQEAgcHJpdmF0ZToKIAogcHVibGljOgogICAgIHR5cGVkZWYgVCBWYWx1ZVR5cGU7CisgICAg
dHlwZWRlZiBUIHZhbHVlX3R5cGU7CiAKICAgICB0eXBlZGVmIFQqIGl0ZXJhdG9yOwogICAgIHR5
cGVkZWYgY29uc3QgVCogY29uc3RfaXRlcmF0b3I7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJz
aXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmNwcAkocmV2aXNpb24gMjc4NzYzKQorKysg
U291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU3LDcgKzU3LDcgQEAgdm9pZCBDb2RlcjxDU3RyaW5nPjo6ZW5jb2RlKEVuY29k
ZXImIGVuYwogCiAgICAgdWludDMyX3QgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwogICAgIGVu
Y29kZXIgPDwgbGVuZ3RoOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0cmlu
Zy5kYXRhQXNVSW50OFB0cigpLCBsZW5ndGgpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKHsgc3RyaW5nLmRhdGFBc1VJbnQ4UHRyKCksIGxlbmd0aCB9KTsKIH0KIAogc3RkOjpv
cHRpb25hbDxDU3RyaW5nPiBDb2RlcjxDU3RyaW5nPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
CkBAIC03OCw3ICs3OCw3IEBAIHN0ZDo6b3B0aW9uYWw8Q1N0cmluZz4gQ29kZXI8Q1N0cmluZz46
OmQKIAogICAgIGNoYXIqIGJ1ZmZlcjsKICAgICBDU3RyaW5nIHN0cmluZyA9IENTdHJpbmc6Om5l
d1VuaW5pdGlhbGl6ZWQoKmxlbmd0aCwgYnVmZmVyKTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1ZmZlciksICpsZW5n
dGgpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoeyByZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPihidWZmZXIpLCAqbGVuZ3RoIH0pKQogICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogCiAgICAgcmV0dXJuIHN0cmluZzsKQEAgLTk4LDkgKzk4LDkgQEAgdm9pZCBD
b2RlcjxTdHJpbmc+OjplbmNvZGUoRW5jb2RlciYgZW5jbwogICAgIGVuY29kZXIgPDwgbGVuZ3Ro
IDw8IGlzOEJpdDsKIAogICAgIGlmIChpczhCaXQpCi0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgpOworICAgICAgICBlbmNv
ZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YSh7IHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgg
fSk7CiAgICAgZWxzZQotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzdHJpbmcuY2hhcmFjdGVyczE2KCkpLCBsZW5n
dGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERh
dGEoeyByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzdHJpbmcuY2hhcmFjdGVyczE2
KCkpLCBsZW5ndGggKiBzaXplb2YoVUNoYXIpIH0pOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4KQEAgLTExMiw3ICsxMTIsNyBAQCBzdGF0aWMgaW5saW5lIHN0ZDo6b3B0
aW9uYWw8U3RyaW5nPiBkZWNvCiAKICAgICBDaGFyYWN0ZXJUeXBlKiBidWZmZXI7CiAgICAgU3Ry
aW5nIHN0cmluZyA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7
Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0
PHVpbnQ4X3QqPihidWZmZXIpLCBsZW5ndGggKiBzaXplb2YoQ2hhcmFjdGVyVHlwZSkpKQorICAg
IGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoeyByZWludGVycHJldF9jYXN0PHVp
bnQ4X3QqPihidWZmZXIpLCBsZW5ndGggKiBzaXplb2YoQ2hhcmFjdGVyVHlwZSkgfSkpCiAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgCiAgICAgcmV0dXJuIHN0cmluZzsKQEAgLTE0
MiwxMyArMTQyLDEzIEBAIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBDb2RlcjxTdHJpbmc+OjpkZWMK
IAogdm9pZCBDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29u
c3QgU0hBMTo6RGlnZXN0JiBkaWdlc3QpCiB7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEoZGlnZXN0LmRhdGEoKSwgc2l6ZW9mKGRpZ2VzdCkpOworICAgIGVuY29kZXIuZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKGRpZ2VzdCk7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8U0hBMTo6RGlnZXN0
PiBDb2RlcjxTSEExOjpEaWdlc3Q+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBT
SEExOjpEaWdlc3QgdG1wOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEo
dG1wLmRhdGEoKSwgc2l6ZW9mKHRtcCkpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExl
bmd0aERhdGEodG1wKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICByZXR1cm4g
dG1wOwogfQpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVy
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRD
b2RlcnMuaAkocmV2aXNpb24gMjc4NzYzKQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2Uv
UGVyc2lzdGVudENvZGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDksNyArMTQ5LDcgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAgIHN0YXRpYyB2b2lkIGVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2
ZWN0b3IpCiAgICAgewogICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2
ZWN0b3Iuc2l6ZSgpKTsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4odmVjdG9yLmRhdGEoKSksIHZlY3Rvci5zaXpl
KCkgKiBzaXplb2YoVCkpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YSh7
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iu
c2l6ZSgpICogc2l6ZW9mKFQpIH0pOwogICAgIH0KICAgICAKICAgICBzdGF0aWMgc3RkOjpvcHRp
b25hbDxWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+PiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
QEAgLTE3Myw3ICsxNzMsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2Fw
YWNpCiAgICAgICAgIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4gdGVtcDsKICAgICAgICAgdGVt
cC5ncm93KHNpemUpOwogCi0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERh
dGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4odGVtcC5kYXRhKCkpLCBzaXplICogc2l6ZW9m
KFQpKSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YSh7IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHRlbXAuZGF0YSgpKSwgc2l6ZSAqIHNpemVvZihUKSB9KSkK
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKICAgICAgICAgcmV0dXJuIHRlbXA7
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29k
ZXIuY3BwCShyZXZpc2lvbiAyNzg3NjMpCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Q
ZXJzaXN0ZW50RGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDIzICszMSwyNiBAQAog
bmFtZXNwYWNlIFdURiB7CiBuYW1lc3BhY2UgUGVyc2lzdGVuY2UgewogCi1EZWNvZGVyOjpEZWNv
ZGVyKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpCi0gICAgOiBtX2J1
ZmZlcihidWZmZXIpCi0gICAgLCBtX2J1ZmZlclBvc2l0aW9uKGJ1ZmZlcikKLSAgICAsIG1fYnVm
ZmVyRW5kKGJ1ZmZlciArIGJ1ZmZlclNpemUpCitEZWNvZGVyOjpEZWNvZGVyKFNwYW48Y29uc3Qg
dWludDhfdD4gYnVmZmVyKQorICAgIDogRGVjb2Rlcihhc0J5dGVzKGJ1ZmZlcikpCiB7CiB9CiAK
LURlY29kZXI6On5EZWNvZGVyKCkKK0RlY29kZXI6OkRlY29kZXIoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGJ1ZmZlcikKKyAgICA6IG1fYnVmZmVyKGJ1ZmZlci5kYXRhKCkpCisgICAgLCBtX2J1ZmZl
clBvc2l0aW9uKGJ1ZmZlci5kYXRhKCkpCisgICAgLCBtX2J1ZmZlckVuZChidWZmZXIuZGF0YSgp
ICsgYnVmZmVyLnNpemUoKSkKIHsKIH0KIAorRGVjb2Rlcjo6fkRlY29kZXIoKSA9IGRlZmF1bHQ7
CisKIGJvb2wgRGVjb2Rlcjo6YnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihzaXplX3Qgc2l6
ZSkgY29uc3QKIHsKICAgICByZXR1cm4gc2l6ZSA8PSBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fYnVm
ZmVyRW5kIC0gbV9idWZmZXJQb3NpdGlvbik7CiB9CiAKLWNvbnN0IHVpbnQ4X3QqIERlY29kZXI6
OmJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFkKHNpemVfdCBzaXplKQorY29uc3Qgc3RkOjpieXRl
KiBEZWNvZGVyOjpidWZmZXJQb2ludGVyRm9yRGlyZWN0UmVhZChzaXplX3Qgc2l6ZSkKIHsKICAg
ICBpZiAoIWJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZSkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwpAQCAtNTUsMTYgKzU4LDIxIEBAIGNvbnN0IHVpbnQ4X3QqIERlY29kZXI6OmJ1
ZmZlclBvaW50ZXJGb3IKICAgICBhdXRvIGRhdGEgPSBtX2J1ZmZlclBvc2l0aW9uOwogICAgIG1f
YnVmZmVyUG9zaXRpb24gKz0gc2l6ZTsKIAotICAgIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9y
RGF0YShtX3NoYTEsIGRhdGEsIHNpemUpOworICAgIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9y
RGF0YShtX3NoYTEsIFNwYW4geyBkYXRhLCBzaXplIH0pOwogICAgIHJldHVybiBkYXRhOwogfQog
Ci1ib29sIERlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSh1aW50OF90KiBkYXRhLCBzaXpl
X3Qgc2l6ZSkKK2Jvb2wgRGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48dWludDhf
dD4gZGF0YSkKK3sKKyAgICByZXR1cm4gZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGFzV3JpdGFibGVC
eXRlcyhkYXRhKSk7Cit9CisKK2Jvb2wgRGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNw
YW48c3RkOjpieXRlPiBkYXRhKQogewotICAgIGF1dG8gYnVmZmVyID0gYnVmZmVyUG9pbnRlckZv
ckRpcmVjdFJlYWQoc2l6ZSk7CisgICAgYXV0byBidWZmZXIgPSBidWZmZXJQb2ludGVyRm9yRGly
ZWN0UmVhZChkYXRhLnNpemUoKSk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBtZW1jcHkoZGF0YSwgYnVmZmVyLCBzaXplKTsKKyAgICBtZW1jcHkoZGF0YS5k
YXRhKCksIGJ1ZmZlciwgZGF0YS5zaXplKCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0x
MzksNyArMTQ3LDcgQEAgYm9vbCBEZWNvZGVyOjp2ZXJpZnlDaGVja3N1bSgpCiAgICAgbV9zaGEx
LmNvbXB1dGVIYXNoKGNvbXB1dGVkSGFzaCk7CiAKICAgICBTSEExOjpEaWdlc3Qgc2F2ZWRIYXNo
OwotICAgIGlmICghZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHNhdmVkSGFzaC5kYXRhKCksIHNpemVv
ZihzYXZlZEhhc2gpKSkKKyAgICBpZiAoIWRlY29kZUZpeGVkTGVuZ3RoRGF0YShzYXZlZEhhc2gp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gY29tcHV0ZWRIYXNoID09IHNh
dmVkSGFzaDsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNv
ZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVu
dERlY29kZXIuaAkocmV2aXNpb24gMjc4NzYzKQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVu
Y2UvUGVyc2lzdGVudERlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAog
CiAjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvU0hBMS5oPgorI2lu
Y2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRD
b2Rlci5oPgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTM1LDcgKzM2LDggQEAgbmFtZXNwYWNlIFBl
cnNpc3RlbmNlIHsKIGNsYXNzIERlY29kZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgotICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyKGNvbnN0IHVpbnQ4X3Qq
IGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNv
ZGVyKFNwYW48Y29uc3QgdWludDhfdD4pOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVy
KFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5EZWNvZGVy
KCk7CiAKICAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXJFbmQgLSBt
X2J1ZmZlcjsgfQpAQCAtNDMsNyArNDUsOCBAQCBwdWJsaWM6CiAKICAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgdmVyaWZ5Q2hlY2tzdW0oKTsKIAotICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVGaXhlZExlbmd0
aERhdGEodWludDhfdCosIHNpemVfdCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFdBUk5fVU5V
U0VEX1JFVFVSTiBib29sIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPHVpbnQ4X3Q+KTsKKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKFNwYW48c3RkOjpieXRlPik7CiAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVj
b2RlciYgb3BlcmF0b3I+PihzdGQ6Om9wdGlvbmFsPGJvb2w+Jik7CiAgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIERlY29kZXImIG9wZXJhdG9yPj4oc3RkOjpvcHRpb25hbDx1aW50OF90PiYpOwpAQCAt
ODQsNyArODcsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBudW1FbGVtZW50cyA8PSBzdGQ6
Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIC8gc2l6ZW9mKFQpICYmIGJ1ZmZlcklzTGFy
Z2VFbm91Z2hUb0NvbnRhaW4obnVtRWxlbWVudHMgKiBzaXplb2YoVCkpOwogICAgIH0KIAotICAg
IFdURl9FWFBPUlRfUFJJVkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gY29uc3QgdWludDhfdCogYnVm
ZmVyUG9pbnRlckZvckRpcmVjdFJlYWQoc2l6ZV90IG51bUJ5dGVzKTsKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgV0FSTl9VTlVTRURfUkVUVVJOIGNvbnN0IHN0ZDo6Ynl0ZSogYnVmZmVyUG9pbnRl
ckZvckRpcmVjdFJlYWQoc2l6ZV90IG51bUJ5dGVzKTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0lQQ0RlY29kZXIgPSBmYWxzZTsKIApAQCAtOTIsOSArOTUsOSBAQCBwcml2YXRlOgog
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBidWZmZXJJc0xh
cmdlRW5vdWdoVG9Db250YWluKHNpemVfdCkgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VHlwZT4gRGVjb2RlciYgZGVjb2RlTnVtYmVyKHN0ZDo6b3B0aW9uYWw8VHlwZT4mKTsKIAotICAg
IGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyOwotICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyUG9z
aXRpb247Ci0gICAgY29uc3QgdWludDhfdCogbV9idWZmZXJFbmQ7CisgICAgY29uc3Qgc3RkOjpi
eXRlKiBtX2J1ZmZlcjsKKyAgICBjb25zdCBzdGQ6OmJ5dGUqIG1fYnVmZmVyUG9zaXRpb247Cisg
ICAgY29uc3Qgc3RkOjpieXRlKiBtX2J1ZmZlckVuZDsKIAogICAgIFNIQTEgbV9zaGExOwogfTsK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rl
ci5jcHAJKHJldmlzaW9uIDI3ODc2MykKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1Bl
cnNpc3RlbnRFbmNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMzQgKzMxLDM5IEBACiBu
YW1lc3BhY2UgV1RGIHsKIG5hbWVzcGFjZSBQZXJzaXN0ZW5jZSB7CiAKLUVuY29kZXI6OkVuY29k
ZXIoKQorRW5jb2Rlcjo6RW5jb2RlcigpID0gZGVmYXVsdDsKK0VuY29kZXI6On5FbmNvZGVyKCkg
PSBkZWZhdWx0OworCitzdGQ6OmJ5dGUqIEVuY29kZXI6Omdyb3coc2l6ZV90IHNpemUpCiB7Cisg
ICAgc2l6ZV90IG5ld1Bvc2l0aW9uID0gbV9idWZmZXIuc2l6ZSgpOworICAgIG1fYnVmZmVyLmdy
b3cobV9idWZmZXIuc2l6ZSgpICsgc2l6ZSk7CisgICAgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKSAr
IG5ld1Bvc2l0aW9uOwogfQogCi1FbmNvZGVyOjp+RW5jb2RlcigpCit2b2lkIEVuY29kZXI6OnVw
ZGF0ZUNoZWNrc3VtRm9yRGF0YShTSEExJiBzaGExLCBTcGFuPGNvbnN0IHVpbnQ4X3Q+IGRhdGEp
CiB7CisgICAgcmV0dXJuIHVwZGF0ZUNoZWNrc3VtRm9yRGF0YShzaGExLCBhc0J5dGVzKGRhdGEp
KTsKIH0KIAotdWludDhfdCogRW5jb2Rlcjo6Z3JvdyhzaXplX3Qgc2l6ZSkKK3ZvaWQgRW5jb2Rl
cjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmIHNoYTEsIFNwYW48Y29uc3Qgc3RkOjpieXRl
PiBkYXRhKQogewotICAgIHNpemVfdCBuZXdQb3NpdGlvbiA9IG1fYnVmZmVyLnNpemUoKTsKLSAg
ICBtX2J1ZmZlci5ncm93KG1fYnVmZmVyLnNpemUoKSArIHNpemUpOwotICAgIHJldHVybiBtX2J1
ZmZlci5kYXRhKCkgKyBuZXdQb3NpdGlvbjsKKyAgICBhdXRvIHR5cGVTYWx0ID0gU2FsdDx1aW50
OF90Kj46OnZhbHVlOworICAgIHNoYTEuYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgJnR5cGVTYWx0
LCAxIH0pKTsKKyAgICBzaGExLmFkZEJ5dGVzKGRhdGEpOwogfQogCi12b2lkIEVuY29kZXI6OnVw
ZGF0ZUNoZWNrc3VtRm9yRGF0YShTSEExJiBzaGExLCBjb25zdCB1aW50OF90KiBkYXRhLCBzaXpl
X3Qgc2l6ZSkKK3ZvaWQgRW5jb2Rlcjo6ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48Y29uc3Qg
dWludDhfdD4gZGF0YSkKIHsKLSAgICBhdXRvIHR5cGVTYWx0ID0gU2FsdDx1aW50OF90Kj46OnZh
bHVlOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnR5cGVT
YWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7Ci0gICAgc2hhMS5hZGRCeXRlcyhkYXRhLCBzaXplKTsK
KyAgICByZXR1cm4gZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGFzQnl0ZXMoZGF0YSkpOwogfQogCi12
b2lkIEVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBz
aXplX3Qgc2l6ZSkKK3ZvaWQgRW5jb2Rlcjo6ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48Y29u
c3Qgc3RkOjpieXRlPiBkYXRhKQogewotICAgIHVwZGF0ZUNoZWNrc3VtRm9yRGF0YShtX3NoYTEs
IGRhdGEsIHNpemUpOworICAgIHVwZGF0ZUNoZWNrc3VtRm9yRGF0YShtX3NoYTEsIGRhdGEpOwog
Ci0gICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhzaXplKTsKLSAgICBtZW1jcHkoYnVmZmVyLCBk
YXRhLCBzaXplKTsKKyAgICBhdXRvKiBidWZmZXIgPSBncm93KGRhdGEuc2l6ZSgpKTsKKyAgICBt
ZW1jcHkoYnVmZmVyLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUeXBlPgpAQCAtNjYsNyArNzEsNyBAQCBFbmNvZGVyJiBFbmNvZGVyOjplbmNvZGVO
dW1iZXIoVHlwZSB2YWx1CiB7CiAgICAgRW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIo
bV9zaGExLCB2YWx1ZSk7CiAKLSAgICB1aW50OF90KiBidWZmZXIgPSBncm93KHNpemVvZihUeXBl
KSk7CisgICAgYXV0byogYnVmZmVyID0gZ3JvdyhzaXplb2YoVHlwZSkpOwogICAgIG1lbWNweShi
dWZmZXIsICZ2YWx1ZSwgc2l6ZW9mKFR5cGUpKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CkBAIC0x
MjUsNyArMTMwLDcgQEAgdm9pZCBFbmNvZGVyOjplbmNvZGVDaGVja3N1bSgpCiB7CiAgICAgU0hB
MTo6RGlnZXN0IGhhc2g7CiAgICAgbV9zaGExLmNvbXB1dGVIYXNoKGhhc2gpOwotICAgIGVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShoYXNoLmRhdGEoKSwgaGFzaC5zaXplKCkpOworICAgIGVuY29kZUZp
eGVkTGVuZ3RoRGF0YShhc0J5dGVzKFNwYW4geyBoYXNoIH0pKTsKIH0KIAogfQpJbmRleDogU291
cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5oCShyZXZpc2lv
biAyNzg3NjMpCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlIDx3dGYvRW51
bVRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9TSEExLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL1BlcnNp
c3RlbnRDb2Rlci5oPgogCkBAIC00Myw3ICs0NCw4IEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgfkVuY29kZXIoKTsKIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29k
ZUNoZWNrc3VtKCk7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHVpbnQ4X3Q+KTsKKyAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoU3Bhbjxjb25zdCBzdGQ6
OmJ5dGU+KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8c3Rk
Ojppc19lbnVtPFQ+Ojp2YWx1ZT4qID0gbnVsbHB0cj4KICAgICBFbmNvZGVyJiBvcGVyYXRvcjw8
KGNvbnN0IFQmIHQpCkBAIC03MCwyMyArNzIsMjIgQEAgcHVibGljOgogICAgIFdURl9FWFBPUlRf
UFJJVkFURSBFbmNvZGVyJiBvcGVyYXRvcjw8KGZsb2F0KTsKICAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgRW5jb2RlciYgb3BlcmF0b3I8PChkb3VibGUpOwogCi0gICAgY29uc3QgdWludDhfdCogYnVm
ZmVyKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuZGF0YSgpOyB9Ci0gICAgc2l6ZV90IGJ1ZmZl
clNpemUoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5zaXplKCk7IH0KLQotICAgIFdURl9FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZvckRhdGEoU0hBMSYsIGNvbnN0
IHVpbnQ4X3QqLCBzaXplX3QpOworICAgIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBidWZmZXIoKSBj
b25zdCB7IHJldHVybiBtX2J1ZmZlcjsgfQorICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSBz
dGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZvckRhdGEoU0hBMSYsIFNwYW48Y29uc3QgdWludDhf
dD4pOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZv
ckRhdGEoU0hBMSYsIFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFR5cGU+IHN0YXRpYyB2b2lkIHVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKFNIQTEmLCBUeXBl
KTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lQQ0VuY29kZXIgPSBmYWxzZTsKIAog
cHJpdmF0ZToKLQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+IEVuY29kZXImIGVuY29kZU51
bWJlcihUeXBlKTsKIAotICAgIHVpbnQ4X3QqIGdyb3coc2l6ZV90KTsKKyAgICBzdGQ6OmJ5dGUq
IGdyb3coc2l6ZV90KTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPiBzdHJ1Y3QgU2Fs
dDsKIAotICAgIFZlY3Rvcjx1aW50OF90LCA0MDk2PiBtX2J1ZmZlcjsKKyAgICBWZWN0b3I8c3Rk
OjpieXRlLCA0MDk2PiBtX2J1ZmZlcjsKICAgICBTSEExIG1fc2hhMTsKIH07CiAKQEAgLTEwNiw4
ICsxMDcsOCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4KIHZvaWQgRW5jb2Rlcjo6dXBkYXRl
Q2hlY2tzdW1Gb3JOdW1iZXIoU0hBMSYgc2hhMSwgVHlwZSB2YWx1ZSkKIHsKICAgICBhdXRvIHR5
cGVTYWx0ID0gU2FsdDxUeXBlPjo6dmFsdWU7Ci0gICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPigmdHlwZVNhbHQpLCBzaXplb2YodHlwZVNhbHQpKTsKLSAgICBzaGEx
LmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2YWx1ZSksIHNpemVvZih2YWx1
ZSkpOworICAgIHNoYTEuYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgJnR5cGVTYWx0LCAxIH0pKTsK
KyAgICBzaGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7ICZ2YWx1ZSwgMSB9KSk7CiB9CiAKIH0K
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvdGV4dC9CYXNlNjQuaAkocmV2aXNpb24gMjc4NzYzKQorKysgU291cmNlL1dURi93
dGYvdGV4dC9CYXNlNjQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisjaW5jbHVk
ZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC02MCwxNCArNjEsMTIgQEAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2RlKGNvbgogV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgTENoYXIqLCB1bnNpZ25l
ZCwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExG
cywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKIAogV1RGX0VY
UE9SVF9QUklWQVRFIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCB2
b2lkKiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6
RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVs
dCk7Ci1WZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdElu
c2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKLVZl
Y3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8Y2hhcj4mLCBC
YXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBC
YXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwogVmVjdG9yPHVpbnQ4
X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IENTdHJpbmcmLCBCYXNlNjRFbmNvZGVQb2xp
Y3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAg
PSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IE4+IFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihTcGFuPFQsIE4+LCBCYXNl
NjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNl
NjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwogCiBXVEZfRVhQT1JUX1BS
SVZBVEUgU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwg
QmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywg
QmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKLVN0cmluZyBiYXNl
NjRFbmNvZGVUb1N0cmluZyhjb25zdCBWZWN0b3I8dWludDhfdD4mLCBCYXNlNjRFbmNvZGVQb2xp
Y3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAg
PSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwotU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5n
KGNvbnN0IFZlY3RvcjxjaGFyPiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBv
bGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6
RGVmYXVsdCk7CiBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgQ1N0cmluZyYsIEJh
c2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJh
c2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgTj4gU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKFNwYW48VCwgTj4s
IEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMs
IEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CiAKIFdURl9FWFBP
UlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNv
bnN0IFN0cmluZyYsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0
RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKIFdURl9FWFBPUlRfUFJJVkFU
RSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKFN0cmluZ1ZpZXcs
IE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFwID0g
QmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKQEAgLTc2LDM0ICs3NSwyNCBAQCBXVEZfRVhQT1JU
X1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8CiBXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpv
cHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCB1aW50OF90KiwgdW5z
aWduZWQsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2Rl
TWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKIFdURl9FWFBPUlRfUFJJVkFURSBzdGQ6
Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNp
Z25lZCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVN
YXAgPSBCYXNlNjREZWNvZGVNYXA6OkRlZmF1bHQpOwogCi1pbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+
IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQsIEJhc2U2
NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCi17Ci0gICAgcmV0dXJu
IGJhc2U2NEVuY29kZVRvVmVjdG9yKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3ks
IG1hcCk7Ci19Ci0KLWlubGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3Io
Y29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFz
ZTY0RW5jb2RlTWFwIG1hcCkKLXsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5w
dXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSwgbWFwKTsKLX0KLQogaW5saW5lIFZlY3Rv
cjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBDU3RyaW5nJiBpbnB1dCwgQmFz
ZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1
cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwgcG9s
aWN5LCBtYXApOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5ieXRlcygp
LCBwb2xpY3ksIG1hcCk7CiB9CiAKLWlubGluZSBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmco
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwg
QmFzZTY0RW5jb2RlTWFwIG1hcCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBOPiBWZWN0
b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoU3BhbjxULCBOPiBpbnB1dCwgQmFzZTY0
RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4g
YmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSwg
bWFwKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1
dC5zaXplX2J5dGVzKCksIHBvbGljeSwgbWFwKTsKIH0KIAotaW5saW5lIFN0cmluZyBiYXNlNjRF
bmNvZGVUb1N0cmluZyhjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xp
Y3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQoraW5saW5lIFN0cmluZyBiYXNlNjRFbmNv
ZGVUb1N0cmluZyhjb25zdCBDU3RyaW5nJiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGlj
eSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJp
bmcoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSwgbWFwKTsKKyAgICByZXR1cm4g
YmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5wdXQuYnl0ZXMoKSwgcG9saWN5LCBtYXApOwogfQogCi1p
bmxpbmUgU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IENTdHJpbmcmIGlucHV0LCBC
YXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IE4+IFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuPFQs
IE4+IGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFw
KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0
Lmxlbmd0aCgpLCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5n
KGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZV9ieXRlcygpLCBwb2xpY3ksIG1hcCk7CiB9CiAKIApJ
bmRleDogU291cmNlL1dURi93dGYvdGV4dC9DU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvdGV4dC9DU3RyaW5nLmgJKHJldmlzaW9uIDI3ODc2MykKKysrIFNvdXJjZS9XVEYv
d3RmL3RleHQvQ1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5j
bHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogCiBuYW1lc3BhY2UgV1RG
IHsKIApAQCAtMzksOSArNDAsMTEgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5U
SUZJRVIoQwogY2xhc3MgQ1N0cmluZ0J1ZmZlciBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPENT
dHJpbmdCdWZmZXI+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURF
TlRJRklFUihDU3RyaW5nQnVmZmVyKTsKIHB1YmxpYzoKLSAgICBjb25zdCBjaGFyKiBkYXRhKCkg
eyByZXR1cm4gbXV0YWJsZURhdGEoKTsgfQorICAgIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdCB7
IHJldHVybiBjb25zdF9jYXN0PENTdHJpbmdCdWZmZXIqPih0aGlzKS0+bXV0YWJsZURhdGEoKTsg
fQogICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQogCisgICAg
U3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4gYXNCeXRlcyhTcGFu
IHsgZGF0YSgpLCBsZW5ndGgoKSB9KTsgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBD
U3RyaW5nOwogCkBAIC02Niw2ICs2OSwyMCBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBDU3RyaW5nIG5ld1VuaW5pdGlhbGl6ZWQoc2l6ZV90IGxlbmd0aCwgY2hhciom
IGNoYXJhY3RlckJ1ZmZlcik7CiAgICAgQ1N0cmluZyhIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBl
KSA6IG1fYnVmZmVyKEhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkgeyB9CiAKKyAgICBTcGFuPGNvbnN0
IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fYnVmZmVyKQor
ICAgICAgICAgICAgcmV0dXJuIG1fYnVmZmVyLT5ieXRlcygpOworICAgICAgICByZXR1cm4geyB9
OworICAgIH0KKworICAgIFNwYW48c3RkOjpieXRlPiBtdXRhYmxlQnl0ZXMoKQorICAgIHsKKyAg
ICAgICAgaWYgKGF1dG8gbXV0YWJsZURhdGEgPSB0aGlzLT5tdXRhYmxlRGF0YSgpKQorICAgICAg
ICAgICAgcmV0dXJuIGFzV3JpdGFibGVCeXRlcyhTcGFuIHsgbXV0YWJsZURhdGEsIG1fYnVmZmVy
LT5sZW5ndGgoKSB9KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKICAgICBjb25zdCBj
aGFyKiBkYXRhKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX2J1ZmZlciA/IG1fYnVm
ZmVyLT5kYXRhKCkgOiBudWxscHRyOwpJbmRleDogU291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0
ZW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2lu
LmNwcAkocmV2aXNpb24gMjc4NzYzKQorKysgU291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1X
aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjMsOSArMzYzLDkgQEAgU3RyaW5nIGNyZWF0ZVRl
bXBvcmFyeURpcmVjdG9yeSgpCiAgICAgfSk7CiB9CiAKLWJvb2wgdW5tYXBWaWV3T2ZGaWxlKHZv
aWQqIGJ1ZmZlciwgc2l6ZV90KQorYm9vbCB1bm1hcFZpZXdPZkZpbGUoU3BhbjxzdGQ6OmJ5dGU+
IGRhdGEpCiB7Ci0gICAgcmV0dXJuIFVubWFwVmlld09mRmlsZShidWZmZXIpOworICAgIHJldHVy
biBVbm1hcFZpZXdPZkZpbGUoZGF0YS5kYXRhKCkpOwogfQogCiBib29sIE1hcHBlZEZpbGVEYXRh
OjptYXBGaWxlSGFuZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIEZpbGVPcGVuTW9kZSBv
cGVuTW9kZSwgTWFwcGVkRmlsZU1vZGUpCkBAIC0zNzQsNyArMzc0LDcgQEAgYm9vbCBNYXBwZWRG
aWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0ZgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBhdXRvIHNpemUgPSBmaWxlU2l6ZShoYW5kbGUpOwotICAgIGlmICghc2l6ZSB8fCAqc2l6ZSA+
IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgfHwgKnNpemUgPiBzdGQ6Om51bWVy
aWNfbGltaXRzPGRlY2x0eXBlKG1fZmlsZVNpemUpPjo6bWF4KCkpIHsKKyAgICBpZiAoIXNpemUg
fHwgKnNpemUgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIHx8ICpzaXplID4g
c3RkOjpudW1lcmljX2xpbWl0czxkZWNsdHlwZShtX2ZpbGVEYXRhLnNpemUoKSk+OjptYXgoKSkg
ewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC00MDMsMTEgKzQwMywxMiBAQCBi
b29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmCiAgICAgaWYgKCFtYXBwaW5n
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2ZpbGVEYXRhID0gTWFwVmlld09mRmls
ZShtYXBwaW5nLCBkZXNpcmVkQWNjZXNzLCAwLCAwLCAqc2l6ZSk7CisgICAgYXV0byBkYXRhID0g
TWFwVmlld09mRmlsZShtYXBwaW5nLCBkZXNpcmVkQWNjZXNzLCAwLCAwLCAqc2l6ZSk7CiAgICAg
Q2xvc2VIYW5kbGUobWFwcGluZyk7Ci0gICAgaWYgKCFtX2ZpbGVEYXRhKQorICAgIGlmICghZGF0
YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fZmlsZVNpemUgPSAqc2l6ZTsKKworICAg
IG1fZmlsZURhdGEgPSBTcGFuIHsgcmVpbnRlcnByZXRfY2FzdDxzdGQ6OmJ5dGUqPihkYXRhKSwg
KnNpemUgfTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24g
Mjc4ODAxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsODAgQEAKKzIwMjEtMDYtMTEgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgor
CisgICAgICAgIEFkb3B0IFNwYW4gaW4gbW9yZSBwbGFjZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjg4NworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtXSVBdCisKKyAgICAgICAgKiBNb2R1bGVzL2hp
Z2hsaWdodC9BcHBIaWdobGlnaHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcEhpZ2hsaWdodDo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcEhpZ2hsaWdodDo6ZGVjb2RlKToK
KyAgICAgICAgKiBNb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHRSYW5nZURhdGEuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwSGlnaGxpZ2h0UmFuZ2VEYXRhOjp0b1NoYXJlZEJ1ZmZlciBj
b25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yUmVzcG9uc2VE
YXRhLmg6CisgICAgICAgIChXZWJDb3JlOjplbmNvZGVBcnJheUJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpkZWNvZGVBcnJheUJ1ZmZlcik6CisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9Q
dWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmg6CisgICAgICAgIChXZWJDb3JlOjpQ
dWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjplbmNvZGUgY29uc3QpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yOjplbmNvZGUgY29u
c3QpOgorICAgICAgICAqIE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpnZXRFeHBlY3RlZFdlYlNv
Y2tldEFjY2VwdCk6CisgICAgICAgICogYmluZGluZ3MvanMvQnVmZmVyU291cmNlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpCdWZmZXJTb3VyY2U6OmJ5dGVzIGNvbnN0KToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6ZGVjb2RlKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9T
ZXJpYWxpemVkTkZBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpT
ZXJpYWxpemVkTkZBOjpwb2ludGVyQXRPZmZzZXRJbkZpbGUgY29uc3QpOgorICAgICAgICAqIGNy
eXB0by9tYWMvU2VyaWFsaXplZENyeXB0b0tleVdyYXBNYWMubW06CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVBbmRTdG9yZU1hc3RlcktleSk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6aGFzaFBvaW50ZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9ET01QYXRj
aFN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NUGF0Y2hTdXBwb3J0OjpjcmVhdGVE
aWdlc3QpOgorICAgICAgICAoV2ViQ29yZTo6YWRkU3RyaW5nVG9TSEExKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6c2hvd0NlcnRpZmljYXRlKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmdldFNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZSk6
CisgICAgICAgICogcGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGE6OmNyZWF0ZVNoYXJlZEJ1ZmZlciBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1
ZmZlcjo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21l
bnQ6OmRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpEYXRhU2Vn
bWVudDo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpkZWNv
ZGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6
OnNpemUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2F1ZGlvL2NvY29hL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oOgorICAg
ICAgICAoV2ViQ29yZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjplbmNvZGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpkZWNvZGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01vZGVsLmg6CisgICAgICAgIChXZWJDb3JlOjpNb2Rl
bDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1vZGVsOjpkZWNvZGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpQaXhlbEJ1ZmZlcjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBpeGVsQnVm
ZmVyOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVk
aWFTb3VyY2VDYXBhYmlsaXRpZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNhcGFiaWxpdHlWYWx1
ZU9yUmFuZ2U6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYXBhYmlsaXR5VmFs
dWVPclJhbmdlOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0
aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRkU3RyaW5nVG9T
SEExKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL0NlcnRpZmljYXRlSW5mb0NGTmV0
LmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OmVuY29kZUNGRGF0YSk6CisgICAgICAg
IChXVEY6OlBlcnNpc3RlbmNlOjpkZWNvZGVDRkRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL3Nx
bC9TUUxpdGVTdGF0ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50
OjpiaW5kQmxvYik6CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oOgor
ICAgICAgICAqIHdvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVnaXN0cmF0aW9uRGF0YWJhc2U6OmRvUHVzaENoYW5nZXMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yZHMp
OgorICAgICAgICAqIHdvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTY3JpcHRTdG9yYWdlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNXU2NyaXB0U3RvcmFnZTo6c3RvcmUpOgorCiAyMDIxLTA2LTEx
ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
UGFydGl0aW9uIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUgYnkgU2Vzc2lvbklECklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHQu
aAkocmV2aXNpb24gMjc4NzYzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9oaWdobGlnaHQv
QXBwSGlnaGxpZ2h0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgQXBwSGlnaGxpZ2h0OjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHNpemVfdD4oaGlnaGxpZ2h0
LT5zaXplKCkpOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGhpZ2hsaWdodC0+
ZGF0YSgpLCBoaWdobGlnaHQtPnNpemUoKSwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoKmhpZ2hsaWdodCwgMSk7CiAKICAgICBlbmNvZGVyIDw8IHRleHQ7CiAKQEAgLTc1
LDcgKzc1LDcgQEAgc3RkOjpvcHRpb25hbDxBcHBIaWdobGlnaHQ+IEFwcEhpZ2hsaWdodAogCiAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IGhpZ2hsaWdodDsKICAgICBoaWdobGlnaHQuZ3JvdygqbGVuZ3Ro
KTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGhpZ2hsaWdodC5kYXRh
KCksIGhpZ2hsaWdodC5zaXplKCksIDEpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExl
bmd0aERhdGEoaGlnaGxpZ2h0LCAxKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAog
ICAgIHN0ZDo6b3B0aW9uYWw8c3RkOjpvcHRpb25hbDxTdHJpbmc+PiB0ZXh0OwpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGln
aHRSYW5nZURhdGEuY3BwCShyZXZpc2lvbiAyNzg3NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHRSYW5nZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01Myw3ICs1Myw3IEBAIFJlZjxTaGFyZWRCdWZmZXI+IEFwcEhpZ2hsaWdodFJhbmdlRGF0YToK
IHsKICAgICBXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyIGVuY29kZXI7CiAgICAgZW5jb2RlciA8
PCAqdGhpczsKLSAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZW5jb2Rlci5idWZmZXIo
KSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOworICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0
ZShlbmNvZGVyLmJ1ZmZlcigpKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBB
cHBIaWdobGlnaHRSYW5nZURhdGE6Ok5vZGVQYXRoQ29tcG9uZW50OjplbmNvZGUoRW5jb2RlciYg
ZW5jb2RlcikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0
aGVudGljYXRvclJlc3BvbnNlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvclJlc3BvbnNlRGF0YS5oCShyZXZpc2lvbiAyNzg3
NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRpY2F0b3JSZXNw
b25zZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPgogc3RhdGljIHZvaWQgZW5jb2RlQXJyYXlCdWZmZXIoRW5jb2RlciYgZW5jb2Rl
ciwgY29uc3QgQXJyYXlCdWZmZXImIGJ1ZmZlcikKIHsKICAgICBlbmNvZGVyIDw8IHN0YXRpY19j
YXN0PHVpbnQ2NF90PihidWZmZXIuYnl0ZUxlbmd0aCgpKTsKLSAgICBlbmNvZGVyLmVuY29kZUZp
eGVkTGVuZ3RoRGF0YShzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYnVmZmVyLmRhdGEoKSks
IGJ1ZmZlci5ieXRlTGVuZ3RoKCksIDEpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKGJ1ZmZlci5ieXRlcygpLCAxKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KQEAg
LTc1LDcgKzc1LDcgQEAgUmVmUHRyPEFycmF5QnVmZmVyPiBkZWNvZGVBcnJheUJ1ZmZlcihEZQog
ICAgIGF1dG8gYnVmZmVyID0gQXJyYXlCdWZmZXI6OnRyeUNyZWF0ZShsZW5ndGgudmFsdWUoKSwg
c2l6ZW9mKHVpbnQ4X3QpKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShzdGF0aWNfY2FzdDx1
aW50OF90Kj4oYnVmZmVyLT5kYXRhKCkpLCBsZW5ndGgudmFsdWUoKSwgMSkpCisgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShidWZmZXItPndyaXRhYmxlQnl0ZXMoKSwgMSkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBidWZmZXI7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlv
bk9wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhu
L1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaAkocmV2aXNpb24gMjc4NzYzKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3Jl
YXRpb25PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw4ICsxNDEsOCBAQCB0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25z
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IHJwLmlk
IDw8IHJwLm5hbWUgPDwgcnAuaWNvbjsKLSAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2
NF90Pih1c2VyLmlkLmxlbmd0aCgpKTsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0
YSh1c2VyLmlkLmRhdGEoKSwgdXNlci5pZC5sZW5ndGgoKSwgMSk7CisgICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDx1aW50NjRfdD4odXNlci5pZC5ieXRlcygpLnNpemUoKSk7CisgICAgZW5jb2Rl
ci5lbmNvZGVGaXhlZExlbmd0aERhdGEodXNlci5pZC5ieXRlcygpLCAxKTsKICAgICBlbmNvZGVy
IDw8IHVzZXIuZGlzcGxheU5hbWUgPDwgdXNlci5uYW1lIDw8IHVzZXIuaWNvbiA8PCBwdWJLZXlD
cmVkUGFyYW1zIDw8IHRpbWVvdXQgPDwgZXhjbHVkZUNyZWRlbnRpYWxzIDw8IGF1dGhlbnRpY2F0
b3JTZWxlY3Rpb24gPDwgYXR0ZXN0YXRpb24gPDwgZXh0ZW5zaW9uczsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGlj
S2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaAkocmV2aXNpb24gMjc4NzYzKQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Nyw4ICs0Nyw4IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2
b2lkIFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IHR5cGU7Ci0gICAgZW5jb2RlciA8PCBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oaWQubGVuZ3RoKCkpOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKGlkLmRhdGEoKSwgaWQubGVuZ3RoKCksIDEpOworICAgIGVuY29kZXIgPDwgc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KGlkLmJ5dGVzKCkuc2l6ZSgpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZp
eGVkTGVuZ3RoRGF0YShpZC5ieXRlcygpLCAxKTsKICAgICBlbmNvZGVyIDw8IHRyYW5zcG9ydHM7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRI
YW5kc2hha2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCShyZXZpc2lvbiAyNzg3NjMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAzLDEzICsxMDMsMTQgQEAgc3RhdGljIFN0cmluZyBnZW5lcmF0ZVNlY1dl
YlNvY2tldEtleSgpCiBTdHJpbmcgV2ViU29ja2V0SGFuZHNoYWtlOjpnZXRFeHBlY3RlZFdlYlNv
Y2tldEFjY2VwdChjb25zdCBTdHJpbmcmIHNlY1dlYlNvY2tldEtleSkKIHsKICAgICBjb25zdGV4
cHIgdWludDhfdCB3ZWJTb2NrZXRLZXlHVUlEW10gPSAiMjU4RUFGQTUtRTkxNC00N0RBLTk1Q0Et
QzVBQjBEQzg1QjExIjsKKwogICAgIFNIQTEgc2hhMTsKLSAgICBDU3RyaW5nIGtleURhdGEgPSBz
ZWNXZWJTb2NrZXRLZXkuYXNjaWkoKTsKLSAgICBzaGExLmFkZEJ5dGVzKGtleURhdGEuZGF0YUFz
VUludDhQdHIoKSwga2V5RGF0YS5sZW5ndGgoKSk7Ci0gICAgc2hhMS5hZGRCeXRlcyh3ZWJTb2Nr
ZXRLZXlHVUlELCBzdGQ6OnNpemUod2ViU29ja2V0S2V5R1VJRCkgLSAxKTsKKyAgICBzaGExLmFk
ZEJ5dGVzKHNlY1dlYlNvY2tldEtleS5hc2NpaSgpKTsKKyAgICBzaGExLmFkZEJ5dGVzKGFzQnl0
ZXMoU3BhbiB7IHdlYlNvY2tldEtleUdVSUQgfSkpOworCiAgICAgU0hBMTo6RGlnZXN0IGhhc2g7
CiAgICAgc2hhMS5jb21wdXRlSGFzaChoYXNoKTsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9T
dHJpbmcoaGFzaC5kYXRhKCksIFNIQTE6Omhhc2hTaXplKTsKKyAgICByZXR1cm4gYmFzZTY0RW5j
b2RlVG9TdHJpbmcoU3BhbiB7IGhhc2ggfSk7CiB9CiAKIFdlYlNvY2tldEhhbmRzaGFrZTo6V2Vi
U29ja2V0SGFuZHNoYWtlKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHByb3RvY29sLCBj
b25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBjbGllbnRPcmlnaW4sIGJvb2wg
YWxsb3dDb29raWVzKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQnVmZmVyU291
cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQnVmZmVyU291
cmNlLmgJKHJldmlzaW9uIDI3ODc2MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0J1
ZmZlclNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1NywxMyBAQCBwdWJsaWM6CiAg
ICAgICAgIH0sIG1fdmFyaWFudCk7CiAgICAgfQogCisgICAgU3Bhbjxjb25zdCB1aW50OF90PiBi
eXRlcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjp2aXNpdChbXShhdXRvJiBi
dWZmZXIpIC0+IFNwYW48Y29uc3QgdWludDhfdD4geworICAgICAgICAgICAgcmV0dXJuIGJ1ZmZl
ciA/IFNwYW48Y29uc3QgdWludDhfdD4geyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYnVm
ZmVyLT5kYXRhKCkpLCBidWZmZXItPmJ5dGVMZW5ndGgoKSB9IDogU3Bhbjxjb25zdCB1aW50OF90
PiB7IH07CisgICAgICAgIH0sIG1fdmFyaWFudCk7CisgICAgfQorCiBwcml2YXRlOgogICAgIFZh
cmlhbnRUeXBlIG1fdmFyaWFudDsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAkocmV2aXNpb24gMjc4NzYzKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE2NCwxNSArMTY0LDE1IEBAIHZvaWQgU2VyaWFsaXplZFNjcmlwdFZhbHVl
OjplbmNvZGUoRW5jb2QKIAogICAgIGlmIChoYXNBcnJheSkgewogICAgICAgICBlbmNvZGVyIDw8
IHN0YXRpY19jYXN0PHVpbnQ2NF90PihtX2FycmF5QnVmZmVyQ29udGVudHNBcnJheS0+c2l6ZSgp
KTsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvICZhcnJheUJ1ZmZlckNvbnRlbnRzIDogKm1fYXJy
YXlCdWZmZXJDb250ZW50c0FycmF5KSB7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgYXJyYXlC
dWZmZXJDb250ZW50cyA6ICptX2FycmF5QnVmZmVyQ29udGVudHNBcnJheSkgewogICAgICAgICAg
ICAgZW5jb2RlciA8PCBhcnJheUJ1ZmZlckNvbnRlbnRzLnNpemVJbkJ5dGVzKCk7Ci0gICAgICAg
ICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShzdGF0aWNfY2FzdDxjb25zdCB1aW50
OF90Kj4oYXJyYXlCdWZmZXJDb250ZW50cy5kYXRhKCkpLCBhcnJheUJ1ZmZlckNvbnRlbnRzLnNp
emVJbkJ5dGVzKCksIDEpOworICAgICAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERh
dGEoYXJyYXlCdWZmZXJDb250ZW50cy5ieXRlcygpLCAxKTsKICAgICAgICAgfQogICAgIH0KIAog
I2lmIEVOQUJMRShXRUJfUlRDKQogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KG1fZGV0YWNoZWRSVENEYXRhQ2hhbm5lbHMuc2l6ZSgpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8g
JmNoYW5uZWwgOiBtX2RldGFjaGVkUlRDRGF0YUNoYW5uZWxzKQorICAgIGZvciAoY29uc3QgYXV0
byYgY2hhbm5lbCA6IG1fZGV0YWNoZWRSVENEYXRhQ2hhbm5lbHMpCiAgICAgICAgIGVuY29kZXIg
PDwgKmNoYW5uZWw7CiAjZW5kaWYKIH0KQEAgLTIwNiw3ICsyMDYsNyBAQCBSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkCiAgICAgICAgICAgICBhdXRvIGJ1ZmZlciA9IEdp
Z2FjYWdlOjp0cnlNYWxsb2MoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgYnVmZmVyU2l6ZSk7CiAgICAg
ICAgICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoc3RhdGljX2Nhc3Q8
dWludDhfdCo+KGJ1ZmZlciksIGJ1ZmZlclNpemUsIDEpKSB7CisgICAgICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBzdGF0aWNfY2FzdDxzdGQ6OmJ5dGUq
PihidWZmZXIpLCBidWZmZXJTaXplIH0sIDEpKSB7CiAgICAgICAgICAgICAgICAgR2lnYWNhZ2U6
OmZyZWUoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgYnVmZmVyKTsKICAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL1NlcmlhbGl6ZWRORkEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL1NlcmlhbGl6ZWRORkEuY3BwCShyZXZpc2lvbiAyNzg3NjMpCisr
KyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9TZXJpYWxpemVkTkZBLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3IEBAIFNlcmlhbGl6ZWRORkE6OlNlcmlhbGl6ZWRO
RkEoRmlsZVN5c3RlbToKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBjb25zdCBUKiBTZXJpYWxpemVk
TkZBOjpwb2ludGVyQXRPZmZzZXRJbkZpbGUoc2l6ZV90IG9mZnNldCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4oc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhf
dCo+KG1fZmlsZS5kYXRhKCkpICsgb2Zmc2V0KTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBUKj4obV9maWxlLmRhdGEoKS5kYXRhKCkgKyBvZmZzZXQpOwogfQogCiBhdXRvIFNl
cmlhbGl6ZWRORkE6Om5vZGVzKCkgY29uc3QgLT4gY29uc3QgUmFuZ2U8SW1tdXRhYmxlTkZBTm9k
ZT4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvU2VyaWFsaXplZENyeXB0b0tleVdy
YXBNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9TZXJpYWxp
emVkQ3J5cHRvS2V5V3JhcE1hYy5tbQkocmV2aXNpb24gMjc4NzYzKQorKysgU291cmNlL1dlYkNv
cmUvY3J5cHRvL21hYy9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMTI1LDcgKzEyNSw3IEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAog
ICAgIH0KICNlbmRpZgogCi0gICAgYXV0byBiYXNlNjRFbmNvZGVkTWFzdGVyS2V5RGF0YSA9IGJh
c2U2NEVuY29kZVRvVmVjdG9yKG1hc3RlcktleURhdGEpOworICAgIGF1dG8gYmFzZTY0RW5jb2Rl
ZE1hc3RlcktleURhdGEgPSBiYXNlNjRFbmNvZGVUb1ZlY3RvcihTcGFuIHsgbWFzdGVyS2V5RGF0
YSB9KTsKIAogICAgIC8vIENhbm5vdCB1c2Uga1NlY0NsYXNzS2V5IGJlY2F1c2Ugb2YgPHJkYXI6
Ly9wcm9ibGVtLzE2MDY4MjA3Pi4KICAgICBOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMgPSBAewpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMjc4NzYzKQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAzLDcgKzE2MDMsOCBAQCBFeGNlcHRp
b25Pcjx2b2lkPiBOb2RlOjpzZXRUZXh0Q29udGVudChjCiBzdGF0aWMgU0hBMTo6RGlnZXN0IGhh
c2hQb2ludGVyKGNvbnN0IHZvaWQqIHBvaW50ZXIpCiB7CiAgICAgU0hBMSBzaGExOwotICAgIHNo
YTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oJnBvaW50ZXIpLCBz
aXplb2YocG9pbnRlcikpOworICAgIHNoYTEuYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgJnBvaW50
ZXIsIDEgfSkpOworCiAgICAgU0hBMTo6RGlnZXN0IGRpZ2VzdDsKICAgICBzaGExLmNvbXB1dGVI
YXNoKGRpZ2VzdCk7CiAgICAgcmV0dXJuIGRpZ2VzdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwCShyZXZpc2lvbiAyNzg3NjMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzk0LDI4ICszOTQsMjMgQEAgRXhjZXB0aW9uT3I8dm9pZD4gRE9NUGF0Y2hTdXBwb3J0Ojpp
bm5lcgogICAgIHJldHVybiB7IH07CiB9CiAKLXN0YXRpYyB2b2lkIGFkZFN0cmluZ1RvU0hBMShT
SEExJiBzaGExLCBjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBDU3RyaW5nIGNTdHJpbmcg
PSBzdHJpbmcudXRmOCgpOwotICAgIHNoYTEuYWRkQnl0ZXMoY1N0cmluZy5kYXRhQXNVSW50OFB0
cigpLCBjU3RyaW5nLmxlbmd0aCgpKTsKLX0KLQogc3RkOjp1bmlxdWVfcHRyPERPTVBhdGNoU3Vw
cG9ydDo6RGlnZXN0PiBET01QYXRjaFN1cHBvcnQ6OmNyZWF0ZURpZ2VzdChOb2RlJiBub2RlLCBV
bnVzZWROb2Rlc01hcCogdW51c2VkTm9kZXNNYXApCiB7CiAgICAgYXV0byBkaWdlc3QgPSBtYWtl
VW5pcXVlPERpZ2VzdD4oKTsKICAgICBkaWdlc3QtPm5vZGUgPSAmbm9kZTsKKwogICAgIFNIQTEg
c2hhMTsKIAogICAgIGF1dG8gbm9kZVR5cGUgPSBub2RlLm5vZGVUeXBlKCk7Ci0gICAgc2hhMS5h
ZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmbm9kZVR5cGUpLCBzaXpl
b2Yobm9kZVR5cGUpKTsKLSAgICBhZGRTdHJpbmdUb1NIQTEoc2hhMSwgbm9kZS5ub2RlTmFtZSgp
KTsKLSAgICBhZGRTdHJpbmdUb1NIQTEoc2hhMSwgbm9kZS5ub2RlVmFsdWUoKSk7CisgICAgc2hh
MS5hZGRCeXRlcyhhc0J5dGVzKFNwYW4geyAmbm9kZVR5cGUsIDEgfSkpOworICAgIHNoYTEuYWRk
Qnl0ZXMobm9kZS5ub2RlTmFtZSgpLnV0ZjgoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhub2RlLm5v
ZGVWYWx1ZSgpLnV0ZjgoKSk7CiAKICAgICBpZiAobm9kZS5ub2RlVHlwZSgpID09IE5vZGU6OkVM
RU1FTlRfTk9ERSkgewogICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUuZmlyc3RDaGlsZCgpOwog
ICAgICAgICB3aGlsZSAoY2hpbGQpIHsKICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxEaWdl
c3Q+IGNoaWxkSW5mbyA9IGNyZWF0ZURpZ2VzdCgqY2hpbGQsIHVudXNlZE5vZGVzTWFwKTsKLSAg
ICAgICAgICAgIGFkZFN0cmluZ1RvU0hBMShzaGExLCBjaGlsZEluZm8tPnNoYTEpOworICAgICAg
ICAgICAgc2hhMS5hZGRCeXRlcyhjaGlsZEluZm8tPnNoYTEudXRmOCgpKTsKICAgICAgICAgICAg
IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CiAgICAgICAgICAgICBkaWdlc3QtPmNoaWxk
cmVuLmFwcGVuZChXVEZNb3ZlKGNoaWxkSW5mbykpOwogICAgICAgICB9CkBAIC00MjQsMTkgKzQx
OSwxOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8RE9NUGF0Y2hTdXBwb3J0OjpEaWdlc3Q+CiAgICAgICAg
IGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZXNXaXRob3V0VXBkYXRlKCkpIHsKICAgICAgICAgICAg
IFNIQTEgYXR0cnNTSEExOwogICAgICAgICAgICAgZm9yIChhdXRvJiBhdHRyaWJ1dGUgOiBlbGVt
ZW50LmF0dHJpYnV0ZXNJdGVyYXRvcigpKSB7Ci0gICAgICAgICAgICAgICAgYWRkU3RyaW5nVG9T
SEExKGF0dHJzU0hBMSwgYXR0cmlidXRlLm5hbWUoKS50b1N0cmluZygpKTsKLSAgICAgICAgICAg
ICAgICBhZGRTdHJpbmdUb1NIQTEoYXR0cnNTSEExLCBhdHRyaWJ1dGUudmFsdWUoKSk7CisgICAg
ICAgICAgICAgICAgYXR0cnNTSEExLmFkZEJ5dGVzKGF0dHJpYnV0ZS5uYW1lKCkudG9TdHJpbmco
KS51dGY4KCkpOworICAgICAgICAgICAgICAgIGF0dHJzU0hBMS5hZGRCeXRlcyhhdHRyaWJ1dGUu
dmFsdWUoKS5zdHJpbmcoKS51dGY4KCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgU0hB
MTo6RGlnZXN0IGF0dHJzSGFzaDsKICAgICAgICAgICAgIGF0dHJzU0hBMS5jb21wdXRlSGFzaChh
dHRyc0hhc2gpOwotICAgICAgICAgICAgZGlnZXN0LT5hdHRyc1NIQTEgPSBiYXNlNjRFbmNvZGVU
b1N0cmluZyhhdHRyc0hhc2guZGF0YSgpLCAxMCk7Ci0gICAgICAgICAgICBhZGRTdHJpbmdUb1NI
QTEoc2hhMSwgZGlnZXN0LT5hdHRyc1NIQTEpOworICAgICAgICAgICAgZGlnZXN0LT5hdHRyc1NI
QTEgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgYXR0cnNIYXNoIH0pOworICAgICAgICAg
ICAgc2hhMS5hZGRCeXRlcyhkaWdlc3QtPmF0dHJzU0hBMS51dGY4KCkpOwogICAgICAgICB9CiAg
ICAgfQogCiAgICAgU0hBMTo6RGlnZXN0IGhhc2g7CiAgICAgc2hhMS5jb21wdXRlSGFzaChoYXNo
KTsKLSAgICBkaWdlc3QtPnNoYTEgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhoYXNoLmRhdGEoKSwg
MTApOworICAgIGRpZ2VzdC0+c2hhMSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKFNwYW4geyBoYXNo
IH0pOwogICAgIGlmICh1bnVzZWROb2Rlc01hcCkKICAgICAgICAgdW51c2VkTm9kZXNNYXAtPmFk
ZChkaWdlc3QtPnNoYTEsIGRpZ2VzdC5nZXQoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCShyZXZpc2lvbiAyNzg3
NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjAyLDcgKzYwMiw3IEBAIGJvb2wgSW5zcGVjdG9yRnJvbnRl
bmRIb3N0OjpzaG93Q2VydGlmaWMKICAgICBpZiAoIWRhdGEpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihkYXRhLT5kYXRhKCks
IGRhdGEtPnNpemUoKSk7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyIHsg
KmRhdGEgfTsKICAgICBzdGQ6Om9wdGlvbmFsPENlcnRpZmljYXRlSW5mbz4gY2VydGlmaWNhdGVJ
bmZvOwogICAgIGRlY29kZXIgPj4gY2VydGlmaWNhdGVJbmZvOwogICAgIGlmICghY2VydGlmaWNh
dGVJbmZvKQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JO
ZXR3b3JrQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcAkocmV2aXNpb24gMjc4NzYzKQorKysgU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDA1LDcgKzEwMDUsNyBAQCBQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjxTdHJpbmc+IEluc3BlY3RvCiAKICAgICBXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyIGVuY29k
ZXI7CiAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZv
Pjo6ZW5jb2RlKGVuY29kZXIsIGNlcnRpZmljYXRlLnZhbHVlKCkpOwotICAgIHJldHVybiBiYXNl
NjRFbmNvZGVUb1N0cmluZyhlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7
CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGVuY29kZXIuYnVmZmVyKCkpOwogfQog
CiBXZWJTb2NrZXQqIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6d2ViU29ja2V0Rm9yUmVxdWVzdElk
KGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAJKHJl
dmlzaW9uIDI3ODc2MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0
b21EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksNyArODksNyBAQCBSZWY8U2hhcmVkQnVm
ZmVyPiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6CiAgICAgZW5jb2RlciA8PCBtX29yaWdpbjsKICAg
ICBlbmNvZGVyIDw8IHNhbWVPcmlnaW5DdXN0b21TdHJpbmdEYXRhKCk7CiAgICAgZW5jb2RlciA8
PCBvcmRlcmVkVHlwZXMoKTsKLSAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZW5jb2Rl
ci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOworICAgIHJldHVybiBTaGFyZWRCdWZm
ZXI6OmNyZWF0ZShlbmNvZGVyLmJ1ZmZlcigpKTsKIH0KIAogUGFzdGVib2FyZEN1c3RvbURhdGEg
UGFzdGVib2FyZEN1c3RvbURhdGE6OmZyb21QZXJzaXN0ZW5jZURlY29kZXIoV1RGOjpQZXJzaXN0
ZW5jZTo6RGVjb2RlciYmIGRlY29kZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
aGFyZWRCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1No
YXJlZEJ1ZmZlci5jcHAJKHJldmlzaW9uIDI3ODc2MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1NoYXJlZEJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE4ICszNiwxMyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKGNvbnN0
IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQorU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIo
U3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpCiB7Ci0gICAgYXBwZW5kKGRhdGEsIHNpemUpOwot
fQotCi1TaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qg
c2l6ZSkKLXsKLSAgICBhcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0
YSksIHNpemUpOworICAgIGFwcGVuZChkYXRhKTsKIH0KIAogU2hhcmVkQnVmZmVyOjpTaGFyZWRC
dWZmZXIoRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmJiBmaWxlRGF0YSkKLSAgICA6IG1fc2l6
ZShmaWxlRGF0YS5zaXplKCkpCisgICAgOiBtX3NpemUoZmlsZURhdGEuZGF0YSgpLnNpemUoKSkK
IHsKICAgICBtX3NlZ21lbnRzLmFwcGVuZCh7MCwgRGF0YVNlZ21lbnQ6OmNyZWF0ZShXVEZNb3Zl
KGZpbGVEYXRhKSl9KTsKIH0KQEAgLTE4OCwxMyArMTgzLDEzIEBAIHZvaWQgU2hhcmVkQnVmZmVy
OjphcHBlbmQoY29uc3QgU2hhcmVkQnUKICAgICBBU1NFUlQoaW50ZXJuYWxseUNvbnNpc3RlbnQo
KSk7CiB9CiAKLXZvaWQgU2hhcmVkQnVmZmVyOjphcHBlbmQoY29uc3QgdWludDhfdCogZGF0YSwg
c2l6ZV90IGxlbmd0aCkKK3ZvaWQgU2hhcmVkQnVmZmVyOjphcHBlbmQoU3Bhbjxjb25zdCBzdGQ6
OmJ5dGU+IGRhdGEpCiB7CiAgICAgQVNTRVJUKCFtX2hhc0JlZW5Db21iaW5lZEludG9PbmVTZWdt
ZW50KTsKICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yOwotICAgIHZlY3Rvci5hcHBlbmQoZGF0
YSwgbGVuZ3RoKTsKLSAgICBtX3NlZ21lbnRzLmFwcGVuZCh7bV9zaXplLCBEYXRhU2VnbWVudDo6
Y3JlYXRlKFdURk1vdmUodmVjdG9yKSl9KTsKLSAgICBtX3NpemUgKz0gbGVuZ3RoOworICAgIHZl
Y3Rvci5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5kYXRhKCkp
LCBkYXRhLnNpemUoKSk7CisgICAgbV9zZWdtZW50cy5hcHBlbmQoeyBtX3NpemUsIERhdGFTZWdt
ZW50OjpjcmVhdGUoV1RGTW92ZSh2ZWN0b3IpKSB9KTsKKyAgICBtX3NpemUgKz0gZGF0YS5zaXpl
KCk7CiAgICAgQVNTRVJUKGludGVybmFsbHlDb25zaXN0ZW50KCkpOwogfQogCkBAIC0zMDEsMTEg
KzI5Niw0MCBAQCBjb25zdCB1aW50OF90KiBTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50CiAjaWYg
VVNFKEdTVFJFQU1FUikKICAgICAgICAgW10oY29uc3QgUmVmUHRyPEdzdE1hcHBlZE93bmVkQnVm
ZmVyPiYgZGF0YSkgeyByZXR1cm4gZGF0YS0+ZGF0YSgpOyB9LAogI2VuZGlmCi0gICAgICAgIFtd
KGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBkYXRhKSB7IHJldHVybiBzdGF0aWNf
Y2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5kYXRhKCkpOyB9CisgICAgICAgIFtdKGNvbnN0IEZp
bGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBkYXRhKSB7IHJldHVybiByZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmRhdGEoKS5kYXRhKCkpOyB9CiAgICAgKTsKICAgICByZXR1
cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBtX2ltbXV0YWJsZURhdGEpOwogfQogCitTcGFuPGNvbnN0
IHN0ZDo6Ynl0ZT4gU2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVudDo6Ynl0ZXMoKSBjb25zdAorewor
ICAgIGF1dG8gdmlzaXRvciA9IFdURjo6bWFrZVZpc2l0b3IoCisgICAgICAgIFtdKGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgZGF0YSkgeworICAgICAgICAgICAgcmV0dXJuIGFzQnl0ZXMoU3BhbiB7
IGRhdGEgfSk7CisgICAgICAgIH0sCisjaWYgVVNFKENGKQorICAgICAgICBbXShjb25zdCBSZXRh
aW5QdHI8Q0ZEYXRhUmVmPiYgZGF0YSkgeworICAgICAgICAgICAgcmV0dXJuIGFzQnl0ZXMoU3Bh
biB7IENGRGF0YUdldEJ5dGVQdHIoZGF0YS5nZXQoKSksIHN0YXRpY19jYXN0PHNpemVfdD4oQ0ZE
YXRhR2V0TGVuZ3RoKGRhdGEuZ2V0KCkpKSB9KTsKKyAgICAgICAgfSwKKyNlbmRpZgorI2lmIFVT
RShHTElCKQorICAgICAgICBbXShjb25zdCBHUmVmUHRyPEdCeXRlcz4mIGRhdGEpIHsKKyAgICAg
ICAgICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4o
Z19ieXRlc19nZXRfZGF0YShkYXRhLmdldCgpLCBudWxscHRyKSksIGdfYnl0ZXNfZ2V0X3NpemUo
ZGF0YS5nZXQoKSkgfSk7CisgICAgICAgIH0sCisjZW5kaWYKKyNpZiBVU0UoR1NUUkVBTUVSKQor
ICAgICAgICBbXShjb25zdCBSZWZQdHI8R3N0TWFwcGVkT3duZWRCdWZmZXI+JiBkYXRhKSB7Cisg
ICAgICAgICAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXpl
KCkgfSk7CisgICAgICAgIH0sCisjZW5kaWYKKyAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6
TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBkYXRhLmRhdGEoKTsK
KyAgICAgICAgfQorICAgICk7CisgICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwgbV9pbW11
dGFibGVEYXRhKTsKKworfQorCiBib29sIFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmNvbnRh
aW5zTWFwcGVkRmlsZURhdGEoKSBjb25zdAogewogICAgIHJldHVybiBXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhPihtX2ltbXV0YWJsZURhdGEpOwpAQCAt
MzE5LDcgKzM0Myw3IEBAIHZvaWQgU2hhcmVkQnVmZmVyOjpoaW50TWVtb3J5Tm90TmVlZGVkU28K
IAogV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBTaGFyZWRCdWZmZXI6OmRlY29kZXIoKSBjb25z
dAogewotICAgIHJldHVybiB7IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEo
KSksIHNpemUoKSB9OworICAgIHJldHVybiB7ICp0aGlzIH07CiB9CiAKIGJvb2wgU2hhcmVkQnVm
ZmVyOjpvcGVyYXRvcj09KGNvbnN0IFNoYXJlZEJ1ZmZlciYgb3RoZXIpIGNvbnN0CkBAIC0zODQs
NyArNDA4LDcgQEAgc2l6ZV90IFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OnNpemUoKQogI2lm
IFVTRShHU1RSRUFNRVIpCiAgICAgICAgIFtdKGNvbnN0IFJlZlB0cjxHc3RNYXBwZWRPd25lZEJ1
ZmZlcj4mIGRhdGEpIHsgcmV0dXJuIGRhdGEtPnNpemUoKTsgfSwKICNlbmRpZgotICAgICAgICBb
XShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeyByZXR1cm4gZGF0YS5z
aXplKCk7IH0KKyAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRh
dGEpIHsgcmV0dXJuIGRhdGEuZGF0YSgpLnNpemUoKTsgfQogICAgICk7CiAgICAgcmV0dXJuIFdU
Rjo6dmlzaXQodmlzaXRvciwgbV9pbW11dGFibGVEYXRhKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCShyZXZpc2lvbiAyNzg3NjMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsOCArNjcs
MTIgQEAgY2xhc3MgU2hhcmVkQnVmZmVyRGF0YVZpZXc7CiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBT
aGFyZWRCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxTaGFyZWRCdWZmZXI+IHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYo
Km5ldyBTaGFyZWRCdWZmZXIpOyB9Ci0gICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0
ZShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gYWRvcHRSZWYoKm5l
dyBTaGFyZWRCdWZmZXIoZGF0YSwgc2l6ZSkpOyB9Ci0gICAgc3RhdGljIFJlZjxTaGFyZWRCdWZm
ZXI+IGNyZWF0ZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBTaGFyZWRCdWZmZXIoZGF0YSwgc2l6ZSkpOyB9CisgICAgc3RhdGljIFJlZjxTaGFy
ZWRCdWZmZXI+IGNyZWF0ZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkgeyByZXR1cm4gYWRv
cHRSZWYoKm5ldyBTaGFyZWRCdWZmZXIoZGF0YSkpOyB9CisgICAgc3RhdGljIFJlZjxTaGFyZWRC
dWZmZXI+IGNyZWF0ZShTcGFuPGNvbnN0IHVpbnQ4X3Q+IGRhdGEpIHsgcmV0dXJuIGNyZWF0ZShh
c0J5dGVzKGRhdGEpKTsgfQorICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoU3Bh
bjxjb25zdCBjaGFyPiBkYXRhKSB7IHJldHVybiBjcmVhdGUoYXNCeXRlcyhkYXRhKSk7IH0KKyAg
ICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IHN0ZDo6Ynl0ZSogZGF0YSwg
c2l6ZV90IHNpemUpIHsgcmV0dXJuIGNyZWF0ZShTcGFuIHsgZGF0YSwgc2l6ZSB9KTsgfQorICAg
IHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoY29uc3QgdWludDhfdCogZGF0YSwgc2l6
ZV90IHNpemUpIHsgcmV0dXJuIGNyZWF0ZShTcGFuIHsgZGF0YSwgc2l6ZSB9KTsgfQorICAgIHN0
YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNp
emUpIHsgcmV0dXJuIGNyZWF0ZShTcGFuIHsgZGF0YSwgc2l6ZSB9KTsgfQogICAgIHN0YXRpYyBS
ZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmJiBtYXBw
ZWRGaWxlRGF0YSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRCdWZmZXIoV1RGTW92ZSht
YXBwZWRGaWxlRGF0YSkpKTsgfQogCiAgICAgZW51bSBjbGFzcyBNYXlVc2VGaWxlTWFwcGluZyA6
IGJvb2wgeyBObywgWWVzIH07CkBAIC0xMDEsNiArMTA1LDggQEAgcHVibGljOgogICAgIC8vIEZJ
WE1FOiBBdWRpdCB0aGUgY2FsbCBzaXRlcyBvZiB0aGlzIGZ1bmN0aW9uIGFuZCByZXBsYWNlIHRo
ZW0gd2l0aCBpdGVyYXRpb24gaWYgcG9zc2libGUuCiAgICAgY29uc3QgdWludDhfdCogZGF0YSgp
IGNvbnN0OwogICAgIGNvbnN0IGNoYXIqIGRhdGFBc0NoYXJQdHIoKSBjb25zdCB7IHJldHVybiBy
ZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihkYXRhKCkpOyB9CisgICAgU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4gYXNCeXRlcyhTcGFuIHsgZGF0YSgpLCBz
aXplKCkgfSk7IH0KKwogICAgIFZlY3Rvcjx1aW50OF90PiBjb3B5RGF0YSgpIHsgcmV0dXJuIHsg
ZGF0YSgpLCBzaXplKCkgfTsgfQogCiAgICAgLy8gQ29tYmluZXMgYWxsIHRoZSBzZWdtZW50cyBp
bnRvIGEgVmVjdG9yIGFuZCByZXR1cm5zIHRoYXQgdmVjdG9yIGFmdGVyIGNsZWFyaW5nIHRoZSBT
aGFyZWRCdWZmZXIuCkBAIC0xMTUsOCArMTIxLDEyIEBAIHB1YmxpYzoKICAgICBib29sIGlzRW1w
dHkoKSBjb25zdCB7IHJldHVybiAhc2l6ZSgpOyB9CiAKICAgICB2b2lkIGFwcGVuZChjb25zdCBT
aGFyZWRCdWZmZXImKTsKLSAgICB2b2lkIGFwcGVuZChjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsK
LSAgICB2b2lkIGFwcGVuZChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKSB7IGFwcGVu
ZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgbGVuZ3RoKTsgfQorICAg
IHZvaWQgYXBwZW5kKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CisgICAgdm9pZCBhcHBlbmQoU3Bh
bjxjb25zdCB1aW50OF90PiBkYXRhKSB7IGFwcGVuZChhc0J5dGVzKGRhdGEpKTsgfQorICAgIHZv
aWQgYXBwZW5kKFNwYW48Y29uc3QgY2hhcj4gZGF0YSkgeyBhcHBlbmQoYXNCeXRlcyhkYXRhKSk7
IH0KKyAgICB2b2lkIGFwcGVuZChjb25zdCBzdGQ6OmJ5dGUqIGRhdGEsIHNpemVfdCBsZW5ndGgp
IHsgYXBwZW5kKFNwYW4geyBkYXRhLCBsZW5ndGggfSk7IH0KKyAgICB2b2lkIGFwcGVuZChjb25z
dCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoKSB7IGFwcGVuZChTcGFuIHsgZGF0YSwgbGVu
Z3RoIH0pOyB9CisgICAgdm9pZCBhcHBlbmQoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0
aCkgeyBhcHBlbmQoU3BhbiB7IGRhdGEsIGxlbmd0aCB9KTsgfQogICAgIHZvaWQgYXBwZW5kKFZl
Y3Rvcjx1aW50OF90PiYmKTsKIAogICAgIHZvaWQgY2xlYXIoKTsKQEAgLTEzMSw2ICsxNDEsOCBA
QCBwdWJsaWM6CiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IHVpbnQ4X3QqIGRhdGEoKSBj
b25zdDsKICAgICAgICAgV0VCQ09SRV9FWFBPUlQgc2l6ZV90IHNpemUoKSBjb25zdDsKIAorICAg
ICAgICBXRUJDT1JFX0VYUE9SVCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25zdDsK
KwogICAgICAgICBzdGF0aWMgUmVmPERhdGFTZWdtZW50PiBjcmVhdGUoVmVjdG9yPHVpbnQ4X3Q+
JiYgZGF0YSkKICAgICAgICAgewogICAgICAgICAgICAgZGF0YS5zaHJpbmtUb0ZpdCgpOwpAQCAt
MjEyLDggKzIyNCw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBTaGFyZWRC
dWZmZXIoKSA9IGRlZmF1bHQ7Ci0gICAgZXhwbGljaXQgU2hhcmVkQnVmZmVyKGNvbnN0IHVpbnQ4
X3QqLCBzaXplX3QpOwotICAgIGV4cGxpY2l0IFNoYXJlZEJ1ZmZlcihjb25zdCBjaGFyKiwgc2l6
ZV90KTsKKyAgICBleHBsaWNpdCBTaGFyZWRCdWZmZXIoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KTsK
ICAgICBleHBsaWNpdCBTaGFyZWRCdWZmZXIoVmVjdG9yPHVpbnQ4X3Q+JiYpOwogICAgIGV4cGxp
Y2l0IFNoYXJlZEJ1ZmZlcihGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmKTsKICNpZiBVU0Uo
Q0YpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3Ry
ZWFtRGVzY3JpcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaAkocmV2aXNpb24gMjc4NzYzKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQ0FBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkF1
ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCIKICNpbmNsdWRlIDxDb3JlQXVkaW8vQ29yZUF1ZGlvVHlw
ZXMuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTgwLDEzICs4MSwxMyBAQCBwcml2YXRlOgogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQg
Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QK
IHsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQ4X3QqPigmbV9zdHJlYW1EZXNjcmlwdGlvbiksIHNpemVvZihtX3N0cmVhbURlc2Ny
aXB0aW9uKSwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYXNCeXRlcyhT
cGFuIHsgJm1fc3RyZWFtRGVzY3JpcHRpb24sIDEgfSksIDEpOwogfQogCiB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgogYm9vbCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyLCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQogewotICAg
IHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVp
bnQ4X3QqPigmZGVzY3JpcHRpb24ubV9zdHJlYW1EZXNjcmlwdGlvbiksIHNpemVvZihkZXNjcmlw
dGlvbi5tX3N0cmVhbURlc2NyaXB0aW9uKSwgMSk7CisgICAgcmV0dXJuIGRlY29kZXIuZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKGFzV3JpdGFibGVCeXRlcyhTcGFuIHsgJmRlc2NyaXB0aW9uLm1fc3Ry
ZWFtRGVzY3JpcHRpb24sIDEgfSksIDEpOwogfQogCiBpbmxpbmUgQ0FBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uIHRvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb24mIGRlc2NyaXB0aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvTW9kZWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Nb2RlbC5oCShyZXZpc2lvbiAyNzg3NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Nb2RlbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+CiB2b2lkIE1vZGVsOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKIHsKICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHNpemVfdD4obV9kYXRhLT5zaXplKCkp
OwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKG1fZGF0YS0+ZGF0YSgpLCBtX2Rh
dGEtPnNpemUoKSwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEobV9kYXRh
LT5ieXRlcygpLCAxKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KQEAgLTc0LDcgKzc0
LDcgQEAgUmVmUHRyPE1vZGVsPiBNb2RlbDo6ZGVjb2RlKERlY29kZXImIGRlYwogCiAgICAgVmVj
dG9yPHVpbnQ4X3Q+IGRhdGE7CiAgICAgZGF0YS5ncm93KCpsZW5ndGgpOwotICAgIGlmICghZGVj
b2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAxKSkK
KyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBkYXRhIH0sIDEp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBNb2RlbDo6Y3JlYXRlKFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoZGF0YSkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuaAkocmV2aXNpb24gMjc4NzYzKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIFBp
eGVsQnVmZmVyCiAKICAgICBlbmNvZGVyIDw8IG1fZm9ybWF0OwogICAgIGVuY29kZXIgPDwgbV9z
aXplOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKG1fZGF0YS0+ZGF0YSgpLCBt
X2RhdGEtPmJ5dGVMZW5ndGgoKSwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERh
dGEobV9kYXRhLT5ieXRlcygpLCAxKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rk
OjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gUGl4ZWxCdWZmZXI6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQpAQCAtMTEzLDcgKzExMyw3IEBAIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0ZDo6b3B0
aW9uYWw8UGkKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
IAotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVzdWx0LT5tX2RhdGEt
PmRhdGEoKSwgcmVzdWx0LT5tX2RhdGEtPmJ5dGVMZW5ndGgoKSwgMSkpCisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZXN1bHQtPm1fZGF0YS0+d3JpdGFibGVCeXRlcygp
LCAxKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgIHJldHVybiByZXN1bHQ7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlh
U291cmNlQ2FwYWJpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcy5oCShyZXZpc2lv
biAyNzg3NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGlt
ZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCwxNiArMTE0
LDE2IEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBDYXBhYmlsaXR5
VmFsdWVPclJhbmdlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKLSAgICBlbmNv
ZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3Qq
PigmbV9taW5PclZhbHVlKSwgc2l6ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZhbHVlVW5pb24p
KTsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQ4X3QqPigmbV9tYXgpLCBzaXplb2YoVmFsdWVVbmlvbiksIGFsaWdub2YoVmFsdWVV
bmlvbikpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGFzQnl0ZXMoU3BhbiB7
ICZtX21pbk9yVmFsdWUsIDEgfSksIGFsaWdub2YoVmFsdWVVbmlvbikpOworICAgIGVuY29kZXIu
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGFzQnl0ZXMoU3BhbiB7ICZtX21heCwgMSB9KSwgYWxpZ25v
ZihWYWx1ZVVuaW9uKSk7CiAgICAgZW5jb2RlciA8PCBtX3R5cGU7CiB9CiAKIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+CiBib29sIENhcGFiaWxpdHlWYWx1ZU9yUmFuZ2U6OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyLCBDYXBhYmlsaXR5VmFsdWVPclJhbmdlJiB2YWx1ZU9yUmFuZ2UpCiB7Ci0gICAg
cmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDhfdCo+KCZ2YWx1ZU9yUmFuZ2UubV9taW5PclZhbHVlKSwgc2l6ZW9mKFZhbHVlVW5pb24pLCBh
bGlnbm9mKFZhbHVlVW5pb24pKQotICAgICAgICAmJiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3Ro
RGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWVPclJhbmdlLm1fbWF4KSwgc2l6
ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZhbHVlVW5pb24pKQorICAgIHJldHVybiBkZWNvZGVy
LmRlY29kZUZpeGVkTGVuZ3RoRGF0YShhc1dyaXRhYmxlQnl0ZXMoU3BhbiB7ICZ2YWx1ZU9yUmFu
Z2UubV9taW5PclZhbHVlLCAxIH0pLCBhbGlnbm9mKFZhbHVlVW5pb24pKQorICAgICAgICAmJiBk
ZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShhc1dyaXRhYmxlQnl0ZXMoU3BhbiB7ICZ2YWx1
ZU9yUmFuZ2UubV9tYXgsIDEgfSksIGFsaWdub2YoVmFsdWVVbmlvbikpCiAgICAgICAgICYmIGRl
Y29kZXIuZGVjb2RlKHZhbHVlT3JSYW5nZS5tX3R5cGUpOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGlt
ZU1lZGlhU291cmNlQ2VudGVyLmNwcAkocmV2aXNpb24gMjc4NzYzKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzOSwxMyArMTM5LDEzIEBAIHN0YXRpYyB2b2lkIGFkZFN0cmluZ1Rv
U0hBMShTSEExJiBzaGExLCAKIAogICAgIGlmIChzdHJpbmcuaXM4Qml0KCkgJiYgc3RyaW5nLmlz
QWxsQVNDSUkoKSkgewogICAgICAgICBjb25zdCB1aW50OF90IG51bGxCeXRlID0gMDsKLSAgICAg
ICAgc2hhMS5hZGRCeXRlcyhzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpKTsK
LSAgICAgICAgc2hhMS5hZGRCeXRlcygmbnVsbEJ5dGUsIDEpOworICAgICAgICBzaGExLmFkZEJ5
dGVzKGFzQnl0ZXMoU3BhbiB7IHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkg
fSkpOworICAgICAgICBzaGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7ICZudWxsQnl0ZSwgMSB9
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBhdXRvIHV0ZjggPSBzdHJpbmcudXRm
OCgpOwotICAgIHNoYTEuYWRkQnl0ZXModXRmOC5kYXRhQXNVSW50OFB0cigpLCB1dGY4Lmxlbmd0
aCgpICsgMSk7IC8vIEluY2x1ZGUgdGVybWluYXRpbmcgbnVsbCBieXRlLgorICAgIHNoYTEuYWRk
Qnl0ZXMoYXNCeXRlcyhTcGFuIHsgdXRmOC5kYXRhQXNVSW50OFB0cigpLCB1dGY4Lmxlbmd0aCgp
ICsgMSB9KSk7IC8vIEluY2x1ZGUgdGVybWluYXRpbmcgbnVsbCBieXRlLgogfQogCiBTdHJpbmcg
UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6aGFzaFN0cmluZ1dpdGhTYWx0KGNvbnN0IFN0cmlu
ZyYgaWQsIGNvbnN0IFN0cmluZyYgaGFzaFNhbHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2NmL0NlcnRpZmljYXRlSW5mb0NGTmV0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0NlcnRpZmljYXRlSW5mb0NGTmV0LmNw
cAkocmV2aXNpb24gMjc4NzYzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
Zi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMCw3ICsyMTAs
NyBAQCBzdGF0aWMgdm9pZCBlbmNvZGVDRkRhdGEoRW5jb2RlciYgZW5jb2RlCiAgICAgY29uc3Qg
dWludDhfdCogYnl0ZVB0ciA9IENGRGF0YUdldEJ5dGVQdHIoZGF0YSk7CiAKICAgICBlbmNvZGVy
IDw8IGxlbmd0aDsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShieXRlUHRyLCBz
dGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKFNwYW4geyBieXRlUHRyLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkgfSk7CiB9
CiAKIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldGFpblB0cjxDRkRhdGFSZWY+PiBkZWNvZGVDRkRh
dGEoRGVjb2RlciYgZGVjb2RlcikKQEAgLTIyNSw3ICsyMjUsNyBAQCBzdGF0aWMgc3RkOjpvcHRp
b25hbDxSZXRhaW5QdHI8Q0ZEYXRhUmVmCiAgICAgaWYgKCFwb2ludGVyKQogICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlKG51bGxw
dHIsIHBvaW50ZXIsICpzaXplKSk7CisgICAgcmV0dXJuIGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlKG51
bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHBvaW50ZXIpLCAqc2l6ZSkp
OwogfQogCiAjaWYgSEFWRShTRUNfVFJVU1RfU0VSSUFMSVpBVElPTikKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCShyZXZpc2lvbiAy
Nzg3NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCBib29sIFNRTGl0ZVN0YXRlbWVudDo6
ZXhlY3V0ZUNvbW1hbmQoKQogICAgIHJldHVybiBzdGVwKCkgPT0gU1FMSVRFX0RPTkU7CiB9CiAK
LWludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgU3Bhbjxjb25zdCB1aW50
OF90PiBibG9iKQoraW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IoaW50IGluZGV4LCBTcGFu
PGNvbnN0IHN0ZDo6Ynl0ZT4gYmxvYikKIHsKICAgICBBU1NFUlQoaW5kZXggPiAwKTsKICAgICBB
U1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8PSBiaW5kUGFyYW1ldGVyQ291bnQo
KSk7CkBAIC05NSw2ICs5NSwxMSBAQCBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kQmxvYihpbnQg
aW5kZXgsCiAgICAgcmV0dXJuIHNxbGl0ZTNfYmluZF9ibG9iKG1fc3RhdGVtZW50LCBpbmRleCwg
YmxvYi5kYXRhKCksIGJsb2Iuc2l6ZSgpLCBTUUxJVEVfVFJBTlNJRU5UKTsKIH0KIAoraW50IFNR
TGl0ZVN0YXRlbWVudDo6YmluZEJsb2IoaW50IGluZGV4LCBTcGFuPGNvbnN0IHVpbnQ4X3Q+IGJs
b2IpCit7CisgICAgcmV0dXJuIGJpbmRCbG9iKGluZGV4LCBhc0J5dGVzKGJsb2IpKTsKK30KKwog
aW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IoaW50IGluZGV4LCBjb25zdCBTdHJpbmcmIHRl
eHQpCiB7CiAgICAgLy8gU3RyaW5nOjpjaGFyYWN0ZXJzKCkgcmV0dXJucyAwIGZvciB0aGUgZW1w
dHkgc3RyaW5nLCB3aGljaCBTUUxpdGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Nx
bC9TUUxpdGVTdGF0ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9zcWwvU1FMaXRlU3RhdGVtZW50LmgJKHJldmlzaW9uIDI3ODc2MykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzks
NiArMzksNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgflNRTGl0ZVN0YXRlbWVudCgp
OwogICAgIFdFQkNPUkVfRVhQT1JUIFNRTGl0ZVN0YXRlbWVudChTUUxpdGVTdGF0ZW1lbnQmJik7
CiAgICAgCisgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJpbmRCbG9iKGludCBpbmRleCwgU3Bhbjxj
b25zdCBzdGQ6OmJ5dGU+KTsKICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgYmluZEJsb2IoaW50IGlu
ZGV4LCBTcGFuPGNvbnN0IHVpbnQ4X3Q+KTsKICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgYmluZEJs
b2IoaW50IGluZGV4LCBjb25zdCBTdHJpbmcmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgYmlu
ZFRleHQoaW50IGluZGV4LCBTdHJpbmdWaWV3KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJh
c2UuY3BwCShyZXZpc2lvbiAyNzg3NjMpCisrKyBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZp
Y2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU5
LDEwICs0NTksMTAgQEAgYm9vbCBSZWdpc3RyYXRpb25EYXRhYmFzZTo6ZG9QdXNoQ2hhbmdlcwog
ICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCg2LCB1cGRhdGVWaWFDYWNo
ZVRvU3RyaW5nKGRhdGEucmVnaXN0cmF0aW9uLnVwZGF0ZVZpYUNhY2hlKSkgIT0gU1FMSVRFX09L
CiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDcsIGRhdGEuc2NyaXB0
VVJMLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVu
dC0+YmluZFRleHQoOCwgd29ya2VyVHlwZVRvU3RyaW5nKGRhdGEud29ya2VyVHlwZSkpICE9IFNR
TElURV9PSwotICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kQmxvYig5LCBTcGFu
IHsgY3NwRW5jb2Rlci5idWZmZXIoKSwgY3NwRW5jb2Rlci5idWZmZXJTaXplKCkgfSkgIT0gU1FM
SVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDksIGNzcEVu
Y29kZXIuYnVmZmVyKCkpICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVt
ZW50LT5iaW5kVGV4dCgxMCwgZGF0YS5yZWZlcnJlclBvbGljeSkgIT0gU1FMSVRFX09LCi0gICAg
ICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDExLCBTcGFuIHsgc2NyaXB0UmVz
b3VyY2VNYXBFbmNvZGVyLmJ1ZmZlcigpLCBzY3JpcHRSZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVy
U2l6ZSgpIH0pICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5i
aW5kQmxvYigxMiwgU3BhbiB7IGNlcnRpZmljYXRlSW5mb0VuY29kZXIuYnVmZmVyKCksIGNlcnRp
ZmljYXRlSW5mb0VuY29kZXIuYnVmZmVyU2l6ZSgpIH0pICE9IFNRTElURV9PSworICAgICAgICAg
ICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kQmxvYigxMSwgc2NyaXB0UmVzb3VyY2VNYXBFbmNv
ZGVyLmJ1ZmZlcigpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVu
dC0+YmluZEJsb2IoMTIsIGNlcnRpZmljYXRlSW5mb0VuY29kZXIuYnVmZmVyKCkpICE9IFNRTElU
RV9PSwogICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RP
TkUpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIsICJGYWls
ZWQgdG8gc3RvcmUgcmVnaXN0cmF0aW9uIGRhdGEgaW50byByZWNvcmRzIHRhYmxlICglaSkgLSAl
cyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01MTcsNyArNTE3LDcgQEAgU3RyaW5nIFJl
Z2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcgogICAgICAgICBzdGQ6Om9wdGlvbmFsPENv
bnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycz4gY29udGVudFNlY3VyaXR5UG9saWN5
OwogICAgICAgICBhdXRvIGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGFTcGFuID0gc3FsLT5jb2x1
bW5CbG9iQXNTcGFuKDgpOwogICAgICAgICBpZiAoY29udGVudFNlY3VyaXR5UG9saWN5RGF0YVNw
YW4uc2l6ZSgpKSB7Ci0gICAgICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGNzcERl
Y29kZXIoY29udGVudFNlY3VyaXR5UG9saWN5RGF0YVNwYW4uZGF0YSgpLCBjb250ZW50U2VjdXJp
dHlQb2xpY3lEYXRhU3Bhbi5zaXplKCkpOworICAgICAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6
RGVjb2RlciBjc3BEZWNvZGVyIHsgY29udGVudFNlY3VyaXR5UG9saWN5RGF0YVNwYW4gfTsKICAg
ICAgICAgICAgIGNzcERlY29kZXIgPj4gY29udGVudFNlY3VyaXR5UG9saWN5OwogICAgICAgICAg
ICAgaWYgKCFjb250ZW50U2VjdXJpdHlQb2xpY3kpIHsKICAgICAgICAgICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihTZXJ2aWNlV29ya2VyLCAiUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJl
Y29yZHM6IEZhaWxlZCB0byBkZWNvZGUgY29udGVudFNlY3VyaXR5UG9saWN5Iik7CkBAIC01MzAs
NyArNTMwLDcgQEAgU3RyaW5nIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcgogICAg
ICAgICBIYXNoTWFwPFVSTCwgU2VydmljZVdvcmtlckNvbnRleHREYXRhOjpJbXBvcnRlZFNjcmlw
dD4gc2NyaXB0UmVzb3VyY2VNYXA7CiAgICAgICAgIGF1dG8gc2NyaXB0UmVzb3VyY2VNYXBEYXRh
U3BhbiA9IHNxbC0+Y29sdW1uQmxvYkFzU3BhbigxMCk7CiAgICAgICAgIGlmIChzY3JpcHRSZXNv
dXJjZU1hcERhdGFTcGFuLnNpemUoKSkgewotICAgICAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6
RGVjb2RlciBzY3JpcHRSZXNvdXJjZU1hcERlY29kZXIoc2NyaXB0UmVzb3VyY2VNYXBEYXRhU3Bh
bi5kYXRhKCksIHNjcmlwdFJlc291cmNlTWFwRGF0YVNwYW4uc2l6ZSgpKTsKKyAgICAgICAgICAg
IFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgc2NyaXB0UmVzb3VyY2VNYXBEZWNvZGVyIHsgc2Ny
aXB0UmVzb3VyY2VNYXBEYXRhU3BhbiB9OwogICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxIYXNo
TWFwPFVSTCwgSW1wb3J0ZWRTY3JpcHRBdHRyaWJ1dGVzPj4gc2NyaXB0UmVzb3VyY2VNYXBXaXRo
b3V0U2NyaXB0czsKICAgICAgICAgICAgIHNjcmlwdFJlc291cmNlTWFwRGVjb2RlciA+PiBzY3Jp
cHRSZXNvdXJjZU1hcFdpdGhvdXRTY3JpcHRzOwogICAgICAgICAgICAgaWYgKCFzY3JpcHRSZXNv
dXJjZU1hcFdpdGhvdXRTY3JpcHRzKSB7CkBAIC01NDMsNyArNTQzLDcgQEAgU3RyaW5nIFJlZ2lz
dHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcgogICAgICAgICBhdXRvIGNlcnRpZmljYXRlSW5m
b0RhdGFTcGFuID0gc3FsLT5jb2x1bW5CbG9iQXNTcGFuKDExKTsKICAgICAgICAgc3RkOjpvcHRp
b25hbDxDZXJ0aWZpY2F0ZUluZm8+IGNlcnRpZmljYXRlSW5mbzsKIAotICAgICAgICBXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyIGNlcnRpZmljYXRlSW5mb0RlY29kZXIoY2VydGlmaWNhdGVJbmZv
RGF0YVNwYW4uZGF0YSgpLCBjZXJ0aWZpY2F0ZUluZm9EYXRhU3Bhbi5zaXplKCkpOworICAgICAg
ICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGNlcnRpZmljYXRlSW5mb0RlY29kZXIgeyBjZXJ0
aWZpY2F0ZUluZm9EYXRhU3BhbiB9OwogICAgICAgICBjZXJ0aWZpY2F0ZUluZm9EZWNvZGVyID4+
IGNlcnRpZmljYXRlSW5mbzsKICAgICAgICAgaWYgKCFjZXJ0aWZpY2F0ZUluZm8pIHsKICAgICAg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIsICJSZWdpc3RyYXRpb25EYXRh
YmFzZTo6aW1wb3J0UmVjb3JkczogRmFpbGVkIHRvIGRlY29kZSBjZXJ0aWZpY2F0ZUluZm8iKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTY3JpcHRTdG9y
YWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2Vy
dmVyL1NXU2NyaXB0U3RvcmFnZS5jcHAJKHJldmlzaW9uIDI3ODc2MykKKysrIFNvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTY3JpcHRTdG9yYWdlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODYsOSArODYsOSBAQCBTY3JpcHRCdWZmZXIgU1dTY3JpcHRTdG9yYWdlOjpzdG9y
ZShjb25zCiAgICAgYXV0byBzY3JpcHRQYXRoID0gdGhpcy0+c2NyaXB0UGF0aChyZWdpc3RyYXRp
b25LZXksIHNjcmlwdFVSTCk7CiAgICAgRmlsZVN5c3RlbTo6bWFrZUFsbERpcmVjdG9yaWVzKEZp
bGVTeXN0ZW06OnBhcmVudFBhdGgoc2NyaXB0UGF0aCkpOwogCi0gICAgYXV0byBpdGVyYXRlT3Zl
ckJ1ZmZlckFuZFdyaXRlRGF0YSA9IFsmXShjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4
X3QqLCBzaXplX3QpPiYgd3JpdGVEYXRhKSB7Ci0gICAgICAgIGZvciAoYXV0byBpdCA9IHNjcmlw
dC5idWZmZXIoKS0+YmVnaW4oKTsgaXQgIT0gc2NyaXB0LmJ1ZmZlcigpLT5lbmQoKTsgKytpdCkK
LSAgICAgICAgICAgIHdyaXRlRGF0YShpdC0+c2VnbWVudC0+ZGF0YSgpLCBpdC0+c2VnbWVudC0+
c2l6ZSgpKTsKKyAgICBhdXRvIGl0ZXJhdGVPdmVyQnVmZmVyQW5kV3JpdGVEYXRhID0gWyZdKGNv
bnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mIHdyaXRlRGF0YSkgewor
ICAgICAgICBmb3IgKGF1dG8mIHNlZ21lbnRFbnRyeSA6ICpzY3JpcHQuYnVmZmVyKCkpCisgICAg
ICAgICAgICB3cml0ZURhdGEoc2VnbWVudEVudHJ5LnNlZ21lbnQtPmJ5dGVzKCkpOwogICAgIH07
CiAKICAgICBpZiAoIXNob3VsZFVzZUZpbGVNYXBwaW5nKHNjcmlwdC5idWZmZXIoKS0+c2l6ZSgp
KSkgewpAQCAtOTcsOCArOTcsOCBAQCBTY3JpcHRCdWZmZXIgU1dTY3JpcHRTdG9yYWdlOjpzdG9y
ZShjb25zCiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTZXJ2aWNlV29ya2VyLCAiU1dT
Y3JpcHRTdG9yYWdlOjpzdG9yZTogRmFpbHVyZSB0byBzdG9yZSAlcywgRmlsZVN5c3RlbTo6b3Bl
bkZpbGUoKSBmYWlsZWQiLCBzY3JpcHRQYXRoLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAg
cmV0dXJuIHsgfTsKICAgICAgICAgfQotICAgICAgICBpdGVyYXRlT3ZlckJ1ZmZlckFuZFdyaXRl
RGF0YShbJl0oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgICAg
IEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKGhhbmRsZSwgZGF0YSwgc2l6ZSk7CisgICAgICAgIGl0
ZXJhdGVPdmVyQnVmZmVyQW5kV3JpdGVEYXRhKFsmXShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0
YSkgeworICAgICAgICAgICAgRmlsZVN5c3RlbTo6d3JpdGVUb0ZpbGUoaGFuZGxlLCBkYXRhLmRh
dGEoKSwgZGF0YS5zaXplKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0p
OwogICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoaGFuZGxlKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyNzg3NjMpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDgxIEBACisyMDIxLTA2LTExICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxl
LmNvbT4KKworICAgICAgICBBZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwOgorICAgICAgICAo
V2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpD
YWNoZVN0b3JhZ2U6OkNhY2hlOjpkZWNvZGVSZWNvcmRIZWFkZXIpOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpzdG9yZU9yaWdpbik6CisgICAgICAgIChXZWJL
aXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpyZWFkT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6
Q2FjaGVTdG9yYWdlOjplbmNvZGVDYWNoZU5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVT
dG9yYWdlOjpkZWNvZGVDYWNoZXNOYW1lcyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlRGF0YS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
RGF0YTo6bWFwVG9GaWxlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpj
b21wdXRlU0hBMSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
RGF0YS5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6OkRhdGEpOgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhOjphcHBseSBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YTo6YWRvcHRNYXApOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhY2hlOjpFbnRyeTo6ZW5jb2RlQXNTdG9yYWdlUmVjb3JkIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpFbnRyeTo6ZGVjb2RlU3RvcmFnZVJlY29yZCk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpoYXNoU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhY2hlOjpLZXk6OmNvbXB1dGVIYXNoIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhY2hlOjpLZXk6OmNvbXB1dGVQYXJ0aXRpb25IYXNoIGNvbnN0KToKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0NhY2hlOjpkZWNvZGVSZWNvcmRNZXRhRGF0YSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6ZW5jb2RlUmVjb3JkTWV0YURhdGEpOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdWJyZXNvdXJjZXNFbnRyeTo6ZW5jb2RlQXNT
dG9yYWdlUmVjb3JkIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdWJy
ZXNvdXJjZXNFbnRyeTo6ZGVjb2RlU3RvcmFnZVJlY29yZCk6CisgICAgICAgICogUGxhdGZvcm0v
SVBDL0FyZ3VtZW50Q29kZXIuaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2Rl
cnMuY3BwOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPENTdHJpbmc+OjplbmNvZGUpOgor
ICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPENTdHJpbmc+OjpkZWNvZGUpOgorICAgICAgICAo
SVBDOjpBcmd1bWVudENvZGVyPFN0cmluZz46OmVuY29kZSk6CisgICAgICAgIChJUEM6OmRlY29k
ZVN0cmluZ1RleHQpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFNIQTE6OkRpZ2VzdD46
OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVj
b2RlKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaDoKKyAgICAgICAg
KElQQzo6U2ltcGxlQXJndW1lbnRDb2Rlcjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6U2ltcGxl
QXJndW1lbnRDb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvQXJyYXlSZWZl
cmVuY2UuaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvRGVjb2Rlci5jcHA6CisgICAgICAgIChJ
UEM6OkRlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgICogUGxhdGZvcm0v
SVBDL0RlY29kZXIuaDoKKyAgICAgICAgKElQQzo6RGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhE
YXRhKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvRW5jb2Rlci5jcHA6CisgICAgICAgIChJUEM6
OkVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgICogUGxhdGZvcm0vSVBD
L0VuY29kZXIuaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvU2hhcmVkQnVmZmVyQ29weS5jcHA6
CisgICAgICAgIChJUEM6OlNoYXJlZEJ1ZmZlckNvcHk6OmVuY29kZSBjb25zdCk6CisgICAgICAg
ICogUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25FbmNvZGVyLmg6CisgICAgICAgICogU2hh
cmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHA6CisgICAgICAgIChJUEM6OmVuY29kZVNoYXJl
ZEJ1ZmZlcik6CisgICAgICAgIChJUEM6OmRlY29kZVNoYXJlZEJ1ZmZlcik6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHA6CisgICAgICAgIChBUEk6
OmVuY29kZUNvbnRlbnRSdWxlTGlzdE1ldGFEYXRhKToKKyAgICAgICAgKEFQSTo6Z2V0RGF0YSk6
CisgICAgICAgIChBUEk6OmRlY29kZUNvbnRlbnRSdWxlTGlzdE1ldGFEYXRhKToKKyAgICAgICAg
KEFQSTo6d3JpdGVEYXRhVG9GaWxlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL0xlZ2FjeVNl
c3Npb25TdGF0ZUNvZGluZy5jcHA6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFF
bmNvZGVyOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdlYktpdDo6SGlzdG9yeUVudHJ5RGF0YUVu
Y29kZXI6OmVuY29kZUFyaXRobWV0aWNUeXBlKToKKyAgICAgICAgKFdlYktpdDo6SGlzdG9yeUVu
dHJ5RGF0YUVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXZWJLaXQ6
Okhpc3RvcnlFbnRyeURhdGFEZWNvZGVyOjpvcGVyYXRvcj4+KToKKyAgICAgICAgKFdlYktpdDo6
SGlzdG9yeUVudHJ5RGF0YURlY29kZXI6OmRlY29kZUFyaXRobWV0aWNUeXBlKToKKyAgICAgICAg
KFdlYktpdDo6SGlzdG9yeUVudHJ5RGF0YURlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjplbmNvZGVUeXBlZEFycmF5KToKKwogMjAyMS0wNi0x
MSAgTWljaGFlbCBDYXRhbnphcm8gIDxtY2F0YW56YXJvQGdub21lLm9yZz4KIAogICAgICAgICBb
R1RLXSBDcmFzaCB3aGVuIGRyYWdnaW5nIGFuIGFjY291bnQgbm9kZSBhYm92ZSBXZWJWaWV3Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2lu
ZUNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcAkocmV2aXNpb24gMjc4NzYzKQorKysgU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU2NSw3ICs1NjUsNyBAQCBTdG9yYWdlOjpSZWNvcmQgQ2Fj
aGU6OmVuY29kZShjb25zdCBSZWNvCiAKICAgICBlbmNvZGVyLmVuY29kZUNoZWNrc3VtKCk7CiAK
LSAgICBEYXRhIGhlYWRlcihlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7
CisgICAgRGF0YSBoZWFkZXIoZW5jb2Rlci5idWZmZXIoKSk7CiAgICAgRGF0YSBib2R5OwogICAg
IFdURjo6c3dpdGNoT24ocmVjb3JkLnJlc3BvbnNlQm9keSwgW10oY29uc3QgUmVmPFdlYkNvcmU6
OkZvcm1EYXRhPiYgZm9ybURhdGEpIHsKICAgICAgICAgLy8gRklYTUU6IFN0b3JlIGZvcm0gZGF0
YSBib2R5LgpAQCAtNjMwLDcgKzYzMCw3IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6
OkRPTUNhY2hlRW4KIAogc3RkOjpvcHRpb25hbDxDYWNoZTo6RGVjb2RlZFJlY29yZD4gQ2FjaGU6
OmRlY29kZVJlY29yZEhlYWRlcihjb25zdCBTdG9yYWdlOjpSZWNvcmQmIHN0b3JhZ2UpCiB7Ci0g
ICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKHN0b3JhZ2UuaGVhZGVyLmRhdGEo
KSwgc3RvcmFnZS5oZWFkZXIuc2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVy
IGRlY29kZXIoc3RvcmFnZS5oZWFkZXIpOwogCiAgICAgc3RkOjpvcHRpb25hbDxkb3VibGU+IGlu
c2VydGlvblRpbWU7CiAgICAgZGVjb2RlciA+PiBpbnNlcnRpb25UaW1lOwpJbmRleDogU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVT
dG9yYWdlRW5naW5lQ2FjaGVzLmNwcAkocmV2aXNpb24gMjc4NzYzKQorKysgU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDUsMTQgKzEwNSwxNCBAQCB2b2lkIENhY2hlczo6c3RvcmVPcmlnaW4o
Q29tcGxldGlvbkNhbGxiCiAgICAgZW5jb2RlciA8PCBtX29yaWdpbi5jbGllbnRPcmlnaW4ucHJv
dG9jb2w7CiAgICAgZW5jb2RlciA8PCBtX29yaWdpbi5jbGllbnRPcmlnaW4uaG9zdDsKICAgICBl
bmNvZGVyIDw8IG1fb3JpZ2luLmNsaWVudE9yaWdpbi5wb3J0OwotICAgIG1fZW5naW5lLT53cml0
ZUZpbGUoY2FjaGVzT3JpZ2luRmlsZW5hbWUobV9yb290UGF0aCksIERhdGEgeyBlbmNvZGVyLmJ1
ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSB9LCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAo
c3RkOjpvcHRpb25hbDxFcnJvcj4mJiBlcnJvcikgbXV0YWJsZSB7CisgICAgbV9lbmdpbmUtPndy
aXRlRmlsZShjYWNoZXNPcmlnaW5GaWxlbmFtZShtX3Jvb3RQYXRoKSwgRGF0YSB7IGVuY29kZXIu
YnVmZmVyKCkgfSwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKHN0ZDo6b3B0aW9uYWw8RXJyb3I+
JiYgZXJyb3IpIG11dGFibGUgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGVy
cm9yKSk7CiAgICAgfSk7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6Q2xpZW50T3JpZ2lu
PiBDYWNoZXM6OnJlYWRPcmlnaW4oY29uc3QgRGF0YSYgZGF0YSkKIHsKLSAgICBXVEY6OlBlcnNp
c3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICBX
VEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YSk7CiAKICAgICBzdGQ6Om9wdGlv
bmFsPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gdG9wT3JpZ2luOwogICAgIGRlY29kZXIg
Pj4gdG9wT3JpZ2luOwpAQCAtNDA0LDEyICs0MDQsMTIgQEAgc3RhdGljIGlubGluZSBEYXRhIGVu
Y29kZUNhY2hlTmFtZXMoY29ucwogICAgICAgICBlbmNvZGVyIDw8IGNhY2hlLnVuaXF1ZU5hbWUo
KTsKICAgICB9CiAKLSAgICByZXR1cm4gRGF0YSB7IGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIu
YnVmZmVyU2l6ZSgpIH07CisgICAgcmV0dXJuIERhdGEgeyBlbmNvZGVyLmJ1ZmZlcigpIH07CiB9
CiAKIHN0YXRpYyBpbmxpbmUgRXhwZWN0ZWQ8VmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmlu
Zz4+LCBFcnJvcj4gZGVjb2RlQ2FjaGVzTmFtZXMoY29uc3QgRGF0YSYgZGF0YSkKIHsKLSAgICBX
VEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgp
KTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YSk7CiAgICAgc3Rk
OjpvcHRpb25hbDx1aW50NjRfdD4gY291bnQ7CiAgICAgZGVjb2RlciA+PiBjb3VudDsKICAgICBp
ZiAoIWNvdW50KQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCShyZXZpc2lvbiAyNzg3NjMpCisrKyBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogRGF0
YSBEYXRhOjptYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKSBjb25zdAogewogICAgIEZpbGVT
eXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGU7Ci0gICAgYXV0byBhcHBseURhdGEgPSBb
Jl0oY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIGFwcGxpZXIp
IHsgYXBwbHkoYXBwbGllcik7IH07CisgICAgYXV0byBhcHBseURhdGEgPSBbJl0oY29uc3QgRnVu
Y3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYgYXBwbGllcikgeyBhcHBseShhcHBs
aWVyKTsgfTsKICAgICBhdXRvIG1hcHBlZEZpbGUgPSBGaWxlU3lzdGVtOjptYXBUb0ZpbGUocGF0
aCwgc2l6ZSgpLCBXVEZNb3ZlKGFwcGx5RGF0YSksICZoYW5kbGUpOwogICAgIGlmICghbWFwcGVk
RmlsZSkKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTg2LDkgKzg2LDkgQEAgRGF0YSBhZG9wdEFu
ZE1hcEZpbGUoRmlsZVN5c3RlbTo6UGxhdGZvcgogU0hBMTo6RGlnZXN0IGNvbXB1dGVTSEExKGNv
bnN0IERhdGEmIGRhdGEsIGNvbnN0IFNhbHQmIHNhbHQpCiB7CiAgICAgU0hBMSBzaGExOwotICAg
IHNoYTEuYWRkQnl0ZXMoc2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKTsKLSAgICBkYXRhLmFwcGx5
KFsmc2hhMV0oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgc2hh
MS5hZGRCeXRlcyhkYXRhLCBzaXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7
IHNhbHQgfSkpOworICAgIGRhdGEuYXBwbHkoWyZzaGExXShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
ZGF0YSkgeworICAgICAgICBzaGExLmFkZEJ5dGVzKGRhdGEpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9KTsKIApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgJKHJldmlzaW9uIDI3ODc2MykKKysrIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KICNp
bmNsdWRlIDx3dGYvRnVuY3Rpb25EaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8d3RmL1NIQTEuaD4K
KyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRl
ZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC01NCw2ICs1NSwxMCBA
QCBjbGFzcyBEYXRhIHsKIHB1YmxpYzoKICAgICBEYXRhKCkgeyB9CiAgICAgRGF0YShjb25zdCB1
aW50OF90Kiwgc2l6ZV90KTsKKyAgICBEYXRhKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhKQor
ICAgICAgICA6IERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5kYXRh
KCkpLCBkYXRhLnNpemUoKSkKKyAgICB7CisgICAgfQogCiAgICAgfkRhdGEoKSB7IH0KIApAQCAt
NzksNyArODQsNyBAQCBwdWJsaWM6CiAKICAgICBEYXRhIHN1YnJhbmdlKHNpemVfdCBvZmZzZXQs
IHNpemVfdCkgY29uc3Q7CiAKLSAgICBib29sIGFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2wgKGNv
bnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYpIGNvbnN0OworICAgIGJvb2wgYXBwbHkoY29uc3QgRnVu
Y3Rpb248Ym9vbCAoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mKSBjb25zdDsKIAogICAgIERhdGEg
bWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0
YUNvY29hLm1tCShyZXZpc2lvbiAyNzg3NjMpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjks
MTIgKzY5LDEyIEBAIGJvb2wgRGF0YTo6aXNOdWxsKCkgY29uc3QKICAgICByZXR1cm4gIW1fZGlz
cGF0Y2hEYXRhOwogfQogCi1ib29sIERhdGE6OmFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2wgKGNv
bnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYgYXBwbGllcikgY29uc3QKK2Jvb2wgRGF0YTo6YXBwbHko
Y29uc3QgRnVuY3Rpb248Ym9vbCAoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mIGFwcGxpZXIpIGNv
bnN0CiB7CiAgICAgaWYgKCFtX3NpemUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1
cm4gZGlzcGF0Y2hfZGF0YV9hcHBseShtX2Rpc3BhdGNoRGF0YS5nZXQoKSwgWyZhcHBsaWVyXShk
aXNwYXRjaF9kYXRhX3QsIHNpemVfdCwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpIHsK
LSAgICAgICAgcmV0dXJuIGFwcGxpZXIoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEp
LCBzaXplKTsKKyAgICAgICAgcmV0dXJuIGFwcGxpZXIoU3BhbiB7IHN0YXRpY19jYXN0PGNvbnN0
IHN0ZDo6Ynl0ZSo+KGRhdGEpLCBzaXplIH0pOwogICAgIH0pOwogfQogCkBAIC05NCwxNCArOTQs
MTEgQEAgRGF0YSBjb25jYXRlbmF0ZShjb25zdCBEYXRhJiBhLCBjb25zdCBEYQogCiBEYXRhIERh
dGE6OmFkb3B0TWFwKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYgbWFwcGVkRmlsZSwgRmls
ZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkKQogewotICAgIHNpemVfdCBzaXplID0gbWFw
cGVkRmlsZS5zaXplKCk7Ci0gICAgdm9pZCogbWFwID0gbWFwcGVkRmlsZS5sZWFrSGFuZGxlKCk7
Ci0gICAgQVNTRVJUKG1hcCk7Ci0gICAgQVNTRVJUKG1hcCAhPSBNQVBfRkFJTEVEKTsKKyAgICBh
dXRvIG1hcCA9IG1hcHBlZEZpbGUubGVha0hhbmRsZSgpOworICAgIEFTU0VSVChtYXAuZGF0YSgp
KTsKKyAgICBBU1NFUlQobWFwLmRhdGEoKSAhPSBNQVBfRkFJTEVEKTsKICAgICBGaWxlU3lzdGVt
OjpjbG9zZUZpbGUoZmQpOwotICAgIGF1dG8gYm9keU1hcCA9IGFkb3B0T1NPYmplY3QoZGlzcGF0
Y2hfZGF0YV9jcmVhdGUobWFwLCBzaXplLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BB
VENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCBbbWFwLCBzaXplXSB7Ci0gICAgICAgIG11
bm1hcChtYXAsIHNpemUpOwotICAgIH0pKTsKKyAgICBhdXRvIGJvZHlNYXAgPSBhZG9wdE9TT2Jq
ZWN0KGRpc3BhdGNoX2RhdGFfY3JlYXRlKG1hcC5kYXRhKCksIG1hcC5zaXplKCksIGRpc3BhdGNo
X2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIERJ
U1BBVENIX0RBVEFfREVTVFJVQ1RPUl9NVU5NQVApKTsKICAgICByZXR1cm4geyBXVEZNb3ZlKGJv
ZHlNYXApLCBEYXRhOjpCYWNraW5nOjpNYXAgfTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAJ
KHJldmlzaW9uIDI3ODc2MykKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSwxMCArOTksMTAgQEAg
U3RvcmFnZTo6UmVjb3JkIEVudHJ5OjplbmNvZGVBc1N0b3JhZ2VSZQogICAgIAogICAgIGVuY29k
ZXIuZW5jb2RlQ2hlY2tzdW0oKTsKIAotICAgIERhdGEgaGVhZGVyKGVuY29kZXIuYnVmZmVyKCks
IGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICBEYXRhIGhlYWRlciB7IGVuY29kZXIuYnVmZmVy
KCkgfTsKICAgICBEYXRhIGJvZHk7CiAgICAgaWYgKG1fYnVmZmVyKQotICAgICAgICBib2R5ID0g
eyBtX2J1ZmZlci0+ZGF0YSgpLCBtX2J1ZmZlci0+c2l6ZSgpIH07CisgICAgICAgIGJvZHkgPSB7
IG1fYnVmZmVyLT5ieXRlcygpIH07CiAKICAgICByZXR1cm4geyBtX2tleSwgbV90aW1lU3RhbXAs
IGhlYWRlciwgYm9keSwgeyB9IH07CiB9CkBAIC0xMTEsNyArMTExLDcgQEAgc3RkOjp1bmlxdWVf
cHRyPEVudHJ5PiBFbnRyeTo6ZGVjb2RlU3RvcgogewogICAgIGF1dG8gZW50cnkgPSBtYWtlVW5p
cXVlPEVudHJ5PihzdG9yYWdlRW50cnkpOwogCi0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2Rl
ciBkZWNvZGVyKHN0b3JhZ2VFbnRyeS5oZWFkZXIuZGF0YSgpLCBzdG9yYWdlRW50cnkuaGVhZGVy
LnNpemUoKSk7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyIHsgc3RvcmFn
ZUVudHJ5LmhlYWRlciB9OwogICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7
CiAgICAgaWYgKCFXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlOjpkZWNvZGUoZGVjb2RlciwgcmVz
cG9uc2UpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5jcHAJKHJldmlz
aW9uIDI3ODc2MykKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlS2V5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTMgKzg4LDEzIEBAIHN0YXRpYyB2
b2lkIGhhc2hTdHJpbmcoU0hBMSYgc2hhMSwgY29uc3QKIAogICAgIGlmIChzdHJpbmcuaXM4Qml0
KCkgJiYgc3RyaW5nLmlzQWxsQVNDSUkoKSkgewogICAgICAgICBjb25zdCB1aW50OF90IG51bGxC
eXRlID0gMDsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3Ry
aW5nLmxlbmd0aCgpKTsKLSAgICAgICAgc2hhMS5hZGRCeXRlcygmbnVsbEJ5dGUsIDEpOworICAg
ICAgICBzaGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7IHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBz
dHJpbmcubGVuZ3RoKCkgfSkpOworICAgICAgICBzaGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7
ICZudWxsQnl0ZSwgMSB9KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byBjU3Ry
aW5nID0gc3RyaW5nLnV0ZjgoKTsKICAgICAvLyBJbmNsdWRlIHRlcm1pbmF0aW5nIG51bGwgYnl0
ZS4KLSAgICBzaGExLmFkZEJ5dGVzKGNTdHJpbmcuZGF0YUFzVUludDhQdHIoKSwgY1N0cmluZy5s
ZW5ndGgoKSArIDEpOworICAgIHNoYTEuYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgY1N0cmluZy5k
YXRhQXNVSW50OFB0cigpLCBjU3RyaW5nLmxlbmd0aCgpICsgMSB9KSk7CiB9CiAKIEtleTo6SGFz
aFR5cGUgS2V5Ojpjb21wdXRlSGFzaChjb25zdCBTYWx0JiBzYWx0KSBjb25zdApAQCAtMTAyLDcg
KzEwMiw3IEBAIEtleTo6SGFzaFR5cGUgS2V5Ojpjb21wdXRlSGFzaChjb25zdCBTYWwKICAgICAv
LyBXZSBkb24ndCByZWFsbHkgbmVlZCBhIGNyeXB0b2dyYXBoaWMgaGFzaC4gVGhlIGtleSBpcyBh
bHdheXMgdmVyaWZpZWQgYWdhaW5zdCB0aGUgZW50cnkgaGVhZGVyLgogICAgIC8vIFNIQTEganVz
dCBoYXBwZW5zIHRvIGJlIHN1aXRhYmx5IHNpemVkLCBmYXN0IGFuZCBhdmFpbGFibGUuCiAgICAg
U0hBMSBzaGExOwotICAgIHNoYTEuYWRkQnl0ZXMoc2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKTsK
KyAgICBzaGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7IHNhbHQgfSkpOwogCiAgICAgaGFzaFN0
cmluZyhzaGExLCBtX3BhcnRpdGlvbik7CiAgICAgaGFzaFN0cmluZyhzaGExLCBtX3R5cGUpOwpA
QCAtMTE3LDcgKzExNyw3IEBAIEtleTo6SGFzaFR5cGUgS2V5Ojpjb21wdXRlSGFzaChjb25zdCBT
YWwKIEtleTo6SGFzaFR5cGUgS2V5Ojpjb21wdXRlUGFydGl0aW9uSGFzaChjb25zdCBTYWx0JiBz
YWx0KSBjb25zdAogewogICAgIFNIQTEgc2hhMTsKLSAgICBzaGExLmFkZEJ5dGVzKHNhbHQuZGF0
YSgpLCBzYWx0LnNpemUoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhhc0J5dGVzKFNwYW4geyBzYWx0
IH0pKTsKIAogICAgIGhhc2hTdHJpbmcoc2hhMSwgbV9wYXJ0aXRpb24pOwogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlU3RvcmFnZS5jcHAJKHJldmlzaW9uIDI3ODc2MykKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ1NCw4ICs0NTQsOCBAQCBzdHJ1Y3QgUmVjb3JkTWV0YURhdGEgewogc3RhdGljIFdBUk5fVU5V
U0VEX1JFVFVSTiBib29sIGRlY29kZVJlY29yZE1ldGFEYXRhKFJlY29yZE1ldGFEYXRhJiBtZXRh
RGF0YSwgY29uc3QgRGF0YSYgZmlsZURhdGEpCiB7CiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7
Ci0gICAgZmlsZURhdGEuYXBwbHkoWyZtZXRhRGF0YSwgJnN1Y2Nlc3NdKGNvbnN0IHVpbnQ4X3Qq
IGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIg
ZGVjb2RlcihkYXRhLCBzaXplKTsKKyAgICBmaWxlRGF0YS5hcHBseShbJm1ldGFEYXRhLCAmc3Vj
Y2Vzc10oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpIHsKKyAgICAgICAgV1RGOjpQZXJzaXN0
ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEpOwogICAgICAgICAKICAgICAgICAgc3RkOjpvcHRp
b25hbDx1bnNpZ25lZD4gY2FjaGVTdG9yYWdlVmVyc2lvbjsKICAgICAgICAgZGVjb2RlciA+PiBj
YWNoZVN0b3JhZ2VWZXJzaW9uOwpAQCAtNTg2LDcgKzU4Niw3IEBAIHN0YXRpYyBEYXRhIGVuY29k
ZVJlY29yZE1ldGFEYXRhKGNvbnN0IFIKIAogICAgIGVuY29kZXIuZW5jb2RlQ2hlY2tzdW0oKTsK
IAotICAgIHJldHVybiBEYXRhKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgp
KTsKKyAgICByZXR1cm4geyBlbmNvZGVyLmJ1ZmZlcigpIH07CiB9CiAKIHN0ZDo6b3B0aW9uYWw8
QmxvYlN0b3JhZ2U6OkJsb2I+IFN0b3JhZ2U6OnN0b3JlQm9keUFzQmxvYihXcml0ZU9wZXJhdGlv
biYgd3JpdGVPcGVyYXRpb24pCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0Vu
dHJ5LmNwcAkocmV2aXNpb24gMjc4NzYzKQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyMywxNCArMTIzLDE0IEBAIFN0b3JhZ2U6OlJlY29yZCBTdWJyZXNvdXJjZXNFbnRyeTo6
ZW5jb2QKIAogICAgIGVuY29kZXIuZW5jb2RlQ2hlY2tzdW0oKTsKIAotICAgIHJldHVybiB7IG1f
a2V5LCBtX3RpbWVTdGFtcCwgeyBlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUo
KSB9LCB7IH0sIHsgfX07CisgICAgcmV0dXJuIHsgbV9rZXksIG1fdGltZVN0YW1wLCB7IGVuY29k
ZXIuYnVmZmVyKCkgfSwgeyB9LCB7IH19OwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8U3VicmVzb3Vy
Y2VzRW50cnk+IFN1YnJlc291cmNlc0VudHJ5OjpkZWNvZGVTdG9yYWdlUmVjb3JkKGNvbnN0IFN0
b3JhZ2U6OlJlY29yZCYgc3RvcmFnZUVudHJ5KQogewogICAgIGF1dG8gZW50cnkgPSBtYWtlVW5p
cXVlPFN1YnJlc291cmNlc0VudHJ5PihzdG9yYWdlRW50cnkpOwogCi0gICAgV1RGOjpQZXJzaXN0
ZW5jZTo6RGVjb2RlciBkZWNvZGVyKHN0b3JhZ2VFbnRyeS5oZWFkZXIuZGF0YSgpLCBzdG9yYWdl
RW50cnkuaGVhZGVyLnNpemUoKSk7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNv
ZGVyIHsgc3RvcmFnZUVudHJ5LmhlYWRlciB9OwogICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFN1
YnJlc291cmNlSW5mbz4+IHN1YnJlc291cmNlczsKICAgICBkZWNvZGVyID4+IHN1YnJlc291cmNl
czsKICAgICBpZiAoIXN1YnJlc291cmNlcykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0v
SVBDL0FyZ3VtZW50Q29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0lQQy9Bcmd1bWVudENvZGVyLmgJKHJldmlzaW9uIDI3ODc2MykKKysrIFNvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzksMTMgKzc5
LDEzIEBAIHN0cnVjdCBBcmd1bWVudENvZGVyPFQsIHR5cGVuYW1lIHN0ZDo6ZW4KICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBUIHZhbHVlKQogICAgIHsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oJnZhbHVlKSwgc2l6ZW9mKFQp
LCBhbGlnbm9mKFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYXNC
eXRlcyhTcGFuIHsgJnZhbHVlLCAxIH0pLCBhbGlnbm9mKFQpKTsKICAgICB9CiAKICAgICBzdGF0
aWMgc3RkOjpvcHRpb25hbDxUPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7CiAgICAg
ICAgIFQgcmVzdWx0OwotICAgICAgICBpZiAoZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEo
cmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnJlc3VsdCksIHNpemVvZihUKSwgYWxpZ25vZihU
KSkpCisgICAgICAgIGlmIChkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJnJl
c3VsdCwgMSB9KSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CiAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJn
dW1lbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L0FyZ3VtZW50Q29kZXJzLmNwcAkocmV2aXNpb24gMjc4NzYzKQorKysgU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4
Miw3IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxDU3RyaW5nPjo6ZW5jb2RlKEVuY28KIAogICAgIHVp
bnQzMl90IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKICAgICBlbmNvZGVyIDw8IGxlbmd0aDsK
LSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShzdHJpbmcuZGF0YUFzVUludDhQdHIo
KSwgbGVuZ3RoLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShzdHJpbmcu
Ynl0ZXMoKSwgMSk7CiB9CiAKIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIEFyZ3VtZW50Q29kZXI8
Q1N0cmluZz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBDU3RyaW5nJiByZXN1bHQpCkBAIC0x
MDMsNyArMTAzLDcgQEAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgQXJndW1lbnRDb2RlcjxDUwog
CiAgICAgY2hhciogYnVmZmVyOwogICAgIENTdHJpbmcgc3RyaW5nID0gQ1N0cmluZzo6bmV3VW5p
bml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVk
TGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIpLCBsZW5ndGgsIDEp
KQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoYXNXcml0YWJsZUJ5dGVz
KFNwYW4geyBidWZmZXIsIGxlbmd0aCB9KSwgMSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIHJlc3VsdCA9IHN0cmluZzsKQEAgLTEyNSw5ICsxMjUsOSBAQCB2b2lkIEFyZ3VtZW50Q29k
ZXI8U3RyaW5nPjo6ZW5jb2RlKEVuY29kCiAgICAgZW5jb2RlciA8PCBsZW5ndGggPDwgaXM4Qml0
OwogCiAgICAgaWYgKGlzOEJpdCkKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERh
dGEoc3RyaW5nLmNoYXJhY3RlcnM4KCksIGxlbmd0aCAqIHNpemVvZihMQ2hhciksIGFsaWdub2Yo
TENoYXIpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYXNCeXRlcyhT
cGFuIHsgc3RyaW5nLmNoYXJhY3RlcnM4KCksIGxlbmd0aCB9KSwgYWxpZ25vZihMQ2hhcikpOwog
ICAgIGVsc2UKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnMxNigpKSwgbGVuZ3RoICog
c2l6ZW9mKFVDaGFyKSwgYWxpZ25vZihVQ2hhcikpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZp
eGVkTGVuZ3RoRGF0YShhc0J5dGVzKFNwYW4geyBzdHJpbmcuY2hhcmFjdGVyczE2KCksIGxlbmd0
aCB9KSwgYWxpZ25vZihVQ2hhcikpOwogfQogdGVtcGxhdGUKIHZvaWQgQXJndW1lbnRDb2RlcjxT
dHJpbmc+OjplbmNvZGU8RW5jb2Rlcj4oRW5jb2RlciYsIGNvbnN0IFN0cmluZyYpOwpAQCAtMTQz
LDcgKzE0Myw3IEBAIHN0YXRpYyBpbmxpbmUgc3RkOjpvcHRpb25hbDxTdHJpbmc+IGRlY28KICAg
ICAKICAgICBDaGFyYWN0ZXJUeXBlKiBidWZmZXI7CiAgICAgU3RyaW5nIHN0cmluZyA9IFN0cmlu
Zzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIp
LCBsZW5ndGggKiBzaXplb2YoQ2hhcmFjdGVyVHlwZSksIGFsaWdub2YoQ2hhcmFjdGVyVHlwZSkp
KQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IGJ1ZmZlciwg
bGVuZ3RoIH0pKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIAogICAgIHJldHVy
biBzdHJpbmc7CkBAIC0xODEsMTIgKzE4MSwxMiBAQCBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBB
cmd1bWVudENvZGVyPFN0CiAKIHZvaWQgQXJndW1lbnRDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU0hBMTo6RGlnZXN0JiBkaWdlc3QpCiB7Ci0gICAg
ZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0LmRhdGEoKSwgc2l6ZW9mKGRpZ2Vz
dCksIDEpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBkaWdlc3Qg
fSwgMSk7CiB9CiAKIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIEFyZ3VtZW50Q29kZXI8U0hBMTo6
RGlnZXN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQog
ewotICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3QuZGF0YSgp
LCBzaXplb2YoZGlnZXN0KSwgMSk7CisgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5n
dGhEYXRhKFNwYW4geyBkaWdlc3QgfSwgMSk7CiB9CiAKICNpZiBIQVZFKEFVRElUX1RPS0VOKQpJ
bmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oCShyZXZp
c2lvbiAyNzg3NjMpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVy
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMiArNDUsMTIgQEAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IFNpbXBsZUFyZ3VtZQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+CiAg
ICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFQmIHQpCiAgICAg
ewotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQ4X3QqPigmdCksIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAgIGVu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmdCwgMSB9KTsKICAgICB9CiAKICAg
ICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IFQmIHQpCiAgICAgewotICAgICAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERh
dGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnQpLCBzaXplb2YoVCksIGFsaWdub2YoVCkp
OworICAgICAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZ0
LCAxIH0pOwogICAgIH0KIH07CiAKQEAgLTYxLDEzICs2MSwxNCBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgRXh0ZW50PiBzdHJ1CiAgICAgewogICAgICAgICBpZiAoIUV4dGVudCkKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYXJyYXlSZWZlcmVuY2UuZGF0YSgpKSwg
YXJyYXlSZWZlcmVuY2Uuc2l6ZSgpICogc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKKyAgICAgICAg
ZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IGFycmF5UmVmZXJlbmNlLmRhdGEo
KSwgYXJyYXlSZWZlcmVuY2Uuc2l6ZSgpIH0pOwogICAgIH0KICAgICBzdGF0aWMgc3RkOjpvcHRp
b25hbDxBcnJheVJlZmVyZW5jZVR5cGU+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsK
ICAgICAgICAgaWYgKCFFeHRlbnQpCiAgICAgICAgICAgICByZXR1cm4gQXJyYXlSZWZlcmVuY2VU
eXBlKCk7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEgPSBkZWNvZGVyLmRlY29kZUZpeGVk
TGVuZ3RoUmVmZXJlbmNlKEV4dGVudCAqIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CisKKyAgICAg
ICAgY29uc3QgYXV0byogZGF0YSA9IGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhSZWZlcmVuY2Uo
RXh0ZW50ICogc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKICAgICAgICAgaWYgKCFkYXRhKQogICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAgICAgcmV0dXJuIEFycmF5UmVmZXJl
bmNlVHlwZShyZWludGVycHJldF9jYXN0PGNvbnN0IFQqPihkYXRhKSwgRXh0ZW50KTsKQEAgLTgy
LDcgKzgzLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEFyZ3VtZW50Q29kZQogICAg
ICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihhcnJheVJlZmVyZW5jZS5zaXpl
KCkpOwogICAgICAgICBpZiAoIWFycmF5UmVmZXJlbmNlLnNpemUoKSkKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50OF90Kj4oYXJyYXlSZWZlcmVuY2UuZGF0YSgpKSwgYXJyYXlSZWZlcmVu
Y2Uuc2l6ZSgpICogc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNv
ZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IGFycmF5UmVmZXJlbmNlLmRhdGEoKSwgYXJyYXlSZWZl
cmVuY2Uuc2l6ZSgpIH0pOwogICAgIH0KICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxBcnJheVJl
ZmVyZW5jZVR5cGU+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKQEAgLTk2LDcgKzk3
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEFyZ3VtZW50Q29kZQogICAgICAgICBp
ZiAoVU5MSUtFTFkoZGF0YVNpemUuaGFzT3ZlcmZsb3dlZCgpKSkKICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CiAKLSAgICAgICAgY29uc3QgdWludDhfdCogZGF0YSA9IGRlY29kZXIu
ZGVjb2RlRml4ZWRMZW5ndGhSZWZlcmVuY2UoZGF0YVNpemUsIGFsaWdub2YoVCkpOworICAgICAg
ICBjb25zdCBhdXRvKiBkYXRhID0gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aFJlZmVyZW5jZShk
YXRhU2l6ZSwgYWxpZ25vZihUKSk7CiAgICAgICAgIGlmICghZGF0YSkKICAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIHJldHVybiBBcnJheVJlZmVyZW5jZVR5cGUocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBUKj4oZGF0YSksIHN0YXRpY19jYXN0PHNpemVfdD4oc2l6ZSkp
OwpAQCAtNDIzLDcgKzQyNCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2kKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiYgdmVj
dG9yKQogICAgIHsKICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odmVj
dG9yLnNpemUoKSk7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6ZSgp
ICogc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoYXNCeXRlcyhTcGFuIHsgdmVjdG9yIH0pLCBhbGlnbm9mKFQpKTsKICAgICB9CiAg
ICAgCiAgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyLCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2Fw
YWNpdHk+JiB2ZWN0b3IpCkBAIC00NDYsNyArNDQ3LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IGlubGluZUNhcGFjaQogICAgICAgICBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92
ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+IHRlbXA7CiAgICAgICAgIHRlbXAuZ3JvdyhzaXpl
KTsKIAotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KHRlbXAuZGF0YSgpKSwgc2l6ZSAqIHNpemVvZihUKSwgYWxpZ25v
ZihUKSkpCisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7
IHRlbXAgfSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgdmVjdG9yLnN3
YXAodGVtcCk7CkBAIC00NzMsNyArNDc0LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaQogICAgICAgICBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93
SGFuZGxlciwgbWluQ2FwYWNpdHk+IHZlY3RvcjsKICAgICAgICAgdmVjdG9yLmdyb3coc2l6ZSk7
CiAKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPih2ZWN0b3IuZGF0YSgpKSwgc2l6ZSAqIHNpemVvZihUKSwgYWxpZ25v
ZihUKSkpCisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7
IHZlY3RvciB9KSkKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKICAgICAgICAg
cmV0dXJuIHZlY3RvcjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FycmF5UmVm
ZXJlbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJyYXlS
ZWZlcmVuY2UuaAkocmV2aXNpb24gMjc4NzYzKQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9J
UEMvQXJyYXlSZWZlcmVuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOCBAQAogCiBu
YW1lc3BhY2UgSVBDIHsKIAorLy8gRklYTUU6IFJlcGxhY2Ugd2l0aCA8d3RmL1NwYW4uaD4KKwog
aW5saW5lIGNvbnN0ZXhwciBzaXplX3QgYXJyYXlSZWZlcmVuY2VEeW5hbWljRXh0ZW50ID0gc3Rk
OjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQs
IHNpemVfdCBFeHRlbnQgPSBhcnJheVJlZmVyZW5jZUR5bmFtaWNFeHRlbnQ+CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmNwcAkocmV2aXNpb24gMjc4NzYzKQorKysgU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIw
NiwxMyArMjA2LDEzIEBAIGJvb2wgRGVjb2Rlcjo6YnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGEK
ICAgICByZXR1cm4gYWxpZ25lZEJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4ocm91bmRVcFRv
QWxpZ25tZW50KG1fYnVmZmVyUG9zLCBhbGlnbm1lbnQpLCBtX2J1ZmZlciwgbV9idWZmZXJFbmQs
IHNpemUpOwogfQogCi1ib29sIERlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSh1aW50OF90
KiBkYXRhLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVudCkKK2Jvb2wgRGVjb2Rlcjo6ZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48c3RkOjpieXRlPiBkYXRhLCBzaXplX3QgYWxpZ25tZW50
KQogewotICAgIGlmICghYWxpZ25CdWZmZXJQb3NpdGlvbihhbGlnbm1lbnQsIHNpemUpKQorICAg
IGlmICghYWxpZ25CdWZmZXJQb3NpdGlvbihhbGlnbm1lbnQsIGRhdGEuc2l6ZSgpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbWVtY3B5KGRhdGEsIG1fYnVmZmVyUG9zLCBzaXplKTsK
LSAgICBtX2J1ZmZlclBvcyArPSBzaXplOworICAgIG1lbWNweShkYXRhLmRhdGEoKSwgbV9idWZm
ZXJQb3MsIGRhdGEuc2l6ZSgpKTsKKyAgICBtX2J1ZmZlclBvcyArPSBkYXRhLnNpemUoKTsKIAog
ICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVj
b2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIu
aAkocmV2aXNpb24gMjc4NzYzKQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSwxMyBAQCBwdWJsaWM6CiAgICAgV0FSTl9V
TlVTRURfUkVUVVJOIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyUG9zICE9
IG51bGxwdHI7IH0KICAgICB2b2lkIG1hcmtJbnZhbGlkKCkgeyBtX2J1ZmZlclBvcyA9IG51bGxw
dHI7IH0KIAotICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZUZpeGVkTGVuZ3RoRGF0
YSh1aW50OF90KiBkYXRhLCBzaXplX3QsIHNpemVfdCBhbGlnbm1lbnQpOworICAgIFdBUk5fVU5V
U0VEX1JFVFVSTiBib29sIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPHN0ZDo6Ynl0ZT4sIHNp
emVfdCBhbGlnbm1lbnQpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IE4+Cisg
ICAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48VCwg
Tj4gZGF0YSwgc2l6ZV90IGFsaWdubWVudCA9IGFsaWdub2YoVCkpCisgICAgeworICAgICAgICBy
ZXR1cm4gZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGFzV3JpdGFibGVCeXRlcyhkYXRhKSwgYWxpZ25t
ZW50KTsKKyAgICB9CiAKICAgICAvLyBUaGUgZGF0YSBpbiB0aGUgcmV0dXJuZWQgcG9pbnRlciBo
ZXJlIHdpbGwgb25seSBiZSB2YWxpZCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBEZWNvZGVyIG9i
amVjdC4KICAgICAvLyBSZXR1cm5zIG51bGxwdHIgb24gZmFpbHVyZS4KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL0VuY29kZXIuY3BwCShyZXZpc2lvbiAyNzg3NjMpCisrKyBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDEy
ICsyMDIsMTIgQEAgdWludDhfdCogRW5jb2Rlcjo6Z3JvdyhzaXplX3QgYWxpZ25tZW50LAogICAg
IHJldHVybiBtX2J1ZmZlciArIGFsaWduZWRTaXplOwogfQogCi12b2lkIEVuY29kZXI6OmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwgc2l6ZV90
IGFsaWdubWVudCkKK3ZvaWQgRW5jb2Rlcjo6ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48Y29u
c3Qgc3RkOjpieXRlPiBkYXRhLCBzaXplX3QgYWxpZ25tZW50KQogewotICAgIEFTU0VSVCghKHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihkYXRhKSAlIGFsaWdubWVudCkpOworICAgIEFTU0VS
VCghKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihkYXRhLmRhdGEoKSkgJSBhbGlnbm1lbnQp
KTsKIAotICAgIHVpbnQ4X3QqIGJ1ZmZlciA9IGdyb3coYWxpZ25tZW50LCBzaXplKTsKLSAgICBt
ZW1jcHkoYnVmZmVyLCBkYXRhLCBzaXplKTsKKyAgICBhdXRvKiBidWZmZXIgPSBncm93KGFsaWdu
bWVudCwgZGF0YS5zaXplKCkpOworICAgIG1lbWNweShidWZmZXIsIGRhdGEuZGF0YSgpLCBkYXRh
LnNpemUoKSk7CiB9CiAKIHZvaWQgRW5jb2Rlcjo6YWRkQXR0YWNobWVudChBdHRhY2htZW50JiYg
YXR0YWNobWVudCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29kZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgJKHJldmlz
aW9uIDI3ODc2MykKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29kZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVm
ZmVyLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0
Lmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5h
bWVzcGFjZSBJUEMgewpAQCAtNjAsNyArNjEsMTMgQEAgcHVibGljOgogCiAgICAgdm9pZCB3cmFw
Rm9yVGVzdGluZyhVbmlxdWVSZWY8RW5jb2Rlcj4mJik7CiAKLSAgICB2b2lkIGVuY29kZUZpeGVk
TGVuZ3RoRGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QsIHNpemVfdCBhbGlnbm1lbnQp
OworICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBk
YXRhLCBzaXplX3QgYWxpZ25tZW50KTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVf
dCBOPgorICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48VCwgTj4gZGF0YSwgc2l6
ZV90IGFsaWdubWVudCA9IGFsaWdub2YoVCkpCisgICAgeworICAgICAgICBlbmNvZGVGaXhlZExl
bmd0aERhdGEoYXNCeXRlcyhkYXRhKSwgYWxpZ25tZW50KTsKKyAgICB9CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgogICAgIEVuY29kZXImIG9wZXJhdG9yPDwoVCYmIHQpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TaGFyZWRCdWZmZXJDb3B5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TaGFyZWRCdWZmZXJDb3B5LmNwcAkocmV2aXNp
b24gMjc4NzYzKQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU2hhcmVkQnVmZmVyQ29w
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgdm9pZCBTaGFyZWRCdWZmZXJD
b3B5OjplbmNvZGUoRW5jb2RlciYgZQogICAgIGlmICghYnVmZmVyU2l6ZSkKICAgICAgICAgcmV0
dXJuOwogICAgIGZvciAoYXV0byYgc2VnbWVudCA6ICptX2J1ZmZlcikKLSAgICAgICAgZW5jb2Rl
ci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc2VnbWVudC5zZWdtZW50LT5kYXRhKCksIHNlZ21lbnQu
c2VnbWVudC0+c2l6ZSgpLCAxKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERh
dGEoc2VnbWVudC5zZWdtZW50LT5ieXRlcygpLCAxKTsKIH0KIAogc3RkOjpvcHRpb25hbDxTaGFy
ZWRCdWZmZXJDb3B5PiBTaGFyZWRCdWZmZXJDb3B5OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25FbmNvZGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVj
dGlvbkVuY29kZXIuaAkocmV2aXNpb24gMjc4NzYzKQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvU3RyZWFtQ29ubmVjdGlvbkVuY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiAr
MjcsNyBAQAogCiAjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJNZXNzYWdl
TmFtZXMuaCIKKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KIAogbmFtZXNwYWNlIElQQyB7CkBAIC01MywyMSArNTQsMjcgQEAgcHVibGljOgogCiAg
ICAgflN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyKCkgPSBkZWZhdWx0OwogCi0gICAgYm9vbCBlbmNv
ZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIHNpemVf
dCBhbGlnbm1lbnQpCisgICAgYm9vbCBlbmNvZGVGaXhlZExlbmd0aERhdGEoU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+IGRhdGEsIHNpemVfdCBhbGlnbm1lbnQpCiAgICAgewogICAgICAgICBzaXplX3Qg
YnVmZmVyUG9pbnRlciA9IHN0YXRpY19jYXN0PHNpemVfdD4ocmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4obV9idWZmZXIgKyBtX2VuY29kZWRTaXplKSk7CiAgICAgICAgIHNpemVfdCBuZXdCdWZm
ZXJQb2ludGVyID0gcm91bmRVcFRvTXVsdGlwbGVPZihhbGlnbm1lbnQsIGJ1ZmZlclBvaW50ZXIp
OwogICAgICAgICBpZiAobmV3QnVmZmVyUG9pbnRlciA8IGJ1ZmZlclBvaW50ZXIpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGludHB0cl90IGFsaWduZWRTaXplID0gbV9lbmNv
ZGVkU2l6ZSArIChuZXdCdWZmZXJQb2ludGVyIC0gYnVmZmVyUG9pbnRlcik7Ci0gICAgICAgIGlm
ICghcmVzZXJ2ZShhbGlnbmVkU2l6ZSwgc2l6ZSkpCisgICAgICAgIGlmICghcmVzZXJ2ZShhbGln
bmVkU2l6ZSwgZGF0YS5zaXplKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB1aW50OF90KiBidWZmZXIgPSBtX2J1ZmZlciArIGFsaWduZWRTaXplOwotICAgICAgICBtZW1j
cHkoYnVmZmVyLCBkYXRhLCBzaXplKTsKLSAgICAgICAgbV9lbmNvZGVkU2l6ZSA9IGFsaWduZWRT
aXplICsgc2l6ZTsKKyAgICAgICAgYXV0byogYnVmZmVyID0gbV9idWZmZXIgKyBhbGlnbmVkU2l6
ZTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAg
ICAgICAgbV9lbmNvZGVkU2l6ZSA9IGFsaWduZWRTaXplICsgZGF0YS5zaXplKCk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBO
PgorICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48VCwgTj4gZGF0YSwgc2l6ZV90
IGFsaWdubWVudCA9IGFsaWdub2YoVCkpCisgICAgeworICAgICAgICBlbmNvZGVGaXhlZExlbmd0
aERhdGEoYXNCeXRlcyhkYXRhKSwgYWxpZ25tZW50KTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgogICAgIFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyJiBvcGVyYXRvcjw8KFQmJiB0
KQogICAgIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVy
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmNwcAkocmV2aXNpb24gMjc4NzYzKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDcgKzE0NCw3IEBA
IHN0YXRpYyB2b2lkIGVuY29kZVNoYXJlZEJ1ZmZlcihFbmNvZGVyJiAKICAgICAvLyBvdmVyIHRo
ZSBJUEMuIENvbm5lY3Rpb25Vbml4LmNwcCBhbHJlYWR5IHVzZXMgc2hhcmVkIG1lbW9yeSB0byBz
ZW5kIGFueSBJUEMgbWVzc2FnZSB0aGF0IGlzCiAgICAgLy8gdG9vIGxhcmdlLiBTZWUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODU3MS4KICAgICBmb3IgKGNvbnN0
IGF1dG8mIGVsZW1lbnQgOiAqYnVmZmVyKQotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShlbGVtZW50LnNlZ21lbnQtPmRhdGEoKSwgZWxlbWVudC5zZWdtZW50LT5zaXplKCks
IDEpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShlbGVtZW50LnNlZ21l
bnQtPmJ5dGVzKCksIDEpOwogI2Vsc2UKICAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7
CiAgICAgYXV0byBzaGFyZWRNZW1vcnlCdWZmZXIgPSBTaGFyZWRNZW1vcnk6OmNvcHlCdWZmZXIo
KmJ1ZmZlcik7CkBAIC0xODAsNyArMTgwLDcgQEAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBi
b29sIGRlY29kZVNoYQogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CiAgICAgZGF0YS5ncm93
KGJ1ZmZlclNpemUpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoZGF0
YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAxKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKFNwYW4geyBkYXRhIH0sIDEpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBidWZmZXIgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGRhdGEpKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlz
dFN0b3JlLmNwcAkocmV2aXNpb24gMjc4NzYzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDE4
ICsxMzEsMjAgQEAgc3RhdGljIFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhIGVuY29kZQogICAg
IGVuY29kZXIgPDwgbWV0YURhdGEuY29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNvZGVTaXplOwogICAg
IGVuY29kZXIgPDwgbWV0YURhdGEuY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluOwogCi0gICAg
QVNTRVJUKGVuY29kZXIuYnVmZmVyU2l6ZSgpID09IENvbnRlbnRSdWxlTGlzdEZpbGVIZWFkZXJT
aXplKTsKLSAgICByZXR1cm4gV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGEoZW5jb2Rlci5idWZm
ZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOworICAgIEFTU0VSVChlbmNvZGVyLmJ1ZmZlcigp
LnNpemUoKSA9PSBDb250ZW50UnVsZUxpc3RGaWxlSGVhZGVyU2l6ZSk7CisgICAgcmV0dXJuIFdl
YktpdDo6TmV0d29ya0NhY2hlOjpEYXRhIHsgZW5jb2Rlci5idWZmZXIoKSB9OwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGdldERhdGEoY29uc3QgVCYsIGNvbnN0IEZ1bmN0aW9uPGJv
b2woY29uc3QgdWludDhfdCosIHNpemVfdCk+Jik7Ci10ZW1wbGF0ZTw+IHZvaWQgZ2V0RGF0YShj
b25zdCBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YSYgZGF0YSwgY29uc3QgRnVuY3Rpb248Ym9v
bChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIGZ1bmN0aW9uKQordGVtcGxhdGU8dHlwZW5hbWUg
VD4gdm9pZCBnZXREYXRhKGNvbnN0IFQmLCBjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qg
c3RkOjpieXRlPik+Jik7CisKK3RlbXBsYXRlPD4gdm9pZCBnZXREYXRhKGNvbnN0IFdlYktpdDo6
TmV0d29ya0NhY2hlOjpEYXRhJiBkYXRhLCBjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qg
c3RkOjpieXRlPik+JiBmdW5jdGlvbikKIHsKICAgICBkYXRhLmFwcGx5KGZ1bmN0aW9uKTsKIH0K
LXRlbXBsYXRlPD4gdm9pZCBnZXREYXRhKGNvbnN0IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlciYgZGF0
YSwgY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIGZ1bmN0aW9u
KQorCit0ZW1wbGF0ZTw+IHZvaWQgZ2V0RGF0YShjb25zdCBXZWJDb3JlOjpTaGFyZWRCdWZmZXIm
IGRhdGEsIGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mIGZ1bmN0
aW9uKQogewotICAgIGZ1bmN0aW9uKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgZnVu
Y3Rpb24oZGF0YS5ieXRlcygpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTE1MCwx
MyArMTUyLDEzIEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPENvbnRlbnRSdWxlTGlzdE1ldGEKIHsK
ICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKICAgICBDb250ZW50UnVsZUxpc3RNZXRhRGF0YSBt
ZXRhRGF0YTsKLSAgICBnZXREYXRhKGZpbGVEYXRhLCBbJm1ldGFEYXRhLCAmc3VjY2VzcywgJmZp
bGVEYXRhXShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeworICAgIGdldERhdGEo
ZmlsZURhdGEsIFsmbWV0YURhdGEsICZzdWNjZXNzLCAmZmlsZURhdGFdKFNwYW48Y29uc3Qgc3Rk
OjpieXRlPiBkYXRhKSB7CiAgICAgICAgIC8vIFRoZSBmaWxlIGRhdGEgc2hvdWxkIGJlIG1hcHBl
ZCBpbnRvIG9uZSBjb250aW51b3VzIG1lbW9yeSBzZWdtZW50IHNvIHRoZSBzaXplCiAgICAgICAg
IC8vIHBhc3NlZCB0byB0aGUgYXBwbGllciBzaG91bGQgYWx3YXlzIGVxdWFsIHRoZSBkYXRhIHNp
emUuCi0gICAgICAgIGlmIChzaXplICE9IGZpbGVEYXRhLnNpemUoKSkKKyAgICAgICAgaWYgKGRh
dGEuc2l6ZSgpICE9IGZpbGVEYXRhLnNpemUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YSwgc2l6ZSk7
CisgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlciB7IGRhdGEgfTsKICAg
ICAgICAgCiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IHZlcnNpb247CiAgICAgICAg
IGRlY29kZXIgPj4gdmVyc2lvbjsKQEAgLTIyOCw4ICsyMzAsOCBAQCBzdGF0aWMgc3RkOjpvcHRp
b25hbDxNYXBwZWREYXRhPiBvcGVuQW5kCiBzdGF0aWMgYm9vbCB3cml0ZURhdGFUb0ZpbGUoY29u
c3QgV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGEmIGZpbGVEYXRhLCBQbGF0Zm9ybUZpbGVIYW5k
bGUgZmQpCiB7CiAgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKLSAgICBmaWxlRGF0YS5hcHBseShb
ZmQsICZzdWNjZXNzXShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgewotICAgICAg
ICBpZiAod3JpdGVUb0ZpbGUoZmQsIGRhdGEsIHNpemUpID09IC0xKSB7CisgICAgZmlsZURhdGEu
YXBwbHkoW2ZkLCAmc3VjY2Vzc10oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpIHsKKyAgICAg
ICAgaWYgKHdyaXRlVG9GaWxlKGZkLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpID09IC0xKSB7
CiAgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9MZWdhY3lTZXNz
aW9uU3RhdGVDb2RpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwCShyZXZpc2lvbiAyNzg3NjMpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTI5LDcgKzEyOSw3IEBAIHB1YmxpYzoKICAgICAgICAgKnRoaXMg
PDwgbGVuZ3RoOwogCiAgICAgICAgICp0aGlzIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihsZW5n
dGggKiBzaXplb2YoVUNoYXIpKTsKLSAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVk
Q2hhcmFjdGVycygpLmdldCgpKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSwgYWxpZ25vZihVQ2hh
cikpOworICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IFN0cmluZ1ZpZXcodmFs
dWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpLmdldCgpLCBsZW5ndGggfSk7CiAKICAgICAgICAg
cmV0dXJuICp0aGlzOwogICAgIH0KQEAgLTEzNyw3ICsxMzcsNyBAQCBwdWJsaWM6CiAgICAgSGlz
dG9yeUVudHJ5RGF0YUVuY29kZXImIG9wZXJhdG9yPDwoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2
YWx1ZSkKICAgICB7CiAgICAgICAgICp0aGlzIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1
ZS5zaXplKCkpOwotICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEodmFsdWUuZGF0YSgpLCB2
YWx1ZS5zaXplKCksIDEpOworICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IHZh
bHVlIH0sIDEpOwogCiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CkBAIC0xNDUsNyArMTQ1
LDcgQEAgcHVibGljOgogICAgIEhpc3RvcnlFbnRyeURhdGFFbmNvZGVyJiBvcGVyYXRvcjw8KGNv
bnN0IFZlY3RvcjxjaGFyPiYgdmFsdWUpCiAgICAgewogICAgICAgICAqdGhpcyA8PCBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4odmFsdWUuc2l6ZSgpKTsKLSAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZhbHVlLmRhdGEoKSksIHZhbHVl
LnNpemUoKSwgMSk7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgdmFsdWUg
fSwgMSk7CiAKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KQEAgLTIwNiwxNyArMjA2LDIz
IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYXJpdGht
ZXRpYzxUeXBlPjo6dmFsdWUsICIiKTsKIAotICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEo
cmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnZhbHVlKSwgc2l6ZW9mKHZhbHVlKSwgc2l6ZW9m
KHZhbHVlKSk7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShhc0J5dGVzKFNwYW4geyAm
dmFsdWUsIDEgfSksIHNpemVvZih2YWx1ZSkpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAg
fQogCi0gICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwg
c2l6ZV90IHNpemUsIHVuc2lnbmVkIGFsaWdubWVudCkKKyAgICB2b2lkIGVuY29kZUZpeGVkTGVu
Z3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSwgdW5zaWduZWQgYWxpZ25tZW50KQog
ICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGF0YSB8fCAhc2l6ZSk7Ci0gICAgICAgIEFT
U0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihkYXRhKSAlIGFsaWdubWVudCkpOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChkYXRhLmRhdGEoKSB8fCAhZGF0YS5zaXplKCkpOworICAg
ICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZGF0YS5kYXRhKCkpICUg
YWxpZ25tZW50KSk7CiAKLSAgICAgICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQs
IHNpemUpOwotICAgICAgICBtZW1jcHkoYnVmZmVyLCBkYXRhLCBzaXplKTsKKyAgICAgICAgYXV0
byogYnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQsIGRhdGEuc2l6ZSgpKTsKKyAgICAgICAgbWVtY3B5
KGJ1ZmZlciwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCBzaXplX3QgTj4KKyAgICB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShT
cGFuPFQsIE4+IGRhdGEsIHNpemVfdCBhbGlnbm1lbnQgPSBhbGlnbm9mKFQpKQorICAgIHsKKyAg
ICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGFzQnl0ZXMoZGF0YSksIGFsaWdubWVudCk7CiAg
ICAgfQogCiAgICAgdWludDhfdCogZ3Jvdyh1bnNpZ25lZCBhbGlnbm1lbnQsIHNpemVfdCBzaXpl
KQpAQCAtNjAxLDcgKzYwNyw3IEBAIHB1YmxpYzoKIAogICAgICAgICBVQ2hhciogYnVmZmVyOwog
ICAgICAgICBhdXRvIHN0cmluZyA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgs
IGJ1ZmZlcik7Ci0gICAgICAgIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0
PHVpbnQ4X3QqPihidWZmZXIpLCBsZW5ndGggKiBzaXplb2YoVUNoYXIpLCBhbGlnbm9mKFVDaGFy
KSk7CisgICAgICAgIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgYnVmZmVyLCBsZW5ndGgg
fSwgYWxpZ25vZihVQ2hhcikpOwogCiAgICAgICAgIHZhbHVlID0gc3RyaW5nOwogICAgICAgICBy
ZXR1cm4gKnRoaXM7CkBAIC03MzcsMTcgKzc0MywyMyBAQCBwcml2YXRlOgogICAgICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfYXJpdGhtZXRpYzxUeXBlPjo6dmFsdWUsICIiKTsKICAgICAgICAg
dmFsdWUgPSBUeXBlKCk7CiAKLSAgICAgICAgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KCZ2YWx1ZSksIHNpemVvZih2YWx1ZSksIHNpemVvZih2YWx1ZSkp
OworICAgICAgICBkZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZ2YWx1ZSwgMSB9LCBzaXpl
b2YodmFsdWUpKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAotICAgIHZvaWQgZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBh
bGlnbm1lbnQpCisgICAgdm9pZCBkZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbjxzdGQ6OmJ5dGU+
IGRhdGEsIHVuc2lnbmVkIGFsaWdubWVudCkKICAgICB7Ci0gICAgICAgIGlmICghYWxpZ25CdWZm
ZXJQb3NpdGlvbihhbGlnbm1lbnQsIHNpemUpKQorICAgICAgICBpZiAoIWFsaWduQnVmZmVyUG9z
aXRpb24oYWxpZ25tZW50LCBkYXRhLnNpemUoKSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgbWVtY3B5KGRhdGEsIG1fYnVmZmVyLCBzaXplKTsKLSAgICAgICAgbV9idWZmZXIgKz0g
c2l6ZTsKKyAgICAgICAgbWVtY3B5KGRhdGEuZGF0YSgpLCBtX2J1ZmZlciwgZGF0YS5zaXplKCkp
OworICAgICAgICBtX2J1ZmZlciArPSBkYXRhLnNpemUoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCBzaXplX3QgTj4KKyAgICB2b2lkIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShT
cGFuPFQsIE4+IGRhdGEsIHNpemVfdCBhbGlnbm1lbnQpCisgICAgeworICAgICAgICBkZWNvZGVG
aXhlZExlbmd0aERhdGEoYXNXcml0YWJsZUJ5dGVzKGRhdGEpLCBhbGlnbm1lbnQpOwogICAgIH0K
IAogICAgIGJvb2wgYWxpZ25CdWZmZXJQb3NpdGlvbih1bnNpZ25lZCBhbGlnbm1lbnQsIHNpemVf
dCBzaXplKQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGlu
Z0FQSS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
SVBDVGVzdGluZ0FQSS5jcHAJKHJldmlzaW9uIDI3ODc2MykKKysrIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTEs
NyArNjkxLDcgQEAgc3RhdGljIGJvb2wgZW5jb2RlVHlwZWRBcnJheShJUEM6OkVuY29kZQogICAg
IGlmICghZGF0YS5idWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGVuY29kZXIu
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRh
dGEuYnVmZmVyKSwgZGF0YS5sZW5ndGgsIDEpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKFNwYW4geyByZWludGVycHJldF9jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGRhdGEuYnVm
ZmVyKSwgZGF0YS5sZW5ndGggfSwgMSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvRW52aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvRW52aXJvbm1lbnQuY3BwCShyZXZpc2lvbiAyNzg3NjMpCisrKyBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0Vudmlyb25tZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTU2LDcgKzE1Niw3IEBAIGJvb2wgRW52aXJvbm1lbnQ6OmNvbXB1dGVJc0RlYnVnSGVhcEVuYWIK
ICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biB0cnVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCkluZGV4OiBUb29scy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzg4MDYpCisrKyBU
b29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNyBAQAorMjAyMS0wNi0x
MSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRvcHQgU3BhbiBp
biBtb3JlIHBsYWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgW1dJUF0KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2NhaXJvL1BpeGVsRHVtcFN1
cHBvcnRDYWlyby5jcHA6CisgICAgICAgIChjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JCaXRtYXBD
b250ZXh0KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jZy9QaXhlbER1bXBTdXBwb3J0Q0cu
Y3BwOgorICAgICAgICAoY29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQml0bWFwQ29udGV4dCk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQmxvb21GaWx0ZXIuY3BwOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6Z2VuZXJhdGVSYW5kb21EaWdlc3RzKToKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OlRFU1RfRik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1t
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Q29ubmVjdGlvbjo6d2ViU29ja2V0SGFuZHNoYWtl
KToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8u
Y3BwOgorICAgICAgICAoV1RSOjpjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JDYWlyb1N1cmZhY2Up
OgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvY2cvVGVzdEludm9jYXRpb25DRy5jcHA6Cisg
ICAgICAgIChXVFI6OmNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckNvbnRleHQpOgorCiAyMDIxLTA2
LTExICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAg
IFtXaW5dW0R1bXBSZW5kZXJUcmVlXSAtLW5vLXRpbWVvdXQgc3dpdGNoIGRvZXNuJ3Qgd29yawpJ
bmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2Fpcm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBw
b3J0Q2Fpcm8uY3BwCShyZXZpc2lvbiAyNzg3NjMpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9j
YWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3
NSw3IEBAIHZvaWQgY29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQml0bWFwQ29udGUKICAgICBTSEEx
IHNoYTE7CiAgICAgdW5zaWduZWQgY2hhciogYml0bWFwRGF0YSA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpKTsKICAgICBm
b3IgKHVuc2lnbmVkIHJvdyA9IDA7IHJvdyA8IHBpeGVsc0hpZ2g7IHJvdysrKSB7Ci0gICAgICAg
IHNoYTEuYWRkQnl0ZXMoYml0bWFwRGF0YSwgNCAqIHBpeGVsc1dpZGUpOworICAgICAgICBzaGEx
LmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7IGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlIH0pKTsK
ICAgICAgICAgYml0bWFwRGF0YSArPSBieXRlc1BlclJvdzsKICAgICB9CiAgICAgU0hBMTo6RGln
ZXN0IGhhc2g7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jZy9QaXhlbER1bXBTdXBwb3J0
Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1
cHBvcnRDRy5jcHAJKHJldmlzaW9uIDI3ODc2MykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nn
L1BpeGVsRHVtcFN1cHBvcnRDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDE0ICs4OCwxNCBA
QCB2b2lkIGNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckJpdG1hcENvbnRlCiAgICAgICAgICAgICB1
aW50MzJfdCBidWZmZXJbcGl4ZWxzV2lkZV07CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNv
bHVtbiA9IDA7IGNvbHVtbiA8IHBpeGVsc1dpZGU7IGNvbHVtbisrKQogICAgICAgICAgICAgICAg
IGJ1ZmZlcltjb2x1bW5dID0gT1NSZWFkTGl0dGxlSW50MzIoYml0bWFwRGF0YSwgNCAqIGNvbHVt
bik7Ci0gICAgICAgICAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KGJ1ZmZlciksIDQgKiBwaXhlbHNXaWRlKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0
ZXMoYXNCeXRlcyhTcGFuIHsgYnVmZmVyLCBwaXhlbHNXaWRlIH0pKTsKICAgICAgICAgICAgIGJp
dG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7CiAgICAgICAgIH0KICAgICB9IGVsc2UKICNlbmRpZgog
ICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCByb3cgPSAwOyByb3cgPCBwaXhlbHNIaWdoOyBy
b3crKykgewotICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhiaXRtYXBEYXRhLCA0ICogcGl4ZWxz
V2lkZSk7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7IGJpdG1hcERh
dGEsIDQgKiBwaXhlbHNXaWRlIH0pKTsKICAgICAgICAgICAgIGJpdG1hcERhdGEgKz0gYnl0ZXNQ
ZXJSb3c7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9CbG9vbUZpbHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvQmxvb21GaWx0ZXIuY3BwCShyZXZpc2lvbiAyNzg3NjMpCisrKyBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9CbG9vbUZpbHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1
LDcgKzQ1LDcgQEAgc3RhdGljIFZlY3RvcjxTSEExOjpEaWdlc3Q+IGdlbmVyYXRlUmFuZAogICAg
IFNIQTEgc2hhMTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaGFzaENvdW50OyArK2kp
IHsKICAgICAgICAgZG91YmxlIHJhbmRvbSA9IHJhbmRvbU51bWJlcigpOwotICAgICAgICBzaGEx
LmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZyYW5kb20pLCBzaXplb2YoZG91
YmxlKSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgJnJhbmRvbSwgMSB9
KSk7CiAgICAgICAgIFNIQTE6OkRpZ2VzdCBkaWdlc3Q7CiAgICAgICAgIHNoYTEuY29tcHV0ZUhh
c2goZGlnZXN0KTsKICAgICAgICAgaGFzaGVzLmFwcGVuZChkaWdlc3QpOwpJbmRleDogVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAJKHJldmlzaW9uIDI3ODc2
MykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzMsOCArMTMzLDggQEAgVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBNYXBw
aW5nRXhpc3RpbmdGaQogICAgIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhIG1hcHBlZEZpbGVE
YXRhKHRlbXBGaWxlUGF0aCgpLCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlTW9kZTo6U2hhcmVkLCBz
dWNjZXNzKTsKICAgICBFWFBFQ1RfVFJVRShzdWNjZXNzKTsKICAgICBFWFBFQ1RfVFJVRSghIW1h
cHBlZEZpbGVEYXRhKTsKLSAgICBFWFBFQ1RfVFJVRShtYXBwZWRGaWxlRGF0YS5zaXplKCkgPT0g
c3RybGVuKEZpbGVTeXN0ZW1UZXN0RGF0YSkpOwotICAgIEVYUEVDVF9UUlVFKHN0cm5zdHIoRmls
ZVN5c3RlbVRlc3REYXRhLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4obWFwcGVkRmlsZURhdGEu
ZGF0YSgpKSwgbWFwcGVkRmlsZURhdGEuc2l6ZSgpKSk7CisgICAgRVhQRUNUX1RSVUUobWFwcGVk
RmlsZURhdGEuZGF0YSgpLnNpemUoKSA9PSBzdHJsZW4oRmlsZVN5c3RlbVRlc3REYXRhKSk7Cisg
ICAgRVhQRUNUX1RSVUUoc3RybnN0cihGaWxlU3lzdGVtVGVzdERhdGEsIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgY2hhcio+KG1hcHBlZEZpbGVEYXRhLmRhdGEoKS5kYXRhKCkpLCBtYXBwZWRGaWxl
RGF0YS5kYXRhKCkuc2l6ZSgpKSk7CiB9CiAKIFRFU1RfRihGaWxlU3lzdGVtVGVzdCwgTWFwcGlu
Z0V4aXN0aW5nRW1wdHlGaWxlKQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQ
U2VydmVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNl
cnZlci5tbQkocmV2aXNpb24gMjc4NzYzKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9I
VFRQU2VydmVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNDAsMTEgKzM0MCwxMSBAQCB2b2lkIENv
bm5lY3Rpb246OndlYlNvY2tldEhhbmRzaGFrZShDb21wCiAKICAgICAgICAgICAgIGNvbnN0ZXhw
ciBhdXRvKiB3ZWJTb2NrZXRLZXlHVUlEID0gIjI1OEVBRkE1LUU5MTQtNDdEQS05NUNBLUM1QUIw
REM4NUIxMSI7CiAgICAgICAgICAgICBTSEExIHNoYTE7Ci0gICAgICAgICAgICBzaGExLmFkZEJ5
dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGtleUJlZ2luKSwga2V5RW5kIC0g
a2V5QmVnaW4pOwotICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQ4X3QqPih3ZWJTb2NrZXRLZXlHVUlEKSwgc3RybGVuKHdlYlNvY2tldEtleUdVSUQp
KTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsga2V5QmVnaW4sIGtl
eUVuZCB9KSk7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7IHdlYlNv
Y2tldEtleUdVSUQsIHN0cmxlbih3ZWJTb2NrZXRLZXlHVUlEKSB9KSk7CiAgICAgICAgICAgICBT
SEExOjpEaWdlc3QgaGFzaDsKICAgICAgICAgICAgIHNoYTEuY29tcHV0ZUhhc2goaGFzaCk7Ci0g
ICAgICAgICAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaGFzaC5kYXRhKCksIFNIQTE6
Omhhc2hTaXplKTsKKyAgICAgICAgICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFu
IHsgaGFzaCB9KTsKICAgICAgICAgfTsKIAogICAgICAgICBjb25uZWN0aW9uLnNlbmQoSFRUUFJl
c3BvbnNlKDEwMSwgewpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jYWlyby9UZXN0SW52
b2NhdGlvbkNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2Nh
aXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwCShyZXZpc2lvbiAyNzg3NjMpCisrKyBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVTSEExSGFzaFN0cmluZ0Zv
ckNhaXIKICAgICBTSEExIHNoYTE7CiAgICAgdW5zaWduZWQgY2hhciogYml0bWFwRGF0YSA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1
cmZhY2UpKTsKICAgICBmb3IgKHNpemVfdCByb3cgPSAwOyByb3cgPCBwaXhlbHNIaWdoOyArK3Jv
dykgewotICAgICAgICBzaGExLmFkZEJ5dGVzKGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlKTsK
KyAgICAgICAgc2hhMS5hZGRCeXRlcyhhc0J5dGVzKFNwYW4geyBiaXRtYXBEYXRhLCA0ICogcGl4
ZWxzV2lkZSB9KSk7CiAgICAgICAgIGJpdG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7CiAgICAgfQog
ICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9U
ZXN0SW52b2NhdGlvbkNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVy
L2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwCShyZXZpc2lvbiAyNzg3NjMpCisrKyBUb29scy9XZWJL
aXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
NywxNCArODcsMTQgQEAgdm9pZCBjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JDb250ZXh0KENHQwog
ICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcig0ICogcGl4ZWxzV2lkZSk7CiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGNvbHVtbiA9IDA7IGNvbHVtbiA8IHBpeGVsc1dpZGU7IGNv
bHVtbisrKQogICAgICAgICAgICAgICAgIGJ1ZmZlcltjb2x1bW5dID0gT1NSZWFkTGl0dGxlSW50
MzIoYml0bWFwRGF0YSwgNCAqIGNvbHVtbik7Ci0gICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGJ1
ZmZlcik7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7IGJ1ZmZlciB9
KSk7CiAgICAgICAgICAgICBiaXRtYXBEYXRhICs9IGJ5dGVzUGVyUm93OwogICAgICAgICB9CiAg
ICAgfSBlbHNlCiAjZW5kaWYKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgcm93ID0gMDsg
cm93IDwgcGl4ZWxzSGlnaDsgcm93KyspIHsKLSAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoYml0
bWFwRGF0YSwgNCAqIHBpeGVsc1dpZGUpOworICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhhc0J5
dGVzKFNwYW4geyBiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lkZSB9KSk7CiAgICAgICAgICAgICBi
aXRtYXBEYXRhICs9IGJ5dGVzUGVyUm93OwogICAgICAgICB9CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431255</attachid>
            <date>2021-06-12 07:51:38 -0700</date>
            <delta_ts>2021-06-12 08:00:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226887-20210612075137.patch</filename>
            <type>text/plain</type>
            <size>126731</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBA
CisyMDIxLTA2LTEyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogQVBJL0pTU2NyaXB0Lm1tOgorICAg
ICAgICAoK1tKU1NjcmlwdCBzY3JpcHRPZlR5cGU6bWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTp3
aXRoU291cmNlVVJMOmFuZEJ5dGVjb2RlQ2FjaGU6aW5WaXJ0dWFsTWFjaGluZTplcnJvcjpdKToK
KyAgICAgICAgKC1bSlNTY3JpcHQgcmVhZENhY2hlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHdy
aXRlQ2FjaGU6XSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9ja0hhc2g6OkNvZGVCbG9ja0hhc2gpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHA6CisgICAgICAgIChJbnNw
ZWN0b3I6OmJhY2tlbmRDb21tYW5kc0hhc2gpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZm
ZXIuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJDb250ZW50czo6d3JpdGFibGVCeXRlcyk6
CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyQ29udGVudHM6OmJ5dGVzIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6QXJyYXlCdWZmZXI6OndyaXRhYmxlQnl0ZXMpOgorICAgICAgICAoSlNDOjpBcnJh
eUJ1ZmZlcjo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
Lmg6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6d3JpdGFibGVCeXRlcyk6CisgICAg
ICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRp
bWUvQ2FjaGVQYXlsb2FkLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVQYXlsb2FkOjptYWtlTWFw
cGVkUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6bWFrZU1hbGxvY1BheWxv
YWQpOgorICAgICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6Om1ha2VFbXB0eVBheWxvYWQpOgorICAg
ICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6OkNhY2hlUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNh
Y2hlUGF5bG9hZDo6ZnJlZURhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVQYXlsb2FkLmg6
CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6ZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlUGF5bG9hZDo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6
Q2FjaGVQYXlsb2FkKToKKyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKToKKwogMjAyMS0w
Ni0xMSAgUGF0cmljayBBbmdsZSAgPHBhbmdsZUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogQWRkIGluc3RydW1lbnRhdGlvbiB0byBub2RlIGRlc3RydWN0aW9uIGZvciBJbnNw
ZWN0b3JET01BZ2VudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMTMgKzEzNCwxMyBAQCArIChpbnN0YW5jZXR5cGUpc2Ny
aXB0T2ZUeXBlOihKU1NjcmlwdFR5CiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4g
Y3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJGaWxlIGF0IHBhdGggJUAg
Y291bGQgbm90IGJlIG1hcHBlZC4iLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihzeXN0ZW1QYXRo
KV0sIGVycm9yKTsKIAotICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCkpKQor
ICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmlsZURhdGEuZGF0YSgpLnNpemUoKSkpCiAg
ICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIk5v
dCBhbGwgY2hhcmFjdGVycyBpbiBmaWxlIGF0ICVAIGFyZSBBU0NJSS4iLCBzdGF0aWNfY2FzdDxO
U1N0cmluZyAqPihzeXN0ZW1QYXRoKV0sIGVycm9yKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gYWRv
cHROUyhbW0pTU2NyaXB0IGFsbG9jXSBpbml0XSk7CiAgICAgcmVzdWx0LT5tX3ZpcnR1YWxNYWNo
aW5lID0gdm07CiAgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOwotICAgIHJlc3VsdC0+bV9zb3Vy
Y2UgPSBTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcoYml0d2lzZV9jYXN0
PGNvbnN0IExDaGFyKj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpKSk7CisgICAg
cmVzdWx0LT5tX3NvdXJjZSA9IFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWlu
ZyhiaXR3aXNlX2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmls
ZURhdGEuZGF0YSgpLnNpemUoKSkpOwogICAgIHJlc3VsdC0+bV9tYXBwZWRTb3VyY2UgPSBXVEZN
b3ZlKGZpbGVEYXRhKTsKICAgICByZXN1bHQtPm1fc291cmNlVVJMID0gc291cmNlVVJMOwogICAg
IHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7CkBAIC0xNjgsMjQgKzE2OCwyMyBAQCAt
ICh2b2lkKXJlYWRDYWNoZQogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgY29uc3QgdWludDhfdCogZmlsZURhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihtYXBwZWRGaWxlLmRhdGEoKSk7Ci0gICAgdW5zaWduZWQgZmlsZVRvdGFsU2l6ZSA9IG1h
cHBlZEZpbGUuc2l6ZSgpOworICAgIGF1dG8gZmlsZURhdGEgPSBtYXBwZWRGaWxlLmRhdGEoKTsK
IAogICAgIC8vIEVuc3VyZSB3ZSBhdCBsZWFzdCBoYXZlIGEgU0hBMTo6RGlnZXN0IHRvIHJlYWQu
Ci0gICAgaWYgKGZpbGVUb3RhbFNpemUgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgeworICAgIGlm
IChmaWxlRGF0YS5zaXplKCkgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgewogICAgICAgICBGaWxl
U3lzdGVtOjpkZWxldGVGaWxlKGNhY2hlRmlsZW5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgdW5zaWduZWQgZmlsZURhdGFTaXplID0gZmlsZVRvdGFsU2l6ZSAtIHNpemVvZihT
SEExOjpEaWdlc3QpOworICAgIHVuc2lnbmVkIGZpbGVEYXRhU2l6ZSA9IGZpbGVEYXRhLnNpemUo
KSAtIHNpemVvZihTSEExOjpEaWdlc3QpOwogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFz
aDsKICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhmaWxlRGF0YSwgZmlsZURhdGFT
aXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKGZpbGVEYXRhLmZpcnN0KGZpbGVEYXRhU2l6ZSkpOwog
ICAgIHNoYTEuY29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2VzdCBm
aWxlSGFzaDsKLSAgICBtZW1jcHkoJmZpbGVIYXNoLCBmaWxlRGF0YSArIGZpbGVEYXRhU2l6ZSwg
c2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOworICAgIG1lbWNweSgmZmlsZUhhc2gsIGZpbGVEYXRhLmRh
dGEoKSArIGZpbGVEYXRhU2l6ZSwgc2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOwogCiAgICAgaWYgKGNv
bXB1dGVkSGFzaCAhPSBmaWxlSGFzaCkgewogICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxl
KGNhY2hlRmlsZW5hbWUpOwpAQCAtMzQzLDcgKzM0Miw3IEBAIC0gKEJPT0wpd3JpdGVDYWNoZToo
U3RyaW5nJillcnJvcgogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFzaDsKICAgICBTSEEx
IHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhtX2NhY2hlZEJ5dGVjb2RlLT5kYXRhKCksIG1fY2Fj
aGVkQnl0ZWNvZGUtPnNpemUoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhhc0J5dGVzKFNwYW4geyBt
X2NhY2hlZEJ5dGVjb2RlLT5kYXRhKCksIG1fY2FjaGVkQnl0ZWNvZGUtPnNpemUoKSB9KSk7CiAg
ICAgc2hhMS5jb21wdXRlSGFzaChjb21wdXRlZEhhc2gpOwogICAgIEZpbGVTeXN0ZW06OndyaXRl
VG9GaWxlKHRlbXBGRCwgY29tcHV0ZWRIYXNoLmRhdGEoKSwgc2l6ZW9mKGNvbXB1dGVkSGFzaCkp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
a0hhc2guY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDEwICs2MiwxMCBA
QCBDb2RlQmxvY2tIYXNoOjpDb2RlQmxvY2tIYXNoKGNvbnN0IFNvdXJjCiAgICAgICAgIHVuc2ln
bmVkIGxlbmd0aCA9IHN0ci5sZW5ndGgoKTsKICAgICAgICAgdW5zaWduZWQgc3RlcCA9IChsZW5n
dGggPj4gMTApICsgMTsKIAotICAgICAgICBzaGExLmFkZEJ5dGVzKGJpdHdpc2VfY2FzdDx1aW50
OF90Kj4oJmxlbmd0aCksIHNpemVvZihsZW5ndGgpKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhh
c0J5dGVzKFNwYW4geyAmbGVuZ3RoLCAxIH0pKTsKICAgICAgICAgZG8gewogICAgICAgICAgICAg
VUNoYXIgY2hhcmFjdGVyID0gc3RyW2luZGV4XTsKLSAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMo
Yml0d2lzZV9jYXN0PHVpbnQ4X3QqPigmY2hhcmFjdGVyKSwgc2l6ZW9mKGNoYXJhY3RlcikpOwor
ICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhhc0J5dGVzKFNwYW4geyAmY2hhcmFjdGVyLCAxIH0p
KTsKICAgICAgICAgICAgIG9sZEluZGV4ID0gaW5kZXg7CiAgICAgICAgICAgICBpbmRleCArPSBz
dGVwOwogICAgICAgICB9IHdoaWxlIChpbmRleCA+IG9sZEluZGV4ICYmIGluZGV4IDwgbGVuZ3Ro
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL2dsaWIvUmVt
b3RlSW5zcGVjdG9yVXRpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvcmVtb3RlL2dsaWIvUmVtb3RlSW5zcGVjdG9yVXRpbHMuY3BwCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGli
L1JlbW90ZUluc3BlY3RvclV0aWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNyBA
QCBjb25zdCBDU3RyaW5nJiBiYWNrZW5kQ29tbWFuZHNIYXNoKCkKICAgICAgICAgZ2NvbnN0cG9p
bnRlciBkYXRhID0gZ19ieXRlc19nZXRfZGF0YShieXRlcy5nZXQoKSwgJmRhdGFTaXplKTsKICAg
ICAgICAgQVNTRVJUKGRhdGFTaXplKTsKICAgICAgICAgU0hBMSBzaGExOwotICAgICAgICBzaGEx
LmFkZEJ5dGVzKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgZGF0YVNpemUpOwor
ICAgICAgICBzaGExLmFkZEJ5dGVzKGFzQnl0ZXMoIFNwYW4geyBkYXRhLCBkYXRhU2l6ZSB9KSk7
CiAgICAgICAgIGhleERpZ2VzdCA9IHNoYTEuY29tcHV0ZUhleERpZ2VzdCgpOwogICAgIH0KICAg
ICByZXR1cm4gaGV4RGlnZXN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheUJ1ZmZlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBA
CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CiAjaW5jbHVkZSA8d3RmL1BhY2tl
ZFJlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisjaW5jbHVkZSA8d3RmL1Nw
YW4uaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVh
ZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC04
MCw3ICs4MSwxMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0
dXJuIG1fZGF0YS5nZXRNYXlCZU51bGwoc2l6ZUluQnl0ZXMoKSk7IH0KICAgICB1bnNpZ25lZCBz
aXplSW5CeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZUluQnl0ZXM7IH0KLSAgICAKKworICAg
IFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCkgeyByZXR1cm4geyBzdGF0aWNfY2FzdDxz
dGQ6OmJ5dGUqPihkYXRhKCkpLCBzaXplSW5CeXRlcygpIH07IH0KKyAgICBTcGFuPGNvbnN0IHN0
ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25zdCB7IHJldHVybiB7IHN0YXRpY19jYXN0PGNvbnN0IHN0ZDo6
Ynl0ZSo+KGRhdGEoKSksIHNpemVJbkJ5dGVzKCkgfTsgfQorCiAgICAgYm9vbCBpc1NoYXJlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkOyB9CiAgICAgCiBwcml2YXRlOgpAQCAtMTI3LDcgKzEz
MSw5IEBAIHB1YmxpYzoKICAgICBpbmxpbmUgdm9pZCogZGF0YSgpOwogICAgIGlubGluZSBjb25z
dCB2b2lkKiBkYXRhKCkgY29uc3Q7CiAgICAgaW5saW5lIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBj
b25zdDsKLSAgICAKKyAgICBpbmxpbmUgU3BhbjxzdGQ6OmJ5dGU+IHdyaXRhYmxlQnl0ZXMoKTsK
KyAgICBpbmxpbmUgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGJ5dGVzKCkgY29uc3Q7CisKICAgICB2
b2lkIG1ha2VTaGFyZWQoKTsKICAgICB2b2lkIHNldFNoYXJpbmdNb2RlKEFycmF5QnVmZmVyU2hh
cmluZ01vZGUpOwogICAgIGlubGluZSBib29sIGlzU2hhcmVkKCkgY29uc3Q7CkBAIC0xOTcsNiAr
MjAzLDE2IEBAIHVuc2lnbmVkIEFycmF5QnVmZmVyOjpieXRlTGVuZ3RoKCkgY29uc3QKICAgICBy
ZXR1cm4gbV9jb250ZW50cy5zaXplSW5CeXRlcygpOwogfQogCitTcGFuPHN0ZDo6Ynl0ZT4gQXJy
YXlCdWZmZXI6OndyaXRhYmxlQnl0ZXMoKQoreworICAgIHJldHVybiBtX2NvbnRlbnRzLndyaXRh
YmxlQnl0ZXMoKTsKK30KKworU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IEFycmF5QnVmZmVyOjpieXRl
cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGVudHMuYnl0ZXMoKTsKK30KKwogYm9vbCBB
cnJheUJ1ZmZlcjo6aXNTaGFyZWQoKSBjb25zdAogewogICAgIHJldHVybiBtX2NvbnRlbnRzLmlz
U2hhcmVkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZl
clZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJh
eUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTg2LDYgKzg2LDkg
QEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
Ynl0ZUxlbmd0aDsgfQogCisgICAgU3BhbjxzdGQ6OmJ5dGU+IHdyaXRhYmxlQnl0ZXMoKSB7IHJl
dHVybiB7IHN0YXRpY19jYXN0PHN0ZDo6Ynl0ZSo+KGRhdGEoKSksIGJ5dGVMZW5ndGgoKSB9OyB9
CisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4geyBzdGF0
aWNfY2FzdDxjb25zdCBzdGQ6OmJ5dGUqPihkYXRhKCkpLCBieXRlTGVuZ3RoKCkgfTsgfQorCiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXREZXRhY2hhYmxlKGJvb2wpOwogICAgIGJvb2wg
aXNEZXRhY2hhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc0RldGFjaGFibGU7IH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuY3BwCShyZXZp
c2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZVBheWxv
YWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwyNyArMzAsMjMgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKIENhY2hlUGF5bG9hZCBDYWNoZVBheWxvYWQ6Om1ha2VNYXBwZWRQYXlsb2FkKEZpbGVTeXN0
ZW06Ok1hcHBlZEZpbGVEYXRhJiYgZGF0YSkKIHsKLSAgICByZXR1cm4gQ2FjaGVQYXlsb2FkKHRy
dWUsIGRhdGEubGVha0hhbmRsZSgpLCBkYXRhLnNpemUoKSk7CisgICAgcmV0dXJuIENhY2hlUGF5
bG9hZCh0cnVlLCBkYXRhLmxlYWtIYW5kbGUoKSk7CiB9CiAKIENhY2hlUGF5bG9hZCBDYWNoZVBh
eWxvYWQ6Om1ha2VNYWxsb2NQYXlsb2FkKE1hbGxvY1B0cjx1aW50OF90LCBWTU1hbGxvYz4mJiBk
YXRhLCBzaXplX3Qgc2l6ZSkKIHsKLSAgICByZXR1cm4gQ2FjaGVQYXlsb2FkKGZhbHNlLCBkYXRh
LmxlYWtQdHIoKSwgc2l6ZSk7CisgICAgcmV0dXJuIENhY2hlUGF5bG9hZChmYWxzZSwgYXNXcml0
YWJsZUJ5dGVzKFNwYW4geyBkYXRhLmxlYWtQdHIoKSwgc2l6ZSB9KSk7CiB9CiAKIENhY2hlUGF5
bG9hZCBDYWNoZVBheWxvYWQ6Om1ha2VFbXB0eVBheWxvYWQoKQogewotICAgIHJldHVybiBDYWNo
ZVBheWxvYWQodHJ1ZSwgbnVsbHB0ciwgMCk7CisgICAgcmV0dXJuIENhY2hlUGF5bG9hZCh0cnVl
LCB7IH0pOwogfQogCiBDYWNoZVBheWxvYWQ6OkNhY2hlUGF5bG9hZChDYWNoZVBheWxvYWQmJiBv
dGhlcikKIHsKLSAgICBtX21hcHBlZCA9IG90aGVyLm1fbWFwcGVkOwotICAgIG1fc2l6ZSA9IG90
aGVyLm1fc2l6ZTsKLSAgICBtX2RhdGEgPSBvdGhlci5tX2RhdGE7Ci0gICAgb3RoZXIubV9tYXBw
ZWQgPSBmYWxzZTsKLSAgICBvdGhlci5tX2RhdGEgPSBudWxscHRyOwotICAgIG90aGVyLm1fc2l6
ZSA9IDA7CisgICAgbV9tYXBwZWQgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fbWFwcGVkLCBmYWxz
ZSk7CisgICAgbV9kYXRhID0gc3RkOjpleGNoYW5nZShvdGhlci5tX2RhdGEsIHsgfSk7CiB9CiAK
IENhY2hlUGF5bG9hZDo6fkNhY2hlUGF5bG9hZCgpCkBAIC02NywxMiArNjMsMTMgQEAgQ2FjaGVQ
YXlsb2FkJiBDYWNoZVBheWxvYWQ6Om9wZXJhdG9yPShDYQogCiB2b2lkIENhY2hlUGF5bG9hZDo6
ZnJlZURhdGEoKQogewotICAgIGlmICghbV9kYXRhKQorICAgIGlmICghbV9kYXRhLmRhdGEoKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX21hcHBlZCkgewotICAgICAgICBGaWxlU3lzdGVt
Ojp1bm1hcFZpZXdPZkZpbGUobV9kYXRhLCBtX3NpemUpOwotICAgIH0gZWxzZQotICAgICAgICBm
YXN0RnJlZShtX2RhdGEpOworCisgICAgaWYgKG1fbWFwcGVkKQorICAgICAgICBGaWxlU3lzdGVt
Ojp1bm1hcFZpZXdPZkZpbGUobV9kYXRhKTsKKyAgICBlbHNlCisgICAgICAgIGZhc3RGcmVlKG1f
ZGF0YS5kYXRhKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlUGF5bG9hZC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlUGF5bG9hZC5oCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSA8d3RmL0Zp
bGVTeXN0ZW0uaD4KICNpbmNsdWRlIDx3dGYvTWFsbG9jUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Nw
YW4uaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQxLDIyICs0MiwyMCBAQCBwdWJsaWM6CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgfkNhY2hlUGF5bG9hZCgpOwogICAgIEpTX0VYUE9SVF9QUklW
QVRFIENhY2hlUGF5bG9hZCYgb3BlcmF0b3I9KENhY2hlUGF5bG9hZCYmIG90aGVyKTsKIAotICAg
IGNvbnN0IHVpbnQ4X3QqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KLSAgICBzaXpl
X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIGNvbnN0IHVpbnQ4X3QqIGRh
dGEoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihtX2RhdGEuZGF0
YSgpKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLnNpemUoKTsg
fQogCiBwcml2YXRlOgotICAgIENhY2hlUGF5bG9hZChib29sIG1hcHBlZCwgdm9pZCogZGF0YSwg
c2l6ZV90IHNpemUpCisgICAgQ2FjaGVQYXlsb2FkKGJvb2wgbWFwcGVkLCBTcGFuPHN0ZDo6Ynl0
ZT4gZGF0YSkKICAgICAgICAgOiBtX21hcHBlZChtYXBwZWQpCi0gICAgICAgICwgbV9zaXplKHNp
emUpCi0gICAgICAgICwgbV9kYXRhKHN0YXRpY19jYXN0PHVpbnQ4X3QqPihkYXRhKSkKKyAgICAg
ICAgLCBtX2RhdGEoZGF0YSkKICAgICB7CiAgICAgfQogCiAgICAgdm9pZCBmcmVlRGF0YSgpOwog
CiAgICAgYm9vbCBtX21hcHBlZDsKLSAgICBzaXplX3QgbV9zaXplOwotICAgIHVpbnQ4X3QqIG1f
ZGF0YTsKKyAgICBTcGFuPHN0ZDo6Ynl0ZT4gbV9kYXRhOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU3RyZWFtaW5nUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU3RyZWFt
aW5nUGFyc2VyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2MSw3ICsy
NjEsNyBAQCBhdXRvIFN0cmVhbWluZ1BhcnNlcjo6YWRkQnl0ZXMoY29uc3QgdWluCiAgICAgfQog
CiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnVzZUVhZ2VyV2ViQXNzZW1ibHlNb2R1bGVIYXNo
aW5nKCkpKQotICAgICAgICBtX2hhc2hlci5hZGRCeXRlcyhieXRlcywgYnl0ZXNTaXplKTsKKyAg
ICAgICAgbV9oYXNoZXIuYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgYnl0ZXMsIGJ5dGVzU2l6ZSB9
ICkpOwogCiAgICAgc2l6ZV90IG9mZnNldEluQnl0ZXMgPSAwOwogICAgIHdoaWxlICh0cnVlKSB7
CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0No
YW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSw2OCBAQAorMjAyMS0wNi0xMSAgU2FtIFdlaW5pZyAgPHdlaW5p
Z0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRvcHQgU3BhbiBpbiBtb3JlIHBsYWNlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2ODg3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAg
ICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9GaWxlU3lz
dGVtLmNwcDoKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjp+
TWFwcGVkRmlsZURhdGEpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6TWFwcGVkRmls
ZURhdGE6Om1hcEZpbGVIYW5kbGUpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6dW5t
YXBWaWV3T2ZGaWxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Om1hcFRvRmlsZSk6
CisgICAgICAgICogd3RmL0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUlt
cGw6Ok1hcHBlZEZpbGVEYXRhOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKFdURjo6
RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpkYXRhIGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpsZWFrSGFuZGxlKToKKyAgICAgICAg
KFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YSk6Cisg
ICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpNYXBwZWRGaWxlRGF0YTo6b3BlcmF0b3I9KToK
KyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpzaXplIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1NIQTEuY3Bw
OgorICAgICAgICAoV1RGOjpTSEExOjphZGRCeXRlcyk6CisgICAgICAgIChXVEY6OlNIQTE6OmZp
bmFsaXplKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6U0hBMTo6cHJvY2Vzc0Jsb2NrKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6U0hBMTo6cmVzZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpTSEExOjpoZXhEaWdlc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTSEExOjpjb21wdXRl
SGV4RGlnZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvU0hBMS5oOgorICAgICAgICAoV1RG
OjpTSEExOjphZGRCeXRlcyk6CisgICAgICAgICogd3RmL1ZlY3Rvci5oOgorICAgICAgICAqIHd0
Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lz
dGVuY2U6OkNvZGVyPENTdHJpbmc+OjplbmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5j
ZTo6Q29kZXI8Q1N0cmluZz46OmRlY29kZSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpD
b2RlcjxTdHJpbmc+OjplbmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVjb2Rl
U3RyaW5nVGV4dCk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTSEExOjpEaWdl
c3Q+OjplbmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8U0hBMTo6RGln
ZXN0Pjo6ZGVjb2RlKToKKyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVy
cy5oOgorICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5jcHA6Cisg
ICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjpEZWNvZGVyKToKKyAgICAgICAgKFdU
Rjo6UGVyc2lzdGVuY2U6OkRlY29kZXI6OmJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFkKToKKyAg
ICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSk6
CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjp2ZXJpZnlDaGVja3N1bSk6Cisg
ICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjp+RGVjb2Rlcik6IERlbGV0ZWQuCisg
ICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmg6CisgICAgICAgICog
d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmNwcDoKKyAgICAgICAgKFdURjo6UGVy
c2lzdGVuY2U6OkVuY29kZXI6Omdyb3cpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5j
b2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6
OkVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6OlBlcnNpc3Rl
bmNlOjpFbmNvZGVyOjplbmNvZGVOdW1iZXIpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6
RW5jb2Rlcjo6ZW5jb2RlQ2hlY2tzdW0pOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5j
b2Rlcjo6RW5jb2Rlcik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNv
ZGVyOjp+RW5jb2Rlcik6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNp
c3RlbnRFbmNvZGVyLmg6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjpidWZm
ZXIgY29uc3QpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6dXBkYXRlQ2hl
Y2tzdW1Gb3JOdW1iZXIpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6YnVm
ZmVyU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3RleHQvQmFzZTY0Lmg6Cisg
ICAgICAgIChXVEY6OmJhc2U2NEVuY29kZVRvVmVjdG9yKToKKyAgICAgICAgKFdURjo6YmFzZTY0
RW5jb2RlVG9TdHJpbmcpOgorICAgICAgICAqIHd0Zi90ZXh0L0NTdHJpbmcuaDoKKwogMjAyMS0w
Ni0xMSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgV2Vh
a0hhc2hNYXAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBT
b3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE5LDkgKzMx
OSw5IEBAIGJvb2wgZXhjbHVkZUZyb21CYWNrdXAoY29uc3QgU3RyaW5nJikKIAogTWFwcGVkRmls
ZURhdGE6On5NYXBwZWRGaWxlRGF0YSgpCiB7Ci0gICAgaWYgKCFtX2ZpbGVEYXRhKQorICAgIGlm
ICghbV9maWxlRGF0YS5kYXRhKCkpCiAgICAgICAgIHJldHVybjsKLSAgICB1bm1hcFZpZXdPZkZp
bGUobV9maWxlRGF0YSwgbV9maWxlU2l6ZSk7CisgICAgdW5tYXBWaWV3T2ZGaWxlKG1fZmlsZURh
dGEpOwogfQogCiBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoY29uc3QgU3RyaW5nJiBm
aWxlUGF0aCwgTWFwcGVkRmlsZU1vZGUgbWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKQEAgLTM4Mywx
NCArMzgzLDEzIEBAIGJvb2wgTWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5kbGUoUGxhdGYKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG1fZmlsZURhdGEgPSBkYXRhOwotICAg
IG1fZmlsZVNpemUgPSBzaXplOworICAgIG1fZmlsZURhdGEgPSBTcGFuIHsgcmVpbnRlcnByZXRf
Y2FzdDxzdGQ6OmJ5dGUqPihkYXRhKSwgc2l6ZSB9OwogICAgIHJldHVybiB0cnVlOwogfQogCi1i
b29sIHVubWFwVmlld09mRmlsZSh2b2lkKiBidWZmZXIsIHNpemVfdCBzaXplKQorYm9vbCB1bm1h
cFZpZXdPZkZpbGUoU3BhbjxzdGQ6OmJ5dGU+IGRhdGEpCiB7Ci0gICAgcmV0dXJuICFtdW5tYXAo
YnVmZmVyLCBzaXplKTsKKyAgICByZXR1cm4gIW11bm1hcChkYXRhLmRhdGEoKSwgZGF0YS5zaXpl
KCkpOwogfQogCiAjZW5kaWYKQEAgLTQzOCw3ICs0MzcsNyBAQCBTdHJpbmcgY3JlYXRlVGVtcG9y
YXJ5WmlwQXJjaGl2ZShjb25zdCBTCiB9CiAjZW5kaWYKIAotTWFwcGVkRmlsZURhdGEgbWFwVG9G
aWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVuY3Rpb248dm9pZChj
b25zdCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYpPiYmIGFwcGx5LCBQ
bGF0Zm9ybUZpbGVIYW5kbGUqIG91dHB1dEhhbmRsZSkKK01hcHBlZEZpbGVEYXRhIG1hcFRvRmls
ZShjb25zdCBTdHJpbmcmIHBhdGgsIHNpemVfdCBieXRlc1NpemUsIEZ1bmN0aW9uPHZvaWQoY29u
c3QgRnVuY3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYpPiYmIGFwcGx5LCBQbGF0
Zm9ybUZpbGVIYW5kbGUqIG91dHB1dEhhbmRsZSkKIHsKICAgICBjb25zdGV4cHIgYm9vbCBmYWls
SWZGaWxlRXhpc3RzID0gdHJ1ZTsKICAgICBhdXRvIGhhbmRsZSA9IEZpbGVTeXN0ZW06Om9wZW5G
aWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZFdyaXRlLCBGaWxlU3lzdGVt
OjpGaWxlQWNjZXNzUGVybWlzc2lvbjo6VXNlciwgZmFpbElmRmlsZUV4aXN0cyk7CkBAIC00NTUs
MTIgKzQ1NCwxMiBAQCBNYXBwZWRGaWxlRGF0YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwCiAg
ICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgdm9pZCogbWFwID0gY29uc3RfY2FzdDx2
b2lkKj4obWFwcGVkRmlsZS5kYXRhKCkpOwotICAgIHVpbnQ4X3QqIG1hcERhdGEgPSBzdGF0aWNf
Y2FzdDx1aW50OF90Kj4obWFwKTsKKyAgICBhdXRvIG1hcCA9IG1hcHBlZEZpbGUuZGF0YSgpLmRh
dGEoKTsKKyAgICBhdXRvIG1hcERhdGEgPSBtYXA7CiAKLSAgICBhcHBseShbJm1hcERhdGFdKGNv
bnN0IHVpbnQ4X3QqIGNodW5rLCBzaXplX3QgY2h1bmtTaXplKSB7Ci0gICAgICAgIG1lbWNweSht
YXBEYXRhLCBjaHVuaywgY2h1bmtTaXplKTsKLSAgICAgICAgbWFwRGF0YSArPSBjaHVua1NpemU7
CisgICAgYXBwbHkoWyZtYXBEYXRhXShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gY2h1bmspIHsKKyAg
ICAgICAgbWVtY3B5KG1hcERhdGEsIGNodW5rLmRhdGEoKSwgY2h1bmsuc2l6ZSgpKTsKKyAgICAg
ICAgbWFwRGF0YSArPSBjaHVuay5zaXplKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0p
OwogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RG
L3d0Zi9GaWxlU3lzdGVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNs
dWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL09w
dGlvblNldC5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogI2luY2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgpAQCAtMjEwLDcgKzIxMSw3IEBAIFdURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgcmVhbFBh
dGgoY29uc3QKIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGlzU2FmZVRvVXNlTWVtb3J5TWFwRm9y
UGF0aChjb25zdCBTdHJpbmcmKTsKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIG1ha2VTYWZlVG9V
c2VNZW1vcnlNYXBGb3JQYXRoKGNvbnN0IFN0cmluZyYpOwogCi1XVEZfRVhQT1JUX1BSSVZBVEUg
Ym9vbCB1bm1hcFZpZXdPZkZpbGUodm9pZCogYnVmZmVyLCBzaXplX3QpOworV1RGX0VYUE9SVF9Q
UklWQVRFIGJvb2wgdW5tYXBWaWV3T2ZGaWxlKFNwYW48c3RkOjpieXRlPik7CiAKIGNsYXNzIE1h
cHBlZEZpbGVEYXRhIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTIyMywxNyAr
MjI0LDE1IEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfk1hcHBlZEZpbGVEYXRh
KCk7CiAgICAgTWFwcGVkRmlsZURhdGEmIG9wZXJhdG9yPShNYXBwZWRGaWxlRGF0YSYmKTsKIAot
ICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fZmlsZURhdGE7
IH0KLSAgICBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9maWxlRGF0YTsgfQot
ICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVTaXplOyB9CisgICAgZXhw
bGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9maWxlRGF0YS5kYXRhKCk7
IH0KKyAgICBTcGFuPHN0ZDo6Ynl0ZT4gZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZURhdGE7
IH0KIAotICAgIHZvaWQqIGxlYWtIYW5kbGUoKSB7IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fZmls
ZURhdGEsIG51bGxwdHIpOyB9CisgICAgV0FSTl9VTlVTRURfUkVUVVJOIFNwYW48c3RkOjpieXRl
PiBsZWFrSGFuZGxlKCkgeyByZXR1cm4gc3RkOjpleGNoYW5nZShtX2ZpbGVEYXRhLCB7IH0pOyB9
CiAKIHByaXZhdGU6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgbWFwRmlsZUhhbmRsZShQ
bGF0Zm9ybUZpbGVIYW5kbGUsIEZpbGVPcGVuTW9kZSwgTWFwcGVkRmlsZU1vZGUpOwogCi0gICAg
dm9pZCogbV9maWxlRGF0YSB7IG51bGxwdHIgfTsKLSAgICB1bnNpZ25lZCBtX2ZpbGVTaXplIHsg
MCB9OworICAgIFNwYW48c3RkOjpieXRlPiBtX2ZpbGVEYXRhOwogfTsKIAogaW5saW5lIE1hcHBl
ZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBNYXBw
ZWRGaWxlTW9kZSBtYXBNb2RlLCBib29sJiBzdWNjZXNzKQpAQCAtMjQ3LDIxICsyNDYsMTkgQEAg
aW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShQbAogfQogCiBpbmxpbmUgTWFw
cGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKE1hcHBlZEZpbGVEYXRhJiYgb3RoZXIpCi0gICAg
OiBtX2ZpbGVEYXRhKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9maWxlRGF0YSwgbnVsbHB0cikpCi0g
ICAgLCBtX2ZpbGVTaXplKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9maWxlU2l6ZSwgMCkpCisgICAg
OiBtX2ZpbGVEYXRhKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9maWxlRGF0YSwgeyB9KSkKIHsKIH0K
IAogaW5saW5lIE1hcHBlZEZpbGVEYXRhJiBNYXBwZWRGaWxlRGF0YTo6b3BlcmF0b3I9KE1hcHBl
ZEZpbGVEYXRhJiYgb3RoZXIpCiB7Ci0gICAgbV9maWxlRGF0YSA9IHN0ZDo6ZXhjaGFuZ2Uob3Ro
ZXIubV9maWxlRGF0YSwgbnVsbHB0cik7Ci0gICAgbV9maWxlU2l6ZSA9IHN0ZDo6ZXhjaGFuZ2Uo
b3RoZXIubV9maWxlU2l6ZSwgMCk7CisgICAgbV9maWxlRGF0YSA9IHN0ZDo6ZXhjaGFuZ2Uob3Ro
ZXIubV9maWxlRGF0YSwgeyB9KTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKIC8vIFRoaXMgY3Jl
YXRlcyB0aGUgZGVzdGluYXRpb24gZmlsZSwgbWFwcyBpdCwgd3JpdGUgdGhlIHByb3ZpZGVkIGRh
dGEgdG8gaXQgYW5kIHJldHVybnMgdGhlIG1hcHBlZCBmaWxlLgogLy8gVGhpcyBmdW5jdGlvbiBm
YWlscyBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgZmlsZSBhdCB0aGUgZGVzdGluYXRpb24gcGF0aC4K
LVdURl9FWFBPUlRfUFJJVkFURSBNYXBwZWRGaWxlRGF0YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5n
JiBwYXRoLCBzaXplX3QgYnl0ZXNTaXplLCBGdW5jdGlvbjx2b2lkKGNvbnN0IEZ1bmN0aW9uPGJv
b2woY29uc3QgdWludDhfdCosIHNpemVfdCk+Jik+JiYgYXBwbHksIFBsYXRmb3JtRmlsZUhhbmRs
ZSogPSBudWxscHRyKTsKK1dURl9FWFBPUlRfUFJJVkFURSBNYXBwZWRGaWxlRGF0YSBtYXBUb0Zp
bGUoY29uc3QgU3RyaW5nJiBwYXRoLCBzaXplX3QgYnl0ZXNTaXplLCBGdW5jdGlvbjx2b2lkKGNv
bnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mKT4mJiBhcHBseSwgUGxh
dGZvcm1GaWxlSGFuZGxlKiA9IG51bGxwdHIpOwogCiB9IC8vIG5hbWVzcGFjZSBGaWxlU3lzdGVt
SW1wbAogfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TSEExLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TSEExLmNwcAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dURi93dGYvU0hBMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEwICs0Niwx
MCBAQCBTSEExOjpTSEExKCkKICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQK
IH0KIAotdm9pZCBTSEExOjphZGRCeXRlcyhjb25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGxl
bmd0aCkKK3ZvaWQgU0hBMTo6YWRkQnl0ZXMoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQog
ewogICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgQ0NfU0hBMV9V
cGRhdGUoJm1fY29udGV4dCwgaW5wdXQsIGxlbmd0aCk7CisgICAgQ0NfU0hBMV9VcGRhdGUoJm1f
Y29udGV4dCwgaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkpOwogICAgIEFMTE9XX0RFUFJFQ0FU
RURfREVDTEFSQVRJT05TX0VORAogfQogCkBAIC0xMDEsMTEgKzEwMSwxMSBAQCBTSEExOjpTSEEx
KCkKICAgICByZXNldCgpOwogfQogCi12b2lkIFNIQTE6OmFkZEJ5dGVzKGNvbnN0IHVpbnQ4X3Qq
IGlucHV0LCBzaXplX3QgbGVuZ3RoKQordm9pZCBTSEExOjphZGRCeXRlcyhTcGFuPGNvbnN0IHN0
ZDo6Ynl0ZT4gaW5wdXQpCiB7Ci0gICAgd2hpbGUgKGxlbmd0aC0tKSB7CisgICAgZm9yIChhdXRv
IGJ5dGUgOiBpbnB1dCkgewogICAgICAgICBBU1NFUlQobV9jdXJzb3IgPCA2NCk7Ci0gICAgICAg
IG1fYnVmZmVyW21fY3Vyc29yKytdID0gKmlucHV0Kys7CisgICAgICAgIG1fYnVmZmVyW21fY3Vy
c29yKytdID0gc3RkOjp0b19pbnRlZ2VyPHVpbnQ4X3Q+KGJ5dGUpOwogICAgICAgICArK21fdG90
YWxCeXRlczsKICAgICAgICAgaWYgKG1fY3Vyc29yID09IDY0KQogICAgICAgICAgICAgcHJvY2Vz
c0Jsb2NrKCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TSEExLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvU0hBMS5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9T
SEExLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSA8YXJyYXk+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCkBAIC00NSwxNSArNDYsOCBA
QCBjbGFzcyBTSEExIHsKIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgU0hBMSgpOwog
Ci0gICAgdm9pZCBhZGRCeXRlcyhjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQotICAgIHsK
LSAgICAgICAgYWRkQnl0ZXMoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkpOwotICAgIH0KLSAg
ICB2b2lkIGFkZEJ5dGVzKGNvbnN0IENTdHJpbmcmIGlucHV0KQotICAgIHsKLSAgICAgICAgYWRk
Qnl0ZXMoaW5wdXQuZGF0YUFzVUludDhQdHIoKSwgaW5wdXQubGVuZ3RoKCkpOwotICAgIH0KLSAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRCeXRlcyhjb25zdCB1aW50OF90KiBpbnB1dCwg
c2l6ZV90IGxlbmd0aCk7CisgICAgdm9pZCBhZGRCeXRlcyhjb25zdCBDU3RyaW5nJiBpbnB1dCkg
eyBhZGRCeXRlcyhpbnB1dC5ieXRlcygpKTsgfQorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IGFkZEJ5dGVzKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAKICAgICAvLyBTaXplIG9mIHRoZSBT
SEExIGhhc2gKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qg
aGFzaFNpemUgPSAyMDsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9WZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjEzLDYgKzYxMyw3IEBAIHByaXZh
dGU6CiAKIHB1YmxpYzoKICAgICB0eXBlZGVmIFQgVmFsdWVUeXBlOworICAgIHR5cGVkZWYgVCB2
YWx1ZV90eXBlOwogCiAgICAgdHlwZWRlZiBUKiBpdGVyYXRvcjsKICAgICB0eXBlZGVmIGNvbnN0
IFQqIGNvbnN0X2l0ZXJhdG9yOwpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVy
c2lzdGVudENvZGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVu
Y2UvUGVyc2lzdGVudENvZGVycy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYv
d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Nyw3ICs1Nyw3IEBAIHZvaWQgQ29kZXI8Q1N0cmluZz46OmVuY29kZShFbmNvZGVyJiBlbmMKIAog
ICAgIHVpbnQzMl90IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKICAgICBlbmNvZGVyIDw8IGxl
bmd0aDsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShzdHJpbmcuZGF0YUFzVUlu
dDhQdHIoKSwgbGVuZ3RoKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YSh7IHN0
cmluZy5kYXRhQXNVSW50OFB0cigpLCBsZW5ndGggfSk7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8Q1N0
cmluZz4gQ29kZXI8Q1N0cmluZz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQpAQCAtNzgsNyAr
NzgsNyBAQCBzdGQ6Om9wdGlvbmFsPENTdHJpbmc+IENvZGVyPENTdHJpbmc+OjpkCiAKICAgICBj
aGFyKiBidWZmZXI7CiAgICAgQ1N0cmluZyBzdHJpbmcgPSBDU3RyaW5nOjpuZXdVbmluaXRpYWxp
emVkKCpsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3Ro
RGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIpLCAqbGVuZ3RoKSkKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHsgcmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oYnVmZmVyKSwgKmxlbmd0aCB9KSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
IAogICAgIHJldHVybiBzdHJpbmc7CkBAIC05OCw5ICs5OCw5IEBAIHZvaWQgQ29kZXI8U3RyaW5n
Pjo6ZW5jb2RlKEVuY29kZXImIGVuY28KICAgICBlbmNvZGVyIDw8IGxlbmd0aCA8PCBpczhCaXQ7
CiAKICAgICBpZiAoaXM4Qml0KQotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0
YShzdHJpbmcuY2hhcmFjdGVyczgoKSwgbGVuZ3RoKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVG
aXhlZExlbmd0aERhdGEoeyBzdHJpbmcuY2hhcmFjdGVyczgoKSwgbGVuZ3RoIH0pOwogICAgIGVs
c2UKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnMxNigpKSwgbGVuZ3RoICogc2l6ZW9m
KFVDaGFyKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHsgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnMxNigpKSwgbGVuZ3Ro
ICogc2l6ZW9mKFVDaGFyKSB9KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+CkBAIC0xMTIsNyArMTEyLDcgQEAgc3RhdGljIGlubGluZSBzdGQ6Om9wdGlvbmFsPFN0cmlu
Zz4gZGVjbwogCiAgICAgQ2hhcmFjdGVyVHlwZSogYnVmZmVyOwogICAgIFN0cmluZyBzdHJpbmcg
PSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4o
YnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJhY3RlclR5cGUpKSkKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHsgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVm
ZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJhY3RlclR5cGUpIH0pKQogICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwogICAgIAogICAgIHJldHVybiBzdHJpbmc7CkBAIC0xNDIsMTMgKzE0Miwx
MyBAQCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gQ29kZXI8U3RyaW5nPjo6ZGVjCiAKIHZvaWQgQ29k
ZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNIQTE6OkRp
Z2VzdCYgZGlnZXN0KQogewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGRpZ2Vz
dC5kYXRhKCksIHNpemVvZihkaWdlc3QpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3Ro
RGF0YShkaWdlc3QpOwogfQogCiBzdGQ6Om9wdGlvbmFsPFNIQTE6OkRpZ2VzdD4gQ29kZXI8U0hB
MTo6RGlnZXN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgU0hBMTo6RGlnZXN0
IHRtcDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHRtcC5kYXRhKCks
IHNpemVvZih0bXApKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHRt
cCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgcmV0dXJuIHRtcDsKIH0KSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmgJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRD
b2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw3IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlciwgY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQogICAg
IHsKICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odmVjdG9yLnNpemUo
KSk7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6ZSgpICogc2l6ZW9m
KFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoeyByZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih2ZWN0b3IuZGF0YSgpKSwgdmVjdG9yLnNpemUoKSAqIHNp
emVvZihUKSB9KTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5Pj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCkBAIC0xNzMsNyAr
MTczLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAgICAg
ICBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IHRlbXA7CiAgICAgICAgIHRlbXAuZ3JvdyhzaXpl
KTsKIAotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KHRlbXAuZGF0YSgpKSwgc2l6ZSAqIHNpemVvZihUKSkpCisgICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoeyByZWludGVycHJldF9jYXN0
PHVpbnQ4X3QqPih0ZW1wLmRhdGEoKSksIHNpemUgKiBzaXplb2YoVCkgfSkpCiAgICAgICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgICAgIHJldHVybiB0ZW1wOwpJbmRleDogU291
cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERl
Y29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyMyArMzEsMjYgQEAKIG5hbWVzcGFjZSBX
VEYgewogbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAotRGVjb2Rlcjo6RGVjb2Rlcihjb25zdCB1
aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKQotICAgIDogbV9idWZmZXIoYnVmZmVy
KQotICAgICwgbV9idWZmZXJQb3NpdGlvbihidWZmZXIpCi0gICAgLCBtX2J1ZmZlckVuZChidWZm
ZXIgKyBidWZmZXJTaXplKQorRGVjb2Rlcjo6RGVjb2RlcihTcGFuPGNvbnN0IHVpbnQ4X3Q+IGJ1
ZmZlcikKKyAgICA6IERlY29kZXIoYXNCeXRlcyhidWZmZXIpKQogewogfQogCi1EZWNvZGVyOjp+
RGVjb2RlcigpCitEZWNvZGVyOjpEZWNvZGVyKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBidWZmZXIp
CisgICAgOiBtX2J1ZmZlcihidWZmZXIuZGF0YSgpKQorICAgICwgbV9idWZmZXJQb3NpdGlvbihi
dWZmZXIuZGF0YSgpKQorICAgICwgbV9idWZmZXJFbmQoYnVmZmVyLmRhdGEoKSArIGJ1ZmZlci5z
aXplKCkpCiB7CiB9CiAKK0RlY29kZXI6On5EZWNvZGVyKCkgPSBkZWZhdWx0OworCiBib29sIERl
Y29kZXI6OmJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZV90IHNpemUpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIHNpemUgPD0gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2J1ZmZlckVuZCAtIG1f
YnVmZmVyUG9zaXRpb24pOwogfQogCi1jb25zdCB1aW50OF90KiBEZWNvZGVyOjpidWZmZXJQb2lu
dGVyRm9yRGlyZWN0UmVhZChzaXplX3Qgc2l6ZSkKK2NvbnN0IHN0ZDo6Ynl0ZSogRGVjb2Rlcjo6
YnVmZmVyUG9pbnRlckZvckRpcmVjdFJlYWQoc2l6ZV90IHNpemUpCiB7CiAgICAgaWYgKCFidWZm
ZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKHNpemUpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
QEAgLTU1LDE2ICs1OCwyMSBAQCBjb25zdCB1aW50OF90KiBEZWNvZGVyOjpidWZmZXJQb2ludGVy
Rm9yCiAgICAgYXV0byBkYXRhID0gbV9idWZmZXJQb3NpdGlvbjsKICAgICBtX2J1ZmZlclBvc2l0
aW9uICs9IHNpemU7CiAKLSAgICBFbmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGEx
LCBkYXRhLCBzaXplKTsKKyAgICBFbmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGEx
LCBTcGFuIHsgZGF0YSwgc2l6ZSB9KTsKICAgICByZXR1cm4gZGF0YTsKIH0KIAotYm9vbCBEZWNv
ZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCiti
b29sIERlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPHVpbnQ4X3Q+IGRhdGEpCit7
CisgICAgcmV0dXJuIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShhc1dyaXRhYmxlQnl0ZXMoZGF0YSkp
OworfQorCitib29sIERlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPHN0ZDo6Ynl0
ZT4gZGF0YSkKIHsKLSAgICBhdXRvIGJ1ZmZlciA9IGJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFk
KHNpemUpOworICAgIGF1dG8gYnVmZmVyID0gYnVmZmVyUG9pbnRlckZvckRpcmVjdFJlYWQoZGF0
YS5zaXplKCkpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
bWVtY3B5KGRhdGEsIGJ1ZmZlciwgc2l6ZSk7CisgICAgbWVtY3B5KGRhdGEuZGF0YSgpLCBidWZm
ZXIsIGRhdGEuc2l6ZSgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTM5LDcgKzE0Nyw3
IEBAIGJvb2wgRGVjb2Rlcjo6dmVyaWZ5Q2hlY2tzdW0oKQogICAgIG1fc2hhMS5jb21wdXRlSGFz
aChjb21wdXRlZEhhc2gpOwogCiAgICAgU0hBMTo6RGlnZXN0IHNhdmVkSGFzaDsKLSAgICBpZiAo
IWRlY29kZUZpeGVkTGVuZ3RoRGF0YShzYXZlZEhhc2guZGF0YSgpLCBzaXplb2Yoc2F2ZWRIYXNo
KSkpCisgICAgaWYgKCFkZWNvZGVGaXhlZExlbmd0aERhdGEoc2F2ZWRIYXNoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIGNvbXB1dGVkSGFzaCA9PSBzYXZlZEhhc2g7Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmgJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3Rl
bnREZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUg
PHd0Zi9FbnVtVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL1NIQTEuaD4KKyNpbmNsdWRlIDx3dGYv
U3Bhbi5oPgogI2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaD4KIAog
bmFtZXNwYWNlIFdURiB7CkBAIC0zNSw3ICszNiw4IEBAIG5hbWVzcGFjZSBQZXJzaXN0ZW5jZSB7
CiBjbGFzcyBEZWNvZGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
LSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVjb2Rlcihjb25zdCB1aW50OF90KiBidWZmZXIsIHNp
emVfdCBidWZmZXJTaXplKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVjb2RlcihTcGFuPGNv
bnN0IHVpbnQ4X3Q+KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVjb2RlcihTcGFuPGNvbnN0
IHN0ZDo6Ynl0ZT4pOwogICAgIFdURl9FWFBPUlRfUFJJVkFURSB+RGVjb2RlcigpOwogCiAgICAg
c2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyRW5kIC0gbV9idWZmZXI7IH0K
QEAgLTQzLDcgKzQ1LDggQEAgcHVibGljOgogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIFdBUk5f
VU5VU0VEX1JFVFVSTiBib29sIHZlcmlmeUNoZWNrc3VtKCk7CiAKLSAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4
X3QqLCBzaXplX3QpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBXQVJOX1VOVVNFRF9SRVRVUk4g
Ym9vbCBkZWNvZGVGaXhlZExlbmd0aERhdGEoU3Bhbjx1aW50OF90Pik7CisgICAgV1RGX0VYUE9S
VF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShT
cGFuPHN0ZDo6Ynl0ZT4pOwogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIERlY29kZXImIG9wZXJh
dG9yPj4oc3RkOjpvcHRpb25hbDxib29sPiYpOwogICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNv
ZGVyJiBvcGVyYXRvcj4+KHN0ZDo6b3B0aW9uYWw8dWludDhfdD4mKTsKQEAgLTg0LDcgKzg3LDcg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbnVtRWxlbWVudHMgPD0gc3RkOjpudW1lcmljX2xp
bWl0czxzaXplX3Q+OjptYXgoKSAvIHNpemVvZihUKSAmJiBidWZmZXJJc0xhcmdlRW5vdWdoVG9D
b250YWluKG51bUVsZW1lbnRzICogc2l6ZW9mKFQpKTsKICAgICB9CiAKLSAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgV0FSTl9VTlVTRURfUkVUVVJOIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlclBvaW50ZXJG
b3JEaXJlY3RSZWFkKHNpemVfdCBudW1CeXRlcyk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFdB
Uk5fVU5VU0VEX1JFVFVSTiBjb25zdCBzdGQ6OmJ5dGUqIGJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RS
ZWFkKHNpemVfdCBudW1CeXRlcyk7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJUENE
ZWNvZGVyID0gZmFsc2U7CiAKQEAgLTkyLDkgKzk1LDkgQEAgcHJpdmF0ZToKICAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgYnVmZmVySXNMYXJnZUVub3VnaFRv
Q29udGFpbihzaXplX3QpIGNvbnN0OwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+IERlY29k
ZXImIGRlY29kZU51bWJlcihzdGQ6Om9wdGlvbmFsPFR5cGU+Jik7CiAKLSAgICBjb25zdCB1aW50
OF90KiBtX2J1ZmZlcjsKLSAgICBjb25zdCB1aW50OF90KiBtX2J1ZmZlclBvc2l0aW9uOwotICAg
IGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyRW5kOworICAgIGNvbnN0IHN0ZDo6Ynl0ZSogbV9idWZm
ZXI7CisgICAgY29uc3Qgc3RkOjpieXRlKiBtX2J1ZmZlclBvc2l0aW9uOworICAgIGNvbnN0IHN0
ZDo6Ynl0ZSogbV9idWZmZXJFbmQ7CiAKICAgICBTSEExIG1fc2hhMTsKIH07CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuY3BwCShyZXZp
c2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5j
b2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDM0ICszMSwzOSBAQAogbmFtZXNwYWNlIFdU
RiB7CiBuYW1lc3BhY2UgUGVyc2lzdGVuY2UgewogCi1FbmNvZGVyOjpFbmNvZGVyKCkKK0VuY29k
ZXI6OkVuY29kZXIoKSA9IGRlZmF1bHQ7CitFbmNvZGVyOjp+RW5jb2RlcigpID0gZGVmYXVsdDsK
Kworc3RkOjpieXRlKiBFbmNvZGVyOjpncm93KHNpemVfdCBzaXplKQogeworICAgIHNpemVfdCBu
ZXdQb3NpdGlvbiA9IG1fYnVmZmVyLnNpemUoKTsKKyAgICBtX2J1ZmZlci5ncm93KG1fYnVmZmVy
LnNpemUoKSArIHNpemUpOworICAgIHJldHVybiBtX2J1ZmZlci5kYXRhKCkgKyBuZXdQb3NpdGlv
bjsKIH0KIAotRW5jb2Rlcjo6fkVuY29kZXIoKQordm9pZCBFbmNvZGVyOjp1cGRhdGVDaGVja3N1
bUZvckRhdGEoU0hBMSYgc2hhMSwgU3Bhbjxjb25zdCB1aW50OF90PiBkYXRhKQogeworICAgIHJl
dHVybiB1cGRhdGVDaGVja3N1bUZvckRhdGEoc2hhMSwgYXNCeXRlcyhkYXRhKSk7CiB9CiAKLXVp
bnQ4X3QqIEVuY29kZXI6Omdyb3coc2l6ZV90IHNpemUpCit2b2lkIEVuY29kZXI6OnVwZGF0ZUNo
ZWNrc3VtRm9yRGF0YShTSEExJiBzaGExLCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsK
LSAgICBzaXplX3QgbmV3UG9zaXRpb24gPSBtX2J1ZmZlci5zaXplKCk7Ci0gICAgbV9idWZmZXIu
Z3JvdyhtX2J1ZmZlci5zaXplKCkgKyBzaXplKTsKLSAgICByZXR1cm4gbV9idWZmZXIuZGF0YSgp
ICsgbmV3UG9zaXRpb247CisgICAgYXV0byB0eXBlU2FsdCA9IFNhbHQ8dWludDhfdCo+Ojp2YWx1
ZTsKKyAgICBzaGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7ICZ0eXBlU2FsdCwgMSB9KSk7Cisg
ICAgc2hhMS5hZGRCeXRlcyhkYXRhKTsKIH0KIAotdm9pZCBFbmNvZGVyOjp1cGRhdGVDaGVja3N1
bUZvckRhdGEoU0hBMSYgc2hhMSwgY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCit2
b2lkIEVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHVpbnQ4X3Q+IGRh
dGEpCiB7Ci0gICAgYXV0byB0eXBlU2FsdCA9IFNhbHQ8dWludDhfdCo+Ojp2YWx1ZTsKLSAgICBz
aGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ0eXBlU2FsdCksIHNpemVv
Zih0eXBlU2FsdCkpOwotICAgIHNoYTEuYWRkQnl0ZXMoZGF0YSwgc2l6ZSk7CisgICAgcmV0dXJu
IGVuY29kZUZpeGVkTGVuZ3RoRGF0YShhc0J5dGVzKGRhdGEpKTsKIH0KIAotdm9pZCBFbmNvZGVy
OjplbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUp
Cit2b2lkIEVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0
ZT4gZGF0YSkKIHsKLSAgICB1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhLCBzaXpl
KTsKKyAgICB1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhKTsKIAotICAgIHVpbnQ4
X3QqIGJ1ZmZlciA9IGdyb3coc2l6ZSk7Ci0gICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7
CisgICAgYXV0byogYnVmZmVyID0gZ3JvdyhkYXRhLnNpemUoKSk7CisgICAgbWVtY3B5KGJ1ZmZl
ciwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlw
ZT4KQEAgLTY2LDcgKzcxLDcgQEAgRW5jb2RlciYgRW5jb2Rlcjo6ZW5jb2RlTnVtYmVyKFR5cGUg
dmFsdQogewogICAgIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKG1fc2hhMSwgdmFs
dWUpOwogCi0gICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhzaXplb2YoVHlwZSkpOworICAgIGF1
dG8qIGJ1ZmZlciA9IGdyb3coc2l6ZW9mKFR5cGUpKTsKICAgICBtZW1jcHkoYnVmZmVyLCAmdmFs
dWUsIHNpemVvZihUeXBlKSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQpAQCAtMTI1LDcgKzEzMCw3
IEBAIHZvaWQgRW5jb2Rlcjo6ZW5jb2RlQ2hlY2tzdW0oKQogewogICAgIFNIQTE6OkRpZ2VzdCBo
YXNoOwogICAgIG1fc2hhMS5jb21wdXRlSGFzaChoYXNoKTsKLSAgICBlbmNvZGVGaXhlZExlbmd0
aERhdGEoaGFzaC5kYXRhKCksIGhhc2guc2l6ZSgpKTsKKyAgICBlbmNvZGVGaXhlZExlbmd0aERh
dGEoYXNCeXRlcyhTcGFuIHsgaGFzaCB9KSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4K
ICNpbmNsdWRlIDx3dGYvU0hBMS5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXIu
aD4KIApAQCAtNDMsNyArNDQsOCBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5F
bmNvZGVyKCk7CiAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGVDaGVja3N1bSgp
OwotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShjb25z
dCB1aW50OF90Kiwgc2l6ZV90KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGVG
aXhlZExlbmd0aERhdGEoU3Bhbjxjb25zdCB1aW50OF90Pik7CisgICAgV1RGX0VYUE9SVF9QUklW
QVRFIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZW51bTxU
Pjo6dmFsdWU+KiA9IG51bGxwdHI+CiAgICAgRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBUJiB0
KQpAQCAtNzAsMjMgKzcyLDIyIEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRW5j
b2RlciYgb3BlcmF0b3I8PChmbG9hdCk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIEVuY29kZXIm
IG9wZXJhdG9yPDwoZG91YmxlKTsKIAotICAgIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlcigpIGNvbnN0
IHsgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKTsgfQotICAgIHNpemVfdCBidWZmZXJTaXplKCkgY29u
c3QgeyByZXR1cm4gbV9idWZmZXIuc2l6ZSgpOyB9Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBjb25zdCB1aW50OF90Kiwg
c2l6ZV90KTsKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnVmZmVyKCkgY29uc3QgeyByZXR1
cm4gbV9idWZmZXI7IH0KKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQg
dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBTcGFuPGNvbnN0IHVpbnQ4X3Q+KTsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEm
LCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPiBz
dGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZvck51bWJlcihTSEExJiwgVHlwZSk7CiAKICAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNJUENFbmNvZGVyID0gZmFsc2U7CiAKIHByaXZhdGU6Ci0K
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiBFbmNvZGVyJiBlbmNvZGVOdW1iZXIoVHlwZSk7
CiAKLSAgICB1aW50OF90KiBncm93KHNpemVfdCk7CisgICAgc3RkOjpieXRlKiBncm93KHNpemVf
dCk7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4gc3RydWN0IFNhbHQ7CiAKLSAgICBW
ZWN0b3I8dWludDhfdCwgNDA5Nj4gbV9idWZmZXI7CisgICAgVmVjdG9yPHN0ZDo6Ynl0ZSwgNDA5
Nj4gbV9idWZmZXI7CiAgICAgU0hBMSBtX3NoYTE7CiB9OwogCkBAIC0xMDYsOCArMTA3LDggQEAg
dGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+CiB2b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9y
TnVtYmVyKFNIQTEmIHNoYTEsIFR5cGUgdmFsdWUpCiB7CiAgICAgYXV0byB0eXBlU2FsdCA9IFNh
bHQ8VHlwZT46OnZhbHVlOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7Ci0gICAgc2hhMS5hZGRCeXRlcyhy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWUpLCBzaXplb2YodmFsdWUpKTsKKyAgICBz
aGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7ICZ0eXBlU2FsdCwgMSB9KSk7CisgICAgc2hhMS5h
ZGRCeXRlcyhhc0J5dGVzKFNwYW4geyAmdmFsdWUsIDEgfSkpOwogfQogCiB9CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3Rl
eHQvQmFzZTY0LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQmFz
ZTY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorI2luY2x1ZGUgPHd0Zi9TcGFu
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNjAsMTQgKzYxLDEyIEBAIFdURl9FWFBPUlRfUFJJ
VkFURSB2b2lkIGJhc2U2NEVuY29kZShjb24KIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2
NEVuY29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQsIExDaGFyKiwgdW5zaWduZWQsIEJhc2U2NEVu
Y29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVu
Y29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CiAKIFdURl9FWFBPUlRfUFJJVkFU
RSBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3Qgdm9pZCosIHVuc2ln
bmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0
TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwotVmVjdG9y
PHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIEJh
c2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJh
c2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci1WZWN0b3I8dWludDhf
dD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPGNoYXI+JiwgQmFzZTY0RW5jb2Rl
UG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2Rl
TWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRF
bmNvZGVUb1ZlY3Rvcihjb25zdCBDU3RyaW5nJiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0
RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5j
b2RlTWFwOjpEZWZhdWx0KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBOPiBWZWN0b3I8
dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoU3BhbjxULCBOPiwgQmFzZTY0RW5jb2RlUG9s
aWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFw
ID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKIAogV1RGX0VYUE9SVF9QUklWQVRFIFN0cmlu
ZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdCB2b2lkKiwgdW5zaWduZWQsIEJhc2U2NEVuY29k
ZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29k
ZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci1TdHJpbmcgYmFzZTY0RW5jb2RlVG9T
dHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0
RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5j
b2RlTWFwOjpEZWZhdWx0KTsKLVN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdCBWZWN0
b3I8Y2hhcj4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90
SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwog
U3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IENTdHJpbmcmLCBCYXNlNjRFbmNvZGVQ
b2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVN
YXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IE4+IFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuPFQsIE4+LCBCYXNlNjRFbmNv
ZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNv
ZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwogCiBXVEZfRVhQT1JUX1BSSVZBVEUg
c3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBTdHJpbmcm
LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9
IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRp
b25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShTdHJpbmdWaWV3LCBPcHRpb25TZXQ8
QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29k
ZU1hcDo6RGVmYXVsdCk7CkBAIC03NiwzNCArNzUsMjQgQEAgV1RGX0VYUE9SVF9QUklWQVRFIHN0
ZDo6b3B0aW9uYWw8VmVjdG9yPAogV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0aW9uYWw8VmVj
dG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgdWludDhfdCosIHVuc2lnbmVkLCBPcHRp
b25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2
NERlY29kZU1hcDo6RGVmYXVsdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxW
ZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBjaGFyKiwgdW5zaWduZWQsIE9wdGlv
blNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFwID0gQmFzZTY0
RGVjb2RlTWFwOjpEZWZhdWx0KTsKIAotaW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNv
ZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xp
Y3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQotewotICAgIHJldHVybiBiYXNlNjRFbmNv
ZGVUb1ZlY3RvcihpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5LCBtYXApOwotfQot
Ci1pbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IFZlY3Rv
cjxjaGFyPiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1h
cCBtYXApCi17Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlucHV0LmRhdGEoKSwg
aW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7Ci19Ci0KIGlubGluZSBWZWN0b3I8dWludDhfdD4g
YmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgQ1N0cmluZyYgaW5wdXQsIEJhc2U2NEVuY29kZVBv
bGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVu
Y29kZVRvVmVjdG9yKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIHBvbGljeSwgbWFwKTsK
KyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuYnl0ZXMoKSwgcG9saWN5LCBt
YXApOwogfQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29k
ZU1hcCBtYXApCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgTj4gVmVjdG9yPHVpbnQ4X3Q+
IGJhc2U2NEVuY29kZVRvVmVjdG9yKFNwYW48VCwgTj4gaW5wdXQsIEJhc2U2NEVuY29kZVBvbGlj
eSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29k
ZVRvU3RyaW5nKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7CisgICAg
cmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZV9ieXRl
cygpLCBwb2xpY3ksIG1hcCk7CiB9CiAKLWlubGluZSBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJp
bmcoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwg
QmFzZTY0RW5jb2RlTWFwIG1hcCkKK2lubGluZSBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmco
Y29uc3QgQ1N0cmluZyYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVu
Y29kZU1hcCBtYXApCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LmRh
dGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29k
ZVRvU3RyaW5nKGlucHV0LmJ5dGVzKCksIHBvbGljeSwgbWFwKTsKIH0KIAotaW5saW5lIFN0cmlu
ZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdCBDU3RyaW5nJiBpbnB1dCwgQmFzZTY0RW5jb2Rl
UG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHNpemVfdCBOPiBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoU3BhbjxULCBOPiBpbnB1dCwg
QmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBy
ZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwg
cG9saWN5LCBtYXApOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRh
KCksIGlucHV0LnNpemVfYnl0ZXMoKSwgcG9saWN5LCBtYXApOwogfQogCiAKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3Rl
eHQvQ1N0cmluZy5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0NT
dHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPHd0Zi9I
YXNoVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTM5
LDkgKzQwLDExIEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEMKIGNs
YXNzIENTdHJpbmdCdWZmZXIgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxDU3RyaW5nQnVmZmVy
PiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURfV0lUSF9IRUFQX0lERU5USUZJRVIoQ1N0
cmluZ0J1ZmZlcik7CiBwdWJsaWM6Ci0gICAgY29uc3QgY2hhciogZGF0YSgpIHsgcmV0dXJuIG11
dGFibGVEYXRhKCk7IH0KKyAgICBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gY29u
c3RfY2FzdDxDU3RyaW5nQnVmZmVyKj4odGhpcyktPm11dGFibGVEYXRhKCk7IH0KICAgICBzaXpl
X3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KIAorICAgIFNwYW48Y29uc3Qg
c3RkOjpieXRlPiBieXRlcygpIGNvbnN0IHsgcmV0dXJuIGFzQnl0ZXMoU3BhbiB7IGRhdGEoKSwg
bGVuZ3RoKCkgfSk7IH0KKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ1N0cmluZzsKIApA
QCAtNjYsNiArNjksMjAgQEAgcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMg
Q1N0cmluZyBuZXdVbmluaXRpYWxpemVkKHNpemVfdCBsZW5ndGgsIGNoYXIqJiBjaGFyYWN0ZXJC
dWZmZXIpOwogICAgIENTdHJpbmcoSGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkgOiBtX2J1ZmZl
cihIYXNoVGFibGVEZWxldGVkVmFsdWUpIHsgfQogCisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+
IGJ5dGVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2J1ZmZlcikKKyAgICAgICAgICAg
IHJldHVybiBtX2J1ZmZlci0+Ynl0ZXMoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisK
KyAgICBTcGFuPHN0ZDo6Ynl0ZT4gbXV0YWJsZUJ5dGVzKCkKKyAgICB7CisgICAgICAgIGlmIChh
dXRvIG11dGFibGVEYXRhID0gdGhpcy0+bXV0YWJsZURhdGEoKSkKKyAgICAgICAgICAgIHJldHVy
biBhc1dyaXRhYmxlQnl0ZXMoU3BhbiB7IG11dGFibGVEYXRhLCBtX2J1ZmZlci0+bGVuZ3RoKCkg
fSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCiAgICAgY29uc3QgY2hhciogZGF0YSgp
IGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9idWZmZXIgPyBtX2J1ZmZlci0+ZGF0YSgp
IDogbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzYzLDkgKzM2Myw5IEBAIFN0cmluZyBjcmVhdGVUZW1wb3JhcnlEaXJl
Y3RvcnkoKQogICAgIH0pOwogfQogCi1ib29sIHVubWFwVmlld09mRmlsZSh2b2lkKiBidWZmZXIs
IHNpemVfdCkKK2Jvb2wgdW5tYXBWaWV3T2ZGaWxlKFNwYW48c3RkOjpieXRlPiBkYXRhKQogewot
ICAgIHJldHVybiBVbm1hcFZpZXdPZkZpbGUoYnVmZmVyKTsKKyAgICByZXR1cm4gVW5tYXBWaWV3
T2ZGaWxlKGRhdGEuZGF0YSgpKTsKIH0KIAogYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhh
bmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBGaWxlT3Blbk1vZGUgb3Blbk1vZGUsIE1h
cHBlZEZpbGVNb2RlKQpAQCAtMzc0LDcgKzM3NCw3IEBAIGJvb2wgTWFwcGVkRmlsZURhdGE6Om1h
cEZpbGVIYW5kbGUoUGxhdGYKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byBzaXpl
ID0gZmlsZVNpemUoaGFuZGxlKTsKLSAgICBpZiAoIXNpemUgfHwgKnNpemUgPiBzdGQ6Om51bWVy
aWNfbGltaXRzPHNpemVfdD46Om1heCgpIHx8ICpzaXplID4gc3RkOjpudW1lcmljX2xpbWl0czxk
ZWNsdHlwZShtX2ZpbGVTaXplKT46Om1heCgpKSB7CisgICAgaWYgKCFzaXplIHx8ICpzaXplID4g
c3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSB8fCAqc2l6ZSA+IHN0ZDo6bnVtZXJp
Y19saW1pdHM8ZGVjbHR5cGUobV9maWxlRGF0YS5zaXplKCkpPjo6bWF4KCkpIHsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNDAzLDExICs0MDMsMTIgQEAgYm9vbCBNYXBwZWRG
aWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0ZgogICAgIGlmICghbWFwcGluZykKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgbV9maWxlRGF0YSA9IE1hcFZpZXdPZkZpbGUobWFwcGluZywg
ZGVzaXJlZEFjY2VzcywgMCwgMCwgKnNpemUpOworICAgIGF1dG8gZGF0YSA9IE1hcFZpZXdPZkZp
bGUobWFwcGluZywgZGVzaXJlZEFjY2VzcywgMCwgMCwgKnNpemUpOwogICAgIENsb3NlSGFuZGxl
KG1hcHBpbmcpOwotICAgIGlmICghbV9maWxlRGF0YSkKKyAgICBpZiAoIWRhdGEpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBtX2ZpbGVTaXplID0gKnNpemU7CisKKyAgICBtX2ZpbGVEYXRh
ID0gU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpieXRlKj4oZGF0YSksICpzaXplIH07CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODgwOSkKKysr
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBA
CisyMDIxLTA2LTExICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogTW9kdWxlcy9oaWdobGlnaHQvQXBw
SGlnaGxpZ2h0Lmg6CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHQ6OmVuY29kZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHQ6OmRlY29kZSk6CisgICAgICAgICog
TW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6dG9TaGFyZWRCdWZmZXIgY29uc3QpOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvclJlc3BvbnNlRGF0YS5oOgorICAg
ICAgICAoV2ViQ29yZTo6ZW5jb2RlQXJyYXlCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZGVj
b2RlQXJyYXlCdWZmZXIpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3Jl
ZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oOgorICAgICAgICAoV2ViQ29yZTo6UHVibGljS2V5Q3Jl
ZGVudGlhbENyZWF0aW9uT3B0aW9uczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmg6CisgICAgICAgIChXZWJD
b3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcjo6ZW5jb2RlIGNvbnN0KToKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRXZWJTb2NrZXRBY2NlcHQp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0J1ZmZlclNvdXJjZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6QnVmZmVyU291cmNlOjpieXRlcyBjb25zdCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OmRlY29kZSk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvU2VyaWFsaXplZE5G
QS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6U2VyaWFsaXplZE5G
QTo6cG9pbnRlckF0T2Zmc2V0SW5GaWxlIGNvbnN0KToKKyAgICAgICAgKiBjcnlwdG8vbWFjL1Nl
cmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQW5k
U3RvcmVNYXN0ZXJLZXkpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Omhhc2hQb2ludGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBhdGNoU3VwcG9ydDo6Y3JlYXRlRGlnZXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OmFkZFN0cmluZ1RvU0hBMSk6IERlbGV0ZWQuCisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZpY2F0ZSk6CisgICAgICAgICogaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yTmV0d29ya0FnZW50OjpnZXRTZXJpYWxpemVkQ2VydGlmaWNhdGUpOgorICAgICAgICAq
IHBsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBh
c3RlYm9hcmRDdXN0b21EYXRhOjpjcmVhdGVTaGFyZWRCdWZmZXIgY29uc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZm
ZXI6OlNoYXJlZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmFwcGVu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpkYXRhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmJ5dGVz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6ZGVjb2RlciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpzaXplIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaDoKKyAgICAgICAgKFdlYkNv
cmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Nb2RlbC5oOgorICAgICAgICAoV2ViQ29yZTo6TW9kZWw6OmVuY29kZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNb2RlbDo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6UGl4ZWxCdWZm
ZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6ZGVjb2Rl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2Fw
YWJpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpDYXBhYmlsaXR5VmFsdWVPclJhbmdlOjpl
bmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FwYWJpbGl0eVZhbHVlT3JSYW5nZTo6
ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZFN0cmluZ1RvU0hBMSk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHA6CisgICAg
ICAgIChXVEY6OlBlcnNpc3RlbmNlOjplbmNvZGVDRkRhdGEpOgorICAgICAgICAoV1RGOjpQZXJz
aXN0ZW5jZTo6ZGVjb2RlQ0ZEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlU3Rh
dGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2Ip
OgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaDoKKyAgICAgICAgKiB3
b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzKToKKyAgICAgICAg
KiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTV1NjcmlwdFN0b3JhZ2U6OnN0b3JlKToKKwogMjAyMS0wNi0xMSAgQ2hyaXMgRHVt
ZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIExhemlseSBjb21wdXRlIFNlY3VyaXR5
T3JpZ2luOjptX2lzUG90ZW50aWFsbHlUcnVzdHdvcnRoeSBmb3IgcGVyZm9ybWFuY2UKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodC5oCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9BcHBI
aWdobGlnaHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPgogdm9pZCBBcHBIaWdobGlnaHQ6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAogewogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihoaWdobGlnaHQtPnNp
emUoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoaGlnaGxpZ2h0LT5kYXRh
KCksIGhpZ2hsaWdodC0+c2l6ZSgpLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3Ro
RGF0YSgqaGlnaGxpZ2h0LCAxKTsKIAogICAgIGVuY29kZXIgPDwgdGV4dDsKIApAQCAtNzUsNyAr
NzUsNyBAQCBzdGQ6Om9wdGlvbmFsPEFwcEhpZ2hsaWdodD4gQXBwSGlnaGxpZ2h0CiAKICAgICBW
ZWN0b3I8dWludDhfdD4gaGlnaGxpZ2h0OwogICAgIGhpZ2hsaWdodC5ncm93KCpsZW5ndGgpOwot
ICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoaGlnaGxpZ2h0LmRhdGEoKSwg
aGlnaGxpZ2h0LnNpemUoKSwgMSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3Ro
RGF0YShoaWdobGlnaHQsIDEpKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAg
c3RkOjpvcHRpb25hbDxzdGQ6Om9wdGlvbmFsPFN0cmluZz4+IHRleHQ7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHRSYW5nZURhdGEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFJh
bmdlRGF0YS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFJhbmdlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUz
LDcgKzUzLDcgQEAgUmVmPFNoYXJlZEJ1ZmZlcj4gQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhOgogewog
ICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2RlcjsKICAgICBlbmNvZGVyIDw8ICp0
aGlzOwotICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShlbmNvZGVyLmJ1ZmZlcigpLCBl
bmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGVu
Y29kZXIuYnVmZmVyKCkpOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIEFwcEhp
Z2hsaWdodFJhbmdlRGF0YTo6Tm9kZVBhdGhDb21wb25lbnQ6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50
aWNhdG9yUmVzcG9uc2VEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdXRobi9BdXRoZW50aWNhdG9yUmVzcG9uc2VEYXRhLmgJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvclJlc3BvbnNl
RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+CiBzdGF0aWMgdm9pZCBlbmNvZGVBcnJheUJ1ZmZlcihFbmNvZGVyJiBlbmNvZGVyLCBj
b25zdCBBcnJheUJ1ZmZlciYgYnVmZmVyKQogewogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KGJ1ZmZlci5ieXRlTGVuZ3RoKCkpOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihidWZmZXIuZGF0YSgpKSwgYnVm
ZmVyLmJ5dGVMZW5ndGgoKSwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEo
YnVmZmVyLmJ5dGVzKCksIDEpOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgpAQCAtNzUs
NyArNzUsNyBAQCBSZWZQdHI8QXJyYXlCdWZmZXI+IGRlY29kZUFycmF5QnVmZmVyKERlCiAgICAg
YXV0byBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKGxlbmd0aC52YWx1ZSgpLCBzaXpl
b2YodWludDhfdCkpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHN0YXRpY19jYXN0PHVpbnQ4
X3QqPihidWZmZXItPmRhdGEoKSksIGxlbmd0aC52YWx1ZSgpLCAxKSkKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ1ZmZlci0+d3JpdGFibGVCeXRlcygpLCAxKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIGJ1ZmZlcjsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0
aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVi
bGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlv
bk9wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDggKzE0MSw4IEBAIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+CiB2b2lkIFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgcnAuaWQgPDwg
cnAubmFtZSA8PCBycC5pY29uOwotICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KHVzZXIuaWQubGVuZ3RoKCkpOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHVz
ZXIuaWQuZGF0YSgpLCB1c2VyLmlkLmxlbmd0aCgpLCAxKTsKKyAgICBlbmNvZGVyIDw8IHN0YXRp
Y19jYXN0PHVpbnQ2NF90Pih1c2VyLmlkLmJ5dGVzKCkuc2l6ZSgpKTsKKyAgICBlbmNvZGVyLmVu
Y29kZUZpeGVkTGVuZ3RoRGF0YSh1c2VyLmlkLmJ5dGVzKCksIDEpOwogICAgIGVuY29kZXIgPDwg
dXNlci5kaXNwbGF5TmFtZSA8PCB1c2VyLm5hbWUgPDwgdXNlci5pY29uIDw8IHB1YktleUNyZWRQ
YXJhbXMgPDwgdGltZW91dCA8PCBleGNsdWRlQ3JlZGVudGlhbHMgPDwgYXV0aGVudGljYXRvclNl
bGVjdGlvbiA8PCBhdHRlc3RhdGlvbiA8PCBleHRlbnNpb25zOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlD
cmVkZW50aWFsRGVzY3JpcHRvci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDggKzQ3LDggQEAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQg
UHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3I6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAogewogICAgIGVuY29kZXIgPDwgdHlwZTsKLSAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0
PHVpbnQ2NF90PihpZC5sZW5ndGgoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERh
dGEoaWQuZGF0YSgpLCBpZC5sZW5ndGgoKSwgMSk7CisgICAgZW5jb2RlciA8PCBzdGF0aWNfY2Fz
dDx1aW50NjRfdD4oaWQuYnl0ZXMoKS5zaXplKCkpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKGlkLmJ5dGVzKCksIDEpOwogICAgIGVuY29kZXIgPDwgdHJhbnNwb3J0czsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRz
aGFrZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRz
L1dlYlNvY2tldEhhbmRzaGFrZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDMsMTMgKzEwMywxNCBAQCBzdGF0aWMgU3RyaW5nIGdlbmVyYXRlU2VjV2ViU29j
a2V0S2V5KCkKIFN0cmluZyBXZWJTb2NrZXRIYW5kc2hha2U6OmdldEV4cGVjdGVkV2ViU29ja2V0
QWNjZXB0KGNvbnN0IFN0cmluZyYgc2VjV2ViU29ja2V0S2V5KQogewogICAgIGNvbnN0ZXhwciB1
aW50OF90IHdlYlNvY2tldEtleUdVSURbXSA9ICIyNThFQUZBNS1FOTE0LTQ3REEtOTVDQS1DNUFC
MERDODVCMTEiOworCiAgICAgU0hBMSBzaGExOwotICAgIENTdHJpbmcga2V5RGF0YSA9IHNlY1dl
YlNvY2tldEtleS5hc2NpaSgpOwotICAgIHNoYTEuYWRkQnl0ZXMoa2V5RGF0YS5kYXRhQXNVSW50
OFB0cigpLCBrZXlEYXRhLmxlbmd0aCgpKTsKLSAgICBzaGExLmFkZEJ5dGVzKHdlYlNvY2tldEtl
eUdVSUQsIHN0ZDo6c2l6ZSh3ZWJTb2NrZXRLZXlHVUlEKSAtIDEpOworICAgIHNoYTEuYWRkQnl0
ZXMoc2VjV2ViU29ja2V0S2V5LmFzY2lpKCkpOworICAgIHNoYTEuYWRkQnl0ZXMoYXNCeXRlcyhT
cGFuIHsgd2ViU29ja2V0S2V5R1VJRCB9KSk7CisKICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAg
ICBzaGExLmNvbXB1dGVIYXNoKGhhc2gpOwotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmlu
ZyhoYXNoLmRhdGEoKSwgU0hBMTo6aGFzaFNpemUpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVU
b1N0cmluZyhTcGFuIHsgaGFzaCB9KTsKIH0KIAogV2ViU29ja2V0SGFuZHNoYWtlOjpXZWJTb2Nr
ZXRIYW5kc2hha2UoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wsIGNvbnN0
IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIGNsaWVudE9yaWdpbiwgYm9vbCBhbGxv
d0Nvb2tpZXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9CdWZmZXJTb3VyY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9CdWZmZXJTb3VyY2Uu
aAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQnVmZmVy
U291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDEzIEBAIHB1YmxpYzoKICAgICAg
ICAgfSwgbV92YXJpYW50KTsKICAgICB9CiAKKyAgICBTcGFuPGNvbnN0IHVpbnQ4X3Q+IGJ5dGVz
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnZpc2l0KFtdKGF1dG8mIGJ1ZmZl
cikgLT4gU3Bhbjxjb25zdCB1aW50OF90PiB7CisgICAgICAgICAgICByZXR1cm4gYnVmZmVyID8g
U3Bhbjxjb25zdCB1aW50OF90PiB7IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihidWZmZXIt
PmRhdGEoKSksIGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIH0gOiBTcGFuPGNvbnN0IHVpbnQ4X3Q+IHsg
fTsKKyAgICAgICAgfSwgbV92YXJpYW50KTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgVmFyaWFu
dFR5cGUgbV92YXJpYW50OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMTY0LDE1ICsxNjQsMTUgQEAgdm9pZCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmVu
Y29kZShFbmNvZAogCiAgICAgaWYgKGhhc0FycmF5KSB7CiAgICAgICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KG1fYXJyYXlCdWZmZXJDb250ZW50c0FycmF5LT5zaXplKCkpOwot
ICAgICAgICBmb3IgKGNvbnN0IGF1dG8gJmFycmF5QnVmZmVyQ29udGVudHMgOiAqbV9hcnJheUJ1
ZmZlckNvbnRlbnRzQXJyYXkpIHsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBhcnJheUJ1ZmZl
ckNvbnRlbnRzIDogKm1fYXJyYXlCdWZmZXJDb250ZW50c0FycmF5KSB7CiAgICAgICAgICAgICBl
bmNvZGVyIDw8IGFycmF5QnVmZmVyQ29udGVudHMuc2l6ZUluQnl0ZXMoKTsKLSAgICAgICAgICAg
IGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihhcnJheUJ1ZmZlckNvbnRlbnRzLmRhdGEoKSksIGFycmF5QnVmZmVyQ29udGVudHMuc2l6ZUlu
Qnl0ZXMoKSwgMSk7CisgICAgICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShh
cnJheUJ1ZmZlckNvbnRlbnRzLmJ5dGVzKCksIDEpOwogICAgICAgICB9CiAgICAgfQogCiAjaWYg
RU5BQkxFKFdFQl9SVEMpCiAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4obV9k
ZXRhY2hlZFJUQ0RhdGFDaGFubmVscy5zaXplKCkpOwotICAgIGZvciAoY29uc3QgYXV0byAmY2hh
bm5lbCA6IG1fZGV0YWNoZWRSVENEYXRhQ2hhbm5lbHMpCisgICAgZm9yIChjb25zdCBhdXRvJiBj
aGFubmVsIDogbV9kZXRhY2hlZFJUQ0RhdGFDaGFubmVscykKICAgICAgICAgZW5jb2RlciA8PCAq
Y2hhbm5lbDsKICNlbmRpZgogfQpAQCAtMjA2LDcgKzIwNiw3IEBAIFJlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWQKICAgICAgICAgICAgIGF1dG8gYnVmZmVyID0gR2lnYWNh
Z2U6OnRyeU1hbGxvYyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBidWZmZXJTaXplKTsKICAgICAgICAg
ICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShzdGF0aWNfY2FzdDx1aW50
OF90Kj4oYnVmZmVyKSwgYnVmZmVyU2l6ZSwgMSkpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IHN0YXRpY19jYXN0PHN0ZDo6Ynl0ZSo+KGJ1
ZmZlciksIGJ1ZmZlclNpemUgfSwgMSkpIHsKICAgICAgICAgICAgICAgICBHaWdhY2FnZTo6ZnJl
ZShHaWdhY2FnZTo6UHJpbWl0aXZlLCBidWZmZXIpOwogICAgICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvU2VyaWFsaXplZE5GQS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvU2VyaWFsaXplZE5GQS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL1NlcmlhbGl6ZWRORkEuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgU2VyaWFsaXplZE5GQTo6U2VyaWFsaXplZE5GQShG
aWxlU3lzdGVtOgogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGNvbnN0IFQqIFNlcmlhbGl6ZWRORkE6
OnBvaW50ZXJBdE9mZnNldEluRmlsZShzaXplX3Qgb2Zmc2V0KSBjb25zdAogewotICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PGNvbnN0IFQqPihzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4o
bV9maWxlLmRhdGEoKSkgKyBvZmZzZXQpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNv
bnN0IFQqPihtX2ZpbGUuZGF0YSgpLmRhdGEoKSArIG9mZnNldCk7CiB9CiAKIGF1dG8gU2VyaWFs
aXplZE5GQTo6bm9kZXMoKSBjb25zdCAtPiBjb25zdCBSYW5nZTxJbW11dGFibGVORkFOb2RlPgpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL1NlcmlhbGl6ZWRD
cnlwdG9LZXlXcmFwTWFjLm1tCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vbWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjUsNyArMTI1LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiAgICAg
fQogI2VuZGlmCiAKLSAgICBhdXRvIGJhc2U2NEVuY29kZWRNYXN0ZXJLZXlEYXRhID0gYmFzZTY0
RW5jb2RlVG9WZWN0b3IobWFzdGVyS2V5RGF0YSk7CisgICAgYXV0byBiYXNlNjRFbmNvZGVkTWFz
dGVyS2V5RGF0YSA9IGJhc2U2NEVuY29kZVRvVmVjdG9yKFNwYW4geyBtYXN0ZXJLZXlEYXRhIH0p
OwogCiAgICAgLy8gQ2Fubm90IHVzZSBrU2VjQ2xhc3NLZXkgYmVjYXVzZSBvZiA8cmRhcjovL3By
b2JsZW0vMTYwNjgyMDc+LgogICAgIE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcyA9IEB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MDYsNyArMTYwNiw4IEBAIEV4Y2VwdGlvbk9y
PHZvaWQ+IE5vZGU6OnNldFRleHRDb250ZW50KGMKIHN0YXRpYyBTSEExOjpEaWdlc3QgaGFzaFBv
aW50ZXIoY29uc3Qgdm9pZCogcG9pbnRlcikKIHsKICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5h
ZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmcG9pbnRlciksIHNpemVv
Zihwb2ludGVyKSk7CisgICAgc2hhMS5hZGRCeXRlcyhhc0J5dGVzKFNwYW4geyAmcG9pbnRlciwg
MSB9KSk7CisKICAgICBTSEExOjpEaWdlc3QgZGlnZXN0OwogICAgIHNoYTEuY29tcHV0ZUhhc2go
ZGlnZXN0KTsKICAgICByZXR1cm4gZGlnZXN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OTQsMjggKzM5NCwyMyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBET01QYXRjaFN1cHBvcnQ6OmlubmVy
CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotc3RhdGljIHZvaWQgYWRkU3RyaW5nVG9TSEExKFNIQTEm
IHNoYTEsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAgIENTdHJpbmcgY1N0cmluZyA9IHN0
cmluZy51dGY4KCk7Ci0gICAgc2hhMS5hZGRCeXRlcyhjU3RyaW5nLmRhdGFBc1VJbnQ4UHRyKCks
IGNTdHJpbmcubGVuZ3RoKCkpOwotfQotCiBzdGQ6OnVuaXF1ZV9wdHI8RE9NUGF0Y2hTdXBwb3J0
OjpEaWdlc3Q+IERPTVBhdGNoU3VwcG9ydDo6Y3JlYXRlRGlnZXN0KE5vZGUmIG5vZGUsIFVudXNl
ZE5vZGVzTWFwKiB1bnVzZWROb2Rlc01hcCkKIHsKICAgICBhdXRvIGRpZ2VzdCA9IG1ha2VVbmlx
dWU8RGlnZXN0PigpOwogICAgIGRpZ2VzdC0+bm9kZSA9ICZub2RlOworCiAgICAgU0hBMSBzaGEx
OwogCiAgICAgYXV0byBub2RlVHlwZSA9IG5vZGUubm9kZVR5cGUoKTsKLSAgICBzaGExLmFkZEJ5
dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZub2RlVHlwZSksIHNpemVvZihu
b2RlVHlwZSkpOwotICAgIGFkZFN0cmluZ1RvU0hBMShzaGExLCBub2RlLm5vZGVOYW1lKCkpOwot
ICAgIGFkZFN0cmluZ1RvU0hBMShzaGExLCBub2RlLm5vZGVWYWx1ZSgpKTsKKyAgICBzaGExLmFk
ZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7ICZub2RlVHlwZSwgMSB9KSk7CisgICAgc2hhMS5hZGRCeXRl
cyhub2RlLm5vZGVOYW1lKCkudXRmOCgpKTsKKyAgICBzaGExLmFkZEJ5dGVzKG5vZGUubm9kZVZh
bHVlKCkudXRmOCgpKTsKIAogICAgIGlmIChub2RlLm5vZGVUeXBlKCkgPT0gTm9kZTo6RUxFTUVO
VF9OT0RFKSB7CiAgICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS5maXJzdENoaWxkKCk7CiAgICAg
ICAgIHdoaWxlIChjaGlsZCkgewogICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPERpZ2VzdD4g
Y2hpbGRJbmZvID0gY3JlYXRlRGlnZXN0KCpjaGlsZCwgdW51c2VkTm9kZXNNYXApOwotICAgICAg
ICAgICAgYWRkU3RyaW5nVG9TSEExKHNoYTEsIGNoaWxkSW5mby0+c2hhMSk7CisgICAgICAgICAg
ICBzaGExLmFkZEJ5dGVzKGNoaWxkSW5mby0+c2hhMS51dGY4KCkpOwogICAgICAgICAgICAgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAgIGRpZ2VzdC0+Y2hpbGRyZW4u
YXBwZW5kKFdURk1vdmUoY2hpbGRJbmZvKSk7CiAgICAgICAgIH0KQEAgLTQyNCwxOSArNDE5LDE5
IEBAIHN0ZDo6dW5pcXVlX3B0cjxET01QYXRjaFN1cHBvcnQ6OkRpZ2VzdD4KICAgICAgICAgaWYg
KGVsZW1lbnQuaGFzQXR0cmlidXRlc1dpdGhvdXRVcGRhdGUoKSkgewogICAgICAgICAgICAgU0hB
MSBhdHRyc1NIQTE7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGF0dHJpYnV0ZSA6IGVsZW1lbnQu
YXR0cmlidXRlc0l0ZXJhdG9yKCkpIHsKLSAgICAgICAgICAgICAgICBhZGRTdHJpbmdUb1NIQTEo
YXR0cnNTSEExLCBhdHRyaWJ1dGUubmFtZSgpLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAg
IGFkZFN0cmluZ1RvU0hBMShhdHRyc1NIQTEsIGF0dHJpYnV0ZS52YWx1ZSgpKTsKKyAgICAgICAg
ICAgICAgICBhdHRyc1NIQTEuYWRkQnl0ZXMoYXR0cmlidXRlLm5hbWUoKS50b1N0cmluZygpLnV0
ZjgoKSk7CisgICAgICAgICAgICAgICAgYXR0cnNTSEExLmFkZEJ5dGVzKGF0dHJpYnV0ZS52YWx1
ZSgpLnN0cmluZygpLnV0ZjgoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTSEExOjpE
aWdlc3QgYXR0cnNIYXNoOwogICAgICAgICAgICAgYXR0cnNTSEExLmNvbXB1dGVIYXNoKGF0dHJz
SGFzaCk7Ci0gICAgICAgICAgICBkaWdlc3QtPmF0dHJzU0hBMSA9IGJhc2U2NEVuY29kZVRvU3Ry
aW5nKGF0dHJzSGFzaC5kYXRhKCksIDEwKTsKLSAgICAgICAgICAgIGFkZFN0cmluZ1RvU0hBMShz
aGExLCBkaWdlc3QtPmF0dHJzU0hBMSk7CisgICAgICAgICAgICBkaWdlc3QtPmF0dHJzU0hBMSA9
IGJhc2U2NEVuY29kZVRvU3RyaW5nKFNwYW4geyBhdHRyc0hhc2ggfSk7CisgICAgICAgICAgICBz
aGExLmFkZEJ5dGVzKGRpZ2VzdC0+YXR0cnNTSEExLnV0ZjgoKSk7CiAgICAgICAgIH0KICAgICB9
CiAKICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAgICBzaGExLmNvbXB1dGVIYXNoKGhhc2gpOwot
ICAgIGRpZ2VzdC0+c2hhMSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGhhc2guZGF0YSgpLCAxMCk7
CisgICAgZGlnZXN0LT5zaGExID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoU3BhbiB7IGhhc2ggfSk7
CiAgICAgaWYgKHVudXNlZE5vZGVzTWFwKQogICAgICAgICB1bnVzZWROb2Rlc01hcC0+YWRkKGRp
Z2VzdC0+c2hhMSwgZGlnZXN0LmdldCgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02MDIsNyArNjAyLDcgQEAgYm9vbCBJbnNwZWN0b3JGcm9udGVuZEhv
c3Q6OnNob3dDZXJ0aWZpYwogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEtPmRhdGEoKSwgZGF0
YS0+c2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyAqZGF0
YSB9OwogICAgIHN0ZDo6b3B0aW9uYWw8Q2VydGlmaWNhdGVJbmZvPiBjZXJ0aWZpY2F0ZUluZm87
CiAgICAgZGVjb2RlciA+PiBjZXJ0aWZpY2F0ZUluZm87CiAgICAgaWYgKCFjZXJ0aWZpY2F0ZUlu
Zm8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdv
cmtBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMDUsNyArMTAwNSw3IEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0
cmluZz4gSW5zcGVjdG8KIAogICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2RlcjsK
ICAgICBXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+Ojpl
bmNvZGUoZW5jb2RlciwgY2VydGlmaWNhdGUudmFsdWUoKSk7Ci0gICAgcmV0dXJuIGJhc2U2NEVu
Y29kZVRvU3RyaW5nKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAg
ICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoZW5jb2Rlci5idWZmZXIoKSk7CiB9CiAKIFdl
YlNvY2tldCogSW5zcGVjdG9yTmV0d29ya0FnZW50Ojp3ZWJTb2NrZXRGb3JSZXF1ZXN0SWQoY29u
c3QgUHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYgcmVxdWVzdElkKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcAkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURh
dGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBAIFJlZjxTaGFyZWRCdWZmZXI+
IFBhc3RlYm9hcmRDdXN0b21EYXRhOjoKICAgICBlbmNvZGVyIDw8IG1fb3JpZ2luOwogICAgIGVu
Y29kZXIgPDwgc2FtZU9yaWdpbkN1c3RvbVN0cmluZ0RhdGEoKTsKICAgICBlbmNvZGVyIDw8IG9y
ZGVyZWRUeXBlcygpOwotICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShlbmNvZGVyLmJ1
ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6
Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCkpOwogfQogCiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSBQYXN0
ZWJvYXJkQ3VzdG9tRGF0YTo6ZnJvbVBlcnNpc3RlbmNlRGVjb2RlcihXVEY6OlBlcnNpc3RlbmNl
OjpEZWNvZGVyJiYgZGVjb2RlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJl
ZEJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVk
QnVmZmVyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2hhcmVkQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTggKzM2LDEzIEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIoY29uc3QgdWlu
dDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCitTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihTcGFu
PGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKLSAgICBhcHBlbmQoZGF0YSwgc2l6ZSk7Ci19Ci0K
LVNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXpl
KQotewotICAgIGFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwg
c2l6ZSk7CisgICAgYXBwZW5kKGRhdGEpOwogfQogCiBTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZl
cihGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIGZpbGVEYXRhKQotICAgIDogbV9zaXplKGZp
bGVEYXRhLnNpemUoKSkKKyAgICA6IG1fc2l6ZShmaWxlRGF0YS5kYXRhKCkuc2l6ZSgpKQogewog
ICAgIG1fc2VnbWVudHMuYXBwZW5kKHswLCBEYXRhU2VnbWVudDo6Y3JlYXRlKFdURk1vdmUoZmls
ZURhdGEpKX0pOwogfQpAQCAtMTg4LDEzICsxODMsMTMgQEAgdm9pZCBTaGFyZWRCdWZmZXI6OmFw
cGVuZChjb25zdCBTaGFyZWRCdQogICAgIEFTU0VSVChpbnRlcm5hbGx5Q29uc2lzdGVudCgpKTsK
IH0KIAotdm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVuZChjb25zdCB1aW50OF90KiBkYXRhLCBzaXpl
X3QgbGVuZ3RoKQordm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVuZChTcGFuPGNvbnN0IHN0ZDo6Ynl0
ZT4gZGF0YSkKIHsKICAgICBBU1NFUlQoIW1faGFzQmVlbkNvbWJpbmVkSW50b09uZVNlZ21lbnQp
OwogICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3I7Ci0gICAgdmVjdG9yLmFwcGVuZChkYXRhLCBs
ZW5ndGgpOwotICAgIG1fc2VnbWVudHMuYXBwZW5kKHttX3NpemUsIERhdGFTZWdtZW50OjpjcmVh
dGUoV1RGTW92ZSh2ZWN0b3IpKX0pOwotICAgIG1fc2l6ZSArPSBsZW5ndGg7CisgICAgdmVjdG9y
LmFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmRhdGEoKSksIGRh
dGEuc2l6ZSgpKTsKKyAgICBtX3NlZ21lbnRzLmFwcGVuZCh7IG1fc2l6ZSwgRGF0YVNlZ21lbnQ6
OmNyZWF0ZShXVEZNb3ZlKHZlY3RvcikpIH0pOworICAgIG1fc2l6ZSArPSBkYXRhLnNpemUoKTsK
ICAgICBBU1NFUlQoaW50ZXJuYWxseUNvbnNpc3RlbnQoKSk7CiB9CiAKQEAgLTMwMSwxMSArMjk2
LDQwIEBAIGNvbnN0IHVpbnQ4X3QqIFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQKICNpZiBVU0Uo
R1NUUkVBTUVSKQogICAgICAgICBbXShjb25zdCBSZWZQdHI8R3N0TWFwcGVkT3duZWRCdWZmZXI+
JiBkYXRhKSB7IHJldHVybiBkYXRhLT5kYXRhKCk7IH0sCiAjZW5kaWYKLSAgICAgICAgW10oY29u
c3QgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmRhdGEoKSk7IH0KKyAgICAgICAgW10oY29uc3QgRmlsZVN5
c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDhfdCo+KGRhdGEuZGF0YSgpLmRhdGEoKSk7IH0KICAgICApOwogICAgIHJldHVybiBX
VEY6OnZpc2l0KHZpc2l0b3IsIG1faW1tdXRhYmxlRGF0YSk7CiB9CiAKK1NwYW48Y29uc3Qgc3Rk
OjpieXRlPiBTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpieXRlcygpIGNvbnN0Cit7CisgICAg
YXV0byB2aXNpdG9yID0gV1RGOjptYWtlVmlzaXRvcigKKyAgICAgICAgW10oY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBkYXRhKSB7CisgICAgICAgICAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgZGF0
YSB9KTsKKyAgICAgICAgfSwKKyNpZiBVU0UoQ0YpCisgICAgICAgIFtdKGNvbnN0IFJldGFpblB0
cjxDRkRhdGFSZWY+JiBkYXRhKSB7CisgICAgICAgICAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsg
Q0ZEYXRhR2V0Qnl0ZVB0cihkYXRhLmdldCgpKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihDRkRhdGFH
ZXRMZW5ndGgoZGF0YS5nZXQoKSkpIH0pOworICAgICAgICB9LAorI2VuZGlmCisjaWYgVVNFKEdM
SUIpCisgICAgICAgIFtdKGNvbnN0IEdSZWZQdHI8R0J5dGVzPiYgZGF0YSkgeworICAgICAgICAg
ICAgcmV0dXJuIGFzQnl0ZXMoU3BhbiB7IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihnX2J5
dGVzX2dldF9kYXRhKGRhdGEuZ2V0KCksIG51bGxwdHIpKSwgZ19ieXRlc19nZXRfc2l6ZShkYXRh
LmdldCgpKSB9KTsKKyAgICAgICAgfSwKKyNlbmRpZgorI2lmIFVTRShHU1RSRUFNRVIpCisgICAg
ICAgIFtdKGNvbnN0IFJlZlB0cjxHc3RNYXBwZWRPd25lZEJ1ZmZlcj4mIGRhdGEpIHsKKyAgICAg
ICAgICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBkYXRhLT5kYXRhKCksIGRhdGEtPnNpemUoKSB9
KTsKKyAgICAgICAgfSwKKyNlbmRpZgorICAgICAgICBbXShjb25zdCBGaWxlU3lzdGVtOjpNYXBw
ZWRGaWxlRGF0YSYgZGF0YSkgeworICAgICAgICAgICAgcmV0dXJuIGRhdGEuZGF0YSgpOworICAg
ICAgICB9CisgICAgKTsKKyAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBtX2ltbXV0YWJs
ZURhdGEpOworCit9CisKIGJvb2wgU2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVudDo6Y29udGFpbnNN
YXBwZWRGaWxlRGF0YSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8RmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGE+KG1faW1tdXRhYmxlRGF0YSk7CkBAIC0zMTks
NyArMzQzLDcgQEAgdm9pZCBTaGFyZWRCdWZmZXI6OmhpbnRNZW1vcnlOb3ROZWVkZWRTbwogCiBX
VEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIFNoYXJlZEJ1ZmZlcjo6ZGVjb2RlcigpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIHsgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSgpKSwg
c2l6ZSgpIH07CisgICAgcmV0dXJuIHsgKnRoaXMgfTsKIH0KIAogYm9vbCBTaGFyZWRCdWZmZXI6
Om9wZXJhdG9yPT0oY29uc3QgU2hhcmVkQnVmZmVyJiBvdGhlcikgY29uc3QKQEAgLTM4NCw3ICs0
MDgsNyBAQCBzaXplX3QgU2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVudDo6c2l6ZSgpCiAjaWYgVVNF
KEdTVFJFQU1FUikKICAgICAgICAgW10oY29uc3QgUmVmUHRyPEdzdE1hcHBlZE93bmVkQnVmZmVy
PiYgZGF0YSkgeyByZXR1cm4gZGF0YS0+c2l6ZSgpOyB9LAogI2VuZGlmCi0gICAgICAgIFtdKGNv
bnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBkYXRhKSB7IHJldHVybiBkYXRhLnNpemUo
KTsgfQorICAgICAgICBbXShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkg
eyByZXR1cm4gZGF0YS5kYXRhKCkuc2l6ZSgpOyB9CiAgICAgKTsKICAgICByZXR1cm4gV1RGOjp2
aXNpdCh2aXNpdG9yLCBtX2ltbXV0YWJsZURhdGEpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2hhcmVkQnVmZmVyLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw4ICs2NywxMiBA
QCBjbGFzcyBTaGFyZWRCdWZmZXJEYXRhVmlldzsKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIFNoYXJl
ZEJ1ZmZlciA6IHB1YmxpYyBSZWZDb3VudGVkPFNoYXJlZEJ1ZmZlcj4gewogcHVibGljOgogICAg
IHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3
IFNoYXJlZEJ1ZmZlcik7IH0KLSAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNv
bnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNo
YXJlZEJ1ZmZlcihkYXRhLCBzaXplKSk7IH0KLSAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4g
Y3JlYXRlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKSB7IHJldHVybiBhZG9wdFJlZigq
bmV3IFNoYXJlZEJ1ZmZlcihkYXRhLCBzaXplKSk7IH0KKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1
ZmZlcj4gY3JlYXRlKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhKSB7IHJldHVybiBhZG9wdFJl
ZigqbmV3IFNoYXJlZEJ1ZmZlcihkYXRhKSk7IH0KKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZl
cj4gY3JlYXRlKFNwYW48Y29uc3QgdWludDhfdD4gZGF0YSkgeyByZXR1cm4gY3JlYXRlKGFzQnl0
ZXMoZGF0YSkpOyB9CisgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShTcGFuPGNv
bnN0IGNoYXI+IGRhdGEpIHsgcmV0dXJuIGNyZWF0ZShhc0J5dGVzKGRhdGEpKTsgfQorICAgIHN0
YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoY29uc3Qgc3RkOjpieXRlKiBkYXRhLCBzaXpl
X3Qgc2l6ZSkgeyByZXR1cm4gY3JlYXRlKFNwYW4geyBkYXRhLCBzaXplIH0pOyB9CisgICAgc3Rh
dGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qg
c2l6ZSkgeyByZXR1cm4gY3JlYXRlKFNwYW4geyBkYXRhLCBzaXplIH0pOyB9CisgICAgc3RhdGlj
IFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkg
eyByZXR1cm4gY3JlYXRlKFNwYW4geyBkYXRhLCBzaXplIH0pOyB9CiAgICAgc3RhdGljIFJlZjxT
aGFyZWRCdWZmZXI+IGNyZWF0ZShGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIG1hcHBlZEZp
bGVEYXRhKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihXVEZNb3ZlKG1hcHBl
ZEZpbGVEYXRhKSkpOyB9CiAKICAgICBlbnVtIGNsYXNzIE1heVVzZUZpbGVNYXBwaW5nIDogYm9v
bCB7IE5vLCBZZXMgfTsKQEAgLTEwMSw2ICsxMDUsOCBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6
IEF1ZGl0IHRoZSBjYWxsIHNpdGVzIG9mIHRoaXMgZnVuY3Rpb24gYW5kIHJlcGxhY2UgdGhlbSB3
aXRoIGl0ZXJhdGlvbiBpZiBwb3NzaWJsZS4KICAgICBjb25zdCB1aW50OF90KiBkYXRhKCkgY29u
c3Q7CiAgICAgY29uc3QgY2hhciogZGF0YUFzQ2hhclB0cigpIGNvbnN0IHsgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEoKSk7IH0KKyAgICBTcGFuPGNvbnN0IHN0ZDo6
Ynl0ZT4gYnl0ZXMoKSBjb25zdCB7IHJldHVybiBhc0J5dGVzKFNwYW4geyBkYXRhKCksIHNpemUo
KSB9KTsgfQorCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGNvcHlEYXRhKCkgeyByZXR1cm4geyBkYXRh
KCksIHNpemUoKSB9OyB9CiAKICAgICAvLyBDb21iaW5lcyBhbGwgdGhlIHNlZ21lbnRzIGludG8g
YSBWZWN0b3IgYW5kIHJldHVybnMgdGhhdCB2ZWN0b3IgYWZ0ZXIgY2xlYXJpbmcgdGhlIFNoYXJl
ZEJ1ZmZlci4KQEAgLTExNSw4ICsxMjEsMTIgQEAgcHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0IHsgcmV0dXJuICFzaXplKCk7IH0KIAogICAgIHZvaWQgYXBwZW5kKGNvbnN0IFNoYXJl
ZEJ1ZmZlciYpOwotICAgIHZvaWQgYXBwZW5kKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwotICAg
IHZvaWQgYXBwZW5kKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpIHsgYXBwZW5kKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBsZW5ndGgpOyB9CisgICAgdm9p
ZCBhcHBlbmQoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KTsKKyAgICB2b2lkIGFwcGVuZChTcGFuPGNv
bnN0IHVpbnQ4X3Q+IGRhdGEpIHsgYXBwZW5kKGFzQnl0ZXMoZGF0YSkpOyB9CisgICAgdm9pZCBh
cHBlbmQoU3Bhbjxjb25zdCBjaGFyPiBkYXRhKSB7IGFwcGVuZChhc0J5dGVzKGRhdGEpKTsgfQor
ICAgIHZvaWQgYXBwZW5kKGNvbnN0IHN0ZDo6Ynl0ZSogZGF0YSwgc2l6ZV90IGxlbmd0aCkgeyBh
cHBlbmQoU3BhbiB7IGRhdGEsIGxlbmd0aCB9KTsgfQorICAgIHZvaWQgYXBwZW5kKGNvbnN0IHVp
bnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5ndGgpIHsgYXBwZW5kKFNwYW4geyBkYXRhLCBsZW5ndGgg
fSk7IH0KKyAgICB2b2lkIGFwcGVuZChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKSB7
IGFwcGVuZChTcGFuIHsgZGF0YSwgbGVuZ3RoIH0pOyB9CiAgICAgdm9pZCBhcHBlbmQoVmVjdG9y
PHVpbnQ4X3Q+JiYpOwogCiAgICAgdm9pZCBjbGVhcigpOwpAQCAtMTMxLDYgKzE0MSw4IEBAIHB1
YmxpYzoKICAgICAgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgdWludDhfdCogZGF0YSgpIGNvbnN0
OwogICAgICAgICBXRUJDT1JFX0VYUE9SVCBzaXplX3Qgc2l6ZSgpIGNvbnN0OwogCisgICAgICAg
IFdFQkNPUkVfRVhQT1JUIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAg
ICAgICAgIHN0YXRpYyBSZWY8RGF0YVNlZ21lbnQ+IGNyZWF0ZShWZWN0b3I8dWludDhfdD4mJiBk
YXRhKQogICAgICAgICB7CiAgICAgICAgICAgICBkYXRhLnNocmlua1RvRml0KCk7CkBAIC0yMTIs
OCArMjI0LDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFNoYXJlZEJ1ZmZl
cigpID0gZGVmYXVsdDsKLSAgICBleHBsaWNpdCBTaGFyZWRCdWZmZXIoY29uc3QgdWludDhfdCos
IHNpemVfdCk7Ci0gICAgZXhwbGljaXQgU2hhcmVkQnVmZmVyKGNvbnN0IGNoYXIqLCBzaXplX3Qp
OworICAgIGV4cGxpY2l0IFNoYXJlZEJ1ZmZlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwogICAg
IGV4cGxpY2l0IFNoYXJlZEJ1ZmZlcihWZWN0b3I8dWludDhfdD4mJik7CiAgICAgZXhwbGljaXQg
U2hhcmVkQnVmZmVyKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYpOwogI2lmIFVTRShDRikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0NBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L2NvY29hL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgPENvcmVBdWRpby9Db3JlQXVkaW9UeXBlcy5o
PgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtODAs
MTMgKzgxLDEzIEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBDQUF1
ZGlvU3RyZWFtRGVzY3JpcHRpb246OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewot
ICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KCZtX3N0cmVhbURlc2NyaXB0aW9uKSwgc2l6ZW9mKG1fc3RyZWFtRGVzY3JpcHRp
b24pLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShhc0J5dGVzKFNwYW4g
eyAmbV9zdHJlYW1EZXNjcmlwdGlvbiwgMSB9KSwgMSk7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+CiBib29sIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIsIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7Ci0gICAgcmV0
dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KCZkZXNjcmlwdGlvbi5tX3N0cmVhbURlc2NyaXB0aW9uKSwgc2l6ZW9mKGRlc2NyaXB0aW9u
Lm1fc3RyZWFtRGVzY3JpcHRpb24pLCAxKTsKKyAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhl
ZExlbmd0aERhdGEoYXNXcml0YWJsZUJ5dGVzKFNwYW4geyAmZGVzY3JpcHRpb24ubV9zdHJlYW1E
ZXNjcmlwdGlvbiwgMSB9KSwgMSk7CiB9CiAKIGlubGluZSBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRp
b24gdG9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oY29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlv
biYgZGVzY3JpcHRpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9N
b2RlbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01v
ZGVsLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL01vZGVsLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4KIHZvaWQgTW9kZWw6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAog
ewogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2RhdGEtPnNpemUoKSk7Ci0g
ICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEobV9kYXRhLT5kYXRhKCksIG1fZGF0YS0+
c2l6ZSgpLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShtX2RhdGEtPmJ5
dGVzKCksIDEpOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgpAQCAtNzQsNyArNzQsNyBA
QCBSZWZQdHI8TW9kZWw+IE1vZGVsOjpkZWNvZGUoRGVjb2RlciYgZGVjCiAKICAgICBWZWN0b3I8
dWludDhfdD4gZGF0YTsKICAgICBkYXRhLmdyb3coKmxlbmd0aCk7Ci0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZUZpeGVkTGVuZ3RoRGF0YShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksIDEpKQorICAg
IGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IGRhdGEgfSwgMSkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIE1vZGVsOjpjcmVhdGUoU2hhcmVk
QnVmZmVyOjpjcmVhdGUoV1RGTW92ZShkYXRhKSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC04Miw3ICs4Miw3IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgUGl4ZWxC
dWZmZXIKIAogICAgIGVuY29kZXIgPDwgbV9mb3JtYXQ7CiAgICAgZW5jb2RlciA8PCBtX3NpemU7
Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEobV9kYXRhLT5kYXRhKCksIG1fZGF0
YS0+Ynl0ZUxlbmd0aCgpLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YSht
X2RhdGEtPmJ5dGVzKCksIDEpOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGQ6Om9w
dGlvbmFsPFBpeGVsQnVmZmVyPiBQaXhlbEJ1ZmZlcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
CkBAIC0xMTMsNyArMTEzLDcgQEAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RkOjpvcHRpb25h
bDxQaQogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0g
ICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZXN1bHQtPm1fZGF0YS0+ZGF0
YSgpLCByZXN1bHQtPm1fZGF0YS0+Ynl0ZUxlbmd0aCgpLCAxKSkKKyAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlc3VsdC0+bV9kYXRhLT53cml0YWJsZUJ5dGVzKCksIDEp
KQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgcmV0dXJuIHJlc3VsdDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3Vy
Y2VDYXBhYmlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzLmgJKHJldmlzaW9uIDI3
ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVk
aWFTb3VyY2VDYXBhYmlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDE2ICsxMTQsMTYg
QEAgcHJpdmF0ZToKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIENhcGFiaWxpdHlWYWx1
ZU9yUmFuZ2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewotICAgIGVuY29kZXIu
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZt
X21pbk9yVmFsdWUpLCBzaXplb2YoVmFsdWVVbmlvbiksIGFsaWdub2YoVmFsdWVVbmlvbikpOwot
ICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KCZtX21heCksIHNpemVvZihWYWx1ZVVuaW9uKSwgYWxpZ25vZihWYWx1ZVVuaW9u
KSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYXNCeXRlcyhTcGFuIHsgJm1f
bWluT3JWYWx1ZSwgMSB9KSwgYWxpZ25vZihWYWx1ZVVuaW9uKSk7CisgICAgZW5jb2Rlci5lbmNv
ZGVGaXhlZExlbmd0aERhdGEoYXNCeXRlcyhTcGFuIHsgJm1fbWF4LCAxIH0pLCBhbGlnbm9mKFZh
bHVlVW5pb24pKTsKICAgICBlbmNvZGVyIDw8IG1fdHlwZTsKIH0KIAogdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4KIGJvb2wgQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZTo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIsIENhcGFiaWxpdHlWYWx1ZU9yUmFuZ2UmIHZhbHVlT3JSYW5nZSkKIHsKLSAgICByZXR1
cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4oJnZhbHVlT3JSYW5nZS5tX21pbk9yVmFsdWUpLCBzaXplb2YoVmFsdWVVbmlvbiksIGFsaWdu
b2YoVmFsdWVVbmlvbikpCi0gICAgICAgICYmIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2YWx1ZU9yUmFuZ2UubV9tYXgpLCBzaXplb2Yo
VmFsdWVVbmlvbiksIGFsaWdub2YoVmFsdWVVbmlvbikpCisgICAgcmV0dXJuIGRlY29kZXIuZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKGFzV3JpdGFibGVCeXRlcyhTcGFuIHsgJnZhbHVlT3JSYW5nZS5t
X21pbk9yVmFsdWUsIDEgfSksIGFsaWdub2YoVmFsdWVVbmlvbikpCisgICAgICAgICYmIGRlY29k
ZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGFzV3JpdGFibGVCeXRlcyhTcGFuIHsgJnZhbHVlT3JS
YW5nZS5tX21heCwgMSB9KSwgYWxpZ25vZihWYWx1ZVVuaW9uKSkKICAgICAgICAgJiYgZGVjb2Rl
ci5kZWNvZGUodmFsdWVPclJhbmdlLm1fdHlwZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVk
aWFTb3VyY2VDZW50ZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM5LDEzICsxMzksMTMgQEAgc3RhdGljIHZvaWQgYWRkU3RyaW5nVG9TSEEx
KFNIQTEmIHNoYTEsIAogCiAgICAgaWYgKHN0cmluZy5pczhCaXQoKSAmJiBzdHJpbmcuaXNBbGxB
U0NJSSgpKSB7CiAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbnVsbEJ5dGUgPSAwOwotICAgICAgICBz
aGExLmFkZEJ5dGVzKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAg
ICAgICBzaGExLmFkZEJ5dGVzKCZudWxsQnl0ZSwgMSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMo
YXNCeXRlcyhTcGFuIHsgc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSB9KSk7
CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgJm51bGxCeXRlLCAxIH0pKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGF1dG8gdXRmOCA9IHN0cmluZy51dGY4KCk7
Ci0gICAgc2hhMS5hZGRCeXRlcyh1dGY4LmRhdGFBc1VJbnQ4UHRyKCksIHV0ZjgubGVuZ3RoKCkg
KyAxKTsgLy8gSW5jbHVkZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUuCisgICAgc2hhMS5hZGRCeXRl
cyhhc0J5dGVzKFNwYW4geyB1dGY4LmRhdGFBc1VJbnQ4UHRyKCksIHV0ZjgubGVuZ3RoKCkgKyAx
IH0pKTsgLy8gSW5jbHVkZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUuCiB9CiAKIFN0cmluZyBSZWFs
dGltZU1lZGlhU291cmNlQ2VudGVyOjpoYXNoU3RyaW5nV2l0aFNhbHQoY29uc3QgU3RyaW5nJiBp
ZCwgY29uc3QgU3RyaW5nJiBoYXNoU2FsdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY2YvQ2VydGlmaWNhdGVJbmZvQ0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ2VydGlmaWNhdGVJbmZvQ0ZOZXQuY3BwCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nl
cnRpZmljYXRlSW5mb0NGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEwLDcgKzIxMCw3IEBA
IHN0YXRpYyB2b2lkIGVuY29kZUNGRGF0YShFbmNvZGVyJiBlbmNvZGUKICAgICBjb25zdCB1aW50
OF90KiBieXRlUHRyID0gQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKTsKIAogICAgIGVuY29kZXIgPDwg
bGVuZ3RoOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGJ5dGVQdHIsIHN0YXRp
Y19jYXN0PHNpemVfdD4obGVuZ3RoKSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERh
dGEoU3BhbiB7IGJ5dGVQdHIsIHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSB9KTsKIH0KIAog
c3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0YWluUHRyPENGRGF0YVJlZj4+IGRlY29kZUNGRGF0YShE
ZWNvZGVyJiBkZWNvZGVyKQpAQCAtMjI1LDcgKzIyNSw3IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFs
PFJldGFpblB0cjxDRkRhdGFSZWYKICAgICBpZiAoIXBvaW50ZXIpCiAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gYWRvcHRDRihDRkRhdGFDcmVhdGUobnVsbHB0ciwg
cG9pbnRlciwgKnNpemUpKTsKKyAgICByZXR1cm4gYWRvcHRDRihDRkRhdGFDcmVhdGUobnVsbHB0
ciwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4ocG9pbnRlciksICpzaXplKSk7CiB9
CiAKICNpZiBIQVZFKFNFQ19UUlVTVF9TRVJJQUxJWkFUSU9OKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIGJvb2wgU1FMaXRlU3RhdGVtZW50OjpleGVj
dXRlQ29tbWFuZCgpCiAgICAgcmV0dXJuIHN0ZXAoKSA9PSBTUUxJVEVfRE9ORTsKIH0KIAotaW50
IFNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IoaW50IGluZGV4LCBTcGFuPGNvbnN0IHVpbnQ4X3Q+
IGJsb2IpCitpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kQmxvYihpbnQgaW5kZXgsIFNwYW48Y29u
c3Qgc3RkOjpieXRlPiBibG9iKQogewogICAgIEFTU0VSVChpbmRleCA+IDApOwogICAgIEFTU0VS
VChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpIDw9IGJpbmRQYXJhbWV0ZXJDb3VudCgpKTsK
QEAgLTk1LDYgKzk1LDExIEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRl
eCwKICAgICByZXR1cm4gc3FsaXRlM19iaW5kX2Jsb2IobV9zdGF0ZW1lbnQsIGluZGV4LCBibG9i
LmRhdGEoKSwgYmxvYi5zaXplKCksIFNRTElURV9UUkFOU0lFTlQpOwogfQogCitpbnQgU1FMaXRl
U3RhdGVtZW50OjpiaW5kQmxvYihpbnQgaW5kZXgsIFNwYW48Y29uc3QgdWludDhfdD4gYmxvYikK
K3sKKyAgICByZXR1cm4gYmluZEJsb2IoaW5kZXgsIGFzQnl0ZXMoYmxvYikpOworfQorCiBpbnQg
U1FMaXRlU3RhdGVtZW50OjpiaW5kQmxvYihpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgdGV4dCkK
IHsKICAgICAvLyBTdHJpbmc6OmNoYXJhY3RlcnMoKSByZXR1cm5zIDAgZm9yIHRoZSBlbXB0eSBz
dHJpbmcsIHdoaWNoIFNRTGl0ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NR
TGl0ZVN0YXRlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Nx
bC9TUUxpdGVTdGF0ZW1lbnQuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICsz
OSw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB+U1FMaXRlU3RhdGVtZW50KCk7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgU1FMaXRlU3RhdGVtZW50KFNRTGl0ZVN0YXRlbWVudCYmKTsKICAg
ICAKKyAgICBXRUJDT1JFX0VYUE9SVCBpbnQgYmluZEJsb2IoaW50IGluZGV4LCBTcGFuPGNvbnN0
IHN0ZDo6Ynl0ZT4pOwogICAgIFdFQkNPUkVfRVhQT1JUIGludCBiaW5kQmxvYihpbnQgaW5kZXgs
IFNwYW48Y29uc3QgdWludDhfdD4pOwogICAgIFdFQkNPUkVfRVhQT1JUIGludCBiaW5kQmxvYihp
bnQgaW5kZXgsIGNvbnN0IFN0cmluZyYpOwogICAgIFdFQkNPUkVfRVhQT1JUIGludCBiaW5kVGV4
dChpbnQgaW5kZXgsIFN0cmluZ1ZpZXcpOwpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9z
ZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5j
cHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9z
ZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTksMTAg
KzQ1OSwxMCBAQCBib29sIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2VzCiAgICAg
ICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDYsIHVwZGF0ZVZpYUNhY2hlVG9T
dHJpbmcoZGF0YS5yZWdpc3RyYXRpb24udXBkYXRlVmlhQ2FjaGUpKSAhPSBTUUxJVEVfT0sKICAg
ICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRleHQoNywgZGF0YS5zY3JpcHRVUkwu
c3RyaW5nKCkpICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5i
aW5kVGV4dCg4LCB3b3JrZXJUeXBlVG9TdHJpbmcoZGF0YS53b3JrZXJUeXBlKSkgIT0gU1FMSVRF
X09LCi0gICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDksIFNwYW4geyBj
c3BFbmNvZGVyLmJ1ZmZlcigpLCBjc3BFbmNvZGVyLmJ1ZmZlclNpemUoKSB9KSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoOSwgY3NwRW5jb2Rl
ci5idWZmZXIoKSkgIT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQt
PmJpbmRUZXh0KDEwLCBkYXRhLnJlZmVycmVyUG9saWN5KSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
ICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoMTEsIFNwYW4geyBzY3JpcHRSZXNvdXJj
ZU1hcEVuY29kZXIuYnVmZmVyKCksIHNjcmlwdFJlc291cmNlTWFwRW5jb2Rlci5idWZmZXJTaXpl
KCkgfSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRC
bG9iKDEyLCBTcGFuIHsgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXIoKSwgY2VydGlmaWNh
dGVJbmZvRW5jb2Rlci5idWZmZXJTaXplKCkgfSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8
fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDExLCBzY3JpcHRSZXNvdXJjZU1hcEVuY29kZXIu
YnVmZmVyKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5i
aW5kQmxvYigxMiwgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXIoKSkgIT0gU1FMSVRFX09L
CiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkg
ewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIkZhaWxlZCB0
byBzdG9yZSByZWdpc3RyYXRpb24gZGF0YSBpbnRvIHJlY29yZHMgdGFibGUgKCVpKSAtICVzIiwg
bV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTUxNyw3ICs1MTcsNyBAQCBTdHJpbmcgUmVnaXN0
cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yCiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29udGVu
dFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzPiBjb250ZW50U2VjdXJpdHlQb2xpY3k7CiAg
ICAgICAgIGF1dG8gY29udGVudFNlY3VyaXR5UG9saWN5RGF0YVNwYW4gPSBzcWwtPmNvbHVtbkJs
b2JBc1NwYW4oOCk7CiAgICAgICAgIGlmIChjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhU3Bhbi5z
aXplKCkpIHsKLSAgICAgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgY3NwRGVjb2Rl
cihjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhU3Bhbi5kYXRhKCksIGNvbnRlbnRTZWN1cml0eVBv
bGljeURhdGFTcGFuLnNpemUoKSk7CisgICAgICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNv
ZGVyIGNzcERlY29kZXIgeyBjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhU3BhbiB9OwogICAgICAg
ICAgICAgY3NwRGVjb2RlciA+PiBjb250ZW50U2VjdXJpdHlQb2xpY3k7CiAgICAgICAgICAgICBp
ZiAoIWNvbnRlbnRTZWN1cml0eVBvbGljeSkgewogICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKFNlcnZpY2VXb3JrZXIsICJSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3Jk
czogRmFpbGVkIHRvIGRlY29kZSBjb250ZW50U2VjdXJpdHlQb2xpY3kiKTsKQEAgLTUzMCw3ICs1
MzAsNyBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yCiAgICAgICAg
IEhhc2hNYXA8VVJMLCBTZXJ2aWNlV29ya2VyQ29udGV4dERhdGE6OkltcG9ydGVkU2NyaXB0PiBz
Y3JpcHRSZXNvdXJjZU1hcDsKICAgICAgICAgYXV0byBzY3JpcHRSZXNvdXJjZU1hcERhdGFTcGFu
ID0gc3FsLT5jb2x1bW5CbG9iQXNTcGFuKDEwKTsKICAgICAgICAgaWYgKHNjcmlwdFJlc291cmNl
TWFwRGF0YVNwYW4uc2l6ZSgpKSB7Ci0gICAgICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNv
ZGVyIHNjcmlwdFJlc291cmNlTWFwRGVjb2RlcihzY3JpcHRSZXNvdXJjZU1hcERhdGFTcGFuLmRh
dGEoKSwgc2NyaXB0UmVzb3VyY2VNYXBEYXRhU3Bhbi5zaXplKCkpOworICAgICAgICAgICAgV1RG
OjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBzY3JpcHRSZXNvdXJjZU1hcERlY29kZXIgeyBzY3JpcHRS
ZXNvdXJjZU1hcERhdGFTcGFuIH07CiAgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPEhhc2hNYXA8
VVJMLCBJbXBvcnRlZFNjcmlwdEF0dHJpYnV0ZXM+PiBzY3JpcHRSZXNvdXJjZU1hcFdpdGhvdXRT
Y3JpcHRzOwogICAgICAgICAgICAgc2NyaXB0UmVzb3VyY2VNYXBEZWNvZGVyID4+IHNjcmlwdFJl
c291cmNlTWFwV2l0aG91dFNjcmlwdHM7CiAgICAgICAgICAgICBpZiAoIXNjcmlwdFJlc291cmNl
TWFwV2l0aG91dFNjcmlwdHMpIHsKQEAgLTU0Myw3ICs1NDMsNyBAQCBTdHJpbmcgUmVnaXN0cmF0
aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yCiAgICAgICAgIGF1dG8gY2VydGlmaWNhdGVJbmZvRGF0
YVNwYW4gPSBzcWwtPmNvbHVtbkJsb2JBc1NwYW4oMTEpOwogICAgICAgICBzdGQ6Om9wdGlvbmFs
PENlcnRpZmljYXRlSW5mbz4gY2VydGlmaWNhdGVJbmZvOwogCi0gICAgICAgIFdURjo6UGVyc2lz
dGVuY2U6OkRlY29kZXIgY2VydGlmaWNhdGVJbmZvRGVjb2RlcihjZXJ0aWZpY2F0ZUluZm9EYXRh
U3Bhbi5kYXRhKCksIGNlcnRpZmljYXRlSW5mb0RhdGFTcGFuLnNpemUoKSk7CisgICAgICAgIFdU
Rjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgY2VydGlmaWNhdGVJbmZvRGVjb2RlciB7IGNlcnRpZmlj
YXRlSW5mb0RhdGFTcGFuIH07CiAgICAgICAgIGNlcnRpZmljYXRlSW5mb0RlY29kZXIgPj4gY2Vy
dGlmaWNhdGVJbmZvOwogICAgICAgICBpZiAoIWNlcnRpZmljYXRlSW5mbykgewogICAgICAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIlJlZ2lzdHJhdGlvbkRhdGFiYXNl
OjppbXBvcnRSZWNvcmRzOiBGYWlsZWQgdG8gZGVjb2RlIGNlcnRpZmljYXRlSW5mbyIpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NjcmlwdFN0b3JhZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIv
U1dTY3JpcHRTdG9yYWdlLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUv
d29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NjcmlwdFN0b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04Niw5ICs4Niw5IEBAIFNjcmlwdEJ1ZmZlciBTV1NjcmlwdFN0b3JhZ2U6OnN0b3JlKGNv
bnMKICAgICBhdXRvIHNjcmlwdFBhdGggPSB0aGlzLT5zY3JpcHRQYXRoKHJlZ2lzdHJhdGlvbktl
eSwgc2NyaXB0VVJMKTsKICAgICBGaWxlU3lzdGVtOjptYWtlQWxsRGlyZWN0b3JpZXMoRmlsZVN5
c3RlbTo6cGFyZW50UGF0aChzY3JpcHRQYXRoKSk7CiAKLSAgICBhdXRvIGl0ZXJhdGVPdmVyQnVm
ZmVyQW5kV3JpdGVEYXRhID0gWyZdKGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCos
IHNpemVfdCk+JiB3cml0ZURhdGEpIHsKLSAgICAgICAgZm9yIChhdXRvIGl0ID0gc2NyaXB0LmJ1
ZmZlcigpLT5iZWdpbigpOyBpdCAhPSBzY3JpcHQuYnVmZmVyKCktPmVuZCgpOyArK2l0KQotICAg
ICAgICAgICAgd3JpdGVEYXRhKGl0LT5zZWdtZW50LT5kYXRhKCksIGl0LT5zZWdtZW50LT5zaXpl
KCkpOworICAgIGF1dG8gaXRlcmF0ZU92ZXJCdWZmZXJBbmRXcml0ZURhdGEgPSBbJl0oY29uc3Qg
RnVuY3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYgd3JpdGVEYXRhKSB7CisgICAg
ICAgIGZvciAoYXV0byYgc2VnbWVudEVudHJ5IDogKnNjcmlwdC5idWZmZXIoKSkKKyAgICAgICAg
ICAgIHdyaXRlRGF0YShzZWdtZW50RW50cnkuc2VnbWVudC0+Ynl0ZXMoKSk7CiAgICAgfTsKIAog
ICAgIGlmICghc2hvdWxkVXNlRmlsZU1hcHBpbmcoc2NyaXB0LmJ1ZmZlcigpLT5zaXplKCkpKSB7
CkBAIC05Nyw4ICs5Nyw4IEBAIFNjcmlwdEJ1ZmZlciBTV1NjcmlwdFN0b3JhZ2U6OnN0b3JlKGNv
bnMKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIsICJTV1Njcmlw
dFN0b3JhZ2U6OnN0b3JlOiBGYWlsdXJlIHRvIHN0b3JlICVzLCBGaWxlU3lzdGVtOjpvcGVuRmls
ZSgpIGZhaWxlZCIsIHNjcmlwdFBhdGgudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgICAgICByZXR1
cm4geyB9OwogICAgICAgICB9Ci0gICAgICAgIGl0ZXJhdGVPdmVyQnVmZmVyQW5kV3JpdGVEYXRh
KFsmXShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgewotICAgICAgICAgICAgRmls
ZVN5c3RlbTo6d3JpdGVUb0ZpbGUoaGFuZGxlLCBkYXRhLCBzaXplKTsKKyAgICAgICAgaXRlcmF0
ZU92ZXJCdWZmZXJBbmRXcml0ZURhdGEoWyZdKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhKSB7
CisgICAgICAgICAgICBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShoYW5kbGUsIGRhdGEuZGF0YSgp
LCBkYXRhLnNpemUoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSk7CiAg
ICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShoYW5kbGUpOwpJbmRleDogU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODEgQEAKKzIwMjEtMDYtMTEgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29t
PgorCisgICAgICAgIEFkb3B0IFNwYW4gaW4gbW9yZSBwbGFjZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjg4NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtXSVBdCisKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hl
U3RvcmFnZTo6Q2FjaGU6OmRlY29kZVJlY29yZEhlYWRlcik6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnN0b3JlT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6
Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnJlYWRPcmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpDYWNo
ZVN0b3JhZ2U6OmVuY29kZUNhY2hlTmFtZXMpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3Jh
Z2U6OmRlY29kZUNhY2hlc05hbWVzKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVEYXRhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRh
OjptYXBUb0ZpbGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmNvbXB1
dGVTSEExKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRh
Lmg6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YTo6RGF0YSk6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1tOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhY2hlOjpEYXRhOjphZG9wdE1hcCk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ2FjaGU6OkVudHJ5OjplbmNvZGVBc1N0b3JhZ2VSZWNvcmQgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVudHJ5OjpkZWNvZGVTdG9yYWdlUmVjb3JkKToKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3BwOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ2FjaGU6Omhhc2hTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ2FjaGU6OktleTo6Y29tcHV0ZUhhc2ggY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ2FjaGU6OktleTo6Y29tcHV0ZVBhcnRpdGlvbkhhc2ggY29uc3QpOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FjaGU6OmRlY29kZVJlY29yZE1ldGFEYXRhKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhY2hlOjplbmNvZGVSZWNvcmRNZXRhRGF0YSk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN1YnJlc291cmNlc0VudHJ5OjplbmNvZGVBc1N0b3Jh
Z2VSZWNvcmQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN1YnJlc291
cmNlc0VudHJ5OjpkZWNvZGVTdG9yYWdlUmVjb3JkKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMv
QXJndW1lbnRDb2Rlci5oOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5j
cHA6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8Q1N0cmluZz46OmVuY29kZSk6CisgICAg
ICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8Q1N0cmluZz46OmRlY29kZSk6CisgICAgICAgIChJUEM6
OkFyZ3VtZW50Q29kZXI8U3RyaW5nPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6ZGVjb2RlU3Ry
aW5nVGV4dCk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZW5j
b2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxTSEExOjpEaWdlc3Q+OjpkZWNvZGUp
OgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oOgorICAgICAgICAoSVBD
OjpTaW1wbGVBcmd1bWVudENvZGVyOjplbmNvZGUpOgorICAgICAgICAoSVBDOjpTaW1wbGVBcmd1
bWVudENvZGVyOjpkZWNvZGUpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9BcnJheVJlZmVyZW5j
ZS5oOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9EZWNvZGVyLmNwcDoKKyAgICAgICAgKElQQzo6
RGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMv
RGVjb2Rlci5oOgorICAgICAgICAoSVBDOjpEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEp
OgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9FbmNvZGVyLmNwcDoKKyAgICAgICAgKElQQzo6RW5j
b2Rlcjo6ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvRW5j
b2Rlci5oOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9TaGFyZWRCdWZmZXJDb3B5LmNwcDoKKyAg
ICAgICAgKElQQzo6U2hhcmVkQnVmZmVyQ29weTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKiBQ
bGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlvbkVuY29kZXIuaDoKKyAgICAgICAgKiBTaGFyZWQv
V2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6ZW5jb2RlU2hhcmVkQnVm
ZmVyKToKKyAgICAgICAgKElQQzo6ZGVjb2RlU2hhcmVkQnVmZmVyKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNwcDoKKyAgICAgICAgKEFQSTo6ZW5j
b2RlQ29udGVudFJ1bGVMaXN0TWV0YURhdGEpOgorICAgICAgICAoQVBJOjpnZXREYXRhKToKKyAg
ICAgICAgKEFQSTo6ZGVjb2RlQ29udGVudFJ1bGVMaXN0TWV0YURhdGEpOgorICAgICAgICAoQVBJ
Ojp3cml0ZURhdGFUb0ZpbGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvTGVnYWN5U2Vzc2lv
blN0YXRlQ29kaW5nLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SGlzdG9yeUVudHJ5RGF0YUVuY29k
ZXI6Om9wZXJhdG9yPDwpOgorICAgICAgICAoV2ViS2l0OjpIaXN0b3J5RW50cnlEYXRhRW5jb2Rl
cjo6ZW5jb2RlQXJpdGhtZXRpY1R5cGUpOgorICAgICAgICAoV2ViS2l0OjpIaXN0b3J5RW50cnlE
YXRhRW5jb2Rlcjo6ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKToKKyAgICAgICAgKFdlYktpdDo6SGlz
dG9yeUVudHJ5RGF0YURlY29kZXI6Om9wZXJhdG9yPj4pOgorICAgICAgICAoV2ViS2l0OjpIaXN0
b3J5RW50cnlEYXRhRGVjb2Rlcjo6ZGVjb2RlQXJpdGhtZXRpY1R5cGUpOgorICAgICAgICAoV2Vi
S2l0OjpIaXN0b3J5RW50cnlEYXRhRGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OmVuY29kZVR5cGVkQXJyYXkpOgorCiAyMDIxLTA2LTExICBS
eWFuIEhhZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJldmVydGluZyByMjc4NzU0LgpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2Fj
aGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjUsNyArNTY1LDcg
QEAgU3RvcmFnZTo6UmVjb3JkIENhY2hlOjplbmNvZGUoY29uc3QgUmVjbwogCiAgICAgZW5jb2Rl
ci5lbmNvZGVDaGVja3N1bSgpOwogCi0gICAgRGF0YSBoZWFkZXIoZW5jb2Rlci5idWZmZXIoKSwg
ZW5jb2Rlci5idWZmZXJTaXplKCkpOworICAgIERhdGEgaGVhZGVyKGVuY29kZXIuYnVmZmVyKCkp
OwogICAgIERhdGEgYm9keTsKICAgICBXVEY6OnN3aXRjaE9uKHJlY29yZC5yZXNwb25zZUJvZHks
IFtdKGNvbnN0IFJlZjxXZWJDb3JlOjpGb3JtRGF0YT4mIGZvcm1EYXRhKSB7CiAgICAgICAgIC8v
IEZJWE1FOiBTdG9yZSBmb3JtIGRhdGEgYm9keS4KQEAgLTYzMCw3ICs2MzAsNyBAQCBzdGF0aWMg
c3RkOjpvcHRpb25hbDxXZWJDb3JlOjpET01DYWNoZUVuCiAKIHN0ZDo6b3B0aW9uYWw8Q2FjaGU6
OkRlY29kZWRSZWNvcmQ+IENhY2hlOjpkZWNvZGVSZWNvcmRIZWFkZXIoY29uc3QgU3RvcmFnZTo6
UmVjb3JkJiBzdG9yYWdlKQogewotICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2Rl
cihzdG9yYWdlLmhlYWRlci5kYXRhKCksIHN0b3JhZ2UuaGVhZGVyLnNpemUoKSk7CisgICAgV1RG
OjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKHN0b3JhZ2UuaGVhZGVyKTsKIAogICAgIHN0
ZDo6b3B0aW9uYWw8ZG91YmxlPiBpbnNlcnRpb25UaW1lOwogICAgIGRlY29kZXIgPj4gaW5zZXJ0
aW9uVGltZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVT
dG9yYWdlRW5naW5lQ2FjaGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAJKHJldmlzaW9uIDI3
ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdl
RW5naW5lQ2FjaGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDE0ICsxMDUsMTQgQEAgdm9p
ZCBDYWNoZXM6OnN0b3JlT3JpZ2luKENvbXBsZXRpb25DYWxsYgogICAgIGVuY29kZXIgPDwgbV9v
cmlnaW4uY2xpZW50T3JpZ2luLnByb3RvY29sOwogICAgIGVuY29kZXIgPDwgbV9vcmlnaW4uY2xp
ZW50T3JpZ2luLmhvc3Q7CiAgICAgZW5jb2RlciA8PCBtX29yaWdpbi5jbGllbnRPcmlnaW4ucG9y
dDsKLSAgICBtX2VuZ2luZS0+d3JpdGVGaWxlKGNhY2hlc09yaWdpbkZpbGVuYW1lKG1fcm9vdFBh
dGgpLCBEYXRhIHsgZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkgfSwgW3By
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0gKHN0ZDo6b3B0aW9uYWw8RXJyb3I+JiYgZXJyb3IpIG11dGFi
bGUgeworICAgIG1fZW5naW5lLT53cml0ZUZpbGUoY2FjaGVzT3JpZ2luRmlsZW5hbWUobV9yb290
UGF0aCksIERhdGEgeyBlbmNvZGVyLmJ1ZmZlcigpIH0sIFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
IChzdGQ6Om9wdGlvbmFsPEVycm9yPiYmIGVycm9yKSBtdXRhYmxlIHsKICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoV1RGTW92ZShlcnJvcikpOwogICAgIH0pOwogfQogCiBzdGQ6Om9wdGlvbmFs
PFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gQ2FjaGVzOjpyZWFkT3JpZ2luKGNvbnN0IERhdGEmIGRh
dGEpCiB7Ci0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEuZGF0YSgp
LCBkYXRhLnNpemUoKSk7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRh
dGEpOwogCiAgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IHRv
cE9yaWdpbjsKICAgICBkZWNvZGVyID4+IHRvcE9yaWdpbjsKQEAgLTQwNCwxMiArNDA0LDEyIEBA
IHN0YXRpYyBpbmxpbmUgRGF0YSBlbmNvZGVDYWNoZU5hbWVzKGNvbnMKICAgICAgICAgZW5jb2Rl
ciA8PCBjYWNoZS51bmlxdWVOYW1lKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIERhdGEgeyBlbmNv
ZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSB9OworICAgIHJldHVybiBEYXRhIHsg
ZW5jb2Rlci5idWZmZXIoKSB9OwogfQogCiBzdGF0aWMgaW5saW5lIEV4cGVjdGVkPFZlY3Rvcjxz
dGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiwgRXJyb3I+IGRlY29kZUNhY2hlc05hbWVzKGNvbnN0
IERhdGEmIGRhdGEpCiB7Ci0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRh
dGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBk
ZWNvZGVyKGRhdGEpOwogICAgIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGNvdW50OwogICAgIGRl
Y29kZXIgPj4gY291bnQ7CiAgICAgaWYgKCFjb3VudCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBuYW1lc3Bh
Y2UgTmV0d29ya0NhY2hlIHsKIERhdGEgRGF0YTo6bWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0
aCkgY29uc3QKIHsKICAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlOwot
ICAgIGF1dG8gYXBwbHlEYXRhID0gWyZdKGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhf
dCosIHNpemVfdCk+JiBhcHBsaWVyKSB7IGFwcGx5KGFwcGxpZXIpOyB9OworICAgIGF1dG8gYXBw
bHlEYXRhID0gWyZdKGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4m
IGFwcGxpZXIpIHsgYXBwbHkoYXBwbGllcik7IH07CiAgICAgYXV0byBtYXBwZWRGaWxlID0gRmls
ZVN5c3RlbTo6bWFwVG9GaWxlKHBhdGgsIHNpemUoKSwgV1RGTW92ZShhcHBseURhdGEpLCAmaGFu
ZGxlKTsKICAgICBpZiAoIW1hcHBlZEZpbGUpCiAgICAgICAgIHJldHVybiB7IH07CkBAIC04Niw5
ICs4Niw5IEBAIERhdGEgYWRvcHRBbmRNYXBGaWxlKEZpbGVTeXN0ZW06OlBsYXRmb3IKIFNIQTE6
OkRpZ2VzdCBjb21wdXRlU0hBMShjb25zdCBEYXRhJiBkYXRhLCBjb25zdCBTYWx0JiBzYWx0KQog
ewogICAgIFNIQTEgc2hhMTsKLSAgICBzaGExLmFkZEJ5dGVzKHNhbHQuZGF0YSgpLCBzYWx0LnNp
emUoKSk7Ci0gICAgZGF0YS5hcHBseShbJnNoYTFdKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVf
dCBzaXplKSB7Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMoZGF0YSwgc2l6ZSk7CisgICAgc2hhMS5h
ZGRCeXRlcyhhc0J5dGVzKFNwYW4geyBzYWx0IH0pKTsKKyAgICBkYXRhLmFwcGx5KFsmc2hhMV0o
U3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpIHsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhkYXRh
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oCShyZXZp
c2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUg
PHd0Zi9GaWxlU3lzdGVtLmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uRGlzcGF0Y2hlci5oPgog
I2luY2x1ZGUgPHd0Zi9TSEExLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3
dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIApAQCAtNTQsNiArNTUsMTAgQEAgY2xhc3MgRGF0YSB7CiBwdWJsaWM6CiAgICAgRGF0YSgp
IHsgfQogICAgIERhdGEoY29uc3QgdWludDhfdCosIHNpemVfdCk7CisgICAgRGF0YShTcGFuPGNv
bnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKKyAgICAgICAgOiBEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDhfdCo+KGRhdGEuZGF0YSgpKSwgZGF0YS5zaXplKCkpCisgICAgeworICAgIH0KIAog
ICAgIH5EYXRhKCkgeyB9CiAKQEAgLTc5LDcgKzg0LDcgQEAgcHVibGljOgogCiAgICAgRGF0YSBz
dWJyYW5nZShzaXplX3Qgb2Zmc2V0LCBzaXplX3QpIGNvbnN0OwogCi0gICAgYm9vbCBhcHBseShj
b25zdCBGdW5jdGlvbjxib29sIChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mKSBjb25zdDsKKyAg
ICBib29sIGFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2wgKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+
JikgY29uc3Q7CiAKICAgICBEYXRhIG1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpIGNvbnN0
OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZURhdGFDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0J
KHdvcmtpbmcgY29weSkKQEAgLTY5LDEyICs2OSwxMiBAQCBib29sIERhdGE6OmlzTnVsbCgpIGNv
bnN0CiAgICAgcmV0dXJuICFtX2Rpc3BhdGNoRGF0YTsKIH0KIAotYm9vbCBEYXRhOjphcHBseShj
b25zdCBGdW5jdGlvbjxib29sIChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIGFwcGxpZXIpIGNv
bnN0Citib29sIERhdGE6OmFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2wgKFNwYW48Y29uc3Qgc3Rk
OjpieXRlPik+JiBhcHBsaWVyKSBjb25zdAogewogICAgIGlmICghbV9zaXplKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIGRpc3BhdGNoX2RhdGFfYXBwbHkobV9kaXNwYXRjaERh
dGEuZ2V0KCksIFsmYXBwbGllcl0oZGlzcGF0Y2hfZGF0YV90LCBzaXplX3QsIGNvbnN0IHZvaWQq
IGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gICAgICAgIHJldHVybiBhcHBsaWVyKHN0YXRpY19jYXN0
PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgc2l6ZSk7CisgICAgICAgIHJldHVybiBhcHBsaWVyKFNw
YW4geyBzdGF0aWNfY2FzdDxjb25zdCBzdGQ6OmJ5dGUqPihkYXRhKSwgc2l6ZSB9KTsKICAgICB9
KTsKIH0KIApAQCAtOTQsMTQgKzk0LDExIEBAIERhdGEgY29uY2F0ZW5hdGUoY29uc3QgRGF0YSYg
YSwgY29uc3QgRGEKIAogRGF0YSBEYXRhOjphZG9wdE1hcChGaWxlU3lzdGVtOjpNYXBwZWRGaWxl
RGF0YSYmIG1hcHBlZEZpbGUsIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmZCkKIHsK
LSAgICBzaXplX3Qgc2l6ZSA9IG1hcHBlZEZpbGUuc2l6ZSgpOwotICAgIHZvaWQqIG1hcCA9IG1h
cHBlZEZpbGUubGVha0hhbmRsZSgpOwotICAgIEFTU0VSVChtYXApOwotICAgIEFTU0VSVChtYXAg
IT0gTUFQX0ZBSUxFRCk7CisgICAgYXV0byBtYXAgPSBtYXBwZWRGaWxlLmxlYWtIYW5kbGUoKTsK
KyAgICBBU1NFUlQobWFwLmRhdGEoKSk7CisgICAgQVNTRVJUKG1hcC5kYXRhKCkgIT0gTUFQX0ZB
SUxFRCk7CiAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGZkKTsKLSAgICBhdXRvIGJvZHlNYXAg
PSBhZG9wdE9TT2JqZWN0KGRpc3BhdGNoX2RhdGFfY3JlYXRlKG1hcCwgc2l6ZSwgZGlzcGF0Y2hf
Z2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9ERUZBVUxULCAwKSwgW21h
cCwgc2l6ZV0gewotICAgICAgICBtdW5tYXAobWFwLCBzaXplKTsKLSAgICB9KSk7CisgICAgYXV0
byBib2R5TWFwID0gYWRvcHRPU09iamVjdChkaXNwYXRjaF9kYXRhX2NyZWF0ZShtYXAuZGF0YSgp
LCBtYXAuc2l6ZSgpLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BS
SU9SSVRZX0RFRkFVTFQsIDApLCBESVNQQVRDSF9EQVRBX0RFU1RSVUNUT1JfTVVOTUFQKSk7CiAg
ICAgcmV0dXJuIHsgV1RGTW92ZShib2R5TWFwKSwgRGF0YTo6QmFja2luZzo6TWFwIH07CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50
cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlRW50cnkuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTksMTAgKzk5LDEwIEBAIFN0b3JhZ2U6OlJlY29yZCBFbnRyeTo6ZW5jb2RlQXNTdG9y
YWdlUmUKICAgICAKICAgICBlbmNvZGVyLmVuY29kZUNoZWNrc3VtKCk7CiAKLSAgICBEYXRhIGhl
YWRlcihlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgRGF0YSBo
ZWFkZXIgeyBlbmNvZGVyLmJ1ZmZlcigpIH07CiAgICAgRGF0YSBib2R5OwogICAgIGlmIChtX2J1
ZmZlcikKLSAgICAgICAgYm9keSA9IHsgbV9idWZmZXItPmRhdGEoKSwgbV9idWZmZXItPnNpemUo
KSB9OworICAgICAgICBib2R5ID0geyBtX2J1ZmZlci0+Ynl0ZXMoKSB9OwogCiAgICAgcmV0dXJu
IHsgbV9rZXksIG1fdGltZVN0YW1wLCBoZWFkZXIsIGJvZHksIHsgfSB9OwogfQpAQCAtMTExLDcg
KzExMSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gRW50cnk6OmRlY29kZVN0b3IKIHsKICAg
ICBhdXRvIGVudHJ5ID0gbWFrZVVuaXF1ZTxFbnRyeT4oc3RvcmFnZUVudHJ5KTsKIAotICAgIFdU
Rjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihzdG9yYWdlRW50cnkuaGVhZGVyLmRhdGEo
KSwgc3RvcmFnZUVudHJ5LmhlYWRlci5zaXplKCkpOworICAgIFdURjo6UGVyc2lzdGVuY2U6OkRl
Y29kZXIgZGVjb2RlciB7IHN0b3JhZ2VFbnRyeS5oZWFkZXIgfTsKICAgICBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlIHJlc3BvbnNlOwogICAgIGlmICghV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZTo6ZGVjb2RlKGRlY29kZXIsIHJlc3BvbnNlKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVLZXkuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4
LDEzICs4OCwxMyBAQCBzdGF0aWMgdm9pZCBoYXNoU3RyaW5nKFNIQTEmIHNoYTEsIGNvbnN0CiAK
ICAgICBpZiAoc3RyaW5nLmlzOEJpdCgpICYmIHN0cmluZy5pc0FsbEFTQ0lJKCkpIHsKICAgICAg
ICAgY29uc3QgdWludDhfdCBudWxsQnl0ZSA9IDA7Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMoc3Ry
aW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSk7Ci0gICAgICAgIHNoYTEuYWRkQnl0
ZXMoJm51bGxCeXRlLCAxKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhhc0J5dGVzKFNwYW4geyBz
dHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpIH0pKTsKKyAgICAgICAgc2hhMS5h
ZGRCeXRlcyhhc0J5dGVzKFNwYW4geyAmbnVsbEJ5dGUsIDEgfSkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIGF1dG8gY1N0cmluZyA9IHN0cmluZy51dGY4KCk7CiAgICAgLy8gSW5jbHVk
ZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUuCi0gICAgc2hhMS5hZGRCeXRlcyhjU3RyaW5nLmRhdGFB
c1VJbnQ4UHRyKCksIGNTdHJpbmcubGVuZ3RoKCkgKyAxKTsKKyAgICBzaGExLmFkZEJ5dGVzKGFz
Qnl0ZXMoU3BhbiB7IGNTdHJpbmcuZGF0YUFzVUludDhQdHIoKSwgY1N0cmluZy5sZW5ndGgoKSAr
IDEgfSkpOwogfQogCiBLZXk6Okhhc2hUeXBlIEtleTo6Y29tcHV0ZUhhc2goY29uc3QgU2FsdCYg
c2FsdCkgY29uc3QKQEAgLTEwMiw3ICsxMDIsNyBAQCBLZXk6Okhhc2hUeXBlIEtleTo6Y29tcHV0
ZUhhc2goY29uc3QgU2FsCiAgICAgLy8gV2UgZG9uJ3QgcmVhbGx5IG5lZWQgYSBjcnlwdG9ncmFw
aGljIGhhc2guIFRoZSBrZXkgaXMgYWx3YXlzIHZlcmlmaWVkIGFnYWluc3QgdGhlIGVudHJ5IGhl
YWRlci4KICAgICAvLyBTSEExIGp1c3QgaGFwcGVucyB0byBiZSBzdWl0YWJseSBzaXplZCwgZmFz
dCBhbmQgYXZhaWxhYmxlLgogICAgIFNIQTEgc2hhMTsKLSAgICBzaGExLmFkZEJ5dGVzKHNhbHQu
ZGF0YSgpLCBzYWx0LnNpemUoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhhc0J5dGVzKFNwYW4geyBz
YWx0IH0pKTsKIAogICAgIGhhc2hTdHJpbmcoc2hhMSwgbV9wYXJ0aXRpb24pOwogICAgIGhhc2hT
dHJpbmcoc2hhMSwgbV90eXBlKTsKQEAgLTExNyw3ICsxMTcsNyBAQCBLZXk6Okhhc2hUeXBlIEtl
eTo6Y29tcHV0ZUhhc2goY29uc3QgU2FsCiBLZXk6Okhhc2hUeXBlIEtleTo6Y29tcHV0ZVBhcnRp
dGlvbkhhc2goY29uc3QgU2FsdCYgc2FsdCkgY29uc3QKIHsKICAgICBTSEExIHNoYTE7Ci0gICAg
c2hhMS5hZGRCeXRlcyhzYWx0LmRhdGEoKSwgc2FsdC5zaXplKCkpOworICAgIHNoYTEuYWRkQnl0
ZXMoYXNCeXRlcyhTcGFuIHsgc2FsdCB9KSk7CiAKICAgICBoYXNoU3RyaW5nKHNoYTEsIG1fcGFy
dGl0aW9uKTsKIApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVTdG9yYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTQsOCArNDU0LDggQEAgc3RydWN0IFJlY29yZE1ldGFE
YXRhIHsKIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVSZWNvcmRNZXRhRGF0
YShSZWNvcmRNZXRhRGF0YSYgbWV0YURhdGEsIGNvbnN0IERhdGEmIGZpbGVEYXRhKQogewogICAg
IGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIGZpbGVEYXRhLmFwcGx5KFsmbWV0YURhdGEsICZz
dWNjZXNzXShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgewotICAgICAgICBXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YSwgc2l6ZSk7CisgICAgZmlsZURhdGEu
YXBwbHkoWyZtZXRhRGF0YSwgJnN1Y2Nlc3NdKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhKSB7
CisgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihkYXRhKTsKICAgICAg
ICAgCiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGNhY2hlU3RvcmFnZVZlcnNpb247
CiAgICAgICAgIGRlY29kZXIgPj4gY2FjaGVTdG9yYWdlVmVyc2lvbjsKQEAgLTU4Niw3ICs1ODYs
NyBAQCBzdGF0aWMgRGF0YSBlbmNvZGVSZWNvcmRNZXRhRGF0YShjb25zdCBSCiAKICAgICBlbmNv
ZGVyLmVuY29kZUNoZWNrc3VtKCk7CiAKLSAgICByZXR1cm4gRGF0YShlbmNvZGVyLmJ1ZmZlcigp
LCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgcmV0dXJuIHsgZW5jb2Rlci5idWZmZXIoKSB9
OwogfQogCiBzdGQ6Om9wdGlvbmFsPEJsb2JTdG9yYWdlOjpCbG9iPiBTdG9yYWdlOjpzdG9yZUJv
ZHlBc0Jsb2IoV3JpdGVPcGVyYXRpb24mIHdyaXRlT3BlcmF0aW9uKQpJbmRleDogU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50
cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsMTQgKzEyMywxNCBAQCBTdG9yYWdlOjpSZWNv
cmQgU3VicmVzb3VyY2VzRW50cnk6OmVuY29kCiAKICAgICBlbmNvZGVyLmVuY29kZUNoZWNrc3Vt
KCk7CiAKLSAgICByZXR1cm4geyBtX2tleSwgbV90aW1lU3RhbXAsIHsgZW5jb2Rlci5idWZmZXIo
KSwgZW5jb2Rlci5idWZmZXJTaXplKCkgfSwgeyB9LCB7IH19OworICAgIHJldHVybiB7IG1fa2V5
LCBtX3RpbWVTdGFtcCwgeyBlbmNvZGVyLmJ1ZmZlcigpIH0sIHsgfSwgeyB9fTsKIH0KIAogc3Rk
Ojp1bmlxdWVfcHRyPFN1YnJlc291cmNlc0VudHJ5PiBTdWJyZXNvdXJjZXNFbnRyeTo6ZGVjb2Rl
U3RvcmFnZVJlY29yZChjb25zdCBTdG9yYWdlOjpSZWNvcmQmIHN0b3JhZ2VFbnRyeSkKIHsKICAg
ICBhdXRvIGVudHJ5ID0gbWFrZVVuaXF1ZTxTdWJyZXNvdXJjZXNFbnRyeT4oc3RvcmFnZUVudHJ5
KTsKIAotICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihzdG9yYWdlRW50cnku
aGVhZGVyLmRhdGEoKSwgc3RvcmFnZUVudHJ5LmhlYWRlci5zaXplKCkpOworICAgIFdURjo6UGVy
c2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlciB7IHN0b3JhZ2VFbnRyeS5oZWFkZXIgfTsKICAgICBz
dGQ6Om9wdGlvbmFsPFZlY3RvcjxTdWJyZXNvdXJjZUluZm8+PiBzdWJyZXNvdXJjZXM7CiAgICAg
ZGVjb2RlciA+PiBzdWJyZXNvdXJjZXM7CiAgICAgaWYgKCFzdWJyZXNvdXJjZXMpCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2Rlci5oCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTc5LDEzICs3OSwxMyBAQCBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxULCB0eXBl
bmFtZSBzdGQ6OmVuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KICAgICBzdGF0aWMg
dm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgVCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGVu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KCZ2YWx1ZSksIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAgIGVuY29kZXIuZW5j
b2RlRml4ZWRMZW5ndGhEYXRhKGFzQnl0ZXMoU3BhbiB7ICZ2YWx1ZSwgMSB9KSwgYWxpZ25vZihU
KSk7CiAgICAgfQogCiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8VD4gZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCiAgICAgewogICAgICAgICBUIHJlc3VsdDsKLSAgICAgICAgaWYgKGRlY29kZXIu
ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZyZXN1bHQp
LCBzaXplb2YoVCksIGFsaWdub2YoVCkpKQorICAgICAgICBpZiAoZGVjb2Rlci5kZWNvZGVGaXhl
ZExlbmd0aERhdGEoU3BhbiB7ICZyZXN1bHQsIDEgfSkpCiAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5jcHAJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8Q1N0cmluZz46
OmVuY29kZShFbmNvCiAKICAgICB1aW50MzJfdCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAg
ICAgZW5jb2RlciA8PCBsZW5ndGg7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEo
c3RyaW5nLmRhdGFBc1VJbnQ4UHRyKCksIGxlbmd0aCwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVG
aXhlZExlbmd0aERhdGEoc3RyaW5nLmJ5dGVzKCksIDEpOwogfQogCiBXQVJOX1VOVVNFRF9SRVRV
Uk4gYm9vbCBBcmd1bWVudENvZGVyPENTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwg
Q1N0cmluZyYgcmVzdWx0KQpAQCAtMTAzLDcgKzEwMyw3IEBAIFdBUk5fVU5VU0VEX1JFVFVSTiBi
b29sIEFyZ3VtZW50Q29kZXI8Q1MKIAogICAgIGNoYXIqIGJ1ZmZlcjsKICAgICBDU3RyaW5nIHN0
cmluZyA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlm
ICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4oYnVmZmVyKSwgbGVuZ3RoLCAxKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5n
dGhEYXRhKGFzV3JpdGFibGVCeXRlcyhTcGFuIHsgYnVmZmVyLCBsZW5ndGggfSksIDEpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXN1bHQgPSBzdHJpbmc7CkBAIC0xMjUsOSArMTI1
LDkgQEAgdm9pZCBBcmd1bWVudENvZGVyPFN0cmluZz46OmVuY29kZShFbmNvZAogICAgIGVuY29k
ZXIgPDwgbGVuZ3RoIDw8IGlzOEJpdDsKIAogICAgIGlmIChpczhCaXQpCi0gICAgICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBsZW5ndGggKiBz
aXplb2YoTENoYXIpLCBhbGlnbm9mKExDaGFyKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKGFzQnl0ZXMoU3BhbiB7IHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgg
fSksIGFsaWdub2YoTENoYXIpKTsKICAgICBlbHNlCi0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHN0cmluZy5jaGFy
YWN0ZXJzMTYoKSksIGxlbmd0aCAqIHNpemVvZihVQ2hhciksIGFsaWdub2YoVUNoYXIpKTsKKyAg
ICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYXNCeXRlcyhTcGFuIHsgc3RyaW5n
LmNoYXJhY3RlcnMxNigpLCBsZW5ndGggfSksIGFsaWdub2YoVUNoYXIpKTsKIH0KIHRlbXBsYXRl
CiB2b2lkIEFyZ3VtZW50Q29kZXI8U3RyaW5nPjo6ZW5jb2RlPEVuY29kZXI+KEVuY29kZXImLCBj
b25zdCBTdHJpbmcmKTsKQEAgLTE0Myw3ICsxNDMsNyBAQCBzdGF0aWMgaW5saW5lIHN0ZDo6b3B0
aW9uYWw8U3RyaW5nPiBkZWNvCiAgICAgCiAgICAgQ2hhcmFjdGVyVHlwZSogYnVmZmVyOwogICAg
IFN0cmluZyBzdHJpbmcgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZm
ZXIpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJhY3RlclR5cGUpLCBh
bGlnbm9mKENoYXJhY3RlclR5cGUpKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5n
dGhEYXRhKFNwYW4geyBidWZmZXIsIGxlbmd0aCB9KSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKICAgICAKICAgICByZXR1cm4gc3RyaW5nOwpAQCAtMTgxLDEyICsxODEsMTIgQEAgV0FS
Tl9VTlVTRURfUkVUVVJOIGJvb2wgQXJndW1lbnRDb2RlcjxTdAogCiB2b2lkIEFyZ3VtZW50Q29k
ZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNIQTE6OkRp
Z2VzdCYgZGlnZXN0KQogewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGRpZ2Vz
dC5kYXRhKCksIHNpemVvZihkaWdlc3QpLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShTcGFuIHsgZGlnZXN0IH0sIDEpOwogfQogCiBXQVJOX1VOVVNFRF9SRVRVUk4gYm9v
bCBBcmd1bWVudENvZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBT
SEExOjpEaWdlc3QmIGRpZ2VzdCkKIHsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExl
bmd0aERhdGEoZGlnZXN0LmRhdGEoKSwgc2l6ZW9mKGRpZ2VzdCksIDEpOworICAgIHJldHVybiBk
ZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgZGlnZXN0IH0sIDEpOwogfQogCiAj
aWYgSEFWRShBVURJVF9UT0tFTikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Fy
Z3VtZW50Q29kZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
QXJndW1lbnRDb2RlcnMuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTIgKzQ1LDEy
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBTaW1wbGVBcmd1bWUKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBFbmNvZGVyPgogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBUJiB0KQogICAgIHsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oJnQpLCBzaXplb2YoVCksIGFs
aWdub2YoVCkpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsg
JnQsIDEgfSk7CiAgICAgfQogCiAgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyLCBUJiB0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGRlY29k
ZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ0KSwg
c2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKKyAgICAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4
ZWRMZW5ndGhEYXRhKFNwYW4geyAmdCwgMSB9KTsKICAgICB9CiB9OwogCkBAIC02MSwxMyArNjEs
MTQgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IEV4dGVudD4gc3RydQogICAgIHsKICAg
ICAgICAgaWYgKCFFeHRlbnQpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGVuY29kZXIu
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGFy
cmF5UmVmZXJlbmNlLmRhdGEoKSksIGFycmF5UmVmZXJlbmNlLnNpemUoKSAqIHNpemVvZihUKSwg
YWxpZ25vZihUKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4g
eyBhcnJheVJlZmVyZW5jZS5kYXRhKCksIGFycmF5UmVmZXJlbmNlLnNpemUoKSB9KTsKICAgICB9
CiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8QXJyYXlSZWZlcmVuY2VUeXBlPiBkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKICAgICB7CiAgICAgICAgIGlmICghRXh0ZW50KQogICAgICAgICAgICAg
cmV0dXJuIEFycmF5UmVmZXJlbmNlVHlwZSgpOwotICAgICAgICBjb25zdCB1aW50OF90KiBkYXRh
ID0gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aFJlZmVyZW5jZShFeHRlbnQgKiBzaXplb2YoVCks
IGFsaWdub2YoVCkpOworCisgICAgICAgIGNvbnN0IGF1dG8qIGRhdGEgPSBkZWNvZGVyLmRlY29k
ZUZpeGVkTGVuZ3RoUmVmZXJlbmNlKEV4dGVudCAqIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CiAg
ICAgICAgIGlmICghZGF0YSkKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAg
ICAgIHJldHVybiBBcnJheVJlZmVyZW5jZVR5cGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4o
ZGF0YSksIEV4dGVudCk7CkBAIC04Miw3ICs4Myw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBBcmd1bWVudENvZGUKICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRf
dD4oYXJyYXlSZWZlcmVuY2Uuc2l6ZSgpKTsKICAgICAgICAgaWYgKCFhcnJheVJlZmVyZW5jZS5z
aXplKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGFycmF5UmVmZXJlbmNl
LmRhdGEoKSksIGFycmF5UmVmZXJlbmNlLnNpemUoKSAqIHNpemVvZihUKSwgYWxpZ25vZihUKSk7
CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBhcnJheVJlZmVy
ZW5jZS5kYXRhKCksIGFycmF5UmVmZXJlbmNlLnNpemUoKSB9KTsKICAgICB9CiAgICAgc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8QXJyYXlSZWZlcmVuY2VUeXBlPiBkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKICAgICB7CkBAIC05Niw3ICs5Nyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBB
cmd1bWVudENvZGUKICAgICAgICAgaWYgKFVOTElLRUxZKGRhdGFTaXplLmhhc092ZXJmbG93ZWQo
KSkpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgICAgIGNvbnN0IHVp
bnQ4X3QqIGRhdGEgPSBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoUmVmZXJlbmNlKGRhdGFTaXpl
LCBhbGlnbm9mKFQpKTsKKyAgICAgICAgY29uc3QgYXV0byogZGF0YSA9IGRlY29kZXIuZGVjb2Rl
Rml4ZWRMZW5ndGhSZWZlcmVuY2UoZGF0YVNpemUsIGFsaWdub2YoVCkpOwogICAgICAgICBpZiAo
IWRhdGEpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAgICByZXR1cm4g
QXJyYXlSZWZlcmVuY2VUeXBlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KGRhdGEpLCBzdGF0
aWNfY2FzdDxzaXplX3Q+KHNpemUpKTsKQEAgLTQyMyw3ICs0MjQsNyBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpCiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIsIGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5k
bGVyLCBtaW5DYXBhY2l0eT4mIHZlY3RvcikKICAgICB7CiAgICAgICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KHZlY3Rvci5zaXplKCkpOwotICAgICAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih2ZWN0b3Iu
ZGF0YSgpKSwgdmVjdG9yLnNpemUoKSAqIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAg
IGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGFzQnl0ZXMoU3BhbiB7IHZlY3RvciB9KSwg
YWxpZ25vZihUKSk7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4g
Ym9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBP
dmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiYgdmVjdG9yKQpAQCAtNDQ2LDcgKzQ0Nyw3IEBA
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICAgICAgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiB0ZW1wOwog
ICAgICAgICB0ZW1wLmdyb3coc2l6ZSk7CiAKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZp
eGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPih0ZW1wLmRhdGEoKSksIHNp
emUgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKFNwYW4geyB0ZW1wIH0pKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgICAgIHZlY3Rvci5zd2FwKHRlbXApOwpAQCAtNDczLDcgKzQ3NCw3IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICAgICAgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiB2ZWN0b3I7CiAgICAg
ICAgIHZlY3Rvci5ncm93KHNpemUpOwogCi0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhl
ZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4odmVjdG9yLmRhdGEoKSksIHNp
emUgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKFNwYW4geyB2ZWN0b3IgfSkpCiAgICAgICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogCiAgICAgICAgIHJldHVybiB2ZWN0b3I7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9BcnJheVJlZmVyZW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL0FycmF5UmVmZXJlbmNlLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FycmF5UmVmZXJlbmNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDYgKzMwLDggQEAKIAogbmFtZXNwYWNlIElQQyB7CiAKKy8vIEZJWE1FOiBSZXBsYWNl
IHdpdGggPHd0Zi9TcGFuLmg+CisKIGlubGluZSBjb25zdGV4cHIgc2l6ZV90IGFycmF5UmVmZXJl
bmNlRHluYW1pY0V4dGVudCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCk7CiAK
IHRlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgRXh0ZW50ID0gYXJyYXlSZWZlcmVuY2VEeW5h
bWljRXh0ZW50PgpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsMTMgKzIwNiwxMyBAQCBib29sIERlY29kZXI6OmJ1ZmZl
cklzTGFyZ2VFbm91Z2hUb0NvbnRhCiAgICAgcmV0dXJuIGFsaWduZWRCdWZmZXJJc0xhcmdlRW5v
dWdoVG9Db250YWluKHJvdW5kVXBUb0FsaWdubWVudChtX2J1ZmZlclBvcywgYWxpZ25tZW50KSwg
bV9idWZmZXIsIG1fYnVmZmVyRW5kLCBzaXplKTsKIH0KIAotYm9vbCBEZWNvZGVyOjpkZWNvZGVG
aXhlZExlbmd0aERhdGEodWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1l
bnQpCitib29sIERlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPHN0ZDo6Ynl0ZT4g
ZGF0YSwgc2l6ZV90IGFsaWdubWVudCkKIHsKLSAgICBpZiAoIWFsaWduQnVmZmVyUG9zaXRpb24o
YWxpZ25tZW50LCBzaXplKSkKKyAgICBpZiAoIWFsaWduQnVmZmVyUG9zaXRpb24oYWxpZ25tZW50
LCBkYXRhLnNpemUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1lbWNweShkYXRh
LCBtX2J1ZmZlclBvcywgc2l6ZSk7Ci0gICAgbV9idWZmZXJQb3MgKz0gc2l6ZTsKKyAgICBtZW1j
cHkoZGF0YS5kYXRhKCksIG1fYnVmZmVyUG9zLCBkYXRhLnNpemUoKSk7CisgICAgbV9idWZmZXJQ
b3MgKz0gZGF0YS5zaXplKCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksMTMg
QEAgcHVibGljOgogICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGlzVmFsaWQoKSBjb25zdCB7
IHJldHVybiBtX2J1ZmZlclBvcyAhPSBudWxscHRyOyB9CiAgICAgdm9pZCBtYXJrSW52YWxpZCgp
IHsgbV9idWZmZXJQb3MgPSBudWxscHRyOyB9CiAKLSAgICBXQVJOX1VOVVNFRF9SRVRVUk4gYm9v
bCBkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCogZGF0YSwgc2l6ZV90LCBzaXplX3QgYWxp
Z25tZW50KTsKKyAgICBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVGaXhlZExlbmd0aERh
dGEoU3BhbjxzdGQ6OmJ5dGU+LCBzaXplX3QgYWxpZ25tZW50KTsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBOPgorICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZUZp
eGVkTGVuZ3RoRGF0YShTcGFuPFQsIE4+IGRhdGEsIHNpemVfdCBhbGlnbm1lbnQgPSBhbGlnbm9m
KFQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShhc1dyaXRh
YmxlQnl0ZXMoZGF0YSksIGFsaWdubWVudCk7CisgICAgfQogCiAgICAgLy8gVGhlIGRhdGEgaW4g
dGhlIHJldHVybmVkIHBvaW50ZXIgaGVyZSB3aWxsIG9ubHkgYmUgdmFsaWQgZm9yIHRoZSBsaWZl
dGltZSBvZiB0aGUgRGVjb2RlciBvYmplY3QuCiAgICAgLy8gUmV0dXJucyBudWxscHRyIG9uIGZh
aWx1cmUuCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmNwcAkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIwMiwxMiArMjAyLDEyIEBAIHVpbnQ4X3QqIEVuY29kZXI6Omdyb3co
c2l6ZV90IGFsaWdubWVudCwKICAgICByZXR1cm4gbV9idWZmZXIgKyBhbGlnbmVkU2l6ZTsKIH0K
IAotdm9pZCBFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0
YSwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQpCit2b2lkIEVuY29kZXI6OmVuY29kZUZp
eGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSwgc2l6ZV90IGFsaWdubWVu
dCkKIHsKLSAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZGF0YSkgJSBh
bGlnbm1lbnQpKTsKKyAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZGF0
YS5kYXRhKCkpICUgYWxpZ25tZW50KSk7CiAKLSAgICB1aW50OF90KiBidWZmZXIgPSBncm93KGFs
aWdubWVudCwgc2l6ZSk7Ci0gICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7CisgICAgYXV0
byogYnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQsIGRhdGEuc2l6ZSgpKTsKKyAgICBtZW1jcHkoYnVm
ZmVyLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwogfQogCiB2b2lkIEVuY29kZXI6OmFkZEF0
dGFjaG1lbnQoQXR0YWNobWVudCYmIGF0dGFjaG1lbnQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0lQQy9FbmNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvRW5jb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9FbmNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNs
dWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAj
aW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSVBDIHsKQEAgLTYwLDcgKzYxLDEzIEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgd3JhcEZvclRlc3RpbmcoVW5pcXVlUmVmPEVuY29kZXI+JiYpOwog
Ci0gICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6
ZV90LCBzaXplX3QgYWxpZ25tZW50KTsKKyAgICB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShT
cGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSwgc2l6ZV90IGFsaWdubWVudCk7CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgTj4KKyAgICB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0
YShTcGFuPFQsIE4+IGRhdGEsIHNpemVfdCBhbGlnbm1lbnQgPSBhbGlnbm9mKFQpKQorICAgIHsK
KyAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGFzQnl0ZXMoZGF0YSksIGFsaWdubWVudCk7
CisgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBFbmNvZGVyJiBvcGVyYXRv
cjw8KFQmJiB0KQpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU2hhcmVkQnVmZmVy
Q29weS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU2hhcmVk
QnVmZmVyQ29weS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vSVBDL1NoYXJlZEJ1ZmZlckNvcHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3
IEBAIHZvaWQgU2hhcmVkQnVmZmVyQ29weTo6ZW5jb2RlKEVuY29kZXImIGUKICAgICBpZiAoIWJ1
ZmZlclNpemUpCiAgICAgICAgIHJldHVybjsKICAgICBmb3IgKGF1dG8mIHNlZ21lbnQgOiAqbV9i
dWZmZXIpCi0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHNlZ21lbnQuc2Vn
bWVudC0+ZGF0YSgpLCBzZWdtZW50LnNlZ21lbnQtPnNpemUoKSwgMSk7CisgICAgICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHNlZ21lbnQuc2VnbWVudC0+Ynl0ZXMoKSwgMSk7CiB9
CiAKIHN0ZDo6b3B0aW9uYWw8U2hhcmVkQnVmZmVyQ29weT4gU2hhcmVkQnVmZmVyQ29weTo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9T
dHJlYW1Db25uZWN0aW9uRW5jb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25FbmNvZGVyLmgJKHJldmlzaW9uIDI3ODgwOSkKKysr
IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25FbmNvZGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJz
LmgiCiAjaW5jbHVkZSAiTWVzc2FnZU5hbWVzLmgiCisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBJUEMgewpAQCAtNTMsMjEg
KzU0LDI3IEBAIHB1YmxpYzoKIAogICAgIH5TdHJlYW1Db25uZWN0aW9uRW5jb2RlcigpID0gZGVm
YXVsdDsKIAotICAgIGJvb2wgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqIGRh
dGEsIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50KQorICAgIGJvb2wgZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhLCBzaXplX3QgYWxpZ25tZW50KQog
ICAgIHsKICAgICAgICAgc2l6ZV90IGJ1ZmZlclBvaW50ZXIgPSBzdGF0aWNfY2FzdDxzaXplX3Q+
KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fYnVmZmVyICsgbV9lbmNvZGVkU2l6ZSkpOwog
ICAgICAgICBzaXplX3QgbmV3QnVmZmVyUG9pbnRlciA9IHJvdW5kVXBUb011bHRpcGxlT2YoYWxp
Z25tZW50LCBidWZmZXJQb2ludGVyKTsKICAgICAgICAgaWYgKG5ld0J1ZmZlclBvaW50ZXIgPCBi
dWZmZXJQb2ludGVyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpbnRwdHJf
dCBhbGlnbmVkU2l6ZSA9IG1fZW5jb2RlZFNpemUgKyAobmV3QnVmZmVyUG9pbnRlciAtIGJ1ZmZl
clBvaW50ZXIpOwotICAgICAgICBpZiAoIXJlc2VydmUoYWxpZ25lZFNpemUsIHNpemUpKQorICAg
ICAgICBpZiAoIXJlc2VydmUoYWxpZ25lZFNpemUsIGRhdGEuc2l6ZSgpKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgdWludDhfdCogYnVmZmVyID0gbV9idWZmZXIgKyBhbGln
bmVkU2l6ZTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7Ci0gICAgICAgIG1f
ZW5jb2RlZFNpemUgPSBhbGlnbmVkU2l6ZSArIHNpemU7CisgICAgICAgIGF1dG8qIGJ1ZmZlciA9
IG1fYnVmZmVyICsgYWxpZ25lZFNpemU7CisgICAgICAgIG1lbWNweShidWZmZXIsIGRhdGEuZGF0
YSgpLCBkYXRhLnNpemUoKSk7CisgICAgICAgIG1fZW5jb2RlZFNpemUgPSBhbGlnbmVkU2l6ZSAr
IGRhdGEuc2l6ZSgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCBzaXplX3QgTj4KKyAgICB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShT
cGFuPFQsIE4+IGRhdGEsIHNpemVfdCBhbGlnbm1lbnQgPSBhbGlnbm9mKFQpKQorICAgIHsKKyAg
ICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGFzQnl0ZXMoZGF0YSksIGFsaWdubWVudCk7Cisg
ICAgfQorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBTdHJlYW1Db25uZWN0aW9uRW5j
b2RlciYgb3BlcmF0b3I8PChUJiYgdCkKICAgICB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJl
ZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
U2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0NCw3ICsxNDQsNyBAQCBzdGF0aWMgdm9pZCBlbmNvZGVTaGFyZWRCdWZmZXIoRW5j
b2RlciYgCiAgICAgLy8gb3ZlciB0aGUgSVBDLiBDb25uZWN0aW9uVW5peC5jcHAgYWxyZWFkeSB1
c2VzIHNoYXJlZCBtZW1vcnkgdG8gc2VuZCBhbnkgSVBDIG1lc3NhZ2UgdGhhdCBpcwogICAgIC8v
IHRvbyBsYXJnZS4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDg1NzEuCiAgICAgZm9yIChjb25zdCBhdXRvJiBlbGVtZW50IDogKmJ1ZmZlcikKLSAgICAgICAg
ZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoZWxlbWVudC5zZWdtZW50LT5kYXRhKCksIGVs
ZW1lbnQuc2VnbWVudC0+c2l6ZSgpLCAxKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoZWxlbWVudC5zZWdtZW50LT5ieXRlcygpLCAxKTsKICNlbHNlCiAgICAgU2hhcmVk
TWVtb3J5OjpIYW5kbGUgaGFuZGxlOwogICAgIGF1dG8gc2hhcmVkTWVtb3J5QnVmZmVyID0gU2hh
cmVkTWVtb3J5Ojpjb3B5QnVmZmVyKCpidWZmZXIpOwpAQCAtMTgwLDcgKzE4MCw3IEBAIHN0YXRp
YyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVTaGEKIAogICAgIFZlY3Rvcjx1aW50OF90
PiBkYXRhOwogICAgIGRhdGEuZ3JvdyhidWZmZXJTaXplKTsKLSAgICBpZiAoIWRlY29kZXIuZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgMSkpCisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgZGF0YSB9LCAxKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYnVmZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RG
TW92ZShkYXRhKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVu
dFJ1bGVMaXN0U3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzMSwxOCArMTMxLDIwIEBAIHN0YXRpYyBXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6RGF0YSBlbmNvZGUKICAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmNvbmRpdGlvbmVkRmls
dGVyc0J5dGVjb2RlU2l6ZTsKICAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmNvbmRpdGlvbnNBcHBs
eU9ubHlUb0RvbWFpbjsKIAotICAgIEFTU0VSVChlbmNvZGVyLmJ1ZmZlclNpemUoKSA9PSBDb250
ZW50UnVsZUxpc3RGaWxlSGVhZGVyU2l6ZSk7Ci0gICAgcmV0dXJuIFdlYktpdDo6TmV0d29ya0Nh
Y2hlOjpEYXRhKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICBB
U1NFUlQoZW5jb2Rlci5idWZmZXIoKS5zaXplKCkgPT0gQ29udGVudFJ1bGVMaXN0RmlsZUhlYWRl
clNpemUpOworICAgIHJldHVybiBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YSB7IGVuY29kZXIu
YnVmZmVyKCkgfTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBnZXREYXRhKGNvbnN0
IFQmLCBjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYpOwotdGVt
cGxhdGU8PiB2b2lkIGdldERhdGEoY29uc3QgV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGEmIGRh
dGEsIGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCosIHNpemVfdCk+JiBmdW5jdGlv
bikKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgZ2V0RGF0YShjb25zdCBUJiwgY29uc3QgRnVu
Y3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYpOworCit0ZW1wbGF0ZTw+IHZvaWQg
Z2V0RGF0YShjb25zdCBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YSYgZGF0YSwgY29uc3QgRnVu
Y3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYgZnVuY3Rpb24pCiB7CiAgICAgZGF0
YS5hcHBseShmdW5jdGlvbik7CiB9Ci10ZW1wbGF0ZTw+IHZvaWQgZ2V0RGF0YShjb25zdCBXZWJD
b3JlOjpTaGFyZWRCdWZmZXImIGRhdGEsIGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhf
dCosIHNpemVfdCk+JiBmdW5jdGlvbikKKwordGVtcGxhdGU8PiB2b2lkIGdldERhdGEoY29uc3Qg
V2ViQ29yZTo6U2hhcmVkQnVmZmVyJiBkYXRhLCBjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29u
c3Qgc3RkOjpieXRlPik+JiBmdW5jdGlvbikKIHsKLSAgICBmdW5jdGlvbihkYXRhLmRhdGEoKSwg
ZGF0YS5zaXplKCkpOworICAgIGZ1bmN0aW9uKGRhdGEuYnl0ZXMoKSk7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CkBAIC0xNTAsMTMgKzE1MiwxMyBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxD
b250ZW50UnVsZUxpc3RNZXRhCiB7CiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CiAgICAgQ29u
dGVudFJ1bGVMaXN0TWV0YURhdGEgbWV0YURhdGE7Ci0gICAgZ2V0RGF0YShmaWxlRGF0YSwgWyZt
ZXRhRGF0YSwgJnN1Y2Nlc3MsICZmaWxlRGF0YV0oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90
IHNpemUpIHsKKyAgICBnZXREYXRhKGZpbGVEYXRhLCBbJm1ldGFEYXRhLCAmc3VjY2VzcywgJmZp
bGVEYXRhXShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkgewogICAgICAgICAvLyBUaGUgZmls
ZSBkYXRhIHNob3VsZCBiZSBtYXBwZWQgaW50byBvbmUgY29udGludW91cyBtZW1vcnkgc2VnbWVu
dCBzbyB0aGUgc2l6ZQogICAgICAgICAvLyBwYXNzZWQgdG8gdGhlIGFwcGxpZXIgc2hvdWxkIGFs
d2F5cyBlcXVhbCB0aGUgZGF0YSBzaXplLgotICAgICAgICBpZiAoc2l6ZSAhPSBmaWxlRGF0YS5z
aXplKCkpCisgICAgICAgIGlmIChkYXRhLnNpemUoKSAhPSBmaWxlRGF0YS5zaXplKCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2Rl
ciBkZWNvZGVyKGRhdGEsIHNpemUpOworICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVy
IGRlY29kZXIgeyBkYXRhIH07CiAgICAgICAgIAogICAgICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQz
Ml90PiB2ZXJzaW9uOwogICAgICAgICBkZWNvZGVyID4+IHZlcnNpb247CkBAIC0yMjgsOCArMjMw
LDggQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TWFwcGVkRGF0YT4gb3BlbkFuZAogc3RhdGljIGJv
b2wgd3JpdGVEYXRhVG9GaWxlKGNvbnN0IFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhJiBmaWxl
RGF0YSwgUGxhdGZvcm1GaWxlSGFuZGxlIGZkKQogewogICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7
Ci0gICAgZmlsZURhdGEuYXBwbHkoW2ZkLCAmc3VjY2Vzc10oY29uc3QgdWludDhfdCogZGF0YSwg
c2l6ZV90IHNpemUpIHsKLSAgICAgICAgaWYgKHdyaXRlVG9GaWxlKGZkLCBkYXRhLCBzaXplKSA9
PSAtMSkgeworICAgIGZpbGVEYXRhLmFwcGx5KFtmZCwgJnN1Y2Nlc3NdKFNwYW48Y29uc3Qgc3Rk
OjpieXRlPiBkYXRhKSB7CisgICAgICAgIGlmICh3cml0ZVRvRmlsZShmZCwgZGF0YS5kYXRhKCks
IGRhdGEuc2l6ZSgpKSA9PSAtMSkgewogICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9tYWMvTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nLmNwcAko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL0xlZ2FjeVNl
c3Npb25TdGF0ZUNvZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3ICsxMjksNyBAQCBw
dWJsaWM6CiAgICAgICAgICp0aGlzIDw8IGxlbmd0aDsKIAogICAgICAgICAqdGhpcyA8PCBzdGF0
aWNfY2FzdDx1aW50NjRfdD4obGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgICAgIGVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihTdHJpbmdW
aWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKS5nZXQoKSksIGxlbmd0aCAqIHNpemVv
ZihVQ2hhciksIGFsaWdub2YoVUNoYXIpKTsKKyAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KFNwYW4geyBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKS5nZXQoKSwg
bGVuZ3RoIH0pOwogCiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CkBAIC0xMzcsNyArMTM3
LDcgQEAgcHVibGljOgogICAgIEhpc3RvcnlFbnRyeURhdGFFbmNvZGVyJiBvcGVyYXRvcjw8KGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgdmFsdWUpCiAgICAgewogICAgICAgICAqdGhpcyA8PCBzdGF0
aWNfY2FzdDx1aW50NjRfdD4odmFsdWUuc2l6ZSgpKTsKLSAgICAgICAgZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKHZhbHVlLmRhdGEoKSwgdmFsdWUuc2l6ZSgpLCAxKTsKKyAgICAgICAgZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKFNwYW4geyB2YWx1ZSB9LCAxKTsKIAogICAgICAgICByZXR1cm4gKnRoaXM7
CiAgICAgfQpAQCAtMTQ1LDcgKzE0NSw3IEBAIHB1YmxpYzoKICAgICBIaXN0b3J5RW50cnlEYXRh
RW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBWZWN0b3I8Y2hhcj4mIHZhbHVlKQogICAgIHsKICAg
ICAgICAgKnRoaXMgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZhbHVlLnNpemUoKSk7Ci0gICAg
ICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3Qq
Pih2YWx1ZS5kYXRhKCkpLCB2YWx1ZS5zaXplKCksIDEpOworICAgICAgICBlbmNvZGVGaXhlZExl
bmd0aERhdGEoU3BhbiB7IHZhbHVlIH0sIDEpOwogCiAgICAgICAgIHJldHVybiAqdGhpczsKICAg
ICB9CkBAIC0yMDYsMTcgKzIwNiwyMyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX2FyaXRobWV0aWM8VHlwZT46OnZhbHVlLCAiIik7CiAKLSAgICAgICAg
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2YWx1ZSks
IHNpemVvZih2YWx1ZSksIHNpemVvZih2YWx1ZSkpOworICAgICAgICBlbmNvZGVGaXhlZExlbmd0
aERhdGEoYXNCeXRlcyhTcGFuIHsgJnZhbHVlLCAxIH0pLCBzaXplb2YodmFsdWUpKTsKICAgICAg
ICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAotICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBhbGlnbm1lbnQpCisg
ICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEs
IHVuc2lnbmVkIGFsaWdubWVudCkKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGRhdGEg
fHwgIXNpemUpOwotICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
ZGF0YSkgJSBhbGlnbm1lbnQpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGF0YS5kYXRhKCkg
fHwgIWRhdGEuc2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KGRhdGEuZGF0YSgpKSAlIGFsaWdubWVudCkpOwogCi0gICAgICAgIHVpbnQ4X3QqIGJ1
ZmZlciA9IGdyb3coYWxpZ25tZW50LCBzaXplKTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlciwgZGF0
YSwgc2l6ZSk7CisgICAgICAgIGF1dG8qIGJ1ZmZlciA9IGdyb3coYWxpZ25tZW50LCBkYXRhLnNp
emUoKSk7CisgICAgICAgIG1lbWNweShidWZmZXIsIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IE4+CisgICAgdm9pZCBl
bmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbjxULCBOPiBkYXRhLCBzaXplX3QgYWxpZ25tZW50ID0g
YWxpZ25vZihUKSkKKyAgICB7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShhc0J5dGVz
KGRhdGEpLCBhbGlnbm1lbnQpOwogICAgIH0KIAogICAgIHVpbnQ4X3QqIGdyb3codW5zaWduZWQg
YWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKQEAgLTYwMSw3ICs2MDcsNyBAQCBwdWJsaWM6CiAKICAg
ICAgICAgVUNoYXIqIGJ1ZmZlcjsKICAgICAgICAgYXV0byBzdHJpbmcgPSBTdHJpbmc6OmNyZWF0
ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgICAgICBkZWNvZGVGaXhlZExlbmd0
aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9m
KFVDaGFyKSwgYWxpZ25vZihVQ2hhcikpOworICAgICAgICBkZWNvZGVGaXhlZExlbmd0aERhdGEo
U3BhbiB7IGJ1ZmZlciwgbGVuZ3RoIH0sIGFsaWdub2YoVUNoYXIpKTsKIAogICAgICAgICB2YWx1
ZSA9IHN0cmluZzsKICAgICAgICAgcmV0dXJuICp0aGlzOwpAQCAtNzM3LDE3ICs3NDMsMjMgQEAg
cHJpdmF0ZToKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2FyaXRobWV0aWM8VHlwZT46
OnZhbHVlLCAiIik7CiAgICAgICAgIHZhbHVlID0gVHlwZSgpOwogCi0gICAgICAgIGRlY29kZUZp
eGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWUpLCBzaXplb2Yo
dmFsdWUpLCBzaXplb2YodmFsdWUpKTsKKyAgICAgICAgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNw
YW4geyAmdmFsdWUsIDEgfSwgc2l6ZW9mKHZhbHVlKSk7CiAgICAgICAgIHJldHVybiAqdGhpczsK
ICAgICB9CiAKLSAgICB2b2lkIGRlY29kZUZpeGVkTGVuZ3RoRGF0YSh1aW50OF90KiBkYXRhLCBz
aXplX3Qgc2l6ZSwgdW5zaWduZWQgYWxpZ25tZW50KQorICAgIHZvaWQgZGVjb2RlRml4ZWRMZW5n
dGhEYXRhKFNwYW48c3RkOjpieXRlPiBkYXRhLCB1bnNpZ25lZCBhbGlnbm1lbnQpCiAgICAgewot
ICAgICAgICBpZiAoIWFsaWduQnVmZmVyUG9zaXRpb24oYWxpZ25tZW50LCBzaXplKSkKKyAgICAg
ICAgaWYgKCFhbGlnbkJ1ZmZlclBvc2l0aW9uKGFsaWdubWVudCwgZGF0YS5zaXplKCkpKQogICAg
ICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIG1lbWNweShkYXRhLCBtX2J1ZmZlciwgc2l6ZSk7
Ci0gICAgICAgIG1fYnVmZmVyICs9IHNpemU7CisgICAgICAgIG1lbWNweShkYXRhLmRhdGEoKSwg
bV9idWZmZXIsIGRhdGEuc2l6ZSgpKTsKKyAgICAgICAgbV9idWZmZXIgKz0gZGF0YS5zaXplKCk7
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IE4+CisgICAgdm9pZCBk
ZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbjxULCBOPiBkYXRhLCBzaXplX3QgYWxpZ25tZW50KQor
ICAgIHsKKyAgICAgICAgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGFzV3JpdGFibGVCeXRlcyhkYXRh
KSwgYWxpZ25tZW50KTsKICAgICB9CiAKICAgICBib29sIGFsaWduQnVmZmVyUG9zaXRpb24odW5z
aWduZWQgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwCShyZXZpc2lvbiAyNzg4MDkp
CisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjkxLDcgKzY5MSw3IEBAIHN0YXRpYyBib29sIGVuY29kZVR5cGVk
QXJyYXkoSVBDOjpFbmNvZGUKICAgICBpZiAoIWRhdGEuYnVmZmVyKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmJ1ZmZlciksIGRhdGEubGVuZ3RoLCAxKTsKKyAgICBl
bmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBzdGQ6OmJ5dGUqPihkYXRhLmJ1ZmZlciksIGRhdGEubGVuZ3RoIH0sIDEpOwogICAgIHJldHVy
biB0cnVlOwogfQogCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwyNyBAQAorMjAyMS0wNi0xMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0Bh
cHBsZS5jb20+CisKKyAgICAgICAgQWRvcHQgU3BhbiBpbiBtb3JlIHBsYWNlcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2ODg3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL2NhaXJvL1BpeGVsRHVtcFN1cHBvcnRDYWlyby5jcHA6CisgICAgICAg
IChjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JCaXRtYXBDb250ZXh0KToKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9jZy9QaXhlbER1bXBTdXBwb3J0Q0cuY3BwOgorICAgICAgICAoY29tcHV0ZVNI
QTFIYXNoU3RyaW5nRm9yQml0bWFwQ29udGV4dCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvQmxvb21GaWx0ZXIuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Z2VuZXJh
dGVSYW5kb21EaWdlc3RzKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxl
U3lzdGVtLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisgICAgICAgICog
VGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6Q29ubmVjdGlvbjo6d2ViU29ja2V0SGFuZHNoYWtlKToKKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwOgorICAgICAgICAoV1RSOjpjb21w
dXRlU0hBMUhhc2hTdHJpbmdGb3JDYWlyb1N1cmZhY2UpOgorICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvY2cvVGVzdEludm9jYXRpb25DRy5jcHA6CisgICAgICAgIChXVFI6OmNvbXB1dGVTSEEx
SGFzaFN0cmluZ0ZvckNvbnRleHQpOgorCiAyMDIxLTA2LTExICBGdWppaSBIaXJvbm9yaSAgPEhp
cm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIFtXaW5dW0R1bXBSZW5kZXJUcmVlXSAt
LW5vLXRpbWVvdXQgc3dpdGNoIGRvZXNuJ3Qgd29yawpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2Fpcm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9E
dW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fpcm8uY3BwCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fp
cm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHZvaWQgY29tcHV0ZVNIQTFI
YXNoU3RyaW5nRm9yQml0bWFwQ29udGUKICAgICBTSEExIHNoYTE7CiAgICAgdW5zaWduZWQgY2hh
ciogYml0bWFwRGF0YSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpKTsKICAgICBmb3IgKHVuc2lnbmVkIHJvdyA9IDA7IHJv
dyA8IHBpeGVsc0hpZ2g7IHJvdysrKSB7Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMoYml0bWFwRGF0
YSwgNCAqIHBpeGVsc1dpZGUpOworICAgICAgICBzaGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7
IGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlIH0pKTsKICAgICAgICAgYml0bWFwRGF0YSArPSBi
eXRlc1BlclJvdzsKICAgICB9CiAgICAgU0hBMTo6RGlnZXN0IGhhc2g7CkluZGV4OiBUb29scy9E
dW1wUmVuZGVyVHJlZS9jZy9QaXhlbER1bXBTdXBwb3J0Q0cuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRDRy5jcHAJKHJldmlzaW9uIDI3
ODgwOSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRDRy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg4LDE0ICs4OCwxNCBAQCB2b2lkIGNvbXB1dGVTSEExSGFzaFN0
cmluZ0ZvckJpdG1hcENvbnRlCiAgICAgICAgICAgICB1aW50MzJfdCBidWZmZXJbcGl4ZWxzV2lk
ZV07CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNvbHVtbiA9IDA7IGNvbHVtbiA8IHBpeGVs
c1dpZGU7IGNvbHVtbisrKQogICAgICAgICAgICAgICAgIGJ1ZmZlcltjb2x1bW5dID0gT1NSZWFk
TGl0dGxlSW50MzIoYml0bWFwRGF0YSwgNCAqIGNvbHVtbik7Ci0gICAgICAgICAgICBzaGExLmFk
ZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZlciksIDQgKiBwaXhl
bHNXaWRlKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgYnVmZmVy
LCBwaXhlbHNXaWRlIH0pKTsKICAgICAgICAgICAgIGJpdG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7
CiAgICAgICAgIH0KICAgICB9IGVsc2UKICNlbmRpZgogICAgIHsKICAgICAgICAgZm9yICh1bnNp
Z25lZCByb3cgPSAwOyByb3cgPCBwaXhlbHNIaWdoOyByb3crKykgewotICAgICAgICAgICAgc2hh
MS5hZGRCeXRlcyhiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lkZSk7CisgICAgICAgICAgICBzaGEx
LmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7IGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlIH0pKTsK
ICAgICAgICAgICAgIGJpdG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7CiAgICAgICAgIH0KICAgICB9
CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9CbG9vbUZpbHRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQmxvb21GaWx0ZXIuY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9CbG9v
bUZpbHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgc3RhdGljIFZlY3Rv
cjxTSEExOjpEaWdlc3Q+IGdlbmVyYXRlUmFuZAogICAgIFNIQTEgc2hhMTsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgaGFzaENvdW50OyArK2kpIHsKICAgICAgICAgZG91YmxlIHJhbmRv
bSA9IHJhbmRvbU51bWJlcigpOwotICAgICAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDhfdCo+KCZyYW5kb20pLCBzaXplb2YoZG91YmxlKSk7CisgICAgICAgIHNoYTEuYWRk
Qnl0ZXMoYXNCeXRlcyhTcGFuIHsgJnJhbmRvbSwgMSB9KSk7CiAgICAgICAgIFNIQTE6OkRpZ2Vz
dCBkaWdlc3Q7CiAgICAgICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsKICAgICAgICAgaGFz
aGVzLmFwcGVuZChkaWdlc3QpOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYv
RmlsZVN5c3RlbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvRmlsZVN5c3RlbS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsOCArMTMz
LDggQEAgVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBNYXBwaW5nRXhpc3RpbmdGaQogICAgIEZpbGVT
eXN0ZW06Ok1hcHBlZEZpbGVEYXRhIG1hcHBlZEZpbGVEYXRhKHRlbXBGaWxlUGF0aCgpLCBGaWxl
U3lzdGVtOjpNYXBwZWRGaWxlTW9kZTo6U2hhcmVkLCBzdWNjZXNzKTsKICAgICBFWFBFQ1RfVFJV
RShzdWNjZXNzKTsKICAgICBFWFBFQ1RfVFJVRSghIW1hcHBlZEZpbGVEYXRhKTsKLSAgICBFWFBF
Q1RfVFJVRShtYXBwZWRGaWxlRGF0YS5zaXplKCkgPT0gc3RybGVuKEZpbGVTeXN0ZW1UZXN0RGF0
YSkpOwotICAgIEVYUEVDVF9UUlVFKHN0cm5zdHIoRmlsZVN5c3RlbVRlc3REYXRhLCBzdGF0aWNf
Y2FzdDxjb25zdCBjaGFyKj4obWFwcGVkRmlsZURhdGEuZGF0YSgpKSwgbWFwcGVkRmlsZURhdGEu
c2l6ZSgpKSk7CisgICAgRVhQRUNUX1RSVUUobWFwcGVkRmlsZURhdGEuZGF0YSgpLnNpemUoKSA9
PSBzdHJsZW4oRmlsZVN5c3RlbVRlc3REYXRhKSk7CisgICAgRVhQRUNUX1RSVUUoc3RybnN0cihG
aWxlU3lzdGVtVGVzdERhdGEsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KG1hcHBlZEZp
bGVEYXRhLmRhdGEoKS5kYXRhKCkpLCBtYXBwZWRGaWxlRGF0YS5kYXRhKCkuc2l6ZSgpKSk7CiB9
CiAKIFRFU1RfRihGaWxlU3lzdGVtVGVzdCwgTWFwcGluZ0V4aXN0aW5nRW1wdHlGaWxlKQpJbmRl
eDogVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbQkocmV2aXNpb24gMjc4ODA5
KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0zNDAsMTEgKzM0MCwxMSBAQCB2b2lkIENvbm5lY3Rpb246OndlYlNvY2tldEhhbmRz
aGFrZShDb21wCiAKICAgICAgICAgICAgIGNvbnN0ZXhwciBhdXRvKiB3ZWJTb2NrZXRLZXlHVUlE
ID0gIjI1OEVBRkE1LUU5MTQtNDdEQS05NUNBLUM1QUIwREM4NUIxMSI7CiAgICAgICAgICAgICBT
SEExIHNoYTE7Ci0gICAgICAgICAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDhfdCo+KGtleUJlZ2luKSwga2V5RW5kIC0ga2V5QmVnaW4pOwotICAgICAgICAgICAg
c2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih3ZWJTb2NrZXRL
ZXlHVUlEKSwgc3RybGVuKHdlYlNvY2tldEtleUdVSUQpKTsKKyAgICAgICAgICAgIHNoYTEuYWRk
Qnl0ZXMoYXNCeXRlcyhTcGFuIHsga2V5QmVnaW4sIGtleUVuZCB9KSk7CisgICAgICAgICAgICBz
aGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7IHdlYlNvY2tldEtleUdVSUQsIHN0cmxlbih3ZWJT
b2NrZXRLZXlHVUlEKSB9KSk7CiAgICAgICAgICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAgICAg
ICAgICAgIHNoYTEuY29tcHV0ZUhhc2goaGFzaCk7Ci0gICAgICAgICAgICByZXR1cm4gYmFzZTY0
RW5jb2RlVG9TdHJpbmcoaGFzaC5kYXRhKCksIFNIQTE6Omhhc2hTaXplKTsKKyAgICAgICAgICAg
IHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgaGFzaCB9KTsKICAgICAgICAgfTsK
IAogICAgICAgICBjb25uZWN0aW9uLnNlbmQoSFRUUFJlc3BvbnNlKDEwMSwgewpJbmRleDogVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9jYWlyby9UZXN0SW52b2NhdGlvbkNhaXJvLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8u
Y3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rl
c3RJbnZvY2F0aW9uQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHN0
YXRpYyB2b2lkIGNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckNhaXIKICAgICBTSEExIHNoYTE7CiAg
ICAgdW5zaWduZWQgY2hhciogYml0bWFwRGF0YSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpKTsKICAgICBmb3IgKHNpemVf
dCByb3cgPSAwOyByb3cgPCBwaXhlbHNIaWdoOyArK3JvdykgewotICAgICAgICBzaGExLmFkZEJ5
dGVzKGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhh
c0J5dGVzKFNwYW4geyBiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lkZSB9KSk7CiAgICAgICAgIGJp
dG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7CiAgICAgfQogICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwpJ
bmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZv
Y2F0aW9uQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NywxNCArODcsMTQgQEAgdm9pZCBjb21w
dXRlU0hBMUhhc2hTdHJpbmdGb3JDb250ZXh0KENHQwogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4
X3Q+IGJ1ZmZlcig0ICogcGl4ZWxzV2lkZSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNv
bHVtbiA9IDA7IGNvbHVtbiA8IHBpeGVsc1dpZGU7IGNvbHVtbisrKQogICAgICAgICAgICAgICAg
IGJ1ZmZlcltjb2x1bW5dID0gT1NSZWFkTGl0dGxlSW50MzIoYml0bWFwRGF0YSwgNCAqIGNvbHVt
bik7Ci0gICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGJ1ZmZlcik7CisgICAgICAgICAgICBzaGEx
LmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7IGJ1ZmZlciB9KSk7CiAgICAgICAgICAgICBiaXRtYXBE
YXRhICs9IGJ5dGVzUGVyUm93OwogICAgICAgICB9CiAgICAgfSBlbHNlCiAjZW5kaWYKICAgICB7
CiAgICAgICAgIGZvciAodW5zaWduZWQgcm93ID0gMDsgcm93IDwgcGl4ZWxzSGlnaDsgcm93Kysp
IHsKLSAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoYml0bWFwRGF0YSwgNCAqIHBpeGVsc1dpZGUp
OworICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhhc0J5dGVzKFNwYW4geyBiaXRtYXBEYXRhLCA0
ICogcGl4ZWxzV2lkZSB9KSk7CiAgICAgICAgICAgICBiaXRtYXBEYXRhICs9IGJ5dGVzUGVyUm93
OwogICAgICAgICB9CiAgICAgfQo=
</data>
<flag name="commit-queue"
          id="452984"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431256</attachid>
            <date>2021-06-12 07:58:58 -0700</date>
            <delta_ts>2021-06-12 09:05:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226887-20210612075857.patch</filename>
            <type>text/plain</type>
            <size>126752</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBA
CisyMDIxLTA2LTEyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogQVBJL0pTU2NyaXB0Lm1tOgorICAg
ICAgICAoK1tKU1NjcmlwdCBzY3JpcHRPZlR5cGU6bWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTp3
aXRoU291cmNlVVJMOmFuZEJ5dGVjb2RlQ2FjaGU6aW5WaXJ0dWFsTWFjaGluZTplcnJvcjpdKToK
KyAgICAgICAgKC1bSlNTY3JpcHQgcmVhZENhY2hlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHdy
aXRlQ2FjaGU6XSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9ja0hhc2g6OkNvZGVCbG9ja0hhc2gpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHA6CisgICAgICAgIChJbnNw
ZWN0b3I6OmJhY2tlbmRDb21tYW5kc0hhc2gpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZm
ZXIuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJDb250ZW50czo6d3JpdGFibGVCeXRlcyk6
CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyQ29udGVudHM6OmJ5dGVzIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6QXJyYXlCdWZmZXI6OndyaXRhYmxlQnl0ZXMpOgorICAgICAgICAoSlNDOjpBcnJh
eUJ1ZmZlcjo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
Lmg6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6d3JpdGFibGVCeXRlcyk6CisgICAg
ICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRp
bWUvQ2FjaGVQYXlsb2FkLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVQYXlsb2FkOjptYWtlTWFw
cGVkUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6bWFrZU1hbGxvY1BheWxv
YWQpOgorICAgICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6Om1ha2VFbXB0eVBheWxvYWQpOgorICAg
ICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6OkNhY2hlUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNh
Y2hlUGF5bG9hZDo6ZnJlZURhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVQYXlsb2FkLmg6
CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6ZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlUGF5bG9hZDo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6
Q2FjaGVQYXlsb2FkKToKKyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKToKKwogMjAyMS0w
Ni0xMSAgUGF0cmljayBBbmdsZSAgPHBhbmdsZUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogQWRkIGluc3RydW1lbnRhdGlvbiB0byBub2RlIGRlc3RydWN0aW9uIGZvciBJbnNw
ZWN0b3JET01BZ2VudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMTMgKzEzNCwxMyBAQCArIChpbnN0YW5jZXR5cGUpc2Ny
aXB0T2ZUeXBlOihKU1NjcmlwdFR5CiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4g
Y3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJGaWxlIGF0IHBhdGggJUAg
Y291bGQgbm90IGJlIG1hcHBlZC4iLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihzeXN0ZW1QYXRo
KV0sIGVycm9yKTsKIAotICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCkpKQor
ICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmlsZURhdGEuZGF0YSgpLnNpemUoKSkpCiAg
ICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIk5v
dCBhbGwgY2hhcmFjdGVycyBpbiBmaWxlIGF0ICVAIGFyZSBBU0NJSS4iLCBzdGF0aWNfY2FzdDxO
U1N0cmluZyAqPihzeXN0ZW1QYXRoKV0sIGVycm9yKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gYWRv
cHROUyhbW0pTU2NyaXB0IGFsbG9jXSBpbml0XSk7CiAgICAgcmVzdWx0LT5tX3ZpcnR1YWxNYWNo
aW5lID0gdm07CiAgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOwotICAgIHJlc3VsdC0+bV9zb3Vy
Y2UgPSBTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcoYml0d2lzZV9jYXN0
PGNvbnN0IExDaGFyKj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpKSk7CisgICAg
cmVzdWx0LT5tX3NvdXJjZSA9IFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWlu
ZyhiaXR3aXNlX2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmls
ZURhdGEuZGF0YSgpLnNpemUoKSkpOwogICAgIHJlc3VsdC0+bV9tYXBwZWRTb3VyY2UgPSBXVEZN
b3ZlKGZpbGVEYXRhKTsKICAgICByZXN1bHQtPm1fc291cmNlVVJMID0gc291cmNlVVJMOwogICAg
IHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7CkBAIC0xNjgsMjQgKzE2OCwyMyBAQCAt
ICh2b2lkKXJlYWRDYWNoZQogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgY29uc3QgdWludDhfdCogZmlsZURhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihtYXBwZWRGaWxlLmRhdGEoKSk7Ci0gICAgdW5zaWduZWQgZmlsZVRvdGFsU2l6ZSA9IG1h
cHBlZEZpbGUuc2l6ZSgpOworICAgIGF1dG8gZmlsZURhdGEgPSBtYXBwZWRGaWxlLmRhdGEoKTsK
IAogICAgIC8vIEVuc3VyZSB3ZSBhdCBsZWFzdCBoYXZlIGEgU0hBMTo6RGlnZXN0IHRvIHJlYWQu
Ci0gICAgaWYgKGZpbGVUb3RhbFNpemUgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgeworICAgIGlm
IChmaWxlRGF0YS5zaXplKCkgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgewogICAgICAgICBGaWxl
U3lzdGVtOjpkZWxldGVGaWxlKGNhY2hlRmlsZW5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgdW5zaWduZWQgZmlsZURhdGFTaXplID0gZmlsZVRvdGFsU2l6ZSAtIHNpemVvZihT
SEExOjpEaWdlc3QpOworICAgIHVuc2lnbmVkIGZpbGVEYXRhU2l6ZSA9IGZpbGVEYXRhLnNpemUo
KSAtIHNpemVvZihTSEExOjpEaWdlc3QpOwogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFz
aDsKICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhmaWxlRGF0YSwgZmlsZURhdGFT
aXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKGZpbGVEYXRhLmZpcnN0KGZpbGVEYXRhU2l6ZSkpOwog
ICAgIHNoYTEuY29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2VzdCBm
aWxlSGFzaDsKLSAgICBtZW1jcHkoJmZpbGVIYXNoLCBmaWxlRGF0YSArIGZpbGVEYXRhU2l6ZSwg
c2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOworICAgIG1lbWNweSgmZmlsZUhhc2gsIGZpbGVEYXRhLmRh
dGEoKSArIGZpbGVEYXRhU2l6ZSwgc2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOwogCiAgICAgaWYgKGNv
bXB1dGVkSGFzaCAhPSBmaWxlSGFzaCkgewogICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxl
KGNhY2hlRmlsZW5hbWUpOwpAQCAtMzQzLDcgKzM0Miw3IEBAIC0gKEJPT0wpd3JpdGVDYWNoZToo
U3RyaW5nJillcnJvcgogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFzaDsKICAgICBTSEEx
IHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhtX2NhY2hlZEJ5dGVjb2RlLT5kYXRhKCksIG1fY2Fj
aGVkQnl0ZWNvZGUtPnNpemUoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhhc0J5dGVzKFNwYW4geyBt
X2NhY2hlZEJ5dGVjb2RlLT5kYXRhKCksIG1fY2FjaGVkQnl0ZWNvZGUtPnNpemUoKSB9KSk7CiAg
ICAgc2hhMS5jb21wdXRlSGFzaChjb21wdXRlZEhhc2gpOwogICAgIEZpbGVTeXN0ZW06OndyaXRl
VG9GaWxlKHRlbXBGRCwgY29tcHV0ZWRIYXNoLmRhdGEoKSwgc2l6ZW9mKGNvbXB1dGVkSGFzaCkp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
a0hhc2guY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDEwICs2MiwxMCBA
QCBDb2RlQmxvY2tIYXNoOjpDb2RlQmxvY2tIYXNoKGNvbnN0IFNvdXJjCiAgICAgICAgIHVuc2ln
bmVkIGxlbmd0aCA9IHN0ci5sZW5ndGgoKTsKICAgICAgICAgdW5zaWduZWQgc3RlcCA9IChsZW5n
dGggPj4gMTApICsgMTsKIAotICAgICAgICBzaGExLmFkZEJ5dGVzKGJpdHdpc2VfY2FzdDx1aW50
OF90Kj4oJmxlbmd0aCksIHNpemVvZihsZW5ndGgpKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhh
c0J5dGVzKFNwYW4geyAmbGVuZ3RoLCAxIH0pKTsKICAgICAgICAgZG8gewogICAgICAgICAgICAg
VUNoYXIgY2hhcmFjdGVyID0gc3RyW2luZGV4XTsKLSAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMo
Yml0d2lzZV9jYXN0PHVpbnQ4X3QqPigmY2hhcmFjdGVyKSwgc2l6ZW9mKGNoYXJhY3RlcikpOwor
ICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhhc0J5dGVzKFNwYW4geyAmY2hhcmFjdGVyLCAxIH0p
KTsKICAgICAgICAgICAgIG9sZEluZGV4ID0gaW5kZXg7CiAgICAgICAgICAgICBpbmRleCArPSBz
dGVwOwogICAgICAgICB9IHdoaWxlIChpbmRleCA+IG9sZEluZGV4ICYmIGluZGV4IDwgbGVuZ3Ro
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL2dsaWIvUmVt
b3RlSW5zcGVjdG9yVXRpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvcmVtb3RlL2dsaWIvUmVtb3RlSW5zcGVjdG9yVXRpbHMuY3BwCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGli
L1JlbW90ZUluc3BlY3RvclV0aWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNyBA
QCBjb25zdCBDU3RyaW5nJiBiYWNrZW5kQ29tbWFuZHNIYXNoKCkKICAgICAgICAgZ2NvbnN0cG9p
bnRlciBkYXRhID0gZ19ieXRlc19nZXRfZGF0YShieXRlcy5nZXQoKSwgJmRhdGFTaXplKTsKICAg
ICAgICAgQVNTRVJUKGRhdGFTaXplKTsKICAgICAgICAgU0hBMSBzaGExOwotICAgICAgICBzaGEx
LmFkZEJ5dGVzKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgZGF0YVNpemUpOwor
ICAgICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyBzdGF0aWNfY2FzdDxjb25zdCBzdGQ6OmJ5dGUq
PihkYXRhKSwgZGF0YVNpemUgfSk7CiAgICAgICAgIGhleERpZ2VzdCA9IHNoYTEuY29tcHV0ZUhl
eERpZ2VzdCgpOwogICAgIH0KICAgICByZXR1cm4gaGV4RGlnZXN0OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5oCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+
CiAjaW5jbHVkZSA8d3RmL1BhY2tlZFJlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNr
Lmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CkBAIC04MCw3ICs4MSwxMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9p
ZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5nZXRNYXlCZU51bGwoc2l6ZUluQnl0ZXMo
KSk7IH0KICAgICB1bnNpZ25lZCBzaXplSW5CeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZUlu
Qnl0ZXM7IH0KLSAgICAKKworICAgIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCkgeyBy
ZXR1cm4geyBzdGF0aWNfY2FzdDxzdGQ6OmJ5dGUqPihkYXRhKCkpLCBzaXplSW5CeXRlcygpIH07
IH0KKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25zdCB7IHJldHVybiB7IHN0
YXRpY19jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGRhdGEoKSksIHNpemVJbkJ5dGVzKCkgfTsgfQor
CiAgICAgYm9vbCBpc1NoYXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkOyB9CiAgICAgCiBw
cml2YXRlOgpAQCAtMTI3LDcgKzEzMSw5IEBAIHB1YmxpYzoKICAgICBpbmxpbmUgdm9pZCogZGF0
YSgpOwogICAgIGlubGluZSBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3Q7CiAgICAgaW5saW5lIHVu
c2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdDsKLSAgICAKKyAgICBpbmxpbmUgU3BhbjxzdGQ6OmJ5
dGU+IHdyaXRhYmxlQnl0ZXMoKTsKKyAgICBpbmxpbmUgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGJ5
dGVzKCkgY29uc3Q7CisKICAgICB2b2lkIG1ha2VTaGFyZWQoKTsKICAgICB2b2lkIHNldFNoYXJp
bmdNb2RlKEFycmF5QnVmZmVyU2hhcmluZ01vZGUpOwogICAgIGlubGluZSBib29sIGlzU2hhcmVk
KCkgY29uc3Q7CkBAIC0xOTcsNiArMjAzLDE2IEBAIHVuc2lnbmVkIEFycmF5QnVmZmVyOjpieXRl
TGVuZ3RoKCkgY29uc3QKICAgICByZXR1cm4gbV9jb250ZW50cy5zaXplSW5CeXRlcygpOwogfQog
CitTcGFuPHN0ZDo6Ynl0ZT4gQXJyYXlCdWZmZXI6OndyaXRhYmxlQnl0ZXMoKQoreworICAgIHJl
dHVybiBtX2NvbnRlbnRzLndyaXRhYmxlQnl0ZXMoKTsKK30KKworU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IEFycmF5QnVmZmVyOjpieXRlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGVudHMu
Ynl0ZXMoKTsKK30KKwogYm9vbCBBcnJheUJ1ZmZlcjo6aXNTaGFyZWQoKSBjb25zdAogewogICAg
IHJldHVybiBtX2NvbnRlbnRzLmlzU2hhcmVkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTg2LDYgKzg2LDkgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgYnl0ZUxlbmd0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZUxlbmd0aDsgfQogCisgICAgU3BhbjxzdGQ6OmJ5dGU+
IHdyaXRhYmxlQnl0ZXMoKSB7IHJldHVybiB7IHN0YXRpY19jYXN0PHN0ZDo6Ynl0ZSo+KGRhdGEo
KSksIGJ5dGVMZW5ndGgoKSB9OyB9CisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGJ5dGVzKCkg
Y29uc3QgeyByZXR1cm4geyBzdGF0aWNfY2FzdDxjb25zdCBzdGQ6OmJ5dGUqPihkYXRhKCkpLCBi
eXRlTGVuZ3RoKCkgfTsgfQorCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXREZXRhY2hh
YmxlKGJvb2wpOwogICAgIGJvb2wgaXNEZXRhY2hhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc0Rl
dGFjaGFibGU7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQ
YXlsb2FkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
YWNoZVBheWxvYWQuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYWNoZVBheWxvYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwyNyArMzAs
MjMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIENhY2hlUGF5bG9hZCBDYWNoZVBheWxvYWQ6Om1ha2VN
YXBwZWRQYXlsb2FkKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYgZGF0YSkKIHsKLSAgICBy
ZXR1cm4gQ2FjaGVQYXlsb2FkKHRydWUsIGRhdGEubGVha0hhbmRsZSgpLCBkYXRhLnNpemUoKSk7
CisgICAgcmV0dXJuIENhY2hlUGF5bG9hZCh0cnVlLCBkYXRhLmxlYWtIYW5kbGUoKSk7CiB9CiAK
IENhY2hlUGF5bG9hZCBDYWNoZVBheWxvYWQ6Om1ha2VNYWxsb2NQYXlsb2FkKE1hbGxvY1B0cjx1
aW50OF90LCBWTU1hbGxvYz4mJiBkYXRhLCBzaXplX3Qgc2l6ZSkKIHsKLSAgICByZXR1cm4gQ2Fj
aGVQYXlsb2FkKGZhbHNlLCBkYXRhLmxlYWtQdHIoKSwgc2l6ZSk7CisgICAgcmV0dXJuIENhY2hl
UGF5bG9hZChmYWxzZSwgYXNXcml0YWJsZUJ5dGVzKFNwYW4geyBkYXRhLmxlYWtQdHIoKSwgc2l6
ZSB9KSk7CiB9CiAKIENhY2hlUGF5bG9hZCBDYWNoZVBheWxvYWQ6Om1ha2VFbXB0eVBheWxvYWQo
KQogewotICAgIHJldHVybiBDYWNoZVBheWxvYWQodHJ1ZSwgbnVsbHB0ciwgMCk7CisgICAgcmV0
dXJuIENhY2hlUGF5bG9hZCh0cnVlLCB7IH0pOwogfQogCiBDYWNoZVBheWxvYWQ6OkNhY2hlUGF5
bG9hZChDYWNoZVBheWxvYWQmJiBvdGhlcikKIHsKLSAgICBtX21hcHBlZCA9IG90aGVyLm1fbWFw
cGVkOwotICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKLSAgICBtX2RhdGEgPSBvdGhlci5tX2Rh
dGE7Ci0gICAgb3RoZXIubV9tYXBwZWQgPSBmYWxzZTsKLSAgICBvdGhlci5tX2RhdGEgPSBudWxs
cHRyOwotICAgIG90aGVyLm1fc2l6ZSA9IDA7CisgICAgbV9tYXBwZWQgPSBzdGQ6OmV4Y2hhbmdl
KG90aGVyLm1fbWFwcGVkLCBmYWxzZSk7CisgICAgbV9kYXRhID0gc3RkOjpleGNoYW5nZShvdGhl
ci5tX2RhdGEsIHsgfSk7CiB9CiAKIENhY2hlUGF5bG9hZDo6fkNhY2hlUGF5bG9hZCgpCkBAIC02
NywxMiArNjMsMTMgQEAgQ2FjaGVQYXlsb2FkJiBDYWNoZVBheWxvYWQ6Om9wZXJhdG9yPShDYQog
CiB2b2lkIENhY2hlUGF5bG9hZDo6ZnJlZURhdGEoKQogewotICAgIGlmICghbV9kYXRhKQorICAg
IGlmICghbV9kYXRhLmRhdGEoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX21hcHBlZCkg
ewotICAgICAgICBGaWxlU3lzdGVtOjp1bm1hcFZpZXdPZkZpbGUobV9kYXRhLCBtX3NpemUpOwot
ICAgIH0gZWxzZQotICAgICAgICBmYXN0RnJlZShtX2RhdGEpOworCisgICAgaWYgKG1fbWFwcGVk
KQorICAgICAgICBGaWxlU3lzdGVtOjp1bm1hcFZpZXdPZkZpbGUobV9kYXRhKTsKKyAgICBlbHNl
CisgICAgICAgIGZhc3RGcmVlKG1fZGF0YS5kYXRhKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlUGF5bG9hZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlUGF5bG9hZC5o
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNo
ZVBheWxvYWQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIlZN
LmgiCiAjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KICNpbmNsdWRlIDx3dGYvTWFsbG9jUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQxLDIy
ICs0MiwyMCBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkNhY2hlUGF5bG9hZCgp
OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIENhY2hlUGF5bG9hZCYgb3BlcmF0b3I9KENhY2hlUGF5
bG9hZCYmIG90aGVyKTsKIAotICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEoKSBjb25zdCB7IHJldHVy
biBtX2RhdGE7IH0KLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQor
ICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0
PHVpbnQ4X3QqPihtX2RhdGEuZGF0YSgpKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9kYXRhLnNpemUoKTsgfQogCiBwcml2YXRlOgotICAgIENhY2hlUGF5bG9hZChib29s
IG1hcHBlZCwgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpCisgICAgQ2FjaGVQYXlsb2FkKGJvb2wg
bWFwcGVkLCBTcGFuPHN0ZDo6Ynl0ZT4gZGF0YSkKICAgICAgICAgOiBtX21hcHBlZChtYXBwZWQp
Ci0gICAgICAgICwgbV9zaXplKHNpemUpCi0gICAgICAgICwgbV9kYXRhKHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihkYXRhKSkKKyAgICAgICAgLCBtX2RhdGEoZGF0YSkKICAgICB7CiAgICAgfQogCiAg
ICAgdm9pZCBmcmVlRGF0YSgpOwogCiAgICAgYm9vbCBtX21hcHBlZDsKLSAgICBzaXplX3QgbV9z
aXplOwotICAgIHVpbnQ4X3QqIG1fZGF0YTsKKyAgICBTcGFuPHN0ZDo6Ynl0ZT4gbV9kYXRhOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtU3RyZWFtaW5nUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtU3RyZWFtaW5nUGFyc2VyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2MSw3ICsyNjEsNyBAQCBhdXRvIFN0cmVhbWluZ1BhcnNlcjo6YWRkQnl0
ZXMoY29uc3QgdWluCiAgICAgfQogCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnVzZUVhZ2Vy
V2ViQXNzZW1ibHlNb2R1bGVIYXNoaW5nKCkpKQotICAgICAgICBtX2hhc2hlci5hZGRCeXRlcyhi
eXRlcywgYnl0ZXNTaXplKTsKKyAgICAgICAgbV9oYXNoZXIuYWRkQnl0ZXMoYXNCeXRlcyhTcGFu
IHsgYnl0ZXMsIGJ5dGVzU2l6ZSB9ICkpOwogCiAgICAgc2l6ZV90IG9mZnNldEluQnl0ZXMgPSAw
OwogICAgIHdoaWxlICh0cnVlKSB7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2OCBAQAorMjAyMS0wNi0x
MSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRvcHQgU3BhbiBp
biBtb3JlIHBsYWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgW1dJUF0KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUlt
cGw6Ok1hcHBlZEZpbGVEYXRhOjp+TWFwcGVkRmlsZURhdGEpOgorICAgICAgICAoV1RGOjpGaWxl
U3lzdGVtSW1wbDo6TWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5kbGUpOgorICAgICAgICAoV1RG
OjpGaWxlU3lzdGVtSW1wbDo6dW5tYXBWaWV3T2ZGaWxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5
c3RlbUltcGw6Om1hcFRvRmlsZSk6CisgICAgICAgICogd3RmL0ZpbGVTeXN0ZW0uaDoKKyAgICAg
ICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpvcGVyYXRvciBib29sIGNv
bnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpkYXRh
IGNvbnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjps
ZWFrSGFuZGxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRh
OjpNYXBwZWRGaWxlRGF0YSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpNYXBwZWRG
aWxlRGF0YTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBl
ZEZpbGVEYXRhOjpzaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisg
ICAgICAgICogd3RmL1NIQTEuY3BwOgorICAgICAgICAoV1RGOjpTSEExOjphZGRCeXRlcyk6Cisg
ICAgICAgIChXVEY6OlNIQTE6OmZpbmFsaXplKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6U0hB
MTo6cHJvY2Vzc0Jsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6U0hBMTo6cmVzZXQpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpTSEExOjpoZXhEaWdlc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpTSEExOjpjb21wdXRlSGV4RGlnZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYv
U0hBMS5oOgorICAgICAgICAoV1RGOjpTSEExOjphZGRCeXRlcyk6CisgICAgICAgICogd3RmL1Zl
Y3Rvci5oOgorICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmNwcDoK
KyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPENTdHJpbmc+OjplbmNvZGUpOgorICAg
ICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8Q1N0cmluZz46OmRlY29kZSk6CisgICAgICAg
IChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTdHJpbmc+OjplbmNvZGUpOgorICAgICAgICAoV1RG
OjpQZXJzaXN0ZW5jZTo6ZGVjb2RlU3RyaW5nVGV4dCk6CisgICAgICAgIChXVEY6OlBlcnNpc3Rl
bmNlOjpDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0
ZW5jZTo6Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKToKKyAgICAgICAgKiB3dGYvcGVyc2lz
dGVuY2UvUGVyc2lzdGVudENvZGVycy5oOgorICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZS9QZXJz
aXN0ZW50RGVjb2Rlci5jcHA6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjpE
ZWNvZGVyKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXI6OmJ1ZmZlclBvaW50
ZXJGb3JEaXJlY3RSZWFkKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXI6OmRl
Y29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVy
Ojp2ZXJpZnlDaGVja3N1bSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjp+
RGVjb2Rlcik6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRE
ZWNvZGVyLmg6CisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmNw
cDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6Omdyb3cpOgorICAgICAgICAo
V1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKToKKyAgICAg
ICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YSk6Cisg
ICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjplbmNvZGVOdW1iZXIpOgorICAgICAg
ICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6ZW5jb2RlQ2hlY2tzdW0pOgorICAgICAgICAo
V1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6RW5jb2Rlcik6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjp+RW5jb2Rlcik6IERlbGV0ZWQuCisgICAgICAgICog
d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmg6CisgICAgICAgIChXVEY6OlBlcnNp
c3RlbmNlOjpFbmNvZGVyOjpidWZmZXIgY29uc3QpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5j
ZTo6RW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIpOgorICAgICAgICAoV1RGOjpQZXJz
aXN0ZW5jZTo6RW5jb2Rlcjo6YnVmZmVyU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
d3RmL3RleHQvQmFzZTY0Lmg6CisgICAgICAgIChXVEY6OmJhc2U2NEVuY29kZVRvVmVjdG9yKToK
KyAgICAgICAgKFdURjo6YmFzZTY0RW5jb2RlVG9TdHJpbmcpOgorICAgICAgICAqIHd0Zi90ZXh0
L0NTdHJpbmcuaDoKKwogMjAyMS0wNi0xMSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBBZGQgV2Vha0hhc2hNYXAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0ZpbGVT
eXN0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3BwCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzE5LDkgKzMxOSw5IEBAIGJvb2wgZXhjbHVkZUZyb21CYWNrdXAoY29uc3Qg
U3RyaW5nJikKIAogTWFwcGVkRmlsZURhdGE6On5NYXBwZWRGaWxlRGF0YSgpCiB7Ci0gICAgaWYg
KCFtX2ZpbGVEYXRhKQorICAgIGlmICghbV9maWxlRGF0YS5kYXRhKCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICB1bm1hcFZpZXdPZkZpbGUobV9maWxlRGF0YSwgbV9maWxlU2l6ZSk7CisgICAgdW5t
YXBWaWV3T2ZGaWxlKG1fZmlsZURhdGEpOwogfQogCiBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmls
ZURhdGEoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgTWFwcGVkRmlsZU1vZGUgbWFwTW9kZSwgYm9v
bCYgc3VjY2VzcykKQEAgLTM4MywxNCArMzgzLDEzIEBAIGJvb2wgTWFwcGVkRmlsZURhdGE6Om1h
cEZpbGVIYW5kbGUoUGxhdGYKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG1f
ZmlsZURhdGEgPSBkYXRhOwotICAgIG1fZmlsZVNpemUgPSBzaXplOworICAgIG1fZmlsZURhdGEg
PSBTcGFuIHsgcmVpbnRlcnByZXRfY2FzdDxzdGQ6OmJ5dGUqPihkYXRhKSwgc2l6ZSB9OwogICAg
IHJldHVybiB0cnVlOwogfQogCi1ib29sIHVubWFwVmlld09mRmlsZSh2b2lkKiBidWZmZXIsIHNp
emVfdCBzaXplKQorYm9vbCB1bm1hcFZpZXdPZkZpbGUoU3BhbjxzdGQ6OmJ5dGU+IGRhdGEpCiB7
Ci0gICAgcmV0dXJuICFtdW5tYXAoYnVmZmVyLCBzaXplKTsKKyAgICByZXR1cm4gIW11bm1hcChk
YXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwogfQogCiAjZW5kaWYKQEAgLTQzOCw3ICs0MzcsNyBA
QCBTdHJpbmcgY3JlYXRlVGVtcG9yYXJ5WmlwQXJjaGl2ZShjb25zdCBTCiB9CiAjZW5kaWYKIAot
TWFwcGVkRmlsZURhdGEgbWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVz
U2l6ZSwgRnVuY3Rpb248dm9pZChjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBz
aXplX3QpPiYpPiYmIGFwcGx5LCBQbGF0Zm9ybUZpbGVIYW5kbGUqIG91dHB1dEhhbmRsZSkKK01h
cHBlZEZpbGVEYXRhIG1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIHNpemVfdCBieXRlc1Np
emUsIEZ1bmN0aW9uPHZvaWQoY29uc3QgRnVuY3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0
ZT4pPiYpPiYmIGFwcGx5LCBQbGF0Zm9ybUZpbGVIYW5kbGUqIG91dHB1dEhhbmRsZSkKIHsKICAg
ICBjb25zdGV4cHIgYm9vbCBmYWlsSWZGaWxlRXhpc3RzID0gdHJ1ZTsKICAgICBhdXRvIGhhbmRs
ZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6
UmVhZFdyaXRlLCBGaWxlU3lzdGVtOjpGaWxlQWNjZXNzUGVybWlzc2lvbjo6VXNlciwgZmFpbElm
RmlsZUV4aXN0cyk7CkBAIC00NTUsMTIgKzQ1NCwxMiBAQCBNYXBwZWRGaWxlRGF0YSBtYXBUb0Zp
bGUoY29uc3QgU3RyaW5nJiBwCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgdm9p
ZCogbWFwID0gY29uc3RfY2FzdDx2b2lkKj4obWFwcGVkRmlsZS5kYXRhKCkpOwotICAgIHVpbnQ4
X3QqIG1hcERhdGEgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4obWFwKTsKKyAgICBhdXRvIG1hcCA9
IG1hcHBlZEZpbGUuZGF0YSgpLmRhdGEoKTsKKyAgICBhdXRvIG1hcERhdGEgPSBtYXA7CiAKLSAg
ICBhcHBseShbJm1hcERhdGFdKGNvbnN0IHVpbnQ4X3QqIGNodW5rLCBzaXplX3QgY2h1bmtTaXpl
KSB7Ci0gICAgICAgIG1lbWNweShtYXBEYXRhLCBjaHVuaywgY2h1bmtTaXplKTsKLSAgICAgICAg
bWFwRGF0YSArPSBjaHVua1NpemU7CisgICAgYXBwbHkoWyZtYXBEYXRhXShTcGFuPGNvbnN0IHN0
ZDo6Ynl0ZT4gY2h1bmspIHsKKyAgICAgICAgbWVtY3B5KG1hcERhdGEsIGNodW5rLmRhdGEoKSwg
Y2h1bmsuc2l6ZSgpKTsKKyAgICAgICAgbWFwRGF0YSArPSBjaHVuay5zaXplKCk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0pOwogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVt
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtMjEwLDcgKzIxMSw3IEBAIFdURl9FWFBPUlRf
UFJJVkFURSBTdHJpbmcgcmVhbFBhdGgoY29uc3QKIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGlz
U2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChjb25zdCBTdHJpbmcmKTsKIFdURl9FWFBPUlRfUFJJ
VkFURSB2b2lkIG1ha2VTYWZlVG9Vc2VNZW1vcnlNYXBGb3JQYXRoKGNvbnN0IFN0cmluZyYpOwog
Ci1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCB1bm1hcFZpZXdPZkZpbGUodm9pZCogYnVmZmVyLCBz
aXplX3QpOworV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgdW5tYXBWaWV3T2ZGaWxlKFNwYW48c3Rk
OjpieXRlPik7CiAKIGNsYXNzIE1hcHBlZEZpbGVEYXRhIHsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKQEAgLTIyMywxNyArMjI0LDE1IEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgfk1hcHBlZEZpbGVEYXRhKCk7CiAgICAgTWFwcGVkRmlsZURhdGEmIG9wZXJhdG9yPShN
YXBwZWRGaWxlRGF0YSYmKTsKIAotICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7
IHJldHVybiAhIW1fZmlsZURhdGE7IH0KLSAgICBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3QgeyBy
ZXR1cm4gbV9maWxlRGF0YTsgfQotICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBt
X2ZpbGVTaXplOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJu
ICEhbV9maWxlRGF0YS5kYXRhKCk7IH0KKyAgICBTcGFuPHN0ZDo6Ynl0ZT4gZGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fZmlsZURhdGE7IH0KIAotICAgIHZvaWQqIGxlYWtIYW5kbGUoKSB7IHJldHVy
biBzdGQ6OmV4Y2hhbmdlKG1fZmlsZURhdGEsIG51bGxwdHIpOyB9CisgICAgV0FSTl9VTlVTRURf
UkVUVVJOIFNwYW48c3RkOjpieXRlPiBsZWFrSGFuZGxlKCkgeyByZXR1cm4gc3RkOjpleGNoYW5n
ZShtX2ZpbGVEYXRhLCB7IH0pOyB9CiAKIHByaXZhdGU6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRF
IGJvb2wgbWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUsIEZpbGVPcGVuTW9kZSwgTWFw
cGVkRmlsZU1vZGUpOwogCi0gICAgdm9pZCogbV9maWxlRGF0YSB7IG51bGxwdHIgfTsKLSAgICB1
bnNpZ25lZCBtX2ZpbGVTaXplIHsgMCB9OworICAgIFNwYW48c3RkOjpieXRlPiBtX2ZpbGVEYXRh
OwogfTsKIAogaW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShQbGF0Zm9ybUZp
bGVIYW5kbGUgaGFuZGxlLCBNYXBwZWRGaWxlTW9kZSBtYXBNb2RlLCBib29sJiBzdWNjZXNzKQpA
QCAtMjQ3LDIxICsyNDYsMTkgQEAgaW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0
YShQbAogfQogCiBpbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKE1hcHBlZEZp
bGVEYXRhJiYgb3RoZXIpCi0gICAgOiBtX2ZpbGVEYXRhKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9m
aWxlRGF0YSwgbnVsbHB0cikpCi0gICAgLCBtX2ZpbGVTaXplKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIu
bV9maWxlU2l6ZSwgMCkpCisgICAgOiBtX2ZpbGVEYXRhKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9m
aWxlRGF0YSwgeyB9KSkKIHsKIH0KIAogaW5saW5lIE1hcHBlZEZpbGVEYXRhJiBNYXBwZWRGaWxl
RGF0YTo6b3BlcmF0b3I9KE1hcHBlZEZpbGVEYXRhJiYgb3RoZXIpCiB7Ci0gICAgbV9maWxlRGF0
YSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9maWxlRGF0YSwgbnVsbHB0cik7Ci0gICAgbV9maWxl
U2l6ZSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9maWxlU2l6ZSwgMCk7CisgICAgbV9maWxlRGF0
YSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9maWxlRGF0YSwgeyB9KTsKICAgICByZXR1cm4gKnRo
aXM7CiB9CiAKIC8vIFRoaXMgY3JlYXRlcyB0aGUgZGVzdGluYXRpb24gZmlsZSwgbWFwcyBpdCwg
d3JpdGUgdGhlIHByb3ZpZGVkIGRhdGEgdG8gaXQgYW5kIHJldHVybnMgdGhlIG1hcHBlZCBmaWxl
LgogLy8gVGhpcyBmdW5jdGlvbiBmYWlscyBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgZmlsZSBhdCB0
aGUgZGVzdGluYXRpb24gcGF0aC4KLVdURl9FWFBPUlRfUFJJVkFURSBNYXBwZWRGaWxlRGF0YSBt
YXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBzaXplX3QgYnl0ZXNTaXplLCBGdW5jdGlvbjx2
b2lkKGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCosIHNpemVfdCk+Jik+JiYgYXBw
bHksIFBsYXRmb3JtRmlsZUhhbmRsZSogPSBudWxscHRyKTsKK1dURl9FWFBPUlRfUFJJVkFURSBN
YXBwZWRGaWxlRGF0YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBzaXplX3QgYnl0ZXNT
aXplLCBGdW5jdGlvbjx2b2lkKGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+KT4mKT4mJiBhcHBseSwgUGxhdGZvcm1GaWxlSGFuZGxlKiA9IG51bGxwdHIpOwogCiB9IC8v
IG5hbWVzcGFjZSBGaWxlU3lzdGVtSW1wbAogfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9TSEExLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TSEExLmNw
cAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvU0hBMS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDEwICs0NiwxMCBAQCBTSEExOjpTSEExKCkKICAgICBBTExPV19ERVBSRUNB
VEVEX0RFQ0xBUkFUSU9OU19FTkQKIH0KIAotdm9pZCBTSEExOjphZGRCeXRlcyhjb25zdCB1aW50
OF90KiBpbnB1dCwgc2l6ZV90IGxlbmd0aCkKK3ZvaWQgU0hBMTo6YWRkQnl0ZXMoU3Bhbjxjb25z
dCBzdGQ6OmJ5dGU+IGlucHV0KQogewogICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05T
X0JFR0lOCi0gICAgQ0NfU0hBMV9VcGRhdGUoJm1fY29udGV4dCwgaW5wdXQsIGxlbmd0aCk7Cisg
ICAgQ0NfU0hBMV9VcGRhdGUoJm1fY29udGV4dCwgaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkp
OwogICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAogfQogCkBAIC0xMDEsMTEg
KzEwMSwxMSBAQCBTSEExOjpTSEExKCkKICAgICByZXNldCgpOwogfQogCi12b2lkIFNIQTE6OmFk
ZEJ5dGVzKGNvbnN0IHVpbnQ4X3QqIGlucHV0LCBzaXplX3QgbGVuZ3RoKQordm9pZCBTSEExOjph
ZGRCeXRlcyhTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCiB7Ci0gICAgd2hpbGUgKGxlbmd0
aC0tKSB7CisgICAgZm9yIChhdXRvIGJ5dGUgOiBpbnB1dCkgewogICAgICAgICBBU1NFUlQobV9j
dXJzb3IgPCA2NCk7Ci0gICAgICAgIG1fYnVmZmVyW21fY3Vyc29yKytdID0gKmlucHV0Kys7Cisg
ICAgICAgIG1fYnVmZmVyW21fY3Vyc29yKytdID0gc3RkOjp0b19pbnRlZ2VyPHVpbnQ4X3Q+KGJ5
dGUpOwogICAgICAgICArK21fdG90YWxCeXRlczsKICAgICAgICAgaWYgKG1fY3Vyc29yID09IDY0
KQogICAgICAgICAgICAgcHJvY2Vzc0Jsb2NrKCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TSEEx
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU0hBMS5oCShyZXZpc2lvbiAyNzg4MDkp
CisrKyBTb3VyY2UvV1RGL3d0Zi9TSEExLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcg
QEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8YXJyYXk+CisjaW5jbHVkZSA8d3RmL1NwYW4u
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgogCkBAIC00NSwxNSArNDYsOCBAQCBjbGFzcyBTSEExIHsKIHB1YmxpYzoKICAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgU0hBMSgpOwogCi0gICAgdm9pZCBhZGRCeXRlcyhjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIGlucHV0KQotICAgIHsKLSAgICAgICAgYWRkQnl0ZXMoaW5wdXQuZGF0YSgpLCBpbnB1
dC5zaXplKCkpOwotICAgIH0KLSAgICB2b2lkIGFkZEJ5dGVzKGNvbnN0IENTdHJpbmcmIGlucHV0
KQotICAgIHsKLSAgICAgICAgYWRkQnl0ZXMoaW5wdXQuZGF0YUFzVUludDhQdHIoKSwgaW5wdXQu
bGVuZ3RoKCkpOwotICAgIH0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRCeXRlcyhj
b25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGxlbmd0aCk7CisgICAgdm9pZCBhZGRCeXRlcyhj
b25zdCBDU3RyaW5nJiBpbnB1dCkgeyBhZGRCeXRlcyhpbnB1dC5ieXRlcygpKTsgfQorICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIGFkZEJ5dGVzKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAK
ICAgICAvLyBTaXplIG9mIHRoZSBTSEExIGhhc2gKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIGNvbnN0ZXhwciBzaXplX3QgaGFzaFNpemUgPSAyMDsKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L1ZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
NjEzLDYgKzYxMyw3IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKICAgICB0eXBlZGVmIFQgVmFsdWVU
eXBlOworICAgIHR5cGVkZWYgVCB2YWx1ZV90eXBlOwogCiAgICAgdHlwZWRlZiBUKiBpdGVyYXRv
cjsKICAgICB0eXBlZGVmIGNvbnN0IFQqIGNvbnN0X2l0ZXJhdG9yOwpJbmRleDogU291cmNlL1dU
Ri93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5jcHAJKHJldmlzaW9uIDI3
ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgQ29kZXI8Q1N0cmluZz46OmVu
Y29kZShFbmNvZGVyJiBlbmMKIAogICAgIHVpbnQzMl90IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgo
KTsKICAgICBlbmNvZGVyIDw8IGxlbmd0aDsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3Ro
RGF0YShzdHJpbmcuZGF0YUFzVUludDhQdHIoKSwgbGVuZ3RoKTsKKyAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YSh7IHN0cmluZy5kYXRhQXNVSW50OFB0cigpLCBsZW5ndGggfSk7CiB9
CiAKIHN0ZDo6b3B0aW9uYWw8Q1N0cmluZz4gQ29kZXI8Q1N0cmluZz46OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQpAQCAtNzgsNyArNzgsNyBAQCBzdGQ6Om9wdGlvbmFsPENTdHJpbmc+IENvZGVy
PENTdHJpbmc+OjpkCiAKICAgICBjaGFyKiBidWZmZXI7CiAgICAgQ1N0cmluZyBzdHJpbmcgPSBD
U3RyaW5nOjpuZXdVbmluaXRpYWxpemVkKCpsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZm
ZXIpLCAqbGVuZ3RoKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHsg
cmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgKmxlbmd0aCB9KSkKICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgIHJldHVybiBzdHJpbmc7CkBAIC05OCw5ICs5OCw5
IEBAIHZvaWQgQ29kZXI8U3RyaW5nPjo6ZW5jb2RlKEVuY29kZXImIGVuY28KICAgICBlbmNvZGVy
IDw8IGxlbmd0aCA8PCBpczhCaXQ7CiAKICAgICBpZiAoaXM4Qml0KQotICAgICAgICBlbmNvZGVy
LmVuY29kZUZpeGVkTGVuZ3RoRGF0YShzdHJpbmcuY2hhcmFjdGVyczgoKSwgbGVuZ3RoKTsKKyAg
ICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoeyBzdHJpbmcuY2hhcmFjdGVyczgo
KSwgbGVuZ3RoIH0pOwogICAgIGVsc2UKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnMx
NigpKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKHsgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNo
YXJhY3RlcnMxNigpKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSB9KTsKIH0KIAogdGVtcGxhdGUg
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CkBAIC0xMTIsNyArMTEyLDcgQEAgc3RhdGljIGlubGlu
ZSBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gZGVjbwogCiAgICAgQ2hhcmFjdGVyVHlwZSogYnVmZmVy
OwogICAgIFN0cmluZyBzdHJpbmcgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3Ro
LCBidWZmZXIpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRl
cnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJhY3RlclR5
cGUpKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHsgcmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJhY3RlclR5cGUp
IH0pKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIAogICAgIHJldHVybiBzdHJp
bmc7CkBAIC0xNDIsMTMgKzE0MiwxMyBAQCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gQ29kZXI8U3Ry
aW5nPjo6ZGVjCiAKIHZvaWQgQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQogewotICAgIGVuY29kZXIuZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpKTsKKyAgICBlbmNv
ZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3QpOwogfQogCiBzdGQ6Om9wdGlvbmFsPFNI
QTE6OkRpZ2VzdD4gQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
CiB7CiAgICAgU0hBMTo6RGlnZXN0IHRtcDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKHRtcC5kYXRhKCksIHNpemVvZih0bXApKSkKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKHRtcCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAg
ICAgcmV0dXJuIHRtcDsKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNp
c3RlbnRDb2RlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Q
ZXJzaXN0ZW50Q29kZXJzLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3Bl
cnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0
OSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICBzdGF0
aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5PiYgdmVjdG9yKQogICAgIHsKICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1
aW50NjRfdD4odmVjdG9yLnNpemUoKSk7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCB2
ZWN0b3Iuc2l6ZSgpICogc2l6ZW9mKFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoeyByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih2ZWN0b3IuZGF0YSgp
KSwgdmVjdG9yLnNpemUoKSAqIHNpemVvZihUKSB9KTsKICAgICB9CiAgICAgCiAgICAgc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pj4gZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCkBAIC0xNzMsNyArMTczLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaQogICAgICAgICBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IHRlbXA7CiAg
ICAgICAgIHRlbXAuZ3JvdyhzaXplKTsKIAotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4
ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHRlbXAuZGF0YSgpKSwgc2l6
ZSAqIHNpemVvZihUKSkpCisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERh
dGEoeyByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPih0ZW1wLmRhdGEoKSksIHNpemUgKiBzaXpl
b2YoVCkgfSkpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgICAgIHJl
dHVybiB0ZW1wOwpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERl
Y29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNp
c3RlbnREZWNvZGVyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvcGVy
c2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyMyAr
MzEsMjYgQEAKIG5hbWVzcGFjZSBXVEYgewogbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAotRGVj
b2Rlcjo6RGVjb2Rlcihjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKQot
ICAgIDogbV9idWZmZXIoYnVmZmVyKQotICAgICwgbV9idWZmZXJQb3NpdGlvbihidWZmZXIpCi0g
ICAgLCBtX2J1ZmZlckVuZChidWZmZXIgKyBidWZmZXJTaXplKQorRGVjb2Rlcjo6RGVjb2RlcihT
cGFuPGNvbnN0IHVpbnQ4X3Q+IGJ1ZmZlcikKKyAgICA6IERlY29kZXIoYXNCeXRlcyhidWZmZXIp
KQogewogfQogCi1EZWNvZGVyOjp+RGVjb2RlcigpCitEZWNvZGVyOjpEZWNvZGVyKFNwYW48Y29u
c3Qgc3RkOjpieXRlPiBidWZmZXIpCisgICAgOiBtX2J1ZmZlcihidWZmZXIuZGF0YSgpKQorICAg
ICwgbV9idWZmZXJQb3NpdGlvbihidWZmZXIuZGF0YSgpKQorICAgICwgbV9idWZmZXJFbmQoYnVm
ZmVyLmRhdGEoKSArIGJ1ZmZlci5zaXplKCkpCiB7CiB9CiAKK0RlY29kZXI6On5EZWNvZGVyKCkg
PSBkZWZhdWx0OworCiBib29sIERlY29kZXI6OmJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4o
c2l6ZV90IHNpemUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHNpemUgPD0gc3RhdGljX2Nhc3Q8c2l6
ZV90PihtX2J1ZmZlckVuZCAtIG1fYnVmZmVyUG9zaXRpb24pOwogfQogCi1jb25zdCB1aW50OF90
KiBEZWNvZGVyOjpidWZmZXJQb2ludGVyRm9yRGlyZWN0UmVhZChzaXplX3Qgc2l6ZSkKK2NvbnN0
IHN0ZDo6Ynl0ZSogRGVjb2Rlcjo6YnVmZmVyUG9pbnRlckZvckRpcmVjdFJlYWQoc2l6ZV90IHNp
emUpCiB7CiAgICAgaWYgKCFidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKHNpemUpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTU1LDE2ICs1OCwyMSBAQCBjb25zdCB1aW50OF90KiBE
ZWNvZGVyOjpidWZmZXJQb2ludGVyRm9yCiAgICAgYXV0byBkYXRhID0gbV9idWZmZXJQb3NpdGlv
bjsKICAgICBtX2J1ZmZlclBvc2l0aW9uICs9IHNpemU7CiAKLSAgICBFbmNvZGVyOjp1cGRhdGVD
aGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhLCBzaXplKTsKKyAgICBFbmNvZGVyOjp1cGRhdGVD
aGVja3N1bUZvckRhdGEobV9zaGExLCBTcGFuIHsgZGF0YSwgc2l6ZSB9KTsKICAgICByZXR1cm4g
ZGF0YTsKIH0KIAotYm9vbCBEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCog
ZGF0YSwgc2l6ZV90IHNpemUpCitib29sIERlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YShT
cGFuPHVpbnQ4X3Q+IGRhdGEpCit7CisgICAgcmV0dXJuIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShh
c1dyaXRhYmxlQnl0ZXMoZGF0YSkpOworfQorCitib29sIERlY29kZXI6OmRlY29kZUZpeGVkTGVu
Z3RoRGF0YShTcGFuPHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKLSAgICBhdXRvIGJ1ZmZlciA9IGJ1ZmZl
clBvaW50ZXJGb3JEaXJlY3RSZWFkKHNpemUpOworICAgIGF1dG8gYnVmZmVyID0gYnVmZmVyUG9p
bnRlckZvckRpcmVjdFJlYWQoZGF0YS5zaXplKCkpOwogICAgIGlmICghYnVmZmVyKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgbWVtY3B5KGRhdGEsIGJ1ZmZlciwgc2l6ZSk7CisgICAgbWVt
Y3B5KGRhdGEuZGF0YSgpLCBidWZmZXIsIGRhdGEuc2l6ZSgpKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtMTM5LDcgKzE0Nyw3IEBAIGJvb2wgRGVjb2Rlcjo6dmVyaWZ5Q2hlY2tzdW0oKQog
ICAgIG1fc2hhMS5jb21wdXRlSGFzaChjb21wdXRlZEhhc2gpOwogCiAgICAgU0hBMTo6RGlnZXN0
IHNhdmVkSGFzaDsKLSAgICBpZiAoIWRlY29kZUZpeGVkTGVuZ3RoRGF0YShzYXZlZEhhc2guZGF0
YSgpLCBzaXplb2Yoc2F2ZWRIYXNoKSkpCisgICAgaWYgKCFkZWNvZGVGaXhlZExlbmd0aERhdGEo
c2F2ZWRIYXNoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIGNvbXB1dGVk
SGFzaCA9PSBzYXZlZEhhc2g7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJz
aXN0ZW50RGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNl
L1BlcnNpc3RlbnREZWNvZGVyLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3Rm
L3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYg
KzI3LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL1NI
QTEuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9Q
ZXJzaXN0ZW50Q29kZXIuaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC0zNSw3ICszNiw4IEBAIG5h
bWVzcGFjZSBQZXJzaXN0ZW5jZSB7CiBjbGFzcyBEZWNvZGVyIHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVjb2Rlcihjb25z
dCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKTsKKyAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgRGVjb2RlcihTcGFuPGNvbnN0IHVpbnQ4X3Q+KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgRGVjb2RlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwogICAgIFdURl9FWFBPUlRfUFJJVkFU
RSB+RGVjb2RlcigpOwogCiAgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYnVm
ZmVyRW5kIC0gbV9idWZmZXI7IH0KQEAgLTQzLDcgKzQ1LDggQEAgcHVibGljOgogCiAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIHZlcmlmeUNoZWNrc3VtKCk7
CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqLCBzaXplX3QpOworICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVGaXhlZExlbmd0aERhdGEoU3Bhbjx1aW50
OF90Pik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRl
Y29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPHN0ZDo6Ynl0ZT4pOwogCiAgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIERlY29kZXImIG9wZXJhdG9yPj4oc3RkOjpvcHRpb25hbDxib29sPiYpOwogICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVyYXRvcj4+KHN0ZDo6b3B0aW9uYWw8dWludDhf
dD4mKTsKQEAgLTg0LDcgKzg3LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbnVtRWxlbWVu
dHMgPD0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAvIHNpemVvZihUKSAmJiBi
dWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKG51bUVsZW1lbnRzICogc2l6ZW9mKFQpKTsKICAg
ICB9CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgV0FSTl9VTlVTRURfUkVUVVJOIGNvbnN0IHVp
bnQ4X3QqIGJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFkKHNpemVfdCBudW1CeXRlcyk7CisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBjb25zdCBzdGQ6OmJ5dGUqIGJ1
ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFkKHNpemVfdCBudW1CeXRlcyk7CiAKICAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNJUENEZWNvZGVyID0gZmFsc2U7CiAKQEAgLTkyLDkgKzk1LDkgQEAg
cHJpdmF0ZToKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wg
YnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihzaXplX3QpIGNvbnN0OwogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFR5cGU+IERlY29kZXImIGRlY29kZU51bWJlcihzdGQ6Om9wdGlvbmFsPFR5cGU+
Jik7CiAKLSAgICBjb25zdCB1aW50OF90KiBtX2J1ZmZlcjsKLSAgICBjb25zdCB1aW50OF90KiBt
X2J1ZmZlclBvc2l0aW9uOwotICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyRW5kOworICAgIGNv
bnN0IHN0ZDo6Ynl0ZSogbV9idWZmZXI7CisgICAgY29uc3Qgc3RkOjpieXRlKiBtX2J1ZmZlclBv
c2l0aW9uOworICAgIGNvbnN0IHN0ZDo6Ynl0ZSogbV9idWZmZXJFbmQ7CiAKICAgICBTSEExIG1f
c2hhMTsKIH07CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5j
b2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lz
dGVudEVuY29kZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJz
aXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDM0ICsz
MSwzOSBAQAogbmFtZXNwYWNlIFdURiB7CiBuYW1lc3BhY2UgUGVyc2lzdGVuY2UgewogCi1FbmNv
ZGVyOjpFbmNvZGVyKCkKK0VuY29kZXI6OkVuY29kZXIoKSA9IGRlZmF1bHQ7CitFbmNvZGVyOjp+
RW5jb2RlcigpID0gZGVmYXVsdDsKKworc3RkOjpieXRlKiBFbmNvZGVyOjpncm93KHNpemVfdCBz
aXplKQogeworICAgIHNpemVfdCBuZXdQb3NpdGlvbiA9IG1fYnVmZmVyLnNpemUoKTsKKyAgICBt
X2J1ZmZlci5ncm93KG1fYnVmZmVyLnNpemUoKSArIHNpemUpOworICAgIHJldHVybiBtX2J1ZmZl
ci5kYXRhKCkgKyBuZXdQb3NpdGlvbjsKIH0KIAotRW5jb2Rlcjo6fkVuY29kZXIoKQordm9pZCBF
bmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvckRhdGEoU0hBMSYgc2hhMSwgU3Bhbjxjb25zdCB1aW50
OF90PiBkYXRhKQogeworICAgIHJldHVybiB1cGRhdGVDaGVja3N1bUZvckRhdGEoc2hhMSwgYXNC
eXRlcyhkYXRhKSk7CiB9CiAKLXVpbnQ4X3QqIEVuY29kZXI6Omdyb3coc2l6ZV90IHNpemUpCit2
b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yRGF0YShTSEExJiBzaGExLCBTcGFuPGNvbnN0
IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKLSAgICBzaXplX3QgbmV3UG9zaXRpb24gPSBtX2J1ZmZlci5z
aXplKCk7Ci0gICAgbV9idWZmZXIuZ3JvdyhtX2J1ZmZlci5zaXplKCkgKyBzaXplKTsKLSAgICBy
ZXR1cm4gbV9idWZmZXIuZGF0YSgpICsgbmV3UG9zaXRpb247CisgICAgYXV0byB0eXBlU2FsdCA9
IFNhbHQ8dWludDhfdCo+Ojp2YWx1ZTsKKyAgICBzaGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7
ICZ0eXBlU2FsdCwgMSB9KSk7CisgICAgc2hhMS5hZGRCeXRlcyhkYXRhKTsKIH0KIAotdm9pZCBF
bmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvckRhdGEoU0hBMSYgc2hhMSwgY29uc3QgdWludDhfdCog
ZGF0YSwgc2l6ZV90IHNpemUpCit2b2lkIEVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShT
cGFuPGNvbnN0IHVpbnQ4X3Q+IGRhdGEpCiB7Ci0gICAgYXV0byB0eXBlU2FsdCA9IFNhbHQ8dWlu
dDhfdCo+Ojp2YWx1ZTsKLSAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KCZ0eXBlU2FsdCksIHNpemVvZih0eXBlU2FsdCkpOwotICAgIHNoYTEuYWRkQnl0ZXMoZGF0
YSwgc2l6ZSk7CisgICAgcmV0dXJuIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShhc0J5dGVzKGRhdGEp
KTsKIH0KIAotdm9pZCBFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhf
dCogZGF0YSwgc2l6ZV90IHNpemUpCit2b2lkIEVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0
YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKLSAgICB1cGRhdGVDaGVja3N1bUZvckRh
dGEobV9zaGExLCBkYXRhLCBzaXplKTsKKyAgICB1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGEx
LCBkYXRhKTsKIAotICAgIHVpbnQ4X3QqIGJ1ZmZlciA9IGdyb3coc2l6ZSk7Ci0gICAgbWVtY3B5
KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7CisgICAgYXV0byogYnVmZmVyID0gZ3JvdyhkYXRhLnNpemUo
KSk7CisgICAgbWVtY3B5KGJ1ZmZlciwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KQEAgLTY2LDcgKzcxLDcgQEAgRW5jb2RlciYgRW5jb2Rl
cjo6ZW5jb2RlTnVtYmVyKFR5cGUgdmFsdQogewogICAgIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3Vt
Rm9yTnVtYmVyKG1fc2hhMSwgdmFsdWUpOwogCi0gICAgdWludDhfdCogYnVmZmVyID0gZ3Jvdyhz
aXplb2YoVHlwZSkpOworICAgIGF1dG8qIGJ1ZmZlciA9IGdyb3coc2l6ZW9mKFR5cGUpKTsKICAg
ICBtZW1jcHkoYnVmZmVyLCAmdmFsdWUsIHNpemVvZihUeXBlKSk7CiAgICAgcmV0dXJuICp0aGlz
OwogfQpAQCAtMTI1LDcgKzEzMCw3IEBAIHZvaWQgRW5jb2Rlcjo6ZW5jb2RlQ2hlY2tzdW0oKQog
ewogICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwogICAgIG1fc2hhMS5jb21wdXRlSGFzaChoYXNoKTsK
LSAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEoaGFzaC5kYXRhKCksIGhhc2guc2l6ZSgpKTsKKyAg
ICBlbmNvZGVGaXhlZExlbmd0aERhdGEoYXNCeXRlcyhTcGFuIHsgaGFzaCB9KSk7CiB9CiAKIH0K
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIu
aAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lz
dGVudEVuY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVk
ZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvU0hBMS5oPgorI2luY2x1ZGUgPHd0
Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9wZXJzaXN0
ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaD4KIApAQCAtNDMsNyArNDQsOCBAQCBwdWJsaWM6CiAgICAg
V1RGX0VYUE9SVF9QUklWQVRFIH5FbmNvZGVyKCk7CiAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCBlbmNvZGVDaGVja3N1bSgpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoU3Bhbjxjb25zdCB1aW50OF90Pik7
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48
Y29uc3Qgc3RkOjpieXRlPik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OmVuYWJs
ZV9pZl90PHN0ZDo6aXNfZW51bTxUPjo6dmFsdWU+KiA9IG51bGxwdHI+CiAgICAgRW5jb2RlciYg
b3BlcmF0b3I8PChjb25zdCBUJiB0KQpAQCAtNzAsMjMgKzcyLDIyIEBAIHB1YmxpYzoKICAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgRW5jb2RlciYgb3BlcmF0b3I8PChmbG9hdCk7CiAgICAgV1RGX0VY
UE9SVF9QUklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwoZG91YmxlKTsKIAotICAgIGNvbnN0IHVp
bnQ4X3QqIGJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKTsgfQotICAgIHNp
emVfdCBidWZmZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuc2l6ZSgpOyB9Ci0KLSAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNI
QTEmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
YnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXI7IH0KKyAgICAKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBTcGFuPGNv
bnN0IHVpbnQ4X3Q+KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdXBkYXRl
Q2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwogICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBUeXBlPiBzdGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZvck51bWJlcihT
SEExJiwgVHlwZSk7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJUENFbmNvZGVyID0g
ZmFsc2U7CiAKIHByaXZhdGU6Ci0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiBFbmNvZGVy
JiBlbmNvZGVOdW1iZXIoVHlwZSk7CiAKLSAgICB1aW50OF90KiBncm93KHNpemVfdCk7CisgICAg
c3RkOjpieXRlKiBncm93KHNpemVfdCk7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4g
c3RydWN0IFNhbHQ7CiAKLSAgICBWZWN0b3I8dWludDhfdCwgNDA5Nj4gbV9idWZmZXI7CisgICAg
VmVjdG9yPHN0ZDo6Ynl0ZSwgNDA5Nj4gbV9idWZmZXI7CiAgICAgU0hBMSBtX3NoYTE7CiB9Owog
CkBAIC0xMDYsOCArMTA3LDggQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+CiB2b2lkIEVuY29k
ZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKFNIQTEmIHNoYTEsIFR5cGUgdmFsdWUpCiB7CiAg
ICAgYXV0byB0eXBlU2FsdCA9IFNhbHQ8VHlwZT46OnZhbHVlOwotICAgIHNoYTEuYWRkQnl0ZXMo
cmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7
Ci0gICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWUpLCBz
aXplb2YodmFsdWUpKTsKKyAgICBzaGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7ICZ0eXBlU2Fs
dCwgMSB9KSk7CisgICAgc2hhMS5hZGRCeXRlcyhhc0J5dGVzKFNwYW4geyAmdmFsdWUsIDEgfSkp
OwogfQogCiB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcg
QEAKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5o
PgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0
ZW5hdGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNjAsMTQgKzYx
LDEyIEBAIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShjb24KIFdURl9FWFBP
UlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQsIExDaGFy
KiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9O
b3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7
CiAKIFdURl9FWFBPUlRfUFJJVkFURSBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0
b3IoY29uc3Qgdm9pZCosIHVuc2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNv
ZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVN
YXA6OkRlZmF1bHQpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGlj
eTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVm
YXVsdCk7Ci1WZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9y
PGNoYXI+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdElu
c2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKIFZl
Y3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBDU3RyaW5nJiwgQmFzZTY0
RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0
RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBOPiBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoU3BhbjxU
LCBOPiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2Vy
dExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKIAogV1RG
X0VYUE9SVF9QUklWQVRFIFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdCB2b2lkKiwg
dW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJ
bnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci1T
dHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgQmFzZTY0
RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0
RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKLVN0cmluZyBiYXNlNjRFbmNv
ZGVUb1N0cmluZyhjb25zdCBWZWN0b3I8Y2hhcj4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNl
NjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRF
bmNvZGVNYXA6OkRlZmF1bHQpOwogU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IENT
dHJpbmcmLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5z
ZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IE4+IFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhT
cGFuPFQsIE4+LCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90
SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwog
CiBXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2
NERlY29kZShjb25zdCBTdHJpbmcmLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7
IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7CiBXVEZfRVhQ
T1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShT
dHJpbmdWaWV3LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERl
Y29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7CkBAIC03NiwzNCArNzUsMjQgQEAg
V1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPAogV1RGX0VYUE9SVF9QUklW
QVRFIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgdWlu
dDhfdCosIHVuc2lnbmVkLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJh
c2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7CiBXVEZfRVhQT1JUX1BS
SVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBj
aGFyKiwgdW5zaWduZWQsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFz
ZTY0RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKIAotaW5saW5lIFZlY3Rv
cjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8dWludDhfdD4mIGlu
cHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQotewot
ICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRhKCksIGlucHV0LnNpemUo
KSwgcG9saWN5LCBtYXApOwotfQotCi1pbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29k
ZVRvVmVjdG9yKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBw
b2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCi17Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRv
VmVjdG9yKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7Ci19Ci0KIGlu
bGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgQ1N0cmluZyYg
aW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7
Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlucHV0LmRhdGEoKSwgaW5wdXQubGVu
Z3RoKCksIHBvbGljeSwgbWFwKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5w
dXQuYnl0ZXMoKSwgcG9saWN5LCBtYXApOwogfQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NEVuY29k
ZVRvU3RyaW5nKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGlj
eSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXpl
X3QgTj4gVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKFNwYW48VCwgTj4gaW5w
dXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0g
ICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgp
LCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlucHV0LmRh
dGEoKSwgaW5wdXQuc2l6ZV9ieXRlcygpLCBwb2xpY3ksIG1hcCk7CiB9CiAKLWlubGluZSBTdHJp
bmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCwgQmFzZTY0
RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKK2lubGluZSBTdHJpbmcg
YmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgQ1N0cmluZyYgaW5wdXQsIEJhc2U2NEVuY29kZVBv
bGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVu
Y29kZVRvU3RyaW5nKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7Cisg
ICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LmJ5dGVzKCksIHBvbGljeSwgbWFw
KTsKIH0KIAotaW5saW5lIFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdCBDU3RyaW5n
JiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBOPiBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJp
bmcoU3BhbjxULCBOPiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5j
b2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5wdXQuZGF0
YSgpLCBpbnB1dC5sZW5ndGgoKSwgcG9saWN5LCBtYXApOworICAgIHJldHVybiBiYXNlNjRFbmNv
ZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemVfYnl0ZXMoKSwgcG9saWN5LCBtYXAp
OwogfQogCiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBT
b3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjks
NyBAQAogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KIAogbmFt
ZXNwYWNlIFdURiB7CiAKQEAgLTM5LDkgKzQwLDExIEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhf
SEVBUF9JREVOVElGSUVSKEMKIGNsYXNzIENTdHJpbmdCdWZmZXIgZmluYWwgOiBwdWJsaWMgUmVm
Q291bnRlZDxDU3RyaW5nQnVmZmVyPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURfV0lU
SF9IRUFQX0lERU5USUZJRVIoQ1N0cmluZ0J1ZmZlcik7CiBwdWJsaWM6Ci0gICAgY29uc3QgY2hh
ciogZGF0YSgpIHsgcmV0dXJuIG11dGFibGVEYXRhKCk7IH0KKyAgICBjb25zdCBjaGFyKiBkYXRh
KCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxDU3RyaW5nQnVmZmVyKj4odGhpcyktPm11dGFi
bGVEYXRhKCk7IH0KICAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7
IH0KIAorICAgIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0IHsgcmV0dXJuIGFz
Qnl0ZXMoU3BhbiB7IGRhdGEoKSwgbGVuZ3RoKCkgfSk7IH0KKwogcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgQ1N0cmluZzsKIApAQCAtNjYsNiArNjksMjAgQEAgcHVibGljOgogICAgIFdURl9F
WFBPUlRfUFJJVkFURSBzdGF0aWMgQ1N0cmluZyBuZXdVbmluaXRpYWxpemVkKHNpemVfdCBsZW5n
dGgsIGNoYXIqJiBjaGFyYWN0ZXJCdWZmZXIpOwogICAgIENTdHJpbmcoSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlVHlwZSkgOiBtX2J1ZmZlcihIYXNoVGFibGVEZWxldGVkVmFsdWUpIHsgfQogCisgICAg
U3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGJ5dGVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICht
X2J1ZmZlcikKKyAgICAgICAgICAgIHJldHVybiBtX2J1ZmZlci0+Ynl0ZXMoKTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBTcGFuPHN0ZDo6Ynl0ZT4gbXV0YWJsZUJ5dGVzKCkK
KyAgICB7CisgICAgICAgIGlmIChhdXRvIG11dGFibGVEYXRhID0gdGhpcy0+bXV0YWJsZURhdGEo
KSkKKyAgICAgICAgICAgIHJldHVybiBhc1dyaXRhYmxlQnl0ZXMoU3BhbiB7IG11dGFibGVEYXRh
LCBtX2J1ZmZlci0+bGVuZ3RoKCkgfSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCiAg
ICAgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9idWZm
ZXIgPyBtX2J1ZmZlci0+ZGF0YSgpIDogbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3dp
bi9GaWxlU3lzdGVtV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi93aW4vRmls
ZVN5c3RlbVdpbi5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3dpbi9G
aWxlU3lzdGVtV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYzLDkgKzM2Myw5IEBAIFN0cmlu
ZyBjcmVhdGVUZW1wb3JhcnlEaXJlY3RvcnkoKQogICAgIH0pOwogfQogCi1ib29sIHVubWFwVmll
d09mRmlsZSh2b2lkKiBidWZmZXIsIHNpemVfdCkKK2Jvb2wgdW5tYXBWaWV3T2ZGaWxlKFNwYW48
c3RkOjpieXRlPiBkYXRhKQogewotICAgIHJldHVybiBVbm1hcFZpZXdPZkZpbGUoYnVmZmVyKTsK
KyAgICByZXR1cm4gVW5tYXBWaWV3T2ZGaWxlKGRhdGEuZGF0YSgpKTsKIH0KIAogYm9vbCBNYXBw
ZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBGaWxl
T3Blbk1vZGUgb3Blbk1vZGUsIE1hcHBlZEZpbGVNb2RlKQpAQCAtMzc0LDcgKzM3NCw3IEBAIGJv
b2wgTWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5kbGUoUGxhdGYKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgYXV0byBzaXplID0gZmlsZVNpemUoaGFuZGxlKTsKLSAgICBpZiAoIXNpemUg
fHwgKnNpemUgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIHx8ICpzaXplID4g
c3RkOjpudW1lcmljX2xpbWl0czxkZWNsdHlwZShtX2ZpbGVTaXplKT46Om1heCgpKSB7CisgICAg
aWYgKCFzaXplIHx8ICpzaXplID4gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSB8
fCAqc2l6ZSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8ZGVjbHR5cGUobV9maWxlRGF0YS5zaXplKCkp
Pjo6bWF4KCkpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNDAzLDExICs0
MDMsMTIgQEAgYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0ZgogICAgIGlm
ICghbWFwcGluZykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9maWxlRGF0YSA9IE1h
cFZpZXdPZkZpbGUobWFwcGluZywgZGVzaXJlZEFjY2VzcywgMCwgMCwgKnNpemUpOworICAgIGF1
dG8gZGF0YSA9IE1hcFZpZXdPZkZpbGUobWFwcGluZywgZGVzaXJlZEFjY2VzcywgMCwgMCwgKnNp
emUpOwogICAgIENsb3NlSGFuZGxlKG1hcHBpbmcpOwotICAgIGlmICghbV9maWxlRGF0YSkKKyAg
ICBpZiAoIWRhdGEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2ZpbGVTaXplID0gKnNp
emU7CisKKyAgICBtX2ZpbGVEYXRhID0gU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpieXRl
Kj4oZGF0YSksICpzaXplIH07CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDgwIEBACisyMDIxLTA2LTExICBTYW0gV2VpbmlnICA8d2VpbmlnQGFw
cGxlLmNvbT4KKworICAgICAgICBBZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICog
TW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0Lmg6CisgICAgICAgIChXZWJDb3JlOjpBcHBI
aWdobGlnaHQ6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHQ6
OmRlY29kZSk6CisgICAgICAgICogTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0UmFuZ2VE
YXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6dG9TaGFy
ZWRCdWZmZXIgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRv
clJlc3BvbnNlRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlQXJyYXlCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6ZGVjb2RlQXJyYXlCdWZmZXIpOgorICAgICAgICAqIE1vZHVsZXMv
d2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oOgorICAgICAgICAo
V2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6ZW5jb2RlIGNvbnN0
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlw
dG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcjo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFu
ZHNoYWtlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhw
ZWN0ZWRXZWJTb2NrZXRBY2NlcHQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0J1ZmZlclNvdXJj
ZS5oOgorICAgICAgICAoV2ViQ29yZTo6QnVmZmVyU291cmNlOjpieXRlcyBjb25zdCk6CisgICAg
ICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmg6CisgICAgICAgIChXZWJD
b3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRlY29kZSk6CisgICAgICAgICogY29udGVudGV4
dGVuc2lvbnMvU2VyaWFsaXplZE5GQS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0
ZW5zaW9uczo6U2VyaWFsaXplZE5GQTo6cG9pbnRlckF0T2Zmc2V0SW5GaWxlIGNvbnN0KToKKyAg
ICAgICAgKiBjcnlwdG8vbWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlQW5kU3RvcmVNYXN0ZXJLZXkpOgorICAgICAgICAqIGRvbS9Ob2Rl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omhhc2hQb2ludGVyKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBhdGNoU3VwcG9y
dDo6Y3JlYXRlRGlnZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmFkZFN0cmluZ1RvU0hBMSk6IERl
bGV0ZWQuCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZpY2F0ZSk6
CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yTmV0d29ya0FnZW50OjpnZXRTZXJpYWxpemVkQ2Vy
dGlmaWNhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpjcmVhdGVTaGFyZWRCdWZm
ZXIgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFyZWRCdWZmZXI6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6
OkRhdGFTZWdtZW50OjpkYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZl
cjo6RGF0YVNlZ21lbnQ6OmJ5dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1
ZmZlcjo6ZGVjb2RlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRh
dGFTZWdtZW50OjpzaXplIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRp
b24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZW5jb2Rl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZGVj
b2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Nb2RlbC5oOgorICAgICAgICAoV2Vi
Q29yZTo6TW9kZWw6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNb2RlbDo6ZGVj
b2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6UGl4ZWxCdWZmZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpQaXhlbEJ1ZmZlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9S
ZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpDYXBh
YmlsaXR5VmFsdWVPclJhbmdlOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fw
YWJpbGl0eVZhbHVlT3JSYW5nZTo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFk
ZFN0cmluZ1RvU0hBMSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0
ZUluZm9DRk5ldC5jcHA6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjplbmNvZGVDRkRhdGEp
OgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVjb2RlQ0ZEYXRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0
ZVN0YXRlbWVudDo6YmluZEJsb2IpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0
ZW1lbnQuaDoKKyAgICAgICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRh
dGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1
c2hDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBv
cnRSZWNvcmRzKToKKyAgICAgICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3Rv
cmFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTV1NjcmlwdFN0b3JhZ2U6OnN0b3JlKToKKwog
MjAyMS0wNi0xMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIExh
emlseSBjb21wdXRlIFNlY3VyaXR5T3JpZ2luOjptX2lzUG90ZW50aWFsbHlUcnVzdHdvcnRoeSBm
b3IgcGVyZm9ybWFuY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0Fw
cEhpZ2hsaWdodC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxp
Z2h0L0FwcEhpZ2hsaWdodC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyAr
NTIsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBBcHBIaWdobGlnaHQ6OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
c2l6ZV90PihoaWdobGlnaHQtPnNpemUoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEoaGlnaGxpZ2h0LT5kYXRhKCksIGhpZ2hsaWdodC0+c2l6ZSgpLCAxKTsKKyAgICBlbmNv
ZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YSgqaGlnaGxpZ2h0LCAxKTsKIAogICAgIGVuY29kZXIg
PDwgdGV4dDsKIApAQCAtNzUsNyArNzUsNyBAQCBzdGQ6Om9wdGlvbmFsPEFwcEhpZ2hsaWdodD4g
QXBwSGlnaGxpZ2h0CiAKICAgICBWZWN0b3I8dWludDhfdD4gaGlnaGxpZ2h0OwogICAgIGhpZ2hs
aWdodC5ncm93KCpsZW5ndGgpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERh
dGEoaGlnaGxpZ2h0LmRhdGEoKSwgaGlnaGxpZ2h0LnNpemUoKSwgMSkpCisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShoaWdobGlnaHQsIDEpKQogICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwogCiAgICAgc3RkOjpvcHRpb25hbDxzdGQ6Om9wdGlvbmFsPFN0cmluZz4+
IHRleHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGln
aHRSYW5nZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGln
aGxpZ2h0L0FwcEhpZ2hsaWdodFJhbmdlRGF0YS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFJhbmdlRGF0YS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgUmVmPFNoYXJlZEJ1ZmZlcj4gQXBwSGln
aGxpZ2h0UmFuZ2VEYXRhOgogewogICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2Rl
cjsKICAgICBlbmNvZGVyIDw8ICp0aGlzOwotICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0
ZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgcmV0dXJuIFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCkpOwogfQogCiB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPiB2b2lkIEFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6Tm9kZVBhdGhDb21wb25lbnQ6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yUmVzcG9uc2VEYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yUmVzcG9uc2VEYXRh
LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4v
QXV0aGVudGljYXRvclJlc3BvbnNlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3
IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiBzdGF0aWMgdm9pZCBlbmNvZGVBcnJheUJ1ZmZl
cihFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBBcnJheUJ1ZmZlciYgYnVmZmVyKQogewogICAgIGVu
Y29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ1ZmZlci5ieXRlTGVuZ3RoKCkpOwotICAg
IGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihidWZmZXIuZGF0YSgpKSwgYnVmZmVyLmJ5dGVMZW5ndGgoKSwgMSk7CisgICAgZW5jb2Rlci5l
bmNvZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLmJ5dGVzKCksIDEpOwogfQogCiB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPgpAQCAtNzUsNyArNzUsNyBAQCBSZWZQdHI8QXJyYXlCdWZmZXI+IGRlY29k
ZUFycmF5QnVmZmVyKERlCiAgICAgYXV0byBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRl
KGxlbmd0aC52YWx1ZSgpLCBzaXplb2YodWludDhfdCkpOwogICAgIGlmICghYnVmZmVyKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhE
YXRhKHN0YXRpY19jYXN0PHVpbnQ4X3QqPihidWZmZXItPmRhdGEoKSksIGxlbmd0aC52YWx1ZSgp
LCAxKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ1ZmZlci0+d3Jp
dGFibGVCeXRlcygpLCAxKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIGJ1
ZmZlcjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1Ymxp
Y0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDgg
KzE0MSw4IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIFB1YmxpY0tleUNyZWRlbnRp
YWxDcmVhdGlvbk9wdGlvbnM6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAg
IGVuY29kZXIgPDwgcnAuaWQgPDwgcnAubmFtZSA8PCBycC5pY29uOwotICAgIGVuY29kZXIgPDwg
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHVzZXIuaWQubGVuZ3RoKCkpOwotICAgIGVuY29kZXIuZW5j
b2RlRml4ZWRMZW5ndGhEYXRhKHVzZXIuaWQuZGF0YSgpLCB1c2VyLmlkLmxlbmd0aCgpLCAxKTsK
KyAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih1c2VyLmlkLmJ5dGVzKCkuc2l6
ZSgpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YSh1c2VyLmlkLmJ5dGVzKCks
IDEpOwogICAgIGVuY29kZXIgPDwgdXNlci5kaXNwbGF5TmFtZSA8PCB1c2VyLm5hbWUgPDwgdXNl
ci5pY29uIDw8IHB1YktleUNyZWRQYXJhbXMgPDwgdGltZW91dCA8PCBleGNsdWRlQ3JlZGVudGlh
bHMgPDwgYXV0aGVudGljYXRvclNlbGVjdGlvbiA8PCBhdHRlc3RhdGlvbiA8PCBleHRlbnNpb25z
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNy
ZWRlbnRpYWxEZXNjcmlwdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvci5oCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRp
YWxEZXNjcmlwdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDggKzQ3LDggQEAgdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3I6OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgdHlwZTsKLSAgICBl
bmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihpZC5sZW5ndGgoKSk7Ci0gICAgZW5jb2Rl
ci5lbmNvZGVGaXhlZExlbmd0aERhdGEoaWQuZGF0YSgpLCBpZC5sZW5ndGgoKSwgMSk7CisgICAg
ZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaWQuYnl0ZXMoKS5zaXplKCkpOworICAg
IGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGlkLmJ5dGVzKCksIDEpOwogICAgIGVuY29k
ZXIgPDwgdHJhbnNwb3J0czsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJz
b2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAJKHJldmlzaW9uIDI3
ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5k
c2hha2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMTMgKzEwMywxNCBAQCBzdGF0aWMgU3Ry
aW5nIGdlbmVyYXRlU2VjV2ViU29ja2V0S2V5KCkKIFN0cmluZyBXZWJTb2NrZXRIYW5kc2hha2U6
OmdldEV4cGVjdGVkV2ViU29ja2V0QWNjZXB0KGNvbnN0IFN0cmluZyYgc2VjV2ViU29ja2V0S2V5
KQogewogICAgIGNvbnN0ZXhwciB1aW50OF90IHdlYlNvY2tldEtleUdVSURbXSA9ICIyNThFQUZB
NS1FOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTEiOworCiAgICAgU0hBMSBzaGExOwotICAgIENT
dHJpbmcga2V5RGF0YSA9IHNlY1dlYlNvY2tldEtleS5hc2NpaSgpOwotICAgIHNoYTEuYWRkQnl0
ZXMoa2V5RGF0YS5kYXRhQXNVSW50OFB0cigpLCBrZXlEYXRhLmxlbmd0aCgpKTsKLSAgICBzaGEx
LmFkZEJ5dGVzKHdlYlNvY2tldEtleUdVSUQsIHN0ZDo6c2l6ZSh3ZWJTb2NrZXRLZXlHVUlEKSAt
IDEpOworICAgIHNoYTEuYWRkQnl0ZXMoc2VjV2ViU29ja2V0S2V5LmFzY2lpKCkpOworICAgIHNo
YTEuYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgd2ViU29ja2V0S2V5R1VJRCB9KSk7CisKICAgICBT
SEExOjpEaWdlc3QgaGFzaDsKICAgICBzaGExLmNvbXB1dGVIYXNoKGhhc2gpOwotICAgIHJldHVy
biBiYXNlNjRFbmNvZGVUb1N0cmluZyhoYXNoLmRhdGEoKSwgU0hBMTo6aGFzaFNpemUpOworICAg
IHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgaGFzaCB9KTsKIH0KIAogV2ViU29j
a2V0SGFuZHNoYWtlOjpXZWJTb2NrZXRIYW5kc2hha2UoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0
cmluZyYgcHJvdG9jb2wsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIGNs
aWVudE9yaWdpbiwgYm9vbCBhbGxvd0Nvb2tpZXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9CdWZmZXJTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9CdWZmZXJTb3VyY2UuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvQnVmZmVyU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3
LDEzIEBAIHB1YmxpYzoKICAgICAgICAgfSwgbV92YXJpYW50KTsKICAgICB9CiAKKyAgICBTcGFu
PGNvbnN0IHVpbnQ4X3Q+IGJ5dGVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6
OnZpc2l0KFtdKGF1dG8mIGJ1ZmZlcikgLT4gU3Bhbjxjb25zdCB1aW50OF90PiB7CisgICAgICAg
ICAgICByZXR1cm4gYnVmZmVyID8gU3Bhbjxjb25zdCB1aW50OF90PiB7IHN0YXRpY19jYXN0PGNv
bnN0IHVpbnQ4X3QqPihidWZmZXItPmRhdGEoKSksIGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIH0gOiBT
cGFuPGNvbnN0IHVpbnQ4X3Q+IHsgfTsKKyAgICAgICAgfSwgbV92YXJpYW50KTsKKyAgICB9CisK
IHByaXZhdGU6CiAgICAgVmFyaWFudFR5cGUgbV92YXJpYW50OwogfTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCShyZXZp
c2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTY0LDE1ICsxNjQsMTUgQEAgdm9pZCBTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OmVuY29kZShFbmNvZAogCiAgICAgaWYgKGhhc0FycmF5KSB7CiAg
ICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1fYXJyYXlCdWZmZXJDb250
ZW50c0FycmF5LT5zaXplKCkpOwotICAgICAgICBmb3IgKGNvbnN0IGF1dG8gJmFycmF5QnVmZmVy
Q29udGVudHMgOiAqbV9hcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkpIHsKKyAgICAgICAgZm9yIChj
b25zdCBhdXRvJiBhcnJheUJ1ZmZlckNvbnRlbnRzIDogKm1fYXJyYXlCdWZmZXJDb250ZW50c0Fy
cmF5KSB7CiAgICAgICAgICAgICBlbmNvZGVyIDw8IGFycmF5QnVmZmVyQ29udGVudHMuc2l6ZUlu
Qnl0ZXMoKTsKLSAgICAgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0YXRp
Y19jYXN0PGNvbnN0IHVpbnQ4X3QqPihhcnJheUJ1ZmZlckNvbnRlbnRzLmRhdGEoKSksIGFycmF5
QnVmZmVyQ29udGVudHMuc2l6ZUluQnl0ZXMoKSwgMSk7CisgICAgICAgICAgICBlbmNvZGVyLmVu
Y29kZUZpeGVkTGVuZ3RoRGF0YShhcnJheUJ1ZmZlckNvbnRlbnRzLmJ5dGVzKCksIDEpOwogICAg
ICAgICB9CiAgICAgfQogCiAjaWYgRU5BQkxFKFdFQl9SVEMpCiAgICAgZW5jb2RlciA8PCBzdGF0
aWNfY2FzdDx1aW50NjRfdD4obV9kZXRhY2hlZFJUQ0RhdGFDaGFubmVscy5zaXplKCkpOwotICAg
IGZvciAoY29uc3QgYXV0byAmY2hhbm5lbCA6IG1fZGV0YWNoZWRSVENEYXRhQ2hhbm5lbHMpCisg
ICAgZm9yIChjb25zdCBhdXRvJiBjaGFubmVsIDogbV9kZXRhY2hlZFJUQ0RhdGFDaGFubmVscykK
ICAgICAgICAgZW5jb2RlciA8PCAqY2hhbm5lbDsKICNlbmRpZgogfQpAQCAtMjA2LDcgKzIwNiw3
IEBAIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWQKICAgICAgICAgICAg
IGF1dG8gYnVmZmVyID0gR2lnYWNhZ2U6OnRyeU1hbGxvYyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBi
dWZmZXJTaXplKTsKICAgICAgICAgICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3Ro
RGF0YShzdGF0aWNfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgYnVmZmVyU2l6ZSwgMSkpIHsKKyAg
ICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IHN0YXRp
Y19jYXN0PHN0ZDo6Ynl0ZSo+KGJ1ZmZlciksIGJ1ZmZlclNpemUgfSwgMSkpIHsKICAgICAgICAg
ICAgICAgICBHaWdhY2FnZTo6ZnJlZShHaWdhY2FnZTo6UHJpbWl0aXZlLCBidWZmZXIpOwogICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvU2VyaWFsaXplZE5GQS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvU2VyaWFsaXplZE5GQS5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL1Nlcmlh
bGl6ZWRORkEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgU2VyaWFsaXpl
ZE5GQTo6U2VyaWFsaXplZE5GQShGaWxlU3lzdGVtOgogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGNv
bnN0IFQqIFNlcmlhbGl6ZWRORkE6OnBvaW50ZXJBdE9mZnNldEluRmlsZShzaXplX3Qgb2Zmc2V0
KSBjb25zdAogewotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IFQqPihzdGF0aWNf
Y2FzdDxjb25zdCB1aW50OF90Kj4obV9maWxlLmRhdGEoKSkgKyBvZmZzZXQpOworICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PGNvbnN0IFQqPihtX2ZpbGUuZGF0YSgpLmRhdGEoKSArIG9mZnNl
dCk7CiB9CiAKIGF1dG8gU2VyaWFsaXplZE5GQTo6bm9kZXMoKSBjb25zdCAtPiBjb25zdCBSYW5n
ZTxJbW11dGFibGVORkFOb2RlPgpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9TZXJp
YWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vbWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tCShyZXZpc2lvbiAyNzg4MDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNyArMTI1LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9E
RUNMQVJBVElPTlNfRU5ECiAgICAgfQogI2VuZGlmCiAKLSAgICBhdXRvIGJhc2U2NEVuY29kZWRN
YXN0ZXJLZXlEYXRhID0gYmFzZTY0RW5jb2RlVG9WZWN0b3IobWFzdGVyS2V5RGF0YSk7CisgICAg
YXV0byBiYXNlNjRFbmNvZGVkTWFzdGVyS2V5RGF0YSA9IGJhc2U2NEVuY29kZVRvVmVjdG9yKFNw
YW4geyBtYXN0ZXJLZXlEYXRhIH0pOwogCiAgICAgLy8gQ2Fubm90IHVzZSBrU2VjQ2xhc3NLZXkg
YmVjYXVzZSBvZiA8cmRhcjovL3Byb2JsZW0vMTYwNjgyMDc+LgogICAgIE5TRGljdGlvbmFyeSAq
YXR0cmlidXRlcyA9IEB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MDYsNyAr
MTYwNiw4IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IE5vZGU6OnNldFRleHRDb250ZW50KGMKIHN0YXRp
YyBTSEExOjpEaWdlc3QgaGFzaFBvaW50ZXIoY29uc3Qgdm9pZCogcG9pbnRlcikKIHsKICAgICBT
SEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPigmcG9pbnRlciksIHNpemVvZihwb2ludGVyKSk7CisgICAgc2hhMS5hZGRCeXRlcyhhc0J5
dGVzKFNwYW4geyAmcG9pbnRlciwgMSB9KSk7CisKICAgICBTSEExOjpEaWdlc3QgZGlnZXN0Owog
ICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsKICAgICByZXR1cm4gZGlnZXN0OwpJbmRleDog
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAJKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOTQsMjggKzM5NCwyMyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBE
T01QYXRjaFN1cHBvcnQ6OmlubmVyCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotc3RhdGljIHZvaWQg
YWRkU3RyaW5nVG9TSEExKFNIQTEmIHNoYTEsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAg
IENTdHJpbmcgY1N0cmluZyA9IHN0cmluZy51dGY4KCk7Ci0gICAgc2hhMS5hZGRCeXRlcyhjU3Ry
aW5nLmRhdGFBc1VJbnQ4UHRyKCksIGNTdHJpbmcubGVuZ3RoKCkpOwotfQotCiBzdGQ6OnVuaXF1
ZV9wdHI8RE9NUGF0Y2hTdXBwb3J0OjpEaWdlc3Q+IERPTVBhdGNoU3VwcG9ydDo6Y3JlYXRlRGln
ZXN0KE5vZGUmIG5vZGUsIFVudXNlZE5vZGVzTWFwKiB1bnVzZWROb2Rlc01hcCkKIHsKICAgICBh
dXRvIGRpZ2VzdCA9IG1ha2VVbmlxdWU8RGlnZXN0PigpOwogICAgIGRpZ2VzdC0+bm9kZSA9ICZu
b2RlOworCiAgICAgU0hBMSBzaGExOwogCiAgICAgYXV0byBub2RlVHlwZSA9IG5vZGUubm9kZVR5
cGUoKTsKLSAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+
KCZub2RlVHlwZSksIHNpemVvZihub2RlVHlwZSkpOwotICAgIGFkZFN0cmluZ1RvU0hBMShzaGEx
LCBub2RlLm5vZGVOYW1lKCkpOwotICAgIGFkZFN0cmluZ1RvU0hBMShzaGExLCBub2RlLm5vZGVW
YWx1ZSgpKTsKKyAgICBzaGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7ICZub2RlVHlwZSwgMSB9
KSk7CisgICAgc2hhMS5hZGRCeXRlcyhub2RlLm5vZGVOYW1lKCkudXRmOCgpKTsKKyAgICBzaGEx
LmFkZEJ5dGVzKG5vZGUubm9kZVZhbHVlKCkudXRmOCgpKTsKIAogICAgIGlmIChub2RlLm5vZGVU
eXBlKCkgPT0gTm9kZTo6RUxFTUVOVF9OT0RFKSB7CiAgICAgICAgIE5vZGUqIGNoaWxkID0gbm9k
ZS5maXJzdENoaWxkKCk7CiAgICAgICAgIHdoaWxlIChjaGlsZCkgewogICAgICAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPERpZ2VzdD4gY2hpbGRJbmZvID0gY3JlYXRlRGlnZXN0KCpjaGlsZCwgdW51
c2VkTm9kZXNNYXApOwotICAgICAgICAgICAgYWRkU3RyaW5nVG9TSEExKHNoYTEsIGNoaWxkSW5m
by0+c2hhMSk7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGNoaWxkSW5mby0+c2hhMS51dGY4
KCkpOwogICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAg
ICAgIGRpZ2VzdC0+Y2hpbGRyZW4uYXBwZW5kKFdURk1vdmUoY2hpbGRJbmZvKSk7CiAgICAgICAg
IH0KQEAgLTQyNCwxOSArNDE5LDE5IEBAIHN0ZDo6dW5pcXVlX3B0cjxET01QYXRjaFN1cHBvcnQ6
OkRpZ2VzdD4KICAgICAgICAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlc1dpdGhvdXRVcGRhdGUo
KSkgewogICAgICAgICAgICAgU0hBMSBhdHRyc1NIQTE7CiAgICAgICAgICAgICBmb3IgKGF1dG8m
IGF0dHJpYnV0ZSA6IGVsZW1lbnQuYXR0cmlidXRlc0l0ZXJhdG9yKCkpIHsKLSAgICAgICAgICAg
ICAgICBhZGRTdHJpbmdUb1NIQTEoYXR0cnNTSEExLCBhdHRyaWJ1dGUubmFtZSgpLnRvU3RyaW5n
KCkpOwotICAgICAgICAgICAgICAgIGFkZFN0cmluZ1RvU0hBMShhdHRyc1NIQTEsIGF0dHJpYnV0
ZS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBhdHRyc1NIQTEuYWRkQnl0ZXMoYXR0cmlidXRl
Lm5hbWUoKS50b1N0cmluZygpLnV0ZjgoKSk7CisgICAgICAgICAgICAgICAgYXR0cnNTSEExLmFk
ZEJ5dGVzKGF0dHJpYnV0ZS52YWx1ZSgpLnN0cmluZygpLnV0ZjgoKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBTSEExOjpEaWdlc3QgYXR0cnNIYXNoOwogICAgICAgICAgICAgYXR0cnNT
SEExLmNvbXB1dGVIYXNoKGF0dHJzSGFzaCk7Ci0gICAgICAgICAgICBkaWdlc3QtPmF0dHJzU0hB
MSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGF0dHJzSGFzaC5kYXRhKCksIDEwKTsKLSAgICAgICAg
ICAgIGFkZFN0cmluZ1RvU0hBMShzaGExLCBkaWdlc3QtPmF0dHJzU0hBMSk7CisgICAgICAgICAg
ICBkaWdlc3QtPmF0dHJzU0hBMSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKFNwYW4geyBhdHRyc0hh
c2ggfSk7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGRpZ2VzdC0+YXR0cnNTSEExLnV0Zjgo
KSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAgICBzaGEx
LmNvbXB1dGVIYXNoKGhhc2gpOwotICAgIGRpZ2VzdC0+c2hhMSA9IGJhc2U2NEVuY29kZVRvU3Ry
aW5nKGhhc2guZGF0YSgpLCAxMCk7CisgICAgZGlnZXN0LT5zaGExID0gYmFzZTY0RW5jb2RlVG9T
dHJpbmcoU3BhbiB7IGhhc2ggfSk7CiAgICAgaWYgKHVudXNlZE5vZGVzTWFwKQogICAgICAgICB1
bnVzZWROb2Rlc01hcC0+YWRkKGRpZ2VzdC0+c2hhMSwgZGlnZXN0LmdldCgpKTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5j
cHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JGcm9udGVuZEhvc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDIsNyArNjAyLDcgQEAgYm9v
bCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZpYwogICAgIGlmICghZGF0YSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNv
ZGVyKGRhdGEtPmRhdGEoKSwgZGF0YS0+c2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpE
ZWNvZGVyIGRlY29kZXIgeyAqZGF0YSB9OwogICAgIHN0ZDo6b3B0aW9uYWw8Q2VydGlmaWNhdGVJ
bmZvPiBjZXJ0aWZpY2F0ZUluZm87CiAgICAgZGVjb2RlciA+PiBjZXJ0aWZpY2F0ZUluZm87CiAg
ICAgaWYgKCFjZXJ0aWZpY2F0ZUluZm8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5l
dHdvcmtBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMDUsNyArMTAwNSw3IEBAIFByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG8KIAogICAgIFdURjo6UGVyc2lzdGVu
Y2U6OkVuY29kZXIgZW5jb2RlcjsKICAgICBXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxXZWJDb3Jl
OjpDZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUoZW5jb2RlciwgY2VydGlmaWNhdGUudmFsdWUoKSk7
Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGVuY29kZXIuYnVmZmVyKCksIGVuY29k
ZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoZW5jb2Rl
ci5idWZmZXIoKSk7CiB9CiAKIFdlYlNvY2tldCogSW5zcGVjdG9yTmV0d29ya0FnZW50Ojp3ZWJT
b2NrZXRGb3JSZXF1ZXN0SWQoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYgcmVx
dWVzdElkKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURh
dGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmRD
dXN0b21EYXRhLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vUGFzdGVib2FyZEN1c3RvbURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3
IEBAIFJlZjxTaGFyZWRCdWZmZXI+IFBhc3RlYm9hcmRDdXN0b21EYXRhOjoKICAgICBlbmNvZGVy
IDw8IG1fb3JpZ2luOwogICAgIGVuY29kZXIgPDwgc2FtZU9yaWdpbkN1c3RvbVN0cmluZ0RhdGEo
KTsKICAgICBlbmNvZGVyIDw8IG9yZGVyZWRUeXBlcygpOwotICAgIHJldHVybiBTaGFyZWRCdWZm
ZXI6OmNyZWF0ZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAg
cmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCkpOwogfQogCiBQYXN0
ZWJvYXJkQ3VzdG9tRGF0YSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6ZnJvbVBlcnNpc3RlbmNlRGVj
b2RlcihXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyJiYgZGVjb2RlcikKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzYsMTggKzM2LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU2hhcmVkQnVmZmVyOjpT
aGFyZWRCdWZmZXIoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCitTaGFyZWRCdWZm
ZXI6OlNoYXJlZEJ1ZmZlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKLSAgICBhcHBl
bmQoZGF0YSwgc2l6ZSk7Ci19Ci0KLVNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKGNvbnN0IGNo
YXIqIGRhdGEsIHNpemVfdCBzaXplKQotewotICAgIGFwcGVuZChyZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQ4X3QqPihkYXRhKSwgc2l6ZSk7CisgICAgYXBwZW5kKGRhdGEpOwogfQogCiBTaGFy
ZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIGZpbGVE
YXRhKQotICAgIDogbV9zaXplKGZpbGVEYXRhLnNpemUoKSkKKyAgICA6IG1fc2l6ZShmaWxlRGF0
YS5kYXRhKCkuc2l6ZSgpKQogewogICAgIG1fc2VnbWVudHMuYXBwZW5kKHswLCBEYXRhU2VnbWVu
dDo6Y3JlYXRlKFdURk1vdmUoZmlsZURhdGEpKX0pOwogfQpAQCAtMTg4LDEzICsxODMsMTMgQEAg
dm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVuZChjb25zdCBTaGFyZWRCdQogICAgIEFTU0VSVChpbnRl
cm5hbGx5Q29uc2lzdGVudCgpKTsKIH0KIAotdm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVuZChjb25z
dCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoKQordm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVu
ZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKICAgICBBU1NFUlQoIW1faGFzQmVlbkNv
bWJpbmVkSW50b09uZVNlZ21lbnQpOwogICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3I7Ci0gICAg
dmVjdG9yLmFwcGVuZChkYXRhLCBsZW5ndGgpOwotICAgIG1fc2VnbWVudHMuYXBwZW5kKHttX3Np
emUsIERhdGFTZWdtZW50OjpjcmVhdGUoV1RGTW92ZSh2ZWN0b3IpKX0pOwotICAgIG1fc2l6ZSAr
PSBsZW5ndGg7CisgICAgdmVjdG9yLmFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKTsKKyAgICBtX3NlZ21lbnRzLmFwcGVuZCh7
IG1fc2l6ZSwgRGF0YVNlZ21lbnQ6OmNyZWF0ZShXVEZNb3ZlKHZlY3RvcikpIH0pOworICAgIG1f
c2l6ZSArPSBkYXRhLnNpemUoKTsKICAgICBBU1NFUlQoaW50ZXJuYWxseUNvbnNpc3RlbnQoKSk7
CiB9CiAKQEAgLTMwMSwxMSArMjk2LDQwIEBAIGNvbnN0IHVpbnQ4X3QqIFNoYXJlZEJ1ZmZlcjo6
RGF0YVNlZ21lbnQKICNpZiBVU0UoR1NUUkVBTUVSKQogICAgICAgICBbXShjb25zdCBSZWZQdHI8
R3N0TWFwcGVkT3duZWRCdWZmZXI+JiBkYXRhKSB7IHJldHVybiBkYXRhLT5kYXRhKCk7IH0sCiAj
ZW5kaWYKLSAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRhdGEp
IHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmRhdGEoKSk7IH0KKyAg
ICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuZGF0YSgpLmRhdGEoKSk7IH0K
ICAgICApOwogICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIG1faW1tdXRhYmxlRGF0YSk7
CiB9CiAKK1NwYW48Y29uc3Qgc3RkOjpieXRlPiBTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50Ojpi
eXRlcygpIGNvbnN0Cit7CisgICAgYXV0byB2aXNpdG9yID0gV1RGOjptYWtlVmlzaXRvcigKKyAg
ICAgICAgW10oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKSB7CisgICAgICAgICAgICByZXR1
cm4gYXNCeXRlcyhTcGFuIHsgZGF0YSB9KTsKKyAgICAgICAgfSwKKyNpZiBVU0UoQ0YpCisgICAg
ICAgIFtdKGNvbnN0IFJldGFpblB0cjxDRkRhdGFSZWY+JiBkYXRhKSB7CisgICAgICAgICAgICBy
ZXR1cm4gYXNCeXRlcyhTcGFuIHsgQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhLmdldCgpKSwgc3RhdGlj
X2Nhc3Q8c2l6ZV90PihDRkRhdGFHZXRMZW5ndGgoZGF0YS5nZXQoKSkpIH0pOworICAgICAgICB9
LAorI2VuZGlmCisjaWYgVVNFKEdMSUIpCisgICAgICAgIFtdKGNvbnN0IEdSZWZQdHI8R0J5dGVz
PiYgZGF0YSkgeworICAgICAgICAgICAgcmV0dXJuIGFzQnl0ZXMoU3BhbiB7IHN0YXRpY19jYXN0
PGNvbnN0IHVpbnQ4X3QqPihnX2J5dGVzX2dldF9kYXRhKGRhdGEuZ2V0KCksIG51bGxwdHIpKSwg
Z19ieXRlc19nZXRfc2l6ZShkYXRhLmdldCgpKSB9KTsKKyAgICAgICAgfSwKKyNlbmRpZgorI2lm
IFVTRShHU1RSRUFNRVIpCisgICAgICAgIFtdKGNvbnN0IFJlZlB0cjxHc3RNYXBwZWRPd25lZEJ1
ZmZlcj4mIGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBkYXRhLT5k
YXRhKCksIGRhdGEtPnNpemUoKSB9KTsKKyAgICAgICAgfSwKKyNlbmRpZgorICAgICAgICBbXShj
b25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeworICAgICAgICAgICAgcmV0
dXJuIGRhdGEuZGF0YSgpOworICAgICAgICB9CisgICAgKTsKKyAgICByZXR1cm4gV1RGOjp2aXNp
dCh2aXNpdG9yLCBtX2ltbXV0YWJsZURhdGEpOworCit9CisKIGJvb2wgU2hhcmVkQnVmZmVyOjpE
YXRhU2VnbWVudDo6Y29udGFpbnNNYXBwZWRGaWxlRGF0YSgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8RmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGE+KG1faW1t
dXRhYmxlRGF0YSk7CkBAIC0zMTksNyArMzQzLDcgQEAgdm9pZCBTaGFyZWRCdWZmZXI6OmhpbnRN
ZW1vcnlOb3ROZWVkZWRTbwogCiBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIFNoYXJlZEJ1ZmZl
cjo6ZGVjb2RlcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHsgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OF90Kj4oZGF0YSgpKSwgc2l6ZSgpIH07CisgICAgcmV0dXJuIHsgKnRoaXMgfTsKIH0K
IAogYm9vbCBTaGFyZWRCdWZmZXI6Om9wZXJhdG9yPT0oY29uc3QgU2hhcmVkQnVmZmVyJiBvdGhl
cikgY29uc3QKQEAgLTM4NCw3ICs0MDgsNyBAQCBzaXplX3QgU2hhcmVkQnVmZmVyOjpEYXRhU2Vn
bWVudDo6c2l6ZSgpCiAjaWYgVVNFKEdTVFJFQU1FUikKICAgICAgICAgW10oY29uc3QgUmVmUHRy
PEdzdE1hcHBlZE93bmVkQnVmZmVyPiYgZGF0YSkgeyByZXR1cm4gZGF0YS0+c2l6ZSgpOyB9LAog
I2VuZGlmCi0gICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBkYXRh
KSB7IHJldHVybiBkYXRhLnNpemUoKTsgfQorICAgICAgICBbXShjb25zdCBGaWxlU3lzdGVtOjpN
YXBwZWRGaWxlRGF0YSYgZGF0YSkgeyByZXR1cm4gZGF0YS5kYXRhKCkuc2l6ZSgpOyB9CiAgICAg
KTsKICAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBtX2ltbXV0YWJsZURhdGEpOwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC02Nyw4ICs2NywxMiBAQCBjbGFzcyBTaGFyZWRCdWZmZXJEYXRhVmlldzsKIGNsYXNz
IFdFQkNPUkVfRVhQT1JUIFNoYXJlZEJ1ZmZlciA6IHB1YmxpYyBSZWZDb3VudGVkPFNoYXJlZEJ1
ZmZlcj4gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoKSB7
IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcik7IH0KLSAgICBzdGF0aWMgUmVmPFNo
YXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7IHJl
dHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihkYXRhLCBzaXplKSk7IH0KLSAgICBzdGF0
aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXpl
KSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihkYXRhLCBzaXplKSk7IH0KKyAg
ICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBk
YXRhKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihkYXRhKSk7IH0KKyAgICBz
dGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKFNwYW48Y29uc3QgdWludDhfdD4gZGF0YSkg
eyByZXR1cm4gY3JlYXRlKGFzQnl0ZXMoZGF0YSkpOyB9CisgICAgc3RhdGljIFJlZjxTaGFyZWRC
dWZmZXI+IGNyZWF0ZShTcGFuPGNvbnN0IGNoYXI+IGRhdGEpIHsgcmV0dXJuIGNyZWF0ZShhc0J5
dGVzKGRhdGEpKTsgfQorICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoY29uc3Qg
c3RkOjpieXRlKiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gY3JlYXRlKFNwYW4geyBkYXRh
LCBzaXplIH0pOyB9CisgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShjb25zdCB1
aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gY3JlYXRlKFNwYW4geyBkYXRhLCBz
aXplIH0pOyB9CisgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShjb25zdCBjaGFy
KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gY3JlYXRlKFNwYW4geyBkYXRhLCBzaXplIH0p
OyB9CiAgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShGaWxlU3lzdGVtOjpNYXBw
ZWRGaWxlRGF0YSYmIG1hcHBlZEZpbGVEYXRhKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJl
ZEJ1ZmZlcihXVEZNb3ZlKG1hcHBlZEZpbGVEYXRhKSkpOyB9CiAKICAgICBlbnVtIGNsYXNzIE1h
eVVzZUZpbGVNYXBwaW5nIDogYm9vbCB7IE5vLCBZZXMgfTsKQEAgLTEwMSw2ICsxMDUsOCBAQCBw
dWJsaWM6CiAgICAgLy8gRklYTUU6IEF1ZGl0IHRoZSBjYWxsIHNpdGVzIG9mIHRoaXMgZnVuY3Rp
b24gYW5kIHJlcGxhY2UgdGhlbSB3aXRoIGl0ZXJhdGlvbiBpZiBwb3NzaWJsZS4KICAgICBjb25z
dCB1aW50OF90KiBkYXRhKCkgY29uc3Q7CiAgICAgY29uc3QgY2hhciogZGF0YUFzQ2hhclB0cigp
IGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEoKSk7IH0K
KyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25zdCB7IHJldHVybiBhc0J5dGVz
KFNwYW4geyBkYXRhKCksIHNpemUoKSB9KTsgfQorCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGNvcHlE
YXRhKCkgeyByZXR1cm4geyBkYXRhKCksIHNpemUoKSB9OyB9CiAKICAgICAvLyBDb21iaW5lcyBh
bGwgdGhlIHNlZ21lbnRzIGludG8gYSBWZWN0b3IgYW5kIHJldHVybnMgdGhhdCB2ZWN0b3IgYWZ0
ZXIgY2xlYXJpbmcgdGhlIFNoYXJlZEJ1ZmZlci4KQEAgLTExNSw4ICsxMjEsMTIgQEAgcHVibGlj
OgogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXplKCk7IH0KIAogICAgIHZv
aWQgYXBwZW5kKGNvbnN0IFNoYXJlZEJ1ZmZlciYpOwotICAgIHZvaWQgYXBwZW5kKGNvbnN0IHVp
bnQ4X3QqLCBzaXplX3QpOwotICAgIHZvaWQgYXBwZW5kKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVf
dCBsZW5ndGgpIHsgYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEp
LCBsZW5ndGgpOyB9CisgICAgdm9pZCBhcHBlbmQoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KTsKKyAg
ICB2b2lkIGFwcGVuZChTcGFuPGNvbnN0IHVpbnQ4X3Q+IGRhdGEpIHsgYXBwZW5kKGFzQnl0ZXMo
ZGF0YSkpOyB9CisgICAgdm9pZCBhcHBlbmQoU3Bhbjxjb25zdCBjaGFyPiBkYXRhKSB7IGFwcGVu
ZChhc0J5dGVzKGRhdGEpKTsgfQorICAgIHZvaWQgYXBwZW5kKGNvbnN0IHN0ZDo6Ynl0ZSogZGF0
YSwgc2l6ZV90IGxlbmd0aCkgeyBhcHBlbmQoU3BhbiB7IGRhdGEsIGxlbmd0aCB9KTsgfQorICAg
IHZvaWQgYXBwZW5kKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5ndGgpIHsgYXBwZW5k
KFNwYW4geyBkYXRhLCBsZW5ndGggfSk7IH0KKyAgICB2b2lkIGFwcGVuZChjb25zdCBjaGFyKiBk
YXRhLCBzaXplX3QgbGVuZ3RoKSB7IGFwcGVuZChTcGFuIHsgZGF0YSwgbGVuZ3RoIH0pOyB9CiAg
ICAgdm9pZCBhcHBlbmQoVmVjdG9yPHVpbnQ4X3Q+JiYpOwogCiAgICAgdm9pZCBjbGVhcigpOwpA
QCAtMTMxLDYgKzE0MSw4IEBAIHB1YmxpYzoKICAgICAgICAgV0VCQ09SRV9FWFBPUlQgY29uc3Qg
dWludDhfdCogZGF0YSgpIGNvbnN0OwogICAgICAgICBXRUJDT1JFX0VYUE9SVCBzaXplX3Qgc2l6
ZSgpIGNvbnN0OwogCisgICAgICAgIFdFQkNPUkVfRVhQT1JUIFNwYW48Y29uc3Qgc3RkOjpieXRl
PiBieXRlcygpIGNvbnN0OworCiAgICAgICAgIHN0YXRpYyBSZWY8RGF0YVNlZ21lbnQ+IGNyZWF0
ZShWZWN0b3I8dWludDhfdD4mJiBkYXRhKQogICAgICAgICB7CiAgICAgICAgICAgICBkYXRhLnNo
cmlua1RvRml0KCk7CkBAIC0yMTIsOCArMjI0LDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAg
IGV4cGxpY2l0IFNoYXJlZEJ1ZmZlcigpID0gZGVmYXVsdDsKLSAgICBleHBsaWNpdCBTaGFyZWRC
dWZmZXIoY29uc3QgdWludDhfdCosIHNpemVfdCk7Ci0gICAgZXhwbGljaXQgU2hhcmVkQnVmZmVy
KGNvbnN0IGNoYXIqLCBzaXplX3QpOworICAgIGV4cGxpY2l0IFNoYXJlZEJ1ZmZlcihTcGFuPGNv
bnN0IHN0ZDo6Ynl0ZT4pOwogICAgIGV4cGxpY2l0IFNoYXJlZEJ1ZmZlcihWZWN0b3I8dWludDhf
dD4mJik7CiAgICAgZXhwbGljaXQgU2hhcmVkQnVmZmVyKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVE
YXRhJiYpOwogI2lmIFVTRShDRikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L2NvY29hL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9D
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBA
QAogCiAjaW5jbHVkZSAiQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgPENvcmVB
dWRpby9Db3JlQXVkaW9UeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtODAsMTMgKzgxLDEzIEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPgogdm9pZCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAogewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZtX3N0cmVhbURlc2NyaXB0aW9uKSwgc2l6
ZW9mKG1fc3RyZWFtRGVzY3JpcHRpb24pLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShhc0J5dGVzKFNwYW4geyAmbV9zdHJlYW1EZXNjcmlwdGlvbiwgMSB9KSwgMSk7CiB9
CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CiBib29sIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlv
bjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZGVz
Y3JpcHRpb24pCiB7Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZkZXNjcmlwdGlvbi5tX3N0cmVhbURlc2NyaXB0aW9u
KSwgc2l6ZW9mKGRlc2NyaXB0aW9uLm1fc3RyZWFtRGVzY3JpcHRpb24pLCAxKTsKKyAgICByZXR1
cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoYXNXcml0YWJsZUJ5dGVzKFNwYW4geyAm
ZGVzY3JpcHRpb24ubV9zdHJlYW1EZXNjcmlwdGlvbiwgMSB9KSwgMSk7CiB9CiAKIGlubGluZSBD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24gdG9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oY29uc3Qg
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Nb2RlbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL01vZGVsLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01vZGVsLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcg
KzU2LDcgQEAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgTW9kZWw6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8c2l6ZV90
PihtX2RhdGEtPnNpemUoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEobV9k
YXRhLT5kYXRhKCksIG1fZGF0YS0+c2l6ZSgpLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVk
TGVuZ3RoRGF0YShtX2RhdGEtPmJ5dGVzKCksIDEpOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgpAQCAtNzQsNyArNzQsNyBAQCBSZWZQdHI8TW9kZWw+IE1vZGVsOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjCiAKICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKICAgICBkYXRhLmdyb3coKmxlbmd0
aCk7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShkYXRhLmRhdGEoKSwg
ZGF0YS5zaXplKCksIDEpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEo
U3BhbiB7IGRhdGEgfSwgMSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJu
IE1vZGVsOjpjcmVhdGUoU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShkYXRhKSkpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhl
bEJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgUGl4ZWxCdWZmZXIKIAogICAgIGVuY29kZXIgPDwgbV9mb3JtYXQ7CiAg
ICAgZW5jb2RlciA8PCBtX3NpemU7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEo
bV9kYXRhLT5kYXRhKCksIG1fZGF0YS0+Ynl0ZUxlbmd0aCgpLCAxKTsKKyAgICBlbmNvZGVyLmVu
Y29kZUZpeGVkTGVuZ3RoRGF0YShtX2RhdGEtPmJ5dGVzKCksIDEpOwogfQogCiB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBQaXhlbEJ1ZmZlcjo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCkBAIC0xMTMsNyArMTEzLDcgQEAgdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4gc3RkOjpvcHRpb25hbDxQaQogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0
YShyZXN1bHQtPm1fZGF0YS0+ZGF0YSgpLCByZXN1bHQtPm1fZGF0YS0+Ynl0ZUxlbmd0aCgpLCAx
KSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlc3VsdC0+bV9kYXRh
LT53cml0YWJsZUJ5dGVzKCksIDEpKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAg
ICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2FwYWJp
bGl0aWVzLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMTE0LDE2ICsxMTQsMTYgQEAgcHJpdmF0ZToKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+
CiB2b2lkIENhcGFiaWxpdHlWYWx1ZU9yUmFuZ2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAogewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KCZtX21pbk9yVmFsdWUpLCBzaXplb2YoVmFsdWVVbmlvbiksIGFs
aWdub2YoVmFsdWVVbmlvbikpOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZtX21heCksIHNpemVvZihWYWx1ZVVuaW9u
KSwgYWxpZ25vZihWYWx1ZVVuaW9uKSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERh
dGEoYXNCeXRlcyhTcGFuIHsgJm1fbWluT3JWYWx1ZSwgMSB9KSwgYWxpZ25vZihWYWx1ZVVuaW9u
KSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYXNCeXRlcyhTcGFuIHsgJm1f
bWF4LCAxIH0pLCBhbGlnbm9mKFZhbHVlVW5pb24pKTsKICAgICBlbmNvZGVyIDw8IG1fdHlwZTsK
IH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KIGJvb2wgQ2FwYWJpbGl0eVZhbHVlT3JSYW5n
ZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIENhcGFiaWxpdHlWYWx1ZU9yUmFuZ2UmIHZhbHVl
T3JSYW5nZSkKIHsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnZhbHVlT3JSYW5nZS5tX21pbk9yVmFsdWUpLCBzaXpl
b2YoVmFsdWVVbmlvbiksIGFsaWdub2YoVmFsdWVVbmlvbikpCi0gICAgICAgICYmIGRlY29kZXIu
ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2YWx1ZU9y
UmFuZ2UubV9tYXgpLCBzaXplb2YoVmFsdWVVbmlvbiksIGFsaWdub2YoVmFsdWVVbmlvbikpCisg
ICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGFzV3JpdGFibGVCeXRlcyhT
cGFuIHsgJnZhbHVlT3JSYW5nZS5tX21pbk9yVmFsdWUsIDEgfSksIGFsaWdub2YoVmFsdWVVbmlv
bikpCisgICAgICAgICYmIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGFzV3JpdGFibGVC
eXRlcyhTcGFuIHsgJnZhbHVlT3JSYW5nZS5tX21heCwgMSB9KSwgYWxpZ25vZihWYWx1ZVVuaW9u
KSkKICAgICAgICAgJiYgZGVjb2Rlci5kZWNvZGUodmFsdWVPclJhbmdlLm1fdHlwZSk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFT
b3VyY2VDZW50ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDEzICsxMzksMTMgQEAgc3RhdGlj
IHZvaWQgYWRkU3RyaW5nVG9TSEExKFNIQTEmIHNoYTEsIAogCiAgICAgaWYgKHN0cmluZy5pczhC
aXQoKSAmJiBzdHJpbmcuaXNBbGxBU0NJSSgpKSB7CiAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbnVs
bEJ5dGUgPSAwOwotICAgICAgICBzaGExLmFkZEJ5dGVzKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBz
dHJpbmcubGVuZ3RoKCkpOwotICAgICAgICBzaGExLmFkZEJ5dGVzKCZudWxsQnl0ZSwgMSk7Cisg
ICAgICAgIHNoYTEuYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgc3RyaW5nLmNoYXJhY3RlcnM4KCks
IHN0cmluZy5sZW5ndGgoKSB9KSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoYXNCeXRlcyhTcGFu
IHsgJm51bGxCeXRlLCAxIH0pKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGF1dG8g
dXRmOCA9IHN0cmluZy51dGY4KCk7Ci0gICAgc2hhMS5hZGRCeXRlcyh1dGY4LmRhdGFBc1VJbnQ4
UHRyKCksIHV0ZjgubGVuZ3RoKCkgKyAxKTsgLy8gSW5jbHVkZSB0ZXJtaW5hdGluZyBudWxsIGJ5
dGUuCisgICAgc2hhMS5hZGRCeXRlcyhhc0J5dGVzKFNwYW4geyB1dGY4LmRhdGFBc1VJbnQ4UHRy
KCksIHV0ZjgubGVuZ3RoKCkgKyAxIH0pKTsgLy8gSW5jbHVkZSB0ZXJtaW5hdGluZyBudWxsIGJ5
dGUuCiB9CiAKIFN0cmluZyBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpoYXNoU3RyaW5nV2l0
aFNhbHQoY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgU3RyaW5nJiBoYXNoU2FsdCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ2VydGlmaWNhdGVJbmZvQ0ZOZXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ2VydGlm
aWNhdGVJbmZvQ0ZOZXQuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2NmL0NlcnRpZmljYXRlSW5mb0NGTmV0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjEwLDcgKzIxMCw3IEBAIHN0YXRpYyB2b2lkIGVuY29kZUNGRGF0YShFbmNvZGVyJiBl
bmNvZGUKICAgICBjb25zdCB1aW50OF90KiBieXRlUHRyID0gQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRh
KTsKIAogICAgIGVuY29kZXIgPDwgbGVuZ3RoOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKGJ5dGVQdHIsIHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSk7CisgICAgZW5jb2Rl
ci5lbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IGJ5dGVQdHIsIHN0YXRpY19jYXN0PHNpemVf
dD4obGVuZ3RoKSB9KTsKIH0KIAogc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0YWluUHRyPENGRGF0
YVJlZj4+IGRlY29kZUNGRGF0YShEZWNvZGVyJiBkZWNvZGVyKQpAQCAtMjI1LDcgKzIyNSw3IEBA
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldGFpblB0cjxDRkRhdGFSZWYKICAgICBpZiAoIXBvaW50
ZXIpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gYWRvcHRDRihD
RkRhdGFDcmVhdGUobnVsbHB0ciwgcG9pbnRlciwgKnNpemUpKTsKKyAgICByZXR1cm4gYWRvcHRD
RihDRkRhdGFDcmVhdGUobnVsbHB0ciwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4o
cG9pbnRlciksICpzaXplKSk7CiB9CiAKICNpZiBIQVZFKFNFQ19UUlVTVF9TRVJJQUxJWkFUSU9O
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVu
dC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9T
UUxpdGVTdGF0ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIGJvb2wg
U1FMaXRlU3RhdGVtZW50OjpleGVjdXRlQ29tbWFuZCgpCiAgICAgcmV0dXJuIHN0ZXAoKSA9PSBT
UUxJVEVfRE9ORTsKIH0KIAotaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IoaW50IGluZGV4
LCBTcGFuPGNvbnN0IHVpbnQ4X3Q+IGJsb2IpCitpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kQmxv
YihpbnQgaW5kZXgsIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBibG9iKQogewogICAgIEFTU0VSVChp
bmRleCA+IDApOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpIDw9IGJp
bmRQYXJhbWV0ZXJDb3VudCgpKTsKQEAgLTk1LDYgKzk1LDExIEBAIGludCBTUUxpdGVTdGF0ZW1l
bnQ6OmJpbmRCbG9iKGludCBpbmRleCwKICAgICByZXR1cm4gc3FsaXRlM19iaW5kX2Jsb2IobV9z
dGF0ZW1lbnQsIGluZGV4LCBibG9iLmRhdGEoKSwgYmxvYi5zaXplKCksIFNRTElURV9UUkFOU0lF
TlQpOwogfQogCitpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kQmxvYihpbnQgaW5kZXgsIFNwYW48
Y29uc3QgdWludDhfdD4gYmxvYikKK3sKKyAgICByZXR1cm4gYmluZEJsb2IoaW5kZXgsIGFzQnl0
ZXMoYmxvYikpOworfQorCiBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kQmxvYihpbnQgaW5kZXgs
IGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKICAgICAvLyBTdHJpbmc6OmNoYXJhY3RlcnMoKSByZXR1
cm5zIDAgZm9yIHRoZSBlbXB0eSBzdHJpbmcsIHdoaWNoIFNRTGl0ZQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaAkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB+
U1FMaXRlU3RhdGVtZW50KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgU1FMaXRlU3RhdGVtZW50KFNR
TGl0ZVN0YXRlbWVudCYmKTsKICAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCBpbnQgYmluZEJsb2Io
aW50IGluZGV4LCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwogICAgIFdFQkNPUkVfRVhQT1JUIGlu
dCBiaW5kQmxvYihpbnQgaW5kZXgsIFNwYW48Y29uc3QgdWludDhfdD4pOwogICAgIFdFQkNPUkVf
RVhQT1JUIGludCBiaW5kQmxvYihpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYpOwogICAgIFdFQkNP
UkVfRVhQT1JUIGludCBiaW5kVGV4dChpbnQgaW5kZXgsIFN0cmluZ1ZpZXcpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9S
ZWdpc3RyYXRpb25EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NTksMTAgKzQ1OSwxMCBAQCBib29sIFJlZ2lzdHJhdGlvbkRhdGFiYXNl
Ojpkb1B1c2hDaGFuZ2VzCiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0
KDYsIHVwZGF0ZVZpYUNhY2hlVG9TdHJpbmcoZGF0YS5yZWdpc3RyYXRpb24udXBkYXRlVmlhQ2Fj
aGUpKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRl
eHQoNywgZGF0YS5zY3JpcHRVUkwuc3RyaW5nKCkpICE9IFNRTElURV9PSwogICAgICAgICAgICAg
fHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCg4LCB3b3JrZXJUeXBlVG9TdHJpbmcoZGF0YS53
b3JrZXJUeXBlKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQt
PmJpbmRCbG9iKDksIFNwYW4geyBjc3BFbmNvZGVyLmJ1ZmZlcigpLCBjc3BFbmNvZGVyLmJ1ZmZl
clNpemUoKSB9KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+
YmluZEJsb2IoOSwgY3NwRW5jb2Rlci5idWZmZXIoKSkgIT0gU1FMSVRFX09LCiAgICAgICAgICAg
ICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDEwLCBkYXRhLnJlZmVycmVyUG9saWN5KSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoMTEs
IFNwYW4geyBzY3JpcHRSZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVyKCksIHNjcmlwdFJlc291cmNl
TWFwRW5jb2Rlci5idWZmZXJTaXplKCkgfSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBp
bnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDEyLCBTcGFuIHsgY2VydGlmaWNhdGVJbmZvRW5jb2Rl
ci5idWZmZXIoKSwgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXJTaXplKCkgfSkgIT0gU1FM
SVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDExLCBzY3Jp
cHRSZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVyKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAg
fHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kQmxvYigxMiwgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5i
dWZmZXIoKSkgIT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPnN0
ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU2Vy
dmljZVdvcmtlciwgIkZhaWxlZCB0byBzdG9yZSByZWdpc3RyYXRpb24gZGF0YSBpbnRvIHJlY29y
ZHMgdGFibGUgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2Ut
Pmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTUxNyw3ICs1
MTcsNyBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yCiAgICAgICAg
IHN0ZDo6b3B0aW9uYWw8Q29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzPiBjb250
ZW50U2VjdXJpdHlQb2xpY3k7CiAgICAgICAgIGF1dG8gY29udGVudFNlY3VyaXR5UG9saWN5RGF0
YVNwYW4gPSBzcWwtPmNvbHVtbkJsb2JBc1NwYW4oOCk7CiAgICAgICAgIGlmIChjb250ZW50U2Vj
dXJpdHlQb2xpY3lEYXRhU3Bhbi5zaXplKCkpIHsKLSAgICAgICAgICAgIFdURjo6UGVyc2lzdGVu
Y2U6OkRlY29kZXIgY3NwRGVjb2Rlcihjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhU3Bhbi5kYXRh
KCksIGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGFTcGFuLnNpemUoKSk7CisgICAgICAgICAgICBX
VEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGNzcERlY29kZXIgeyBjb250ZW50U2VjdXJpdHlQb2xp
Y3lEYXRhU3BhbiB9OwogICAgICAgICAgICAgY3NwRGVjb2RlciA+PiBjb250ZW50U2VjdXJpdHlQ
b2xpY3k7CiAgICAgICAgICAgICBpZiAoIWNvbnRlbnRTZWN1cml0eVBvbGljeSkgewogICAgICAg
ICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIsICJSZWdpc3RyYXRpb25E
YXRhYmFzZTo6aW1wb3J0UmVjb3JkczogRmFpbGVkIHRvIGRlY29kZSBjb250ZW50U2VjdXJpdHlQ
b2xpY3kiKTsKQEAgLTUzMCw3ICs1MzAsNyBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6
OmltcG9ydFJlY29yCiAgICAgICAgIEhhc2hNYXA8VVJMLCBTZXJ2aWNlV29ya2VyQ29udGV4dERh
dGE6OkltcG9ydGVkU2NyaXB0PiBzY3JpcHRSZXNvdXJjZU1hcDsKICAgICAgICAgYXV0byBzY3Jp
cHRSZXNvdXJjZU1hcERhdGFTcGFuID0gc3FsLT5jb2x1bW5CbG9iQXNTcGFuKDEwKTsKICAgICAg
ICAgaWYgKHNjcmlwdFJlc291cmNlTWFwRGF0YVNwYW4uc2l6ZSgpKSB7Ci0gICAgICAgICAgICBX
VEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIHNjcmlwdFJlc291cmNlTWFwRGVjb2RlcihzY3JpcHRS
ZXNvdXJjZU1hcERhdGFTcGFuLmRhdGEoKSwgc2NyaXB0UmVzb3VyY2VNYXBEYXRhU3Bhbi5zaXpl
KCkpOworICAgICAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBzY3JpcHRSZXNvdXJj
ZU1hcERlY29kZXIgeyBzY3JpcHRSZXNvdXJjZU1hcERhdGFTcGFuIH07CiAgICAgICAgICAgICBz
dGQ6Om9wdGlvbmFsPEhhc2hNYXA8VVJMLCBJbXBvcnRlZFNjcmlwdEF0dHJpYnV0ZXM+PiBzY3Jp
cHRSZXNvdXJjZU1hcFdpdGhvdXRTY3JpcHRzOwogICAgICAgICAgICAgc2NyaXB0UmVzb3VyY2VN
YXBEZWNvZGVyID4+IHNjcmlwdFJlc291cmNlTWFwV2l0aG91dFNjcmlwdHM7CiAgICAgICAgICAg
ICBpZiAoIXNjcmlwdFJlc291cmNlTWFwV2l0aG91dFNjcmlwdHMpIHsKQEAgLTU0Myw3ICs1NDMs
NyBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yCiAgICAgICAgIGF1
dG8gY2VydGlmaWNhdGVJbmZvRGF0YVNwYW4gPSBzcWwtPmNvbHVtbkJsb2JBc1NwYW4oMTEpOwog
ICAgICAgICBzdGQ6Om9wdGlvbmFsPENlcnRpZmljYXRlSW5mbz4gY2VydGlmaWNhdGVJbmZvOwog
Ci0gICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgY2VydGlmaWNhdGVJbmZvRGVjb2Rl
cihjZXJ0aWZpY2F0ZUluZm9EYXRhU3Bhbi5kYXRhKCksIGNlcnRpZmljYXRlSW5mb0RhdGFTcGFu
LnNpemUoKSk7CisgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgY2VydGlmaWNhdGVJ
bmZvRGVjb2RlciB7IGNlcnRpZmljYXRlSW5mb0RhdGFTcGFuIH07CiAgICAgICAgIGNlcnRpZmlj
YXRlSW5mb0RlY29kZXIgPj4gY2VydGlmaWNhdGVJbmZvOwogICAgICAgICBpZiAoIWNlcnRpZmlj
YXRlSW5mbykgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwg
IlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzOiBGYWlsZWQgdG8gZGVjb2RlIGNl
cnRpZmljYXRlSW5mbyIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3Nl
cnZlci9TV1NjcmlwdFN0b3JhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTY3JpcHRTdG9yYWdlLmNwcAkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NjcmlwdFN0b3Jh
Z2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw5ICs4Niw5IEBAIFNjcmlwdEJ1ZmZlciBTV1Nj
cmlwdFN0b3JhZ2U6OnN0b3JlKGNvbnMKICAgICBhdXRvIHNjcmlwdFBhdGggPSB0aGlzLT5zY3Jp
cHRQYXRoKHJlZ2lzdHJhdGlvbktleSwgc2NyaXB0VVJMKTsKICAgICBGaWxlU3lzdGVtOjptYWtl
QWxsRGlyZWN0b3JpZXMoRmlsZVN5c3RlbTo6cGFyZW50UGF0aChzY3JpcHRQYXRoKSk7CiAKLSAg
ICBhdXRvIGl0ZXJhdGVPdmVyQnVmZmVyQW5kV3JpdGVEYXRhID0gWyZdKGNvbnN0IEZ1bmN0aW9u
PGJvb2woY29uc3QgdWludDhfdCosIHNpemVfdCk+JiB3cml0ZURhdGEpIHsKLSAgICAgICAgZm9y
IChhdXRvIGl0ID0gc2NyaXB0LmJ1ZmZlcigpLT5iZWdpbigpOyBpdCAhPSBzY3JpcHQuYnVmZmVy
KCktPmVuZCgpOyArK2l0KQotICAgICAgICAgICAgd3JpdGVEYXRhKGl0LT5zZWdtZW50LT5kYXRh
KCksIGl0LT5zZWdtZW50LT5zaXplKCkpOworICAgIGF1dG8gaXRlcmF0ZU92ZXJCdWZmZXJBbmRX
cml0ZURhdGEgPSBbJl0oY29uc3QgRnVuY3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4p
PiYgd3JpdGVEYXRhKSB7CisgICAgICAgIGZvciAoYXV0byYgc2VnbWVudEVudHJ5IDogKnNjcmlw
dC5idWZmZXIoKSkKKyAgICAgICAgICAgIHdyaXRlRGF0YShzZWdtZW50RW50cnkuc2VnbWVudC0+
Ynl0ZXMoKSk7CiAgICAgfTsKIAogICAgIGlmICghc2hvdWxkVXNlRmlsZU1hcHBpbmcoc2NyaXB0
LmJ1ZmZlcigpLT5zaXplKCkpKSB7CkBAIC05Nyw4ICs5Nyw4IEBAIFNjcmlwdEJ1ZmZlciBTV1Nj
cmlwdFN0b3JhZ2U6OnN0b3JlKGNvbnMKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNl
cnZpY2VXb3JrZXIsICJTV1NjcmlwdFN0b3JhZ2U6OnN0b3JlOiBGYWlsdXJlIHRvIHN0b3JlICVz
LCBGaWxlU3lzdGVtOjpvcGVuRmlsZSgpIGZhaWxlZCIsIHNjcmlwdFBhdGgudXRmOCgpLmRhdGEo
KSk7CiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9Ci0gICAgICAgIGl0ZXJhdGVP
dmVyQnVmZmVyQW5kV3JpdGVEYXRhKFsmXShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6
ZSkgewotICAgICAgICAgICAgRmlsZVN5c3RlbTo6d3JpdGVUb0ZpbGUoaGFuZGxlLCBkYXRhLCBz
aXplKTsKKyAgICAgICAgaXRlcmF0ZU92ZXJCdWZmZXJBbmRXcml0ZURhdGEoWyZdKFNwYW48Y29u
c3Qgc3RkOjpieXRlPiBkYXRhKSB7CisgICAgICAgICAgICBGaWxlU3lzdGVtOjp3cml0ZVRvRmls
ZShoYW5kbGUsIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfSk7CiAgICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShoYW5kbGUp
OwpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODEgQEAKKzIwMjEtMDYtMTEgIFNhbSBXZWlu
aWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIEFkb3B0IFNwYW4gaW4gbW9yZSBwbGFj
ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjg4
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtXSVBd
CisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNo
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OmVuY29kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OmRlY29kZVJlY29yZEhlYWRlcik6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVz
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnN0b3JlT3JpZ2lu
KToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnJlYWRPcmlnaW4pOgor
ICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OmVuY29kZUNhY2hlTmFtZXMpOgorICAgICAg
ICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OmRlY29kZUNhY2hlc05hbWVzKToKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhY2hlOjpEYXRhOjptYXBUb0ZpbGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrQ2FjaGU6OmNvbXB1dGVTSEExKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmg6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
RGF0YTo6RGF0YSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
RGF0YUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6OmFwcGx5
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhOjphZG9wdE1hcCk6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVudHJ5OjplbmNvZGVBc1N0b3JhZ2VSZWNv
cmQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVudHJ5OjpkZWNvZGVT
dG9yYWdlUmVjb3JkKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVLZXkuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6Omhhc2hTdHJpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OktleTo6Y29tcHV0ZUhhc2ggY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OktleTo6Y29tcHV0ZVBhcnRpdGlvbkhhc2gg
Y29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3Jh
Z2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmRlY29kZVJlY29yZE1ldGFE
YXRhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjplbmNvZGVSZWNvcmRNZXRhRGF0
YSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3Vy
Y2VzRW50cnkuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN1YnJlc291cmNl
c0VudHJ5OjplbmNvZGVBc1N0b3JhZ2VSZWNvcmQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FjaGU6OlN1YnJlc291cmNlc0VudHJ5OjpkZWNvZGVTdG9yYWdlUmVjb3JkKToKKyAg
ICAgICAgKiBQbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2Rlci5oOgorICAgICAgICAqIFBsYXRmb3Jt
L0lQQy9Bcmd1bWVudENvZGVycy5jcHA6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8Q1N0
cmluZz46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8Q1N0cmluZz46OmRl
Y29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8U3RyaW5nPjo6ZW5jb2RlKToKKyAg
ICAgICAgKElQQzo6ZGVjb2RlU3RyaW5nVGV4dCk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29k
ZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxT
SEExOjpEaWdlc3Q+OjpkZWNvZGUpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Bcmd1bWVudENv
ZGVycy5oOgorICAgICAgICAoSVBDOjpTaW1wbGVBcmd1bWVudENvZGVyOjplbmNvZGUpOgorICAg
ICAgICAoSVBDOjpTaW1wbGVBcmd1bWVudENvZGVyOjpkZWNvZGUpOgorICAgICAgICAqIFBsYXRm
b3JtL0lQQy9BcnJheVJlZmVyZW5jZS5oOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9EZWNvZGVy
LmNwcDoKKyAgICAgICAgKElQQzo6RGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKToKKyAg
ICAgICAgKiBQbGF0Zm9ybS9JUEMvRGVjb2Rlci5oOgorICAgICAgICAoSVBDOjpEZWNvZGVyOjpk
ZWNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9FbmNvZGVyLmNw
cDoKKyAgICAgICAgKElQQzo6RW5jb2Rlcjo6ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKToKKyAgICAg
ICAgKiBQbGF0Zm9ybS9JUEMvRW5jb2Rlci5oOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9TaGFy
ZWRCdWZmZXJDb3B5LmNwcDoKKyAgICAgICAgKElQQzo6U2hhcmVkQnVmZmVyQ29weTo6ZW5jb2Rl
IGNvbnN0KToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlvbkVuY29kZXIu
aDoKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAg
KElQQzo6ZW5jb2RlU2hhcmVkQnVmZmVyKToKKyAgICAgICAgKElQQzo6ZGVjb2RlU2hhcmVkQnVm
ZmVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNw
cDoKKyAgICAgICAgKEFQSTo6ZW5jb2RlQ29udGVudFJ1bGVMaXN0TWV0YURhdGEpOgorICAgICAg
ICAoQVBJOjpnZXREYXRhKToKKyAgICAgICAgKEFQSTo6ZGVjb2RlQ29udGVudFJ1bGVMaXN0TWV0
YURhdGEpOgorICAgICAgICAoQVBJOjp3cml0ZURhdGFUb0ZpbGUpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9tYWMvTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
SGlzdG9yeUVudHJ5RGF0YUVuY29kZXI6Om9wZXJhdG9yPDwpOgorICAgICAgICAoV2ViS2l0OjpI
aXN0b3J5RW50cnlEYXRhRW5jb2Rlcjo6ZW5jb2RlQXJpdGhtZXRpY1R5cGUpOgorICAgICAgICAo
V2ViS2l0OjpIaXN0b3J5RW50cnlEYXRhRW5jb2Rlcjo6ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKToK
KyAgICAgICAgKFdlYktpdDo6SGlzdG9yeUVudHJ5RGF0YURlY29kZXI6Om9wZXJhdG9yPj4pOgor
ICAgICAgICAoV2ViS2l0OjpIaXN0b3J5RW50cnlEYXRhRGVjb2Rlcjo6ZGVjb2RlQXJpdGhtZXRp
Y1R5cGUpOgorICAgICAgICAoV2ViS2l0OjpIaXN0b3J5RW50cnlEYXRhRGVjb2Rlcjo6ZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGlu
Z0FQSS5jcHA6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OmVuY29kZVR5cGVkQXJy
YXkpOgorCiAyMDIxLTA2LTExICBSeWFuIEhhZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUuY29tPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyByMjc4NzU0LgpJbmRleDogU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3Jh
Z2VFbmdpbmVDYWNoZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NjUsNyArNTY1LDcgQEAgU3RvcmFnZTo6UmVjb3JkIENhY2hlOjplbmNvZGUoY29u
c3QgUmVjbwogCiAgICAgZW5jb2Rlci5lbmNvZGVDaGVja3N1bSgpOwogCi0gICAgRGF0YSBoZWFk
ZXIoZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOworICAgIERhdGEgaGVh
ZGVyKGVuY29kZXIuYnVmZmVyKCkpOwogICAgIERhdGEgYm9keTsKICAgICBXVEY6OnN3aXRjaE9u
KHJlY29yZC5yZXNwb25zZUJvZHksIFtdKGNvbnN0IFJlZjxXZWJDb3JlOjpGb3JtRGF0YT4mIGZv
cm1EYXRhKSB7CiAgICAgICAgIC8vIEZJWE1FOiBTdG9yZSBmb3JtIGRhdGEgYm9keS4KQEAgLTYz
MCw3ICs2MzAsNyBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpET01DYWNoZUVuCiAK
IHN0ZDo6b3B0aW9uYWw8Q2FjaGU6OkRlY29kZWRSZWNvcmQ+IENhY2hlOjpkZWNvZGVSZWNvcmRI
ZWFkZXIoY29uc3QgU3RvcmFnZTo6UmVjb3JkJiBzdG9yYWdlKQogewotICAgIFdURjo6UGVyc2lz
dGVuY2U6OkRlY29kZXIgZGVjb2RlcihzdG9yYWdlLmhlYWRlci5kYXRhKCksIHN0b3JhZ2UuaGVh
ZGVyLnNpemUoKSk7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKHN0b3Jh
Z2UuaGVhZGVyKTsKIAogICAgIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBpbnNlcnRpb25UaW1lOwog
ICAgIGRlY29kZXIgPj4gaW5zZXJ0aW9uVGltZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNh
Y2hlcy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA1LDE0ICsxMDUsMTQgQEAgdm9pZCBDYWNoZXM6OnN0b3JlT3JpZ2luKENvbXBsZXRpb25DYWxs
YgogICAgIGVuY29kZXIgPDwgbV9vcmlnaW4uY2xpZW50T3JpZ2luLnByb3RvY29sOwogICAgIGVu
Y29kZXIgPDwgbV9vcmlnaW4uY2xpZW50T3JpZ2luLmhvc3Q7CiAgICAgZW5jb2RlciA8PCBtX29y
aWdpbi5jbGllbnRPcmlnaW4ucG9ydDsKLSAgICBtX2VuZ2luZS0+d3JpdGVGaWxlKGNhY2hlc09y
aWdpbkZpbGVuYW1lKG1fcm9vdFBhdGgpLCBEYXRhIHsgZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rl
ci5idWZmZXJTaXplKCkgfSwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKHN0ZDo6b3B0aW9uYWw8
RXJyb3I+JiYgZXJyb3IpIG11dGFibGUgeworICAgIG1fZW5naW5lLT53cml0ZUZpbGUoY2FjaGVz
T3JpZ2luRmlsZW5hbWUobV9yb290UGF0aCksIERhdGEgeyBlbmNvZGVyLmJ1ZmZlcigpIH0sIFtw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildIChzdGQ6Om9wdGlvbmFsPEVycm9yPiYmIGVycm9yKSBtdXRh
YmxlIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShlcnJvcikpOwogICAgIH0p
OwogfQogCiBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gQ2FjaGVzOjpyZWFk
T3JpZ2luKGNvbnN0IERhdGEmIGRhdGEpCiB7Ci0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2Rl
ciBkZWNvZGVyKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgV1RGOjpQZXJzaXN0ZW5j
ZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEpOwogCiAgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpT
ZWN1cml0eU9yaWdpbkRhdGE+IHRvcE9yaWdpbjsKICAgICBkZWNvZGVyID4+IHRvcE9yaWdpbjsK
QEAgLTQwNCwxMiArNDA0LDEyIEBAIHN0YXRpYyBpbmxpbmUgRGF0YSBlbmNvZGVDYWNoZU5hbWVz
KGNvbnMKICAgICAgICAgZW5jb2RlciA8PCBjYWNoZS51bmlxdWVOYW1lKCk7CiAgICAgfQogCi0g
ICAgcmV0dXJuIERhdGEgeyBlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSB9
OworICAgIHJldHVybiBEYXRhIHsgZW5jb2Rlci5idWZmZXIoKSB9OwogfQogCiBzdGF0aWMgaW5s
aW5lIEV4cGVjdGVkPFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiwgRXJyb3I+IGRl
Y29kZUNhY2hlc05hbWVzKGNvbnN0IERhdGEmIGRhdGEpCiB7Ci0gICAgV1RGOjpQZXJzaXN0ZW5j
ZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgV1RGOjpQ
ZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEpOwogICAgIHN0ZDo6b3B0aW9uYWw8dWlu
dDY0X3Q+IGNvdW50OwogICAgIGRlY29kZXIgPj4gY291bnQ7CiAgICAgaWYgKCFjb3VudCkKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVEYXRhLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDIsNyArNDIsNyBAQCBuYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIERhdGEgRGF0YTo6bWFwVG9G
aWxlKGNvbnN0IFN0cmluZyYgcGF0aCkgY29uc3QKIHsKICAgICBGaWxlU3lzdGVtOjpQbGF0Zm9y
bUZpbGVIYW5kbGUgaGFuZGxlOwotICAgIGF1dG8gYXBwbHlEYXRhID0gWyZdKGNvbnN0IEZ1bmN0
aW9uPGJvb2woY29uc3QgdWludDhfdCosIHNpemVfdCk+JiBhcHBsaWVyKSB7IGFwcGx5KGFwcGxp
ZXIpOyB9OworICAgIGF1dG8gYXBwbHlEYXRhID0gWyZdKGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bh
bjxjb25zdCBzdGQ6OmJ5dGU+KT4mIGFwcGxpZXIpIHsgYXBwbHkoYXBwbGllcik7IH07CiAgICAg
YXV0byBtYXBwZWRGaWxlID0gRmlsZVN5c3RlbTo6bWFwVG9GaWxlKHBhdGgsIHNpemUoKSwgV1RG
TW92ZShhcHBseURhdGEpLCAmaGFuZGxlKTsKICAgICBpZiAoIW1hcHBlZEZpbGUpCiAgICAgICAg
IHJldHVybiB7IH07CkBAIC04Niw5ICs4Niw5IEBAIERhdGEgYWRvcHRBbmRNYXBGaWxlKEZpbGVT
eXN0ZW06OlBsYXRmb3IKIFNIQTE6OkRpZ2VzdCBjb21wdXRlU0hBMShjb25zdCBEYXRhJiBkYXRh
LCBjb25zdCBTYWx0JiBzYWx0KQogewogICAgIFNIQTEgc2hhMTsKLSAgICBzaGExLmFkZEJ5dGVz
KHNhbHQuZGF0YSgpLCBzYWx0LnNpemUoKSk7Ci0gICAgZGF0YS5hcHBseShbJnNoYTFdKGNvbnN0
IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMoZGF0
YSwgc2l6ZSk7CisgICAgc2hhMS5hZGRCeXRlcyhhc0J5dGVzKFNwYW4geyBzYWx0IH0pKTsKKyAg
ICBkYXRhLmFwcGx5KFsmc2hhMV0oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpIHsKKyAgICAg
ICAgc2hhMS5hZGRCeXRlcyhkYXRhKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSk7CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0
YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlRGF0YS5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NiArMjgsNyBAQAogI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CiAjaW5jbHVkZSA8d3RmL0Z1
bmN0aW9uRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPHd0Zi9TSEExLmg+CisjaW5jbHVkZSA8d3Rm
L1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNTQsNiArNTUsMTAgQEAgY2xhc3MgRGF0YSB7
CiBwdWJsaWM6CiAgICAgRGF0YSgpIHsgfQogICAgIERhdGEoY29uc3QgdWludDhfdCosIHNpemVf
dCk7CisgICAgRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKKyAgICAgICAgOiBEYXRh
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuZGF0YSgpKSwgZGF0YS5zaXpl
KCkpCisgICAgeworICAgIH0KIAogICAgIH5EYXRhKCkgeyB9CiAKQEAgLTc5LDcgKzg0LDcgQEAg
cHVibGljOgogCiAgICAgRGF0YSBzdWJyYW5nZShzaXplX3Qgb2Zmc2V0LCBzaXplX3QpIGNvbnN0
OwogCi0gICAgYm9vbCBhcHBseShjb25zdCBGdW5jdGlvbjxib29sIChjb25zdCB1aW50OF90Kiwg
c2l6ZV90KT4mKSBjb25zdDsKKyAgICBib29sIGFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2wgKFNw
YW48Y29uc3Qgc3RkOjpieXRlPik+JikgY29uc3Q7CiAKICAgICBEYXRhIG1hcFRvRmlsZShjb25z
dCBTdHJpbmcmIHBhdGgpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVEYXRhQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTY5LDEyICs2OSwxMiBAQCBi
b29sIERhdGE6OmlzTnVsbCgpIGNvbnN0CiAgICAgcmV0dXJuICFtX2Rpc3BhdGNoRGF0YTsKIH0K
IAotYm9vbCBEYXRhOjphcHBseShjb25zdCBGdW5jdGlvbjxib29sIChjb25zdCB1aW50OF90Kiwg
c2l6ZV90KT4mIGFwcGxpZXIpIGNvbnN0Citib29sIERhdGE6OmFwcGx5KGNvbnN0IEZ1bmN0aW9u
PGJvb2wgKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+JiBhcHBsaWVyKSBjb25zdAogewogICAgIGlm
ICghbV9zaXplKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIGRpc3BhdGNoX2Rh
dGFfYXBwbHkobV9kaXNwYXRjaERhdGEuZ2V0KCksIFsmYXBwbGllcl0oZGlzcGF0Y2hfZGF0YV90
LCBzaXplX3QsIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gICAgICAgIHJldHVy
biBhcHBsaWVyKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgc2l6ZSk7CisgICAg
ICAgIHJldHVybiBhcHBsaWVyKFNwYW4geyBzdGF0aWNfY2FzdDxjb25zdCBzdGQ6OmJ5dGUqPihk
YXRhKSwgc2l6ZSB9KTsKICAgICB9KTsKIH0KIApAQCAtOTQsMTQgKzk0LDExIEBAIERhdGEgY29u
Y2F0ZW5hdGUoY29uc3QgRGF0YSYgYSwgY29uc3QgRGEKIAogRGF0YSBEYXRhOjphZG9wdE1hcChG
aWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIG1hcHBlZEZpbGUsIEZpbGVTeXN0ZW06OlBsYXRm
b3JtRmlsZUhhbmRsZSBmZCkKIHsKLSAgICBzaXplX3Qgc2l6ZSA9IG1hcHBlZEZpbGUuc2l6ZSgp
OwotICAgIHZvaWQqIG1hcCA9IG1hcHBlZEZpbGUubGVha0hhbmRsZSgpOwotICAgIEFTU0VSVCht
YXApOwotICAgIEFTU0VSVChtYXAgIT0gTUFQX0ZBSUxFRCk7CisgICAgYXV0byBtYXAgPSBtYXBw
ZWRGaWxlLmxlYWtIYW5kbGUoKTsKKyAgICBBU1NFUlQobWFwLmRhdGEoKSk7CisgICAgQVNTRVJU
KG1hcC5kYXRhKCkgIT0gTUFQX0ZBSUxFRCk7CiAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGZk
KTsKLSAgICBhdXRvIGJvZHlNYXAgPSBhZG9wdE9TT2JqZWN0KGRpc3BhdGNoX2RhdGFfY3JlYXRl
KG1hcCwgc2l6ZSwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklP
UklUWV9ERUZBVUxULCAwKSwgW21hcCwgc2l6ZV0gewotICAgICAgICBtdW5tYXAobWFwLCBzaXpl
KTsKLSAgICB9KSk7CisgICAgYXV0byBib2R5TWFwID0gYWRvcHRPU09iamVjdChkaXNwYXRjaF9k
YXRhX2NyZWF0ZShtYXAuZGF0YSgpLCBtYXAuc2l6ZSgpLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1
ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCBESVNQQVRDSF9EQVRBX0RF
U1RSVUNUT1JfTVVOTUFQKSk7CiAgICAgcmV0dXJuIHsgV1RGTW92ZShib2R5TWFwKSwgRGF0YTo6
QmFja2luZzo6TWFwIH07CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVu
dHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksMTAgKzk5LDEwIEBAIFN0b3JhZ2U6OlJlY29y
ZCBFbnRyeTo6ZW5jb2RlQXNTdG9yYWdlUmUKICAgICAKICAgICBlbmNvZGVyLmVuY29kZUNoZWNr
c3VtKCk7CiAKLSAgICBEYXRhIGhlYWRlcihlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZl
clNpemUoKSk7CisgICAgRGF0YSBoZWFkZXIgeyBlbmNvZGVyLmJ1ZmZlcigpIH07CiAgICAgRGF0
YSBib2R5OwogICAgIGlmIChtX2J1ZmZlcikKLSAgICAgICAgYm9keSA9IHsgbV9idWZmZXItPmRh
dGEoKSwgbV9idWZmZXItPnNpemUoKSB9OworICAgICAgICBib2R5ID0geyBtX2J1ZmZlci0+Ynl0
ZXMoKSB9OwogCiAgICAgcmV0dXJuIHsgbV9rZXksIG1fdGltZVN0YW1wLCBoZWFkZXIsIGJvZHks
IHsgfSB9OwogfQpAQCAtMTExLDcgKzExMSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gRW50
cnk6OmRlY29kZVN0b3IKIHsKICAgICBhdXRvIGVudHJ5ID0gbWFrZVVuaXF1ZTxFbnRyeT4oc3Rv
cmFnZUVudHJ5KTsKIAotICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihzdG9y
YWdlRW50cnkuaGVhZGVyLmRhdGEoKSwgc3RvcmFnZUVudHJ5LmhlYWRlci5zaXplKCkpOworICAg
IFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlciB7IHN0b3JhZ2VFbnRyeS5oZWFkZXIg
fTsKICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwogICAgIGlmICghV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZTo6ZGVjb2RlKGRlY29kZXIsIHJlc3BvbnNlKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZUtleS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg4LDEzICs4OCwxMyBAQCBzdGF0aWMgdm9pZCBoYXNoU3RyaW5n
KFNIQTEmIHNoYTEsIGNvbnN0CiAKICAgICBpZiAoc3RyaW5nLmlzOEJpdCgpICYmIHN0cmluZy5p
c0FsbEFTQ0lJKCkpIHsKICAgICAgICAgY29uc3QgdWludDhfdCBudWxsQnl0ZSA9IDA7Ci0gICAg
ICAgIHNoYTEuYWRkQnl0ZXMoc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSk7
Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMoJm51bGxCeXRlLCAxKTsKKyAgICAgICAgc2hhMS5hZGRC
eXRlcyhhc0J5dGVzKFNwYW4geyBzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgp
IH0pKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhhc0J5dGVzKFNwYW4geyAmbnVsbEJ5dGUsIDEg
fSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8gY1N0cmluZyA9IHN0cmluZy51
dGY4KCk7CiAgICAgLy8gSW5jbHVkZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUuCi0gICAgc2hhMS5h
ZGRCeXRlcyhjU3RyaW5nLmRhdGFBc1VJbnQ4UHRyKCksIGNTdHJpbmcubGVuZ3RoKCkgKyAxKTsK
KyAgICBzaGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7IGNTdHJpbmcuZGF0YUFzVUludDhQdHIo
KSwgY1N0cmluZy5sZW5ndGgoKSArIDEgfSkpOwogfQogCiBLZXk6Okhhc2hUeXBlIEtleTo6Y29t
cHV0ZUhhc2goY29uc3QgU2FsdCYgc2FsdCkgY29uc3QKQEAgLTEwMiw3ICsxMDIsNyBAQCBLZXk6
Okhhc2hUeXBlIEtleTo6Y29tcHV0ZUhhc2goY29uc3QgU2FsCiAgICAgLy8gV2UgZG9uJ3QgcmVh
bGx5IG5lZWQgYSBjcnlwdG9ncmFwaGljIGhhc2guIFRoZSBrZXkgaXMgYWx3YXlzIHZlcmlmaWVk
IGFnYWluc3QgdGhlIGVudHJ5IGhlYWRlci4KICAgICAvLyBTSEExIGp1c3QgaGFwcGVucyB0byBi
ZSBzdWl0YWJseSBzaXplZCwgZmFzdCBhbmQgYXZhaWxhYmxlLgogICAgIFNIQTEgc2hhMTsKLSAg
ICBzaGExLmFkZEJ5dGVzKHNhbHQuZGF0YSgpLCBzYWx0LnNpemUoKSk7CisgICAgc2hhMS5hZGRC
eXRlcyhhc0J5dGVzKFNwYW4geyBzYWx0IH0pKTsKIAogICAgIGhhc2hTdHJpbmcoc2hhMSwgbV9w
YXJ0aXRpb24pOwogICAgIGhhc2hTdHJpbmcoc2hhMSwgbV90eXBlKTsKQEAgLTExNyw3ICsxMTcs
NyBAQCBLZXk6Okhhc2hUeXBlIEtleTo6Y29tcHV0ZUhhc2goY29uc3QgU2FsCiBLZXk6Okhhc2hU
eXBlIEtleTo6Y29tcHV0ZVBhcnRpdGlvbkhhc2goY29uc3QgU2FsdCYgc2FsdCkgY29uc3QKIHsK
ICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhzYWx0LmRhdGEoKSwgc2FsdC5zaXpl
KCkpOworICAgIHNoYTEuYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgc2FsdCB9KSk7CiAKICAgICBo
YXNoU3RyaW5nKHNoYTEsIG1fcGFydGl0aW9uKTsKIApJbmRleDogU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTQsOCArNDU0LDgg
QEAgc3RydWN0IFJlY29yZE1ldGFEYXRhIHsKIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9v
bCBkZWNvZGVSZWNvcmRNZXRhRGF0YShSZWNvcmRNZXRhRGF0YSYgbWV0YURhdGEsIGNvbnN0IERh
dGEmIGZpbGVEYXRhKQogewogICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIGZpbGVEYXRh
LmFwcGx5KFsmbWV0YURhdGEsICZzdWNjZXNzXShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qg
c2l6ZSkgewotICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YSwg
c2l6ZSk7CisgICAgZmlsZURhdGEuYXBwbHkoWyZtZXRhRGF0YSwgJnN1Y2Nlc3NdKFNwYW48Y29u
c3Qgc3RkOjpieXRlPiBkYXRhKSB7CisgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIg
ZGVjb2RlcihkYXRhKTsKICAgICAgICAgCiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
IGNhY2hlU3RvcmFnZVZlcnNpb247CiAgICAgICAgIGRlY29kZXIgPj4gY2FjaGVTdG9yYWdlVmVy
c2lvbjsKQEAgLTU4Niw3ICs1ODYsNyBAQCBzdGF0aWMgRGF0YSBlbmNvZGVSZWNvcmRNZXRhRGF0
YShjb25zdCBSCiAKICAgICBlbmNvZGVyLmVuY29kZUNoZWNrc3VtKCk7CiAKLSAgICByZXR1cm4g
RGF0YShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgcmV0dXJu
IHsgZW5jb2Rlci5idWZmZXIoKSB9OwogfQogCiBzdGQ6Om9wdGlvbmFsPEJsb2JTdG9yYWdlOjpC
bG9iPiBTdG9yYWdlOjpzdG9yZUJvZHlBc0Jsb2IoV3JpdGVPcGVyYXRpb24mIHdyaXRlT3BlcmF0
aW9uKQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVTdWJyZXNvdXJjZXNFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsMTQgKzEy
MywxNCBAQCBTdG9yYWdlOjpSZWNvcmQgU3VicmVzb3VyY2VzRW50cnk6OmVuY29kCiAKICAgICBl
bmNvZGVyLmVuY29kZUNoZWNrc3VtKCk7CiAKLSAgICByZXR1cm4geyBtX2tleSwgbV90aW1lU3Rh
bXAsIHsgZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkgfSwgeyB9LCB7IH19
OworICAgIHJldHVybiB7IG1fa2V5LCBtX3RpbWVTdGFtcCwgeyBlbmNvZGVyLmJ1ZmZlcigpIH0s
IHsgfSwgeyB9fTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPFN1YnJlc291cmNlc0VudHJ5PiBTdWJy
ZXNvdXJjZXNFbnRyeTo6ZGVjb2RlU3RvcmFnZVJlY29yZChjb25zdCBTdG9yYWdlOjpSZWNvcmQm
IHN0b3JhZ2VFbnRyeSkKIHsKICAgICBhdXRvIGVudHJ5ID0gbWFrZVVuaXF1ZTxTdWJyZXNvdXJj
ZXNFbnRyeT4oc3RvcmFnZUVudHJ5KTsKIAotICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIg
ZGVjb2RlcihzdG9yYWdlRW50cnkuaGVhZGVyLmRhdGEoKSwgc3RvcmFnZUVudHJ5LmhlYWRlci5z
aXplKCkpOworICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlciB7IHN0b3JhZ2VF
bnRyeS5oZWFkZXIgfTsKICAgICBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxTdWJyZXNvdXJjZUluZm8+
PiBzdWJyZXNvdXJjZXM7CiAgICAgZGVjb2RlciA+PiBzdWJyZXNvdXJjZXM7CiAgICAgaWYgKCFz
dWJyZXNvdXJjZXMpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENv
ZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRD
b2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9B
cmd1bWVudENvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDEzICs3OSwxMyBAQCBzdHJ1Y3Qg
QXJndW1lbnRDb2RlcjxULCB0eXBlbmFtZSBzdGQ6OmVuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RW5jb2Rlcj4KICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgVCB2YWx1
ZSkKICAgICB7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZ2YWx1ZSksIHNpemVvZihUKSwgYWxpZ25vZihUKSk7
CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGFzQnl0ZXMoU3BhbiB7ICZ2
YWx1ZSwgMSB9KSwgYWxpZ25vZihUKSk7CiAgICAgfQogCiAgICAgc3RhdGljIHN0ZDo6b3B0aW9u
YWw8VD4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewogICAgICAgICBUIHJlc3VsdDsK
LSAgICAgICAgaWYgKGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDhfdCo+KCZyZXN1bHQpLCBzaXplb2YoVCksIGFsaWdub2YoVCkpKQorICAgICAgICBp
ZiAoZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZyZXN1bHQsIDEgfSkpCiAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owog
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVy
cy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Fy
Z3VtZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCB2b2lkIEFy
Z3VtZW50Q29kZXI8Q1N0cmluZz46OmVuY29kZShFbmNvCiAKICAgICB1aW50MzJfdCBsZW5ndGgg
PSBzdHJpbmcubGVuZ3RoKCk7CiAgICAgZW5jb2RlciA8PCBsZW5ndGg7Ci0gICAgZW5jb2Rlci5l
bmNvZGVGaXhlZExlbmd0aERhdGEoc3RyaW5nLmRhdGFBc1VJbnQ4UHRyKCksIGxlbmd0aCwgMSk7
CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RyaW5nLmJ5dGVzKCksIDEpOwog
fQogCiBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBBcmd1bWVudENvZGVyPENTdHJpbmc+OjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlciwgQ1N0cmluZyYgcmVzdWx0KQpAQCAtMTAzLDcgKzEwMyw3IEBA
IFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIEFyZ3VtZW50Q29kZXI8Q1MKIAogICAgIGNoYXIqIGJ1
ZmZlcjsKICAgICBDU3RyaW5nIHN0cmluZyA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQobGVu
Z3RoLCBidWZmZXIpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoLCAxKSkKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGFzV3JpdGFibGVCeXRlcyhTcGFuIHsgYnVmZmVy
LCBsZW5ndGggfSksIDEpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXN1bHQgPSBz
dHJpbmc7CkBAIC0xMjUsOSArMTI1LDkgQEAgdm9pZCBBcmd1bWVudENvZGVyPFN0cmluZz46OmVu
Y29kZShFbmNvZAogICAgIGVuY29kZXIgPDwgbGVuZ3RoIDw8IGlzOEJpdDsKIAogICAgIGlmIChp
czhCaXQpCi0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0cmluZy5jaGFy
YWN0ZXJzOCgpLCBsZW5ndGggKiBzaXplb2YoTENoYXIpLCBhbGlnbm9mKExDaGFyKSk7CisgICAg
ICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGFzQnl0ZXMoU3BhbiB7IHN0cmluZy5j
aGFyYWN0ZXJzOCgpLCBsZW5ndGggfSksIGFsaWdub2YoTENoYXIpKTsKICAgICBlbHNlCi0gICAg
ICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KHN0cmluZy5jaGFyYWN0ZXJzMTYoKSksIGxlbmd0aCAqIHNpemVvZihVQ2hhciks
IGFsaWdub2YoVUNoYXIpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEo
YXNCeXRlcyhTcGFuIHsgc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBsZW5ndGggfSksIGFsaWdub2Yo
VUNoYXIpKTsKIH0KIHRlbXBsYXRlCiB2b2lkIEFyZ3VtZW50Q29kZXI8U3RyaW5nPjo6ZW5jb2Rl
PEVuY29kZXI+KEVuY29kZXImLCBjb25zdCBTdHJpbmcmKTsKQEAgLTE0Myw3ICsxNDMsNyBAQCBz
dGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBkZWNvCiAgICAgCiAgICAgQ2hhcmFj
dGVyVHlwZSogYnVmZmVyOwogICAgIFN0cmluZyBzdHJpbmcgPSBTdHJpbmc6OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExl
bmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6
ZW9mKENoYXJhY3RlclR5cGUpLCBhbGlnbm9mKENoYXJhY3RlclR5cGUpKSkKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBidWZmZXIsIGxlbmd0aCB9KSkKICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAKICAgICByZXR1cm4gc3RyaW5nOwpAQCAt
MTgxLDEyICsxODEsMTIgQEAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgQXJndW1lbnRDb2RlcjxT
dAogCiB2b2lkIEFyZ3VtZW50Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQogewotICAgIGVuY29kZXIuZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpLCAxKTsKKyAgICBl
bmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgZGlnZXN0IH0sIDEpOwogfQogCiBX
QVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBBcmd1bWVudENvZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyLCBTSEExOjpEaWdlc3QmIGRpZ2VzdCkKIHsKLSAgICByZXR1cm4g
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0LmRhdGEoKSwgc2l6ZW9mKGRpZ2Vz
dCksIDEpOworICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsg
ZGlnZXN0IH0sIDEpOwogfQogCiAjaWYgSEFWRShBVURJVF9UT0tFTikKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaAkod29ya2luZyBj
b3B5KQpAQCAtNDUsMTIgKzQ1LDEyIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBTaW1w
bGVBcmd1bWUKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgogICAgIHN0YXRpYyB2b2lk
IGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBUJiB0KQogICAgIHsKLSAgICAgICAgZW5j
b2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oJnQpLCBzaXplb2YoVCksIGFsaWdub2YoVCkpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZp
eGVkTGVuZ3RoRGF0YShTcGFuIHsgJnQsIDEgfSk7CiAgICAgfQogCiAgICAgc3RhdGljIFdBUk5f
VU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBUJiB0KQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KCZ0KSwgc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKKyAgICAgICAgcmV0
dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmdCwgMSB9KTsKICAgICB9
CiB9OwogCkBAIC02MSwxMyArNjEsMTQgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IEV4
dGVudD4gc3RydQogICAgIHsKICAgICAgICAgaWYgKCFFeHRlbnQpCiAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KGFycmF5UmVmZXJlbmNlLmRhdGEoKSksIGFycmF5UmVmZXJlbmNl
LnNpemUoKSAqIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKFNwYW4geyBhcnJheVJlZmVyZW5jZS5kYXRhKCksIGFycmF5UmVmZXJl
bmNlLnNpemUoKSB9KTsKICAgICB9CiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8QXJyYXlSZWZl
cmVuY2VUeXBlPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7CiAgICAgICAgIGlmICgh
RXh0ZW50KQogICAgICAgICAgICAgcmV0dXJuIEFycmF5UmVmZXJlbmNlVHlwZSgpOwotICAgICAg
ICBjb25zdCB1aW50OF90KiBkYXRhID0gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aFJlZmVyZW5j
ZShFeHRlbnQgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpOworCisgICAgICAgIGNvbnN0IGF1dG8q
IGRhdGEgPSBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoUmVmZXJlbmNlKEV4dGVudCAqIHNpemVv
ZihUKSwgYWxpZ25vZihUKSk7CiAgICAgICAgIGlmICghZGF0YSkKICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIHJldHVybiBBcnJheVJlZmVyZW5jZVR5cGUocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBUKj4oZGF0YSksIEV4dGVudCk7CkBAIC04Miw3ICs4Myw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBBcmd1bWVudENvZGUKICAgICAgICAgZW5jb2RlciA8
PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYXJyYXlSZWZlcmVuY2Uuc2l6ZSgpKTsKICAgICAgICAg
aWYgKCFhcnJheVJlZmVyZW5jZS5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KGFycmF5UmVmZXJlbmNlLmRhdGEoKSksIGFycmF5UmVmZXJlbmNlLnNpemUoKSAqIHNp
emVvZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKFNwYW4geyBhcnJheVJlZmVyZW5jZS5kYXRhKCksIGFycmF5UmVmZXJlbmNlLnNpemUoKSB9
KTsKICAgICB9CiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8QXJyYXlSZWZlcmVuY2VUeXBlPiBk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7CkBAIC05Niw3ICs5Nyw3IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBBcmd1bWVudENvZGUKICAgICAgICAgaWYgKFVOTElLRUxZKGRh
dGFTaXplLmhhc092ZXJmbG93ZWQoKSkpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwogCi0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEgPSBkZWNvZGVyLmRlY29kZUZpeGVkTGVu
Z3RoUmVmZXJlbmNlKGRhdGFTaXplLCBhbGlnbm9mKFQpKTsKKyAgICAgICAgY29uc3QgYXV0byog
ZGF0YSA9IGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhSZWZlcmVuY2UoZGF0YVNpemUsIGFsaWdu
b2YoVCkpOwogICAgICAgICBpZiAoIWRhdGEpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwogICAgICAgICByZXR1cm4gQXJyYXlSZWZlcmVuY2VUeXBlKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgVCo+KGRhdGEpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KHNpemUpKTsKQEAgLTQyMyw3ICs0
MjQsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpCiAgICAgc3Rh
dGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mIHZlY3RvcikKICAgICB7CiAg
ICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZlY3Rvci5zaXplKCkpOwot
ICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQ4X3QqPih2ZWN0b3IuZGF0YSgpKSwgdmVjdG9yLnNpemUoKSAqIHNpemVvZihUKSwg
YWxpZ25vZihUKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGFzQnl0
ZXMoU3BhbiB7IHZlY3RvciB9KSwgYWxpZ25vZihUKSk7CiAgICAgfQogICAgIAogICAgIHN0YXRp
YyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiYgdmVjdG9y
KQpAQCAtNDQ2LDcgKzQ0Nyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2kKICAgICAgICAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIs
IG1pbkNhcGFjaXR5PiB0ZW1wOwogICAgICAgICB0ZW1wLmdyb3coc2l6ZSk7CiAKLSAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPih0ZW1wLmRhdGEoKSksIHNpemUgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpKQorICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyB0ZW1wIH0pKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHZlY3Rvci5zd2FwKHRlbXApOwpAQCAt
NDczLDcgKzQ3NCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kK
ICAgICAgICAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNh
cGFjaXR5PiB2ZWN0b3I7CiAgICAgICAgIHZlY3Rvci5ncm93KHNpemUpOwogCi0gICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4odmVjdG9yLmRhdGEoKSksIHNpemUgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpKQorICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyB2ZWN0b3IgfSkpCiAg
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgICAgIHJldHVybiB2ZWN0b3I7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9BcnJheVJlZmVyZW5jZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FycmF5UmVmZXJlbmNlLmgJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FycmF5UmVmZXJl
bmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDggQEAKIAogbmFtZXNwYWNlIElQQyB7
CiAKKy8vIEZJWE1FOiBSZXBsYWNlIHdpdGggPHd0Zi9TcGFuLmg+CisKIGlubGluZSBjb25zdGV4
cHIgc2l6ZV90IGFycmF5UmVmZXJlbmNlRHluYW1pY0V4dGVudCA9IHN0ZDo6bnVtZXJpY19saW1p
dHM8c2l6ZV90Pjo6bWF4KCk7CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgRXh0ZW50
ID0gYXJyYXlSZWZlcmVuY2VEeW5hbWljRXh0ZW50PgpJbmRleDogU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvRGVjb2Rlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL0RlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsMTMgKzIwNiwxMyBA
QCBib29sIERlY29kZXI6OmJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhCiAgICAgcmV0dXJuIGFs
aWduZWRCdWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKHJvdW5kVXBUb0FsaWdubWVudChtX2J1
ZmZlclBvcywgYWxpZ25tZW50KSwgbV9idWZmZXIsIG1fYnVmZmVyRW5kLCBzaXplKTsKIH0KIAot
Ym9vbCBEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCogZGF0YSwgc2l6ZV90
IHNpemUsIHNpemVfdCBhbGlnbm1lbnQpCitib29sIERlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3Ro
RGF0YShTcGFuPHN0ZDo6Ynl0ZT4gZGF0YSwgc2l6ZV90IGFsaWdubWVudCkKIHsKLSAgICBpZiAo
IWFsaWduQnVmZmVyUG9zaXRpb24oYWxpZ25tZW50LCBzaXplKSkKKyAgICBpZiAoIWFsaWduQnVm
ZmVyUG9zaXRpb24oYWxpZ25tZW50LCBkYXRhLnNpemUoKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIG1lbWNweShkYXRhLCBtX2J1ZmZlclBvcywgc2l6ZSk7Ci0gICAgbV9idWZmZXJQ
b3MgKz0gc2l6ZTsKKyAgICBtZW1jcHkoZGF0YS5kYXRhKCksIG1fYnVmZmVyUG9zLCBkYXRhLnNp
emUoKSk7CisgICAgbV9idWZmZXJQb3MgKz0gZGF0YS5zaXplKCk7CiAKICAgICByZXR1cm4gdHJ1
ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgJKHJldmlzaW9uIDI3
ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNzksNyArNzksMTMgQEAgcHVibGljOgogICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBi
b29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlclBvcyAhPSBudWxscHRyOyB9CiAg
ICAgdm9pZCBtYXJrSW52YWxpZCgpIHsgbV9idWZmZXJQb3MgPSBudWxscHRyOyB9CiAKLSAgICBX
QVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCogZGF0
YSwgc2l6ZV90LCBzaXplX3QgYWxpZ25tZW50KTsKKyAgICBXQVJOX1VOVVNFRF9SRVRVUk4gYm9v
bCBkZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbjxzdGQ6OmJ5dGU+LCBzaXplX3QgYWxpZ25tZW50
KTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBOPgorICAgIFdBUk5fVU5VU0VE
X1JFVFVSTiBib29sIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPFQsIE4+IGRhdGEsIHNpemVf
dCBhbGlnbm1lbnQgPSBhbGlnbm9mKFQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUZp
eGVkTGVuZ3RoRGF0YShhc1dyaXRhYmxlQnl0ZXMoZGF0YSksIGFsaWdubWVudCk7CisgICAgfQog
CiAgICAgLy8gVGhlIGRhdGEgaW4gdGhlIHJldHVybmVkIHBvaW50ZXIgaGVyZSB3aWxsIG9ubHkg
YmUgdmFsaWQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgRGVjb2RlciBvYmplY3QuCiAgICAgLy8g
UmV0dXJucyBudWxscHRyIG9uIGZhaWx1cmUuCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0lQQy9FbmNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQ
Qy9FbmNvZGVyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvRW5jb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiwxMiArMjAyLDEyIEBAIHVp
bnQ4X3QqIEVuY29kZXI6Omdyb3coc2l6ZV90IGFsaWdubWVudCwKICAgICByZXR1cm4gbV9idWZm
ZXIgKyBhbGlnbmVkU2l6ZTsKIH0KIAotdm9pZCBFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERh
dGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQpCit2
b2lkIEVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
ZGF0YSwgc2l6ZV90IGFsaWdubWVudCkKIHsKLSAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4oZGF0YSkgJSBhbGlnbm1lbnQpKTsKKyAgICBBU1NFUlQoIShyZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4oZGF0YS5kYXRhKCkpICUgYWxpZ25tZW50KSk7CiAKLSAgICB1aW50
OF90KiBidWZmZXIgPSBncm93KGFsaWdubWVudCwgc2l6ZSk7Ci0gICAgbWVtY3B5KGJ1ZmZlciwg
ZGF0YSwgc2l6ZSk7CisgICAgYXV0byogYnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQsIGRhdGEuc2l6
ZSgpKTsKKyAgICBtZW1jcHkoYnVmZmVyLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwogfQog
CiB2b2lkIEVuY29kZXI6OmFkZEF0dGFjaG1lbnQoQXR0YWNobWVudCYmIGF0dGFjaG1lbnQpCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorI2luY2x1ZGUg
PHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSVBDIHsK
QEAgLTYwLDcgKzYxLDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgd3JhcEZvclRlc3RpbmcoVW5p
cXVlUmVmPEVuY29kZXI+JiYpOwogCi0gICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoY29u
c3QgdWludDhfdCogZGF0YSwgc2l6ZV90LCBzaXplX3QgYWxpZ25tZW50KTsKKyAgICB2b2lkIGVu
Y29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSwgc2l6ZV90IGFs
aWdubWVudCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgTj4KKyAgICB2b2lk
IGVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPFQsIE4+IGRhdGEsIHNpemVfdCBhbGlnbm1lbnQg
PSBhbGlnbm9mKFQpKQorICAgIHsKKyAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGFzQnl0
ZXMoZGF0YSksIGFsaWdubWVudCk7CisgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
ICAgICBFbmNvZGVyJiBvcGVyYXRvcjw8KFQmJiB0KQpJbmRleDogU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvU2hhcmVkQnVmZmVyQ29weS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9JUEMvU2hhcmVkQnVmZmVyQ29weS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysr
IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1NoYXJlZEJ1ZmZlckNvcHkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHZvaWQgU2hhcmVkQnVmZmVyQ29weTo6ZW5jb2RlKEVu
Y29kZXImIGUKICAgICBpZiAoIWJ1ZmZlclNpemUpCiAgICAgICAgIHJldHVybjsKICAgICBmb3Ig
KGF1dG8mIHNlZ21lbnQgOiAqbV9idWZmZXIpCi0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKHNlZ21lbnQuc2VnbWVudC0+ZGF0YSgpLCBzZWdtZW50LnNlZ21lbnQtPnNpemUo
KSwgMSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHNlZ21lbnQuc2Vn
bWVudC0+Ynl0ZXMoKSwgMSk7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8U2hhcmVkQnVmZmVyQ29weT4g
U2hhcmVkQnVmZmVyQ29weTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uRW5jb2Rlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25FbmNvZGVyLmgJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNv
bm5lY3Rpb25FbmNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lu
Y2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiTWVzc2FnZU5hbWVzLmgiCisjaW5j
bHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVz
cGFjZSBJUEMgewpAQCAtNTMsMjEgKzU0LDI3IEBAIHB1YmxpYzoKIAogICAgIH5TdHJlYW1Db25u
ZWN0aW9uRW5jb2RlcigpID0gZGVmYXVsdDsKIAotICAgIGJvb2wgZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50KQor
ICAgIGJvb2wgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRh
LCBzaXplX3QgYWxpZ25tZW50KQogICAgIHsKICAgICAgICAgc2l6ZV90IGJ1ZmZlclBvaW50ZXIg
PSBzdGF0aWNfY2FzdDxzaXplX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fYnVmZmVy
ICsgbV9lbmNvZGVkU2l6ZSkpOwogICAgICAgICBzaXplX3QgbmV3QnVmZmVyUG9pbnRlciA9IHJv
dW5kVXBUb011bHRpcGxlT2YoYWxpZ25tZW50LCBidWZmZXJQb2ludGVyKTsKICAgICAgICAgaWYg
KG5ld0J1ZmZlclBvaW50ZXIgPCBidWZmZXJQb2ludGVyKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBpbnRwdHJfdCBhbGlnbmVkU2l6ZSA9IG1fZW5jb2RlZFNpemUgKyAobmV3
QnVmZmVyUG9pbnRlciAtIGJ1ZmZlclBvaW50ZXIpOwotICAgICAgICBpZiAoIXJlc2VydmUoYWxp
Z25lZFNpemUsIHNpemUpKQorICAgICAgICBpZiAoIXJlc2VydmUoYWxpZ25lZFNpemUsIGRhdGEu
c2l6ZSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdWludDhfdCogYnVm
ZmVyID0gbV9idWZmZXIgKyBhbGlnbmVkU2l6ZTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlciwgZGF0
YSwgc2l6ZSk7Ci0gICAgICAgIG1fZW5jb2RlZFNpemUgPSBhbGlnbmVkU2l6ZSArIHNpemU7Cisg
ICAgICAgIGF1dG8qIGJ1ZmZlciA9IG1fYnVmZmVyICsgYWxpZ25lZFNpemU7CisgICAgICAgIG1l
bWNweShidWZmZXIsIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgICAgIG1fZW5jb2Rl
ZFNpemUgPSBhbGlnbmVkU2l6ZSArIGRhdGEuc2l6ZSgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgTj4KKyAgICB2b2lkIGVu
Y29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPFQsIE4+IGRhdGEsIHNpemVfdCBhbGlnbm1lbnQgPSBh
bGlnbm9mKFQpKQorICAgIHsKKyAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGFzQnl0ZXMo
ZGF0YSksIGFsaWdubWVudCk7CisgICAgfQorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAg
ICBTdHJlYW1Db25uZWN0aW9uRW5jb2RlciYgb3BlcmF0b3I8PChUJiYgdCkKICAgICB7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENv
ZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw3ICsxNDQsNyBAQCBzdGF0aWMgdm9pZCBl
bmNvZGVTaGFyZWRCdWZmZXIoRW5jb2RlciYgCiAgICAgLy8gb3ZlciB0aGUgSVBDLiBDb25uZWN0
aW9uVW5peC5jcHAgYWxyZWFkeSB1c2VzIHNoYXJlZCBtZW1vcnkgdG8gc2VuZCBhbnkgSVBDIG1l
c3NhZ2UgdGhhdCBpcwogICAgIC8vIHRvbyBsYXJnZS4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg1NzEuCiAgICAgZm9yIChjb25zdCBhdXRvJiBlbGVtZW50
IDogKmJ1ZmZlcikKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoZWxlbWVu
dC5zZWdtZW50LT5kYXRhKCksIGVsZW1lbnQuc2VnbWVudC0+c2l6ZSgpLCAxKTsKKyAgICAgICAg
ZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoZWxlbWVudC5zZWdtZW50LT5ieXRlcygpLCAx
KTsKICNlbHNlCiAgICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOwogICAgIGF1dG8gc2hh
cmVkTWVtb3J5QnVmZmVyID0gU2hhcmVkTWVtb3J5Ojpjb3B5QnVmZmVyKCpidWZmZXIpOwpAQCAt
MTgwLDcgKzE4MCw3IEBAIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVTaGEK
IAogICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAgIGRhdGEuZ3JvdyhidWZmZXJTaXplKTsK
LSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGRhdGEuZGF0YSgpLCBkYXRh
LnNpemUoKSwgMSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFu
IHsgZGF0YSB9LCAxKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYnVmZmVyID0gU2hh
cmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShkYXRhKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50
UnVsZUxpc3RTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSwxOCArMTMxLDIwIEBAIHN0
YXRpYyBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YSBlbmNvZGUKICAgICBlbmNvZGVyIDw8IG1l
dGFEYXRhLmNvbmRpdGlvbmVkRmlsdGVyc0J5dGVjb2RlU2l6ZTsKICAgICBlbmNvZGVyIDw8IG1l
dGFEYXRhLmNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbjsKIAotICAgIEFTU0VSVChlbmNvZGVy
LmJ1ZmZlclNpemUoKSA9PSBDb250ZW50UnVsZUxpc3RGaWxlSGVhZGVyU2l6ZSk7Ci0gICAgcmV0
dXJuIFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIu
YnVmZmVyU2l6ZSgpKTsKKyAgICBBU1NFUlQoZW5jb2Rlci5idWZmZXIoKS5zaXplKCkgPT0gQ29u
dGVudFJ1bGVMaXN0RmlsZUhlYWRlclNpemUpOworICAgIHJldHVybiBXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6RGF0YSB7IGVuY29kZXIuYnVmZmVyKCkgfTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gdm9pZCBnZXREYXRhKGNvbnN0IFQmLCBjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4
X3QqLCBzaXplX3QpPiYpOwotdGVtcGxhdGU8PiB2b2lkIGdldERhdGEoY29uc3QgV2ViS2l0OjpO
ZXR3b3JrQ2FjaGU6OkRhdGEmIGRhdGEsIGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhf
dCosIHNpemVfdCk+JiBmdW5jdGlvbikKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgZ2V0RGF0
YShjb25zdCBUJiwgY29uc3QgRnVuY3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYp
OworCit0ZW1wbGF0ZTw+IHZvaWQgZ2V0RGF0YShjb25zdCBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
RGF0YSYgZGF0YSwgY29uc3QgRnVuY3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYg
ZnVuY3Rpb24pCiB7CiAgICAgZGF0YS5hcHBseShmdW5jdGlvbik7CiB9Ci10ZW1wbGF0ZTw+IHZv
aWQgZ2V0RGF0YShjb25zdCBXZWJDb3JlOjpTaGFyZWRCdWZmZXImIGRhdGEsIGNvbnN0IEZ1bmN0
aW9uPGJvb2woY29uc3QgdWludDhfdCosIHNpemVfdCk+JiBmdW5jdGlvbikKKwordGVtcGxhdGU8
PiB2b2lkIGdldERhdGEoY29uc3QgV2ViQ29yZTo6U2hhcmVkQnVmZmVyJiBkYXRhLCBjb25zdCBG
dW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+JiBmdW5jdGlvbikKIHsKLSAgICBm
dW5jdGlvbihkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOworICAgIGZ1bmN0aW9uKGRhdGEuYnl0
ZXMoKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC0xNTAsMTMgKzE1MiwxMyBAQCBz
dGF0aWMgc3RkOjpvcHRpb25hbDxDb250ZW50UnVsZUxpc3RNZXRhCiB7CiAgICAgYm9vbCBzdWNj
ZXNzID0gZmFsc2U7CiAgICAgQ29udGVudFJ1bGVMaXN0TWV0YURhdGEgbWV0YURhdGE7Ci0gICAg
Z2V0RGF0YShmaWxlRGF0YSwgWyZtZXRhRGF0YSwgJnN1Y2Nlc3MsICZmaWxlRGF0YV0oY29uc3Qg
dWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKKyAgICBnZXREYXRhKGZpbGVEYXRhLCBbJm1l
dGFEYXRhLCAmc3VjY2VzcywgJmZpbGVEYXRhXShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkg
ewogICAgICAgICAvLyBUaGUgZmlsZSBkYXRhIHNob3VsZCBiZSBtYXBwZWQgaW50byBvbmUgY29u
dGludW91cyBtZW1vcnkgc2VnbWVudCBzbyB0aGUgc2l6ZQogICAgICAgICAvLyBwYXNzZWQgdG8g
dGhlIGFwcGxpZXIgc2hvdWxkIGFsd2F5cyBlcXVhbCB0aGUgZGF0YSBzaXplLgotICAgICAgICBp
ZiAoc2l6ZSAhPSBmaWxlRGF0YS5zaXplKCkpCisgICAgICAgIGlmIChkYXRhLnNpemUoKSAhPSBm
aWxlRGF0YS5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgV1RG
OjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOworICAgICAgICBXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyBkYXRhIH07CiAgICAgICAgIAogICAgICAg
ICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiB2ZXJzaW9uOwogICAgICAgICBkZWNvZGVyID4+IHZl
cnNpb247CkBAIC0yMjgsOCArMjMwLDggQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TWFwcGVkRGF0
YT4gb3BlbkFuZAogc3RhdGljIGJvb2wgd3JpdGVEYXRhVG9GaWxlKGNvbnN0IFdlYktpdDo6TmV0
d29ya0NhY2hlOjpEYXRhJiBmaWxlRGF0YSwgUGxhdGZvcm1GaWxlSGFuZGxlIGZkKQogewogICAg
IGJvb2wgc3VjY2VzcyA9IHRydWU7Ci0gICAgZmlsZURhdGEuYXBwbHkoW2ZkLCAmc3VjY2Vzc10o
Y29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgaWYgKHdyaXRlVG9G
aWxlKGZkLCBkYXRhLCBzaXplKSA9PSAtMSkgeworICAgIGZpbGVEYXRhLmFwcGx5KFtmZCwgJnN1
Y2Nlc3NdKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhKSB7CisgICAgICAgIGlmICh3cml0ZVRv
RmlsZShmZCwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKSA9PSAtMSkgewogICAgICAgICAgICAg
c3VjY2VzcyA9IGZhbHNlOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5n
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvTGVnYWN5U2Vz
c2lvblN0YXRlQ29kaW5nLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL0xlZ2FjeVNlc3Npb25TdGF0ZUNvZGluZy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyOSw3ICsxMjksNyBAQCBwdWJsaWM6CiAgICAgICAgICp0aGlzIDw8IGxlbmd0aDsKIAog
ICAgICAgICAqdGhpcyA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4obGVuZ3RoICogc2l6ZW9mKFVD
aGFyKSk7Ci0gICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQ4X3QqPihTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKS5n
ZXQoKSksIGxlbmd0aCAqIHNpemVvZihVQ2hhciksIGFsaWdub2YoVUNoYXIpKTsKKyAgICAgICAg
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRl
ZENoYXJhY3RlcnMoKS5nZXQoKSwgbGVuZ3RoIH0pOwogCiAgICAgICAgIHJldHVybiAqdGhpczsK
ICAgICB9CkBAIC0xMzcsNyArMTM3LDcgQEAgcHVibGljOgogICAgIEhpc3RvcnlFbnRyeURhdGFF
bmNvZGVyJiBvcGVyYXRvcjw8KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmFsdWUpCiAgICAgewog
ICAgICAgICAqdGhpcyA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUuc2l6ZSgpKTsKLSAg
ICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHZhbHVlLmRhdGEoKSwgdmFsdWUuc2l6ZSgpLCAx
KTsKKyAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyB2YWx1ZSB9LCAxKTsKIAog
ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQpAQCAtMTQ1LDcgKzE0NSw3IEBAIHB1YmxpYzoK
ICAgICBIaXN0b3J5RW50cnlEYXRhRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBWZWN0b3I8Y2hh
cj4mIHZhbHVlKQogICAgIHsKICAgICAgICAgKnRoaXMgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KHZhbHVlLnNpemUoKSk7Ci0gICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih2YWx1ZS5kYXRhKCkpLCB2YWx1ZS5zaXplKCksIDEpOwor
ICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IHZhbHVlIH0sIDEpOwogCiAgICAg
ICAgIHJldHVybiAqdGhpczsKICAgICB9CkBAIC0yMDYsMTcgKzIwNiwyMyBAQCBwcml2YXRlOgog
ICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2FyaXRobWV0aWM8VHlwZT46OnZh
bHVlLCAiIik7CiAKLSAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDhfdCo+KCZ2YWx1ZSksIHNpemVvZih2YWx1ZSksIHNpemVvZih2YWx1ZSkpOworICAg
ICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEoYXNCeXRlcyhTcGFuIHsgJnZhbHVlLCAxIH0pLCBz
aXplb2YodmFsdWUpKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAotICAgIHZvaWQg
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCB1
bnNpZ25lZCBhbGlnbm1lbnQpCisgICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoU3Bhbjxj
b25zdCBzdGQ6OmJ5dGU+IGRhdGEsIHVuc2lnbmVkIGFsaWdubWVudCkKICAgICB7Ci0gICAgICAg
IFJFTEVBU0VfQVNTRVJUKGRhdGEgfHwgIXNpemUpOwotICAgICAgICBBU1NFUlQoIShyZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdD4oZGF0YSkgJSBhbGlnbm1lbnQpKTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoZGF0YS5kYXRhKCkgfHwgIWRhdGEuc2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUKCEo
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGRhdGEuZGF0YSgpKSAlIGFsaWdubWVudCkpOwog
Ci0gICAgICAgIHVpbnQ4X3QqIGJ1ZmZlciA9IGdyb3coYWxpZ25tZW50LCBzaXplKTsKLSAgICAg
ICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7CisgICAgICAgIGF1dG8qIGJ1ZmZlciA9IGdy
b3coYWxpZ25tZW50LCBkYXRhLnNpemUoKSk7CisgICAgICAgIG1lbWNweShidWZmZXIsIGRhdGEu
ZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IE4+CisgICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbjxULCBOPiBkYXRh
LCBzaXplX3QgYWxpZ25tZW50ID0gYWxpZ25vZihUKSkKKyAgICB7CisgICAgICAgIGVuY29kZUZp
eGVkTGVuZ3RoRGF0YShhc0J5dGVzKGRhdGEpLCBhbGlnbm1lbnQpOwogICAgIH0KIAogICAgIHVp
bnQ4X3QqIGdyb3codW5zaWduZWQgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKQEAgLTYwMSw3ICs2
MDcsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgVUNoYXIqIGJ1ZmZlcjsKICAgICAgICAgYXV0byBz
dHJpbmcgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAg
ICAgICBkZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVm
ZmVyKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSwgYWxpZ25vZihVQ2hhcikpOworICAgICAgICBk
ZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IGJ1ZmZlciwgbGVuZ3RoIH0sIGFsaWdub2YoVUNo
YXIpKTsKIAogICAgICAgICB2YWx1ZSA9IHN0cmluZzsKICAgICAgICAgcmV0dXJuICp0aGlzOwpA
QCAtNzM3LDE3ICs3NDMsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX2FyaXRobWV0aWM8VHlwZT46OnZhbHVlLCAiIik7CiAgICAgICAgIHZhbHVlID0gVHlwZSgp
OwogCi0gICAgICAgIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPigmdmFsdWUpLCBzaXplb2YodmFsdWUpLCBzaXplb2YodmFsdWUpKTsKKyAgICAgICAgZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmdmFsdWUsIDEgfSwgc2l6ZW9mKHZhbHVlKSk7CiAg
ICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKLSAgICB2b2lkIGRlY29kZUZpeGVkTGVuZ3Ro
RGF0YSh1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgYWxpZ25tZW50KQorICAg
IHZvaWQgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48c3RkOjpieXRlPiBkYXRhLCB1bnNpZ25l
ZCBhbGlnbm1lbnQpCiAgICAgewotICAgICAgICBpZiAoIWFsaWduQnVmZmVyUG9zaXRpb24oYWxp
Z25tZW50LCBzaXplKSkKKyAgICAgICAgaWYgKCFhbGlnbkJ1ZmZlclBvc2l0aW9uKGFsaWdubWVu
dCwgZGF0YS5zaXplKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIG1lbWNweShk
YXRhLCBtX2J1ZmZlciwgc2l6ZSk7Ci0gICAgICAgIG1fYnVmZmVyICs9IHNpemU7CisgICAgICAg
IG1lbWNweShkYXRhLmRhdGEoKSwgbV9idWZmZXIsIGRhdGEuc2l6ZSgpKTsKKyAgICAgICAgbV9i
dWZmZXIgKz0gZGF0YS5zaXplKCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IE4+CisgICAgdm9pZCBkZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbjxULCBOPiBkYXRh
LCBzaXplX3QgYWxpZ25tZW50KQorICAgIHsKKyAgICAgICAgZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KGFzV3JpdGFibGVCeXRlcyhkYXRhKSwgYWxpZ25tZW50KTsKICAgICB9CiAKICAgICBib29sIGFs
aWduQnVmZmVyUG9zaXRpb24odW5zaWduZWQgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEku
Y3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9JUENUZXN0aW5nQVBJLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjkxLDcgKzY5MSw3IEBAIHN0
YXRpYyBib29sIGVuY29kZVR5cGVkQXJyYXkoSVBDOjpFbmNvZGUKICAgICBpZiAoIWRhdGEuYnVm
ZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmJ1ZmZlciksIGRh
dGEubGVuZ3RoLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBzdGQ6OmJ5dGUqPihkYXRhLmJ1ZmZlciksIGRhdGEubGVu
Z3RoIH0sIDEpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBUb29scy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29s
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNyBAQAorMjAyMS0wNi0xMSAg
U2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRvcHQgU3BhbiBpbiBt
b3JlIHBsYWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgW1dJUF0KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2NhaXJvL1BpeGVsRHVtcFN1cHBv
cnRDYWlyby5jcHA6CisgICAgICAgIChjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JCaXRtYXBDb250
ZXh0KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jZy9QaXhlbER1bXBTdXBwb3J0Q0cuY3Bw
OgorICAgICAgICAoY29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQml0bWFwQ29udGV4dCk6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQmxvb21GaWx0ZXIuY3BwOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6Z2VuZXJhdGVSYW5kb21EaWdlc3RzKToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OlRFU1RfRik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6Q29ubmVjdGlvbjo6d2ViU29ja2V0SGFuZHNoYWtlKToK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3Bw
OgorICAgICAgICAoV1RSOjpjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JDYWlyb1N1cmZhY2UpOgor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvY2cvVGVzdEludm9jYXRpb25DRy5jcHA6CisgICAg
ICAgIChXVFI6OmNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckNvbnRleHQpOgorCiAyMDIxLTA2LTEx
ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIFtX
aW5dW0R1bXBSZW5kZXJUcmVlXSAtLW5vLXRpbWVvdXQgc3dpdGNoIGRvZXNuJ3Qgd29yawpJbmRl
eDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2Fpcm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0
Q2Fpcm8uY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jYWly
by9QaXhlbER1bXBTdXBwb3J0Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3
IEBAIHZvaWQgY29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQml0bWFwQ29udGUKICAgICBTSEExIHNo
YTE7CiAgICAgdW5zaWduZWQgY2hhciogYml0bWFwRGF0YSA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpKTsKICAgICBmb3Ig
KHVuc2lnbmVkIHJvdyA9IDA7IHJvdyA8IHBpeGVsc0hpZ2g7IHJvdysrKSB7Ci0gICAgICAgIHNo
YTEuYWRkQnl0ZXMoYml0bWFwRGF0YSwgNCAqIHBpeGVsc1dpZGUpOworICAgICAgICBzaGExLmFk
ZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7IGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlIH0pKTsKICAg
ICAgICAgYml0bWFwRGF0YSArPSBieXRlc1BlclJvdzsKICAgICB9CiAgICAgU0hBMTo6RGlnZXN0
IGhhc2g7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jZy9QaXhlbER1bXBTdXBwb3J0Q0cu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBv
cnRDRy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NnL1Bp
eGVsRHVtcFN1cHBvcnRDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDE0ICs4OCwxNCBAQCB2
b2lkIGNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckJpdG1hcENvbnRlCiAgICAgICAgICAgICB1aW50
MzJfdCBidWZmZXJbcGl4ZWxzV2lkZV07CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNvbHVt
biA9IDA7IGNvbHVtbiA8IHBpeGVsc1dpZGU7IGNvbHVtbisrKQogICAgICAgICAgICAgICAgIGJ1
ZmZlcltjb2x1bW5dID0gT1NSZWFkTGl0dGxlSW50MzIoYml0bWFwRGF0YSwgNCAqIGNvbHVtbik7
Ci0gICAgICAgICAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGJ1ZmZlciksIDQgKiBwaXhlbHNXaWRlKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMo
YXNCeXRlcyhTcGFuIHsgYnVmZmVyLCBwaXhlbHNXaWRlIH0pKTsKICAgICAgICAgICAgIGJpdG1h
cERhdGEgKz0gYnl0ZXNQZXJSb3c7CiAgICAgICAgIH0KICAgICB9IGVsc2UKICNlbmRpZgogICAg
IHsKICAgICAgICAgZm9yICh1bnNpZ25lZCByb3cgPSAwOyByb3cgPCBwaXhlbHNIaWdoOyByb3cr
KykgewotICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lk
ZSk7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7IGJpdG1hcERhdGEs
IDQgKiBwaXhlbHNXaWRlIH0pKTsKICAgICAgICAgICAgIGJpdG1hcERhdGEgKz0gYnl0ZXNQZXJS
b3c7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9CbG9vbUZpbHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvQmxvb21GaWx0ZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9CbG9vbUZpbHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcg
KzQ1LDcgQEAgc3RhdGljIFZlY3RvcjxTSEExOjpEaWdlc3Q+IGdlbmVyYXRlUmFuZAogICAgIFNI
QTEgc2hhMTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaGFzaENvdW50OyArK2kpIHsK
ICAgICAgICAgZG91YmxlIHJhbmRvbSA9IHJhbmRvbU51bWJlcigpOwotICAgICAgICBzaGExLmFk
ZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZyYW5kb20pLCBzaXplb2YoZG91Ymxl
KSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgJnJhbmRvbSwgMSB9KSk7
CiAgICAgICAgIFNIQTE6OkRpZ2VzdCBkaWdlc3Q7CiAgICAgICAgIHNoYTEuY29tcHV0ZUhhc2go
ZGlnZXN0KTsKICAgICAgICAgaGFzaGVzLmFwcGVuZChkaWdlc3QpOwpJbmRleDogVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzMsOCArMTMzLDggQEAgVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBNYXBwaW5n
RXhpc3RpbmdGaQogICAgIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhIG1hcHBlZEZpbGVEYXRh
KHRlbXBGaWxlUGF0aCgpLCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlTW9kZTo6U2hhcmVkLCBzdWNj
ZXNzKTsKICAgICBFWFBFQ1RfVFJVRShzdWNjZXNzKTsKICAgICBFWFBFQ1RfVFJVRSghIW1hcHBl
ZEZpbGVEYXRhKTsKLSAgICBFWFBFQ1RfVFJVRShtYXBwZWRGaWxlRGF0YS5zaXplKCkgPT0gc3Ry
bGVuKEZpbGVTeXN0ZW1UZXN0RGF0YSkpOwotICAgIEVYUEVDVF9UUlVFKHN0cm5zdHIoRmlsZVN5
c3RlbVRlc3REYXRhLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4obWFwcGVkRmlsZURhdGEuZGF0
YSgpKSwgbWFwcGVkRmlsZURhdGEuc2l6ZSgpKSk7CisgICAgRVhQRUNUX1RSVUUobWFwcGVkRmls
ZURhdGEuZGF0YSgpLnNpemUoKSA9PSBzdHJsZW4oRmlsZVN5c3RlbVRlc3REYXRhKSk7CisgICAg
RVhQRUNUX1RSVUUoc3RybnN0cihGaWxlU3lzdGVtVGVzdERhdGEsIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgY2hhcio+KG1hcHBlZEZpbGVEYXRhLmRhdGEoKS5kYXRhKCkpLCBtYXBwZWRGaWxlRGF0
YS5kYXRhKCkuc2l6ZSgpKSk7CiB9CiAKIFRFU1RfRihGaWxlU3lzdGVtVGVzdCwgTWFwcGluZ0V4
aXN0aW5nRW1wdHlGaWxlKQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2Vy
dmVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZl
ci5tbQkocmV2aXNpb24gMjc4ODA5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQ
U2VydmVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNDAsMTEgKzM0MCwxMSBAQCB2b2lkIENvbm5l
Y3Rpb246OndlYlNvY2tldEhhbmRzaGFrZShDb21wCiAKICAgICAgICAgICAgIGNvbnN0ZXhwciBh
dXRvKiB3ZWJTb2NrZXRLZXlHVUlEID0gIjI1OEVBRkE1LUU5MTQtNDdEQS05NUNBLUM1QUIwREM4
NUIxMSI7CiAgICAgICAgICAgICBTSEExIHNoYTE7Ci0gICAgICAgICAgICBzaGExLmFkZEJ5dGVz
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGtleUJlZ2luKSwga2V5RW5kIC0ga2V5
QmVnaW4pOwotICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPih3ZWJTb2NrZXRLZXlHVUlEKSwgc3RybGVuKHdlYlNvY2tldEtleUdVSUQpKTsK
KyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsga2V5QmVnaW4sIGtleUVu
ZCB9KSk7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7IHdlYlNvY2tl
dEtleUdVSUQsIHN0cmxlbih3ZWJTb2NrZXRLZXlHVUlEKSB9KSk7CiAgICAgICAgICAgICBTSEEx
OjpEaWdlc3QgaGFzaDsKICAgICAgICAgICAgIHNoYTEuY29tcHV0ZUhhc2goaGFzaCk7Ci0gICAg
ICAgICAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaGFzaC5kYXRhKCksIFNIQTE6Omhh
c2hTaXplKTsKKyAgICAgICAgICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsg
aGFzaCB9KTsKICAgICAgICAgfTsKIAogICAgICAgICBjb25uZWN0aW9uLnNlbmQoSFRUUFJlc3Bv
bnNlKDEwMSwgewpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jYWlyby9UZXN0SW52b2Nh
dGlvbkNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NhaXJv
L1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9XZWJL
aXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckNh
aXIKICAgICBTSEExIHNoYTE7CiAgICAgdW5zaWduZWQgY2hhciogYml0bWFwRGF0YSA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZh
Y2UpKTsKICAgICBmb3IgKHNpemVfdCByb3cgPSAwOyByb3cgPCBwaXhlbHNIaWdoOyArK3Jvdykg
ewotICAgICAgICBzaGExLmFkZEJ5dGVzKGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlKTsKKyAg
ICAgICAgc2hhMS5hZGRCeXRlcyhhc0J5dGVzKFNwYW4geyBiaXRtYXBEYXRhLCA0ICogcGl4ZWxz
V2lkZSB9KSk7CiAgICAgICAgIGJpdG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7CiAgICAgfQogICAg
IFNIQTE6OkRpZ2VzdCBoYXNoOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0
SW52b2NhdGlvbkNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2Nn
L1Rlc3RJbnZvY2F0aW9uQ0cuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nywx
NCArODcsMTQgQEAgdm9pZCBjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JDb250ZXh0KENHQwogICAg
ICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcig0ICogcGl4ZWxzV2lkZSk7CiAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGNvbHVtbiA9IDA7IGNvbHVtbiA8IHBpeGVsc1dpZGU7IGNvbHVt
bisrKQogICAgICAgICAgICAgICAgIGJ1ZmZlcltjb2x1bW5dID0gT1NSZWFkTGl0dGxlSW50MzIo
Yml0bWFwRGF0YSwgNCAqIGNvbHVtbik7Ci0gICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGJ1ZmZl
cik7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7IGJ1ZmZlciB9KSk7
CiAgICAgICAgICAgICBiaXRtYXBEYXRhICs9IGJ5dGVzUGVyUm93OwogICAgICAgICB9CiAgICAg
fSBlbHNlCiAjZW5kaWYKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgcm93ID0gMDsgcm93
IDwgcGl4ZWxzSGlnaDsgcm93KyspIHsKLSAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoYml0bWFw
RGF0YSwgNCAqIHBpeGVsc1dpZGUpOworICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhhc0J5dGVz
KFNwYW4geyBiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lkZSB9KSk7CiAgICAgICAgICAgICBiaXRt
YXBEYXRhICs9IGJ5dGVzUGVyUm93OwogICAgICAgICB9CiAgICAgfQo=
</data>
<flag name="commit-queue"
          id="452988"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431258</attachid>
            <date>2021-06-12 08:21:57 -0700</date>
            <delta_ts>2021-06-12 08:24:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226887-20210612082156.patch</filename>
            <type>text/plain</type>
            <size>129461</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBA
CisyMDIxLTA2LTEyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogQVBJL0pTU2NyaXB0Lm1tOgorICAg
ICAgICAoK1tKU1NjcmlwdCBzY3JpcHRPZlR5cGU6bWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTp3
aXRoU291cmNlVVJMOmFuZEJ5dGVjb2RlQ2FjaGU6aW5WaXJ0dWFsTWFjaGluZTplcnJvcjpdKToK
KyAgICAgICAgKC1bSlNTY3JpcHQgcmVhZENhY2hlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHdy
aXRlQ2FjaGU6XSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9ja0hhc2g6OkNvZGVCbG9ja0hhc2gpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHA6CisgICAgICAgIChJbnNw
ZWN0b3I6OmJhY2tlbmRDb21tYW5kc0hhc2gpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZm
ZXIuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJDb250ZW50czo6d3JpdGFibGVCeXRlcyk6
CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyQ29udGVudHM6OmJ5dGVzIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6QXJyYXlCdWZmZXI6OndyaXRhYmxlQnl0ZXMpOgorICAgICAgICAoSlNDOjpBcnJh
eUJ1ZmZlcjo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
Lmg6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6d3JpdGFibGVCeXRlcyk6CisgICAg
ICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRp
bWUvQ2FjaGVQYXlsb2FkLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVQYXlsb2FkOjptYWtlTWFw
cGVkUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6bWFrZU1hbGxvY1BheWxv
YWQpOgorICAgICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6Om1ha2VFbXB0eVBheWxvYWQpOgorICAg
ICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6OkNhY2hlUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNh
Y2hlUGF5bG9hZDo6ZnJlZURhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVQYXlsb2FkLmg6
CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6ZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlUGF5bG9hZDo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6
Q2FjaGVQYXlsb2FkKToKKyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKToKKwogMjAyMS0w
Ni0xMSAgUGF0cmljayBBbmdsZSAgPHBhbmdsZUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogQWRkIGluc3RydW1lbnRhdGlvbiB0byBub2RlIGRlc3RydWN0aW9uIGZvciBJbnNw
ZWN0b3JET01BZ2VudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMTMgKzEzNCwxMyBAQCArIChpbnN0YW5jZXR5cGUpc2Ny
aXB0T2ZUeXBlOihKU1NjcmlwdFR5CiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4g
Y3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJGaWxlIGF0IHBhdGggJUAg
Y291bGQgbm90IGJlIG1hcHBlZC4iLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihzeXN0ZW1QYXRo
KV0sIGVycm9yKTsKIAotICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCkpKQor
ICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmlsZURhdGEuZGF0YSgpLnNpemUoKSkpCiAg
ICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIk5v
dCBhbGwgY2hhcmFjdGVycyBpbiBmaWxlIGF0ICVAIGFyZSBBU0NJSS4iLCBzdGF0aWNfY2FzdDxO
U1N0cmluZyAqPihzeXN0ZW1QYXRoKV0sIGVycm9yKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gYWRv
cHROUyhbW0pTU2NyaXB0IGFsbG9jXSBpbml0XSk7CiAgICAgcmVzdWx0LT5tX3ZpcnR1YWxNYWNo
aW5lID0gdm07CiAgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOwotICAgIHJlc3VsdC0+bV9zb3Vy
Y2UgPSBTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcoYml0d2lzZV9jYXN0
PGNvbnN0IExDaGFyKj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpKSk7CisgICAg
cmVzdWx0LT5tX3NvdXJjZSA9IFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWlu
ZyhiaXR3aXNlX2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmls
ZURhdGEuZGF0YSgpLnNpemUoKSkpOwogICAgIHJlc3VsdC0+bV9tYXBwZWRTb3VyY2UgPSBXVEZN
b3ZlKGZpbGVEYXRhKTsKICAgICByZXN1bHQtPm1fc291cmNlVVJMID0gc291cmNlVVJMOwogICAg
IHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7CkBAIC0xNjgsMjQgKzE2OCwyMyBAQCAt
ICh2b2lkKXJlYWRDYWNoZQogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgY29uc3QgdWludDhfdCogZmlsZURhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihtYXBwZWRGaWxlLmRhdGEoKSk7Ci0gICAgdW5zaWduZWQgZmlsZVRvdGFsU2l6ZSA9IG1h
cHBlZEZpbGUuc2l6ZSgpOworICAgIGF1dG8gZmlsZURhdGEgPSBtYXBwZWRGaWxlLmRhdGEoKTsK
IAogICAgIC8vIEVuc3VyZSB3ZSBhdCBsZWFzdCBoYXZlIGEgU0hBMTo6RGlnZXN0IHRvIHJlYWQu
Ci0gICAgaWYgKGZpbGVUb3RhbFNpemUgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgeworICAgIGlm
IChmaWxlRGF0YS5zaXplKCkgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgewogICAgICAgICBGaWxl
U3lzdGVtOjpkZWxldGVGaWxlKGNhY2hlRmlsZW5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgdW5zaWduZWQgZmlsZURhdGFTaXplID0gZmlsZVRvdGFsU2l6ZSAtIHNpemVvZihT
SEExOjpEaWdlc3QpOworICAgIHVuc2lnbmVkIGZpbGVEYXRhU2l6ZSA9IGZpbGVEYXRhLnNpemUo
KSAtIHNpemVvZihTSEExOjpEaWdlc3QpOwogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFz
aDsKICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhmaWxlRGF0YSwgZmlsZURhdGFT
aXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKGZpbGVEYXRhLmZpcnN0KGZpbGVEYXRhU2l6ZSkpOwog
ICAgIHNoYTEuY29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2VzdCBm
aWxlSGFzaDsKLSAgICBtZW1jcHkoJmZpbGVIYXNoLCBmaWxlRGF0YSArIGZpbGVEYXRhU2l6ZSwg
c2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOworICAgIG1lbWNweSgmZmlsZUhhc2gsIGZpbGVEYXRhLmRh
dGEoKSArIGZpbGVEYXRhU2l6ZSwgc2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOwogCiAgICAgaWYgKGNv
bXB1dGVkSGFzaCAhPSBmaWxlSGFzaCkgewogICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxl
KGNhY2hlRmlsZW5hbWUpOwpAQCAtMzQzLDcgKzM0Miw3IEBAIC0gKEJPT0wpd3JpdGVDYWNoZToo
U3RyaW5nJillcnJvcgogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFzaDsKICAgICBTSEEx
IHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhtX2NhY2hlZEJ5dGVjb2RlLT5kYXRhKCksIG1fY2Fj
aGVkQnl0ZWNvZGUtPnNpemUoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhhc0J5dGVzKFNwYW4geyBt
X2NhY2hlZEJ5dGVjb2RlLT5kYXRhKCksIG1fY2FjaGVkQnl0ZWNvZGUtPnNpemUoKSB9KSk7CiAg
ICAgc2hhMS5jb21wdXRlSGFzaChjb21wdXRlZEhhc2gpOwogICAgIEZpbGVTeXN0ZW06OndyaXRl
VG9GaWxlKHRlbXBGRCwgY29tcHV0ZWRIYXNoLmRhdGEoKSwgc2l6ZW9mKGNvbXB1dGVkSGFzaCkp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
a0hhc2guY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDEwICs2MiwxMCBA
QCBDb2RlQmxvY2tIYXNoOjpDb2RlQmxvY2tIYXNoKGNvbnN0IFNvdXJjCiAgICAgICAgIHVuc2ln
bmVkIGxlbmd0aCA9IHN0ci5sZW5ndGgoKTsKICAgICAgICAgdW5zaWduZWQgc3RlcCA9IChsZW5n
dGggPj4gMTApICsgMTsKIAotICAgICAgICBzaGExLmFkZEJ5dGVzKGJpdHdpc2VfY2FzdDx1aW50
OF90Kj4oJmxlbmd0aCksIHNpemVvZihsZW5ndGgpKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhh
c0J5dGVzKFNwYW4geyAmbGVuZ3RoLCAxIH0pKTsKICAgICAgICAgZG8gewogICAgICAgICAgICAg
VUNoYXIgY2hhcmFjdGVyID0gc3RyW2luZGV4XTsKLSAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMo
Yml0d2lzZV9jYXN0PHVpbnQ4X3QqPigmY2hhcmFjdGVyKSwgc2l6ZW9mKGNoYXJhY3RlcikpOwor
ICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhhc0J5dGVzKFNwYW4geyAmY2hhcmFjdGVyLCAxIH0p
KTsKICAgICAgICAgICAgIG9sZEluZGV4ID0gaW5kZXg7CiAgICAgICAgICAgICBpbmRleCArPSBz
dGVwOwogICAgICAgICB9IHdoaWxlIChpbmRleCA+IG9sZEluZGV4ICYmIGluZGV4IDwgbGVuZ3Ro
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL2dsaWIvUmVt
b3RlSW5zcGVjdG9yVXRpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvcmVtb3RlL2dsaWIvUmVtb3RlSW5zcGVjdG9yVXRpbHMuY3BwCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGli
L1JlbW90ZUluc3BlY3RvclV0aWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNyBA
QCBjb25zdCBDU3RyaW5nJiBiYWNrZW5kQ29tbWFuZHNIYXNoKCkKICAgICAgICAgZ2NvbnN0cG9p
bnRlciBkYXRhID0gZ19ieXRlc19nZXRfZGF0YShieXRlcy5nZXQoKSwgJmRhdGFTaXplKTsKICAg
ICAgICAgQVNTRVJUKGRhdGFTaXplKTsKICAgICAgICAgU0hBMSBzaGExOwotICAgICAgICBzaGEx
LmFkZEJ5dGVzKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgZGF0YVNpemUpOwor
ICAgICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyBzdGF0aWNfY2FzdDxjb25zdCBzdGQ6OmJ5dGUq
PihkYXRhKSwgZGF0YVNpemUgfSk7CiAgICAgICAgIGhleERpZ2VzdCA9IHNoYTEuY29tcHV0ZUhl
eERpZ2VzdCgpOwogICAgIH0KICAgICByZXR1cm4gaGV4RGlnZXN0OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5oCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+
CiAjaW5jbHVkZSA8d3RmL1BhY2tlZFJlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNr
Lmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CkBAIC04MCw3ICs4MSwxMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9p
ZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5nZXRNYXlCZU51bGwoc2l6ZUluQnl0ZXMo
KSk7IH0KICAgICB1bnNpZ25lZCBzaXplSW5CeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZUlu
Qnl0ZXM7IH0KLSAgICAKKworICAgIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCkgeyBy
ZXR1cm4geyBzdGF0aWNfY2FzdDxzdGQ6OmJ5dGUqPihkYXRhKCkpLCBzaXplSW5CeXRlcygpIH07
IH0KKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25zdCB7IHJldHVybiB7IHN0
YXRpY19jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGRhdGEoKSksIHNpemVJbkJ5dGVzKCkgfTsgfQor
CiAgICAgYm9vbCBpc1NoYXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkOyB9CiAgICAgCiBw
cml2YXRlOgpAQCAtMTI3LDcgKzEzMSw5IEBAIHB1YmxpYzoKICAgICBpbmxpbmUgdm9pZCogZGF0
YSgpOwogICAgIGlubGluZSBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3Q7CiAgICAgaW5saW5lIHVu
c2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdDsKLSAgICAKKyAgICBpbmxpbmUgU3BhbjxzdGQ6OmJ5
dGU+IHdyaXRhYmxlQnl0ZXMoKTsKKyAgICBpbmxpbmUgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGJ5
dGVzKCkgY29uc3Q7CisKICAgICB2b2lkIG1ha2VTaGFyZWQoKTsKICAgICB2b2lkIHNldFNoYXJp
bmdNb2RlKEFycmF5QnVmZmVyU2hhcmluZ01vZGUpOwogICAgIGlubGluZSBib29sIGlzU2hhcmVk
KCkgY29uc3Q7CkBAIC0xOTcsNiArMjAzLDE2IEBAIHVuc2lnbmVkIEFycmF5QnVmZmVyOjpieXRl
TGVuZ3RoKCkgY29uc3QKICAgICByZXR1cm4gbV9jb250ZW50cy5zaXplSW5CeXRlcygpOwogfQog
CitTcGFuPHN0ZDo6Ynl0ZT4gQXJyYXlCdWZmZXI6OndyaXRhYmxlQnl0ZXMoKQoreworICAgIHJl
dHVybiBtX2NvbnRlbnRzLndyaXRhYmxlQnl0ZXMoKTsKK30KKworU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IEFycmF5QnVmZmVyOjpieXRlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGVudHMu
Ynl0ZXMoKTsKK30KKwogYm9vbCBBcnJheUJ1ZmZlcjo6aXNTaGFyZWQoKSBjb25zdAogewogICAg
IHJldHVybiBtX2NvbnRlbnRzLmlzU2hhcmVkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTg2LDYgKzg2LDkgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgYnl0ZUxlbmd0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZUxlbmd0aDsgfQogCisgICAgU3BhbjxzdGQ6OmJ5dGU+
IHdyaXRhYmxlQnl0ZXMoKSB7IHJldHVybiB7IHN0YXRpY19jYXN0PHN0ZDo6Ynl0ZSo+KGRhdGEo
KSksIGJ5dGVMZW5ndGgoKSB9OyB9CisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGJ5dGVzKCkg
Y29uc3QgeyByZXR1cm4geyBzdGF0aWNfY2FzdDxjb25zdCBzdGQ6OmJ5dGUqPihkYXRhKCkpLCBi
eXRlTGVuZ3RoKCkgfTsgfQorCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXREZXRhY2hh
YmxlKGJvb2wpOwogICAgIGJvb2wgaXNEZXRhY2hhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc0Rl
dGFjaGFibGU7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQ
YXlsb2FkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
YWNoZVBheWxvYWQuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYWNoZVBheWxvYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwyNyArMzAs
MjMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIENhY2hlUGF5bG9hZCBDYWNoZVBheWxvYWQ6Om1ha2VN
YXBwZWRQYXlsb2FkKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYgZGF0YSkKIHsKLSAgICBy
ZXR1cm4gQ2FjaGVQYXlsb2FkKHRydWUsIGRhdGEubGVha0hhbmRsZSgpLCBkYXRhLnNpemUoKSk7
CisgICAgcmV0dXJuIENhY2hlUGF5bG9hZCh0cnVlLCBkYXRhLmxlYWtIYW5kbGUoKSk7CiB9CiAK
IENhY2hlUGF5bG9hZCBDYWNoZVBheWxvYWQ6Om1ha2VNYWxsb2NQYXlsb2FkKE1hbGxvY1B0cjx1
aW50OF90LCBWTU1hbGxvYz4mJiBkYXRhLCBzaXplX3Qgc2l6ZSkKIHsKLSAgICByZXR1cm4gQ2Fj
aGVQYXlsb2FkKGZhbHNlLCBkYXRhLmxlYWtQdHIoKSwgc2l6ZSk7CisgICAgcmV0dXJuIENhY2hl
UGF5bG9hZChmYWxzZSwgYXNXcml0YWJsZUJ5dGVzKFNwYW4geyBkYXRhLmxlYWtQdHIoKSwgc2l6
ZSB9KSk7CiB9CiAKIENhY2hlUGF5bG9hZCBDYWNoZVBheWxvYWQ6Om1ha2VFbXB0eVBheWxvYWQo
KQogewotICAgIHJldHVybiBDYWNoZVBheWxvYWQodHJ1ZSwgbnVsbHB0ciwgMCk7CisgICAgcmV0
dXJuIENhY2hlUGF5bG9hZCh0cnVlLCB7IH0pOwogfQogCiBDYWNoZVBheWxvYWQ6OkNhY2hlUGF5
bG9hZChDYWNoZVBheWxvYWQmJiBvdGhlcikKIHsKLSAgICBtX21hcHBlZCA9IG90aGVyLm1fbWFw
cGVkOwotICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKLSAgICBtX2RhdGEgPSBvdGhlci5tX2Rh
dGE7Ci0gICAgb3RoZXIubV9tYXBwZWQgPSBmYWxzZTsKLSAgICBvdGhlci5tX2RhdGEgPSBudWxs
cHRyOwotICAgIG90aGVyLm1fc2l6ZSA9IDA7CisgICAgbV9tYXBwZWQgPSBzdGQ6OmV4Y2hhbmdl
KG90aGVyLm1fbWFwcGVkLCBmYWxzZSk7CisgICAgbV9kYXRhID0gc3RkOjpleGNoYW5nZShvdGhl
ci5tX2RhdGEsIHsgfSk7CiB9CiAKIENhY2hlUGF5bG9hZDo6fkNhY2hlUGF5bG9hZCgpCkBAIC02
NywxMiArNjMsMTMgQEAgQ2FjaGVQYXlsb2FkJiBDYWNoZVBheWxvYWQ6Om9wZXJhdG9yPShDYQog
CiB2b2lkIENhY2hlUGF5bG9hZDo6ZnJlZURhdGEoKQogewotICAgIGlmICghbV9kYXRhKQorICAg
IGlmICghbV9kYXRhLmRhdGEoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX21hcHBlZCkg
ewotICAgICAgICBGaWxlU3lzdGVtOjp1bm1hcFZpZXdPZkZpbGUobV9kYXRhLCBtX3NpemUpOwot
ICAgIH0gZWxzZQotICAgICAgICBmYXN0RnJlZShtX2RhdGEpOworCisgICAgaWYgKG1fbWFwcGVk
KQorICAgICAgICBGaWxlU3lzdGVtOjp1bm1hcFZpZXdPZkZpbGUobV9kYXRhKTsKKyAgICBlbHNl
CisgICAgICAgIGZhc3RGcmVlKG1fZGF0YS5kYXRhKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlUGF5bG9hZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlUGF5bG9hZC5o
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNo
ZVBheWxvYWQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIlZN
LmgiCiAjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KICNpbmNsdWRlIDx3dGYvTWFsbG9jUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQxLDIy
ICs0MiwyMCBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkNhY2hlUGF5bG9hZCgp
OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIENhY2hlUGF5bG9hZCYgb3BlcmF0b3I9KENhY2hlUGF5
bG9hZCYmIG90aGVyKTsKIAotICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEoKSBjb25zdCB7IHJldHVy
biBtX2RhdGE7IH0KLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQor
ICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0
PHVpbnQ4X3QqPihtX2RhdGEuZGF0YSgpKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9kYXRhLnNpemUoKTsgfQogCiBwcml2YXRlOgotICAgIENhY2hlUGF5bG9hZChib29s
IG1hcHBlZCwgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpCisgICAgQ2FjaGVQYXlsb2FkKGJvb2wg
bWFwcGVkLCBTcGFuPHN0ZDo6Ynl0ZT4gZGF0YSkKICAgICAgICAgOiBtX21hcHBlZChtYXBwZWQp
Ci0gICAgICAgICwgbV9zaXplKHNpemUpCi0gICAgICAgICwgbV9kYXRhKHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihkYXRhKSkKKyAgICAgICAgLCBtX2RhdGEoZGF0YSkKICAgICB7CiAgICAgfQogCiAg
ICAgdm9pZCBmcmVlRGF0YSgpOwogCiAgICAgYm9vbCBtX21hcHBlZDsKLSAgICBzaXplX3QgbV9z
aXplOwotICAgIHVpbnQ4X3QqIG1fZGF0YTsKKyAgICBTcGFuPHN0ZDo6Ynl0ZT4gbV9kYXRhOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtU3RyZWFtaW5nUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtU3RyZWFtaW5nUGFyc2VyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2MSw3ICsyNjEsNyBAQCBhdXRvIFN0cmVhbWluZ1BhcnNlcjo6YWRkQnl0
ZXMoY29uc3QgdWluCiAgICAgfQogCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnVzZUVhZ2Vy
V2ViQXNzZW1ibHlNb2R1bGVIYXNoaW5nKCkpKQotICAgICAgICBtX2hhc2hlci5hZGRCeXRlcyhi
eXRlcywgYnl0ZXNTaXplKTsKKyAgICAgICAgbV9oYXNoZXIuYWRkQnl0ZXMoYXNCeXRlcyhTcGFu
IHsgYnl0ZXMsIGJ5dGVzU2l6ZSB9ICkpOwogCiAgICAgc2l6ZV90IG9mZnNldEluQnl0ZXMgPSAw
OwogICAgIHdoaWxlICh0cnVlKSB7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2OCBAQAorMjAyMS0wNi0x
MSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRvcHQgU3BhbiBp
biBtb3JlIHBsYWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgW1dJUF0KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUlt
cGw6Ok1hcHBlZEZpbGVEYXRhOjp+TWFwcGVkRmlsZURhdGEpOgorICAgICAgICAoV1RGOjpGaWxl
U3lzdGVtSW1wbDo6TWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5kbGUpOgorICAgICAgICAoV1RG
OjpGaWxlU3lzdGVtSW1wbDo6dW5tYXBWaWV3T2ZGaWxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5
c3RlbUltcGw6Om1hcFRvRmlsZSk6CisgICAgICAgICogd3RmL0ZpbGVTeXN0ZW0uaDoKKyAgICAg
ICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpvcGVyYXRvciBib29sIGNv
bnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpkYXRh
IGNvbnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjps
ZWFrSGFuZGxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRh
OjpNYXBwZWRGaWxlRGF0YSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpNYXBwZWRG
aWxlRGF0YTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBl
ZEZpbGVEYXRhOjpzaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisg
ICAgICAgICogd3RmL1NIQTEuY3BwOgorICAgICAgICAoV1RGOjpTSEExOjphZGRCeXRlcyk6Cisg
ICAgICAgIChXVEY6OlNIQTE6OmZpbmFsaXplKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6U0hB
MTo6cHJvY2Vzc0Jsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6U0hBMTo6cmVzZXQpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpTSEExOjpoZXhEaWdlc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpTSEExOjpjb21wdXRlSGV4RGlnZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYv
U0hBMS5oOgorICAgICAgICAoV1RGOjpTSEExOjphZGRCeXRlcyk6CisgICAgICAgICogd3RmL1Zl
Y3Rvci5oOgorICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmNwcDoK
KyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPENTdHJpbmc+OjplbmNvZGUpOgorICAg
ICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8Q1N0cmluZz46OmRlY29kZSk6CisgICAgICAg
IChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTdHJpbmc+OjplbmNvZGUpOgorICAgICAgICAoV1RG
OjpQZXJzaXN0ZW5jZTo6ZGVjb2RlU3RyaW5nVGV4dCk6CisgICAgICAgIChXVEY6OlBlcnNpc3Rl
bmNlOjpDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0
ZW5jZTo6Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKToKKyAgICAgICAgKiB3dGYvcGVyc2lz
dGVuY2UvUGVyc2lzdGVudENvZGVycy5oOgorICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZS9QZXJz
aXN0ZW50RGVjb2Rlci5jcHA6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjpE
ZWNvZGVyKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXI6OmJ1ZmZlclBvaW50
ZXJGb3JEaXJlY3RSZWFkKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXI6OmRl
Y29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVy
Ojp2ZXJpZnlDaGVja3N1bSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjp+
RGVjb2Rlcik6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRE
ZWNvZGVyLmg6CisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmNw
cDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6Omdyb3cpOgorICAgICAgICAo
V1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKToKKyAgICAg
ICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YSk6Cisg
ICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjplbmNvZGVOdW1iZXIpOgorICAgICAg
ICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6ZW5jb2RlQ2hlY2tzdW0pOgorICAgICAgICAo
V1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6RW5jb2Rlcik6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjp+RW5jb2Rlcik6IERlbGV0ZWQuCisgICAgICAgICog
d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmg6CisgICAgICAgIChXVEY6OlBlcnNp
c3RlbmNlOjpFbmNvZGVyOjpidWZmZXIgY29uc3QpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5j
ZTo6RW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIpOgorICAgICAgICAoV1RGOjpQZXJz
aXN0ZW5jZTo6RW5jb2Rlcjo6YnVmZmVyU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
d3RmL3RleHQvQmFzZTY0Lmg6CisgICAgICAgIChXVEY6OmJhc2U2NEVuY29kZVRvVmVjdG9yKToK
KyAgICAgICAgKFdURjo6YmFzZTY0RW5jb2RlVG9TdHJpbmcpOgorICAgICAgICAqIHd0Zi90ZXh0
L0NTdHJpbmcuaDoKKwogMjAyMS0wNi0xMSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBBZGQgV2Vha0hhc2hNYXAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0ZpbGVT
eXN0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3BwCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzE5LDkgKzMxOSw5IEBAIGJvb2wgZXhjbHVkZUZyb21CYWNrdXAoY29uc3Qg
U3RyaW5nJikKIAogTWFwcGVkRmlsZURhdGE6On5NYXBwZWRGaWxlRGF0YSgpCiB7Ci0gICAgaWYg
KCFtX2ZpbGVEYXRhKQorICAgIGlmICghbV9maWxlRGF0YS5kYXRhKCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICB1bm1hcFZpZXdPZkZpbGUobV9maWxlRGF0YSwgbV9maWxlU2l6ZSk7CisgICAgdW5t
YXBWaWV3T2ZGaWxlKG1fZmlsZURhdGEpOwogfQogCiBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmls
ZURhdGEoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgTWFwcGVkRmlsZU1vZGUgbWFwTW9kZSwgYm9v
bCYgc3VjY2VzcykKQEAgLTM4MywxNCArMzgzLDEzIEBAIGJvb2wgTWFwcGVkRmlsZURhdGE6Om1h
cEZpbGVIYW5kbGUoUGxhdGYKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG1f
ZmlsZURhdGEgPSBkYXRhOwotICAgIG1fZmlsZVNpemUgPSBzaXplOworICAgIG1fZmlsZURhdGEg
PSBTcGFuIHsgcmVpbnRlcnByZXRfY2FzdDxzdGQ6OmJ5dGUqPihkYXRhKSwgc2l6ZSB9OwogICAg
IHJldHVybiB0cnVlOwogfQogCi1ib29sIHVubWFwVmlld09mRmlsZSh2b2lkKiBidWZmZXIsIHNp
emVfdCBzaXplKQorYm9vbCB1bm1hcFZpZXdPZkZpbGUoU3BhbjxzdGQ6OmJ5dGU+IGRhdGEpCiB7
Ci0gICAgcmV0dXJuICFtdW5tYXAoYnVmZmVyLCBzaXplKTsKKyAgICByZXR1cm4gIW11bm1hcChk
YXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwogfQogCiAjZW5kaWYKQEAgLTQzOCw3ICs0MzcsNyBA
QCBTdHJpbmcgY3JlYXRlVGVtcG9yYXJ5WmlwQXJjaGl2ZShjb25zdCBTCiB9CiAjZW5kaWYKIAot
TWFwcGVkRmlsZURhdGEgbWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVz
U2l6ZSwgRnVuY3Rpb248dm9pZChjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBz
aXplX3QpPiYpPiYmIGFwcGx5LCBQbGF0Zm9ybUZpbGVIYW5kbGUqIG91dHB1dEhhbmRsZSkKK01h
cHBlZEZpbGVEYXRhIG1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIHNpemVfdCBieXRlc1Np
emUsIEZ1bmN0aW9uPHZvaWQoY29uc3QgRnVuY3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0
ZT4pPiYpPiYmIGFwcGx5LCBQbGF0Zm9ybUZpbGVIYW5kbGUqIG91dHB1dEhhbmRsZSkKIHsKICAg
ICBjb25zdGV4cHIgYm9vbCBmYWlsSWZGaWxlRXhpc3RzID0gdHJ1ZTsKICAgICBhdXRvIGhhbmRs
ZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6
UmVhZFdyaXRlLCBGaWxlU3lzdGVtOjpGaWxlQWNjZXNzUGVybWlzc2lvbjo6VXNlciwgZmFpbElm
RmlsZUV4aXN0cyk7CkBAIC00NTUsMTIgKzQ1NCwxMiBAQCBNYXBwZWRGaWxlRGF0YSBtYXBUb0Zp
bGUoY29uc3QgU3RyaW5nJiBwCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgdm9p
ZCogbWFwID0gY29uc3RfY2FzdDx2b2lkKj4obWFwcGVkRmlsZS5kYXRhKCkpOwotICAgIHVpbnQ4
X3QqIG1hcERhdGEgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4obWFwKTsKKyAgICBhdXRvIG1hcCA9
IG1hcHBlZEZpbGUuZGF0YSgpLmRhdGEoKTsKKyAgICBhdXRvIG1hcERhdGEgPSBtYXA7CiAKLSAg
ICBhcHBseShbJm1hcERhdGFdKGNvbnN0IHVpbnQ4X3QqIGNodW5rLCBzaXplX3QgY2h1bmtTaXpl
KSB7Ci0gICAgICAgIG1lbWNweShtYXBEYXRhLCBjaHVuaywgY2h1bmtTaXplKTsKLSAgICAgICAg
bWFwRGF0YSArPSBjaHVua1NpemU7CisgICAgYXBwbHkoWyZtYXBEYXRhXShTcGFuPGNvbnN0IHN0
ZDo6Ynl0ZT4gY2h1bmspIHsKKyAgICAgICAgbWVtY3B5KG1hcERhdGEsIGNodW5rLmRhdGEoKSwg
Y2h1bmsuc2l6ZSgpKTsKKyAgICAgICAgbWFwRGF0YSArPSBjaHVuay5zaXplKCk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0pOwogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVt
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtMjEwLDcgKzIxMSw3IEBAIFdURl9FWFBPUlRf
UFJJVkFURSBTdHJpbmcgcmVhbFBhdGgoY29uc3QKIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGlz
U2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChjb25zdCBTdHJpbmcmKTsKIFdURl9FWFBPUlRfUFJJ
VkFURSB2b2lkIG1ha2VTYWZlVG9Vc2VNZW1vcnlNYXBGb3JQYXRoKGNvbnN0IFN0cmluZyYpOwog
Ci1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCB1bm1hcFZpZXdPZkZpbGUodm9pZCogYnVmZmVyLCBz
aXplX3QpOworV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgdW5tYXBWaWV3T2ZGaWxlKFNwYW48c3Rk
OjpieXRlPik7CiAKIGNsYXNzIE1hcHBlZEZpbGVEYXRhIHsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKQEAgLTIyMywxNyArMjI0LDE1IEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgfk1hcHBlZEZpbGVEYXRhKCk7CiAgICAgTWFwcGVkRmlsZURhdGEmIG9wZXJhdG9yPShN
YXBwZWRGaWxlRGF0YSYmKTsKIAotICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7
IHJldHVybiAhIW1fZmlsZURhdGE7IH0KLSAgICBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3QgeyBy
ZXR1cm4gbV9maWxlRGF0YTsgfQotICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBt
X2ZpbGVTaXplOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJu
ICEhbV9maWxlRGF0YS5kYXRhKCk7IH0KKyAgICBTcGFuPHN0ZDo6Ynl0ZT4gZGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fZmlsZURhdGE7IH0KIAotICAgIHZvaWQqIGxlYWtIYW5kbGUoKSB7IHJldHVy
biBzdGQ6OmV4Y2hhbmdlKG1fZmlsZURhdGEsIG51bGxwdHIpOyB9CisgICAgV0FSTl9VTlVTRURf
UkVUVVJOIFNwYW48c3RkOjpieXRlPiBsZWFrSGFuZGxlKCkgeyByZXR1cm4gc3RkOjpleGNoYW5n
ZShtX2ZpbGVEYXRhLCB7IH0pOyB9CiAKIHByaXZhdGU6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRF
IGJvb2wgbWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUsIEZpbGVPcGVuTW9kZSwgTWFw
cGVkRmlsZU1vZGUpOwogCi0gICAgdm9pZCogbV9maWxlRGF0YSB7IG51bGxwdHIgfTsKLSAgICB1
bnNpZ25lZCBtX2ZpbGVTaXplIHsgMCB9OworICAgIFNwYW48c3RkOjpieXRlPiBtX2ZpbGVEYXRh
OwogfTsKIAogaW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShQbGF0Zm9ybUZp
bGVIYW5kbGUgaGFuZGxlLCBNYXBwZWRGaWxlTW9kZSBtYXBNb2RlLCBib29sJiBzdWNjZXNzKQpA
QCAtMjQ3LDIxICsyNDYsMTkgQEAgaW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0
YShQbAogfQogCiBpbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKE1hcHBlZEZp
bGVEYXRhJiYgb3RoZXIpCi0gICAgOiBtX2ZpbGVEYXRhKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9m
aWxlRGF0YSwgbnVsbHB0cikpCi0gICAgLCBtX2ZpbGVTaXplKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIu
bV9maWxlU2l6ZSwgMCkpCisgICAgOiBtX2ZpbGVEYXRhKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9m
aWxlRGF0YSwgeyB9KSkKIHsKIH0KIAogaW5saW5lIE1hcHBlZEZpbGVEYXRhJiBNYXBwZWRGaWxl
RGF0YTo6b3BlcmF0b3I9KE1hcHBlZEZpbGVEYXRhJiYgb3RoZXIpCiB7Ci0gICAgbV9maWxlRGF0
YSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9maWxlRGF0YSwgbnVsbHB0cik7Ci0gICAgbV9maWxl
U2l6ZSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9maWxlU2l6ZSwgMCk7CisgICAgbV9maWxlRGF0
YSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9maWxlRGF0YSwgeyB9KTsKICAgICByZXR1cm4gKnRo
aXM7CiB9CiAKIC8vIFRoaXMgY3JlYXRlcyB0aGUgZGVzdGluYXRpb24gZmlsZSwgbWFwcyBpdCwg
d3JpdGUgdGhlIHByb3ZpZGVkIGRhdGEgdG8gaXQgYW5kIHJldHVybnMgdGhlIG1hcHBlZCBmaWxl
LgogLy8gVGhpcyBmdW5jdGlvbiBmYWlscyBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgZmlsZSBhdCB0
aGUgZGVzdGluYXRpb24gcGF0aC4KLVdURl9FWFBPUlRfUFJJVkFURSBNYXBwZWRGaWxlRGF0YSBt
YXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBzaXplX3QgYnl0ZXNTaXplLCBGdW5jdGlvbjx2
b2lkKGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCosIHNpemVfdCk+Jik+JiYgYXBw
bHksIFBsYXRmb3JtRmlsZUhhbmRsZSogPSBudWxscHRyKTsKK1dURl9FWFBPUlRfUFJJVkFURSBN
YXBwZWRGaWxlRGF0YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBzaXplX3QgYnl0ZXNT
aXplLCBGdW5jdGlvbjx2b2lkKGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+KT4mKT4mJiBhcHBseSwgUGxhdGZvcm1GaWxlSGFuZGxlKiA9IG51bGxwdHIpOwogCiB9IC8v
IG5hbWVzcGFjZSBGaWxlU3lzdGVtSW1wbAogfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9TSEExLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TSEExLmNw
cAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvU0hBMS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDEwICs0NiwxMCBAQCBTSEExOjpTSEExKCkKICAgICBBTExPV19ERVBSRUNB
VEVEX0RFQ0xBUkFUSU9OU19FTkQKIH0KIAotdm9pZCBTSEExOjphZGRCeXRlcyhjb25zdCB1aW50
OF90KiBpbnB1dCwgc2l6ZV90IGxlbmd0aCkKK3ZvaWQgU0hBMTo6YWRkQnl0ZXMoU3Bhbjxjb25z
dCBzdGQ6OmJ5dGU+IGlucHV0KQogewogICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05T
X0JFR0lOCi0gICAgQ0NfU0hBMV9VcGRhdGUoJm1fY29udGV4dCwgaW5wdXQsIGxlbmd0aCk7Cisg
ICAgQ0NfU0hBMV9VcGRhdGUoJm1fY29udGV4dCwgaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkp
OwogICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAogfQogCkBAIC0xMDEsMTEg
KzEwMSwxMSBAQCBTSEExOjpTSEExKCkKICAgICByZXNldCgpOwogfQogCi12b2lkIFNIQTE6OmFk
ZEJ5dGVzKGNvbnN0IHVpbnQ4X3QqIGlucHV0LCBzaXplX3QgbGVuZ3RoKQordm9pZCBTSEExOjph
ZGRCeXRlcyhTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCiB7Ci0gICAgd2hpbGUgKGxlbmd0
aC0tKSB7CisgICAgZm9yIChhdXRvIGJ5dGUgOiBpbnB1dCkgewogICAgICAgICBBU1NFUlQobV9j
dXJzb3IgPCA2NCk7Ci0gICAgICAgIG1fYnVmZmVyW21fY3Vyc29yKytdID0gKmlucHV0Kys7Cisg
ICAgICAgIG1fYnVmZmVyW21fY3Vyc29yKytdID0gc3RkOjp0b19pbnRlZ2VyPHVpbnQ4X3Q+KGJ5
dGUpOwogICAgICAgICArK21fdG90YWxCeXRlczsKICAgICAgICAgaWYgKG1fY3Vyc29yID09IDY0
KQogICAgICAgICAgICAgcHJvY2Vzc0Jsb2NrKCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TSEEx
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU0hBMS5oCShyZXZpc2lvbiAyNzg4MDkp
CisrKyBTb3VyY2UvV1RGL3d0Zi9TSEExLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcg
QEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8YXJyYXk+CisjaW5jbHVkZSA8d3RmL1NwYW4u
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgogCkBAIC00NSwxNSArNDYsOCBAQCBjbGFzcyBTSEExIHsKIHB1YmxpYzoKICAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgU0hBMSgpOwogCi0gICAgdm9pZCBhZGRCeXRlcyhjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIGlucHV0KQotICAgIHsKLSAgICAgICAgYWRkQnl0ZXMoaW5wdXQuZGF0YSgpLCBpbnB1
dC5zaXplKCkpOwotICAgIH0KLSAgICB2b2lkIGFkZEJ5dGVzKGNvbnN0IENTdHJpbmcmIGlucHV0
KQotICAgIHsKLSAgICAgICAgYWRkQnl0ZXMoaW5wdXQuZGF0YUFzVUludDhQdHIoKSwgaW5wdXQu
bGVuZ3RoKCkpOwotICAgIH0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRCeXRlcyhj
b25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGxlbmd0aCk7CisgICAgdm9pZCBhZGRCeXRlcyhj
b25zdCBDU3RyaW5nJiBpbnB1dCkgeyBhZGRCeXRlcyhpbnB1dC5ieXRlcygpKTsgfQorICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIGFkZEJ5dGVzKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAK
ICAgICAvLyBTaXplIG9mIHRoZSBTSEExIGhhc2gKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIGNvbnN0ZXhwciBzaXplX3QgaGFzaFNpemUgPSAyMDsKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L1ZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
NjEzLDYgKzYxMyw3IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKICAgICB0eXBlZGVmIFQgVmFsdWVU
eXBlOworICAgIHR5cGVkZWYgVCB2YWx1ZV90eXBlOwogCiAgICAgdHlwZWRlZiBUKiBpdGVyYXRv
cjsKICAgICB0eXBlZGVmIGNvbnN0IFQqIGNvbnN0X2l0ZXJhdG9yOwpJbmRleDogU291cmNlL1dU
Ri93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5jcHAJKHJldmlzaW9uIDI3
ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgQ29kZXI8Q1N0cmluZz46OmVu
Y29kZShFbmNvZGVyJiBlbmMKIAogICAgIHVpbnQzMl90IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgo
KTsKICAgICBlbmNvZGVyIDw8IGxlbmd0aDsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3Ro
RGF0YShzdHJpbmcuZGF0YUFzVUludDhQdHIoKSwgbGVuZ3RoKTsKKyAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShzdHJpbmcuYnl0ZXMoKSk7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8Q1N0
cmluZz4gQ29kZXI8Q1N0cmluZz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQpAQCAtNzgsNyAr
NzgsNyBAQCBzdGQ6Om9wdGlvbmFsPENTdHJpbmc+IENvZGVyPENTdHJpbmc+OjpkCiAKICAgICBj
aGFyKiBidWZmZXI7CiAgICAgQ1N0cmluZyBzdHJpbmcgPSBDU3RyaW5nOjpuZXdVbmluaXRpYWxp
emVkKCpsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3Ro
RGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIpLCAqbGVuZ3RoKSkKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyByZWludGVycHJldF9jYXN0
PHN0ZDo6Ynl0ZSo+KGJ1ZmZlciksICpsZW5ndGggfSkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CiAKICAgICByZXR1cm4gc3RyaW5nOwpAQCAtOTgsOSArOTgsOSBAQCB2b2lkIENvZGVy
PFN0cmluZz46OmVuY29kZShFbmNvZGVyJiBlbmNvCiAgICAgZW5jb2RlciA8PCBsZW5ndGggPDwg
aXM4Qml0OwogCiAgICAgaWYgKGlzOEJpdCkKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoc3RyaW5nLmNoYXJhY3RlcnM4KCksIGxlbmd0aCk7CisgICAgICAgIGVuY29kZXIu
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBzdHJpbmcuY2hhcmFjdGVyczgoKSwgbGVuZ3Ro
IH0pOwogICAgIGVsc2UKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnMxNigpKSwgbGVu
Z3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKFNwYW4geyByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzdHJpbmcuY2hhcmFj
dGVyczE2KCkpLCBsZW5ndGggKiBzaXplb2YoVUNoYXIpIH0pOwogfQogCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4KQEAgLTExMiw3ICsxMTIsNyBAQCBzdGF0aWMgaW5saW5lIHN0
ZDo6b3B0aW9uYWw8U3RyaW5nPiBkZWNvCiAKICAgICBDaGFyYWN0ZXJUeXBlKiBidWZmZXI7CiAg
ICAgU3RyaW5nIHN0cmluZyA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1
ZmZlcik7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPihidWZmZXIpLCBsZW5ndGggKiBzaXplb2YoQ2hhcmFjdGVyVHlwZSkp
KQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IHJlaW50ZXJw
cmV0X2Nhc3Q8c3RkOjpieXRlKj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJhY3RlclR5
cGUpIH0pKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIAogICAgIHJldHVybiBz
dHJpbmc7CkBAIC0xNDIsMTMgKzE0MiwxMyBAQCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gQ29kZXI8
U3RyaW5nPjo6ZGVjCiAKIHZvaWQgQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIsIGNvbnN0IFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQogewotICAgIGVuY29kZXIuZW5j
b2RlRml4ZWRMZW5ndGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpKTsKKyAgICBl
bmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3QpOwogfQogCiBzdGQ6Om9wdGlvbmFs
PFNIQTE6OkRpZ2VzdD4gQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCiB7CiAgICAgU0hBMTo6RGlnZXN0IHRtcDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4
ZWRMZW5ndGhEYXRhKHRtcC5kYXRhKCksIHNpemVvZih0bXApKSkKKyAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyB0bXAgfSkpCiAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CiAgICAgcmV0dXJuIHRtcDsKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNp
c3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9w
ZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJj
ZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTQ5LDcgKzE0OSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2kKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQogICAgIHsKICAgICAgICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDx1aW50NjRfdD4odmVjdG9yLnNpemUoKSk7Ci0gICAgICAgIGVuY29kZXIuZW5j
b2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZlY3Rv
ci5kYXRhKCkpLCB2ZWN0b3Iuc2l6ZSgpICogc2l6ZW9mKFQpKTsKKyAgICAgICAgZW5jb2Rlci5l
bmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IHZlY3RvciB9KTsKICAgICB9CiAgICAgCiAgICAg
c3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pj4gZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCkBAIC0xNzMsNyArMTczLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IGlubGluZUNhcGFjaQogICAgICAgICBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IHRl
bXA7CiAgICAgICAgIHRlbXAuZ3JvdyhzaXplKTsKIAotICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHRlbXAuZGF0YSgp
KSwgc2l6ZSAqIHNpemVvZihUKSkpCisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExl
bmd0aERhdGEoU3BhbiB7IHRlbXAgfSkpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwogCiAgICAgICAgIHJldHVybiB0ZW1wOwpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVu
Y2UvUGVyc2lzdGVudERlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3Bl
cnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSwyMyArMzEsMjYgQEAKIG5hbWVzcGFjZSBXVEYgewogbmFtZXNwYWNlIFBlcnNp
c3RlbmNlIHsKIAotRGVjb2Rlcjo6RGVjb2Rlcihjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVf
dCBidWZmZXJTaXplKQotICAgIDogbV9idWZmZXIoYnVmZmVyKQotICAgICwgbV9idWZmZXJQb3Np
dGlvbihidWZmZXIpCi0gICAgLCBtX2J1ZmZlckVuZChidWZmZXIgKyBidWZmZXJTaXplKQorRGVj
b2Rlcjo6RGVjb2RlcihTcGFuPGNvbnN0IHVpbnQ4X3Q+IGJ1ZmZlcikKKyAgICA6IERlY29kZXIo
YXNCeXRlcyhidWZmZXIpKQogewogfQogCi1EZWNvZGVyOjp+RGVjb2RlcigpCitEZWNvZGVyOjpE
ZWNvZGVyKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBidWZmZXIpCisgICAgOiBtX2J1ZmZlcihidWZm
ZXIuZGF0YSgpKQorICAgICwgbV9idWZmZXJQb3NpdGlvbihidWZmZXIuZGF0YSgpKQorICAgICwg
bV9idWZmZXJFbmQoYnVmZmVyLmRhdGEoKSArIGJ1ZmZlci5zaXplKCkpCiB7CiB9CiAKK0RlY29k
ZXI6On5EZWNvZGVyKCkgPSBkZWZhdWx0OworCiBib29sIERlY29kZXI6OmJ1ZmZlcklzTGFyZ2VF
bm91Z2hUb0NvbnRhaW4oc2l6ZV90IHNpemUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHNpemUgPD0g
c3RhdGljX2Nhc3Q8c2l6ZV90PihtX2J1ZmZlckVuZCAtIG1fYnVmZmVyUG9zaXRpb24pOwogfQog
Ci1jb25zdCB1aW50OF90KiBEZWNvZGVyOjpidWZmZXJQb2ludGVyRm9yRGlyZWN0UmVhZChzaXpl
X3Qgc2l6ZSkKK2NvbnN0IHN0ZDo6Ynl0ZSogRGVjb2Rlcjo6YnVmZmVyUG9pbnRlckZvckRpcmVj
dFJlYWQoc2l6ZV90IHNpemUpCiB7CiAgICAgaWYgKCFidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250
YWluKHNpemUpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTU1LDE2ICs1OCwxNiBAQCBj
b25zdCB1aW50OF90KiBEZWNvZGVyOjpidWZmZXJQb2ludGVyRm9yCiAgICAgYXV0byBkYXRhID0g
bV9idWZmZXJQb3NpdGlvbjsKICAgICBtX2J1ZmZlclBvc2l0aW9uICs9IHNpemU7CiAKLSAgICBF
bmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhLCBzaXplKTsKKyAgICBF
bmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBTcGFuIHsgZGF0YSwgc2l6ZSB9
KTsKICAgICByZXR1cm4gZGF0YTsKIH0KIAotYm9vbCBEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0
aERhdGEodWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCitib29sIERlY29kZXI6OmRlY29kZUZp
eGVkTGVuZ3RoRGF0YShTcGFuPHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKLSAgICBhdXRvIGJ1ZmZlciA9
IGJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFkKHNpemUpOworICAgIGF1dG8gYnVmZmVyID0gYnVm
ZmVyUG9pbnRlckZvckRpcmVjdFJlYWQoZGF0YS5zaXplKCkpOwogICAgIGlmICghYnVmZmVyKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbWVtY3B5KGRhdGEsIGJ1ZmZlciwgc2l6ZSk7Cisg
ICAgbWVtY3B5KGRhdGEuZGF0YSgpLCBidWZmZXIsIGRhdGEuc2l6ZSgpKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtMTM5LDcgKzE0Miw3IEBAIGJvb2wgRGVjb2Rlcjo6dmVyaWZ5Q2hlY2tz
dW0oKQogICAgIG1fc2hhMS5jb21wdXRlSGFzaChjb21wdXRlZEhhc2gpOwogCiAgICAgU0hBMTo6
RGlnZXN0IHNhdmVkSGFzaDsKLSAgICBpZiAoIWRlY29kZUZpeGVkTGVuZ3RoRGF0YShzYXZlZEhh
c2guZGF0YSgpLCBzaXplb2Yoc2F2ZWRIYXNoKSkpCisgICAgaWYgKCFkZWNvZGVGaXhlZExlbmd0
aERhdGEoU3BhbiB7IHNhdmVkSGFzaCB9KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
cmV0dXJuIGNvbXB1dGVkSGFzaCA9PSBzYXZlZEhhc2g7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9w
ZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmgJKHJldmlzaW9uIDI3ODgwOSkKKysr
IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+CiAj
aW5jbHVkZSA8d3RmL1NIQTEuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUgPHd0
Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC0z
NSw3ICszNiw4IEBAIG5hbWVzcGFjZSBQZXJzaXN0ZW5jZSB7CiBjbGFzcyBEZWNvZGVyIHsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgRGVjb2Rlcihjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKTsKKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVjb2RlcihTcGFuPGNvbnN0IHVpbnQ4X3Q+KTsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgRGVjb2RlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwogICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB+RGVjb2RlcigpOwogCiAgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fYnVmZmVyRW5kIC0gbV9idWZmZXI7IH0KQEAgLTQzLDcgKzQ1LDEzIEBAIHB1
YmxpYzoKIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCB2
ZXJpZnlDaGVja3N1bSgpOwogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIFdBUk5fVU5VU0VEX1JF
VFVSTiBib29sIGRlY29kZUZpeGVkTGVuZ3RoRGF0YSh1aW50OF90Kiwgc2l6ZV90KTsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlRml4ZWRMZW5n
dGhEYXRhKFNwYW48c3RkOjpieXRlPik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXpl
X3QgTj4KKyAgICBib29sIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPFQsIE4+IGRhdGEpCisg
ICAgeworICAgICAgICByZXR1cm4gZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGFzV3JpdGFibGVCeXRl
cyhkYXRhKSk7CisgICAgfQogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIERlY29kZXImIG9wZXJh
dG9yPj4oc3RkOjpvcHRpb25hbDxib29sPiYpOwogICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNv
ZGVyJiBvcGVyYXRvcj4+KHN0ZDo6b3B0aW9uYWw8dWludDhfdD4mKTsKQEAgLTg0LDcgKzkyLDcg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbnVtRWxlbWVudHMgPD0gc3RkOjpudW1lcmljX2xp
bWl0czxzaXplX3Q+OjptYXgoKSAvIHNpemVvZihUKSAmJiBidWZmZXJJc0xhcmdlRW5vdWdoVG9D
b250YWluKG51bUVsZW1lbnRzICogc2l6ZW9mKFQpKTsKICAgICB9CiAKLSAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgV0FSTl9VTlVTRURfUkVUVVJOIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlclBvaW50ZXJG
b3JEaXJlY3RSZWFkKHNpemVfdCBudW1CeXRlcyk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFdB
Uk5fVU5VU0VEX1JFVFVSTiBjb25zdCBzdGQ6OmJ5dGUqIGJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RS
ZWFkKHNpemVfdCBudW1CeXRlcyk7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJUENE
ZWNvZGVyID0gZmFsc2U7CiAKQEAgLTkyLDkgKzEwMCw5IEBAIHByaXZhdGU6CiAgICAgV1RGX0VY
UE9SVF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGJ1ZmZlcklzTGFyZ2VFbm91Z2hU
b0NvbnRhaW4oc2l6ZV90KSBjb25zdDsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiBEZWNv
ZGVyJiBkZWNvZGVOdW1iZXIoc3RkOjpvcHRpb25hbDxUeXBlPiYpOwogCi0gICAgY29uc3QgdWlu
dDhfdCogbV9idWZmZXI7Ci0gICAgY29uc3QgdWludDhfdCogbV9idWZmZXJQb3NpdGlvbjsKLSAg
ICBjb25zdCB1aW50OF90KiBtX2J1ZmZlckVuZDsKKyAgICBjb25zdCBzdGQ6OmJ5dGUqIG1fYnVm
ZmVyOworICAgIGNvbnN0IHN0ZDo6Ynl0ZSogbV9idWZmZXJQb3NpdGlvbjsKKyAgICBjb25zdCBz
dGQ6OmJ5dGUqIG1fYnVmZmVyRW5kOwogCiAgICAgU0hBMSBtX3NoYTE7CiB9OwpJbmRleDogU291
cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVu
Y29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwzNCArMzEsMzQgQEAKIG5hbWVzcGFjZSBX
VEYgewogbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAotRW5jb2Rlcjo6RW5jb2RlcigpCi17Ci19
Ci0KLUVuY29kZXI6On5FbmNvZGVyKCkKLXsKLX0KK0VuY29kZXI6OkVuY29kZXIoKSA9IGRlZmF1
bHQ7CitFbmNvZGVyOjp+RW5jb2RlcigpID0gZGVmYXVsdDsKIAotdWludDhfdCogRW5jb2Rlcjo6
Z3JvdyhzaXplX3Qgc2l6ZSkKK3N0ZDo6Ynl0ZSogRW5jb2Rlcjo6Z3JvdyhzaXplX3Qgc2l6ZSkK
IHsKICAgICBzaXplX3QgbmV3UG9zaXRpb24gPSBtX2J1ZmZlci5zaXplKCk7CiAgICAgbV9idWZm
ZXIuZ3JvdyhtX2J1ZmZlci5zaXplKCkgKyBzaXplKTsKICAgICByZXR1cm4gbV9idWZmZXIuZGF0
YSgpICsgbmV3UG9zaXRpb247CiB9CiAKLXZvaWQgRW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JE
YXRhKFNIQTEmIHNoYTEsIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQordm9pZCBF
bmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvckRhdGEoU0hBMSYgc2hhMSwgU3Bhbjxjb25zdCB1aW50
OF90PiBkYXRhKQoreworICAgIHJldHVybiB1cGRhdGVDaGVja3N1bUZvckRhdGEoc2hhMSwgYXNC
eXRlcyhkYXRhKSk7Cit9CisKK3ZvaWQgRW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNI
QTEmIHNoYTEsIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhKQogewogICAgIGF1dG8gdHlwZVNh
bHQgPSBTYWx0PHVpbnQ4X3QqPjo6dmFsdWU7Ci0gICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPigmdHlwZVNhbHQpLCBzaXplb2YodHlwZVNhbHQpKTsKLSAgICBzaGEx
LmFkZEJ5dGVzKGRhdGEsIHNpemUpOworICAgIHNoYTEuYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsg
JnR5cGVTYWx0LCAxIH0pKTsKKyAgICBzaGExLmFkZEJ5dGVzKGRhdGEpOwogfQogCi12b2lkIEVu
Y29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qg
c2l6ZSkKK3ZvaWQgRW5jb2Rlcjo6ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48Y29uc3Qgc3Rk
OjpieXRlPiBkYXRhKQogewotICAgIHVwZGF0ZUNoZWNrc3VtRm9yRGF0YShtX3NoYTEsIGRhdGEs
IHNpemUpOworICAgIHVwZGF0ZUNoZWNrc3VtRm9yRGF0YShtX3NoYTEsIGRhdGEpOwogCi0gICAg
dWludDhfdCogYnVmZmVyID0gZ3JvdyhzaXplKTsKLSAgICBtZW1jcHkoYnVmZmVyLCBkYXRhLCBz
aXplKTsKKyAgICBhdXRvKiBidWZmZXIgPSBncm93KGRhdGEuc2l6ZSgpKTsKKyAgICBtZW1jcHko
YnVmZmVyLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUeXBlPgpAQCAtNjYsNyArNjYsNyBAQCBFbmNvZGVyJiBFbmNvZGVyOjplbmNvZGVOdW1iZXIo
VHlwZSB2YWx1CiB7CiAgICAgRW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIobV9zaGEx
LCB2YWx1ZSk7CiAKLSAgICB1aW50OF90KiBidWZmZXIgPSBncm93KHNpemVvZihUeXBlKSk7Cisg
ICAgYXV0byogYnVmZmVyID0gZ3JvdyhzaXplb2YoVHlwZSkpOwogICAgIG1lbWNweShidWZmZXIs
ICZ2YWx1ZSwgc2l6ZW9mKFR5cGUpKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CkBAIC0xMjUsNyAr
MTI1LDcgQEAgdm9pZCBFbmNvZGVyOjplbmNvZGVDaGVja3N1bSgpCiB7CiAgICAgU0hBMTo6RGln
ZXN0IGhhc2g7CiAgICAgbV9zaGExLmNvbXB1dGVIYXNoKGhhc2gpOwotICAgIGVuY29kZUZpeGVk
TGVuZ3RoRGF0YShoYXNoLmRhdGEoKSwgaGFzaC5zaXplKCkpOworICAgIGVuY29kZUZpeGVkTGVu
Z3RoRGF0YShTcGFuIHsgaGFzaCB9KTsKIH0KIAogfQpJbmRleDogU291cmNlL1dURi93dGYvcGVy
c2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBT
b3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2lu
Y2x1ZGUgPHd0Zi9TSEExLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2Rlci5oPgog
CkBAIC00Myw3ICs0NCwxMyBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5FbmNv
ZGVyKCk7CiAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGVDaGVja3N1bSgpOwot
ICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShjb25zdCB1
aW50OF90Kiwgc2l6ZV90KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGVGaXhl
ZExlbmd0aERhdGEoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KTsKKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBOPgorICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48VCwg
Tj4gZGF0YSkKKyAgICB7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShhc0J5dGVzKGRh
dGEpKTsKKyAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90
PHN0ZDo6aXNfZW51bTxUPjo6dmFsdWU+KiA9IG51bGxwdHI+CiAgICAgRW5jb2RlciYgb3BlcmF0
b3I8PChjb25zdCBUJiB0KQpAQCAtNzAsMjMgKzc3LDIyIEBAIHB1YmxpYzoKICAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgRW5jb2RlciYgb3BlcmF0b3I8PChmbG9hdCk7CiAgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwoZG91YmxlKTsKIAotICAgIGNvbnN0IHVpbnQ4X3Qq
IGJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKTsgfQotICAgIHNpemVfdCBi
dWZmZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuc2l6ZSgpOyB9Ci0KLSAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBj
b25zdCB1aW50OF90Kiwgc2l6ZV90KTsKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnVmZmVy
KCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXI7IH0KKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBTcGFuPGNvbnN0IHVp
bnQ4X3Q+KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tz
dW1Gb3JEYXRhKFNIQTEmLCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwogICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBUeXBlPiBzdGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZvck51bWJlcihTSEExJiwg
VHlwZSk7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJUENFbmNvZGVyID0gZmFsc2U7
CiAKIHByaXZhdGU6Ci0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiBFbmNvZGVyJiBlbmNv
ZGVOdW1iZXIoVHlwZSk7CiAKLSAgICB1aW50OF90KiBncm93KHNpemVfdCk7CisgICAgc3RkOjpi
eXRlKiBncm93KHNpemVfdCk7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4gc3RydWN0
IFNhbHQ7CiAKLSAgICBWZWN0b3I8dWludDhfdCwgNDA5Nj4gbV9idWZmZXI7CisgICAgVmVjdG9y
PHN0ZDo6Ynl0ZSwgNDA5Nj4gbV9idWZmZXI7CiAgICAgU0hBMSBtX3NoYTE7CiB9OwogCkBAIC0x
MDYsOCArMTEyLDggQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+CiB2b2lkIEVuY29kZXI6OnVw
ZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKFNIQTEmIHNoYTEsIFR5cGUgdmFsdWUpCiB7CiAgICAgYXV0
byB0eXBlU2FsdCA9IFNhbHQ8VHlwZT46OnZhbHVlOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRl
cnByZXRfY2FzdDx1aW50OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7Ci0gICAg
c2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWUpLCBzaXplb2Yo
dmFsdWUpKTsKKyAgICBzaGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7ICZ0eXBlU2FsdCwgMSB9
KSk7CisgICAgc2hhMS5hZGRCeXRlcyhhc0J5dGVzKFNwYW4geyAmdmFsdWUsIDEgfSkpOwogfQog
CiB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9X
VEYvd3RmL3RleHQvQmFzZTY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorI2lu
Y2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNjAsMTQgKzYxLDEyIEBA
IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShjb24KIFdURl9FWFBPUlRfUFJJ
VkFURSB2b2lkIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQsIExDaGFyKiwgdW5z
aWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNl
cnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CiAKIFdU
Rl9FWFBPUlRfUFJJVkFURSBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29u
c3Qgdm9pZCosIHVuc2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xp
Y3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRl
ZmF1bHQpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9O
b3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7
Ci1WZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPGNoYXI+
JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExG
cywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKIFZlY3Rvcjx1
aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBDU3RyaW5nJiwgQmFzZTY0RW5jb2Rl
UG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2Rl
TWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNp
emVfdCBOPiBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoU3BhbjxULCBOPiwg
QmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywg
QmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKIAogV1RGX0VYUE9S
VF9QUklWQVRFIFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdCB2b2lkKiwgdW5zaWdu
ZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRM
RnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci1TdHJpbmcg
YmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgQmFzZTY0RW5jb2Rl
UG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2Rl
TWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKLVN0cmluZyBiYXNlNjRFbmNvZGVUb1N0
cmluZyhjb25zdCBWZWN0b3I8Y2hhcj4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNv
ZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVN
YXA6OkRlZmF1bHQpOwogU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IENTdHJpbmcm
LCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZz
LCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IE4+IFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuPFQs
IE4+LCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0
TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwogCiBXVEZf
RVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29k
ZShjb25zdCBTdHJpbmcmLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJh
c2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7CiBXVEZfRVhQT1JUX1BS
SVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShTdHJpbmdW
aWV3LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1h
cCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7CkBAIC03NiwzNCArNzUsMjQgQEAgV1RGX0VY
UE9SVF9QUklWQVRFIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPAogV1RGX0VYUE9SVF9QUklWQVRFIHN0
ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgdWludDhfdCos
IHVuc2lnbmVkLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERl
Y29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUg
c3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBjaGFyKiwg
dW5zaWduZWQsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVj
b2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKIAotaW5saW5lIFZlY3Rvcjx1aW50
OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0LCBC
YXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQotewotICAgIHJl
dHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9s
aWN5LCBtYXApOwotfQotCi1pbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVj
dG9yKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ks
IEJhc2U2NEVuY29kZU1hcCBtYXApCi17Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9y
KGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7Ci19Ci0KIGlubGluZSBW
ZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgQ1N0cmluZyYgaW5wdXQs
IEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAg
cmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCks
IHBvbGljeSwgbWFwKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuYnl0
ZXMoKSwgcG9saWN5LCBtYXApOwogfQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NEVuY29kZVRvU3Ry
aW5nKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xp
Y3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgTj4g
VmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKFNwYW48VCwgTj4gaW5wdXQsIEJh
c2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgcmV0
dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xp
Y3ksIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlucHV0LmRhdGEoKSwg
aW5wdXQuc2l6ZV9ieXRlcygpLCBwb2xpY3ksIG1hcCk7CiB9CiAKLWlubGluZSBTdHJpbmcgYmFz
ZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCwgQmFzZTY0RW5jb2Rl
UG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKK2lubGluZSBTdHJpbmcgYmFzZTY0
RW5jb2RlVG9TdHJpbmcoY29uc3QgQ1N0cmluZyYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBw
b2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRv
U3RyaW5nKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7CisgICAgcmV0
dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LmJ5dGVzKCksIHBvbGljeSwgbWFwKTsKIH0K
IAotaW5saW5lIFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdCBDU3RyaW5nJiBpbnB1
dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHNpemVfdCBOPiBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoU3Bh
bjxULCBOPiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFw
IG1hcCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5wdXQuZGF0YSgpLCBp
bnB1dC5sZW5ndGgoKSwgcG9saWN5LCBtYXApOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0
cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemVfYnl0ZXMoKSwgcG9saWN5LCBtYXApOwogfQog
CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
V1RGL3d0Zi90ZXh0L0NTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAog
I2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KIAogbmFtZXNwYWNl
IFdURiB7CiAKQEAgLTM5LDkgKzQwLDExIEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9J
REVOVElGSUVSKEMKIGNsYXNzIENTdHJpbmdCdWZmZXIgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRl
ZDxDU3RyaW5nQnVmZmVyPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURfV0lUSF9IRUFQ
X0lERU5USUZJRVIoQ1N0cmluZ0J1ZmZlcik7CiBwdWJsaWM6Ci0gICAgY29uc3QgY2hhciogZGF0
YSgpIHsgcmV0dXJuIG11dGFibGVEYXRhKCk7IH0KKyAgICBjb25zdCBjaGFyKiBkYXRhKCkgY29u
c3QgeyByZXR1cm4gY29uc3RfY2FzdDxDU3RyaW5nQnVmZmVyKj4odGhpcyktPm11dGFibGVEYXRh
KCk7IH0KICAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KIAor
ICAgIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0IHsgcmV0dXJuIGFzQnl0ZXMo
U3BhbiB7IGRhdGEoKSwgbGVuZ3RoKCkgfSk7IH0KKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xh
c3MgQ1N0cmluZzsKIApAQCAtNjYsNiArNjksMjAgQEAgcHVibGljOgogICAgIFdURl9FWFBPUlRf
UFJJVkFURSBzdGF0aWMgQ1N0cmluZyBuZXdVbmluaXRpYWxpemVkKHNpemVfdCBsZW5ndGgsIGNo
YXIqJiBjaGFyYWN0ZXJCdWZmZXIpOwogICAgIENTdHJpbmcoSGFzaFRhYmxlRGVsZXRlZFZhbHVl
VHlwZSkgOiBtX2J1ZmZlcihIYXNoVGFibGVEZWxldGVkVmFsdWUpIHsgfQogCisgICAgU3Bhbjxj
b25zdCBzdGQ6OmJ5dGU+IGJ5dGVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2J1ZmZl
cikKKyAgICAgICAgICAgIHJldHVybiBtX2J1ZmZlci0+Ynl0ZXMoKTsKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICB9CisKKyAgICBTcGFuPHN0ZDo6Ynl0ZT4gbXV0YWJsZUJ5dGVzKCkKKyAgICB7
CisgICAgICAgIGlmIChhdXRvIG11dGFibGVEYXRhID0gdGhpcy0+bXV0YWJsZURhdGEoKSkKKyAg
ICAgICAgICAgIHJldHVybiBhc1dyaXRhYmxlQnl0ZXMoU3BhbiB7IG11dGFibGVEYXRhLCBtX2J1
ZmZlci0+bGVuZ3RoKCkgfSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCiAgICAgY29u
c3QgY2hhciogZGF0YSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9idWZmZXIgPyBt
X2J1ZmZlci0+ZGF0YSgpIDogbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3dpbi9GaWxl
U3lzdGVtV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3Rl
bVdpbi5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lz
dGVtV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYzLDkgKzM2Myw5IEBAIFN0cmluZyBjcmVh
dGVUZW1wb3JhcnlEaXJlY3RvcnkoKQogICAgIH0pOwogfQogCi1ib29sIHVubWFwVmlld09mRmls
ZSh2b2lkKiBidWZmZXIsIHNpemVfdCkKK2Jvb2wgdW5tYXBWaWV3T2ZGaWxlKFNwYW48c3RkOjpi
eXRlPiBkYXRhKQogewotICAgIHJldHVybiBVbm1hcFZpZXdPZkZpbGUoYnVmZmVyKTsKKyAgICBy
ZXR1cm4gVW5tYXBWaWV3T2ZGaWxlKGRhdGEuZGF0YSgpKTsKIH0KIAogYm9vbCBNYXBwZWRGaWxl
RGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBGaWxlT3Blbk1v
ZGUgb3Blbk1vZGUsIE1hcHBlZEZpbGVNb2RlKQpAQCAtMzc0LDcgKzM3NCw3IEBAIGJvb2wgTWFw
cGVkRmlsZURhdGE6Om1hcEZpbGVIYW5kbGUoUGxhdGYKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgYXV0byBzaXplID0gZmlsZVNpemUoaGFuZGxlKTsKLSAgICBpZiAoIXNpemUgfHwgKnNp
emUgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIHx8ICpzaXplID4gc3RkOjpu
dW1lcmljX2xpbWl0czxkZWNsdHlwZShtX2ZpbGVTaXplKT46Om1heCgpKSB7CisgICAgaWYgKCFz
aXplIHx8ICpzaXplID4gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSB8fCAqc2l6
ZSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8ZGVjbHR5cGUobV9maWxlRGF0YS5zaXplKCkpPjo6bWF4
KCkpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNDAzLDExICs0MDMsMTIg
QEAgYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0ZgogICAgIGlmICghbWFw
cGluZykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9maWxlRGF0YSA9IE1hcFZpZXdP
ZkZpbGUobWFwcGluZywgZGVzaXJlZEFjY2VzcywgMCwgMCwgKnNpemUpOworICAgIGF1dG8gZGF0
YSA9IE1hcFZpZXdPZkZpbGUobWFwcGluZywgZGVzaXJlZEFjY2VzcywgMCwgMCwgKnNpemUpOwog
ICAgIENsb3NlSGFuZGxlKG1hcHBpbmcpOwotICAgIGlmICghbV9maWxlRGF0YSkKKyAgICBpZiAo
IWRhdGEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2ZpbGVTaXplID0gKnNpemU7CisK
KyAgICBtX2ZpbGVEYXRhID0gU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpieXRlKj4oZGF0
YSksICpzaXplIH07CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDgwIEBACisyMDIxLTA2LTExICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNv
bT4KKworICAgICAgICBBZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogTW9kdWxl
cy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0Lmg6CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGln
aHQ6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHQ6OmRlY29k
ZSk6CisgICAgICAgICogTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6dG9TaGFyZWRCdWZm
ZXIgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvclJlc3Bv
bnNlRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlQXJyYXlCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6ZGVjb2RlQXJyYXlCdWZmZXIpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0
aG4vUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oOgorICAgICAgICAoV2ViQ29y
ZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6ZW5jb2RlIGNvbnN0KToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmg6
CisgICAgICAgIChXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcjo6ZW5jb2Rl
IGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRX
ZWJTb2NrZXRBY2NlcHQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0J1ZmZlclNvdXJjZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6QnVmZmVyU291cmNlOjpieXRlcyBjb25zdCk6CisgICAgICAgICog
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRlY29kZSk6CisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvU2VyaWFsaXplZE5GQS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6U2VyaWFsaXplZE5GQTo6cG9pbnRlckF0T2Zmc2V0SW5GaWxlIGNvbnN0KToKKyAgICAgICAg
KiBjcnlwdG8vbWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlQW5kU3RvcmVNYXN0ZXJLZXkpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Omhhc2hQb2ludGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvRE9N
UGF0Y2hTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBhdGNoU3VwcG9ydDo6Y3Jl
YXRlRGlnZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmFkZFN0cmluZ1RvU0hBMSk6IERlbGV0ZWQu
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZpY2F0ZSk6CisgICAg
ICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yTmV0d29ya0FnZW50OjpnZXRTZXJpYWxpemVkQ2VydGlmaWNh
dGUpOgorICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpjcmVhdGVTaGFyZWRCdWZmZXIgY29u
c3QpOgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFy
ZWRCdWZmZXI6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFT
ZWdtZW50OjpkYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6RGF0
YVNlZ21lbnQ6OmJ5dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6
ZGVjb2RlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdt
ZW50OjpzaXplIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZW5jb2RlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZGVjb2RlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Nb2RlbC5oOgorICAgICAgICAoV2ViQ29yZTo6
TW9kZWw6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNb2RlbDo6ZGVjb2RlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oOgorICAgICAgICAoV2Vi
Q29yZTo6UGl4ZWxCdWZmZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQaXhl
bEJ1ZmZlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGlt
ZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpDYXBhYmlsaXR5
VmFsdWVPclJhbmdlOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FwYWJpbGl0
eVZhbHVlT3JSYW5nZTo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9S
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZFN0cmlu
Z1RvU0hBMSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9D
Rk5ldC5jcHA6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjplbmNvZGVDRkRhdGEpOgorICAg
ICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVjb2RlQ0ZEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRl
bWVudDo6YmluZEJsb2IpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQu
aDoKKyAgICAgICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFu
Z2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNv
cmRzKToKKyAgICAgICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTV1NjcmlwdFN0b3JhZ2U6OnN0b3JlKToKKwogMjAyMS0w
Ni0xMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIExhemlseSBj
b21wdXRlIFNlY3VyaXR5T3JpZ2luOjptX2lzUG90ZW50aWFsbHlUcnVzdHdvcnRoeSBmb3IgcGVy
Zm9ybWFuY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hs
aWdodC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0Fw
cEhpZ2hsaWdodC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2hpZ2hsaWdodC9BcHBIaWdobGlnaHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBA
QCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBBcHBIaWdobGlnaHQ6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8c2l6ZV90
PihoaWdobGlnaHQtPnNpemUoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEo
aGlnaGxpZ2h0LT5kYXRhKCksIGhpZ2hsaWdodC0+c2l6ZSgpLCAxKTsKKyAgICBlbmNvZGVyLmVu
Y29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgKmhpZ2hsaWdodCB9LCAxKTsKIAogICAgIGVuY29k
ZXIgPDwgdGV4dDsKIApAQCAtNzUsNyArNzUsNyBAQCBzdGQ6Om9wdGlvbmFsPEFwcEhpZ2hsaWdo
dD4gQXBwSGlnaGxpZ2h0CiAKICAgICBWZWN0b3I8dWludDhfdD4gaGlnaGxpZ2h0OwogICAgIGhp
Z2hsaWdodC5ncm93KCpsZW5ndGgpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0
aERhdGEoaGlnaGxpZ2h0LmRhdGEoKSwgaGlnaGxpZ2h0LnNpemUoKSwgMSkpCisgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgaGlnaGxpZ2h0IH0sIDEpKQogICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgc3RkOjpvcHRpb25hbDxzdGQ6Om9wdGlv
bmFsPFN0cmluZz4+IHRleHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hpZ2hsaWdo
dC9BcHBIaWdobGlnaHRSYW5nZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFJhbmdlRGF0YS5jcHAJKHJldmlzaW9uIDI3
ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFJh
bmdlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgUmVmPFNoYXJlZEJ1
ZmZlcj4gQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhOgogewogICAgIFdURjo6UGVyc2lzdGVuY2U6OkVu
Y29kZXIgZW5jb2RlcjsKICAgICBlbmNvZGVyIDw8ICp0aGlzOwotICAgIHJldHVybiBTaGFyZWRC
dWZmZXI6OmNyZWF0ZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7Cisg
ICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCkpOwogfQogCiB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIEFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6Tm9kZVBh
dGhDb21wb25lbnQ6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdApJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yUmVzcG9uc2VEYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9y
UmVzcG9uc2VEYXRhLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvclJlc3BvbnNlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01OSw3ICs1OSw3IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiBzdGF0aWMgdm9pZCBlbmNv
ZGVBcnJheUJ1ZmZlcihFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBBcnJheUJ1ZmZlciYgYnVmZmVy
KQogewogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ1ZmZlci5ieXRlTGVu
Z3RoKCkpOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0YXRpY19jYXN0PGNv
bnN0IHVpbnQ4X3QqPihidWZmZXIuZGF0YSgpKSwgYnVmZmVyLmJ5dGVMZW5ndGgoKSwgMSk7Cisg
ICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLmJ5dGVzKCksIDEpOwogfQog
CiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgpAQCAtNzUsNyArNzUsNyBAQCBSZWZQdHI8QXJyYXlC
dWZmZXI+IGRlY29kZUFycmF5QnVmZmVyKERlCiAgICAgYXV0byBidWZmZXIgPSBBcnJheUJ1ZmZl
cjo6dHJ5Q3JlYXRlKGxlbmd0aC52YWx1ZSgpLCBzaXplb2YodWludDhfdCkpOwogICAgIGlmICgh
YnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKHN0YXRpY19jYXN0PHVpbnQ4X3QqPihidWZmZXItPmRhdGEoKSksIGxl
bmd0aC52YWx1ZSgpLCAxKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KGJ1ZmZlci0+d3JpdGFibGVCeXRlcygpLCAxKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgcmV0dXJuIGJ1ZmZlcjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0
aG4vUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9u
T3B0aW9ucy5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMTQxLDggKzE0MSw4IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIFB1Ymxp
Y0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAogewogICAgIGVuY29kZXIgPDwgcnAuaWQgPDwgcnAubmFtZSA8PCBycC5pY29uOwotICAg
IGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHVzZXIuaWQubGVuZ3RoKCkpOwotICAg
IGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHVzZXIuaWQuZGF0YSgpLCB1c2VyLmlkLmxl
bmd0aCgpLCAxKTsKKyAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih1c2VyLmlk
LmJ5dGVzKCkuc2l6ZSgpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YSh1c2Vy
LmlkLmJ5dGVzKCksIDEpOwogICAgIGVuY29kZXIgPDwgdXNlci5kaXNwbGF5TmFtZSA8PCB1c2Vy
Lm5hbWUgPDwgdXNlci5pY29uIDw8IHB1YktleUNyZWRQYXJhbXMgPDwgdGltZW91dCA8PCBleGNs
dWRlQ3JlZGVudGlhbHMgPDwgYXV0aGVudGljYXRvclNlbGVjdGlvbiA8PCBhdHRlc3RhdGlvbiA8
PCBleHRlbnNpb25zOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhu
L1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvci5oCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1Ymxp
Y0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDggKzQ3LDgg
QEAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgUHVibGljS2V5Q3JlZGVudGlhbERlc2Ny
aXB0b3I6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwg
dHlwZTsKLSAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihpZC5sZW5ndGgoKSk7
Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoaWQuZGF0YSgpLCBpZC5sZW5ndGgo
KSwgMSk7CisgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaWQuYnl0ZXMoKS5z
aXplKCkpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGlkLmJ5dGVzKCksIDEp
OwogICAgIGVuY29kZXIgPDwgdHJhbnNwb3J0czsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9X
ZWJTb2NrZXRIYW5kc2hha2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMTMgKzEwMywxNCBA
QCBzdGF0aWMgU3RyaW5nIGdlbmVyYXRlU2VjV2ViU29ja2V0S2V5KCkKIFN0cmluZyBXZWJTb2Nr
ZXRIYW5kc2hha2U6OmdldEV4cGVjdGVkV2ViU29ja2V0QWNjZXB0KGNvbnN0IFN0cmluZyYgc2Vj
V2ViU29ja2V0S2V5KQogewogICAgIGNvbnN0ZXhwciB1aW50OF90IHdlYlNvY2tldEtleUdVSURb
XSA9ICIyNThFQUZBNS1FOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTEiOworCiAgICAgU0hBMSBz
aGExOwotICAgIENTdHJpbmcga2V5RGF0YSA9IHNlY1dlYlNvY2tldEtleS5hc2NpaSgpOwotICAg
IHNoYTEuYWRkQnl0ZXMoa2V5RGF0YS5kYXRhQXNVSW50OFB0cigpLCBrZXlEYXRhLmxlbmd0aCgp
KTsKLSAgICBzaGExLmFkZEJ5dGVzKHdlYlNvY2tldEtleUdVSUQsIHN0ZDo6c2l6ZSh3ZWJTb2Nr
ZXRLZXlHVUlEKSAtIDEpOworICAgIHNoYTEuYWRkQnl0ZXMoc2VjV2ViU29ja2V0S2V5LmFzY2lp
KCkpOworICAgIHNoYTEuYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgd2ViU29ja2V0S2V5R1VJRCB9
KSk7CisKICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAgICBzaGExLmNvbXB1dGVIYXNoKGhhc2gp
OwotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhoYXNoLmRhdGEoKSwgU0hBMTo6aGFz
aFNpemUpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgaGFzaCB9KTsK
IH0KIAogV2ViU29ja2V0SGFuZHNoYWtlOjpXZWJTb2NrZXRIYW5kc2hha2UoY29uc3QgVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25z
dCBTdHJpbmcmIGNsaWVudE9yaWdpbiwgYm9vbCBhbGxvd0Nvb2tpZXMpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9CdWZmZXJTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9CdWZmZXJTb3VyY2UuaAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQnVmZmVyU291cmNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU3LDYgKzU3LDEzIEBAIHB1YmxpYzoKICAgICAgICAgfSwgbV92YXJpYW50KTsKICAgICB9
CiAKKyAgICBTcGFuPGNvbnN0IHVpbnQ4X3Q+IGJ5dGVzKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBXVEY6OnZpc2l0KFtdKGF1dG8mIGJ1ZmZlcikgLT4gU3Bhbjxjb25zdCB1aW50OF90
PiB7CisgICAgICAgICAgICByZXR1cm4gYnVmZmVyID8gU3Bhbjxjb25zdCB1aW50OF90PiB7IHN0
YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihidWZmZXItPmRhdGEoKSksIGJ1ZmZlci0+Ynl0ZUxl
bmd0aCgpIH0gOiBTcGFuPGNvbnN0IHVpbnQ4X3Q+IHsgfTsKKyAgICAgICAgfSwgbV92YXJpYW50
KTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgVmFyaWFudFR5cGUgbV92YXJpYW50OwogfTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTY0LDE1ICsxNjQsMTUg
QEAgdm9pZCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmVuY29kZShFbmNvZAogCiAgICAgaWYgKGhh
c0FycmF5KSB7CiAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1fYXJy
YXlCdWZmZXJDb250ZW50c0FycmF5LT5zaXplKCkpOwotICAgICAgICBmb3IgKGNvbnN0IGF1dG8g
JmFycmF5QnVmZmVyQ29udGVudHMgOiAqbV9hcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkpIHsKKyAg
ICAgICAgZm9yIChjb25zdCBhdXRvJiBhcnJheUJ1ZmZlckNvbnRlbnRzIDogKm1fYXJyYXlCdWZm
ZXJDb250ZW50c0FycmF5KSB7CiAgICAgICAgICAgICBlbmNvZGVyIDw8IGFycmF5QnVmZmVyQ29u
dGVudHMuc2l6ZUluQnl0ZXMoKTsKLSAgICAgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihhcnJheUJ1ZmZlckNvbnRlbnRzLmRh
dGEoKSksIGFycmF5QnVmZmVyQ29udGVudHMuc2l6ZUluQnl0ZXMoKSwgMSk7CisgICAgICAgICAg
ICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShhcnJheUJ1ZmZlckNvbnRlbnRzLmJ5dGVz
KCksIDEpOwogICAgICAgICB9CiAgICAgfQogCiAjaWYgRU5BQkxFKFdFQl9SVEMpCiAgICAgZW5j
b2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4obV9kZXRhY2hlZFJUQ0RhdGFDaGFubmVscy5z
aXplKCkpOwotICAgIGZvciAoY29uc3QgYXV0byAmY2hhbm5lbCA6IG1fZGV0YWNoZWRSVENEYXRh
Q2hhbm5lbHMpCisgICAgZm9yIChjb25zdCBhdXRvJiBjaGFubmVsIDogbV9kZXRhY2hlZFJUQ0Rh
dGFDaGFubmVscykKICAgICAgICAgZW5jb2RlciA8PCAqY2hhbm5lbDsKICNlbmRpZgogfQpAQCAt
MjA2LDcgKzIwNiw3IEBAIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWQK
ICAgICAgICAgICAgIGF1dG8gYnVmZmVyID0gR2lnYWNhZ2U6OnRyeU1hbGxvYyhHaWdhY2FnZTo6
UHJpbWl0aXZlLCBidWZmZXJTaXplKTsKICAgICAgICAgICAgIGlmICghYnVmZmVyKQogICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZUZpeGVkTGVuZ3RoRGF0YShzdGF0aWNfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgYnVmZmVyU2l6
ZSwgMSkpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEo
U3BhbiB7IHN0YXRpY19jYXN0PHN0ZDo6Ynl0ZSo+KGJ1ZmZlciksIGJ1ZmZlclNpemUgfSwgMSkp
IHsKICAgICAgICAgICAgICAgICBHaWdhY2FnZTo6ZnJlZShHaWdhY2FnZTo6UHJpbWl0aXZlLCBi
dWZmZXIpOwogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvU2VyaWFsaXplZE5GQS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvU2VyaWFsaXpl
ZE5GQS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL1NlcmlhbGl6ZWRORkEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNyArMTA3LDcg
QEAgU2VyaWFsaXplZE5GQTo6U2VyaWFsaXplZE5GQShGaWxlU3lzdGVtOgogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KIGNvbnN0IFQqIFNlcmlhbGl6ZWRORkE6OnBvaW50ZXJBdE9mZnNldEluRmlsZShz
aXplX3Qgb2Zmc2V0KSBjb25zdAogewotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0
IFQqPihzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4obV9maWxlLmRhdGEoKSkgKyBvZmZzZXQp
OworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IFQqPihtX2ZpbGUuZGF0YSgpLmRh
dGEoKSArIG9mZnNldCk7CiB9CiAKIGF1dG8gU2VyaWFsaXplZE5GQTo6bm9kZXMoKSBjb25zdCAt
PiBjb25zdCBSYW5nZTxJbW11dGFibGVORkFOb2RlPgpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5
cHRvL21hYy9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vbWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tCShyZXZp
c2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL1NlcmlhbGl6ZWRDcnlw
dG9LZXlXcmFwTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNyArMTI1LDcgQEAgQUxMT1df
REVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiAgICAgfQogI2VuZGlmCiAKLSAgICBhdXRvIGJh
c2U2NEVuY29kZWRNYXN0ZXJLZXlEYXRhID0gYmFzZTY0RW5jb2RlVG9WZWN0b3IobWFzdGVyS2V5
RGF0YSk7CisgICAgYXV0byBiYXNlNjRFbmNvZGVkTWFzdGVyS2V5RGF0YSA9IGJhc2U2NEVuY29k
ZVRvVmVjdG9yKFNwYW4geyBtYXN0ZXJLZXlEYXRhIH0pOwogCiAgICAgLy8gQ2Fubm90IHVzZSBr
U2VjQ2xhc3NLZXkgYmVjYXVzZSBvZiA8cmRhcjovL3Byb2JsZW0vMTYwNjgyMDc+LgogICAgIE5T
RGljdGlvbmFyeSAqYXR0cmlidXRlcyA9IEB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE2MDYsNyArMTYwNiw4IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IE5vZGU6OnNldFRleHRDb250
ZW50KGMKIHN0YXRpYyBTSEExOjpEaWdlc3QgaGFzaFBvaW50ZXIoY29uc3Qgdm9pZCogcG9pbnRl
cikKIHsKICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQ4X3QqPigmcG9pbnRlciksIHNpemVvZihwb2ludGVyKSk7CisgICAgc2hhMS5h
ZGRCeXRlcyhhc0J5dGVzKFNwYW4geyAmcG9pbnRlciwgMSB9KSk7CisKICAgICBTSEExOjpEaWdl
c3QgZGlnZXN0OwogICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsKICAgICByZXR1cm4gZGln
ZXN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5j
cHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRj
aFN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQsMjggKzM5NCwyMyBAQCBFeGNlcHRp
b25Pcjx2b2lkPiBET01QYXRjaFN1cHBvcnQ6OmlubmVyCiAgICAgcmV0dXJuIHsgfTsKIH0KIAot
c3RhdGljIHZvaWQgYWRkU3RyaW5nVG9TSEExKFNIQTEmIHNoYTEsIGNvbnN0IFN0cmluZyYgc3Ry
aW5nKQotewotICAgIENTdHJpbmcgY1N0cmluZyA9IHN0cmluZy51dGY4KCk7Ci0gICAgc2hhMS5h
ZGRCeXRlcyhjU3RyaW5nLmRhdGFBc1VJbnQ4UHRyKCksIGNTdHJpbmcubGVuZ3RoKCkpOwotfQot
CiBzdGQ6OnVuaXF1ZV9wdHI8RE9NUGF0Y2hTdXBwb3J0OjpEaWdlc3Q+IERPTVBhdGNoU3VwcG9y
dDo6Y3JlYXRlRGlnZXN0KE5vZGUmIG5vZGUsIFVudXNlZE5vZGVzTWFwKiB1bnVzZWROb2Rlc01h
cCkKIHsKICAgICBhdXRvIGRpZ2VzdCA9IG1ha2VVbmlxdWU8RGlnZXN0PigpOwogICAgIGRpZ2Vz
dC0+bm9kZSA9ICZub2RlOworCiAgICAgU0hBMSBzaGExOwogCiAgICAgYXV0byBub2RlVHlwZSA9
IG5vZGUubm9kZVR5cGUoKTsKLSAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDhfdCo+KCZub2RlVHlwZSksIHNpemVvZihub2RlVHlwZSkpOwotICAgIGFkZFN0cmlu
Z1RvU0hBMShzaGExLCBub2RlLm5vZGVOYW1lKCkpOwotICAgIGFkZFN0cmluZ1RvU0hBMShzaGEx
LCBub2RlLm5vZGVWYWx1ZSgpKTsKKyAgICBzaGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7ICZu
b2RlVHlwZSwgMSB9KSk7CisgICAgc2hhMS5hZGRCeXRlcyhub2RlLm5vZGVOYW1lKCkudXRmOCgp
KTsKKyAgICBzaGExLmFkZEJ5dGVzKG5vZGUubm9kZVZhbHVlKCkudXRmOCgpKTsKIAogICAgIGlm
IChub2RlLm5vZGVUeXBlKCkgPT0gTm9kZTo6RUxFTUVOVF9OT0RFKSB7CiAgICAgICAgIE5vZGUq
IGNoaWxkID0gbm9kZS5maXJzdENoaWxkKCk7CiAgICAgICAgIHdoaWxlIChjaGlsZCkgewogICAg
ICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPERpZ2VzdD4gY2hpbGRJbmZvID0gY3JlYXRlRGlnZXN0
KCpjaGlsZCwgdW51c2VkTm9kZXNNYXApOwotICAgICAgICAgICAgYWRkU3RyaW5nVG9TSEExKHNo
YTEsIGNoaWxkSW5mby0+c2hhMSk7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGNoaWxkSW5m
by0+c2hhMS51dGY4KCkpOwogICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmco
KTsKICAgICAgICAgICAgIGRpZ2VzdC0+Y2hpbGRyZW4uYXBwZW5kKFdURk1vdmUoY2hpbGRJbmZv
KSk7CiAgICAgICAgIH0KQEAgLTQyNCwxOSArNDE5LDE5IEBAIHN0ZDo6dW5pcXVlX3B0cjxET01Q
YXRjaFN1cHBvcnQ6OkRpZ2VzdD4KICAgICAgICAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlc1dp
dGhvdXRVcGRhdGUoKSkgewogICAgICAgICAgICAgU0hBMSBhdHRyc1NIQTE7CiAgICAgICAgICAg
ICBmb3IgKGF1dG8mIGF0dHJpYnV0ZSA6IGVsZW1lbnQuYXR0cmlidXRlc0l0ZXJhdG9yKCkpIHsK
LSAgICAgICAgICAgICAgICBhZGRTdHJpbmdUb1NIQTEoYXR0cnNTSEExLCBhdHRyaWJ1dGUubmFt
ZSgpLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGFkZFN0cmluZ1RvU0hBMShhdHRyc1NI
QTEsIGF0dHJpYnV0ZS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBhdHRyc1NIQTEuYWRkQnl0
ZXMoYXR0cmlidXRlLm5hbWUoKS50b1N0cmluZygpLnV0ZjgoKSk7CisgICAgICAgICAgICAgICAg
YXR0cnNTSEExLmFkZEJ5dGVzKGF0dHJpYnV0ZS52YWx1ZSgpLnN0cmluZygpLnV0ZjgoKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBTSEExOjpEaWdlc3QgYXR0cnNIYXNoOwogICAgICAg
ICAgICAgYXR0cnNTSEExLmNvbXB1dGVIYXNoKGF0dHJzSGFzaCk7Ci0gICAgICAgICAgICBkaWdl
c3QtPmF0dHJzU0hBMSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGF0dHJzSGFzaC5kYXRhKCksIDEw
KTsKLSAgICAgICAgICAgIGFkZFN0cmluZ1RvU0hBMShzaGExLCBkaWdlc3QtPmF0dHJzU0hBMSk7
CisgICAgICAgICAgICBkaWdlc3QtPmF0dHJzU0hBMSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKFNw
YW4geyBhdHRyc0hhc2ggfSk7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGRpZ2VzdC0+YXR0
cnNTSEExLnV0ZjgoKSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBTSEExOjpEaWdlc3QgaGFz
aDsKICAgICBzaGExLmNvbXB1dGVIYXNoKGhhc2gpOwotICAgIGRpZ2VzdC0+c2hhMSA9IGJhc2U2
NEVuY29kZVRvU3RyaW5nKGhhc2guZGF0YSgpLCAxMCk7CisgICAgZGlnZXN0LT5zaGExID0gYmFz
ZTY0RW5jb2RlVG9TdHJpbmcoU3BhbiB7IGhhc2ggfSk7CiAgICAgaWYgKHVudXNlZE5vZGVzTWFw
KQogICAgICAgICB1bnVzZWROb2Rlc01hcC0+YWRkKGRpZ2VzdC0+c2hhMSwgZGlnZXN0LmdldCgp
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9z
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kSG9zdC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDIsNyAr
NjAyLDcgQEAgYm9vbCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZpYwogICAgIGlm
ICghZGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6
RGVjb2RlciBkZWNvZGVyKGRhdGEtPmRhdGEoKSwgZGF0YS0+c2l6ZSgpKTsKKyAgICBXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyAqZGF0YSB9OwogICAgIHN0ZDo6b3B0aW9uYWw8
Q2VydGlmaWNhdGVJbmZvPiBjZXJ0aWZpY2F0ZUluZm87CiAgICAgZGVjb2RlciA+PiBjZXJ0aWZp
Y2F0ZUluZm87CiAgICAgaWYgKCFjZXJ0aWZpY2F0ZUluZm8pCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQu
Y3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMDUsNyArMTAw
NSw3IEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG8KIAogICAgIFdU
Rjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2RlcjsKICAgICBXVEY6OlBlcnNpc3RlbmNlOjpD
b2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUoZW5jb2RlciwgY2VydGlmaWNh
dGUudmFsdWUoKSk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGVuY29kZXIuYnVm
ZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9T
dHJpbmcoZW5jb2Rlci5idWZmZXIoKSk7CiB9CiAKIFdlYlNvY2tldCogSW5zcGVjdG9yTmV0d29y
a0FnZW50Ojp3ZWJTb2NrZXRGb3JSZXF1ZXN0SWQoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OlJl
cXVlc3RJZCYgcmVxdWVzdElkKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVi
b2FyZEN1c3RvbURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04OSw3ICs4OSw3IEBAIFJlZjxTaGFyZWRCdWZmZXI+IFBhc3RlYm9hcmRDdXN0b21EYXRhOjoK
ICAgICBlbmNvZGVyIDw8IG1fb3JpZ2luOwogICAgIGVuY29kZXIgPDwgc2FtZU9yaWdpbkN1c3Rv
bVN0cmluZ0RhdGEoKTsKICAgICBlbmNvZGVyIDw8IG9yZGVyZWRUeXBlcygpOwotICAgIHJldHVy
biBTaGFyZWRCdWZmZXI6OmNyZWF0ZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNp
emUoKSk7CisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCkp
OwogfQogCiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6ZnJvbVBl
cnNpc3RlbmNlRGVjb2RlcihXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyJiYgZGVjb2RlcikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkocmV2aXNpb24gMjc4
ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsMTggKzM2LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU2hh
cmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUp
CitTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkK
IHsKLSAgICBhcHBlbmQoZGF0YSwgc2l6ZSk7Ci19Ci0KLVNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVm
ZmVyKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKQotewotICAgIGFwcGVuZChyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgc2l6ZSk7CisgICAgYXBwZW5kKGRhdGEp
OwogfQogCiBTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihGaWxlU3lzdGVtOjpNYXBwZWRGaWxl
RGF0YSYmIGZpbGVEYXRhKQotICAgIDogbV9zaXplKGZpbGVEYXRhLnNpemUoKSkKKyAgICA6IG1f
c2l6ZShmaWxlRGF0YS5kYXRhKCkuc2l6ZSgpKQogewogICAgIG1fc2VnbWVudHMuYXBwZW5kKHsw
LCBEYXRhU2VnbWVudDo6Y3JlYXRlKFdURk1vdmUoZmlsZURhdGEpKX0pOwogfQpAQCAtMTg4LDEz
ICsxODMsMTMgQEAgdm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVuZChjb25zdCBTaGFyZWRCdQogICAg
IEFTU0VSVChpbnRlcm5hbGx5Q29uc2lzdGVudCgpKTsKIH0KIAotdm9pZCBTaGFyZWRCdWZmZXI6
OmFwcGVuZChjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoKQordm9pZCBTaGFyZWRC
dWZmZXI6OmFwcGVuZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKICAgICBBU1NFUlQo
IW1faGFzQmVlbkNvbWJpbmVkSW50b09uZVNlZ21lbnQpOwogICAgIFZlY3Rvcjx1aW50OF90PiB2
ZWN0b3I7Ci0gICAgdmVjdG9yLmFwcGVuZChkYXRhLCBsZW5ndGgpOwotICAgIG1fc2VnbWVudHMu
YXBwZW5kKHttX3NpemUsIERhdGFTZWdtZW50OjpjcmVhdGUoV1RGTW92ZSh2ZWN0b3IpKX0pOwot
ICAgIG1fc2l6ZSArPSBsZW5ndGg7CisgICAgdmVjdG9yLmFwcGVuZChyZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKTsKKyAgICBtX3NlZ21l
bnRzLmFwcGVuZCh7IG1fc2l6ZSwgRGF0YVNlZ21lbnQ6OmNyZWF0ZShXVEZNb3ZlKHZlY3Rvcikp
IH0pOworICAgIG1fc2l6ZSArPSBkYXRhLnNpemUoKTsKICAgICBBU1NFUlQoaW50ZXJuYWxseUNv
bnNpc3RlbnQoKSk7CiB9CiAKQEAgLTMwMSwxMSArMjk2LDQwIEBAIGNvbnN0IHVpbnQ4X3QqIFNo
YXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQKICNpZiBVU0UoR1NUUkVBTUVSKQogICAgICAgICBbXShj
b25zdCBSZWZQdHI8R3N0TWFwcGVkT3duZWRCdWZmZXI+JiBkYXRhKSB7IHJldHVybiBkYXRhLT5k
YXRhKCk7IH0sCiAjZW5kaWYKLSAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6TWFwcGVkRmls
ZURhdGEmIGRhdGEpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmRh
dGEoKSk7IH0KKyAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRh
dGEpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuZGF0YSgp
LmRhdGEoKSk7IH0KICAgICApOwogICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIG1faW1t
dXRhYmxlRGF0YSk7CiB9CiAKK1NwYW48Y29uc3Qgc3RkOjpieXRlPiBTaGFyZWRCdWZmZXI6OkRh
dGFTZWdtZW50OjpieXRlcygpIGNvbnN0Cit7CisgICAgYXV0byB2aXNpdG9yID0gV1RGOjptYWtl
VmlzaXRvcigKKyAgICAgICAgW10oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKSB7CisgICAg
ICAgICAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgZGF0YSB9KTsKKyAgICAgICAgfSwKKyNpZiBV
U0UoQ0YpCisgICAgICAgIFtdKGNvbnN0IFJldGFpblB0cjxDRkRhdGFSZWY+JiBkYXRhKSB7Cisg
ICAgICAgICAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhLmdl
dCgpKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihDRkRhdGFHZXRMZW5ndGgoZGF0YS5nZXQoKSkpIH0p
OworICAgICAgICB9LAorI2VuZGlmCisjaWYgVVNFKEdMSUIpCisgICAgICAgIFtdKGNvbnN0IEdS
ZWZQdHI8R0J5dGVzPiYgZGF0YSkgeworICAgICAgICAgICAgcmV0dXJuIGFzQnl0ZXMoU3BhbiB7
IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihnX2J5dGVzX2dldF9kYXRhKGRhdGEuZ2V0KCks
IG51bGxwdHIpKSwgZ19ieXRlc19nZXRfc2l6ZShkYXRhLmdldCgpKSB9KTsKKyAgICAgICAgfSwK
KyNlbmRpZgorI2lmIFVTRShHU1RSRUFNRVIpCisgICAgICAgIFtdKGNvbnN0IFJlZlB0cjxHc3RN
YXBwZWRPd25lZEJ1ZmZlcj4mIGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBhc0J5dGVzKFNw
YW4geyBkYXRhLT5kYXRhKCksIGRhdGEtPnNpemUoKSB9KTsKKyAgICAgICAgfSwKKyNlbmRpZgor
ICAgICAgICBbXShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeworICAg
ICAgICAgICAgcmV0dXJuIGRhdGEuZGF0YSgpOworICAgICAgICB9CisgICAgKTsKKyAgICByZXR1
cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBtX2ltbXV0YWJsZURhdGEpOworCit9CisKIGJvb2wgU2hh
cmVkQnVmZmVyOjpEYXRhU2VnbWVudDo6Y29udGFpbnNNYXBwZWRGaWxlRGF0YSgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8RmlsZVN5c3RlbTo6TWFwcGVkRmls
ZURhdGE+KG1faW1tdXRhYmxlRGF0YSk7CkBAIC0zMTksNyArMzQzLDcgQEAgdm9pZCBTaGFyZWRC
dWZmZXI6OmhpbnRNZW1vcnlOb3ROZWVkZWRTbwogCiBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVy
IFNoYXJlZEJ1ZmZlcjo6ZGVjb2RlcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHsgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSgpKSwgc2l6ZSgpIH07CisgICAgcmV0dXJuIHsg
KnRoaXMgfTsKIH0KIAogYm9vbCBTaGFyZWRCdWZmZXI6Om9wZXJhdG9yPT0oY29uc3QgU2hhcmVk
QnVmZmVyJiBvdGhlcikgY29uc3QKQEAgLTM4NCw3ICs0MDgsNyBAQCBzaXplX3QgU2hhcmVkQnVm
ZmVyOjpEYXRhU2VnbWVudDo6c2l6ZSgpCiAjaWYgVVNFKEdTVFJFQU1FUikKICAgICAgICAgW10o
Y29uc3QgUmVmUHRyPEdzdE1hcHBlZE93bmVkQnVmZmVyPiYgZGF0YSkgeyByZXR1cm4gZGF0YS0+
c2l6ZSgpOyB9LAogI2VuZGlmCi0gICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZp
bGVEYXRhJiBkYXRhKSB7IHJldHVybiBkYXRhLnNpemUoKTsgfQorICAgICAgICBbXShjb25zdCBG
aWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeyByZXR1cm4gZGF0YS5kYXRhKCkuc2l6
ZSgpOyB9CiAgICAgKTsKICAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBtX2ltbXV0YWJs
ZURhdGEpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC02Nyw4ICs2NywxMiBAQCBjbGFzcyBTaGFyZWRCdWZmZXJEYXRh
VmlldzsKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIFNoYXJlZEJ1ZmZlciA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFNoYXJlZEJ1ZmZlcj4gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVy
PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcik7IH0KLSAgICBz
dGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVf
dCBzaXplKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihkYXRhLCBzaXplKSk7
IH0KLSAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IGNoYXIqIGRhdGEs
IHNpemVfdCBzaXplKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihkYXRhLCBz
aXplKSk7IH0KKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKFNwYW48Y29uc3Qg
c3RkOjpieXRlPiBkYXRhKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihkYXRh
KSk7IH0KKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKFNwYW48Y29uc3QgdWlu
dDhfdD4gZGF0YSkgeyByZXR1cm4gY3JlYXRlKGFzQnl0ZXMoZGF0YSkpOyB9CisgICAgc3RhdGlj
IFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShTcGFuPGNvbnN0IGNoYXI+IGRhdGEpIHsgcmV0dXJu
IGNyZWF0ZShhc0J5dGVzKGRhdGEpKTsgfQorICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBj
cmVhdGUoY29uc3Qgc3RkOjpieXRlKiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gY3JlYXRl
KFNwYW4geyBkYXRhLCBzaXplIH0pOyB9CisgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNy
ZWF0ZShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gY3JlYXRlKFNw
YW4geyBkYXRhLCBzaXplIH0pOyB9CisgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0
ZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gY3JlYXRlKFNwYW4geyBk
YXRhLCBzaXplIH0pOyB9CiAgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShGaWxl
U3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIG1hcHBlZEZpbGVEYXRhKSB7IHJldHVybiBhZG9wdFJl
ZigqbmV3IFNoYXJlZEJ1ZmZlcihXVEZNb3ZlKG1hcHBlZEZpbGVEYXRhKSkpOyB9CiAKICAgICBl
bnVtIGNsYXNzIE1heVVzZUZpbGVNYXBwaW5nIDogYm9vbCB7IE5vLCBZZXMgfTsKQEAgLTEwMSw2
ICsxMDUsOCBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IEF1ZGl0IHRoZSBjYWxsIHNpdGVzIG9m
IHRoaXMgZnVuY3Rpb24gYW5kIHJlcGxhY2UgdGhlbSB3aXRoIGl0ZXJhdGlvbiBpZiBwb3NzaWJs
ZS4KICAgICBjb25zdCB1aW50OF90KiBkYXRhKCkgY29uc3Q7CiAgICAgY29uc3QgY2hhciogZGF0
YUFzQ2hhclB0cigpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+
KGRhdGEoKSk7IH0KKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25zdCB7IHJl
dHVybiBhc0J5dGVzKFNwYW4geyBkYXRhKCksIHNpemUoKSB9KTsgfQorCiAgICAgVmVjdG9yPHVp
bnQ4X3Q+IGNvcHlEYXRhKCkgeyByZXR1cm4geyBkYXRhKCksIHNpemUoKSB9OyB9CiAKICAgICAv
LyBDb21iaW5lcyBhbGwgdGhlIHNlZ21lbnRzIGludG8gYSBWZWN0b3IgYW5kIHJldHVybnMgdGhh
dCB2ZWN0b3IgYWZ0ZXIgY2xlYXJpbmcgdGhlIFNoYXJlZEJ1ZmZlci4KQEAgLTExNSw4ICsxMjEs
MTIgQEAgcHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXplKCk7
IH0KIAogICAgIHZvaWQgYXBwZW5kKGNvbnN0IFNoYXJlZEJ1ZmZlciYpOwotICAgIHZvaWQgYXBw
ZW5kKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwotICAgIHZvaWQgYXBwZW5kKGNvbnN0IGNoYXIq
IGRhdGEsIHNpemVfdCBsZW5ndGgpIHsgYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KGRhdGEpLCBsZW5ndGgpOyB9CisgICAgdm9pZCBhcHBlbmQoU3Bhbjxjb25zdCBzdGQ6
OmJ5dGU+KTsKKyAgICB2b2lkIGFwcGVuZChTcGFuPGNvbnN0IHVpbnQ4X3Q+IGRhdGEpIHsgYXBw
ZW5kKGFzQnl0ZXMoZGF0YSkpOyB9CisgICAgdm9pZCBhcHBlbmQoU3Bhbjxjb25zdCBjaGFyPiBk
YXRhKSB7IGFwcGVuZChhc0J5dGVzKGRhdGEpKTsgfQorICAgIHZvaWQgYXBwZW5kKGNvbnN0IHN0
ZDo6Ynl0ZSogZGF0YSwgc2l6ZV90IGxlbmd0aCkgeyBhcHBlbmQoU3BhbiB7IGRhdGEsIGxlbmd0
aCB9KTsgfQorICAgIHZvaWQgYXBwZW5kKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5n
dGgpIHsgYXBwZW5kKFNwYW4geyBkYXRhLCBsZW5ndGggfSk7IH0KKyAgICB2b2lkIGFwcGVuZChj
b25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKSB7IGFwcGVuZChTcGFuIHsgZGF0YSwgbGVu
Z3RoIH0pOyB9CiAgICAgdm9pZCBhcHBlbmQoVmVjdG9yPHVpbnQ4X3Q+JiYpOwogCiAgICAgdm9p
ZCBjbGVhcigpOwpAQCAtMTMxLDYgKzE0MSw4IEBAIHB1YmxpYzoKICAgICAgICAgV0VCQ09SRV9F
WFBPUlQgY29uc3QgdWludDhfdCogZGF0YSgpIGNvbnN0OwogICAgICAgICBXRUJDT1JFX0VYUE9S
VCBzaXplX3Qgc2l6ZSgpIGNvbnN0OwogCisgICAgICAgIFdFQkNPUkVfRVhQT1JUIFNwYW48Y29u
c3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAgICAgICAgIHN0YXRpYyBSZWY8RGF0YVNl
Z21lbnQ+IGNyZWF0ZShWZWN0b3I8dWludDhfdD4mJiBkYXRhKQogICAgICAgICB7CiAgICAgICAg
ICAgICBkYXRhLnNocmlua1RvRml0KCk7CkBAIC0yMTIsOCArMjI0LDcgQEAgcHVibGljOgogCiBw
cml2YXRlOgogICAgIGV4cGxpY2l0IFNoYXJlZEJ1ZmZlcigpID0gZGVmYXVsdDsKLSAgICBleHBs
aWNpdCBTaGFyZWRCdWZmZXIoY29uc3QgdWludDhfdCosIHNpemVfdCk7Ci0gICAgZXhwbGljaXQg
U2hhcmVkQnVmZmVyKGNvbnN0IGNoYXIqLCBzaXplX3QpOworICAgIGV4cGxpY2l0IFNoYXJlZEJ1
ZmZlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwogICAgIGV4cGxpY2l0IFNoYXJlZEJ1ZmZlcihW
ZWN0b3I8dWludDhfdD4mJik7CiAgICAgZXhwbGljaXQgU2hhcmVkQnVmZmVyKEZpbGVTeXN0ZW06
Ok1hcHBlZEZpbGVEYXRhJiYpOwogI2lmIFVTRShDRikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL2NvY29hL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0NBQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbi5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgogI2lu
Y2x1ZGUgPENvcmVBdWRpby9Db3JlQXVkaW9UeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtODAsMTMgKzgxLDEzIEBAIHByaXZhdGU6CiB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZtX3N0cmVhbURlc2Ny
aXB0aW9uKSwgc2l6ZW9mKG1fc3RyZWFtRGVzY3JpcHRpb24pLCAxKTsKKyAgICBlbmNvZGVyLmVu
Y29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJm1fc3RyZWFtRGVzY3JpcHRpb24sIDEgfSwgMSk7
CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CiBib29sIENBQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYg
ZGVzY3JpcHRpb24pCiB7Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZkZXNjcmlwdGlvbi5tX3N0cmVhbURlc2NyaXB0
aW9uKSwgc2l6ZW9mKGRlc2NyaXB0aW9uLm1fc3RyZWFtRGVzY3JpcHRpb24pLCAxKTsKKyAgICBy
ZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZkZXNjcmlwdGlvbi5t
X3N0cmVhbURlc2NyaXB0aW9uLCAxIH0sIDEpOwogfQogCiBpbmxpbmUgQ0FBdWRpb1N0cmVhbURl
c2NyaXB0aW9uIHRvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKGNvbnN0IEF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2Vu
ZXJpYy9LZXllZERlY29kZXJHZW5lcmljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9nZW5lcmljL0tleWVkRGVjb2RlckdlbmVyaWMuY3BwCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL0tleWVkRGVjb2RlckdlbmVy
aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPFN0cmluZz4gcmVhZFN0cmluZygKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAK
ICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyKHNpemUudmFsdWUoKSk7Ci0gICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShidWZmZXIuZGF0YSgpLCBzaXplLnZhbHVlKCkpKQor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IGJ1ZmZlciB9KSkK
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICBhdXRvIHJlc3VsdCA9IFN0cmluZzo6
ZnJvbVVURjgoYnVmZmVyLmRhdGEoKSwgc2l6ZS52YWx1ZSgpKTsKICAgICBpZiAocmVzdWx0Lmlz
TnVsbCgpKQpAQCAtMTE3LDcgKzExNyw3IEBAIEtleWVkRGVjb2RlckdlbmVyaWM6OktleWVkRGVj
b2RlckdlbmVyaWMKICAgICAgICAgICAgIGlmICghb2spCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyKCpzaXplKTsKLSAgICAgICAgICAg
IG9rID0gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLmRhdGEoKSwgKnNpemUp
OworICAgICAgICAgICAgb2sgPSBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsg
YnVmZmVyIH0pOwogICAgICAgICAgICAgaWYgKCFvaykKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKS0+YWRkKCprZXksIFdURk1vdmUo
YnVmZmVyKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Nb2RlbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01vZGVsLmgJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01v
ZGVsLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KIHZvaWQgTW9kZWw6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAg
IGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2RhdGEtPnNpemUoKSk7Ci0gICAgZW5j
b2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEobV9kYXRhLT5kYXRhKCksIG1fZGF0YS0+c2l6ZSgp
LCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShtX2RhdGEtPmJ5dGVzKCks
IDEpOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgpAQCAtNzQsNyArNzQsNyBAQCBSZWZQ
dHI8TW9kZWw+IE1vZGVsOjpkZWNvZGUoRGVjb2RlciYgZGVjCiAKICAgICBWZWN0b3I8dWludDhf
dD4gZGF0YTsKICAgICBkYXRhLmdyb3coKmxlbmd0aCk7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZUZpeGVkTGVuZ3RoRGF0YShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksIDEpKQorICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IGRhdGEgfSwgMSkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIE1vZGVsOjpjcmVhdGUoU2hhcmVkQnVmZmVy
OjpjcmVhdGUoV1RGTW92ZShkYXRhKSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUGl4ZWxCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC04Miw3ICs4Miw3IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgUGl4ZWxCdWZmZXIK
IAogICAgIGVuY29kZXIgPDwgbV9mb3JtYXQ7CiAgICAgZW5jb2RlciA8PCBtX3NpemU7Ci0gICAg
ZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEobV9kYXRhLT5kYXRhKCksIG1fZGF0YS0+Ynl0
ZUxlbmd0aCgpLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShtX2RhdGEt
PmJ5dGVzKCksIDEpOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGQ6Om9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBQaXhlbEJ1ZmZlcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCkBAIC0x
MTMsNyArMTEzLDcgQEAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RkOjpvcHRpb25hbDxQaQog
ICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgaWYg
KCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZXN1bHQtPm1fZGF0YS0+ZGF0YSgpLCBy
ZXN1bHQtPm1fZGF0YS0+Ynl0ZUxlbmd0aCgpLCAxKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKHJlc3VsdC0+bV9kYXRhLT53cml0YWJsZUJ5dGVzKCksIDEpKQogICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDYXBh
YmlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzLmgJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3Vy
Y2VDYXBhYmlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDE2ICsxMTQsMTYgQEAgcHJp
dmF0ZToKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIENhcGFiaWxpdHlWYWx1ZU9yUmFu
Z2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewotICAgIGVuY29kZXIuZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZtX21pbk9y
VmFsdWUpLCBzaXplb2YoVmFsdWVVbmlvbiksIGFsaWdub2YoVmFsdWVVbmlvbikpOwotICAgIGVu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KCZtX21heCksIHNpemVvZihWYWx1ZVVuaW9uKSwgYWxpZ25vZihWYWx1ZVVuaW9uKSk7Cisg
ICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZtX21pbk9yVmFsdWUsIDEg
fSwgYWxpZ25vZihWYWx1ZVVuaW9uKSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERh
dGEoU3BhbiB7ICZtX21heCwgMSB9LCBhbGlnbm9mKFZhbHVlVW5pb24pKTsKICAgICBlbmNvZGVy
IDw8IG1fdHlwZTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KIGJvb2wgQ2FwYWJpbGl0
eVZhbHVlT3JSYW5nZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIENhcGFiaWxpdHlWYWx1ZU9y
UmFuZ2UmIHZhbHVlT3JSYW5nZSkKIHsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExl
bmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnZhbHVlT3JSYW5nZS5tX21pbk9y
VmFsdWUpLCBzaXplb2YoVmFsdWVVbmlvbiksIGFsaWdub2YoVmFsdWVVbmlvbikpCi0gICAgICAg
ICYmIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KCZ2YWx1ZU9yUmFuZ2UubV9tYXgpLCBzaXplb2YoVmFsdWVVbmlvbiksIGFsaWdub2YoVmFs
dWVVbmlvbikpCisgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4g
eyAmdmFsdWVPclJhbmdlLm1fbWluT3JWYWx1ZSwgMSB9LCBhbGlnbm9mKFZhbHVlVW5pb24pKQor
ICAgICAgICAmJiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJnZhbHVlT3JS
YW5nZS5tX21heCwgMSB9LCBhbGlnbm9mKFZhbHVlVW5pb24pKQogICAgICAgICAmJiBkZWNvZGVy
LmRlY29kZSh2YWx1ZU9yUmFuZ2UubV90eXBlKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRp
YVNvdXJjZUNlbnRlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzksMTMgKzEzOSwxMyBAQCBzdGF0aWMgdm9pZCBhZGRTdHJpbmdUb1NIQTEo
U0hBMSYgc2hhMSwgCiAKICAgICBpZiAoc3RyaW5nLmlzOEJpdCgpICYmIHN0cmluZy5pc0FsbEFT
Q0lJKCkpIHsKICAgICAgICAgY29uc3QgdWludDhfdCBudWxsQnl0ZSA9IDA7Ci0gICAgICAgIHNo
YTEuYWRkQnl0ZXMoc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSk7Ci0gICAg
ICAgIHNoYTEuYWRkQnl0ZXMoJm51bGxCeXRlLCAxKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhh
c0J5dGVzKFNwYW4geyBzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpIH0pKTsK
KyAgICAgICAgc2hhMS5hZGRCeXRlcyhhc0J5dGVzKFNwYW4geyAmbnVsbEJ5dGUsIDEgfSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgYXV0byB1dGY4ID0gc3RyaW5nLnV0ZjgoKTsK
LSAgICBzaGExLmFkZEJ5dGVzKHV0ZjguZGF0YUFzVUludDhQdHIoKSwgdXRmOC5sZW5ndGgoKSAr
IDEpOyAvLyBJbmNsdWRlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4KKyAgICBzaGExLmFkZEJ5dGVz
KGFzQnl0ZXMoU3BhbiB7IHV0ZjguZGF0YUFzVUludDhQdHIoKSwgdXRmOC5sZW5ndGgoKSArIDEg
fSkpOyAvLyBJbmNsdWRlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4KIH0KIAogU3RyaW5nIFJlYWx0
aW1lTWVkaWFTb3VyY2VDZW50ZXI6Omhhc2hTdHJpbmdXaXRoU2FsdChjb25zdCBTdHJpbmcmIGlk
LCBjb25zdCBTdHJpbmcmIGhhc2hTYWx0KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ2Vy
dGlmaWNhdGVJbmZvQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNyArMjEwLDcgQEAg
c3RhdGljIHZvaWQgZW5jb2RlQ0ZEYXRhKEVuY29kZXImIGVuY29kZQogICAgIGNvbnN0IHVpbnQ4
X3QqIGJ5dGVQdHIgPSBDRkRhdGFHZXRCeXRlUHRyKGRhdGEpOwogCiAgICAgZW5jb2RlciA8PCBs
ZW5ndGg7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYnl0ZVB0ciwgc3RhdGlj
X2Nhc3Q8c2l6ZV90PihsZW5ndGgpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0
YShTcGFuIHsgYnl0ZVB0ciwgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpIH0pOwogfQogCiBz
dGF0aWMgc3RkOjpvcHRpb25hbDxSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4gZGVjb2RlQ0ZEYXRhKERl
Y29kZXImIGRlY29kZXIpCkBAIC0yMjUsNyArMjI1LDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8
UmV0YWluUHRyPENGRGF0YVJlZgogICAgIGlmICghcG9pbnRlcikKICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKIAotICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0ZShudWxscHRyLCBw
b2ludGVyLCAqc2l6ZSkpOworICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0ZShudWxscHRy
LCByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwb2ludGVyKSwgKnNpemUpKTsKIH0K
IAogI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ2VydGlmaWNhdGVJbmZvLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0NlcnRpZmljYXRlSW5mby5oCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Q2VydGlmaWNhdGVJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgdGVtcGxh
dGU8PiBzdHJ1Y3QgQ29kZXI8R1JlZlB0cjxHQnl0ZUFycgogICAgIHN0YXRpYyB2b2lkIGVuY29k
ZShFbmNvZGVyICZlbmNvZGVyLCBjb25zdCBHUmVmUHRyPEdCeXRlQXJyYXk+JiBieXRlQXJyYXkp
CiAgICAgewogICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90PihieXRlQXJy
YXktPmxlbik7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGJ5dGVBcnJh
eS0+ZGF0YSwgYnl0ZUFycmF5LT5sZW4pOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShTcGFuIHsgYnl0ZUFycmF5LT5kYXRhLCBieXRlQXJyYXktPmxlbiB9KTsKICAgICB9
CiAKICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxHUmVmUHRyPEdCeXRlQXJyYXk+PiBkZWNvZGUo
RGVjb2RlciYgZGVjb2RlcikKQEAgLTg3LDcgKzg3LDcgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ29k
ZXI8R1JlZlB0cjxHQnl0ZUFycgogCiAgICAgICAgIEdSZWZQdHI8R0J5dGVBcnJheT4gYnl0ZUFy
cmF5ID0gYWRvcHRHUmVmKGdfYnl0ZV9hcnJheV9zaXplZF9uZXcoKnNpemUpKTsKICAgICAgICAg
Z19ieXRlX2FycmF5X3NldF9zaXplKGJ5dGVBcnJheS5nZXQoKSwgKnNpemUpOwotICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ5dGVBcnJheS0+ZGF0YSwgKnNpemUp
KQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBieXRl
QXJyYXktPmRhdGEsICpzaXplIH0pKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
ICAgICAgICAgcmV0dXJuIGJ5dGVBcnJheTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OmV4ZWN1dGVD
b21tYW5kKCkKICAgICByZXR1cm4gc3RlcCgpID09IFNRTElURV9ET05FOwogfQogCi1pbnQgU1FM
aXRlU3RhdGVtZW50OjpiaW5kQmxvYihpbnQgaW5kZXgsIFNwYW48Y29uc3QgdWludDhfdD4gYmxv
YikKK2ludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+IGJsb2IpCiB7CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAgQVNTRVJUKHN0
YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkpOwpAQCAt
OTUsNiArOTUsMTEgQEAgaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IoaW50IGluZGV4LAog
ICAgIHJldHVybiBzcWxpdGUzX2JpbmRfYmxvYihtX3N0YXRlbWVudCwgaW5kZXgsIGJsb2IuZGF0
YSgpLCBibG9iLnNpemUoKSwgU1FMSVRFX1RSQU5TSUVOVCk7CiB9CiAKK2ludCBTUUxpdGVTdGF0
ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgU3Bhbjxjb25zdCB1aW50OF90PiBibG9iKQorewor
ICAgIHJldHVybiBiaW5kQmxvYihpbmRleCwgYXNCeXRlcyhibG9iKSk7Cit9CisKIGludCBTUUxp
dGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0KQogewog
ICAgIC8vIFN0cmluZzo6Y2hhcmFjdGVycygpIHJldHVybnMgMCBmb3IgdGhlIGVtcHR5IHN0cmlu
Zywgd2hpY2ggU1FMaXRlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRl
U3RhdGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NR
TGl0ZVN0YXRlbWVudC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcg
QEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIH5TUUxpdGVTdGF0ZW1lbnQoKTsKICAgICBX
RUJDT1JFX0VYUE9SVCBTUUxpdGVTdGF0ZW1lbnQoU1FMaXRlU3RhdGVtZW50JiYpOwogICAgIAor
ICAgIFdFQkNPUkVfRVhQT1JUIGludCBiaW5kQmxvYihpbnQgaW5kZXgsIFNwYW48Y29uc3Qgc3Rk
OjpieXRlPik7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJpbmRCbG9iKGludCBpbmRleCwgU3Bh
bjxjb25zdCB1aW50OF90Pik7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJpbmRCbG9iKGludCBp
bmRleCwgY29uc3QgU3RyaW5nJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJpbmRUZXh0KGlu
dCBpbmRleCwgU3RyaW5nVmlldyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZp
Y2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcAko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZl
ci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1OSwxMCArNDU5
LDEwIEBAIGJvb2wgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmRvUHVzaENoYW5nZXMKICAgICAgICAg
ICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRleHQoNiwgdXBkYXRlVmlhQ2FjaGVUb1N0cmlu
ZyhkYXRhLnJlZ2lzdHJhdGlvbi51cGRhdGVWaWFDYWNoZSkpICE9IFNRTElURV9PSwogICAgICAg
ICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCg3LCBkYXRhLnNjcmlwdFVSTC5zdHJp
bmcoKSkgIT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRU
ZXh0KDgsIHdvcmtlclR5cGVUb1N0cmluZyhkYXRhLndvcmtlclR5cGUpKSAhPSBTUUxJVEVfT0sK
LSAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoOSwgU3BhbiB7IGNzcEVu
Y29kZXIuYnVmZmVyKCksIGNzcEVuY29kZXIuYnVmZmVyU2l6ZSgpIH0pICE9IFNRTElURV9PSwor
ICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kQmxvYig5LCBjc3BFbmNvZGVyLmJ1
ZmZlcigpKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+Ymlu
ZFRleHQoMTAsIGRhdGEucmVmZXJyZXJQb2xpY3kpICE9IFNRTElURV9PSwotICAgICAgICAgICAg
fHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kQmxvYigxMSwgU3BhbiB7IHNjcmlwdFJlc291cmNlTWFw
RW5jb2Rlci5idWZmZXIoKSwgc2NyaXB0UmVzb3VyY2VNYXBFbmNvZGVyLmJ1ZmZlclNpemUoKSB9
KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2Io
MTIsIFNwYW4geyBjZXJ0aWZpY2F0ZUluZm9FbmNvZGVyLmJ1ZmZlcigpLCBjZXJ0aWZpY2F0ZUlu
Zm9FbmNvZGVyLmJ1ZmZlclNpemUoKSB9KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGlu
c2VydFN0YXRlbWVudC0+YmluZEJsb2IoMTEsIHNjcmlwdFJlc291cmNlTWFwRW5jb2Rlci5idWZm
ZXIoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRC
bG9iKDEyLCBjZXJ0aWZpY2F0ZUluZm9FbmNvZGVyLmJ1ZmZlcigpKSAhPSBTUUxJVEVfT0sKICAg
ICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAg
ICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTZXJ2aWNlV29ya2VyLCAiRmFpbGVkIHRvIHN0
b3JlIHJlZ2lzdHJhdGlvbiBkYXRhIGludG8gcmVjb3JkcyB0YWJsZSAoJWkpIC0gJXMiLCBtX2Rh
dGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOwogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTE3LDcgKzUxNyw3IEBAIFN0cmluZyBSZWdpc3RyYXRp
b25EYXRhYmFzZTo6aW1wb3J0UmVjb3IKICAgICAgICAgc3RkOjpvcHRpb25hbDxDb250ZW50U2Vj
dXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnM+IGNvbnRlbnRTZWN1cml0eVBvbGljeTsKICAgICAg
ICAgYXV0byBjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhU3BhbiA9IHNxbC0+Y29sdW1uQmxvYkFz
U3Bhbig4KTsKICAgICAgICAgaWYgKGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGFTcGFuLnNpemUo
KSkgewotICAgICAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBjc3BEZWNvZGVyKGNv
bnRlbnRTZWN1cml0eVBvbGljeURhdGFTcGFuLmRhdGEoKSwgY29udGVudFNlY3VyaXR5UG9saWN5
RGF0YVNwYW4uc2l6ZSgpKTsKKyAgICAgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIg
Y3NwRGVjb2RlciB7IGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGFTcGFuIH07CiAgICAgICAgICAg
ICBjc3BEZWNvZGVyID4+IGNvbnRlbnRTZWN1cml0eVBvbGljeTsKICAgICAgICAgICAgIGlmICgh
Y29udGVudFNlY3VyaXR5UG9saWN5KSB7CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoU2VydmljZVdvcmtlciwgIlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzOiBG
YWlsZWQgdG8gZGVjb2RlIGNvbnRlbnRTZWN1cml0eVBvbGljeSIpOwpAQCAtNTMwLDcgKzUzMCw3
IEBAIFN0cmluZyBSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3IKICAgICAgICAgSGFz
aE1hcDxVUkwsIFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YTo6SW1wb3J0ZWRTY3JpcHQ+IHNjcmlw
dFJlc291cmNlTWFwOwogICAgICAgICBhdXRvIHNjcmlwdFJlc291cmNlTWFwRGF0YVNwYW4gPSBz
cWwtPmNvbHVtbkJsb2JBc1NwYW4oMTApOwogICAgICAgICBpZiAoc2NyaXB0UmVzb3VyY2VNYXBE
YXRhU3Bhbi5zaXplKCkpIHsKLSAgICAgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIg
c2NyaXB0UmVzb3VyY2VNYXBEZWNvZGVyKHNjcmlwdFJlc291cmNlTWFwRGF0YVNwYW4uZGF0YSgp
LCBzY3JpcHRSZXNvdXJjZU1hcERhdGFTcGFuLnNpemUoKSk7CisgICAgICAgICAgICBXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyIHNjcmlwdFJlc291cmNlTWFwRGVjb2RlciB7IHNjcmlwdFJlc291
cmNlTWFwRGF0YVNwYW4gfTsKICAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8SGFzaE1hcDxVUkws
IEltcG9ydGVkU2NyaXB0QXR0cmlidXRlcz4+IHNjcmlwdFJlc291cmNlTWFwV2l0aG91dFNjcmlw
dHM7CiAgICAgICAgICAgICBzY3JpcHRSZXNvdXJjZU1hcERlY29kZXIgPj4gc2NyaXB0UmVzb3Vy
Y2VNYXBXaXRob3V0U2NyaXB0czsKICAgICAgICAgICAgIGlmICghc2NyaXB0UmVzb3VyY2VNYXBX
aXRob3V0U2NyaXB0cykgewpAQCAtNTQzLDcgKzU0Myw3IEBAIFN0cmluZyBSZWdpc3RyYXRpb25E
YXRhYmFzZTo6aW1wb3J0UmVjb3IKICAgICAgICAgYXV0byBjZXJ0aWZpY2F0ZUluZm9EYXRhU3Bh
biA9IHNxbC0+Y29sdW1uQmxvYkFzU3BhbigxMSk7CiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q2Vy
dGlmaWNhdGVJbmZvPiBjZXJ0aWZpY2F0ZUluZm87CiAKLSAgICAgICAgV1RGOjpQZXJzaXN0ZW5j
ZTo6RGVjb2RlciBjZXJ0aWZpY2F0ZUluZm9EZWNvZGVyKGNlcnRpZmljYXRlSW5mb0RhdGFTcGFu
LmRhdGEoKSwgY2VydGlmaWNhdGVJbmZvRGF0YVNwYW4uc2l6ZSgpKTsKKyAgICAgICAgV1RGOjpQ
ZXJzaXN0ZW5jZTo6RGVjb2RlciBjZXJ0aWZpY2F0ZUluZm9EZWNvZGVyIHsgY2VydGlmaWNhdGVJ
bmZvRGF0YVNwYW4gfTsKICAgICAgICAgY2VydGlmaWNhdGVJbmZvRGVjb2RlciA+PiBjZXJ0aWZp
Y2F0ZUluZm87CiAgICAgICAgIGlmICghY2VydGlmaWNhdGVJbmZvKSB7CiAgICAgICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihTZXJ2aWNlV29ya2VyLCAiUmVnaXN0cmF0aW9uRGF0YWJhc2U6Omlt
cG9ydFJlY29yZHM6IEZhaWxlZCB0byBkZWNvZGUgY2VydGlmaWNhdGVJbmZvIik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1Nj
cmlwdFN0b3JhZ2UuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg2LDkgKzg2LDkgQEAgU2NyaXB0QnVmZmVyIFNXU2NyaXB0U3RvcmFnZTo6c3RvcmUoY29ucwog
ICAgIGF1dG8gc2NyaXB0UGF0aCA9IHRoaXMtPnNjcmlwdFBhdGgocmVnaXN0cmF0aW9uS2V5LCBz
Y3JpcHRVUkwpOwogICAgIEZpbGVTeXN0ZW06Om1ha2VBbGxEaXJlY3RvcmllcyhGaWxlU3lzdGVt
OjpwYXJlbnRQYXRoKHNjcmlwdFBhdGgpKTsKIAotICAgIGF1dG8gaXRlcmF0ZU92ZXJCdWZmZXJB
bmRXcml0ZURhdGEgPSBbJl0oY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6
ZV90KT4mIHdyaXRlRGF0YSkgewotICAgICAgICBmb3IgKGF1dG8gaXQgPSBzY3JpcHQuYnVmZmVy
KCktPmJlZ2luKCk7IGl0ICE9IHNjcmlwdC5idWZmZXIoKS0+ZW5kKCk7ICsraXQpCi0gICAgICAg
ICAgICB3cml0ZURhdGEoaXQtPnNlZ21lbnQtPmRhdGEoKSwgaXQtPnNlZ21lbnQtPnNpemUoKSk7
CisgICAgYXV0byBpdGVyYXRlT3ZlckJ1ZmZlckFuZFdyaXRlRGF0YSA9IFsmXShjb25zdCBGdW5j
dGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+JiB3cml0ZURhdGEpIHsKKyAgICAgICAg
Zm9yIChhdXRvJiBzZWdtZW50RW50cnkgOiAqc2NyaXB0LmJ1ZmZlcigpKQorICAgICAgICAgICAg
d3JpdGVEYXRhKHNlZ21lbnRFbnRyeS5zZWdtZW50LT5ieXRlcygpKTsKICAgICB9OwogCiAgICAg
aWYgKCFzaG91bGRVc2VGaWxlTWFwcGluZyhzY3JpcHQuYnVmZmVyKCktPnNpemUoKSkpIHsKQEAg
LTk3LDggKzk3LDggQEAgU2NyaXB0QnVmZmVyIFNXU2NyaXB0U3RvcmFnZTo6c3RvcmUoY29ucwog
ICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIlNXU2NyaXB0U3Rv
cmFnZTo6c3RvcmU6IEZhaWx1cmUgdG8gc3RvcmUgJXMsIEZpbGVTeXN0ZW06Om9wZW5GaWxlKCkg
ZmFpbGVkIiwgc2NyaXB0UGF0aC51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIHJldHVybiB7
IH07CiAgICAgICAgIH0KLSAgICAgICAgaXRlcmF0ZU92ZXJCdWZmZXJBbmRXcml0ZURhdGEoWyZd
KGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gICAgICAgICAgICBGaWxlU3lz
dGVtOjp3cml0ZVRvRmlsZShoYW5kbGUsIGRhdGEsIHNpemUpOworICAgICAgICBpdGVyYXRlT3Zl
ckJ1ZmZlckFuZFdyaXRlRGF0YShbJl0oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpIHsKKyAg
ICAgICAgICAgIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKGhhbmRsZSwgZGF0YS5kYXRhKCksIGRh
dGEuc2l6ZSgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9KTsKICAgICAg
ICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGhhbmRsZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw4MSBAQAorMjAyMS0wNi0xMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgQWRvcHQgU3BhbiBpbiBtb3JlIHBsYWNlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
Q2FjaGVTdG9yYWdlOjpDYWNoZTo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9y
YWdlOjpDYWNoZTo6ZGVjb2RlUmVjb3JkSGVhZGVyKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwOgorICAgICAgICAoV2ViS2l0OjpD
YWNoZVN0b3JhZ2U6OkNhY2hlczo6c3RvcmVPcmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpDYWNo
ZVN0b3JhZ2U6OkNhY2hlczo6cmVhZE9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3Rv
cmFnZTo6ZW5jb2RlQ2FjaGVOYW1lcyk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6
ZGVjb2RlQ2FjaGVzTmFtZXMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZURhdGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6Om1h
cFRvRmlsZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Y29tcHV0ZVNI
QTEpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhOjpEYXRhKToKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW06CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YTo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrQ2FjaGU6OkRhdGE6OmFkb3B0TWFwKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6RW50cnk6OmVuY29kZUFzU3RvcmFnZVJlY29yZCBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQpOgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5jcHA6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYWNoZTo6aGFzaFN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6S2V5Ojpjb21wdXRlSGFzaCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6S2V5Ojpjb21wdXRlUGFydGl0aW9uSGFzaCBjb25zdCk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtDYWNoZTo6ZGVjb2RlUmVjb3JkTWV0YURhdGEpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FjaGU6OmVuY29kZVJlY29yZE1ldGFEYXRhKToKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3VicmVzb3VyY2VzRW50cnk6OmVuY29kZUFzU3RvcmFnZVJl
Y29yZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3VicmVzb3VyY2Vz
RW50cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Bcmd1
bWVudENvZGVyLmg6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmNwcDoK
KyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxDU3RyaW5nPjo6ZW5jb2RlKToKKyAgICAgICAg
KElQQzo6QXJndW1lbnRDb2RlcjxDU3RyaW5nPjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJn
dW1lbnRDb2RlcjxTdHJpbmc+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpkZWNvZGVTdHJpbmdU
ZXh0KToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUp
OgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29kZSk6Cisg
ICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgIChJUEM6OlNp
bXBsZUFyZ3VtZW50Q29kZXI6OmVuY29kZSk6CisgICAgICAgIChJUEM6OlNpbXBsZUFyZ3VtZW50
Q29kZXI6OmRlY29kZSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FycmF5UmVmZXJlbmNlLmg6
CisgICAgICAgICogUGxhdGZvcm0vSVBDL0RlY29kZXIuY3BwOgorICAgICAgICAoSVBDOjpEZWNv
ZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9EZWNv
ZGVyLmg6CisgICAgICAgIChJUEM6OkRlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSk6Cisg
ICAgICAgICogUGxhdGZvcm0vSVBDL0VuY29kZXIuY3BwOgorICAgICAgICAoSVBDOjpFbmNvZGVy
OjplbmNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9FbmNvZGVy
Lmg6CisgICAgICAgICogUGxhdGZvcm0vSVBDL1NoYXJlZEJ1ZmZlckNvcHkuY3BwOgorICAgICAg
ICAoSVBDOjpTaGFyZWRCdWZmZXJDb3B5OjplbmNvZGUgY29uc3QpOgorICAgICAgICAqIFBsYXRm
b3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uRW5jb2Rlci5oOgorICAgICAgICAqIFNoYXJlZC9XZWJD
b3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoSVBDOjplbmNvZGVTaGFyZWRCdWZmZXIp
OgorICAgICAgICAoSVBDOjpkZWNvZGVTaGFyZWRCdWZmZXIpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuY3BwOgorICAgICAgICAoQVBJOjplbmNvZGVD
b250ZW50UnVsZUxpc3RNZXRhRGF0YSk6CisgICAgICAgIChBUEk6OmdldERhdGEpOgorICAgICAg
ICAoQVBJOjpkZWNvZGVDb250ZW50UnVsZUxpc3RNZXRhRGF0YSk6CisgICAgICAgIChBUEk6Ondy
aXRlRGF0YVRvRmlsZSk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9MZWdhY3lTZXNzaW9uU3Rh
dGVDb2RpbmcuY3BwOgorICAgICAgICAoV2ViS2l0OjpIaXN0b3J5RW50cnlEYXRhRW5jb2Rlcjo6
b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFFbmNvZGVyOjpl
bmNvZGVBcml0aG1ldGljVHlwZSk6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFF
bmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAoV2ViS2l0OjpIaXN0b3J5
RW50cnlEYXRhRGVjb2Rlcjo6b3BlcmF0b3I+Pik6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlF
bnRyeURhdGFEZWNvZGVyOjpkZWNvZGVBcml0aG1ldGljVHlwZSk6CisgICAgICAgIChXZWJLaXQ6
Okhpc3RvcnlFbnRyeURhdGFEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6SVBDVGVzdGluZ0FQSTo6ZW5jb2RlVHlwZWRBcnJheSk6CisKIDIwMjEtMDYtMTEgIFJ5YW4g
SGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2
ZXJ0aW5nIHIyNzg3NTQuCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcAkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0
b3JhZ2VFbmdpbmVDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2NSw3ICs1NjUsNyBAQCBT
dG9yYWdlOjpSZWNvcmQgQ2FjaGU6OmVuY29kZShjb25zdCBSZWNvCiAKICAgICBlbmNvZGVyLmVu
Y29kZUNoZWNrc3VtKCk7CiAKLSAgICBEYXRhIGhlYWRlcihlbmNvZGVyLmJ1ZmZlcigpLCBlbmNv
ZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgRGF0YSBoZWFkZXIoZW5jb2Rlci5idWZmZXIoKSk7CiAg
ICAgRGF0YSBib2R5OwogICAgIFdURjo6c3dpdGNoT24ocmVjb3JkLnJlc3BvbnNlQm9keSwgW10o
Y29uc3QgUmVmPFdlYkNvcmU6OkZvcm1EYXRhPiYgZm9ybURhdGEpIHsKICAgICAgICAgLy8gRklY
TUU6IFN0b3JlIGZvcm0gZGF0YSBib2R5LgpAQCAtNjMwLDcgKzYzMCw3IEBAIHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPFdlYkNvcmU6OkRPTUNhY2hlRW4KIAogc3RkOjpvcHRpb25hbDxDYWNoZTo6RGVj
b2RlZFJlY29yZD4gQ2FjaGU6OmRlY29kZVJlY29yZEhlYWRlcihjb25zdCBTdG9yYWdlOjpSZWNv
cmQmIHN0b3JhZ2UpCiB7Ci0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKHN0
b3JhZ2UuaGVhZGVyLmRhdGEoKSwgc3RvcmFnZS5oZWFkZXIuc2l6ZSgpKTsKKyAgICBXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoc3RvcmFnZS5oZWFkZXIpOwogCiAgICAgc3RkOjpv
cHRpb25hbDxkb3VibGU+IGluc2VydGlvblRpbWU7CiAgICAgZGVjb2RlciA+PiBpbnNlcnRpb25U
aW1lOwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3Jh
Z2VFbmdpbmVDYWNoZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdp
bmVDYWNoZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsMTQgKzEwNSwxNCBAQCB2b2lkIENh
Y2hlczo6c3RvcmVPcmlnaW4oQ29tcGxldGlvbkNhbGxiCiAgICAgZW5jb2RlciA8PCBtX29yaWdp
bi5jbGllbnRPcmlnaW4ucHJvdG9jb2w7CiAgICAgZW5jb2RlciA8PCBtX29yaWdpbi5jbGllbnRP
cmlnaW4uaG9zdDsKICAgICBlbmNvZGVyIDw8IG1fb3JpZ2luLmNsaWVudE9yaWdpbi5wb3J0Owot
ICAgIG1fZW5naW5lLT53cml0ZUZpbGUoY2FjaGVzT3JpZ2luRmlsZW5hbWUobV9yb290UGF0aCks
IERhdGEgeyBlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSB9LCBbcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSAoc3RkOjpvcHRpb25hbDxFcnJvcj4mJiBlcnJvcikgbXV0YWJsZSB7
CisgICAgbV9lbmdpbmUtPndyaXRlRmlsZShjYWNoZXNPcmlnaW5GaWxlbmFtZShtX3Jvb3RQYXRo
KSwgRGF0YSB7IGVuY29kZXIuYnVmZmVyKCkgfSwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKHN0
ZDo6b3B0aW9uYWw8RXJyb3I+JiYgZXJyb3IpIG11dGFibGUgewogICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihXVEZNb3ZlKGVycm9yKSk7CiAgICAgfSk7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8V2Vi
Q29yZTo6Q2xpZW50T3JpZ2luPiBDYWNoZXM6OnJlYWRPcmlnaW4oY29uc3QgRGF0YSYgZGF0YSkK
IHsKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YS5kYXRhKCksIGRh
dGEuc2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YSk7
CiAKICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gdG9wT3Jp
Z2luOwogICAgIGRlY29kZXIgPj4gdG9wT3JpZ2luOwpAQCAtNDA0LDEyICs0MDQsMTIgQEAgc3Rh
dGljIGlubGluZSBEYXRhIGVuY29kZUNhY2hlTmFtZXMoY29ucwogICAgICAgICBlbmNvZGVyIDw8
IGNhY2hlLnVuaXF1ZU5hbWUoKTsKICAgICB9CiAKLSAgICByZXR1cm4gRGF0YSB7IGVuY29kZXIu
YnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpIH07CisgICAgcmV0dXJuIERhdGEgeyBlbmNv
ZGVyLmJ1ZmZlcigpIH07CiB9CiAKIHN0YXRpYyBpbmxpbmUgRXhwZWN0ZWQ8VmVjdG9yPHN0ZDo6
cGFpcjxTdHJpbmcsIFN0cmluZz4+LCBFcnJvcj4gZGVjb2RlQ2FjaGVzTmFtZXMoY29uc3QgRGF0
YSYgZGF0YSkKIHsKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YS5k
YXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29k
ZXIoZGF0YSk7CiAgICAgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gY291bnQ7CiAgICAgZGVjb2Rl
ciA+PiBjb3VudDsKICAgICBpZiAoIWNvdW50KQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBO
ZXR3b3JrQ2FjaGUgewogRGF0YSBEYXRhOjptYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKSBj
b25zdAogewogICAgIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGU7Ci0gICAg
YXV0byBhcHBseURhdGEgPSBbJl0oY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwg
c2l6ZV90KT4mIGFwcGxpZXIpIHsgYXBwbHkoYXBwbGllcik7IH07CisgICAgYXV0byBhcHBseURh
dGEgPSBbJl0oY29uc3QgRnVuY3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYgYXBw
bGllcikgeyBhcHBseShhcHBsaWVyKTsgfTsKICAgICBhdXRvIG1hcHBlZEZpbGUgPSBGaWxlU3lz
dGVtOjptYXBUb0ZpbGUocGF0aCwgc2l6ZSgpLCBXVEZNb3ZlKGFwcGx5RGF0YSksICZoYW5kbGUp
OwogICAgIGlmICghbWFwcGVkRmlsZSkKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTg2LDkgKzg2
LDkgQEAgRGF0YSBhZG9wdEFuZE1hcEZpbGUoRmlsZVN5c3RlbTo6UGxhdGZvcgogU0hBMTo6RGln
ZXN0IGNvbXB1dGVTSEExKGNvbnN0IERhdGEmIGRhdGEsIGNvbnN0IFNhbHQmIHNhbHQpCiB7CiAg
ICAgU0hBMSBzaGExOwotICAgIHNoYTEuYWRkQnl0ZXMoc2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgp
KTsKLSAgICBkYXRhLmFwcGx5KFsmc2hhMV0oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNp
emUpIHsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhkYXRhLCBzaXplKTsKKyAgICBzaGExLmFkZEJ5
dGVzKGFzQnl0ZXMoU3BhbiB7IHNhbHQgfSkpOworICAgIGRhdGEuYXBwbHkoWyZzaGExXShTcGFu
PGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkgeworICAgICAgICBzaGExLmFkZEJ5dGVzKGRhdGEpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9KTsKIApJbmRleDogU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgJKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8d3Rm
L0ZpbGVTeXN0ZW0uaD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rpb25EaXNwYXRjaGVyLmg+CiAjaW5j
bHVkZSA8d3RmL1NIQTEuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUgPHd0Zi9U
aHJlYWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CkBAIC01NCw2ICs1NSwxMCBAQCBjbGFzcyBEYXRhIHsKIHB1YmxpYzoKICAgICBEYXRhKCkgeyB9
CiAgICAgRGF0YShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKKyAgICBEYXRhKFNwYW48Y29uc3Qg
c3RkOjpieXRlPiBkYXRhKQorICAgICAgICA6IERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50OF90Kj4oZGF0YS5kYXRhKCkpLCBkYXRhLnNpemUoKSkKKyAgICB7CisgICAgfQogCiAgICAg
fkRhdGEoKSB7IH0KIApAQCAtNzksNyArODQsNyBAQCBwdWJsaWM6CiAKICAgICBEYXRhIHN1YnJh
bmdlKHNpemVfdCBvZmZzZXQsIHNpemVfdCkgY29uc3Q7CiAKLSAgICBib29sIGFwcGx5KGNvbnN0
IEZ1bmN0aW9uPGJvb2wgKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYpIGNvbnN0OworICAgIGJv
b2wgYXBwbHkoY29uc3QgRnVuY3Rpb248Ym9vbCAoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mKSBj
b25zdDsKIAogICAgIERhdGEgbWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkgY29uc3Q7CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0
YUNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1tCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQkod29y
a2luZyBjb3B5KQpAQCAtNjksMTIgKzY5LDEyIEBAIGJvb2wgRGF0YTo6aXNOdWxsKCkgY29uc3QK
ICAgICByZXR1cm4gIW1fZGlzcGF0Y2hEYXRhOwogfQogCi1ib29sIERhdGE6OmFwcGx5KGNvbnN0
IEZ1bmN0aW9uPGJvb2wgKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYgYXBwbGllcikgY29uc3QK
K2Jvb2wgRGF0YTo6YXBwbHkoY29uc3QgRnVuY3Rpb248Ym9vbCAoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+KT4mIGFwcGxpZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3NpemUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICByZXR1cm4gZGlzcGF0Y2hfZGF0YV9hcHBseShtX2Rpc3BhdGNoRGF0YS5n
ZXQoKSwgWyZhcHBsaWVyXShkaXNwYXRjaF9kYXRhX3QsIHNpemVfdCwgY29uc3Qgdm9pZCogZGF0
YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgcmV0dXJuIGFwcGxpZXIoc3RhdGljX2Nhc3Q8Y29u
c3QgdWludDhfdCo+KGRhdGEpLCBzaXplKTsKKyAgICAgICAgcmV0dXJuIGFwcGxpZXIoU3BhbiB7
IHN0YXRpY19jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGRhdGEpLCBzaXplIH0pOwogICAgIH0pOwog
fQogCkBAIC05NCwxNCArOTQsMTEgQEAgRGF0YSBjb25jYXRlbmF0ZShjb25zdCBEYXRhJiBhLCBj
b25zdCBEYQogCiBEYXRhIERhdGE6OmFkb3B0TWFwKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRh
JiYgbWFwcGVkRmlsZSwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkKQogewotICAg
IHNpemVfdCBzaXplID0gbWFwcGVkRmlsZS5zaXplKCk7Ci0gICAgdm9pZCogbWFwID0gbWFwcGVk
RmlsZS5sZWFrSGFuZGxlKCk7Ci0gICAgQVNTRVJUKG1hcCk7Ci0gICAgQVNTRVJUKG1hcCAhPSBN
QVBfRkFJTEVEKTsKKyAgICBhdXRvIG1hcCA9IG1hcHBlZEZpbGUubGVha0hhbmRsZSgpOworICAg
IEFTU0VSVChtYXAuZGF0YSgpKTsKKyAgICBBU1NFUlQobWFwLmRhdGEoKSAhPSBNQVBfRkFJTEVE
KTsKICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmQpOwotICAgIGF1dG8gYm9keU1hcCA9IGFk
b3B0T1NPYmplY3QoZGlzcGF0Y2hfZGF0YV9jcmVhdGUobWFwLCBzaXplLCBkaXNwYXRjaF9nZXRf
Z2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCBbbWFwLCBz
aXplXSB7Ci0gICAgICAgIG11bm1hcChtYXAsIHNpemUpOwotICAgIH0pKTsKKyAgICBhdXRvIGJv
ZHlNYXAgPSBhZG9wdE9TT2JqZWN0KGRpc3BhdGNoX2RhdGFfY3JlYXRlKG1hcC5kYXRhKCksIG1h
cC5zaXplKCksIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJ
VFlfREVGQVVMVCwgMCksIERJU1BBVENIX0RBVEFfREVTVFJVQ1RPUl9NVU5NQVApKTsKICAgICBy
ZXR1cm4geyBXVEZNb3ZlKGJvZHlNYXApLCBEYXRhOjpCYWNraW5nOjpNYXAgfTsKIH0KIApJbmRl
eDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVFbnRyeS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05OSwxMCArOTksMTAgQEAgU3RvcmFnZTo6UmVjb3JkIEVudHJ5OjplbmNvZGVBc1N0b3JhZ2VS
ZQogICAgIAogICAgIGVuY29kZXIuZW5jb2RlQ2hlY2tzdW0oKTsKIAotICAgIERhdGEgaGVhZGVy
KGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICBEYXRhIGhlYWRl
ciB7IGVuY29kZXIuYnVmZmVyKCkgfTsKICAgICBEYXRhIGJvZHk7CiAgICAgaWYgKG1fYnVmZmVy
KQotICAgICAgICBib2R5ID0geyBtX2J1ZmZlci0+ZGF0YSgpLCBtX2J1ZmZlci0+c2l6ZSgpIH07
CisgICAgICAgIGJvZHkgPSB7IG1fYnVmZmVyLT5ieXRlcygpIH07CiAKICAgICByZXR1cm4geyBt
X2tleSwgbV90aW1lU3RhbXAsIGhlYWRlciwgYm9keSwgeyB9IH07CiB9CkBAIC0xMTEsNyArMTEx
LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBFbnRyeTo6ZGVjb2RlU3RvcgogewogICAgIGF1
dG8gZW50cnkgPSBtYWtlVW5pcXVlPEVudHJ5PihzdG9yYWdlRW50cnkpOwogCi0gICAgV1RGOjpQ
ZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKHN0b3JhZ2VFbnRyeS5oZWFkZXIuZGF0YSgpLCBz
dG9yYWdlRW50cnkuaGVhZGVyLnNpemUoKSk7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2Rl
ciBkZWNvZGVyIHsgc3RvcmFnZUVudHJ5LmhlYWRlciB9OwogICAgIFdlYkNvcmU6OlJlc291cmNl
UmVzcG9uc2UgcmVzcG9uc2U7CiAgICAgaWYgKCFXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlOjpk
ZWNvZGUoZGVjb2RlciwgcmVzcG9uc2UpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZUtleS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTMg
Kzg4LDEzIEBAIHN0YXRpYyB2b2lkIGhhc2hTdHJpbmcoU0hBMSYgc2hhMSwgY29uc3QKIAogICAg
IGlmIChzdHJpbmcuaXM4Qml0KCkgJiYgc3RyaW5nLmlzQWxsQVNDSUkoKSkgewogICAgICAgICBj
b25zdCB1aW50OF90IG51bGxCeXRlID0gMDsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhzdHJpbmcu
Y2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpKTsKLSAgICAgICAgc2hhMS5hZGRCeXRlcygm
bnVsbEJ5dGUsIDEpOworICAgICAgICBzaGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7IHN0cmlu
Zy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkgfSkpOworICAgICAgICBzaGExLmFkZEJ5
dGVzKGFzQnl0ZXMoU3BhbiB7ICZudWxsQnl0ZSwgMSB9KSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgYXV0byBjU3RyaW5nID0gc3RyaW5nLnV0ZjgoKTsKICAgICAvLyBJbmNsdWRlIHRl
cm1pbmF0aW5nIG51bGwgYnl0ZS4KLSAgICBzaGExLmFkZEJ5dGVzKGNTdHJpbmcuZGF0YUFzVUlu
dDhQdHIoKSwgY1N0cmluZy5sZW5ndGgoKSArIDEpOworICAgIHNoYTEuYWRkQnl0ZXMoYXNCeXRl
cyhTcGFuIHsgY1N0cmluZy5kYXRhQXNVSW50OFB0cigpLCBjU3RyaW5nLmxlbmd0aCgpICsgMSB9
KSk7CiB9CiAKIEtleTo6SGFzaFR5cGUgS2V5Ojpjb21wdXRlSGFzaChjb25zdCBTYWx0JiBzYWx0
KSBjb25zdApAQCAtMTAyLDcgKzEwMiw3IEBAIEtleTo6SGFzaFR5cGUgS2V5Ojpjb21wdXRlSGFz
aChjb25zdCBTYWwKICAgICAvLyBXZSBkb24ndCByZWFsbHkgbmVlZCBhIGNyeXB0b2dyYXBoaWMg
aGFzaC4gVGhlIGtleSBpcyBhbHdheXMgdmVyaWZpZWQgYWdhaW5zdCB0aGUgZW50cnkgaGVhZGVy
LgogICAgIC8vIFNIQTEganVzdCBoYXBwZW5zIHRvIGJlIHN1aXRhYmx5IHNpemVkLCBmYXN0IGFu
ZCBhdmFpbGFibGUuCiAgICAgU0hBMSBzaGExOwotICAgIHNoYTEuYWRkQnl0ZXMoc2FsdC5kYXRh
KCksIHNhbHQuc2l6ZSgpKTsKKyAgICBzaGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7IHNhbHQg
fSkpOwogCiAgICAgaGFzaFN0cmluZyhzaGExLCBtX3BhcnRpdGlvbik7CiAgICAgaGFzaFN0cmlu
ZyhzaGExLCBtX3R5cGUpOwpAQCAtMTE3LDcgKzExNyw3IEBAIEtleTo6SGFzaFR5cGUgS2V5Ojpj
b21wdXRlSGFzaChjb25zdCBTYWwKIEtleTo6SGFzaFR5cGUgS2V5Ojpjb21wdXRlUGFydGl0aW9u
SGFzaChjb25zdCBTYWx0JiBzYWx0KSBjb25zdAogewogICAgIFNIQTEgc2hhMTsKLSAgICBzaGEx
LmFkZEJ5dGVzKHNhbHQuZGF0YSgpLCBzYWx0LnNpemUoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhh
c0J5dGVzKFNwYW4geyBzYWx0IH0pKTsKIAogICAgIGhhc2hTdHJpbmcoc2hhMSwgbV9wYXJ0aXRp
b24pOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZVN0b3JhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1NCw4ICs0NTQsOCBAQCBzdHJ1Y3QgUmVjb3JkTWV0YURhdGEg
ewogc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZVJlY29yZE1ldGFEYXRhKFJl
Y29yZE1ldGFEYXRhJiBtZXRhRGF0YSwgY29uc3QgRGF0YSYgZmlsZURhdGEpCiB7CiAgICAgYm9v
bCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgZmlsZURhdGEuYXBwbHkoWyZtZXRhRGF0YSwgJnN1Y2Nl
c3NdKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gICAgICAgIFdURjo6UGVy
c2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihkYXRhLCBzaXplKTsKKyAgICBmaWxlRGF0YS5hcHBs
eShbJm1ldGFEYXRhLCAmc3VjY2Vzc10oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpIHsKKyAg
ICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEpOwogICAgICAgICAK
ICAgICAgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gY2FjaGVTdG9yYWdlVmVyc2lvbjsKICAg
ICAgICAgZGVjb2RlciA+PiBjYWNoZVN0b3JhZ2VWZXJzaW9uOwpAQCAtNTg2LDcgKzU4Niw3IEBA
IHN0YXRpYyBEYXRhIGVuY29kZVJlY29yZE1ldGFEYXRhKGNvbnN0IFIKIAogICAgIGVuY29kZXIu
ZW5jb2RlQ2hlY2tzdW0oKTsKIAotICAgIHJldHVybiBEYXRhKGVuY29kZXIuYnVmZmVyKCksIGVu
Y29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICByZXR1cm4geyBlbmNvZGVyLmJ1ZmZlcigpIH07CiB9
CiAKIHN0ZDo6b3B0aW9uYWw8QmxvYlN0b3JhZ2U6OkJsb2I+IFN0b3JhZ2U6OnN0b3JlQm9keUFz
QmxvYihXcml0ZU9wZXJhdGlvbiYgd3JpdGVPcGVyYXRpb24pCkluZGV4OiBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMywxNCArMTIzLDE0IEBAIFN0b3JhZ2U6OlJlY29yZCBT
dWJyZXNvdXJjZXNFbnRyeTo6ZW5jb2QKIAogICAgIGVuY29kZXIuZW5jb2RlQ2hlY2tzdW0oKTsK
IAotICAgIHJldHVybiB7IG1fa2V5LCBtX3RpbWVTdGFtcCwgeyBlbmNvZGVyLmJ1ZmZlcigpLCBl
bmNvZGVyLmJ1ZmZlclNpemUoKSB9LCB7IH0sIHsgfX07CisgICAgcmV0dXJuIHsgbV9rZXksIG1f
dGltZVN0YW1wLCB7IGVuY29kZXIuYnVmZmVyKCkgfSwgeyB9LCB7IH19OwogfQogCiBzdGQ6OnVu
aXF1ZV9wdHI8U3VicmVzb3VyY2VzRW50cnk+IFN1YnJlc291cmNlc0VudHJ5OjpkZWNvZGVTdG9y
YWdlUmVjb3JkKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYgc3RvcmFnZUVudHJ5KQogewogICAgIGF1
dG8gZW50cnkgPSBtYWtlVW5pcXVlPFN1YnJlc291cmNlc0VudHJ5PihzdG9yYWdlRW50cnkpOwog
Ci0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKHN0b3JhZ2VFbnRyeS5oZWFk
ZXIuZGF0YSgpLCBzdG9yYWdlRW50cnkuaGVhZGVyLnNpemUoKSk7CisgICAgV1RGOjpQZXJzaXN0
ZW5jZTo6RGVjb2RlciBkZWNvZGVyIHsgc3RvcmFnZUVudHJ5LmhlYWRlciB9OwogICAgIHN0ZDo6
b3B0aW9uYWw8VmVjdG9yPFN1YnJlc291cmNlSW5mbz4+IHN1YnJlc291cmNlczsKICAgICBkZWNv
ZGVyID4+IHN1YnJlc291cmNlczsKICAgICBpZiAoIXN1YnJlc291cmNlcykKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVyLmgJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNzksMTMgKzc5LDEzIEBAIHN0cnVjdCBBcmd1bWVudENvZGVyPFQsIHR5cGVuYW1l
IHN0ZDo6ZW4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgogICAgIHN0YXRpYyB2b2lk
IGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBUIHZhbHVlKQogICAgIHsKLSAgICAgICAgZW5jb2Rl
ci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4o
JnZhbHVlKSwgc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVG
aXhlZExlbmd0aERhdGEoU3BhbiB7ICZ2YWx1ZSwgMSB9LCBhbGlnbm9mKFQpKTsKICAgICB9CiAK
ICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxUPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAg
ICB7CiAgICAgICAgIFQgcmVzdWx0OwotICAgICAgICBpZiAoZGVjb2Rlci5kZWNvZGVGaXhlZExl
bmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnJlc3VsdCksIHNpemVvZihUKSwg
YWxpZ25vZihUKSkpCisgICAgICAgIGlmIChkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShT
cGFuIHsgJnJlc3VsdCwgMSB9KSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvQXJndW1lbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04Miw3ICs4Miw3IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxDU3RyaW5nPjo6ZW5jb2RlKEVuY28K
IAogICAgIHVpbnQzMl90IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKICAgICBlbmNvZGVyIDw8
IGxlbmd0aDsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShzdHJpbmcuZGF0YUFz
VUludDhQdHIoKSwgbGVuZ3RoLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0
YShzdHJpbmcuYnl0ZXMoKSwgMSk7CiB9CiAKIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIEFyZ3Vt
ZW50Q29kZXI8Q1N0cmluZz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBDU3RyaW5nJiByZXN1
bHQpCkBAIC0xMDMsNyArMTAzLDcgQEAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgQXJndW1lbnRD
b2RlcjxDUwogCiAgICAgY2hhciogYnVmZmVyOwogICAgIENTdHJpbmcgc3RyaW5nID0gQ1N0cmlu
Zzo6bmV3VW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIpLCBs
ZW5ndGgsIDEpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7
IGJ1ZmZlciwgbGVuZ3RoIH0sIDEpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXN1
bHQgPSBzdHJpbmc7CkBAIC0xMjUsOSArMTI1LDkgQEAgdm9pZCBBcmd1bWVudENvZGVyPFN0cmlu
Zz46OmVuY29kZShFbmNvZAogICAgIGVuY29kZXIgPDwgbGVuZ3RoIDw8IGlzOEJpdDsKIAogICAg
IGlmIChpczhCaXQpCi0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0cmlu
Zy5jaGFyYWN0ZXJzOCgpLCBsZW5ndGggKiBzaXplb2YoTENoYXIpLCBhbGlnbm9mKExDaGFyKSk7
CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBzdHJpbmcuY2hh
cmFjdGVyczgoKSwgbGVuZ3RoIH0sIGFsaWdub2YoTENoYXIpKTsKICAgICBlbHNlCi0gICAgICAg
IGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KHN0cmluZy5jaGFyYWN0ZXJzMTYoKSksIGxlbmd0aCAqIHNpemVvZihVQ2hhciksIGFs
aWdub2YoVUNoYXIpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoU3Bh
biB7IHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoIH0sIGFsaWdub2YoVUNoYXIpKTsKIH0K
IHRlbXBsYXRlCiB2b2lkIEFyZ3VtZW50Q29kZXI8U3RyaW5nPjo6ZW5jb2RlPEVuY29kZXI+KEVu
Y29kZXImLCBjb25zdCBTdHJpbmcmKTsKQEAgLTE0Myw3ICsxNDMsNyBAQCBzdGF0aWMgaW5saW5l
IHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBkZWNvCiAgICAgCiAgICAgQ2hhcmFjdGVyVHlwZSogYnVm
ZmVyOwogICAgIFN0cmluZyBzdHJpbmcgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVu
Z3RoLCBidWZmZXIpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJhY3Rl
clR5cGUpLCBhbGlnbm9mKENoYXJhY3RlclR5cGUpKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKFNwYW4geyBidWZmZXIsIGxlbmd0aCB9KSkKICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKICAgICAKICAgICByZXR1cm4gc3RyaW5nOwpAQCAtMTgxLDEyICsxODEs
MTIgQEAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgQXJndW1lbnRDb2RlcjxTdAogCiB2b2lkIEFy
Z3VtZW50Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0
IFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQogewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpLCAxKTsKKyAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgZGlnZXN0IH0sIDEpOwogfQogCiBXQVJOX1VOVVNFRF9S
RVRVUk4gYm9vbCBBcmd1bWVudENvZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyLCBTSEExOjpEaWdlc3QmIGRpZ2VzdCkKIHsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNv
ZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0LmRhdGEoKSwgc2l6ZW9mKGRpZ2VzdCksIDEpOworICAg
IHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgZGlnZXN0IH0sIDEp
OwogfQogCiAjaWYgSEFWRShBVURJVF9UT0tFTikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDUs
MTIgKzQ1LDEyIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBTaW1wbGVBcmd1bWUKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyLCBjb25zdCBUJiB0KQogICAgIHsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVG
aXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oJnQpLCBzaXpl
b2YoVCksIGFsaWdub2YoVCkpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0
YShTcGFuIHsgJnQsIDEgfSk7CiAgICAgfQogCiAgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVS
TiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBUJiB0KQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KCZ0KSwgc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKKyAgICAgICAgcmV0dXJuIGRlY29kZXIu
ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmdCwgMSB9KTsKICAgICB9CiB9OwogCkBAIC02
MSwxMyArNjEsMTQgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IEV4dGVudD4gc3RydQog
ICAgIHsKICAgICAgICAgaWYgKCFFeHRlbnQpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KGFycmF5UmVmZXJlbmNlLmRhdGEoKSksIGFycmF5UmVmZXJlbmNlLnNpemUoKSAqIHNp
emVvZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKFNwYW4geyBhcnJheVJlZmVyZW5jZS5kYXRhKCksIGFycmF5UmVmZXJlbmNlLnNpemUoKSB9
KTsKICAgICB9CiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8QXJyYXlSZWZlcmVuY2VUeXBlPiBk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7CiAgICAgICAgIGlmICghRXh0ZW50KQogICAg
ICAgICAgICAgcmV0dXJuIEFycmF5UmVmZXJlbmNlVHlwZSgpOwotICAgICAgICBjb25zdCB1aW50
OF90KiBkYXRhID0gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aFJlZmVyZW5jZShFeHRlbnQgKiBz
aXplb2YoVCksIGFsaWdub2YoVCkpOworCisgICAgICAgIGNvbnN0IGF1dG8qIGRhdGEgPSBkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoUmVmZXJlbmNlKEV4dGVudCAqIHNpemVvZihUKSwgYWxpZ25v
ZihUKSk7CiAgICAgICAgIGlmICghZGF0YSkKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CiAgICAgICAgIHJldHVybiBBcnJheVJlZmVyZW5jZVR5cGUocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBUKj4oZGF0YSksIEV4dGVudCk7CkBAIC04Miw3ICs4Myw3IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBBcmd1bWVudENvZGUKICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2Fz
dDx1aW50NjRfdD4oYXJyYXlSZWZlcmVuY2Uuc2l6ZSgpKTsKICAgICAgICAgaWYgKCFhcnJheVJl
ZmVyZW5jZS5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGVuY29kZXIuZW5j
b2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGFycmF5
UmVmZXJlbmNlLmRhdGEoKSksIGFycmF5UmVmZXJlbmNlLnNpemUoKSAqIHNpemVvZihUKSwgYWxp
Z25vZihUKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBh
cnJheVJlZmVyZW5jZS5kYXRhKCksIGFycmF5UmVmZXJlbmNlLnNpemUoKSB9KTsKICAgICB9CiAg
ICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8QXJyYXlSZWZlcmVuY2VUeXBlPiBkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKICAgICB7CkBAIC05Niw3ICs5Nyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBBcmd1bWVudENvZGUKICAgICAgICAgaWYgKFVOTElLRUxZKGRhdGFTaXplLmhhc092
ZXJmbG93ZWQoKSkpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgICAg
IGNvbnN0IHVpbnQ4X3QqIGRhdGEgPSBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoUmVmZXJlbmNl
KGRhdGFTaXplLCBhbGlnbm9mKFQpKTsKKyAgICAgICAgY29uc3QgYXV0byogZGF0YSA9IGRlY29k
ZXIuZGVjb2RlRml4ZWRMZW5ndGhSZWZlcmVuY2UoZGF0YVNpemUsIGFsaWdub2YoVCkpOwogICAg
ICAgICBpZiAoIWRhdGEpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAg
ICByZXR1cm4gQXJyYXlSZWZlcmVuY2VUeXBlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KGRh
dGEpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KHNpemUpKTsKQEAgLTQyMyw3ICs0MjQsNyBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpCiAgICAgc3RhdGljIHZvaWQgZW5j
b2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3Zl
cmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mIHZlY3RvcikKICAgICB7CiAgICAgICAgIGVuY29k
ZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZlY3Rvci5zaXplKCkpOwotICAgICAgICBlbmNv
ZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3Qq
Pih2ZWN0b3IuZGF0YSgpKSwgdmVjdG9yLnNpemUoKSAqIHNpemVvZihUKSwgYWxpZ25vZihUKSk7
CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGFzQnl0ZXMoU3BhbiB7IHZl
Y3RvciB9KSwgYWxpZ25vZihUKSk7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBXQVJOX1VOVVNF
RF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiYgdmVjdG9yKQpAQCAtNDQ2LDcg
KzQ0Nyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICAg
ICAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5
PiB0ZW1wOwogICAgICAgICB0ZW1wLmdyb3coc2l6ZSk7CiAKLSAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPih0ZW1wLmRh
dGEoKSksIHNpemUgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpKQorICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyB0ZW1wIH0pKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgICAgIHZlY3Rvci5zd2FwKHRlbXApOwpAQCAtNDczLDcgKzQ3NCw3
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICAgICAgVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiB2ZWN0
b3I7CiAgICAgICAgIHZlY3Rvci5ncm93KHNpemUpOwogCi0gICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4odmVjdG9yLmRh
dGEoKSksIHNpemUgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpKQorICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyB2ZWN0b3IgfSkpCiAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgICAgIHJldHVybiB2ZWN0b3I7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9BcnJheVJlZmVyZW5jZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FycmF5UmVmZXJlbmNlLmgJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FycmF5UmVmZXJlbmNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDYgKzMwLDggQEAKIAogbmFtZXNwYWNlIElQQyB7CiAKKy8vIEZJWE1F
OiBSZXBsYWNlIHdpdGggPHd0Zi9TcGFuLmg+CisKIGlubGluZSBjb25zdGV4cHIgc2l6ZV90IGFy
cmF5UmVmZXJlbmNlRHluYW1pY0V4dGVudCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6
bWF4KCk7CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgRXh0ZW50ID0gYXJyYXlSZWZl
cmVuY2VEeW5hbWljRXh0ZW50PgpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVj
b2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rl
ci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Rl
Y29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsMTMgKzIwNiwxMyBAQCBib29sIERlY29k
ZXI6OmJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhCiAgICAgcmV0dXJuIGFsaWduZWRCdWZmZXJJ
c0xhcmdlRW5vdWdoVG9Db250YWluKHJvdW5kVXBUb0FsaWdubWVudChtX2J1ZmZlclBvcywgYWxp
Z25tZW50KSwgbV9idWZmZXIsIG1fYnVmZmVyRW5kLCBzaXplKTsKIH0KIAotYm9vbCBEZWNvZGVy
OjpkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIHNpemVf
dCBhbGlnbm1lbnQpCitib29sIERlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPHN0
ZDo6Ynl0ZT4gZGF0YSwgc2l6ZV90IGFsaWdubWVudCkKIHsKLSAgICBpZiAoIWFsaWduQnVmZmVy
UG9zaXRpb24oYWxpZ25tZW50LCBzaXplKSkKKyAgICBpZiAoIWFsaWduQnVmZmVyUG9zaXRpb24o
YWxpZ25tZW50LCBkYXRhLnNpemUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1l
bWNweShkYXRhLCBtX2J1ZmZlclBvcywgc2l6ZSk7Ci0gICAgbV9idWZmZXJQb3MgKz0gc2l6ZTsK
KyAgICBtZW1jcHkoZGF0YS5kYXRhKCksIG1fYnVmZmVyUG9zLCBkYXRhLnNpemUoKSk7CisgICAg
bV9idWZmZXJQb3MgKz0gZGF0YS5zaXplKCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzks
NyArNzksMTMgQEAgcHVibGljOgogICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGlzVmFsaWQo
KSBjb25zdCB7IHJldHVybiBtX2J1ZmZlclBvcyAhPSBudWxscHRyOyB9CiAgICAgdm9pZCBtYXJr
SW52YWxpZCgpIHsgbV9idWZmZXJQb3MgPSBudWxscHRyOyB9CiAKLSAgICBXQVJOX1VOVVNFRF9S
RVRVUk4gYm9vbCBkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCogZGF0YSwgc2l6ZV90LCBz
aXplX3QgYWxpZ25tZW50KTsKKyAgICBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVGaXhl
ZExlbmd0aERhdGEoU3BhbjxzdGQ6OmJ5dGU+LCBzaXplX3QgYWxpZ25tZW50KTsKKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBOPgorICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBib29s
IGRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPFQsIE4+IGRhdGEsIHNpemVfdCBhbGlnbm1lbnQg
PSBhbGlnbm9mKFQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUZpeGVkTGVuZ3RoRGF0
YShhc1dyaXRhYmxlQnl0ZXMoZGF0YSksIGFsaWdubWVudCk7CisgICAgfQogCiAgICAgLy8gVGhl
IGRhdGEgaW4gdGhlIHJldHVybmVkIHBvaW50ZXIgaGVyZSB3aWxsIG9ubHkgYmUgdmFsaWQgZm9y
IHRoZSBsaWZldGltZSBvZiB0aGUgRGVjb2RlciBvYmplY3QuCiAgICAgLy8gUmV0dXJucyBudWxs
cHRyIG9uIGZhaWx1cmUuCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmNw
cAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiwxMiArMjAyLDEyIEBAIHVpbnQ4X3QqIEVuY29k
ZXI6Omdyb3coc2l6ZV90IGFsaWdubWVudCwKICAgICByZXR1cm4gbV9idWZmZXIgKyBhbGlnbmVk
U2l6ZTsKIH0KIAotdm9pZCBFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWlu
dDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQpCit2b2lkIEVuY29kZXI6
OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSwgc2l6ZV90
IGFsaWdubWVudCkKIHsKLSAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
ZGF0YSkgJSBhbGlnbm1lbnQpKTsKKyAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4oZGF0YS5kYXRhKCkpICUgYWxpZ25tZW50KSk7CiAKLSAgICB1aW50OF90KiBidWZmZXIg
PSBncm93KGFsaWdubWVudCwgc2l6ZSk7Ci0gICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7
CisgICAgYXV0byogYnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQsIGRhdGEuc2l6ZSgpKTsKKyAgICBt
ZW1jcHkoYnVmZmVyLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwogfQogCiB2b2lkIEVuY29k
ZXI6OmFkZEF0dGFjaG1lbnQoQXR0YWNobWVudCYmIGF0dGFjaG1lbnQpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcg
QEAKICNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSVBDIHsKQEAgLTYwLDcgKzYx
LDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgd3JhcEZvclRlc3RpbmcoVW5pcXVlUmVmPEVuY29k
ZXI+JiYpOwogCi0gICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCog
ZGF0YSwgc2l6ZV90LCBzaXplX3QgYWxpZ25tZW50KTsKKyAgICB2b2lkIGVuY29kZUZpeGVkTGVu
Z3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSwgc2l6ZV90IGFsaWdubWVudCk7CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgTj4KKyAgICB2b2lkIGVuY29kZUZpeGVk
TGVuZ3RoRGF0YShTcGFuPFQsIE4+IGRhdGEsIHNpemVfdCBhbGlnbm1lbnQgPSBhbGlnbm9mKFQp
KQorICAgIHsKKyAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGFzQnl0ZXMoZGF0YSksIGFs
aWdubWVudCk7CisgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBFbmNvZGVy
JiBvcGVyYXRvcjw8KFQmJiB0KQpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU2hh
cmVkQnVmZmVyQ29weS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9J
UEMvU2hhcmVkQnVmZmVyQ29weS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL1NoYXJlZEJ1ZmZlckNvcHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Myw3ICs0Myw3IEBAIHZvaWQgU2hhcmVkQnVmZmVyQ29weTo6ZW5jb2RlKEVuY29kZXImIGUKICAg
ICBpZiAoIWJ1ZmZlclNpemUpCiAgICAgICAgIHJldHVybjsKICAgICBmb3IgKGF1dG8mIHNlZ21l
bnQgOiAqbV9idWZmZXIpCi0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHNl
Z21lbnQuc2VnbWVudC0+ZGF0YSgpLCBzZWdtZW50LnNlZ21lbnQtPnNpemUoKSwgMSk7CisgICAg
ICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHNlZ21lbnQuc2VnbWVudC0+Ynl0ZXMo
KSwgMSk7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8U2hhcmVkQnVmZmVyQ29weT4gU2hhcmVkQnVmZmVy
Q29weTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uRW5jb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25FbmNvZGVyLmgJKHJldmlzaW9uIDI3
ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25FbmNv
ZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkFyZ3Vt
ZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiTWVzc2FnZU5hbWVzLmgiCisjaW5jbHVkZSA8d3RmL1Nw
YW4uaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBJUEMgewpA
QCAtNTMsMjEgKzU0LDI3IEBAIHB1YmxpYzoKIAogICAgIH5TdHJlYW1Db25uZWN0aW9uRW5jb2Rl
cigpID0gZGVmYXVsdDsKIAotICAgIGJvb2wgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVp
bnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50KQorICAgIGJvb2wgZW5j
b2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhLCBzaXplX3QgYWxp
Z25tZW50KQogICAgIHsKICAgICAgICAgc2l6ZV90IGJ1ZmZlclBvaW50ZXIgPSBzdGF0aWNfY2Fz
dDxzaXplX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fYnVmZmVyICsgbV9lbmNvZGVk
U2l6ZSkpOwogICAgICAgICBzaXplX3QgbmV3QnVmZmVyUG9pbnRlciA9IHJvdW5kVXBUb011bHRp
cGxlT2YoYWxpZ25tZW50LCBidWZmZXJQb2ludGVyKTsKICAgICAgICAgaWYgKG5ld0J1ZmZlclBv
aW50ZXIgPCBidWZmZXJQb2ludGVyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICBpbnRwdHJfdCBhbGlnbmVkU2l6ZSA9IG1fZW5jb2RlZFNpemUgKyAobmV3QnVmZmVyUG9pbnRl
ciAtIGJ1ZmZlclBvaW50ZXIpOwotICAgICAgICBpZiAoIXJlc2VydmUoYWxpZ25lZFNpemUsIHNp
emUpKQorICAgICAgICBpZiAoIXJlc2VydmUoYWxpZ25lZFNpemUsIGRhdGEuc2l6ZSgpKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdWludDhfdCogYnVmZmVyID0gbV9idWZm
ZXIgKyBhbGlnbmVkU2l6ZTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7Ci0g
ICAgICAgIG1fZW5jb2RlZFNpemUgPSBhbGlnbmVkU2l6ZSArIHNpemU7CisgICAgICAgIGF1dG8q
IGJ1ZmZlciA9IG1fYnVmZmVyICsgYWxpZ25lZFNpemU7CisgICAgICAgIG1lbWNweShidWZmZXIs
IGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgICAgIG1fZW5jb2RlZFNpemUgPSBhbGln
bmVkU2l6ZSArIGRhdGEuc2l6ZSgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgTj4KKyAgICB2b2lkIGVuY29kZUZpeGVkTGVu
Z3RoRGF0YShTcGFuPFQsIE4+IGRhdGEsIHNpemVfdCBhbGlnbm1lbnQgPSBhbGlnbm9mKFQpKQor
ICAgIHsKKyAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGFzQnl0ZXMoZGF0YSksIGFsaWdu
bWVudCk7CisgICAgfQorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBTdHJlYW1Db25u
ZWN0aW9uRW5jb2RlciYgb3BlcmF0b3I8PChUJiYgdCkKICAgICB7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE0NCw3ICsxNDQsNyBAQCBzdGF0aWMgdm9pZCBlbmNvZGVTaGFyZWRC
dWZmZXIoRW5jb2RlciYgCiAgICAgLy8gb3ZlciB0aGUgSVBDLiBDb25uZWN0aW9uVW5peC5jcHAg
YWxyZWFkeSB1c2VzIHNoYXJlZCBtZW1vcnkgdG8gc2VuZCBhbnkgSVBDIG1lc3NhZ2UgdGhhdCBp
cwogICAgIC8vIHRvbyBsYXJnZS4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDg1NzEuCiAgICAgZm9yIChjb25zdCBhdXRvJiBlbGVtZW50IDogKmJ1ZmZlcikK
LSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoZWxlbWVudC5zZWdtZW50LT5k
YXRhKCksIGVsZW1lbnQuc2VnbWVudC0+c2l6ZSgpLCAxKTsKKyAgICAgICAgZW5jb2Rlci5lbmNv
ZGVGaXhlZExlbmd0aERhdGEoZWxlbWVudC5zZWdtZW50LT5ieXRlcygpLCAxKTsKICNlbHNlCiAg
ICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOwogICAgIGF1dG8gc2hhcmVkTWVtb3J5QnVm
ZmVyID0gU2hhcmVkTWVtb3J5Ojpjb3B5QnVmZmVyKCpidWZmZXIpOwpAQCAtMTgwLDcgKzE4MCw3
IEBAIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVTaGEKIAogICAgIFZlY3Rv
cjx1aW50OF90PiBkYXRhOwogICAgIGRhdGEuZ3JvdyhidWZmZXJTaXplKTsKLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgMSkp
CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgZGF0YSB9LCAx
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYnVmZmVyID0gU2hhcmVkQnVmZmVyOjpj
cmVhdGUoV1RGTW92ZShkYXRhKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1No
YXJlZC93aW4vV2ViQ29yZUFyZ3VtZW50Q29kZXJzV2luLmNwcAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dlYktpdC9TaGFyZWQvd2luL1dlYkNvcmVBcmd1bWVudENvZGVyc1dpbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDEyICs1MSwxMiBAQCBzdGQ6Om9wdGlvbmFsPEZvbnRBdHRy
aWJ1dGVzPiBBcmd1bWVudENvCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPExPR0ZP
TlQ+IHsKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgTE9H
Rk9OVCYgbG9nRm9udCkKICAgICB7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZsb2dGb250KSwgc2l6ZW9mIGxv
Z0ZvbnQsIDEpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsg
JmxvZ0ZvbnQsIDEgfSwgMSk7CiAgICAgfQogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPExPR0ZP
TlQ+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKICAgICAgICAgTE9HRk9OVCBsb2dG
b250OwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KCZsb2dGb250KSwgc2l6ZW9mKGxvZ0ZvbnQpLCAxKSkKKyAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJmxvZ0ZvbnQsIDEg
fSwgMSkpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAgICByZXR1cm4g
bG9nRm9udDsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29u
dGVudFJ1bGVMaXN0U3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEzMSwxOCArMTMxLDIwIEBAIHN0YXRpYyBXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6RGF0YSBlbmNvZGUKICAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmNvbmRpdGlvbmVk
RmlsdGVyc0J5dGVjb2RlU2l6ZTsKICAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmNvbmRpdGlvbnNB
cHBseU9ubHlUb0RvbWFpbjsKIAotICAgIEFTU0VSVChlbmNvZGVyLmJ1ZmZlclNpemUoKSA9PSBD
b250ZW50UnVsZUxpc3RGaWxlSGVhZGVyU2l6ZSk7Ci0gICAgcmV0dXJuIFdlYktpdDo6TmV0d29y
a0NhY2hlOjpEYXRhKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAg
ICBBU1NFUlQoZW5jb2Rlci5idWZmZXIoKS5zaXplKCkgPT0gQ29udGVudFJ1bGVMaXN0RmlsZUhl
YWRlclNpemUpOworICAgIHJldHVybiBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YSB7IGVuY29k
ZXIuYnVmZmVyKCkgfTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBnZXREYXRhKGNv
bnN0IFQmLCBjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYpOwot
dGVtcGxhdGU8PiB2b2lkIGdldERhdGEoY29uc3QgV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGEm
IGRhdGEsIGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCosIHNpemVfdCk+JiBmdW5j
dGlvbikKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgZ2V0RGF0YShjb25zdCBUJiwgY29uc3Qg
RnVuY3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYpOworCit0ZW1wbGF0ZTw+IHZv
aWQgZ2V0RGF0YShjb25zdCBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YSYgZGF0YSwgY29uc3Qg
RnVuY3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYgZnVuY3Rpb24pCiB7CiAgICAg
ZGF0YS5hcHBseShmdW5jdGlvbik7CiB9Ci10ZW1wbGF0ZTw+IHZvaWQgZ2V0RGF0YShjb25zdCBX
ZWJDb3JlOjpTaGFyZWRCdWZmZXImIGRhdGEsIGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWlu
dDhfdCosIHNpemVfdCk+JiBmdW5jdGlvbikKKwordGVtcGxhdGU8PiB2b2lkIGdldERhdGEoY29u
c3QgV2ViQ29yZTo6U2hhcmVkQnVmZmVyJiBkYXRhLCBjb25zdCBGdW5jdGlvbjxib29sKFNwYW48
Y29uc3Qgc3RkOjpieXRlPik+JiBmdW5jdGlvbikKIHsKLSAgICBmdW5jdGlvbihkYXRhLmRhdGEo
KSwgZGF0YS5zaXplKCkpOworICAgIGZ1bmN0aW9uKGRhdGEuYnl0ZXMoKSk7CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CkBAIC0xNTAsMTMgKzE1MiwxMyBAQCBzdGF0aWMgc3RkOjpvcHRpb25h
bDxDb250ZW50UnVsZUxpc3RNZXRhCiB7CiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CiAgICAg
Q29udGVudFJ1bGVMaXN0TWV0YURhdGEgbWV0YURhdGE7Ci0gICAgZ2V0RGF0YShmaWxlRGF0YSwg
WyZtZXRhRGF0YSwgJnN1Y2Nlc3MsICZmaWxlRGF0YV0oY29uc3QgdWludDhfdCogZGF0YSwgc2l6
ZV90IHNpemUpIHsKKyAgICBnZXREYXRhKGZpbGVEYXRhLCBbJm1ldGFEYXRhLCAmc3VjY2Vzcywg
JmZpbGVEYXRhXShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkgewogICAgICAgICAvLyBUaGUg
ZmlsZSBkYXRhIHNob3VsZCBiZSBtYXBwZWQgaW50byBvbmUgY29udGludW91cyBtZW1vcnkgc2Vn
bWVudCBzbyB0aGUgc2l6ZQogICAgICAgICAvLyBwYXNzZWQgdG8gdGhlIGFwcGxpZXIgc2hvdWxk
IGFsd2F5cyBlcXVhbCB0aGUgZGF0YSBzaXplLgotICAgICAgICBpZiAoc2l6ZSAhPSBmaWxlRGF0
YS5zaXplKCkpCisgICAgICAgIGlmIChkYXRhLnNpemUoKSAhPSBmaWxlRGF0YS5zaXplKCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVj
b2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOworICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNv
ZGVyIGRlY29kZXIgeyBkYXRhIH07CiAgICAgICAgIAogICAgICAgICBzdGQ6Om9wdGlvbmFsPHVp
bnQzMl90PiB2ZXJzaW9uOwogICAgICAgICBkZWNvZGVyID4+IHZlcnNpb247CkBAIC0yMjgsOCAr
MjMwLDggQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TWFwcGVkRGF0YT4gb3BlbkFuZAogc3RhdGlj
IGJvb2wgd3JpdGVEYXRhVG9GaWxlKGNvbnN0IFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhJiBm
aWxlRGF0YSwgUGxhdGZvcm1GaWxlSGFuZGxlIGZkKQogewogICAgIGJvb2wgc3VjY2VzcyA9IHRy
dWU7Ci0gICAgZmlsZURhdGEuYXBwbHkoW2ZkLCAmc3VjY2Vzc10oY29uc3QgdWludDhfdCogZGF0
YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgaWYgKHdyaXRlVG9GaWxlKGZkLCBkYXRhLCBzaXpl
KSA9PSAtMSkgeworICAgIGZpbGVEYXRhLmFwcGx5KFtmZCwgJnN1Y2Nlc3NdKFNwYW48Y29uc3Qg
c3RkOjpieXRlPiBkYXRhKSB7CisgICAgICAgIGlmICh3cml0ZVRvRmlsZShmZCwgZGF0YS5kYXRh
KCksIGRhdGEuc2l6ZSgpKSA9PSAtMSkgewogICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9tYWMvTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nLmNw
cAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL0xlZ2Fj
eVNlc3Npb25TdGF0ZUNvZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3ICsxMjksNyBA
QCBwdWJsaWM6CiAgICAgICAgICp0aGlzIDw8IGxlbmd0aDsKIAogICAgICAgICAqdGhpcyA8PCBz
dGF0aWNfY2FzdDx1aW50NjRfdD4obGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgICAgIGVu
Y29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihTdHJp
bmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKS5nZXQoKSksIGxlbmd0aCAqIHNp
emVvZihVQ2hhciksIGFsaWdub2YoVUNoYXIpKTsKKyAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKFNwYW4geyBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKS5nZXQo
KSwgbGVuZ3RoIH0pOwogCiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CkBAIC0xMzcsNyAr
MTM3LDcgQEAgcHVibGljOgogICAgIEhpc3RvcnlFbnRyeURhdGFFbmNvZGVyJiBvcGVyYXRvcjw8
KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmFsdWUpCiAgICAgewogICAgICAgICAqdGhpcyA8PCBz
dGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUuc2l6ZSgpKTsKLSAgICAgICAgZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKHZhbHVlLmRhdGEoKSwgdmFsdWUuc2l6ZSgpLCAxKTsKKyAgICAgICAgZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKFNwYW4geyB2YWx1ZSB9LCAxKTsKIAogICAgICAgICByZXR1cm4gKnRo
aXM7CiAgICAgfQpAQCAtMTQ1LDcgKzE0NSw3IEBAIHB1YmxpYzoKICAgICBIaXN0b3J5RW50cnlE
YXRhRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBWZWN0b3I8Y2hhcj4mIHZhbHVlKQogICAgIHsK
ICAgICAgICAgKnRoaXMgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZhbHVlLnNpemUoKSk7Ci0g
ICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPih2YWx1ZS5kYXRhKCkpLCB2YWx1ZS5zaXplKCksIDEpOworICAgICAgICBlbmNvZGVGaXhl
ZExlbmd0aERhdGEoU3BhbiB7IHZhbHVlIH0sIDEpOwogCiAgICAgICAgIHJldHVybiAqdGhpczsK
ICAgICB9CkBAIC0yMDYsMTcgKzIwNiwyMyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX2FyaXRobWV0aWM8VHlwZT46OnZhbHVlLCAiIik7CiAKLSAgICAg
ICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2YWx1
ZSksIHNpemVvZih2YWx1ZSksIHNpemVvZih2YWx1ZSkpOworICAgICAgICBlbmNvZGVGaXhlZExl
bmd0aERhdGEoU3BhbiB7ICZ2YWx1ZSwgMSB9LCBzaXplb2YodmFsdWUpKTsKICAgICAgICAgcmV0
dXJuICp0aGlzOwogICAgIH0KIAotICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0
IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBhbGlnbm1lbnQpCisgICAgdm9p
ZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEsIHVuc2ln
bmVkIGFsaWdubWVudCkKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGRhdGEgfHwgIXNp
emUpOwotICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZGF0YSkg
JSBhbGlnbm1lbnQpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGF0YS5kYXRhKCkgfHwgIWRh
dGEuc2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KGRhdGEuZGF0YSgpKSAlIGFsaWdubWVudCkpOwogCi0gICAgICAgIHVpbnQ4X3QqIGJ1ZmZlciA9
IGdyb3coYWxpZ25tZW50LCBzaXplKTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6
ZSk7CisgICAgICAgIGF1dG8qIGJ1ZmZlciA9IGdyb3coYWxpZ25tZW50LCBkYXRhLnNpemUoKSk7
CisgICAgICAgIG1lbWNweShidWZmZXIsIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IE4+CisgICAgdm9pZCBlbmNvZGVG
aXhlZExlbmd0aERhdGEoU3BhbjxULCBOPiBkYXRhLCBzaXplX3QgYWxpZ25tZW50ID0gYWxpZ25v
ZihUKSkKKyAgICB7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShhc0J5dGVzKGRhdGEp
LCBhbGlnbm1lbnQpOwogICAgIH0KIAogICAgIHVpbnQ4X3QqIGdyb3codW5zaWduZWQgYWxpZ25t
ZW50LCBzaXplX3Qgc2l6ZSkKQEAgLTYwMSw3ICs2MDcsNyBAQCBwdWJsaWM6CiAKICAgICAgICAg
VUNoYXIqIGJ1ZmZlcjsKICAgICAgICAgYXV0byBzdHJpbmcgPSBTdHJpbmc6OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgICAgICBkZWNvZGVGaXhlZExlbmd0aERhdGEo
cmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFy
KSwgYWxpZ25vZihVQ2hhcikpOworICAgICAgICBkZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7
IGJ1ZmZlciwgbGVuZ3RoIH0sIGFsaWdub2YoVUNoYXIpKTsKIAogICAgICAgICB2YWx1ZSA9IHN0
cmluZzsKICAgICAgICAgcmV0dXJuICp0aGlzOwpAQCAtNzM3LDE3ICs3NDMsMjMgQEAgcHJpdmF0
ZToKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2FyaXRobWV0aWM8VHlwZT46OnZhbHVl
LCAiIik7CiAgICAgICAgIHZhbHVlID0gVHlwZSgpOwogCi0gICAgICAgIGRlY29kZUZpeGVkTGVu
Z3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWUpLCBzaXplb2YodmFsdWUp
LCBzaXplb2YodmFsdWUpKTsKKyAgICAgICAgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAm
dmFsdWUsIDEgfSwgc2l6ZW9mKHZhbHVlKSk7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9
CiAKLSAgICB2b2lkIGRlY29kZUZpeGVkTGVuZ3RoRGF0YSh1aW50OF90KiBkYXRhLCBzaXplX3Qg
c2l6ZSwgdW5zaWduZWQgYWxpZ25tZW50KQorICAgIHZvaWQgZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KFNwYW48c3RkOjpieXRlPiBkYXRhLCB1bnNpZ25lZCBhbGlnbm1lbnQpCiAgICAgewotICAgICAg
ICBpZiAoIWFsaWduQnVmZmVyUG9zaXRpb24oYWxpZ25tZW50LCBzaXplKSkKKyAgICAgICAgaWYg
KCFhbGlnbkJ1ZmZlclBvc2l0aW9uKGFsaWdubWVudCwgZGF0YS5zaXplKCkpKQogICAgICAgICAg
ICAgcmV0dXJuOwogCi0gICAgICAgIG1lbWNweShkYXRhLCBtX2J1ZmZlciwgc2l6ZSk7Ci0gICAg
ICAgIG1fYnVmZmVyICs9IHNpemU7CisgICAgICAgIG1lbWNweShkYXRhLmRhdGEoKSwgbV9idWZm
ZXIsIGRhdGEuc2l6ZSgpKTsKKyAgICAgICAgbV9idWZmZXIgKz0gZGF0YS5zaXplKCk7CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IE4+CisgICAgdm9pZCBkZWNvZGVG
aXhlZExlbmd0aERhdGEoU3BhbjxULCBOPiBkYXRhLCBzaXplX3QgYWxpZ25tZW50KQorICAgIHsK
KyAgICAgICAgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGFzV3JpdGFibGVCeXRlcyhkYXRhKSwgYWxp
Z25tZW50KTsKICAgICB9CiAKICAgICBib29sIGFsaWduQnVmZmVyUG9zaXRpb24odW5zaWduZWQg
YWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjkxLDcgKzY5MSw3IEBAIHN0YXRpYyBib29sIGVuY29kZVR5cGVkQXJyYXko
SVBDOjpFbmNvZGUKICAgICBpZiAoIWRhdGEuYnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQ4X3QqPihkYXRhLmJ1ZmZlciksIGRhdGEubGVuZ3RoLCAxKTsKKyAgICBlbmNvZGVy
LmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBzdGQ6
OmJ5dGUqPihkYXRhLmJ1ZmZlciksIGRhdGEubGVuZ3RoIH0sIDEpOwogICAgIHJldHVybiB0cnVl
OwogfQogCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdl
TG9nCShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwyNyBAQAorMjAyMS0wNi0xMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRvcHQgU3BhbiBpbiBtb3JlIHBsYWNlcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL2NhaXJvL1BpeGVsRHVtcFN1cHBvcnRDYWlyby5jcHA6CisgICAgICAgIChjb21w
dXRlU0hBMUhhc2hTdHJpbmdGb3JCaXRtYXBDb250ZXh0KToKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9jZy9QaXhlbER1bXBTdXBwb3J0Q0cuY3BwOgorICAgICAgICAoY29tcHV0ZVNIQTFIYXNo
U3RyaW5nRm9yQml0bWFwQ29udGV4dCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvQmxvb21GaWx0ZXIuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Z2VuZXJhdGVSYW5k
b21EaWdlc3RzKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVt
LmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Q29u
bmVjdGlvbjo6d2ViU29ja2V0SGFuZHNoYWtlKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwOgorICAgICAgICAoV1RSOjpjb21wdXRlU0hB
MUhhc2hTdHJpbmdGb3JDYWlyb1N1cmZhY2UpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIv
Y2cvVGVzdEludm9jYXRpb25DRy5jcHA6CisgICAgICAgIChXVFI6OmNvbXB1dGVTSEExSGFzaFN0
cmluZ0ZvckNvbnRleHQpOgorCiAyMDIxLTA2LTExICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3Jp
LkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIFtXaW5dW0R1bXBSZW5kZXJUcmVlXSAtLW5vLXRp
bWVvdXQgc3dpdGNoIGRvZXNuJ3Qgd29yawpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2Fp
cm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVu
ZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fpcm8uY3BwCShyZXZpc2lvbiAyNzg4MDkp
CisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fpcm8uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHZvaWQgY29tcHV0ZVNIQTFIYXNoU3Ry
aW5nRm9yQml0bWFwQ29udGUKICAgICBTSEExIHNoYTE7CiAgICAgdW5zaWduZWQgY2hhciogYml0
bWFwRGF0YSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9kYXRhKHN1cmZhY2UpKTsKICAgICBmb3IgKHVuc2lnbmVkIHJvdyA9IDA7IHJvdyA8IHBp
eGVsc0hpZ2g7IHJvdysrKSB7Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMoYml0bWFwRGF0YSwgNCAq
IHBpeGVsc1dpZGUpOworICAgICAgICBzaGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7IGJpdG1h
cERhdGEsIDQgKiBwaXhlbHNXaWRlIH0pKTsKICAgICAgICAgYml0bWFwRGF0YSArPSBieXRlc1Bl
clJvdzsKICAgICB9CiAgICAgU0hBMTo6RGlnZXN0IGhhc2g7CkluZGV4OiBUb29scy9EdW1wUmVu
ZGVyVHJlZS9jZy9QaXhlbER1bXBTdXBwb3J0Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRDRy5jcHAJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRDRy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg4LDE0ICs4OCwxNCBAQCB2b2lkIGNvbXB1dGVTSEExSGFzaFN0cmluZ0Zv
ckJpdG1hcENvbnRlCiAgICAgICAgICAgICB1aW50MzJfdCBidWZmZXJbcGl4ZWxzV2lkZV07CiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNvbHVtbiA9IDA7IGNvbHVtbiA8IHBpeGVsc1dpZGU7
IGNvbHVtbisrKQogICAgICAgICAgICAgICAgIGJ1ZmZlcltjb2x1bW5dID0gT1NSZWFkTGl0dGxl
SW50MzIoYml0bWFwRGF0YSwgNCAqIGNvbHVtbik7Ci0gICAgICAgICAgICBzaGExLmFkZEJ5dGVz
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZlciksIDQgKiBwaXhlbHNXaWRl
KTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgYnVmZmVyLCBwaXhl
bHNXaWRlIH0pKTsKICAgICAgICAgICAgIGJpdG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7CiAgICAg
ICAgIH0KICAgICB9IGVsc2UKICNlbmRpZgogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBy
b3cgPSAwOyByb3cgPCBwaXhlbHNIaWdoOyByb3crKykgewotICAgICAgICAgICAgc2hhMS5hZGRC
eXRlcyhiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lkZSk7CisgICAgICAgICAgICBzaGExLmFkZEJ5
dGVzKGFzQnl0ZXMoU3BhbiB7IGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlIH0pKTsKICAgICAg
ICAgICAgIGJpdG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7CiAgICAgICAgIH0KICAgICB9CkluZGV4
OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9CbG9vbUZpbHRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQmxvb21GaWx0ZXIuY3BwCShyZXZp
c2lvbiAyNzg4MDkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9CbG9vbUZpbHRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgc3RhdGljIFZlY3RvcjxTSEEx
OjpEaWdlc3Q+IGdlbmVyYXRlUmFuZAogICAgIFNIQTEgc2hhMTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgaGFzaENvdW50OyArK2kpIHsKICAgICAgICAgZG91YmxlIHJhbmRvbSA9IHJh
bmRvbU51bWJlcigpOwotICAgICAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDhfdCo+KCZyYW5kb20pLCBzaXplb2YoZG91YmxlKSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMo
YXNCeXRlcyhTcGFuIHsgJnJhbmRvbSwgMSB9KSk7CiAgICAgICAgIFNIQTE6OkRpZ2VzdCBkaWdl
c3Q7CiAgICAgICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsKICAgICAgICAgaGFzaGVzLmFw
cGVuZChkaWdlc3QpOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5
c3RlbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmls
ZVN5c3RlbS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL0ZpbGVTeXN0ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsOCArMTMzLDggQEAg
VEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBNYXBwaW5nRXhpc3RpbmdGaQogICAgIEZpbGVTeXN0ZW06
Ok1hcHBlZEZpbGVEYXRhIG1hcHBlZEZpbGVEYXRhKHRlbXBGaWxlUGF0aCgpLCBGaWxlU3lzdGVt
OjpNYXBwZWRGaWxlTW9kZTo6U2hhcmVkLCBzdWNjZXNzKTsKICAgICBFWFBFQ1RfVFJVRShzdWNj
ZXNzKTsKICAgICBFWFBFQ1RfVFJVRSghIW1hcHBlZEZpbGVEYXRhKTsKLSAgICBFWFBFQ1RfVFJV
RShtYXBwZWRGaWxlRGF0YS5zaXplKCkgPT0gc3RybGVuKEZpbGVTeXN0ZW1UZXN0RGF0YSkpOwot
ICAgIEVYUEVDVF9UUlVFKHN0cm5zdHIoRmlsZVN5c3RlbVRlc3REYXRhLCBzdGF0aWNfY2FzdDxj
b25zdCBjaGFyKj4obWFwcGVkRmlsZURhdGEuZGF0YSgpKSwgbWFwcGVkRmlsZURhdGEuc2l6ZSgp
KSk7CisgICAgRVhQRUNUX1RSVUUobWFwcGVkRmlsZURhdGEuZGF0YSgpLnNpemUoKSA9PSBzdHJs
ZW4oRmlsZVN5c3RlbVRlc3REYXRhKSk7CisgICAgRVhQRUNUX1RSVUUoc3RybnN0cihGaWxlU3lz
dGVtVGVzdERhdGEsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KG1hcHBlZEZpbGVEYXRh
LmRhdGEoKS5kYXRhKCkpLCBtYXBwZWRGaWxlRGF0YS5kYXRhKCkuc2l6ZSgpKSk7CiB9CiAKIFRF
U1RfRihGaWxlU3lzdGVtVGVzdCwgTWFwcGluZ0V4aXN0aW5nRW1wdHlGaWxlKQpJbmRleDogVG9v
bHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbQkocmV2aXNpb24gMjc4ODA5KQorKysg
VG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zNDAsMTEgKzM0MCwxMSBAQCB2b2lkIENvbm5lY3Rpb246OndlYlNvY2tldEhhbmRzaGFrZShD
b21wCiAKICAgICAgICAgICAgIGNvbnN0ZXhwciBhdXRvKiB3ZWJTb2NrZXRLZXlHVUlEID0gIjI1
OEVBRkE1LUU5MTQtNDdEQS05NUNBLUM1QUIwREM4NUIxMSI7CiAgICAgICAgICAgICBTSEExIHNo
YTE7Ci0gICAgICAgICAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KGtleUJlZ2luKSwga2V5RW5kIC0ga2V5QmVnaW4pOwotICAgICAgICAgICAgc2hhMS5h
ZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih3ZWJTb2NrZXRLZXlHVUlE
KSwgc3RybGVuKHdlYlNvY2tldEtleUdVSUQpKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMo
YXNCeXRlcyhTcGFuIHsga2V5QmVnaW4sIGtleUVuZCB9KSk7CisgICAgICAgICAgICBzaGExLmFk
ZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7IHdlYlNvY2tldEtleUdVSUQsIHN0cmxlbih3ZWJTb2NrZXRL
ZXlHVUlEKSB9KSk7CiAgICAgICAgICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAgICAgICAgICAg
IHNoYTEuY29tcHV0ZUhhc2goaGFzaCk7Ci0gICAgICAgICAgICByZXR1cm4gYmFzZTY0RW5jb2Rl
VG9TdHJpbmcoaGFzaC5kYXRhKCksIFNIQTE6Omhhc2hTaXplKTsKKyAgICAgICAgICAgIHJldHVy
biBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgaGFzaCB9KTsKICAgICAgICAgfTsKIAogICAg
ICAgICBjb25uZWN0aW9uLnNlbmQoSFRUUFJlc3BvbnNlKDEwMSwgewpJbmRleDogVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9jYWlyby9UZXN0SW52b2NhdGlvbkNhaXJvLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZv
Y2F0aW9uQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyB2
b2lkIGNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckNhaXIKICAgICBTSEExIHNoYTE7CiAgICAgdW5z
aWduZWQgY2hhciogYml0bWFwRGF0YSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihjYWly
b19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpKTsKICAgICBmb3IgKHNpemVfdCByb3cg
PSAwOyByb3cgPCBwaXhlbHNIaWdoOyArK3JvdykgewotICAgICAgICBzaGExLmFkZEJ5dGVzKGJp
dG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhhc0J5dGVz
KFNwYW4geyBiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lkZSB9KSk7CiAgICAgICAgIGJpdG1hcERh
dGEgKz0gYnl0ZXNQZXJSb3c7CiAgICAgfQogICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwpJbmRleDog
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwCShyZXZp
c2lvbiAyNzg4MDkpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9u
Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NywxNCArODcsMTQgQEAgdm9pZCBjb21wdXRlU0hB
MUhhc2hTdHJpbmdGb3JDb250ZXh0KENHQwogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1
ZmZlcig0ICogcGl4ZWxzV2lkZSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNvbHVtbiA9
IDA7IGNvbHVtbiA8IHBpeGVsc1dpZGU7IGNvbHVtbisrKQogICAgICAgICAgICAgICAgIGJ1ZmZl
cltjb2x1bW5dID0gT1NSZWFkTGl0dGxlSW50MzIoYml0bWFwRGF0YSwgNCAqIGNvbHVtbik7Ci0g
ICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGJ1ZmZlcik7CisgICAgICAgICAgICBzaGExLmFkZEJ5
dGVzKGFzQnl0ZXMoU3BhbiB7IGJ1ZmZlciB9KSk7CiAgICAgICAgICAgICBiaXRtYXBEYXRhICs9
IGJ5dGVzUGVyUm93OwogICAgICAgICB9CiAgICAgfSBlbHNlCiAjZW5kaWYKICAgICB7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgcm93ID0gMDsgcm93IDwgcGl4ZWxzSGlnaDsgcm93KyspIHsKLSAg
ICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoYml0bWFwRGF0YSwgNCAqIHBpeGVsc1dpZGUpOworICAg
ICAgICAgICAgc2hhMS5hZGRCeXRlcyhhc0J5dGVzKFNwYW4geyBiaXRtYXBEYXRhLCA0ICogcGl4
ZWxzV2lkZSB9KSk7CiAgICAgICAgICAgICBiaXRtYXBEYXRhICs9IGJ5dGVzUGVyUm93OwogICAg
ICAgICB9CiAgICAgfQo=
</data>
<flag name="commit-queue"
          id="452986"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431259</attachid>
            <date>2021-06-12 08:23:23 -0700</date>
            <delta_ts>2021-06-12 18:37:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226887-20210612082322.patch</filename>
            <type>text/plain</type>
            <size>129470</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBA
CisyMDIxLTA2LTEyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogQVBJL0pTU2NyaXB0Lm1tOgorICAg
ICAgICAoK1tKU1NjcmlwdCBzY3JpcHRPZlR5cGU6bWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTp3
aXRoU291cmNlVVJMOmFuZEJ5dGVjb2RlQ2FjaGU6aW5WaXJ0dWFsTWFjaGluZTplcnJvcjpdKToK
KyAgICAgICAgKC1bSlNTY3JpcHQgcmVhZENhY2hlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHdy
aXRlQ2FjaGU6XSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9ja0hhc2g6OkNvZGVCbG9ja0hhc2gpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHA6CisgICAgICAgIChJbnNw
ZWN0b3I6OmJhY2tlbmRDb21tYW5kc0hhc2gpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZm
ZXIuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJDb250ZW50czo6d3JpdGFibGVCeXRlcyk6
CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyQ29udGVudHM6OmJ5dGVzIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6QXJyYXlCdWZmZXI6OndyaXRhYmxlQnl0ZXMpOgorICAgICAgICAoSlNDOjpBcnJh
eUJ1ZmZlcjo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
Lmg6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6d3JpdGFibGVCeXRlcyk6CisgICAg
ICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRp
bWUvQ2FjaGVQYXlsb2FkLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVQYXlsb2FkOjptYWtlTWFw
cGVkUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6bWFrZU1hbGxvY1BheWxv
YWQpOgorICAgICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6Om1ha2VFbXB0eVBheWxvYWQpOgorICAg
ICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6OkNhY2hlUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNh
Y2hlUGF5bG9hZDo6ZnJlZURhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVQYXlsb2FkLmg6
CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6ZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlUGF5bG9hZDo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6
Q2FjaGVQYXlsb2FkKToKKyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKToKKwogMjAyMS0w
Ni0xMSAgUGF0cmljayBBbmdsZSAgPHBhbmdsZUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogQWRkIGluc3RydW1lbnRhdGlvbiB0byBub2RlIGRlc3RydWN0aW9uIGZvciBJbnNw
ZWN0b3JET01BZ2VudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMTMgKzEzNCwxMyBAQCArIChpbnN0YW5jZXR5cGUpc2Ny
aXB0T2ZUeXBlOihKU1NjcmlwdFR5CiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4g
Y3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJGaWxlIGF0IHBhdGggJUAg
Y291bGQgbm90IGJlIG1hcHBlZC4iLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihzeXN0ZW1QYXRo
KV0sIGVycm9yKTsKIAotICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCkpKQor
ICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmlsZURhdGEuZGF0YSgpLnNpemUoKSkpCiAg
ICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIk5v
dCBhbGwgY2hhcmFjdGVycyBpbiBmaWxlIGF0ICVAIGFyZSBBU0NJSS4iLCBzdGF0aWNfY2FzdDxO
U1N0cmluZyAqPihzeXN0ZW1QYXRoKV0sIGVycm9yKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gYWRv
cHROUyhbW0pTU2NyaXB0IGFsbG9jXSBpbml0XSk7CiAgICAgcmVzdWx0LT5tX3ZpcnR1YWxNYWNo
aW5lID0gdm07CiAgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOwotICAgIHJlc3VsdC0+bV9zb3Vy
Y2UgPSBTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcoYml0d2lzZV9jYXN0
PGNvbnN0IExDaGFyKj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpKSk7CisgICAg
cmVzdWx0LT5tX3NvdXJjZSA9IFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWlu
ZyhiaXR3aXNlX2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmls
ZURhdGEuZGF0YSgpLnNpemUoKSkpOwogICAgIHJlc3VsdC0+bV9tYXBwZWRTb3VyY2UgPSBXVEZN
b3ZlKGZpbGVEYXRhKTsKICAgICByZXN1bHQtPm1fc291cmNlVVJMID0gc291cmNlVVJMOwogICAg
IHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7CkBAIC0xNjgsMjQgKzE2OCwyMyBAQCAt
ICh2b2lkKXJlYWRDYWNoZQogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgY29uc3QgdWludDhfdCogZmlsZURhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihtYXBwZWRGaWxlLmRhdGEoKSk7Ci0gICAgdW5zaWduZWQgZmlsZVRvdGFsU2l6ZSA9IG1h
cHBlZEZpbGUuc2l6ZSgpOworICAgIGF1dG8gZmlsZURhdGEgPSBtYXBwZWRGaWxlLmRhdGEoKTsK
IAogICAgIC8vIEVuc3VyZSB3ZSBhdCBsZWFzdCBoYXZlIGEgU0hBMTo6RGlnZXN0IHRvIHJlYWQu
Ci0gICAgaWYgKGZpbGVUb3RhbFNpemUgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgeworICAgIGlm
IChmaWxlRGF0YS5zaXplKCkgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgewogICAgICAgICBGaWxl
U3lzdGVtOjpkZWxldGVGaWxlKGNhY2hlRmlsZW5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgdW5zaWduZWQgZmlsZURhdGFTaXplID0gZmlsZVRvdGFsU2l6ZSAtIHNpemVvZihT
SEExOjpEaWdlc3QpOworICAgIHVuc2lnbmVkIGZpbGVEYXRhU2l6ZSA9IGZpbGVEYXRhLnNpemUo
KSAtIHNpemVvZihTSEExOjpEaWdlc3QpOwogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFz
aDsKICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhmaWxlRGF0YSwgZmlsZURhdGFT
aXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKGZpbGVEYXRhLmZpcnN0KGZpbGVEYXRhU2l6ZSkpOwog
ICAgIHNoYTEuY29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2VzdCBm
aWxlSGFzaDsKLSAgICBtZW1jcHkoJmZpbGVIYXNoLCBmaWxlRGF0YSArIGZpbGVEYXRhU2l6ZSwg
c2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOworICAgIG1lbWNweSgmZmlsZUhhc2gsIGZpbGVEYXRhLmRh
dGEoKSArIGZpbGVEYXRhU2l6ZSwgc2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOwogCiAgICAgaWYgKGNv
bXB1dGVkSGFzaCAhPSBmaWxlSGFzaCkgewogICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxl
KGNhY2hlRmlsZW5hbWUpOwpAQCAtMzQzLDcgKzM0Miw3IEBAIC0gKEJPT0wpd3JpdGVDYWNoZToo
U3RyaW5nJillcnJvcgogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFzaDsKICAgICBTSEEx
IHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhtX2NhY2hlZEJ5dGVjb2RlLT5kYXRhKCksIG1fY2Fj
aGVkQnl0ZWNvZGUtPnNpemUoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhhc0J5dGVzKFNwYW4geyBt
X2NhY2hlZEJ5dGVjb2RlLT5kYXRhKCksIG1fY2FjaGVkQnl0ZWNvZGUtPnNpemUoKSB9KSk7CiAg
ICAgc2hhMS5jb21wdXRlSGFzaChjb21wdXRlZEhhc2gpOwogICAgIEZpbGVTeXN0ZW06OndyaXRl
VG9GaWxlKHRlbXBGRCwgY29tcHV0ZWRIYXNoLmRhdGEoKSwgc2l6ZW9mKGNvbXB1dGVkSGFzaCkp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
a0hhc2guY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDEwICs2MiwxMCBA
QCBDb2RlQmxvY2tIYXNoOjpDb2RlQmxvY2tIYXNoKGNvbnN0IFNvdXJjCiAgICAgICAgIHVuc2ln
bmVkIGxlbmd0aCA9IHN0ci5sZW5ndGgoKTsKICAgICAgICAgdW5zaWduZWQgc3RlcCA9IChsZW5n
dGggPj4gMTApICsgMTsKIAotICAgICAgICBzaGExLmFkZEJ5dGVzKGJpdHdpc2VfY2FzdDx1aW50
OF90Kj4oJmxlbmd0aCksIHNpemVvZihsZW5ndGgpKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhh
c0J5dGVzKFNwYW4geyAmbGVuZ3RoLCAxIH0pKTsKICAgICAgICAgZG8gewogICAgICAgICAgICAg
VUNoYXIgY2hhcmFjdGVyID0gc3RyW2luZGV4XTsKLSAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMo
Yml0d2lzZV9jYXN0PHVpbnQ4X3QqPigmY2hhcmFjdGVyKSwgc2l6ZW9mKGNoYXJhY3RlcikpOwor
ICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhhc0J5dGVzKFNwYW4geyAmY2hhcmFjdGVyLCAxIH0p
KTsKICAgICAgICAgICAgIG9sZEluZGV4ID0gaW5kZXg7CiAgICAgICAgICAgICBpbmRleCArPSBz
dGVwOwogICAgICAgICB9IHdoaWxlIChpbmRleCA+IG9sZEluZGV4ICYmIGluZGV4IDwgbGVuZ3Ro
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL2dsaWIvUmVt
b3RlSW5zcGVjdG9yVXRpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvcmVtb3RlL2dsaWIvUmVtb3RlSW5zcGVjdG9yVXRpbHMuY3BwCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGli
L1JlbW90ZUluc3BlY3RvclV0aWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNyBA
QCBjb25zdCBDU3RyaW5nJiBiYWNrZW5kQ29tbWFuZHNIYXNoKCkKICAgICAgICAgZ2NvbnN0cG9p
bnRlciBkYXRhID0gZ19ieXRlc19nZXRfZGF0YShieXRlcy5nZXQoKSwgJmRhdGFTaXplKTsKICAg
ICAgICAgQVNTRVJUKGRhdGFTaXplKTsKICAgICAgICAgU0hBMSBzaGExOwotICAgICAgICBzaGEx
LmFkZEJ5dGVzKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgZGF0YVNpemUpOwor
ICAgICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyBzdGF0aWNfY2FzdDxjb25zdCBzdGQ6OmJ5dGUq
PihkYXRhKSwgZGF0YVNpemUgfSk7CiAgICAgICAgIGhleERpZ2VzdCA9IHNoYTEuY29tcHV0ZUhl
eERpZ2VzdCgpOwogICAgIH0KICAgICByZXR1cm4gaGV4RGlnZXN0OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5oCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+
CiAjaW5jbHVkZSA8d3RmL1BhY2tlZFJlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNr
Lmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CkBAIC04MCw3ICs4MSwxMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9p
ZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5nZXRNYXlCZU51bGwoc2l6ZUluQnl0ZXMo
KSk7IH0KICAgICB1bnNpZ25lZCBzaXplSW5CeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZUlu
Qnl0ZXM7IH0KLSAgICAKKworICAgIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCkgeyBy
ZXR1cm4geyBzdGF0aWNfY2FzdDxzdGQ6OmJ5dGUqPihkYXRhKCkpLCBzaXplSW5CeXRlcygpIH07
IH0KKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25zdCB7IHJldHVybiB7IHN0
YXRpY19jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGRhdGEoKSksIHNpemVJbkJ5dGVzKCkgfTsgfQor
CiAgICAgYm9vbCBpc1NoYXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkOyB9CiAgICAgCiBw
cml2YXRlOgpAQCAtMTI3LDcgKzEzMSw5IEBAIHB1YmxpYzoKICAgICBpbmxpbmUgdm9pZCogZGF0
YSgpOwogICAgIGlubGluZSBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3Q7CiAgICAgaW5saW5lIHVu
c2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdDsKLSAgICAKKyAgICBpbmxpbmUgU3BhbjxzdGQ6OmJ5
dGU+IHdyaXRhYmxlQnl0ZXMoKTsKKyAgICBpbmxpbmUgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGJ5
dGVzKCkgY29uc3Q7CisKICAgICB2b2lkIG1ha2VTaGFyZWQoKTsKICAgICB2b2lkIHNldFNoYXJp
bmdNb2RlKEFycmF5QnVmZmVyU2hhcmluZ01vZGUpOwogICAgIGlubGluZSBib29sIGlzU2hhcmVk
KCkgY29uc3Q7CkBAIC0xOTcsNiArMjAzLDE2IEBAIHVuc2lnbmVkIEFycmF5QnVmZmVyOjpieXRl
TGVuZ3RoKCkgY29uc3QKICAgICByZXR1cm4gbV9jb250ZW50cy5zaXplSW5CeXRlcygpOwogfQog
CitTcGFuPHN0ZDo6Ynl0ZT4gQXJyYXlCdWZmZXI6OndyaXRhYmxlQnl0ZXMoKQoreworICAgIHJl
dHVybiBtX2NvbnRlbnRzLndyaXRhYmxlQnl0ZXMoKTsKK30KKworU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IEFycmF5QnVmZmVyOjpieXRlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGVudHMu
Ynl0ZXMoKTsKK30KKwogYm9vbCBBcnJheUJ1ZmZlcjo6aXNTaGFyZWQoKSBjb25zdAogewogICAg
IHJldHVybiBtX2NvbnRlbnRzLmlzU2hhcmVkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTg2LDYgKzg2LDkgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgYnl0ZUxlbmd0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZUxlbmd0aDsgfQogCisgICAgU3BhbjxzdGQ6OmJ5dGU+
IHdyaXRhYmxlQnl0ZXMoKSB7IHJldHVybiB7IHN0YXRpY19jYXN0PHN0ZDo6Ynl0ZSo+KGRhdGEo
KSksIGJ5dGVMZW5ndGgoKSB9OyB9CisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGJ5dGVzKCkg
Y29uc3QgeyByZXR1cm4geyBzdGF0aWNfY2FzdDxjb25zdCBzdGQ6OmJ5dGUqPihkYXRhKCkpLCBi
eXRlTGVuZ3RoKCkgfTsgfQorCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXREZXRhY2hh
YmxlKGJvb2wpOwogICAgIGJvb2wgaXNEZXRhY2hhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc0Rl
dGFjaGFibGU7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQ
YXlsb2FkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
YWNoZVBheWxvYWQuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYWNoZVBheWxvYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwyNyArMzAs
MjMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIENhY2hlUGF5bG9hZCBDYWNoZVBheWxvYWQ6Om1ha2VN
YXBwZWRQYXlsb2FkKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYgZGF0YSkKIHsKLSAgICBy
ZXR1cm4gQ2FjaGVQYXlsb2FkKHRydWUsIGRhdGEubGVha0hhbmRsZSgpLCBkYXRhLnNpemUoKSk7
CisgICAgcmV0dXJuIENhY2hlUGF5bG9hZCh0cnVlLCBkYXRhLmxlYWtIYW5kbGUoKSk7CiB9CiAK
IENhY2hlUGF5bG9hZCBDYWNoZVBheWxvYWQ6Om1ha2VNYWxsb2NQYXlsb2FkKE1hbGxvY1B0cjx1
aW50OF90LCBWTU1hbGxvYz4mJiBkYXRhLCBzaXplX3Qgc2l6ZSkKIHsKLSAgICByZXR1cm4gQ2Fj
aGVQYXlsb2FkKGZhbHNlLCBkYXRhLmxlYWtQdHIoKSwgc2l6ZSk7CisgICAgcmV0dXJuIENhY2hl
UGF5bG9hZChmYWxzZSwgYXNXcml0YWJsZUJ5dGVzKFNwYW4geyBkYXRhLmxlYWtQdHIoKSwgc2l6
ZSB9KSk7CiB9CiAKIENhY2hlUGF5bG9hZCBDYWNoZVBheWxvYWQ6Om1ha2VFbXB0eVBheWxvYWQo
KQogewotICAgIHJldHVybiBDYWNoZVBheWxvYWQodHJ1ZSwgbnVsbHB0ciwgMCk7CisgICAgcmV0
dXJuIENhY2hlUGF5bG9hZCh0cnVlLCB7IH0pOwogfQogCiBDYWNoZVBheWxvYWQ6OkNhY2hlUGF5
bG9hZChDYWNoZVBheWxvYWQmJiBvdGhlcikKIHsKLSAgICBtX21hcHBlZCA9IG90aGVyLm1fbWFw
cGVkOwotICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKLSAgICBtX2RhdGEgPSBvdGhlci5tX2Rh
dGE7Ci0gICAgb3RoZXIubV9tYXBwZWQgPSBmYWxzZTsKLSAgICBvdGhlci5tX2RhdGEgPSBudWxs
cHRyOwotICAgIG90aGVyLm1fc2l6ZSA9IDA7CisgICAgbV9tYXBwZWQgPSBzdGQ6OmV4Y2hhbmdl
KG90aGVyLm1fbWFwcGVkLCBmYWxzZSk7CisgICAgbV9kYXRhID0gc3RkOjpleGNoYW5nZShvdGhl
ci5tX2RhdGEsIHsgfSk7CiB9CiAKIENhY2hlUGF5bG9hZDo6fkNhY2hlUGF5bG9hZCgpCkBAIC02
NywxMiArNjMsMTMgQEAgQ2FjaGVQYXlsb2FkJiBDYWNoZVBheWxvYWQ6Om9wZXJhdG9yPShDYQog
CiB2b2lkIENhY2hlUGF5bG9hZDo6ZnJlZURhdGEoKQogewotICAgIGlmICghbV9kYXRhKQorICAg
IGlmICghbV9kYXRhLmRhdGEoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX21hcHBlZCkg
ewotICAgICAgICBGaWxlU3lzdGVtOjp1bm1hcFZpZXdPZkZpbGUobV9kYXRhLCBtX3NpemUpOwot
ICAgIH0gZWxzZQotICAgICAgICBmYXN0RnJlZShtX2RhdGEpOworCisgICAgaWYgKG1fbWFwcGVk
KQorICAgICAgICBGaWxlU3lzdGVtOjp1bm1hcFZpZXdPZkZpbGUobV9kYXRhKTsKKyAgICBlbHNl
CisgICAgICAgIGZhc3RGcmVlKG1fZGF0YS5kYXRhKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlUGF5bG9hZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlUGF5bG9hZC5o
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNo
ZVBheWxvYWQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIlZN
LmgiCiAjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KICNpbmNsdWRlIDx3dGYvTWFsbG9jUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQxLDIy
ICs0MiwyMCBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkNhY2hlUGF5bG9hZCgp
OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIENhY2hlUGF5bG9hZCYgb3BlcmF0b3I9KENhY2hlUGF5
bG9hZCYmIG90aGVyKTsKIAotICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEoKSBjb25zdCB7IHJldHVy
biBtX2RhdGE7IH0KLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQor
ICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0
PHVpbnQ4X3QqPihtX2RhdGEuZGF0YSgpKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9kYXRhLnNpemUoKTsgfQogCiBwcml2YXRlOgotICAgIENhY2hlUGF5bG9hZChib29s
IG1hcHBlZCwgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpCisgICAgQ2FjaGVQYXlsb2FkKGJvb2wg
bWFwcGVkLCBTcGFuPHN0ZDo6Ynl0ZT4gZGF0YSkKICAgICAgICAgOiBtX21hcHBlZChtYXBwZWQp
Ci0gICAgICAgICwgbV9zaXplKHNpemUpCi0gICAgICAgICwgbV9kYXRhKHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihkYXRhKSkKKyAgICAgICAgLCBtX2RhdGEoZGF0YSkKICAgICB7CiAgICAgfQogCiAg
ICAgdm9pZCBmcmVlRGF0YSgpOwogCiAgICAgYm9vbCBtX21hcHBlZDsKLSAgICBzaXplX3QgbV9z
aXplOwotICAgIHVpbnQ4X3QqIG1fZGF0YTsKKyAgICBTcGFuPHN0ZDo6Ynl0ZT4gbV9kYXRhOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtU3RyZWFtaW5nUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtU3RyZWFtaW5nUGFyc2VyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2MSw3ICsyNjEsNyBAQCBhdXRvIFN0cmVhbWluZ1BhcnNlcjo6YWRkQnl0
ZXMoY29uc3QgdWluCiAgICAgfQogCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnVzZUVhZ2Vy
V2ViQXNzZW1ibHlNb2R1bGVIYXNoaW5nKCkpKQotICAgICAgICBtX2hhc2hlci5hZGRCeXRlcyhi
eXRlcywgYnl0ZXNTaXplKTsKKyAgICAgICAgbV9oYXNoZXIuYWRkQnl0ZXMoYXNCeXRlcyhTcGFu
IHsgYnl0ZXMsIGJ5dGVzU2l6ZSB9ICkpOwogCiAgICAgc2l6ZV90IG9mZnNldEluQnl0ZXMgPSAw
OwogICAgIHdoaWxlICh0cnVlKSB7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2OCBAQAorMjAyMS0wNi0x
MSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRvcHQgU3BhbiBp
biBtb3JlIHBsYWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgW1dJUF0KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUlt
cGw6Ok1hcHBlZEZpbGVEYXRhOjp+TWFwcGVkRmlsZURhdGEpOgorICAgICAgICAoV1RGOjpGaWxl
U3lzdGVtSW1wbDo6TWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5kbGUpOgorICAgICAgICAoV1RG
OjpGaWxlU3lzdGVtSW1wbDo6dW5tYXBWaWV3T2ZGaWxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5
c3RlbUltcGw6Om1hcFRvRmlsZSk6CisgICAgICAgICogd3RmL0ZpbGVTeXN0ZW0uaDoKKyAgICAg
ICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpvcGVyYXRvciBib29sIGNv
bnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpkYXRh
IGNvbnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjps
ZWFrSGFuZGxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRh
OjpNYXBwZWRGaWxlRGF0YSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpNYXBwZWRG
aWxlRGF0YTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBl
ZEZpbGVEYXRhOjpzaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisg
ICAgICAgICogd3RmL1NIQTEuY3BwOgorICAgICAgICAoV1RGOjpTSEExOjphZGRCeXRlcyk6Cisg
ICAgICAgIChXVEY6OlNIQTE6OmZpbmFsaXplKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6U0hB
MTo6cHJvY2Vzc0Jsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6U0hBMTo6cmVzZXQpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpTSEExOjpoZXhEaWdlc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpTSEExOjpjb21wdXRlSGV4RGlnZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYv
U0hBMS5oOgorICAgICAgICAoV1RGOjpTSEExOjphZGRCeXRlcyk6CisgICAgICAgICogd3RmL1Zl
Y3Rvci5oOgorICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmNwcDoK
KyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPENTdHJpbmc+OjplbmNvZGUpOgorICAg
ICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8Q1N0cmluZz46OmRlY29kZSk6CisgICAgICAg
IChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTdHJpbmc+OjplbmNvZGUpOgorICAgICAgICAoV1RG
OjpQZXJzaXN0ZW5jZTo6ZGVjb2RlU3RyaW5nVGV4dCk6CisgICAgICAgIChXVEY6OlBlcnNpc3Rl
bmNlOjpDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0
ZW5jZTo6Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKToKKyAgICAgICAgKiB3dGYvcGVyc2lz
dGVuY2UvUGVyc2lzdGVudENvZGVycy5oOgorICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZS9QZXJz
aXN0ZW50RGVjb2Rlci5jcHA6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjpE
ZWNvZGVyKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXI6OmJ1ZmZlclBvaW50
ZXJGb3JEaXJlY3RSZWFkKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXI6OmRl
Y29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVy
Ojp2ZXJpZnlDaGVja3N1bSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjp+
RGVjb2Rlcik6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRE
ZWNvZGVyLmg6CisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmNw
cDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6Omdyb3cpOgorICAgICAgICAo
V1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKToKKyAgICAg
ICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YSk6Cisg
ICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjplbmNvZGVOdW1iZXIpOgorICAgICAg
ICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6ZW5jb2RlQ2hlY2tzdW0pOgorICAgICAgICAo
V1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6RW5jb2Rlcik6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjp+RW5jb2Rlcik6IERlbGV0ZWQuCisgICAgICAgICog
d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmg6CisgICAgICAgIChXVEY6OlBlcnNp
c3RlbmNlOjpFbmNvZGVyOjpidWZmZXIgY29uc3QpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5j
ZTo6RW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIpOgorICAgICAgICAoV1RGOjpQZXJz
aXN0ZW5jZTo6RW5jb2Rlcjo6YnVmZmVyU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
d3RmL3RleHQvQmFzZTY0Lmg6CisgICAgICAgIChXVEY6OmJhc2U2NEVuY29kZVRvVmVjdG9yKToK
KyAgICAgICAgKFdURjo6YmFzZTY0RW5jb2RlVG9TdHJpbmcpOgorICAgICAgICAqIHd0Zi90ZXh0
L0NTdHJpbmcuaDoKKwogMjAyMS0wNi0xMSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBBZGQgV2Vha0hhc2hNYXAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0ZpbGVT
eXN0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3BwCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzE5LDkgKzMxOSw5IEBAIGJvb2wgZXhjbHVkZUZyb21CYWNrdXAoY29uc3Qg
U3RyaW5nJikKIAogTWFwcGVkRmlsZURhdGE6On5NYXBwZWRGaWxlRGF0YSgpCiB7Ci0gICAgaWYg
KCFtX2ZpbGVEYXRhKQorICAgIGlmICghbV9maWxlRGF0YS5kYXRhKCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICB1bm1hcFZpZXdPZkZpbGUobV9maWxlRGF0YSwgbV9maWxlU2l6ZSk7CisgICAgdW5t
YXBWaWV3T2ZGaWxlKG1fZmlsZURhdGEpOwogfQogCiBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmls
ZURhdGEoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgTWFwcGVkRmlsZU1vZGUgbWFwTW9kZSwgYm9v
bCYgc3VjY2VzcykKQEAgLTM4MywxNCArMzgzLDEzIEBAIGJvb2wgTWFwcGVkRmlsZURhdGE6Om1h
cEZpbGVIYW5kbGUoUGxhdGYKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG1f
ZmlsZURhdGEgPSBkYXRhOwotICAgIG1fZmlsZVNpemUgPSBzaXplOworICAgIG1fZmlsZURhdGEg
PSBTcGFuIHsgcmVpbnRlcnByZXRfY2FzdDxzdGQ6OmJ5dGUqPihkYXRhKSwgc2l6ZSB9OwogICAg
IHJldHVybiB0cnVlOwogfQogCi1ib29sIHVubWFwVmlld09mRmlsZSh2b2lkKiBidWZmZXIsIHNp
emVfdCBzaXplKQorYm9vbCB1bm1hcFZpZXdPZkZpbGUoU3BhbjxzdGQ6OmJ5dGU+IGRhdGEpCiB7
Ci0gICAgcmV0dXJuICFtdW5tYXAoYnVmZmVyLCBzaXplKTsKKyAgICByZXR1cm4gIW11bm1hcChk
YXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwogfQogCiAjZW5kaWYKQEAgLTQzOCw3ICs0MzcsNyBA
QCBTdHJpbmcgY3JlYXRlVGVtcG9yYXJ5WmlwQXJjaGl2ZShjb25zdCBTCiB9CiAjZW5kaWYKIAot
TWFwcGVkRmlsZURhdGEgbWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVz
U2l6ZSwgRnVuY3Rpb248dm9pZChjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBz
aXplX3QpPiYpPiYmIGFwcGx5LCBQbGF0Zm9ybUZpbGVIYW5kbGUqIG91dHB1dEhhbmRsZSkKK01h
cHBlZEZpbGVEYXRhIG1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIHNpemVfdCBieXRlc1Np
emUsIEZ1bmN0aW9uPHZvaWQoY29uc3QgRnVuY3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0
ZT4pPiYpPiYmIGFwcGx5LCBQbGF0Zm9ybUZpbGVIYW5kbGUqIG91dHB1dEhhbmRsZSkKIHsKICAg
ICBjb25zdGV4cHIgYm9vbCBmYWlsSWZGaWxlRXhpc3RzID0gdHJ1ZTsKICAgICBhdXRvIGhhbmRs
ZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6
UmVhZFdyaXRlLCBGaWxlU3lzdGVtOjpGaWxlQWNjZXNzUGVybWlzc2lvbjo6VXNlciwgZmFpbElm
RmlsZUV4aXN0cyk7CkBAIC00NTUsMTIgKzQ1NCwxMiBAQCBNYXBwZWRGaWxlRGF0YSBtYXBUb0Zp
bGUoY29uc3QgU3RyaW5nJiBwCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgdm9p
ZCogbWFwID0gY29uc3RfY2FzdDx2b2lkKj4obWFwcGVkRmlsZS5kYXRhKCkpOwotICAgIHVpbnQ4
X3QqIG1hcERhdGEgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4obWFwKTsKKyAgICBhdXRvIG1hcCA9
IG1hcHBlZEZpbGUuZGF0YSgpLmRhdGEoKTsKKyAgICBhdXRvIG1hcERhdGEgPSBtYXA7CiAKLSAg
ICBhcHBseShbJm1hcERhdGFdKGNvbnN0IHVpbnQ4X3QqIGNodW5rLCBzaXplX3QgY2h1bmtTaXpl
KSB7Ci0gICAgICAgIG1lbWNweShtYXBEYXRhLCBjaHVuaywgY2h1bmtTaXplKTsKLSAgICAgICAg
bWFwRGF0YSArPSBjaHVua1NpemU7CisgICAgYXBwbHkoWyZtYXBEYXRhXShTcGFuPGNvbnN0IHN0
ZDo6Ynl0ZT4gY2h1bmspIHsKKyAgICAgICAgbWVtY3B5KG1hcERhdGEsIGNodW5rLmRhdGEoKSwg
Y2h1bmsuc2l6ZSgpKTsKKyAgICAgICAgbWFwRGF0YSArPSBjaHVuay5zaXplKCk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0pOwogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVt
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtMjEwLDcgKzIxMSw3IEBAIFdURl9FWFBPUlRf
UFJJVkFURSBTdHJpbmcgcmVhbFBhdGgoY29uc3QKIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGlz
U2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChjb25zdCBTdHJpbmcmKTsKIFdURl9FWFBPUlRfUFJJ
VkFURSB2b2lkIG1ha2VTYWZlVG9Vc2VNZW1vcnlNYXBGb3JQYXRoKGNvbnN0IFN0cmluZyYpOwog
Ci1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCB1bm1hcFZpZXdPZkZpbGUodm9pZCogYnVmZmVyLCBz
aXplX3QpOworV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgdW5tYXBWaWV3T2ZGaWxlKFNwYW48c3Rk
OjpieXRlPik7CiAKIGNsYXNzIE1hcHBlZEZpbGVEYXRhIHsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKQEAgLTIyMywxNyArMjI0LDE1IEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgfk1hcHBlZEZpbGVEYXRhKCk7CiAgICAgTWFwcGVkRmlsZURhdGEmIG9wZXJhdG9yPShN
YXBwZWRGaWxlRGF0YSYmKTsKIAotICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7
IHJldHVybiAhIW1fZmlsZURhdGE7IH0KLSAgICBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3QgeyBy
ZXR1cm4gbV9maWxlRGF0YTsgfQotICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBt
X2ZpbGVTaXplOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJu
ICEhbV9maWxlRGF0YS5kYXRhKCk7IH0KKyAgICBTcGFuPHN0ZDo6Ynl0ZT4gZGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fZmlsZURhdGE7IH0KIAotICAgIHZvaWQqIGxlYWtIYW5kbGUoKSB7IHJldHVy
biBzdGQ6OmV4Y2hhbmdlKG1fZmlsZURhdGEsIG51bGxwdHIpOyB9CisgICAgV0FSTl9VTlVTRURf
UkVUVVJOIFNwYW48c3RkOjpieXRlPiBsZWFrSGFuZGxlKCkgeyByZXR1cm4gc3RkOjpleGNoYW5n
ZShtX2ZpbGVEYXRhLCB7IH0pOyB9CiAKIHByaXZhdGU6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRF
IGJvb2wgbWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUsIEZpbGVPcGVuTW9kZSwgTWFw
cGVkRmlsZU1vZGUpOwogCi0gICAgdm9pZCogbV9maWxlRGF0YSB7IG51bGxwdHIgfTsKLSAgICB1
bnNpZ25lZCBtX2ZpbGVTaXplIHsgMCB9OworICAgIFNwYW48c3RkOjpieXRlPiBtX2ZpbGVEYXRh
OwogfTsKIAogaW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShQbGF0Zm9ybUZp
bGVIYW5kbGUgaGFuZGxlLCBNYXBwZWRGaWxlTW9kZSBtYXBNb2RlLCBib29sJiBzdWNjZXNzKQpA
QCAtMjQ3LDIxICsyNDYsMTkgQEAgaW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0
YShQbAogfQogCiBpbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKE1hcHBlZEZp
bGVEYXRhJiYgb3RoZXIpCi0gICAgOiBtX2ZpbGVEYXRhKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9m
aWxlRGF0YSwgbnVsbHB0cikpCi0gICAgLCBtX2ZpbGVTaXplKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIu
bV9maWxlU2l6ZSwgMCkpCisgICAgOiBtX2ZpbGVEYXRhKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9m
aWxlRGF0YSwgeyB9KSkKIHsKIH0KIAogaW5saW5lIE1hcHBlZEZpbGVEYXRhJiBNYXBwZWRGaWxl
RGF0YTo6b3BlcmF0b3I9KE1hcHBlZEZpbGVEYXRhJiYgb3RoZXIpCiB7Ci0gICAgbV9maWxlRGF0
YSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9maWxlRGF0YSwgbnVsbHB0cik7Ci0gICAgbV9maWxl
U2l6ZSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9maWxlU2l6ZSwgMCk7CisgICAgbV9maWxlRGF0
YSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9maWxlRGF0YSwgeyB9KTsKICAgICByZXR1cm4gKnRo
aXM7CiB9CiAKIC8vIFRoaXMgY3JlYXRlcyB0aGUgZGVzdGluYXRpb24gZmlsZSwgbWFwcyBpdCwg
d3JpdGUgdGhlIHByb3ZpZGVkIGRhdGEgdG8gaXQgYW5kIHJldHVybnMgdGhlIG1hcHBlZCBmaWxl
LgogLy8gVGhpcyBmdW5jdGlvbiBmYWlscyBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgZmlsZSBhdCB0
aGUgZGVzdGluYXRpb24gcGF0aC4KLVdURl9FWFBPUlRfUFJJVkFURSBNYXBwZWRGaWxlRGF0YSBt
YXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBzaXplX3QgYnl0ZXNTaXplLCBGdW5jdGlvbjx2
b2lkKGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCosIHNpemVfdCk+Jik+JiYgYXBw
bHksIFBsYXRmb3JtRmlsZUhhbmRsZSogPSBudWxscHRyKTsKK1dURl9FWFBPUlRfUFJJVkFURSBN
YXBwZWRGaWxlRGF0YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBzaXplX3QgYnl0ZXNT
aXplLCBGdW5jdGlvbjx2b2lkKGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+KT4mKT4mJiBhcHBseSwgUGxhdGZvcm1GaWxlSGFuZGxlKiA9IG51bGxwdHIpOwogCiB9IC8v
IG5hbWVzcGFjZSBGaWxlU3lzdGVtSW1wbAogfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9TSEExLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TSEExLmNw
cAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvU0hBMS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDEwICs0NiwxMCBAQCBTSEExOjpTSEExKCkKICAgICBBTExPV19ERVBSRUNB
VEVEX0RFQ0xBUkFUSU9OU19FTkQKIH0KIAotdm9pZCBTSEExOjphZGRCeXRlcyhjb25zdCB1aW50
OF90KiBpbnB1dCwgc2l6ZV90IGxlbmd0aCkKK3ZvaWQgU0hBMTo6YWRkQnl0ZXMoU3Bhbjxjb25z
dCBzdGQ6OmJ5dGU+IGlucHV0KQogewogICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05T
X0JFR0lOCi0gICAgQ0NfU0hBMV9VcGRhdGUoJm1fY29udGV4dCwgaW5wdXQsIGxlbmd0aCk7Cisg
ICAgQ0NfU0hBMV9VcGRhdGUoJm1fY29udGV4dCwgaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkp
OwogICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAogfQogCkBAIC0xMDEsMTEg
KzEwMSwxMSBAQCBTSEExOjpTSEExKCkKICAgICByZXNldCgpOwogfQogCi12b2lkIFNIQTE6OmFk
ZEJ5dGVzKGNvbnN0IHVpbnQ4X3QqIGlucHV0LCBzaXplX3QgbGVuZ3RoKQordm9pZCBTSEExOjph
ZGRCeXRlcyhTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCiB7Ci0gICAgd2hpbGUgKGxlbmd0
aC0tKSB7CisgICAgZm9yIChhdXRvIGJ5dGUgOiBpbnB1dCkgewogICAgICAgICBBU1NFUlQobV9j
dXJzb3IgPCA2NCk7Ci0gICAgICAgIG1fYnVmZmVyW21fY3Vyc29yKytdID0gKmlucHV0Kys7Cisg
ICAgICAgIG1fYnVmZmVyW21fY3Vyc29yKytdID0gc3RkOjp0b19pbnRlZ2VyPHVpbnQ4X3Q+KGJ5
dGUpOwogICAgICAgICArK21fdG90YWxCeXRlczsKICAgICAgICAgaWYgKG1fY3Vyc29yID09IDY0
KQogICAgICAgICAgICAgcHJvY2Vzc0Jsb2NrKCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TSEEx
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU0hBMS5oCShyZXZpc2lvbiAyNzg4MDkp
CisrKyBTb3VyY2UvV1RGL3d0Zi9TSEExLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcg
QEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8YXJyYXk+CisjaW5jbHVkZSA8d3RmL1NwYW4u
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgogCkBAIC00NSwxNSArNDYsOCBAQCBjbGFzcyBTSEExIHsKIHB1YmxpYzoKICAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgU0hBMSgpOwogCi0gICAgdm9pZCBhZGRCeXRlcyhjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIGlucHV0KQotICAgIHsKLSAgICAgICAgYWRkQnl0ZXMoaW5wdXQuZGF0YSgpLCBpbnB1
dC5zaXplKCkpOwotICAgIH0KLSAgICB2b2lkIGFkZEJ5dGVzKGNvbnN0IENTdHJpbmcmIGlucHV0
KQotICAgIHsKLSAgICAgICAgYWRkQnl0ZXMoaW5wdXQuZGF0YUFzVUludDhQdHIoKSwgaW5wdXQu
bGVuZ3RoKCkpOwotICAgIH0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRCeXRlcyhj
b25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGxlbmd0aCk7CisgICAgdm9pZCBhZGRCeXRlcyhj
b25zdCBDU3RyaW5nJiBpbnB1dCkgeyBhZGRCeXRlcyhpbnB1dC5ieXRlcygpKTsgfQorICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIGFkZEJ5dGVzKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAK
ICAgICAvLyBTaXplIG9mIHRoZSBTSEExIGhhc2gKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIGNvbnN0ZXhwciBzaXplX3QgaGFzaFNpemUgPSAyMDsKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L1ZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
NjEzLDYgKzYxMyw3IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKICAgICB0eXBlZGVmIFQgVmFsdWVU
eXBlOworICAgIHR5cGVkZWYgVCB2YWx1ZV90eXBlOwogCiAgICAgdHlwZWRlZiBUKiBpdGVyYXRv
cjsKICAgICB0eXBlZGVmIGNvbnN0IFQqIGNvbnN0X2l0ZXJhdG9yOwpJbmRleDogU291cmNlL1dU
Ri93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5jcHAJKHJldmlzaW9uIDI3
ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgQ29kZXI8Q1N0cmluZz46OmVu
Y29kZShFbmNvZGVyJiBlbmMKIAogICAgIHVpbnQzMl90IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgo
KTsKICAgICBlbmNvZGVyIDw8IGxlbmd0aDsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3Ro
RGF0YShzdHJpbmcuZGF0YUFzVUludDhQdHIoKSwgbGVuZ3RoKTsKKyAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShzdHJpbmcuYnl0ZXMoKSk7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8Q1N0
cmluZz4gQ29kZXI8Q1N0cmluZz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQpAQCAtNzgsNyAr
NzgsNyBAQCBzdGQ6Om9wdGlvbmFsPENTdHJpbmc+IENvZGVyPENTdHJpbmc+OjpkCiAKICAgICBj
aGFyKiBidWZmZXI7CiAgICAgQ1N0cmluZyBzdHJpbmcgPSBDU3RyaW5nOjpuZXdVbmluaXRpYWxp
emVkKCpsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3Ro
RGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIpLCAqbGVuZ3RoKSkKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyByZWludGVycHJldF9jYXN0
PHN0ZDo6Ynl0ZSo+KGJ1ZmZlciksICpsZW5ndGggfSkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CiAKICAgICByZXR1cm4gc3RyaW5nOwpAQCAtOTgsOSArOTgsOSBAQCB2b2lkIENvZGVy
PFN0cmluZz46OmVuY29kZShFbmNvZGVyJiBlbmNvCiAgICAgZW5jb2RlciA8PCBsZW5ndGggPDwg
aXM4Qml0OwogCiAgICAgaWYgKGlzOEJpdCkKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoc3RyaW5nLmNoYXJhY3RlcnM4KCksIGxlbmd0aCk7CisgICAgICAgIGVuY29kZXIu
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBzdHJpbmcuY2hhcmFjdGVyczgoKSwgbGVuZ3Ro
IH0pOwogICAgIGVsc2UKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnMxNigpKSwgbGVu
Z3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKFNwYW4geyByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzdHJpbmcuY2hhcmFj
dGVyczE2KCkpLCBsZW5ndGggKiBzaXplb2YoVUNoYXIpIH0pOwogfQogCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4KQEAgLTExMiw3ICsxMTIsNyBAQCBzdGF0aWMgaW5saW5lIHN0
ZDo6b3B0aW9uYWw8U3RyaW5nPiBkZWNvCiAKICAgICBDaGFyYWN0ZXJUeXBlKiBidWZmZXI7CiAg
ICAgU3RyaW5nIHN0cmluZyA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1
ZmZlcik7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPihidWZmZXIpLCBsZW5ndGggKiBzaXplb2YoQ2hhcmFjdGVyVHlwZSkp
KQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IHJlaW50ZXJw
cmV0X2Nhc3Q8c3RkOjpieXRlKj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJhY3RlclR5
cGUpIH0pKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIAogICAgIHJldHVybiBz
dHJpbmc7CkBAIC0xNDIsMTMgKzE0MiwxMyBAQCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gQ29kZXI8
U3RyaW5nPjo6ZGVjCiAKIHZvaWQgQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIsIGNvbnN0IFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQogewotICAgIGVuY29kZXIuZW5j
b2RlRml4ZWRMZW5ndGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpKTsKKyAgICBl
bmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgZGlnZXN0IH0pOwogfQogCiBzdGQ6
Om9wdGlvbmFsPFNIQTE6OkRpZ2VzdD4gQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCiB7CiAgICAgU0hBMTo6RGlnZXN0IHRtcDsKLSAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHRtcC5kYXRhKCksIHNpemVvZih0bXApKSkKKyAgICBpZiAo
IWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyB0bXAgfSkpCiAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgcmV0dXJuIHRtcDsKIH0KSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmgJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2kKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29u
c3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQogICAgIHsKICAgICAgICAgZW5j
b2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odmVjdG9yLnNpemUoKSk7Ci0gICAgICAgIGVu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6ZSgpICogc2l6ZW9mKFQpKTsKKyAgICAgICAg
ZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IHZlY3RvciB9KTsKICAgICB9CiAg
ICAgCiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pj4g
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCkBAIC0xNzMsNyArMTczLDcgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAgICAgICBWZWN0b3I8VCwgaW5saW5lQ2Fw
YWNpdHk+IHRlbXA7CiAgICAgICAgIHRlbXAuZ3JvdyhzaXplKTsKIAotICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHRl
bXAuZGF0YSgpKSwgc2l6ZSAqIHNpemVvZihUKSkpCisgICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IHRlbXAgfSkpCiAgICAgICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogCiAgICAgICAgIHJldHVybiB0ZW1wOwpJbmRleDogU291cmNlL1dURi93dGYv
cGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmNwcAkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSwyMyArMzEsMjYgQEAKIG5hbWVzcGFjZSBXVEYgewogbmFtZXNw
YWNlIFBlcnNpc3RlbmNlIHsKIAotRGVjb2Rlcjo6RGVjb2Rlcihjb25zdCB1aW50OF90KiBidWZm
ZXIsIHNpemVfdCBidWZmZXJTaXplKQotICAgIDogbV9idWZmZXIoYnVmZmVyKQotICAgICwgbV9i
dWZmZXJQb3NpdGlvbihidWZmZXIpCi0gICAgLCBtX2J1ZmZlckVuZChidWZmZXIgKyBidWZmZXJT
aXplKQorRGVjb2Rlcjo6RGVjb2RlcihTcGFuPGNvbnN0IHVpbnQ4X3Q+IGJ1ZmZlcikKKyAgICA6
IERlY29kZXIoYXNCeXRlcyhidWZmZXIpKQogewogfQogCi1EZWNvZGVyOjp+RGVjb2RlcigpCitE
ZWNvZGVyOjpEZWNvZGVyKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBidWZmZXIpCisgICAgOiBtX2J1
ZmZlcihidWZmZXIuZGF0YSgpKQorICAgICwgbV9idWZmZXJQb3NpdGlvbihidWZmZXIuZGF0YSgp
KQorICAgICwgbV9idWZmZXJFbmQoYnVmZmVyLmRhdGEoKSArIGJ1ZmZlci5zaXplKCkpCiB7CiB9
CiAKK0RlY29kZXI6On5EZWNvZGVyKCkgPSBkZWZhdWx0OworCiBib29sIERlY29kZXI6OmJ1ZmZl
cklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZV90IHNpemUpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IHNpemUgPD0gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2J1ZmZlckVuZCAtIG1fYnVmZmVyUG9zaXRp
b24pOwogfQogCi1jb25zdCB1aW50OF90KiBEZWNvZGVyOjpidWZmZXJQb2ludGVyRm9yRGlyZWN0
UmVhZChzaXplX3Qgc2l6ZSkKK2NvbnN0IHN0ZDo6Ynl0ZSogRGVjb2Rlcjo6YnVmZmVyUG9pbnRl
ckZvckRpcmVjdFJlYWQoc2l6ZV90IHNpemUpCiB7CiAgICAgaWYgKCFidWZmZXJJc0xhcmdlRW5v
dWdoVG9Db250YWluKHNpemUpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTU1LDE2ICs1
OCwxNiBAQCBjb25zdCB1aW50OF90KiBEZWNvZGVyOjpidWZmZXJQb2ludGVyRm9yCiAgICAgYXV0
byBkYXRhID0gbV9idWZmZXJQb3NpdGlvbjsKICAgICBtX2J1ZmZlclBvc2l0aW9uICs9IHNpemU7
CiAKLSAgICBFbmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhLCBzaXpl
KTsKKyAgICBFbmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBTcGFuIHsgZGF0
YSwgc2l6ZSB9KTsKICAgICByZXR1cm4gZGF0YTsKIH0KIAotYm9vbCBEZWNvZGVyOjpkZWNvZGVG
aXhlZExlbmd0aERhdGEodWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCitib29sIERlY29kZXI6
OmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKLSAgICBhdXRv
IGJ1ZmZlciA9IGJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFkKHNpemUpOworICAgIGF1dG8gYnVm
ZmVyID0gYnVmZmVyUG9pbnRlckZvckRpcmVjdFJlYWQoZGF0YS5zaXplKCkpOwogICAgIGlmICgh
YnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbWVtY3B5KGRhdGEsIGJ1ZmZlciwg
c2l6ZSk7CisgICAgbWVtY3B5KGRhdGEuZGF0YSgpLCBidWZmZXIsIGRhdGEuc2l6ZSgpKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTM5LDcgKzE0Miw3IEBAIGJvb2wgRGVjb2Rlcjo6dmVy
aWZ5Q2hlY2tzdW0oKQogICAgIG1fc2hhMS5jb21wdXRlSGFzaChjb21wdXRlZEhhc2gpOwogCiAg
ICAgU0hBMTo6RGlnZXN0IHNhdmVkSGFzaDsKLSAgICBpZiAoIWRlY29kZUZpeGVkTGVuZ3RoRGF0
YShzYXZlZEhhc2guZGF0YSgpLCBzaXplb2Yoc2F2ZWRIYXNoKSkpCisgICAgaWYgKCFkZWNvZGVG
aXhlZExlbmd0aERhdGEoU3BhbiB7IHNhdmVkSGFzaCB9KSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgcmV0dXJuIGNvbXB1dGVkSGFzaCA9PSBzYXZlZEhhc2g7CkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmgJKHJldmlzaW9uIDI3
ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9FbnVtVHJh
aXRzLmg+CiAjaW5jbHVkZSA8d3RmL1NIQTEuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2lu
Y2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaD4KIAogbmFtZXNwYWNlIFdU
RiB7CkBAIC0zNSw3ICszNiw4IEBAIG5hbWVzcGFjZSBQZXJzaXN0ZW5jZSB7CiBjbGFzcyBEZWNv
ZGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgRGVjb2Rlcihjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJT
aXplKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVjb2RlcihTcGFuPGNvbnN0IHVpbnQ4X3Q+
KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVjb2RlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4p
OwogICAgIFdURl9FWFBPUlRfUFJJVkFURSB+RGVjb2RlcigpOwogCiAgICAgc2l6ZV90IGxlbmd0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyRW5kIC0gbV9idWZmZXI7IH0KQEAgLTQzLDcgKzQ1
LDEzIEBAIHB1YmxpYzoKIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBXQVJOX1VOVVNFRF9SRVRV
Uk4gYm9vbCB2ZXJpZnlDaGVja3N1bSgpOwogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIFdBUk5f
VU5VU0VEX1JFVFVSTiBib29sIGRlY29kZUZpeGVkTGVuZ3RoRGF0YSh1aW50OF90Kiwgc2l6ZV90
KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKFNwYW48c3RkOjpieXRlPik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgTj4KKyAgICBib29sIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPFQsIE4+
IGRhdGEpCisgICAgeworICAgICAgICByZXR1cm4gZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGFzV3Jp
dGFibGVCeXRlcyhkYXRhKSk7CisgICAgfQogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIERlY29k
ZXImIG9wZXJhdG9yPj4oc3RkOjpvcHRpb25hbDxib29sPiYpOwogICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBEZWNvZGVyJiBvcGVyYXRvcj4+KHN0ZDo6b3B0aW9uYWw8dWludDhfdD4mKTsKQEAgLTg0
LDcgKzkyLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbnVtRWxlbWVudHMgPD0gc3RkOjpu
dW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAvIHNpemVvZihUKSAmJiBidWZmZXJJc0xhcmdl
RW5vdWdoVG9Db250YWluKG51bUVsZW1lbnRzICogc2l6ZW9mKFQpKTsKICAgICB9CiAKLSAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgV0FSTl9VTlVTRURfUkVUVVJOIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZl
clBvaW50ZXJGb3JEaXJlY3RSZWFkKHNpemVfdCBudW1CeXRlcyk7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBjb25zdCBzdGQ6OmJ5dGUqIGJ1ZmZlclBvaW50ZXJG
b3JEaXJlY3RSZWFkKHNpemVfdCBudW1CeXRlcyk7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNJUENEZWNvZGVyID0gZmFsc2U7CiAKQEAgLTkyLDkgKzEwMCw5IEBAIHByaXZhdGU6CiAg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGJ1ZmZlcklzTGFy
Z2VFbm91Z2hUb0NvbnRhaW4oc2l6ZV90KSBjb25zdDsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
eXBlPiBEZWNvZGVyJiBkZWNvZGVOdW1iZXIoc3RkOjpvcHRpb25hbDxUeXBlPiYpOwogCi0gICAg
Y29uc3QgdWludDhfdCogbV9idWZmZXI7Ci0gICAgY29uc3QgdWludDhfdCogbV9idWZmZXJQb3Np
dGlvbjsKLSAgICBjb25zdCB1aW50OF90KiBtX2J1ZmZlckVuZDsKKyAgICBjb25zdCBzdGQ6OmJ5
dGUqIG1fYnVmZmVyOworICAgIGNvbnN0IHN0ZDo6Ynl0ZSogbV9idWZmZXJQb3NpdGlvbjsKKyAg
ICBjb25zdCBzdGQ6OmJ5dGUqIG1fYnVmZmVyRW5kOwogCiAgICAgU0hBMSBtX3NoYTE7CiB9OwpJ
bmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVy
LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVy
c2lzdGVudEVuY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwzNCArMzEsMzQgQEAKIG5h
bWVzcGFjZSBXVEYgewogbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAotRW5jb2Rlcjo6RW5jb2Rl
cigpCi17Ci19Ci0KLUVuY29kZXI6On5FbmNvZGVyKCkKLXsKLX0KK0VuY29kZXI6OkVuY29kZXIo
KSA9IGRlZmF1bHQ7CitFbmNvZGVyOjp+RW5jb2RlcigpID0gZGVmYXVsdDsKIAotdWludDhfdCog
RW5jb2Rlcjo6Z3JvdyhzaXplX3Qgc2l6ZSkKK3N0ZDo6Ynl0ZSogRW5jb2Rlcjo6Z3JvdyhzaXpl
X3Qgc2l6ZSkKIHsKICAgICBzaXplX3QgbmV3UG9zaXRpb24gPSBtX2J1ZmZlci5zaXplKCk7CiAg
ICAgbV9idWZmZXIuZ3JvdyhtX2J1ZmZlci5zaXplKCkgKyBzaXplKTsKICAgICByZXR1cm4gbV9i
dWZmZXIuZGF0YSgpICsgbmV3UG9zaXRpb247CiB9CiAKLXZvaWQgRW5jb2Rlcjo6dXBkYXRlQ2hl
Y2tzdW1Gb3JEYXRhKFNIQTEmIHNoYTEsIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXpl
KQordm9pZCBFbmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvckRhdGEoU0hBMSYgc2hhMSwgU3Bhbjxj
b25zdCB1aW50OF90PiBkYXRhKQoreworICAgIHJldHVybiB1cGRhdGVDaGVja3N1bUZvckRhdGEo
c2hhMSwgYXNCeXRlcyhkYXRhKSk7Cit9CisKK3ZvaWQgRW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1G
b3JEYXRhKFNIQTEmIHNoYTEsIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhKQogewogICAgIGF1
dG8gdHlwZVNhbHQgPSBTYWx0PHVpbnQ4X3QqPjo6dmFsdWU7Ci0gICAgc2hhMS5hZGRCeXRlcyhy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdHlwZVNhbHQpLCBzaXplb2YodHlwZVNhbHQpKTsK
LSAgICBzaGExLmFkZEJ5dGVzKGRhdGEsIHNpemUpOworICAgIHNoYTEuYWRkQnl0ZXMoYXNCeXRl
cyhTcGFuIHsgJnR5cGVTYWx0LCAxIH0pKTsKKyAgICBzaGExLmFkZEJ5dGVzKGRhdGEpOwogfQog
Ci12b2lkIEVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShjb25zdCB1aW50OF90KiBkYXRh
LCBzaXplX3Qgc2l6ZSkKK3ZvaWQgRW5jb2Rlcjo6ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48
Y29uc3Qgc3RkOjpieXRlPiBkYXRhKQogewotICAgIHVwZGF0ZUNoZWNrc3VtRm9yRGF0YShtX3No
YTEsIGRhdGEsIHNpemUpOworICAgIHVwZGF0ZUNoZWNrc3VtRm9yRGF0YShtX3NoYTEsIGRhdGEp
OwogCi0gICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhzaXplKTsKLSAgICBtZW1jcHkoYnVmZmVy
LCBkYXRhLCBzaXplKTsKKyAgICBhdXRvKiBidWZmZXIgPSBncm93KGRhdGEuc2l6ZSgpKTsKKyAg
ICBtZW1jcHkoYnVmZmVyLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUeXBlPgpAQCAtNjYsNyArNjYsNyBAQCBFbmNvZGVyJiBFbmNvZGVyOjplbmNv
ZGVOdW1iZXIoVHlwZSB2YWx1CiB7CiAgICAgRW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JOdW1i
ZXIobV9zaGExLCB2YWx1ZSk7CiAKLSAgICB1aW50OF90KiBidWZmZXIgPSBncm93KHNpemVvZihU
eXBlKSk7CisgICAgYXV0byogYnVmZmVyID0gZ3JvdyhzaXplb2YoVHlwZSkpOwogICAgIG1lbWNw
eShidWZmZXIsICZ2YWx1ZSwgc2l6ZW9mKFR5cGUpKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CkBA
IC0xMjUsNyArMTI1LDcgQEAgdm9pZCBFbmNvZGVyOjplbmNvZGVDaGVja3N1bSgpCiB7CiAgICAg
U0hBMTo6RGlnZXN0IGhhc2g7CiAgICAgbV9zaGExLmNvbXB1dGVIYXNoKGhhc2gpOwotICAgIGVu
Y29kZUZpeGVkTGVuZ3RoRGF0YShoYXNoLmRhdGEoKSwgaGFzaC5zaXplKCkpOworICAgIGVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgaGFzaCB9KTsKIH0KIAogfQpJbmRleDogU291cmNlL1dU
Ri93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5oCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0
cy5oPgogI2luY2x1ZGUgPHd0Zi9TSEExLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRD
b2Rlci5oPgogCkBAIC00Myw3ICs0NCwxMyBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklW
QVRFIH5FbmNvZGVyKCk7CiAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGVDaGVj
a3N1bSgpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0
YShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBl
bmNvZGVGaXhlZExlbmd0aERhdGEoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KTsKKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHNpemVfdCBOPgorICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KFNwYW48VCwgTj4gZGF0YSkKKyAgICB7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShh
c0J5dGVzKGRhdGEpKTsKKyAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OmVu
YWJsZV9pZl90PHN0ZDo6aXNfZW51bTxUPjo6dmFsdWU+KiA9IG51bGxwdHI+CiAgICAgRW5jb2Rl
ciYgb3BlcmF0b3I8PChjb25zdCBUJiB0KQpAQCAtNzAsMjMgKzc3LDIyIEBAIHB1YmxpYzoKICAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgRW5jb2RlciYgb3BlcmF0b3I8PChmbG9hdCk7CiAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwoZG91YmxlKTsKIAotICAgIGNvbnN0
IHVpbnQ4X3QqIGJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKTsgfQotICAg
IHNpemVfdCBidWZmZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuc2l6ZSgpOyB9Ci0K
LSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRh
KFNIQTEmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0
ZT4gYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXI7IH0KKyAgICAKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBTcGFu
PGNvbnN0IHVpbnQ4X3Q+KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdXBk
YXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwogICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUeXBlPiBzdGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZvck51bWJl
cihTSEExJiwgVHlwZSk7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJUENFbmNvZGVy
ID0gZmFsc2U7CiAKIHByaXZhdGU6Ci0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiBFbmNv
ZGVyJiBlbmNvZGVOdW1iZXIoVHlwZSk7CiAKLSAgICB1aW50OF90KiBncm93KHNpemVfdCk7Cisg
ICAgc3RkOjpieXRlKiBncm93KHNpemVfdCk7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlw
ZT4gc3RydWN0IFNhbHQ7CiAKLSAgICBWZWN0b3I8dWludDhfdCwgNDA5Nj4gbV9idWZmZXI7Cisg
ICAgVmVjdG9yPHN0ZDo6Ynl0ZSwgNDA5Nj4gbV9idWZmZXI7CiAgICAgU0hBMSBtX3NoYTE7CiB9
OwogCkBAIC0xMDYsOCArMTEyLDggQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+CiB2b2lkIEVu
Y29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKFNIQTEmIHNoYTEsIFR5cGUgdmFsdWUpCiB7
CiAgICAgYXV0byB0eXBlU2FsdCA9IFNhbHQ8VHlwZT46OnZhbHVlOwotICAgIHNoYTEuYWRkQnl0
ZXMocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9mKHR5cGVTYWx0
KSk7Ci0gICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWUp
LCBzaXplb2YodmFsdWUpKTsKKyAgICBzaGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7ICZ0eXBl
U2FsdCwgMSB9KSk7CisgICAgc2hhMS5hZGRCeXRlcyhhc0J5dGVzKFNwYW4geyAmdmFsdWUsIDEg
fSkpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmgJKHJldmlzaW9uIDI3ODgwOSkKKysr
IFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5
LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNl
dC5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29u
Y2F0ZW5hdGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNjAsMTQg
KzYxLDEyIEBAIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShjb24KIFdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQsIExD
aGFyKiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6
RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVs
dCk7CiAKIFdURl9FWFBPUlRfUFJJVkFURSBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9W
ZWN0b3IoY29uc3Qgdm9pZCosIHVuc2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRF
bmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNv
ZGVNYXA6OkRlZmF1bHQpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBv
bGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6
RGVmYXVsdCk7Ci1WZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgVmVj
dG9yPGNoYXI+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05v
dEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsK
IFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBDU3RyaW5nJiwgQmFz
ZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFz
ZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBOPiBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoU3Bh
bjxULCBOPiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdElu
c2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKIAog
V1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdCB2b2lk
KiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9O
b3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7
Ci1TdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgQmFz
ZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFz
ZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKLVN0cmluZyBiYXNlNjRF
bmNvZGVUb1N0cmluZyhjb25zdCBWZWN0b3I8Y2hhcj4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBC
YXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNl
NjRFbmNvZGVNYXA6OkRlZmF1bHQpOwogU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0
IENTdHJpbmcmLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90
SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IE4+IFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmlu
ZyhTcGFuPFQsIE4+LCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRv
Tm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQp
OwogCiBXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJh
c2U2NERlY29kZShjb25zdCBTdHJpbmcmLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4g
PSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7CiBXVEZf
RVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29k
ZShTdHJpbmdWaWV3LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2
NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7CkBAIC03NiwzNCArNzUsMjQg
QEAgV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPAogV1RGX0VYUE9SVF9Q
UklWQVRFIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3Qg
dWludDhfdCosIHVuc2lnbmVkLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0s
IEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7CiBXVEZfRVhQT1JU
X1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25z
dCBjaGFyKiwgdW5zaWduZWQsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwg
QmFzZTY0RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKIAotaW5saW5lIFZl
Y3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8dWludDhfdD4m
IGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQot
ewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRhKCksIGlucHV0LnNp
emUoKSwgcG9saWN5LCBtYXApOwotfQotCi1pbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVu
Y29kZVRvVmVjdG9yKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGlj
eSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCi17Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29k
ZVRvVmVjdG9yKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7Ci19Ci0K
IGlubGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgQ1N0cmlu
ZyYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXAp
CiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlucHV0LmRhdGEoKSwgaW5wdXQu
bGVuZ3RoKCksIHBvbGljeSwgbWFwKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3Io
aW5wdXQuYnl0ZXMoKSwgcG9saWN5LCBtYXApOwogfQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NEVu
Y29kZVRvU3RyaW5nKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQsIEJhc2U2NEVuY29kZVBv
bGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgTj4gVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKFNwYW48VCwgTj4g
aW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7
Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6
ZSgpLCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlucHV0
LmRhdGEoKSwgaW5wdXQuc2l6ZV9ieXRlcygpLCBwb2xpY3ksIG1hcCk7CiB9CiAKLWlubGluZSBT
dHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCwgQmFz
ZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKK2lubGluZSBTdHJp
bmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgQ1N0cmluZyYgaW5wdXQsIEJhc2U2NEVuY29k
ZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgcmV0dXJuIGJhc2U2
NEVuY29kZVRvU3RyaW5nKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7
CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LmJ5dGVzKCksIHBvbGljeSwg
bWFwKTsKIH0KIAotaW5saW5lIFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdCBDU3Ry
aW5nJiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1h
cCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBOPiBTdHJpbmcgYmFzZTY0RW5jb2RlVG9T
dHJpbmcoU3BhbjxULCBOPiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0
RW5jb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5wdXQu
ZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwgcG9saWN5LCBtYXApOworICAgIHJldHVybiBiYXNlNjRF
bmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemVfYnl0ZXMoKSwgcG9saWN5LCBt
YXApOwogfQogCiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5oCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiAr
MjksNyBAQAogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KIAog
bmFtZXNwYWNlIFdURiB7CiAKQEAgLTM5LDkgKzQwLDExIEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJ
VEhfSEVBUF9JREVOVElGSUVSKEMKIGNsYXNzIENTdHJpbmdCdWZmZXIgZmluYWwgOiBwdWJsaWMg
UmVmQ291bnRlZDxDU3RyaW5nQnVmZmVyPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURf
V0lUSF9IRUFQX0lERU5USUZJRVIoQ1N0cmluZ0J1ZmZlcik7CiBwdWJsaWM6Ci0gICAgY29uc3Qg
Y2hhciogZGF0YSgpIHsgcmV0dXJuIG11dGFibGVEYXRhKCk7IH0KKyAgICBjb25zdCBjaGFyKiBk
YXRhKCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxDU3RyaW5nQnVmZmVyKj4odGhpcyktPm11
dGFibGVEYXRhKCk7IH0KICAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5n
dGg7IH0KIAorICAgIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0IHsgcmV0dXJu
IGFzQnl0ZXMoU3BhbiB7IGRhdGEoKSwgbGVuZ3RoKCkgfSk7IH0KKwogcHJpdmF0ZToKICAgICBm
cmllbmQgY2xhc3MgQ1N0cmluZzsKIApAQCAtNjYsNiArNjksMjAgQEAgcHVibGljOgogICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgQ1N0cmluZyBuZXdVbmluaXRpYWxpemVkKHNpemVfdCBs
ZW5ndGgsIGNoYXIqJiBjaGFyYWN0ZXJCdWZmZXIpOwogICAgIENTdHJpbmcoSGFzaFRhYmxlRGVs
ZXRlZFZhbHVlVHlwZSkgOiBtX2J1ZmZlcihIYXNoVGFibGVEZWxldGVkVmFsdWUpIHsgfQogCisg
ICAgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGJ5dGVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
IChtX2J1ZmZlcikKKyAgICAgICAgICAgIHJldHVybiBtX2J1ZmZlci0+Ynl0ZXMoKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBTcGFuPHN0ZDo6Ynl0ZT4gbXV0YWJsZUJ5dGVz
KCkKKyAgICB7CisgICAgICAgIGlmIChhdXRvIG11dGFibGVEYXRhID0gdGhpcy0+bXV0YWJsZURh
dGEoKSkKKyAgICAgICAgICAgIHJldHVybiBhc1dyaXRhYmxlQnl0ZXMoU3BhbiB7IG11dGFibGVE
YXRhLCBtX2J1ZmZlci0+bGVuZ3RoKCkgfSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQor
CiAgICAgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9i
dWZmZXIgPyBtX2J1ZmZlci0+ZGF0YSgpIDogbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L3dpbi9GaWxlU3lzdGVtV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi93aW4v
RmlsZVN5c3RlbVdpbi5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3dp
bi9GaWxlU3lzdGVtV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYzLDkgKzM2Myw5IEBAIFN0
cmluZyBjcmVhdGVUZW1wb3JhcnlEaXJlY3RvcnkoKQogICAgIH0pOwogfQogCi1ib29sIHVubWFw
Vmlld09mRmlsZSh2b2lkKiBidWZmZXIsIHNpemVfdCkKK2Jvb2wgdW5tYXBWaWV3T2ZGaWxlKFNw
YW48c3RkOjpieXRlPiBkYXRhKQogewotICAgIHJldHVybiBVbm1hcFZpZXdPZkZpbGUoYnVmZmVy
KTsKKyAgICByZXR1cm4gVW5tYXBWaWV3T2ZGaWxlKGRhdGEuZGF0YSgpKTsKIH0KIAogYm9vbCBN
YXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBG
aWxlT3Blbk1vZGUgb3Blbk1vZGUsIE1hcHBlZEZpbGVNb2RlKQpAQCAtMzc0LDcgKzM3NCw3IEBA
IGJvb2wgTWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5kbGUoUGxhdGYKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgYXV0byBzaXplID0gZmlsZVNpemUoaGFuZGxlKTsKLSAgICBpZiAoIXNp
emUgfHwgKnNpemUgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIHx8ICpzaXpl
ID4gc3RkOjpudW1lcmljX2xpbWl0czxkZWNsdHlwZShtX2ZpbGVTaXplKT46Om1heCgpKSB7Cisg
ICAgaWYgKCFzaXplIHx8ICpzaXplID4gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgo
KSB8fCAqc2l6ZSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8ZGVjbHR5cGUobV9maWxlRGF0YS5zaXpl
KCkpPjo6bWF4KCkpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNDAzLDEx
ICs0MDMsMTIgQEAgYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0ZgogICAg
IGlmICghbWFwcGluZykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9maWxlRGF0YSA9
IE1hcFZpZXdPZkZpbGUobWFwcGluZywgZGVzaXJlZEFjY2VzcywgMCwgMCwgKnNpemUpOworICAg
IGF1dG8gZGF0YSA9IE1hcFZpZXdPZkZpbGUobWFwcGluZywgZGVzaXJlZEFjY2VzcywgMCwgMCwg
KnNpemUpOwogICAgIENsb3NlSGFuZGxlKG1hcHBpbmcpOwotICAgIGlmICghbV9maWxlRGF0YSkK
KyAgICBpZiAoIWRhdGEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2ZpbGVTaXplID0g
KnNpemU7CisKKyAgICBtX2ZpbGVEYXRhID0gU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpi
eXRlKj4oZGF0YSksICpzaXplIH07CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBACisyMDIxLTA2LTExICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBBZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAg
ICogTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0Lmg6CisgICAgICAgIChXZWJDb3JlOjpB
cHBIaWdobGlnaHQ6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGln
aHQ6OmRlY29kZSk6CisgICAgICAgICogTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0UmFu
Z2VEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6dG9T
aGFyZWRCdWZmZXIgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGlj
YXRvclJlc3BvbnNlRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlQXJyYXlCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6ZGVjb2RlQXJyYXlCdWZmZXIpOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oOgorICAgICAg
ICAoV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6ZW5jb2RlIGNv
bnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxEZXNj
cmlwdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRv
cjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0
SGFuZHNoYWtlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Z2V0
RXhwZWN0ZWRXZWJTb2NrZXRBY2NlcHQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0J1ZmZlclNv
dXJjZS5oOgorICAgICAgICAoV2ViQ29yZTo6QnVmZmVyU291cmNlOjpieXRlcyBjb25zdCk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRlY29kZSk6CisgICAgICAgICogY29udGVu
dGV4dGVuc2lvbnMvU2VyaWFsaXplZE5GQS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
RXh0ZW5zaW9uczo6U2VyaWFsaXplZE5GQTo6cG9pbnRlckF0T2Zmc2V0SW5GaWxlIGNvbnN0KToK
KyAgICAgICAgKiBjcnlwdG8vbWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlQW5kU3RvcmVNYXN0ZXJLZXkpOgorICAgICAgICAqIGRvbS9O
b2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omhhc2hQb2ludGVyKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBhdGNoU3Vw
cG9ydDo6Y3JlYXRlRGlnZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmFkZFN0cmluZ1RvU0hBMSk6
IERlbGV0ZWQuCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZpY2F0
ZSk6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yTmV0d29ya0FnZW50OjpnZXRTZXJpYWxpemVk
Q2VydGlmaWNhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpjcmVhdGVTaGFyZWRC
dWZmZXIgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpTaGFyZWRCdWZmZXI6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZm
ZXI6OkRhdGFTZWdtZW50OjpkYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1
ZmZlcjo6RGF0YVNlZ21lbnQ6OmJ5dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlcjo6ZGVjb2RlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6
OkRhdGFTZWdtZW50OjpzaXplIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZm
ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZW5j
b2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6
ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Nb2RlbC5oOgorICAgICAgICAo
V2ViQ29yZTo6TW9kZWw6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNb2RlbDo6
ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oOgorICAg
ICAgICAoV2ViQ29yZTo6UGl4ZWxCdWZmZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpQaXhlbEJ1ZmZlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVh
bS9SZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpD
YXBhYmlsaXR5VmFsdWVPclJhbmdlOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FwYWJpbGl0eVZhbHVlT3JSYW5nZTo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmFkZFN0cmluZ1RvU0hBMSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZp
Y2F0ZUluZm9DRk5ldC5jcHA6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjplbmNvZGVDRkRh
dGEpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVjb2RlQ0ZEYXRhKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNR
TGl0ZVN0YXRlbWVudDo6YmluZEJsb2IpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVT
dGF0ZW1lbnQuaDoKKyAgICAgICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlv
bkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpk
b1B1c2hDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpp
bXBvcnRSZWNvcmRzKToKKyAgICAgICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0
U3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTV1NjcmlwdFN0b3JhZ2U6OnN0b3JlKToK
KwogMjAyMS0wNi0xMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAg
IExhemlseSBjb21wdXRlIFNlY3VyaXR5T3JpZ2luOjptX2lzUG90ZW50aWFsbHlUcnVzdHdvcnRo
eSBmb3IgcGVyZm9ybWFuY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0
L0FwcEhpZ2hsaWdodC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGln
aGxpZ2h0L0FwcEhpZ2hsaWdodC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTIs
NyArNTIsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBBcHBIaWdobGlnaHQ6OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nh
c3Q8c2l6ZV90PihoaWdobGlnaHQtPnNpemUoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoaGlnaGxpZ2h0LT5kYXRhKCksIGhpZ2hsaWdodC0+c2l6ZSgpLCAxKTsKKyAgICBl
bmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgKmhpZ2hsaWdodCB9LCAxKTsKIAog
ICAgIGVuY29kZXIgPDwgdGV4dDsKIApAQCAtNzUsNyArNzUsNyBAQCBzdGQ6Om9wdGlvbmFsPEFw
cEhpZ2hsaWdodD4gQXBwSGlnaGxpZ2h0CiAKICAgICBWZWN0b3I8dWludDhfdD4gaGlnaGxpZ2h0
OwogICAgIGhpZ2hsaWdodC5ncm93KCpsZW5ndGgpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVG
aXhlZExlbmd0aERhdGEoaGlnaGxpZ2h0LmRhdGEoKSwgaGlnaGxpZ2h0LnNpemUoKSwgMSkpCisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgaGlnaGxpZ2h0IH0s
IDEpKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgc3RkOjpvcHRpb25hbDxz
dGQ6Om9wdGlvbmFsPFN0cmluZz4+IHRleHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2hpZ2hsaWdodC9BcHBIaWdobGlnaHRSYW5nZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFJhbmdlRGF0YS5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhp
Z2hsaWdodFJhbmdlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgUmVm
PFNoYXJlZEJ1ZmZlcj4gQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhOgogewogICAgIFdURjo6UGVyc2lz
dGVuY2U6OkVuY29kZXIgZW5jb2RlcjsKICAgICBlbmNvZGVyIDw8ICp0aGlzOwotICAgIHJldHVy
biBTaGFyZWRCdWZmZXI6OmNyZWF0ZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNp
emUoKSk7CisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCkp
OwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIEFwcEhpZ2hsaWdodFJhbmdlRGF0
YTo6Tm9kZVBhdGhDb21wb25lbnQ6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdApJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yUmVzcG9uc2VE
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9BdXRo
ZW50aWNhdG9yUmVzcG9uc2VEYXRhLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvclJlc3BvbnNlRGF0YS5oCSh3b3JraW5n
IGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiBzdGF0aWMg
dm9pZCBlbmNvZGVBcnJheUJ1ZmZlcihFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBBcnJheUJ1ZmZl
ciYgYnVmZmVyKQogewogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ1ZmZl
ci5ieXRlTGVuZ3RoKCkpOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0YXRp
Y19jYXN0PGNvbnN0IHVpbnQ4X3QqPihidWZmZXIuZGF0YSgpKSwgYnVmZmVyLmJ5dGVMZW5ndGgo
KSwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLmJ5dGVzKCks
IDEpOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgpAQCAtNzUsNyArNzUsNyBAQCBSZWZQ
dHI8QXJyYXlCdWZmZXI+IGRlY29kZUFycmF5QnVmZmVyKERlCiAgICAgYXV0byBidWZmZXIgPSBB
cnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKGxlbmd0aC52YWx1ZSgpLCBzaXplb2YodWludDhfdCkpOwog
ICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHN0YXRpY19jYXN0PHVpbnQ4X3QqPihidWZmZXItPmRh
dGEoKSksIGxlbmd0aC52YWx1ZSgpLCAxKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKGJ1ZmZlci0+d3JpdGFibGVCeXRlcygpLCAxKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgcmV0dXJuIGJ1ZmZlcjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlh
bENyZWF0aW9uT3B0aW9ucy5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTQxLDggKzE0MSw4IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2
b2lkIFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OmVuY29kZShFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgcnAuaWQgPDwgcnAubmFtZSA8PCBycC5p
Y29uOwotICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHVzZXIuaWQubGVuZ3Ro
KCkpOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHVzZXIuaWQuZGF0YSgpLCB1
c2VyLmlkLmxlbmd0aCgpLCAxKTsKKyAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90
Pih1c2VyLmlkLmJ5dGVzKCkuc2l6ZSgpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3Ro
RGF0YSh1c2VyLmlkLmJ5dGVzKCksIDEpOwogICAgIGVuY29kZXIgPDwgdXNlci5kaXNwbGF5TmFt
ZSA8PCB1c2VyLm5hbWUgPDwgdXNlci5pY29uIDw8IHB1YktleUNyZWRQYXJhbXMgPDwgdGltZW91
dCA8PCBleGNsdWRlQ3JlZGVudGlhbHMgPDwgYXV0aGVudGljYXRvclNlbGVjdGlvbiA8PCBhdHRl
c3RhdGlvbiA8PCBleHRlbnNpb25zOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsRGVzY3Jp
cHRvci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3
LDggKzQ3LDggQEAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgUHVibGljS2V5Q3JlZGVu
dGlhbERlc2NyaXB0b3I6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVu
Y29kZXIgPDwgdHlwZTsKLSAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihpZC5s
ZW5ndGgoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoaWQuZGF0YSgpLCBp
ZC5sZW5ndGgoKSwgMSk7CisgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaWQu
Ynl0ZXMoKS5zaXplKCkpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGlkLmJ5
dGVzKCksIDEpOwogICAgIGVuY29kZXIgPDwgdHJhbnNwb3J0czsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRz
aGFrZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
c29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMTMg
KzEwMywxNCBAQCBzdGF0aWMgU3RyaW5nIGdlbmVyYXRlU2VjV2ViU29ja2V0S2V5KCkKIFN0cmlu
ZyBXZWJTb2NrZXRIYW5kc2hha2U6OmdldEV4cGVjdGVkV2ViU29ja2V0QWNjZXB0KGNvbnN0IFN0
cmluZyYgc2VjV2ViU29ja2V0S2V5KQogewogICAgIGNvbnN0ZXhwciB1aW50OF90IHdlYlNvY2tl
dEtleUdVSURbXSA9ICIyNThFQUZBNS1FOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTEiOworCiAg
ICAgU0hBMSBzaGExOwotICAgIENTdHJpbmcga2V5RGF0YSA9IHNlY1dlYlNvY2tldEtleS5hc2Np
aSgpOwotICAgIHNoYTEuYWRkQnl0ZXMoa2V5RGF0YS5kYXRhQXNVSW50OFB0cigpLCBrZXlEYXRh
Lmxlbmd0aCgpKTsKLSAgICBzaGExLmFkZEJ5dGVzKHdlYlNvY2tldEtleUdVSUQsIHN0ZDo6c2l6
ZSh3ZWJTb2NrZXRLZXlHVUlEKSAtIDEpOworICAgIHNoYTEuYWRkQnl0ZXMoc2VjV2ViU29ja2V0
S2V5LmFzY2lpKCkpOworICAgIHNoYTEuYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgd2ViU29ja2V0
S2V5R1VJRCB9KSk7CisKICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAgICBzaGExLmNvbXB1dGVI
YXNoKGhhc2gpOwotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhoYXNoLmRhdGEoKSwg
U0hBMTo6aGFzaFNpemUpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsg
aGFzaCB9KTsKIH0KIAogV2ViU29ja2V0SGFuZHNoYWtlOjpXZWJTb2NrZXRIYW5kc2hha2UoY29u
c3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wsIGNvbnN0IFN0cmluZyYgdXNlckFn
ZW50LCBjb25zdCBTdHJpbmcmIGNsaWVudE9yaWdpbiwgYm9vbCBhbGxvd0Nvb2tpZXMpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9CdWZmZXJTb3VyY2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9CdWZmZXJTb3VyY2UuaAkocmV2aXNpb24gMjc4
ODA5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQnVmZmVyU291cmNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU3LDYgKzU3LDEzIEBAIHB1YmxpYzoKICAgICAgICAgfSwgbV92YXJpYW50
KTsKICAgICB9CiAKKyAgICBTcGFuPGNvbnN0IHVpbnQ4X3Q+IGJ5dGVzKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBXVEY6OnZpc2l0KFtdKGF1dG8mIGJ1ZmZlcikgLT4gU3Bhbjxjb25z
dCB1aW50OF90PiB7CisgICAgICAgICAgICByZXR1cm4gYnVmZmVyID8gU3Bhbjxjb25zdCB1aW50
OF90PiB7IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihidWZmZXItPmRhdGEoKSksIGJ1ZmZl
ci0+Ynl0ZUxlbmd0aCgpIH0gOiBTcGFuPGNvbnN0IHVpbnQ4X3Q+IHsgfTsKKyAgICAgICAgfSwg
bV92YXJpYW50KTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgVmFyaWFudFR5cGUgbV92YXJpYW50
OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTY0LDE1
ICsxNjQsMTUgQEAgdm9pZCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmVuY29kZShFbmNvZAogCiAg
ICAgaWYgKGhhc0FycmF5KSB7CiAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KG1fYXJyYXlCdWZmZXJDb250ZW50c0FycmF5LT5zaXplKCkpOwotICAgICAgICBmb3IgKGNv
bnN0IGF1dG8gJmFycmF5QnVmZmVyQ29udGVudHMgOiAqbV9hcnJheUJ1ZmZlckNvbnRlbnRzQXJy
YXkpIHsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBhcnJheUJ1ZmZlckNvbnRlbnRzIDogKm1f
YXJyYXlCdWZmZXJDb250ZW50c0FycmF5KSB7CiAgICAgICAgICAgICBlbmNvZGVyIDw8IGFycmF5
QnVmZmVyQ29udGVudHMuc2l6ZUluQnl0ZXMoKTsKLSAgICAgICAgICAgIGVuY29kZXIuZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihhcnJheUJ1ZmZlckNv
bnRlbnRzLmRhdGEoKSksIGFycmF5QnVmZmVyQ29udGVudHMuc2l6ZUluQnl0ZXMoKSwgMSk7Cisg
ICAgICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShhcnJheUJ1ZmZlckNvbnRl
bnRzLmJ5dGVzKCksIDEpOwogICAgICAgICB9CiAgICAgfQogCiAjaWYgRU5BQkxFKFdFQl9SVEMp
CiAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4obV9kZXRhY2hlZFJUQ0RhdGFD
aGFubmVscy5zaXplKCkpOwotICAgIGZvciAoY29uc3QgYXV0byAmY2hhbm5lbCA6IG1fZGV0YWNo
ZWRSVENEYXRhQ2hhbm5lbHMpCisgICAgZm9yIChjb25zdCBhdXRvJiBjaGFubmVsIDogbV9kZXRh
Y2hlZFJUQ0RhdGFDaGFubmVscykKICAgICAgICAgZW5jb2RlciA8PCAqY2hhbm5lbDsKICNlbmRp
ZgogfQpAQCAtMjA2LDcgKzIwNiw3IEBAIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNl
cmlhbGl6ZWQKICAgICAgICAgICAgIGF1dG8gYnVmZmVyID0gR2lnYWNhZ2U6OnRyeU1hbGxvYyhH
aWdhY2FnZTo6UHJpbWl0aXZlLCBidWZmZXJTaXplKTsKICAgICAgICAgICAgIGlmICghYnVmZmVy
KQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShzdGF0aWNfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwg
YnVmZmVyU2l6ZSwgMSkpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExl
bmd0aERhdGEoU3BhbiB7IHN0YXRpY19jYXN0PHN0ZDo6Ynl0ZSo+KGJ1ZmZlciksIGJ1ZmZlclNp
emUgfSwgMSkpIHsKICAgICAgICAgICAgICAgICBHaWdhY2FnZTo6ZnJlZShHaWdhY2FnZTo6UHJp
bWl0aXZlLCBidWZmZXIpOwogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAg
ICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvU2VyaWFsaXpl
ZE5GQS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
U2VyaWFsaXplZE5GQS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL1NlcmlhbGl6ZWRORkEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcs
NyArMTA3LDcgQEAgU2VyaWFsaXplZE5GQTo6U2VyaWFsaXplZE5GQShGaWxlU3lzdGVtOgogdGVt
cGxhdGU8dHlwZW5hbWUgVD4KIGNvbnN0IFQqIFNlcmlhbGl6ZWRORkE6OnBvaW50ZXJBdE9mZnNl
dEluRmlsZShzaXplX3Qgb2Zmc2V0KSBjb25zdAogewotICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PGNvbnN0IFQqPihzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4obV9maWxlLmRhdGEoKSkg
KyBvZmZzZXQpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IFQqPihtX2ZpbGUu
ZGF0YSgpLmRhdGEoKSArIG9mZnNldCk7CiB9CiAKIGF1dG8gU2VyaWFsaXplZE5GQTo6bm9kZXMo
KSBjb25zdCAtPiBjb25zdCBSYW5nZTxJbW11dGFibGVORkFOb2RlPgpJbmRleDogU291cmNlL1dl
YkNvcmUvY3J5cHRvL21hYy9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFj
Lm1tCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL1Nlcmlh
bGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNyArMTI1LDcg
QEAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiAgICAgfQogI2VuZGlmCiAKLSAg
ICBhdXRvIGJhc2U2NEVuY29kZWRNYXN0ZXJLZXlEYXRhID0gYmFzZTY0RW5jb2RlVG9WZWN0b3Io
bWFzdGVyS2V5RGF0YSk7CisgICAgYXV0byBiYXNlNjRFbmNvZGVkTWFzdGVyS2V5RGF0YSA9IGJh
c2U2NEVuY29kZVRvVmVjdG9yKFNwYW4geyBtYXN0ZXJLZXlEYXRhIH0pOwogCiAgICAgLy8gQ2Fu
bm90IHVzZSBrU2VjQ2xhc3NLZXkgYmVjYXVzZSBvZiA8cmRhcjovL3Byb2JsZW0vMTYwNjgyMDc+
LgogICAgIE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcyA9IEB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2MDYsNyArMTYwNiw4IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IE5vZGU6OnNl
dFRleHRDb250ZW50KGMKIHN0YXRpYyBTSEExOjpEaWdlc3QgaGFzaFBvaW50ZXIoY29uc3Qgdm9p
ZCogcG9pbnRlcikKIHsKICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmcG9pbnRlciksIHNpemVvZihwb2ludGVyKSk7Cisg
ICAgc2hhMS5hZGRCeXRlcyhhc0J5dGVzKFNwYW4geyAmcG9pbnRlciwgMSB9KSk7CisKICAgICBT
SEExOjpEaWdlc3QgZGlnZXN0OwogICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsKICAgICBy
ZXR1cm4gZGlnZXN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3Vw
cG9ydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNo
U3VwcG9ydC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9ET01QYXRjaFN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQsMjggKzM5NCwyMyBA
QCBFeGNlcHRpb25Pcjx2b2lkPiBET01QYXRjaFN1cHBvcnQ6OmlubmVyCiAgICAgcmV0dXJuIHsg
fTsKIH0KIAotc3RhdGljIHZvaWQgYWRkU3RyaW5nVG9TSEExKFNIQTEmIHNoYTEsIGNvbnN0IFN0
cmluZyYgc3RyaW5nKQotewotICAgIENTdHJpbmcgY1N0cmluZyA9IHN0cmluZy51dGY4KCk7Ci0g
ICAgc2hhMS5hZGRCeXRlcyhjU3RyaW5nLmRhdGFBc1VJbnQ4UHRyKCksIGNTdHJpbmcubGVuZ3Ro
KCkpOwotfQotCiBzdGQ6OnVuaXF1ZV9wdHI8RE9NUGF0Y2hTdXBwb3J0OjpEaWdlc3Q+IERPTVBh
dGNoU3VwcG9ydDo6Y3JlYXRlRGlnZXN0KE5vZGUmIG5vZGUsIFVudXNlZE5vZGVzTWFwKiB1bnVz
ZWROb2Rlc01hcCkKIHsKICAgICBhdXRvIGRpZ2VzdCA9IG1ha2VVbmlxdWU8RGlnZXN0PigpOwog
ICAgIGRpZ2VzdC0+bm9kZSA9ICZub2RlOworCiAgICAgU0hBMSBzaGExOwogCiAgICAgYXV0byBu
b2RlVHlwZSA9IG5vZGUubm9kZVR5cGUoKTsKLSAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZub2RlVHlwZSksIHNpemVvZihub2RlVHlwZSkpOwotICAg
IGFkZFN0cmluZ1RvU0hBMShzaGExLCBub2RlLm5vZGVOYW1lKCkpOwotICAgIGFkZFN0cmluZ1Rv
U0hBMShzaGExLCBub2RlLm5vZGVWYWx1ZSgpKTsKKyAgICBzaGExLmFkZEJ5dGVzKGFzQnl0ZXMo
U3BhbiB7ICZub2RlVHlwZSwgMSB9KSk7CisgICAgc2hhMS5hZGRCeXRlcyhub2RlLm5vZGVOYW1l
KCkudXRmOCgpKTsKKyAgICBzaGExLmFkZEJ5dGVzKG5vZGUubm9kZVZhbHVlKCkudXRmOCgpKTsK
IAogICAgIGlmIChub2RlLm5vZGVUeXBlKCkgPT0gTm9kZTo6RUxFTUVOVF9OT0RFKSB7CiAgICAg
ICAgIE5vZGUqIGNoaWxkID0gbm9kZS5maXJzdENoaWxkKCk7CiAgICAgICAgIHdoaWxlIChjaGls
ZCkgewogICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPERpZ2VzdD4gY2hpbGRJbmZvID0gY3Jl
YXRlRGlnZXN0KCpjaGlsZCwgdW51c2VkTm9kZXNNYXApOwotICAgICAgICAgICAgYWRkU3RyaW5n
VG9TSEExKHNoYTEsIGNoaWxkSW5mby0+c2hhMSk7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVz
KGNoaWxkSW5mby0+c2hhMS51dGY4KCkpOwogICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKTsKICAgICAgICAgICAgIGRpZ2VzdC0+Y2hpbGRyZW4uYXBwZW5kKFdURk1vdmUo
Y2hpbGRJbmZvKSk7CiAgICAgICAgIH0KQEAgLTQyNCwxOSArNDE5LDE5IEBAIHN0ZDo6dW5pcXVl
X3B0cjxET01QYXRjaFN1cHBvcnQ6OkRpZ2VzdD4KICAgICAgICAgaWYgKGVsZW1lbnQuaGFzQXR0
cmlidXRlc1dpdGhvdXRVcGRhdGUoKSkgewogICAgICAgICAgICAgU0hBMSBhdHRyc1NIQTE7CiAg
ICAgICAgICAgICBmb3IgKGF1dG8mIGF0dHJpYnV0ZSA6IGVsZW1lbnQuYXR0cmlidXRlc0l0ZXJh
dG9yKCkpIHsKLSAgICAgICAgICAgICAgICBhZGRTdHJpbmdUb1NIQTEoYXR0cnNTSEExLCBhdHRy
aWJ1dGUubmFtZSgpLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGFkZFN0cmluZ1RvU0hB
MShhdHRyc1NIQTEsIGF0dHJpYnV0ZS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBhdHRyc1NI
QTEuYWRkQnl0ZXMoYXR0cmlidXRlLm5hbWUoKS50b1N0cmluZygpLnV0ZjgoKSk7CisgICAgICAg
ICAgICAgICAgYXR0cnNTSEExLmFkZEJ5dGVzKGF0dHJpYnV0ZS52YWx1ZSgpLnN0cmluZygpLnV0
ZjgoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTSEExOjpEaWdlc3QgYXR0cnNIYXNo
OwogICAgICAgICAgICAgYXR0cnNTSEExLmNvbXB1dGVIYXNoKGF0dHJzSGFzaCk7Ci0gICAgICAg
ICAgICBkaWdlc3QtPmF0dHJzU0hBMSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGF0dHJzSGFzaC5k
YXRhKCksIDEwKTsKLSAgICAgICAgICAgIGFkZFN0cmluZ1RvU0hBMShzaGExLCBkaWdlc3QtPmF0
dHJzU0hBMSk7CisgICAgICAgICAgICBkaWdlc3QtPmF0dHJzU0hBMSA9IGJhc2U2NEVuY29kZVRv
U3RyaW5nKFNwYW4geyBhdHRyc0hhc2ggfSk7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGRp
Z2VzdC0+YXR0cnNTSEExLnV0ZjgoKSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBTSEExOjpE
aWdlc3QgaGFzaDsKICAgICBzaGExLmNvbXB1dGVIYXNoKGhhc2gpOwotICAgIGRpZ2VzdC0+c2hh
MSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGhhc2guZGF0YSgpLCAxMCk7CisgICAgZGlnZXN0LT5z
aGExID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoU3BhbiB7IGhhc2ggfSk7CiAgICAgaWYgKHVudXNl
ZE5vZGVzTWFwKQogICAgICAgICB1bnVzZWROb2Rlc01hcC0+YWRkKGRpZ2VzdC0+c2hhMSwgZGln
ZXN0LmdldCgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kSG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kSG9zdC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MDIsNyArNjAyLDcgQEAgYm9vbCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZp
YwogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgV1RGOjpQZXJz
aXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEtPmRhdGEoKSwgZGF0YS0+c2l6ZSgpKTsKKyAg
ICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyAqZGF0YSB9OwogICAgIHN0ZDo6
b3B0aW9uYWw8Q2VydGlmaWNhdGVJbmZvPiBjZXJ0aWZpY2F0ZUluZm87CiAgICAgZGVjb2RlciA+
PiBjZXJ0aWZpY2F0ZUluZm87CiAgICAgaWYgKCFjZXJ0aWZpY2F0ZUluZm8pCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3
b3JrQWdlbnQuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
MDUsNyArMTAwNSw3IEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG8K
IAogICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2RlcjsKICAgICBXVEY6OlBlcnNp
c3RlbmNlOjpDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUoZW5jb2Rlciwg
Y2VydGlmaWNhdGUudmFsdWUoKSk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGVu
Y29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICByZXR1cm4gYmFzZTY0
RW5jb2RlVG9TdHJpbmcoZW5jb2Rlci5idWZmZXIoKSk7CiB9CiAKIFdlYlNvY2tldCogSW5zcGVj
dG9yTmV0d29ya0FnZW50Ojp3ZWJTb2NrZXRGb3JSZXF1ZXN0SWQoY29uc3QgUHJvdG9jb2w6Ok5l
dHdvcms6OlJlcXVlc3RJZCYgcmVxdWVzdElkKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vUGFzdGVib2FyZEN1c3RvbURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04OSw3ICs4OSw3IEBAIFJlZjxTaGFyZWRCdWZmZXI+IFBhc3RlYm9hcmRDdXN0
b21EYXRhOjoKICAgICBlbmNvZGVyIDw8IG1fb3JpZ2luOwogICAgIGVuY29kZXIgPDwgc2FtZU9y
aWdpbkN1c3RvbVN0cmluZ0RhdGEoKTsKICAgICBlbmNvZGVyIDw8IG9yZGVyZWRUeXBlcygpOwot
ICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVy
LmJ1ZmZlclNpemUoKSk7CisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIu
YnVmZmVyKCkpOwogfQogCiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSBQYXN0ZWJvYXJkQ3VzdG9tRGF0
YTo6ZnJvbVBlcnNpc3RlbmNlRGVjb2RlcihXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyJiYgZGVj
b2RlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTggKzM2LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIoY29uc3QgdWludDhfdCogZGF0YSwgc2l6
ZV90IHNpemUpCitTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0
ZT4gZGF0YSkKIHsKLSAgICBhcHBlbmQoZGF0YSwgc2l6ZSk7Ci19Ci0KLVNoYXJlZEJ1ZmZlcjo6
U2hhcmVkQnVmZmVyKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKQotewotICAgIGFwcGVu
ZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgc2l6ZSk7CisgICAgYXBw
ZW5kKGRhdGEpOwogfQogCiBTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihGaWxlU3lzdGVtOjpN
YXBwZWRGaWxlRGF0YSYmIGZpbGVEYXRhKQotICAgIDogbV9zaXplKGZpbGVEYXRhLnNpemUoKSkK
KyAgICA6IG1fc2l6ZShmaWxlRGF0YS5kYXRhKCkuc2l6ZSgpKQogewogICAgIG1fc2VnbWVudHMu
YXBwZW5kKHswLCBEYXRhU2VnbWVudDo6Y3JlYXRlKFdURk1vdmUoZmlsZURhdGEpKX0pOwogfQpA
QCAtMTg4LDEzICsxODMsMTMgQEAgdm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVuZChjb25zdCBTaGFy
ZWRCdQogICAgIEFTU0VSVChpbnRlcm5hbGx5Q29uc2lzdGVudCgpKTsKIH0KIAotdm9pZCBTaGFy
ZWRCdWZmZXI6OmFwcGVuZChjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoKQordm9p
ZCBTaGFyZWRCdWZmZXI6OmFwcGVuZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKICAg
ICBBU1NFUlQoIW1faGFzQmVlbkNvbWJpbmVkSW50b09uZVNlZ21lbnQpOwogICAgIFZlY3Rvcjx1
aW50OF90PiB2ZWN0b3I7Ci0gICAgdmVjdG9yLmFwcGVuZChkYXRhLCBsZW5ndGgpOwotICAgIG1f
c2VnbWVudHMuYXBwZW5kKHttX3NpemUsIERhdGFTZWdtZW50OjpjcmVhdGUoV1RGTW92ZSh2ZWN0
b3IpKX0pOwotICAgIG1fc2l6ZSArPSBsZW5ndGg7CisgICAgdmVjdG9yLmFwcGVuZChyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKTsKKyAg
ICBtX3NlZ21lbnRzLmFwcGVuZCh7IG1fc2l6ZSwgRGF0YVNlZ21lbnQ6OmNyZWF0ZShXVEZNb3Zl
KHZlY3RvcikpIH0pOworICAgIG1fc2l6ZSArPSBkYXRhLnNpemUoKTsKICAgICBBU1NFUlQoaW50
ZXJuYWxseUNvbnNpc3RlbnQoKSk7CiB9CiAKQEAgLTMwMSwxMSArMjk2LDQwIEBAIGNvbnN0IHVp
bnQ4X3QqIFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQKICNpZiBVU0UoR1NUUkVBTUVSKQogICAg
ICAgICBbXShjb25zdCBSZWZQdHI8R3N0TWFwcGVkT3duZWRCdWZmZXI+JiBkYXRhKSB7IHJldHVy
biBkYXRhLT5kYXRhKCk7IH0sCiAjZW5kaWYKLSAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6
TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihkYXRhLmRhdGEoKSk7IH0KKyAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6TWFwcGVkRmls
ZURhdGEmIGRhdGEpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRh
dGEuZGF0YSgpLmRhdGEoKSk7IH0KICAgICApOwogICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0
b3IsIG1faW1tdXRhYmxlRGF0YSk7CiB9CiAKK1NwYW48Y29uc3Qgc3RkOjpieXRlPiBTaGFyZWRC
dWZmZXI6OkRhdGFTZWdtZW50OjpieXRlcygpIGNvbnN0Cit7CisgICAgYXV0byB2aXNpdG9yID0g
V1RGOjptYWtlVmlzaXRvcigKKyAgICAgICAgW10oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRh
KSB7CisgICAgICAgICAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgZGF0YSB9KTsKKyAgICAgICAg
fSwKKyNpZiBVU0UoQ0YpCisgICAgICAgIFtdKGNvbnN0IFJldGFpblB0cjxDRkRhdGFSZWY+JiBk
YXRhKSB7CisgICAgICAgICAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgQ0ZEYXRhR2V0Qnl0ZVB0
cihkYXRhLmdldCgpKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihDRkRhdGFHZXRMZW5ndGgoZGF0YS5n
ZXQoKSkpIH0pOworICAgICAgICB9LAorI2VuZGlmCisjaWYgVVNFKEdMSUIpCisgICAgICAgIFtd
KGNvbnN0IEdSZWZQdHI8R0J5dGVzPiYgZGF0YSkgeworICAgICAgICAgICAgcmV0dXJuIGFzQnl0
ZXMoU3BhbiB7IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihnX2J5dGVzX2dldF9kYXRhKGRh
dGEuZ2V0KCksIG51bGxwdHIpKSwgZ19ieXRlc19nZXRfc2l6ZShkYXRhLmdldCgpKSB9KTsKKyAg
ICAgICAgfSwKKyNlbmRpZgorI2lmIFVTRShHU1RSRUFNRVIpCisgICAgICAgIFtdKGNvbnN0IFJl
ZlB0cjxHc3RNYXBwZWRPd25lZEJ1ZmZlcj4mIGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBh
c0J5dGVzKFNwYW4geyBkYXRhLT5kYXRhKCksIGRhdGEtPnNpemUoKSB9KTsKKyAgICAgICAgfSwK
KyNlbmRpZgorICAgICAgICBbXShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0
YSkgeworICAgICAgICAgICAgcmV0dXJuIGRhdGEuZGF0YSgpOworICAgICAgICB9CisgICAgKTsK
KyAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBtX2ltbXV0YWJsZURhdGEpOworCit9CisK
IGJvb2wgU2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVudDo6Y29udGFpbnNNYXBwZWRGaWxlRGF0YSgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8RmlsZVN5c3RlbTo6
TWFwcGVkRmlsZURhdGE+KG1faW1tdXRhYmxlRGF0YSk7CkBAIC0zMTksNyArMzQzLDcgQEAgdm9p
ZCBTaGFyZWRCdWZmZXI6OmhpbnRNZW1vcnlOb3ROZWVkZWRTbwogCiBXVEY6OlBlcnNpc3RlbmNl
OjpEZWNvZGVyIFNoYXJlZEJ1ZmZlcjo6ZGVjb2RlcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHsg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSgpKSwgc2l6ZSgpIH07CisgICAg
cmV0dXJuIHsgKnRoaXMgfTsKIH0KIAogYm9vbCBTaGFyZWRCdWZmZXI6Om9wZXJhdG9yPT0oY29u
c3QgU2hhcmVkQnVmZmVyJiBvdGhlcikgY29uc3QKQEAgLTM4NCw3ICs0MDgsNyBAQCBzaXplX3Qg
U2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVudDo6c2l6ZSgpCiAjaWYgVVNFKEdTVFJFQU1FUikKICAg
ICAgICAgW10oY29uc3QgUmVmUHRyPEdzdE1hcHBlZE93bmVkQnVmZmVyPiYgZGF0YSkgeyByZXR1
cm4gZGF0YS0+c2l6ZSgpOyB9LAogI2VuZGlmCi0gICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06
Ok1hcHBlZEZpbGVEYXRhJiBkYXRhKSB7IHJldHVybiBkYXRhLnNpemUoKTsgfQorICAgICAgICBb
XShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeyByZXR1cm4gZGF0YS5k
YXRhKCkuc2l6ZSgpOyB9CiAgICAgKTsKICAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBt
X2ltbXV0YWJsZURhdGEpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVk
QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVm
ZmVyLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJl
ZEJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw4ICs2NywxMiBAQCBjbGFzcyBTaGFyZWRC
dWZmZXJEYXRhVmlldzsKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIFNoYXJlZEJ1ZmZlciA6IHB1Ymxp
YyBSZWZDb3VudGVkPFNoYXJlZEJ1ZmZlcj4gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8U2hh
cmVkQnVmZmVyPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcik7
IH0KLSAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGRh
dGEsIHNpemVfdCBzaXplKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihkYXRh
LCBzaXplKSk7IH0KLSAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IGNo
YXIqIGRhdGEsIHNpemVfdCBzaXplKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZl
cihkYXRhLCBzaXplKSk7IH0KKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKFNw
YW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1
ZmZlcihkYXRhKSk7IH0KKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKFNwYW48
Y29uc3QgdWludDhfdD4gZGF0YSkgeyByZXR1cm4gY3JlYXRlKGFzQnl0ZXMoZGF0YSkpOyB9Cisg
ICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShTcGFuPGNvbnN0IGNoYXI+IGRhdGEp
IHsgcmV0dXJuIGNyZWF0ZShhc0J5dGVzKGRhdGEpKTsgfQorICAgIHN0YXRpYyBSZWY8U2hhcmVk
QnVmZmVyPiBjcmVhdGUoY29uc3Qgc3RkOjpieXRlKiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1
cm4gY3JlYXRlKFNwYW4geyBkYXRhLCBzaXplIH0pOyB9CisgICAgc3RhdGljIFJlZjxTaGFyZWRC
dWZmZXI+IGNyZWF0ZShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4g
Y3JlYXRlKFNwYW4geyBkYXRhLCBzaXplIH0pOyB9CisgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZm
ZXI+IGNyZWF0ZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gY3JlYXRl
KFNwYW4geyBkYXRhLCBzaXplIH0pOyB9CiAgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNy
ZWF0ZShGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIG1hcHBlZEZpbGVEYXRhKSB7IHJldHVy
biBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihXVEZNb3ZlKG1hcHBlZEZpbGVEYXRhKSkpOyB9
CiAKICAgICBlbnVtIGNsYXNzIE1heVVzZUZpbGVNYXBwaW5nIDogYm9vbCB7IE5vLCBZZXMgfTsK
QEAgLTEwMSw2ICsxMDUsOCBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IEF1ZGl0IHRoZSBjYWxs
IHNpdGVzIG9mIHRoaXMgZnVuY3Rpb24gYW5kIHJlcGxhY2UgdGhlbSB3aXRoIGl0ZXJhdGlvbiBp
ZiBwb3NzaWJsZS4KICAgICBjb25zdCB1aW50OF90KiBkYXRhKCkgY29uc3Q7CiAgICAgY29uc3Qg
Y2hhciogZGF0YUFzQ2hhclB0cigpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgY2hhcio+KGRhdGEoKSk7IH0KKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBj
b25zdCB7IHJldHVybiBhc0J5dGVzKFNwYW4geyBkYXRhKCksIHNpemUoKSB9KTsgfQorCiAgICAg
VmVjdG9yPHVpbnQ4X3Q+IGNvcHlEYXRhKCkgeyByZXR1cm4geyBkYXRhKCksIHNpemUoKSB9OyB9
CiAKICAgICAvLyBDb21iaW5lcyBhbGwgdGhlIHNlZ21lbnRzIGludG8gYSBWZWN0b3IgYW5kIHJl
dHVybnMgdGhhdCB2ZWN0b3IgYWZ0ZXIgY2xlYXJpbmcgdGhlIFNoYXJlZEJ1ZmZlci4KQEAgLTEx
NSw4ICsxMjEsMTIgQEAgcHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJu
ICFzaXplKCk7IH0KIAogICAgIHZvaWQgYXBwZW5kKGNvbnN0IFNoYXJlZEJ1ZmZlciYpOwotICAg
IHZvaWQgYXBwZW5kKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwotICAgIHZvaWQgYXBwZW5kKGNv
bnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpIHsgYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDhfdCo+KGRhdGEpLCBsZW5ndGgpOyB9CisgICAgdm9pZCBhcHBlbmQoU3Bhbjxj
b25zdCBzdGQ6OmJ5dGU+KTsKKyAgICB2b2lkIGFwcGVuZChTcGFuPGNvbnN0IHVpbnQ4X3Q+IGRh
dGEpIHsgYXBwZW5kKGFzQnl0ZXMoZGF0YSkpOyB9CisgICAgdm9pZCBhcHBlbmQoU3Bhbjxjb25z
dCBjaGFyPiBkYXRhKSB7IGFwcGVuZChhc0J5dGVzKGRhdGEpKTsgfQorICAgIHZvaWQgYXBwZW5k
KGNvbnN0IHN0ZDo6Ynl0ZSogZGF0YSwgc2l6ZV90IGxlbmd0aCkgeyBhcHBlbmQoU3BhbiB7IGRh
dGEsIGxlbmd0aCB9KTsgfQorICAgIHZvaWQgYXBwZW5kKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNp
emVfdCBsZW5ndGgpIHsgYXBwZW5kKFNwYW4geyBkYXRhLCBsZW5ndGggfSk7IH0KKyAgICB2b2lk
IGFwcGVuZChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKSB7IGFwcGVuZChTcGFuIHsg
ZGF0YSwgbGVuZ3RoIH0pOyB9CiAgICAgdm9pZCBhcHBlbmQoVmVjdG9yPHVpbnQ4X3Q+JiYpOwog
CiAgICAgdm9pZCBjbGVhcigpOwpAQCAtMTMxLDYgKzE0MSw4IEBAIHB1YmxpYzoKICAgICAgICAg
V0VCQ09SRV9FWFBPUlQgY29uc3QgdWludDhfdCogZGF0YSgpIGNvbnN0OwogICAgICAgICBXRUJD
T1JFX0VYUE9SVCBzaXplX3Qgc2l6ZSgpIGNvbnN0OwogCisgICAgICAgIFdFQkNPUkVfRVhQT1JU
IFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAgICAgICAgIHN0YXRpYyBS
ZWY8RGF0YVNlZ21lbnQ+IGNyZWF0ZShWZWN0b3I8dWludDhfdD4mJiBkYXRhKQogICAgICAgICB7
CiAgICAgICAgICAgICBkYXRhLnNocmlua1RvRml0KCk7CkBAIC0yMTIsOCArMjI0LDcgQEAgcHVi
bGljOgogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFNoYXJlZEJ1ZmZlcigpID0gZGVmYXVsdDsK
LSAgICBleHBsaWNpdCBTaGFyZWRCdWZmZXIoY29uc3QgdWludDhfdCosIHNpemVfdCk7Ci0gICAg
ZXhwbGljaXQgU2hhcmVkQnVmZmVyKGNvbnN0IGNoYXIqLCBzaXplX3QpOworICAgIGV4cGxpY2l0
IFNoYXJlZEJ1ZmZlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwogICAgIGV4cGxpY2l0IFNoYXJl
ZEJ1ZmZlcihWZWN0b3I8dWludDhfdD4mJik7CiAgICAgZXhwbGljaXQgU2hhcmVkQnVmZmVyKEZp
bGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYpOwogI2lmIFVTRShDRikKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0NBQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbi5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQXVkaW9TdHJlYW1EZXNjcmlwdGlv
bi5oIgogI2luY2x1ZGUgPENvcmVBdWRpby9Db3JlQXVkaW9UeXBlcy5oPgorI2luY2x1ZGUgPHd0
Zi9TcGFuLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtODAsMTMgKzgxLDEzIEBAIHBy
aXZhdGU6CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBDQUF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb246OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewotICAgIGVuY29kZXIuZW5j
b2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZtX3N0
cmVhbURlc2NyaXB0aW9uKSwgc2l6ZW9mKG1fc3RyZWFtRGVzY3JpcHRpb24pLCAxKTsKKyAgICBl
bmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJm1fc3RyZWFtRGVzY3JpcHRpb24s
IDEgfSwgMSk7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CiBib29sIENBQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIENBQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZkZXNjcmlwdGlvbi5tX3N0cmVh
bURlc2NyaXB0aW9uKSwgc2l6ZW9mKGRlc2NyaXB0aW9uLm1fc3RyZWFtRGVzY3JpcHRpb24pLCAx
KTsKKyAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZkZXNj
cmlwdGlvbi5tX3N0cmVhbURlc2NyaXB0aW9uLCAxIH0sIDEpOwogfQogCiBpbmxpbmUgQ0FBdWRp
b1N0cmVhbURlc2NyaXB0aW9uIHRvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKGNvbnN0IEF1ZGlv
U3RyZWFtRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ2VuZXJpYy9LZXllZERlY29kZXJHZW5lcmljLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL0tleWVkRGVjb2RlckdlbmVyaWMuY3BwCShyZXZp
c2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL0tleWVkRGVj
b2RlckdlbmVyaWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPFN0cmluZz4gcmVhZFN0cmluZygKICAgICAgICAgcmV0dXJuIGVtcHR5U3Ry
aW5nKCk7CiAKICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyKHNpemUudmFsdWUoKSk7Ci0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShidWZmZXIuZGF0YSgpLCBzaXplLnZh
bHVlKCkpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IGJ1
ZmZlciB9KSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICBhdXRvIHJlc3VsdCA9
IFN0cmluZzo6ZnJvbVVURjgoYnVmZmVyLmRhdGEoKSwgc2l6ZS52YWx1ZSgpKTsKICAgICBpZiAo
cmVzdWx0LmlzTnVsbCgpKQpAQCAtMTE3LDcgKzExNyw3IEBAIEtleWVkRGVjb2RlckdlbmVyaWM6
OktleWVkRGVjb2RlckdlbmVyaWMKICAgICAgICAgICAgIGlmICghb2spCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyKCpzaXplKTsKLSAg
ICAgICAgICAgIG9rID0gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLmRhdGEo
KSwgKnNpemUpOworICAgICAgICAgICAgb2sgPSBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0
YShTcGFuIHsgYnVmZmVyIH0pOwogICAgICAgICAgICAgaWYgKCFvaykKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKS0+YWRkKCprZXks
IFdURk1vdmUoYnVmZmVyKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Nb2RlbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L01vZGVsLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL01vZGVsLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgTW9kZWw6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25z
dAogewogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2RhdGEtPnNpemUoKSk7
Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEobV9kYXRhLT5kYXRhKCksIG1fZGF0
YS0+c2l6ZSgpLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShtX2RhdGEt
PmJ5dGVzKCksIDEpOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgpAQCAtNzQsNyArNzQs
NyBAQCBSZWZQdHI8TW9kZWw+IE1vZGVsOjpkZWNvZGUoRGVjb2RlciYgZGVjCiAKICAgICBWZWN0
b3I8dWludDhfdD4gZGF0YTsKICAgICBkYXRhLmdyb3coKmxlbmd0aCk7Ci0gICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksIDEpKQor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IGRhdGEgfSwgMSkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIE1vZGVsOjpjcmVhdGUoU2hh
cmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShkYXRhKSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgUGl4
ZWxCdWZmZXIKIAogICAgIGVuY29kZXIgPDwgbV9mb3JtYXQ7CiAgICAgZW5jb2RlciA8PCBtX3Np
emU7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEobV9kYXRhLT5kYXRhKCksIG1f
ZGF0YS0+Ynl0ZUxlbmd0aCgpLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0
YShtX2RhdGEtPmJ5dGVzKCksIDEpOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGQ6
Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBQaXhlbEJ1ZmZlcjo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCkBAIC0xMTMsNyArMTEzLDcgQEAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RkOjpvcHRp
b25hbDxQaQogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owog
Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZXN1bHQtPm1fZGF0YS0+
ZGF0YSgpLCByZXN1bHQtPm1fZGF0YS0+Ynl0ZUxlbmd0aCgpLCAxKSkKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlc3VsdC0+bV9kYXRhLT53cml0YWJsZUJ5dGVzKCks
IDEpKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgcmV0dXJuIHJlc3VsdDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFT
b3VyY2VDYXBhYmlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzLmgJKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1l
TWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDE2ICsxMTQs
MTYgQEAgcHJpdmF0ZToKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIENhcGFiaWxpdHlW
YWx1ZU9yUmFuZ2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewotICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+
KCZtX21pbk9yVmFsdWUpLCBzaXplb2YoVmFsdWVVbmlvbiksIGFsaWdub2YoVmFsdWVVbmlvbikp
OwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDhfdCo+KCZtX21heCksIHNpemVvZihWYWx1ZVVuaW9uKSwgYWxpZ25vZihWYWx1ZVVu
aW9uKSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZtX21pbk9y
VmFsdWUsIDEgfSwgYWxpZ25vZihWYWx1ZVVuaW9uKSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhl
ZExlbmd0aERhdGEoU3BhbiB7ICZtX21heCwgMSB9LCBhbGlnbm9mKFZhbHVlVW5pb24pKTsKICAg
ICBlbmNvZGVyIDw8IG1fdHlwZTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KIGJvb2wg
Q2FwYWJpbGl0eVZhbHVlT3JSYW5nZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIENhcGFiaWxp
dHlWYWx1ZU9yUmFuZ2UmIHZhbHVlT3JSYW5nZSkKIHsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNv
ZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnZhbHVlT3JSYW5n
ZS5tX21pbk9yVmFsdWUpLCBzaXplb2YoVmFsdWVVbmlvbiksIGFsaWdub2YoVmFsdWVVbmlvbikp
Ci0gICAgICAgICYmIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDhfdCo+KCZ2YWx1ZU9yUmFuZ2UubV9tYXgpLCBzaXplb2YoVmFsdWVVbmlvbiksIGFs
aWdub2YoVmFsdWVVbmlvbikpCisgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhE
YXRhKFNwYW4geyAmdmFsdWVPclJhbmdlLm1fbWluT3JWYWx1ZSwgMSB9LCBhbGlnbm9mKFZhbHVl
VW5pb24pKQorICAgICAgICAmJiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsg
JnZhbHVlT3JSYW5nZS5tX21heCwgMSB9LCBhbGlnbm9mKFZhbHVlVW5pb24pKQogICAgICAgICAm
JiBkZWNvZGVyLmRlY29kZSh2YWx1ZU9yUmFuZ2UubV90eXBlKTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVh
bHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzksMTMgKzEzOSwxMyBAQCBzdGF0aWMgdm9pZCBhZGRTdHJp
bmdUb1NIQTEoU0hBMSYgc2hhMSwgCiAKICAgICBpZiAoc3RyaW5nLmlzOEJpdCgpICYmIHN0cmlu
Zy5pc0FsbEFTQ0lJKCkpIHsKICAgICAgICAgY29uc3QgdWludDhfdCBudWxsQnl0ZSA9IDA7Ci0g
ICAgICAgIHNoYTEuYWRkQnl0ZXMoc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgo
KSk7Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMoJm51bGxCeXRlLCAxKTsKKyAgICAgICAgc2hhMS5h
ZGRCeXRlcyhhc0J5dGVzKFNwYW4geyBzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0
aCgpIH0pKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhhc0J5dGVzKFNwYW4geyAmbnVsbEJ5dGUs
IDEgfSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgYXV0byB1dGY4ID0gc3RyaW5n
LnV0ZjgoKTsKLSAgICBzaGExLmFkZEJ5dGVzKHV0ZjguZGF0YUFzVUludDhQdHIoKSwgdXRmOC5s
ZW5ndGgoKSArIDEpOyAvLyBJbmNsdWRlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4KKyAgICBzaGEx
LmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7IHV0ZjguZGF0YUFzVUludDhQdHIoKSwgdXRmOC5sZW5n
dGgoKSArIDEgfSkpOyAvLyBJbmNsdWRlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4KIH0KIAogU3Ry
aW5nIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6Omhhc2hTdHJpbmdXaXRoU2FsdChjb25zdCBT
dHJpbmcmIGlkLCBjb25zdCBTdHJpbmcmIGhhc2hTYWx0KQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5l
dC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2YvQ2VydGlmaWNhdGVJbmZvQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNyAr
MjEwLDcgQEAgc3RhdGljIHZvaWQgZW5jb2RlQ0ZEYXRhKEVuY29kZXImIGVuY29kZQogICAgIGNv
bnN0IHVpbnQ4X3QqIGJ5dGVQdHIgPSBDRkRhdGFHZXRCeXRlUHRyKGRhdGEpOwogCiAgICAgZW5j
b2RlciA8PCBsZW5ndGg7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYnl0ZVB0
ciwgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVk
TGVuZ3RoRGF0YShTcGFuIHsgYnl0ZVB0ciwgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpIH0p
OwogfQogCiBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4gZGVjb2Rl
Q0ZEYXRhKERlY29kZXImIGRlY29kZXIpCkBAIC0yMjUsNyArMjI1LDcgQEAgc3RhdGljIHN0ZDo6
b3B0aW9uYWw8UmV0YWluUHRyPENGRGF0YVJlZgogICAgIGlmICghcG9pbnRlcikKICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0ZShu
dWxscHRyLCBwb2ludGVyLCAqc2l6ZSkpOworICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0
ZShudWxscHRyLCByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwb2ludGVyKSwgKnNp
emUpKTsKIH0KIAogI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ2VydGlmaWNhdGVJbmZvLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0NlcnRpZmljYXRl
SW5mby5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvQ2VydGlmaWNhdGVJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcg
QEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8R1JlZlB0cjxHQnl0ZUFycgogICAgIHN0YXRpYyB2
b2lkIGVuY29kZShFbmNvZGVyICZlbmNvZGVyLCBjb25zdCBHUmVmUHRyPEdCeXRlQXJyYXk+JiBi
eXRlQXJyYXkpCiAgICAgewogICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90
PihieXRlQXJyYXktPmxlbik7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KGJ5dGVBcnJheS0+ZGF0YSwgYnl0ZUFycmF5LT5sZW4pOworICAgICAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgYnl0ZUFycmF5LT5kYXRhLCBieXRlQXJyYXktPmxlbiB9
KTsKICAgICB9CiAKICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxHUmVmUHRyPEdCeXRlQXJyYXk+
PiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKQEAgLTg3LDcgKzg3LDcgQEAgdGVtcGxhdGU8PiBz
dHJ1Y3QgQ29kZXI8R1JlZlB0cjxHQnl0ZUFycgogCiAgICAgICAgIEdSZWZQdHI8R0J5dGVBcnJh
eT4gYnl0ZUFycmF5ID0gYWRvcHRHUmVmKGdfYnl0ZV9hcnJheV9zaXplZF9uZXcoKnNpemUpKTsK
ICAgICAgICAgZ19ieXRlX2FycmF5X3NldF9zaXplKGJ5dGVBcnJheS5nZXQoKSwgKnNpemUpOwot
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ5dGVBcnJheS0+ZGF0
YSwgKnNpemUpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNw
YW4geyBieXRlQXJyYXktPmRhdGEsICpzaXplIH0pKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKICAgICAgICAgcmV0dXJuIGJ5dGVBcnJheTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6
OmV4ZWN1dGVDb21tYW5kKCkKICAgICByZXR1cm4gc3RlcCgpID09IFNRTElURV9ET05FOwogfQog
Ci1pbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kQmxvYihpbnQgaW5kZXgsIFNwYW48Y29uc3QgdWlu
dDhfdD4gYmxvYikKK2ludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgU3Bh
bjxjb25zdCBzdGQ6OmJ5dGU+IGJsb2IpCiB7CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAg
QVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50
KCkpOwpAQCAtOTUsNiArOTUsMTEgQEAgaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IoaW50
IGluZGV4LAogICAgIHJldHVybiBzcWxpdGUzX2JpbmRfYmxvYihtX3N0YXRlbWVudCwgaW5kZXgs
IGJsb2IuZGF0YSgpLCBibG9iLnNpemUoKSwgU1FMSVRFX1RSQU5TSUVOVCk7CiB9CiAKK2ludCBT
UUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgU3Bhbjxjb25zdCB1aW50OF90PiBi
bG9iKQoreworICAgIHJldHVybiBiaW5kQmxvYihpbmRleCwgYXNCeXRlcyhibG9iKSk7Cit9CisK
IGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiB0
ZXh0KQogewogICAgIC8vIFN0cmluZzo6Y2hhcmFjdGVycygpIHJldHVybnMgMCBmb3IgdGhlIGVt
cHR5IHN0cmluZywgd2hpY2ggU1FMaXRlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9z
cWwvU1FMaXRlU3RhdGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDYgKzM5LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIH5TUUxpdGVTdGF0ZW1lbnQo
KTsKICAgICBXRUJDT1JFX0VYUE9SVCBTUUxpdGVTdGF0ZW1lbnQoU1FMaXRlU3RhdGVtZW50JiYp
OwogICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIGludCBiaW5kQmxvYihpbnQgaW5kZXgsIFNwYW48
Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJpbmRCbG9iKGludCBp
bmRleCwgU3Bhbjxjb25zdCB1aW50OF90Pik7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJpbmRC
bG9iKGludCBpbmRleCwgY29uc3QgU3RyaW5nJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJp
bmRUZXh0KGludCBpbmRleCwgU3RyaW5nVmlldyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFi
YXNlLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2
aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1
OSwxMCArNDU5LDEwIEBAIGJvb2wgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmRvUHVzaENoYW5nZXMK
ICAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRleHQoNiwgdXBkYXRlVmlhQ2Fj
aGVUb1N0cmluZyhkYXRhLnJlZ2lzdHJhdGlvbi51cGRhdGVWaWFDYWNoZSkpICE9IFNRTElURV9P
SwogICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCg3LCBkYXRhLnNjcmlw
dFVSTC5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1l
bnQtPmJpbmRUZXh0KDgsIHdvcmtlclR5cGVUb1N0cmluZyhkYXRhLndvcmtlclR5cGUpKSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoOSwgU3Bh
biB7IGNzcEVuY29kZXIuYnVmZmVyKCksIGNzcEVuY29kZXIuYnVmZmVyU2l6ZSgpIH0pICE9IFNR
TElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kQmxvYig5LCBjc3BF
bmNvZGVyLmJ1ZmZlcigpKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAgIHx8IGluc2VydFN0YXRl
bWVudC0+YmluZFRleHQoMTAsIGRhdGEucmVmZXJyZXJQb2xpY3kpICE9IFNRTElURV9PSwotICAg
ICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kQmxvYigxMSwgU3BhbiB7IHNjcmlwdFJl
c291cmNlTWFwRW5jb2Rlci5idWZmZXIoKSwgc2NyaXB0UmVzb3VyY2VNYXBFbmNvZGVyLmJ1ZmZl
clNpemUoKSB9KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+
YmluZEJsb2IoMTIsIFNwYW4geyBjZXJ0aWZpY2F0ZUluZm9FbmNvZGVyLmJ1ZmZlcigpLCBjZXJ0
aWZpY2F0ZUluZm9FbmNvZGVyLmJ1ZmZlclNpemUoKSB9KSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
ICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoMTEsIHNjcmlwdFJlc291cmNlTWFwRW5j
b2Rlci5idWZmZXIoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1l
bnQtPmJpbmRCbG9iKDEyLCBjZXJ0aWZpY2F0ZUluZm9FbmNvZGVyLmJ1ZmZlcigpKSAhPSBTUUxJ
VEVfT0sKICAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9E
T05FKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTZXJ2aWNlV29ya2VyLCAiRmFp
bGVkIHRvIHN0b3JlIHJlZ2lzdHJhdGlvbiBkYXRhIGludG8gcmVjb3JkcyB0YWJsZSAoJWkpIC0g
JXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkp
OwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTE3LDcgKzUxNyw3IEBAIFN0cmluZyBS
ZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3IKICAgICAgICAgc3RkOjpvcHRpb25hbDxD
b250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnM+IGNvbnRlbnRTZWN1cml0eVBvbGlj
eTsKICAgICAgICAgYXV0byBjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhU3BhbiA9IHNxbC0+Y29s
dW1uQmxvYkFzU3Bhbig4KTsKICAgICAgICAgaWYgKGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGFT
cGFuLnNpemUoKSkgewotICAgICAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBjc3BE
ZWNvZGVyKGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGFTcGFuLmRhdGEoKSwgY29udGVudFNlY3Vy
aXR5UG9saWN5RGF0YVNwYW4uc2l6ZSgpKTsKKyAgICAgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6
OkRlY29kZXIgY3NwRGVjb2RlciB7IGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGFTcGFuIH07CiAg
ICAgICAgICAgICBjc3BEZWNvZGVyID4+IGNvbnRlbnRTZWN1cml0eVBvbGljeTsKICAgICAgICAg
ICAgIGlmICghY29udGVudFNlY3VyaXR5UG9saWN5KSB7CiAgICAgICAgICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRS
ZWNvcmRzOiBGYWlsZWQgdG8gZGVjb2RlIGNvbnRlbnRTZWN1cml0eVBvbGljeSIpOwpAQCAtNTMw
LDcgKzUzMCw3IEBAIFN0cmluZyBSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3IKICAg
ICAgICAgSGFzaE1hcDxVUkwsIFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YTo6SW1wb3J0ZWRTY3Jp
cHQ+IHNjcmlwdFJlc291cmNlTWFwOwogICAgICAgICBhdXRvIHNjcmlwdFJlc291cmNlTWFwRGF0
YVNwYW4gPSBzcWwtPmNvbHVtbkJsb2JBc1NwYW4oMTApOwogICAgICAgICBpZiAoc2NyaXB0UmVz
b3VyY2VNYXBEYXRhU3Bhbi5zaXplKCkpIHsKLSAgICAgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6
OkRlY29kZXIgc2NyaXB0UmVzb3VyY2VNYXBEZWNvZGVyKHNjcmlwdFJlc291cmNlTWFwRGF0YVNw
YW4uZGF0YSgpLCBzY3JpcHRSZXNvdXJjZU1hcERhdGFTcGFuLnNpemUoKSk7CisgICAgICAgICAg
ICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIHNjcmlwdFJlc291cmNlTWFwRGVjb2RlciB7IHNj
cmlwdFJlc291cmNlTWFwRGF0YVNwYW4gfTsKICAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8SGFz
aE1hcDxVUkwsIEltcG9ydGVkU2NyaXB0QXR0cmlidXRlcz4+IHNjcmlwdFJlc291cmNlTWFwV2l0
aG91dFNjcmlwdHM7CiAgICAgICAgICAgICBzY3JpcHRSZXNvdXJjZU1hcERlY29kZXIgPj4gc2Ny
aXB0UmVzb3VyY2VNYXBXaXRob3V0U2NyaXB0czsKICAgICAgICAgICAgIGlmICghc2NyaXB0UmVz
b3VyY2VNYXBXaXRob3V0U2NyaXB0cykgewpAQCAtNTQzLDcgKzU0Myw3IEBAIFN0cmluZyBSZWdp
c3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3IKICAgICAgICAgYXV0byBjZXJ0aWZpY2F0ZUlu
Zm9EYXRhU3BhbiA9IHNxbC0+Y29sdW1uQmxvYkFzU3BhbigxMSk7CiAgICAgICAgIHN0ZDo6b3B0
aW9uYWw8Q2VydGlmaWNhdGVJbmZvPiBjZXJ0aWZpY2F0ZUluZm87CiAKLSAgICAgICAgV1RGOjpQ
ZXJzaXN0ZW5jZTo6RGVjb2RlciBjZXJ0aWZpY2F0ZUluZm9EZWNvZGVyKGNlcnRpZmljYXRlSW5m
b0RhdGFTcGFuLmRhdGEoKSwgY2VydGlmaWNhdGVJbmZvRGF0YVNwYW4uc2l6ZSgpKTsKKyAgICAg
ICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBjZXJ0aWZpY2F0ZUluZm9EZWNvZGVyIHsgY2Vy
dGlmaWNhdGVJbmZvRGF0YVNwYW4gfTsKICAgICAgICAgY2VydGlmaWNhdGVJbmZvRGVjb2RlciA+
PiBjZXJ0aWZpY2F0ZUluZm87CiAgICAgICAgIGlmICghY2VydGlmaWNhdGVJbmZvKSB7CiAgICAg
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTZXJ2aWNlV29ya2VyLCAiUmVnaXN0cmF0aW9uRGF0
YWJhc2U6OmltcG9ydFJlY29yZHM6IEZhaWxlZCB0byBkZWNvZGUgY2VydGlmaWNhdGVJbmZvIik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3Rv
cmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3Nl
cnZlci9TV1NjcmlwdFN0b3JhZ2UuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg2LDkgKzg2LDkgQEAgU2NyaXB0QnVmZmVyIFNXU2NyaXB0U3RvcmFnZTo6c3Rv
cmUoY29ucwogICAgIGF1dG8gc2NyaXB0UGF0aCA9IHRoaXMtPnNjcmlwdFBhdGgocmVnaXN0cmF0
aW9uS2V5LCBzY3JpcHRVUkwpOwogICAgIEZpbGVTeXN0ZW06Om1ha2VBbGxEaXJlY3RvcmllcyhG
aWxlU3lzdGVtOjpwYXJlbnRQYXRoKHNjcmlwdFBhdGgpKTsKIAotICAgIGF1dG8gaXRlcmF0ZU92
ZXJCdWZmZXJBbmRXcml0ZURhdGEgPSBbJl0oY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50
OF90Kiwgc2l6ZV90KT4mIHdyaXRlRGF0YSkgewotICAgICAgICBmb3IgKGF1dG8gaXQgPSBzY3Jp
cHQuYnVmZmVyKCktPmJlZ2luKCk7IGl0ICE9IHNjcmlwdC5idWZmZXIoKS0+ZW5kKCk7ICsraXQp
Ci0gICAgICAgICAgICB3cml0ZURhdGEoaXQtPnNlZ21lbnQtPmRhdGEoKSwgaXQtPnNlZ21lbnQt
PnNpemUoKSk7CisgICAgYXV0byBpdGVyYXRlT3ZlckJ1ZmZlckFuZFdyaXRlRGF0YSA9IFsmXShj
b25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+JiB3cml0ZURhdGEpIHsK
KyAgICAgICAgZm9yIChhdXRvJiBzZWdtZW50RW50cnkgOiAqc2NyaXB0LmJ1ZmZlcigpKQorICAg
ICAgICAgICAgd3JpdGVEYXRhKHNlZ21lbnRFbnRyeS5zZWdtZW50LT5ieXRlcygpKTsKICAgICB9
OwogCiAgICAgaWYgKCFzaG91bGRVc2VGaWxlTWFwcGluZyhzY3JpcHQuYnVmZmVyKCktPnNpemUo
KSkpIHsKQEAgLTk3LDggKzk3LDggQEAgU2NyaXB0QnVmZmVyIFNXU2NyaXB0U3RvcmFnZTo6c3Rv
cmUoY29ucwogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIlNX
U2NyaXB0U3RvcmFnZTo6c3RvcmU6IEZhaWx1cmUgdG8gc3RvcmUgJXMsIEZpbGVTeXN0ZW06Om9w
ZW5GaWxlKCkgZmFpbGVkIiwgc2NyaXB0UGF0aC51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAg
IHJldHVybiB7IH07CiAgICAgICAgIH0KLSAgICAgICAgaXRlcmF0ZU92ZXJCdWZmZXJBbmRXcml0
ZURhdGEoWyZdKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gICAgICAgICAg
ICBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShoYW5kbGUsIGRhdGEsIHNpemUpOworICAgICAgICBp
dGVyYXRlT3ZlckJ1ZmZlckFuZFdyaXRlRGF0YShbJl0oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRh
dGEpIHsKKyAgICAgICAgICAgIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKGhhbmRsZSwgZGF0YS5k
YXRhKCksIGRhdGEuc2l6ZSgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
KTsKICAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGhhbmRsZSk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSw4MSBAQAorMjAyMS0wNi0xMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBs
ZS5jb20+CisKKyAgICAgICAgQWRvcHQgU3BhbiBpbiBtb3JlIHBsYWNlcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6
Q2FjaGVTdG9yYWdlOjpDYWNoZTo6ZGVjb2RlUmVjb3JkSGVhZGVyKToKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwOgorICAgICAgICAo
V2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6c3RvcmVPcmlnaW4pOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVhZE9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6
OkNhY2hlU3RvcmFnZTo6ZW5jb2RlQ2FjaGVOYW1lcyk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hl
U3RvcmFnZTo6ZGVjb2RlQ2FjaGVzTmFtZXMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZURhdGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6
OkRhdGE6Om1hcFRvRmlsZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
Y29tcHV0ZVNIQTEpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZURhdGEuaDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhOjpEYXRhKToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW06Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YTo6YXBwbHkgY29uc3QpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6OmFkb3B0TWFwKToKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHA6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtDYWNoZTo6RW50cnk6OmVuY29kZUFzU3RvcmFnZVJlY29yZCBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQpOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6aGFzaFN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtDYWNoZTo6S2V5Ojpjb21wdXRlSGFzaCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtDYWNoZTo6S2V5Ojpjb21wdXRlUGFydGl0aW9uSGFzaCBjb25zdCk6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHA6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6ZGVjb2RlUmVjb3JkTWV0YURhdGEpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmVuY29kZVJlY29yZE1ldGFEYXRhKToKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3VicmVzb3VyY2VzRW50cnk6OmVuY29kZUFz
U3RvcmFnZVJlY29yZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3Vi
cmVzb3VyY2VzRW50cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQpOgorICAgICAgICAqIFBsYXRmb3Jt
L0lQQy9Bcmd1bWVudENvZGVyLmg6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29k
ZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxDU3RyaW5nPjo6ZW5jb2RlKToK
KyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxDU3RyaW5nPjo6ZGVjb2RlKToKKyAgICAgICAg
KElQQzo6QXJndW1lbnRDb2RlcjxTdHJpbmc+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpkZWNv
ZGVTdHJpbmdUZXh0KToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxTSEExOjpEaWdlc3Q+
OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFNIQTE6OkRpZ2VzdD46OmRl
Y29kZSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmg6CisgICAgICAg
IChJUEM6OlNpbXBsZUFyZ3VtZW50Q29kZXI6OmVuY29kZSk6CisgICAgICAgIChJUEM6OlNpbXBs
ZUFyZ3VtZW50Q29kZXI6OmRlY29kZSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FycmF5UmVm
ZXJlbmNlLmg6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0RlY29kZXIuY3BwOgorICAgICAgICAo
SVBDOjpEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAqIFBsYXRmb3Jt
L0lQQy9EZWNvZGVyLmg6CisgICAgICAgIChJUEM6OkRlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3Ro
RGF0YSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0VuY29kZXIuY3BwOgorICAgICAgICAoSVBD
OjpFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAqIFBsYXRmb3JtL0lQ
Qy9FbmNvZGVyLmg6CisgICAgICAgICogUGxhdGZvcm0vSVBDL1NoYXJlZEJ1ZmZlckNvcHkuY3Bw
OgorICAgICAgICAoSVBDOjpTaGFyZWRCdWZmZXJDb3B5OjplbmNvZGUgY29uc3QpOgorICAgICAg
ICAqIFBsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uRW5jb2Rlci5oOgorICAgICAgICAqIFNo
YXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoSVBDOjplbmNvZGVTaGFy
ZWRCdWZmZXIpOgorICAgICAgICAoSVBDOjpkZWNvZGVTaGFyZWRCdWZmZXIpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuY3BwOgorICAgICAgICAoQVBJ
OjplbmNvZGVDb250ZW50UnVsZUxpc3RNZXRhRGF0YSk6CisgICAgICAgIChBUEk6OmdldERhdGEp
OgorICAgICAgICAoQVBJOjpkZWNvZGVDb250ZW50UnVsZUxpc3RNZXRhRGF0YSk6CisgICAgICAg
IChBUEk6OndyaXRlRGF0YVRvRmlsZSk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9MZWdhY3lT
ZXNzaW9uU3RhdGVDb2RpbmcuY3BwOgorICAgICAgICAoV2ViS2l0OjpIaXN0b3J5RW50cnlEYXRh
RW5jb2Rlcjo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFF
bmNvZGVyOjplbmNvZGVBcml0aG1ldGljVHlwZSk6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlF
bnRyeURhdGFFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAoV2ViS2l0
OjpIaXN0b3J5RW50cnlEYXRhRGVjb2Rlcjo6b3BlcmF0b3I+Pik6CisgICAgICAgIChXZWJLaXQ6
Okhpc3RvcnlFbnRyeURhdGFEZWNvZGVyOjpkZWNvZGVBcml0aG1ldGljVHlwZSk6CisgICAgICAg
IChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6ZW5jb2RlVHlwZWRBcnJheSk6CisKIDIwMjEtMDYt
MTEgIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgcmV2ZXJ0aW5nIHIyNzg3NTQuCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNw
cAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2NSw3ICs1
NjUsNyBAQCBTdG9yYWdlOjpSZWNvcmQgQ2FjaGU6OmVuY29kZShjb25zdCBSZWNvCiAKICAgICBl
bmNvZGVyLmVuY29kZUNoZWNrc3VtKCk7CiAKLSAgICBEYXRhIGhlYWRlcihlbmNvZGVyLmJ1ZmZl
cigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgRGF0YSBoZWFkZXIoZW5jb2Rlci5idWZm
ZXIoKSk7CiAgICAgRGF0YSBib2R5OwogICAgIFdURjo6c3dpdGNoT24ocmVjb3JkLnJlc3BvbnNl
Qm9keSwgW10oY29uc3QgUmVmPFdlYkNvcmU6OkZvcm1EYXRhPiYgZm9ybURhdGEpIHsKICAgICAg
ICAgLy8gRklYTUU6IFN0b3JlIGZvcm0gZGF0YSBib2R5LgpAQCAtNjMwLDcgKzYzMCw3IEBAIHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkRPTUNhY2hlRW4KIAogc3RkOjpvcHRpb25hbDxD
YWNoZTo6RGVjb2RlZFJlY29yZD4gQ2FjaGU6OmRlY29kZVJlY29yZEhlYWRlcihjb25zdCBTdG9y
YWdlOjpSZWNvcmQmIHN0b3JhZ2UpCiB7Ci0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBk
ZWNvZGVyKHN0b3JhZ2UuaGVhZGVyLmRhdGEoKSwgc3RvcmFnZS5oZWFkZXIuc2l6ZSgpKTsKKyAg
ICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoc3RvcmFnZS5oZWFkZXIpOwogCiAg
ICAgc3RkOjpvcHRpb25hbDxkb3VibGU+IGluc2VydGlvblRpbWU7CiAgICAgZGVjb2RlciA+PiBp
bnNlcnRpb25UaW1lOwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9D
YWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0
b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsMTQgKzEwNSwxNCBA
QCB2b2lkIENhY2hlczo6c3RvcmVPcmlnaW4oQ29tcGxldGlvbkNhbGxiCiAgICAgZW5jb2RlciA8
PCBtX29yaWdpbi5jbGllbnRPcmlnaW4ucHJvdG9jb2w7CiAgICAgZW5jb2RlciA8PCBtX29yaWdp
bi5jbGllbnRPcmlnaW4uaG9zdDsKICAgICBlbmNvZGVyIDw8IG1fb3JpZ2luLmNsaWVudE9yaWdp
bi5wb3J0OwotICAgIG1fZW5naW5lLT53cml0ZUZpbGUoY2FjaGVzT3JpZ2luRmlsZW5hbWUobV9y
b290UGF0aCksIERhdGEgeyBlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSB9
LCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoc3RkOjpvcHRpb25hbDxFcnJvcj4mJiBlcnJvcikg
bXV0YWJsZSB7CisgICAgbV9lbmdpbmUtPndyaXRlRmlsZShjYWNoZXNPcmlnaW5GaWxlbmFtZSht
X3Jvb3RQYXRoKSwgRGF0YSB7IGVuY29kZXIuYnVmZmVyKCkgfSwgW3Byb3RlY3RlZFRoaXMgPSBt
YWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0gKHN0ZDo6b3B0aW9uYWw8RXJyb3I+JiYgZXJyb3IpIG11dGFibGUgewogICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGVycm9yKSk7CiAgICAgfSk7CiB9CiAKIHN0ZDo6b3B0
aW9uYWw8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiBDYWNoZXM6OnJlYWRPcmlnaW4oY29uc3QgRGF0
YSYgZGF0YSkKIHsKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YS5k
YXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29k
ZXIoZGF0YSk7CiAKICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0
YT4gdG9wT3JpZ2luOwogICAgIGRlY29kZXIgPj4gdG9wT3JpZ2luOwpAQCAtNDA0LDEyICs0MDQs
MTIgQEAgc3RhdGljIGlubGluZSBEYXRhIGVuY29kZUNhY2hlTmFtZXMoY29ucwogICAgICAgICBl
bmNvZGVyIDw8IGNhY2hlLnVuaXF1ZU5hbWUoKTsKICAgICB9CiAKLSAgICByZXR1cm4gRGF0YSB7
IGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpIH07CisgICAgcmV0dXJuIERh
dGEgeyBlbmNvZGVyLmJ1ZmZlcigpIH07CiB9CiAKIHN0YXRpYyBpbmxpbmUgRXhwZWN0ZWQ8VmVj
dG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+LCBFcnJvcj4gZGVjb2RlQ2FjaGVzTmFtZXMo
Y29uc3QgRGF0YSYgZGF0YSkKIHsKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29k
ZXIoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNv
ZGVyIGRlY29kZXIoZGF0YSk7CiAgICAgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gY291bnQ7CiAg
ICAgZGVjb2RlciA+PiBjb3VudDsKICAgICBpZiAoIWNvdW50KQpJbmRleDogU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIG5h
bWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogRGF0YSBEYXRhOjptYXBUb0ZpbGUoY29uc3QgU3RyaW5n
JiBwYXRoKSBjb25zdAogewogICAgIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBoYW5k
bGU7Ci0gICAgYXV0byBhcHBseURhdGEgPSBbJl0oY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1
aW50OF90Kiwgc2l6ZV90KT4mIGFwcGxpZXIpIHsgYXBwbHkoYXBwbGllcik7IH07CisgICAgYXV0
byBhcHBseURhdGEgPSBbJl0oY29uc3QgRnVuY3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0
ZT4pPiYgYXBwbGllcikgeyBhcHBseShhcHBsaWVyKTsgfTsKICAgICBhdXRvIG1hcHBlZEZpbGUg
PSBGaWxlU3lzdGVtOjptYXBUb0ZpbGUocGF0aCwgc2l6ZSgpLCBXVEZNb3ZlKGFwcGx5RGF0YSks
ICZoYW5kbGUpOwogICAgIGlmICghbWFwcGVkRmlsZSkKICAgICAgICAgcmV0dXJuIHsgfTsKQEAg
LTg2LDkgKzg2LDkgQEAgRGF0YSBhZG9wdEFuZE1hcEZpbGUoRmlsZVN5c3RlbTo6UGxhdGZvcgog
U0hBMTo6RGlnZXN0IGNvbXB1dGVTSEExKGNvbnN0IERhdGEmIGRhdGEsIGNvbnN0IFNhbHQmIHNh
bHQpCiB7CiAgICAgU0hBMSBzaGExOwotICAgIHNoYTEuYWRkQnl0ZXMoc2FsdC5kYXRhKCksIHNh
bHQuc2l6ZSgpKTsKLSAgICBkYXRhLmFwcGx5KFsmc2hhMV0oY29uc3QgdWludDhfdCogZGF0YSwg
c2l6ZV90IHNpemUpIHsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhkYXRhLCBzaXplKTsKKyAgICBz
aGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7IHNhbHQgfSkpOworICAgIGRhdGEuYXBwbHkoWyZz
aGExXShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkgeworICAgICAgICBzaGExLmFkZEJ5dGVz
KGRhdGEpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9KTsKIApJbmRleDogU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5j
bHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rpb25EaXNwYXRjaGVy
Lmg+CiAjaW5jbHVkZSA8d3RmL1NIQTEuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1
ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCkBAIC01NCw2ICs1NSwxMCBAQCBjbGFzcyBEYXRhIHsKIHB1YmxpYzoKICAgICBE
YXRhKCkgeyB9CiAgICAgRGF0YShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKKyAgICBEYXRhKFNw
YW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhKQorICAgICAgICA6IERhdGEocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4oZGF0YS5kYXRhKCkpLCBkYXRhLnNpemUoKSkKKyAgICB7CisgICAg
fQogCiAgICAgfkRhdGEoKSB7IH0KIApAQCAtNzksNyArODQsNyBAQCBwdWJsaWM6CiAKICAgICBE
YXRhIHN1YnJhbmdlKHNpemVfdCBvZmZzZXQsIHNpemVfdCkgY29uc3Q7CiAKLSAgICBib29sIGFw
cGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2wgKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYpIGNvbnN0
OworICAgIGJvb2wgYXBwbHkoY29uc3QgRnVuY3Rpb248Ym9vbCAoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+KT4mKSBjb25zdDsKIAogICAgIERhdGEgbWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkg
Y29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlRGF0YUNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1tCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2Nv
YS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjksMTIgKzY5LDEyIEBAIGJvb2wgRGF0YTo6aXNOdWxs
KCkgY29uc3QKICAgICByZXR1cm4gIW1fZGlzcGF0Y2hEYXRhOwogfQogCi1ib29sIERhdGE6OmFw
cGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2wgKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYgYXBwbGll
cikgY29uc3QKK2Jvb2wgRGF0YTo6YXBwbHkoY29uc3QgRnVuY3Rpb248Ym9vbCAoU3Bhbjxjb25z
dCBzdGQ6OmJ5dGU+KT4mIGFwcGxpZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3NpemUpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gZGlzcGF0Y2hfZGF0YV9hcHBseShtX2Rpc3Bh
dGNoRGF0YS5nZXQoKSwgWyZhcHBsaWVyXShkaXNwYXRjaF9kYXRhX3QsIHNpemVfdCwgY29uc3Qg
dm9pZCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgcmV0dXJuIGFwcGxpZXIoc3RhdGlj
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBzaXplKTsKKyAgICAgICAgcmV0dXJuIGFwcGxp
ZXIoU3BhbiB7IHN0YXRpY19jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGRhdGEpLCBzaXplIH0pOwog
ICAgIH0pOwogfQogCkBAIC05NCwxNCArOTQsMTEgQEAgRGF0YSBjb25jYXRlbmF0ZShjb25zdCBE
YXRhJiBhLCBjb25zdCBEYQogCiBEYXRhIERhdGE6OmFkb3B0TWFwKEZpbGVTeXN0ZW06Ok1hcHBl
ZEZpbGVEYXRhJiYgbWFwcGVkRmlsZSwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZk
KQogewotICAgIHNpemVfdCBzaXplID0gbWFwcGVkRmlsZS5zaXplKCk7Ci0gICAgdm9pZCogbWFw
ID0gbWFwcGVkRmlsZS5sZWFrSGFuZGxlKCk7Ci0gICAgQVNTRVJUKG1hcCk7Ci0gICAgQVNTRVJU
KG1hcCAhPSBNQVBfRkFJTEVEKTsKKyAgICBhdXRvIG1hcCA9IG1hcHBlZEZpbGUubGVha0hhbmRs
ZSgpOworICAgIEFTU0VSVChtYXAuZGF0YSgpKTsKKyAgICBBU1NFUlQobWFwLmRhdGEoKSAhPSBN
QVBfRkFJTEVEKTsKICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmQpOwotICAgIGF1dG8gYm9k
eU1hcCA9IGFkb3B0T1NPYmplY3QoZGlzcGF0Y2hfZGF0YV9jcmVhdGUobWFwLCBzaXplLCBkaXNw
YXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDAp
LCBbbWFwLCBzaXplXSB7Ci0gICAgICAgIG11bm1hcChtYXAsIHNpemUpOwotICAgIH0pKTsKKyAg
ICBhdXRvIGJvZHlNYXAgPSBhZG9wdE9TT2JqZWN0KGRpc3BhdGNoX2RhdGFfY3JlYXRlKG1hcC5k
YXRhKCksIG1hcC5zaXplKCksIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVF
VUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIERJU1BBVENIX0RBVEFfREVTVFJVQ1RPUl9NVU5NQVAp
KTsKICAgICByZXR1cm4geyBXVEZNb3ZlKGJvZHlNYXApLCBEYXRhOjpCYWNraW5nOjpNYXAgfTsK
IH0KIApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05OSwxMCArOTksMTAgQEAgU3RvcmFnZTo6UmVjb3JkIEVudHJ5OjplbmNvZGVB
c1N0b3JhZ2VSZQogICAgIAogICAgIGVuY29kZXIuZW5jb2RlQ2hlY2tzdW0oKTsKIAotICAgIERh
dGEgaGVhZGVyKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICBE
YXRhIGhlYWRlciB7IGVuY29kZXIuYnVmZmVyKCkgfTsKICAgICBEYXRhIGJvZHk7CiAgICAgaWYg
KG1fYnVmZmVyKQotICAgICAgICBib2R5ID0geyBtX2J1ZmZlci0+ZGF0YSgpLCBtX2J1ZmZlci0+
c2l6ZSgpIH07CisgICAgICAgIGJvZHkgPSB7IG1fYnVmZmVyLT5ieXRlcygpIH07CiAKICAgICBy
ZXR1cm4geyBtX2tleSwgbV90aW1lU3RhbXAsIGhlYWRlciwgYm9keSwgeyB9IH07CiB9CkBAIC0x
MTEsNyArMTExLDcgQEAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBFbnRyeTo6ZGVjb2RlU3Rvcgog
ewogICAgIGF1dG8gZW50cnkgPSBtYWtlVW5pcXVlPEVudHJ5PihzdG9yYWdlRW50cnkpOwogCi0g
ICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKHN0b3JhZ2VFbnRyeS5oZWFkZXIu
ZGF0YSgpLCBzdG9yYWdlRW50cnkuaGVhZGVyLnNpemUoKSk7CisgICAgV1RGOjpQZXJzaXN0ZW5j
ZTo6RGVjb2RlciBkZWNvZGVyIHsgc3RvcmFnZUVudHJ5LmhlYWRlciB9OwogICAgIFdlYkNvcmU6
OlJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CiAgICAgaWYgKCFXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlOjpkZWNvZGUoZGVjb2RlciwgcmVzcG9uc2UpKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
S2V5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZUtleS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODgsMTMgKzg4LDEzIEBAIHN0YXRpYyB2b2lkIGhhc2hTdHJpbmcoU0hBMSYgc2hhMSwgY29u
c3QKIAogICAgIGlmIChzdHJpbmcuaXM4Qml0KCkgJiYgc3RyaW5nLmlzQWxsQVNDSUkoKSkgewog
ICAgICAgICBjb25zdCB1aW50OF90IG51bGxCeXRlID0gMDsKLSAgICAgICAgc2hhMS5hZGRCeXRl
cyhzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpKTsKLSAgICAgICAgc2hhMS5h
ZGRCeXRlcygmbnVsbEJ5dGUsIDEpOworICAgICAgICBzaGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3Bh
biB7IHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkgfSkpOworICAgICAgICBz
aGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7ICZudWxsQnl0ZSwgMSB9KSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgYXV0byBjU3RyaW5nID0gc3RyaW5nLnV0ZjgoKTsKICAgICAvLyBJ
bmNsdWRlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4KLSAgICBzaGExLmFkZEJ5dGVzKGNTdHJpbmcu
ZGF0YUFzVUludDhQdHIoKSwgY1N0cmluZy5sZW5ndGgoKSArIDEpOworICAgIHNoYTEuYWRkQnl0
ZXMoYXNCeXRlcyhTcGFuIHsgY1N0cmluZy5kYXRhQXNVSW50OFB0cigpLCBjU3RyaW5nLmxlbmd0
aCgpICsgMSB9KSk7CiB9CiAKIEtleTo6SGFzaFR5cGUgS2V5Ojpjb21wdXRlSGFzaChjb25zdCBT
YWx0JiBzYWx0KSBjb25zdApAQCAtMTAyLDcgKzEwMiw3IEBAIEtleTo6SGFzaFR5cGUgS2V5Ojpj
b21wdXRlSGFzaChjb25zdCBTYWwKICAgICAvLyBXZSBkb24ndCByZWFsbHkgbmVlZCBhIGNyeXB0
b2dyYXBoaWMgaGFzaC4gVGhlIGtleSBpcyBhbHdheXMgdmVyaWZpZWQgYWdhaW5zdCB0aGUgZW50
cnkgaGVhZGVyLgogICAgIC8vIFNIQTEganVzdCBoYXBwZW5zIHRvIGJlIHN1aXRhYmx5IHNpemVk
LCBmYXN0IGFuZCBhdmFpbGFibGUuCiAgICAgU0hBMSBzaGExOwotICAgIHNoYTEuYWRkQnl0ZXMo
c2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKTsKKyAgICBzaGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3Bh
biB7IHNhbHQgfSkpOwogCiAgICAgaGFzaFN0cmluZyhzaGExLCBtX3BhcnRpdGlvbik7CiAgICAg
aGFzaFN0cmluZyhzaGExLCBtX3R5cGUpOwpAQCAtMTE3LDcgKzExNyw3IEBAIEtleTo6SGFzaFR5
cGUgS2V5Ojpjb21wdXRlSGFzaChjb25zdCBTYWwKIEtleTo6SGFzaFR5cGUgS2V5Ojpjb21wdXRl
UGFydGl0aW9uSGFzaChjb25zdCBTYWx0JiBzYWx0KSBjb25zdAogewogICAgIFNIQTEgc2hhMTsK
LSAgICBzaGExLmFkZEJ5dGVzKHNhbHQuZGF0YSgpLCBzYWx0LnNpemUoKSk7CisgICAgc2hhMS5h
ZGRCeXRlcyhhc0J5dGVzKFNwYW4geyBzYWx0IH0pKTsKIAogICAgIGhhc2hTdHJpbmcoc2hhMSwg
bV9wYXJ0aXRpb24pOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3Rv
cmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1NCw4ICs0NTQsOCBAQCBzdHJ1Y3QgUmVjb3Jk
TWV0YURhdGEgewogc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZVJlY29yZE1l
dGFEYXRhKFJlY29yZE1ldGFEYXRhJiBtZXRhRGF0YSwgY29uc3QgRGF0YSYgZmlsZURhdGEpCiB7
CiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgZmlsZURhdGEuYXBwbHkoWyZtZXRhRGF0
YSwgJnN1Y2Nlc3NdKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gICAgICAg
IFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihkYXRhLCBzaXplKTsKKyAgICBmaWxl
RGF0YS5hcHBseShbJm1ldGFEYXRhLCAmc3VjY2Vzc10oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRh
dGEpIHsKKyAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEpOwog
ICAgICAgICAKICAgICAgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gY2FjaGVTdG9yYWdlVmVy
c2lvbjsKICAgICAgICAgZGVjb2RlciA+PiBjYWNoZVN0b3JhZ2VWZXJzaW9uOwpAQCAtNTg2LDcg
KzU4Niw3IEBAIHN0YXRpYyBEYXRhIGVuY29kZVJlY29yZE1ldGFEYXRhKGNvbnN0IFIKIAogICAg
IGVuY29kZXIuZW5jb2RlQ2hlY2tzdW0oKTsKIAotICAgIHJldHVybiBEYXRhKGVuY29kZXIuYnVm
ZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICByZXR1cm4geyBlbmNvZGVyLmJ1ZmZl
cigpIH07CiB9CiAKIHN0ZDo6b3B0aW9uYWw8QmxvYlN0b3JhZ2U6OkJsb2I+IFN0b3JhZ2U6OnN0
b3JlQm9keUFzQmxvYihXcml0ZU9wZXJhdGlvbiYgd3JpdGVPcGVyYXRpb24pCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0Vu
dHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJj
ZXNFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMywxNCArMTIzLDE0IEBAIFN0b3JhZ2U6
OlJlY29yZCBTdWJyZXNvdXJjZXNFbnRyeTo6ZW5jb2QKIAogICAgIGVuY29kZXIuZW5jb2RlQ2hl
Y2tzdW0oKTsKIAotICAgIHJldHVybiB7IG1fa2V5LCBtX3RpbWVTdGFtcCwgeyBlbmNvZGVyLmJ1
ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSB9LCB7IH0sIHsgfX07CisgICAgcmV0dXJuIHsg
bV9rZXksIG1fdGltZVN0YW1wLCB7IGVuY29kZXIuYnVmZmVyKCkgfSwgeyB9LCB7IH19OwogfQog
CiBzdGQ6OnVuaXF1ZV9wdHI8U3VicmVzb3VyY2VzRW50cnk+IFN1YnJlc291cmNlc0VudHJ5Ojpk
ZWNvZGVTdG9yYWdlUmVjb3JkKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYgc3RvcmFnZUVudHJ5KQog
ewogICAgIGF1dG8gZW50cnkgPSBtYWtlVW5pcXVlPFN1YnJlc291cmNlc0VudHJ5PihzdG9yYWdl
RW50cnkpOwogCi0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKHN0b3JhZ2VF
bnRyeS5oZWFkZXIuZGF0YSgpLCBzdG9yYWdlRW50cnkuaGVhZGVyLnNpemUoKSk7CisgICAgV1RG
OjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyIHsgc3RvcmFnZUVudHJ5LmhlYWRlciB9Owog
ICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFN1YnJlc291cmNlSW5mbz4+IHN1YnJlc291cmNlczsK
ICAgICBkZWNvZGVyID4+IHN1YnJlc291cmNlczsKICAgICBpZiAoIXN1YnJlc291cmNlcykKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVyLmgJKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNzksMTMgKzc5LDEzIEBAIHN0cnVjdCBBcmd1bWVudENvZGVyPFQs
IHR5cGVuYW1lIHN0ZDo6ZW4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgogICAgIHN0
YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBUIHZhbHVlKQogICAgIHsKLSAgICAg
ICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50OF90Kj4oJnZhbHVlKSwgc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKKyAgICAgICAgZW5jb2Rl
ci5lbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZ2YWx1ZSwgMSB9LCBhbGlnbm9mKFQpKTsK
ICAgICB9CiAKICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxUPiBkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKICAgICB7CiAgICAgICAgIFQgcmVzdWx0OwotICAgICAgICBpZiAoZGVjb2Rlci5kZWNv
ZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnJlc3VsdCksIHNp
emVvZihUKSwgYWxpZ25vZihUKSkpCisgICAgICAgIGlmIChkZWNvZGVyLmRlY29kZUZpeGVkTGVu
Z3RoRGF0YShTcGFuIHsgJnJlc3VsdCwgMSB9KSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQpJbmRleDogU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmNwcAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxDU3RyaW5nPjo6ZW5j
b2RlKEVuY28KIAogICAgIHVpbnQzMl90IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKICAgICBl
bmNvZGVyIDw8IGxlbmd0aDsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShzdHJp
bmcuZGF0YUFzVUludDhQdHIoKSwgbGVuZ3RoLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVk
TGVuZ3RoRGF0YShzdHJpbmcuYnl0ZXMoKSwgMSk7CiB9CiAKIFdBUk5fVU5VU0VEX1JFVFVSTiBi
b29sIEFyZ3VtZW50Q29kZXI8Q1N0cmluZz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBDU3Ry
aW5nJiByZXN1bHQpCkBAIC0xMDMsNyArMTAzLDcgQEAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wg
QXJndW1lbnRDb2RlcjxDUwogCiAgICAgY2hhciogYnVmZmVyOwogICAgIENTdHJpbmcgc3RyaW5n
ID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFk
ZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihi
dWZmZXIpLCBsZW5ndGgsIDEpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERh
dGEoU3BhbiB7IGJ1ZmZlciwgbGVuZ3RoIH0sIDEpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICByZXN1bHQgPSBzdHJpbmc7CkBAIC0xMjUsOSArMTI1LDkgQEAgdm9pZCBBcmd1bWVudENv
ZGVyPFN0cmluZz46OmVuY29kZShFbmNvZAogICAgIGVuY29kZXIgPDwgbGVuZ3RoIDw8IGlzOEJp
dDsKIAogICAgIGlmIChpczhCaXQpCi0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBsZW5ndGggKiBzaXplb2YoTENoYXIpLCBhbGlnbm9m
KExDaGFyKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBz
dHJpbmcuY2hhcmFjdGVyczgoKSwgbGVuZ3RoIH0sIGFsaWdub2YoTENoYXIpKTsKICAgICBlbHNl
Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDhfdCo+KHN0cmluZy5jaGFyYWN0ZXJzMTYoKSksIGxlbmd0aCAqIHNpemVvZihV
Q2hhciksIGFsaWdub2YoVUNoYXIpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEoU3BhbiB7IHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoIH0sIGFsaWdub2YoVUNo
YXIpKTsKIH0KIHRlbXBsYXRlCiB2b2lkIEFyZ3VtZW50Q29kZXI8U3RyaW5nPjo6ZW5jb2RlPEVu
Y29kZXI+KEVuY29kZXImLCBjb25zdCBTdHJpbmcmKTsKQEAgLTE0Myw3ICsxNDMsNyBAQCBzdGF0
aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBkZWNvCiAgICAgCiAgICAgQ2hhcmFjdGVy
VHlwZSogYnVmZmVyOwogICAgIFN0cmluZyBzdHJpbmcgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlh
bGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0
aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9m
KENoYXJhY3RlclR5cGUpLCBhbGlnbm9mKENoYXJhY3RlclR5cGUpKSkKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBidWZmZXIsIGxlbmd0aCB9KSkKICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAKICAgICByZXR1cm4gc3RyaW5nOwpAQCAtMTgx
LDEyICsxODEsMTIgQEAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgQXJndW1lbnRDb2RlcjxTdAog
CiB2b2lkIEFyZ3VtZW50Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQogewotICAgIGVuY29kZXIuZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpLCAxKTsKKyAgICBlbmNv
ZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgZGlnZXN0IH0sIDEpOwogfQogCiBXQVJO
X1VOVVNFRF9SRVRVUk4gYm9vbCBBcmd1bWVudENvZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyLCBTSEExOjpEaWdlc3QmIGRpZ2VzdCkKIHsKLSAgICByZXR1cm4gZGVj
b2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0LmRhdGEoKSwgc2l6ZW9mKGRpZ2VzdCks
IDEpOworICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgZGln
ZXN0IH0sIDEpOwogfQogCiAjaWYgSEFWRShBVURJVF9UT0tFTikKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaAkod29ya2luZyBjb3B5
KQpAQCAtNDUsMTIgKzQ1LDEyIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBTaW1wbGVB
cmd1bWUKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgogICAgIHN0YXRpYyB2b2lkIGVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBUJiB0KQogICAgIHsKLSAgICAgICAgZW5jb2Rl
ci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4o
JnQpLCBzaXplb2YoVCksIGFsaWdub2YoVCkpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVk
TGVuZ3RoRGF0YShTcGFuIHsgJnQsIDEgfSk7CiAgICAgfQogCiAgICAgc3RhdGljIFdBUk5fVU5V
U0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBUJiB0KQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDhfdCo+KCZ0KSwgc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKKyAgICAgICAgcmV0dXJu
IGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmdCwgMSB9KTsKICAgICB9CiB9
OwogCkBAIC02MSwxMyArNjEsMTQgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IEV4dGVu
dD4gc3RydQogICAgIHsKICAgICAgICAgaWYgKCFFeHRlbnQpCiAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDhfdCo+KGFycmF5UmVmZXJlbmNlLmRhdGEoKSksIGFycmF5UmVmZXJlbmNlLnNp
emUoKSAqIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKFNwYW4geyBhcnJheVJlZmVyZW5jZS5kYXRhKCksIGFycmF5UmVmZXJlbmNl
LnNpemUoKSB9KTsKICAgICB9CiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8QXJyYXlSZWZlcmVu
Y2VUeXBlPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7CiAgICAgICAgIGlmICghRXh0
ZW50KQogICAgICAgICAgICAgcmV0dXJuIEFycmF5UmVmZXJlbmNlVHlwZSgpOwotICAgICAgICBj
b25zdCB1aW50OF90KiBkYXRhID0gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aFJlZmVyZW5jZShF
eHRlbnQgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpOworCisgICAgICAgIGNvbnN0IGF1dG8qIGRh
dGEgPSBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoUmVmZXJlbmNlKEV4dGVudCAqIHNpemVvZihU
KSwgYWxpZ25vZihUKSk7CiAgICAgICAgIGlmICghZGF0YSkKICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CiAgICAgICAgIHJldHVybiBBcnJheVJlZmVyZW5jZVR5cGUocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBUKj4oZGF0YSksIEV4dGVudCk7CkBAIC04Miw3ICs4Myw3IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBBcmd1bWVudENvZGUKICAgICAgICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDx1aW50NjRfdD4oYXJyYXlSZWZlcmVuY2Uuc2l6ZSgpKTsKICAgICAgICAgaWYg
KCFhcnJheVJlZmVyZW5jZS5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGVu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGFycmF5UmVmZXJlbmNlLmRhdGEoKSksIGFycmF5UmVmZXJlbmNlLnNpemUoKSAqIHNpemVv
ZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KFNwYW4geyBhcnJheVJlZmVyZW5jZS5kYXRhKCksIGFycmF5UmVmZXJlbmNlLnNpemUoKSB9KTsK
ICAgICB9CiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8QXJyYXlSZWZlcmVuY2VUeXBlPiBkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7CkBAIC05Niw3ICs5Nyw3IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBBcmd1bWVudENvZGUKICAgICAgICAgaWYgKFVOTElLRUxZKGRhdGFT
aXplLmhhc092ZXJmbG93ZWQoKSkpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owog
Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEgPSBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3Ro
UmVmZXJlbmNlKGRhdGFTaXplLCBhbGlnbm9mKFQpKTsKKyAgICAgICAgY29uc3QgYXV0byogZGF0
YSA9IGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhSZWZlcmVuY2UoZGF0YVNpemUsIGFsaWdub2Yo
VCkpOwogICAgICAgICBpZiAoIWRhdGEpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwogICAgICAgICByZXR1cm4gQXJyYXlSZWZlcmVuY2VUeXBlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgVCo+KGRhdGEpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KHNpemUpKTsKQEAgLTQyMyw3ICs0MjQs
NyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpCiAgICAgc3RhdGlj
IHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mIHZlY3RvcikKICAgICB7CiAgICAg
ICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZlY3Rvci5zaXplKCkpOwotICAg
ICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPih2ZWN0b3IuZGF0YSgpKSwgdmVjdG9yLnNpemUoKSAqIHNpemVvZihUKSwgYWxp
Z25vZihUKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGFzQnl0ZXMo
U3BhbiB7IHZlY3RvciB9KSwgYWxpZ25vZihUKSk7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBX
QVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiYgdmVjdG9yKQpA
QCAtNDQ2LDcgKzQ0Nyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2kKICAgICAgICAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1p
bkNhcGFjaXR5PiB0ZW1wOwogICAgICAgICB0ZW1wLmdyb3coc2l6ZSk7CiAKLSAgICAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3Qq
Pih0ZW1wLmRhdGEoKSksIHNpemUgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpKQorICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyB0ZW1wIH0pKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHZlY3Rvci5zd2FwKHRlbXApOwpAQCAtNDcz
LDcgKzQ3NCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAg
ICAgICAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFj
aXR5PiB2ZWN0b3I7CiAgICAgICAgIHZlY3Rvci5ncm93KHNpemUpOwogCi0gICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4o
dmVjdG9yLmRhdGEoKSksIHNpemUgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpKQorICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyB2ZWN0b3IgfSkpCiAgICAg
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgICAgIHJldHVybiB2ZWN0b3I7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9BcnJheVJlZmVyZW5jZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FycmF5UmVmZXJlbmNlLmgJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FycmF5UmVmZXJlbmNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDggQEAKIAogbmFtZXNwYWNlIElQQyB7CiAK
Ky8vIEZJWE1FOiBSZXBsYWNlIHdpdGggPHd0Zi9TcGFuLmg+CisKIGlubGluZSBjb25zdGV4cHIg
c2l6ZV90IGFycmF5UmVmZXJlbmNlRHluYW1pY0V4dGVudCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8
c2l6ZV90Pjo6bWF4KCk7CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgRXh0ZW50ID0g
YXJyYXlSZWZlcmVuY2VEeW5hbWljRXh0ZW50PgpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9J
UEMvRGVjb2Rlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vSVBDL0RlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsMTMgKzIwNiwxMyBAQCBi
b29sIERlY29kZXI6OmJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhCiAgICAgcmV0dXJuIGFsaWdu
ZWRCdWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKHJvdW5kVXBUb0FsaWdubWVudChtX2J1ZmZl
clBvcywgYWxpZ25tZW50KSwgbV9idWZmZXIsIG1fYnVmZmVyRW5kLCBzaXplKTsKIH0KIAotYm9v
bCBEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCogZGF0YSwgc2l6ZV90IHNp
emUsIHNpemVfdCBhbGlnbm1lbnQpCitib29sIERlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0
YShTcGFuPHN0ZDo6Ynl0ZT4gZGF0YSwgc2l6ZV90IGFsaWdubWVudCkKIHsKLSAgICBpZiAoIWFs
aWduQnVmZmVyUG9zaXRpb24oYWxpZ25tZW50LCBzaXplKSkKKyAgICBpZiAoIWFsaWduQnVmZmVy
UG9zaXRpb24oYWxpZ25tZW50LCBkYXRhLnNpemUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIG1lbWNweShkYXRhLCBtX2J1ZmZlclBvcywgc2l6ZSk7Ci0gICAgbV9idWZmZXJQb3Mg
Kz0gc2l6ZTsKKyAgICBtZW1jcHkoZGF0YS5kYXRhKCksIG1fYnVmZmVyUG9zLCBkYXRhLnNpemUo
KSk7CisgICAgbV9idWZmZXJQb3MgKz0gZGF0YS5zaXplKCk7CiAKICAgICByZXR1cm4gdHJ1ZTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNzksNyArNzksMTMgQEAgcHVibGljOgogICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBib29s
IGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlclBvcyAhPSBudWxscHRyOyB9CiAgICAg
dm9pZCBtYXJrSW52YWxpZCgpIHsgbV9idWZmZXJQb3MgPSBudWxscHRyOyB9CiAKLSAgICBXQVJO
X1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCogZGF0YSwg
c2l6ZV90LCBzaXplX3QgYWxpZ25tZW50KTsKKyAgICBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBk
ZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbjxzdGQ6OmJ5dGU+LCBzaXplX3QgYWxpZ25tZW50KTsK
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBOPgorICAgIFdBUk5fVU5VU0VEX1JF
VFVSTiBib29sIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPFQsIE4+IGRhdGEsIHNpemVfdCBh
bGlnbm1lbnQgPSBhbGlnbm9mKFQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUZpeGVk
TGVuZ3RoRGF0YShhc1dyaXRhYmxlQnl0ZXMoZGF0YSksIGFsaWdubWVudCk7CisgICAgfQogCiAg
ICAgLy8gVGhlIGRhdGEgaW4gdGhlIHJldHVybmVkIHBvaW50ZXIgaGVyZSB3aWxsIG9ubHkgYmUg
dmFsaWQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgRGVjb2RlciBvYmplY3QuCiAgICAgLy8gUmV0
dXJucyBudWxscHRyIG9uIGZhaWx1cmUuCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQ
Qy9FbmNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9F
bmNvZGVyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9J
UEMvRW5jb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiwxMiArMjAyLDEyIEBAIHVpbnQ4
X3QqIEVuY29kZXI6Omdyb3coc2l6ZV90IGFsaWdubWVudCwKICAgICByZXR1cm4gbV9idWZmZXIg
KyBhbGlnbmVkU2l6ZTsKIH0KIAotdm9pZCBFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEo
Y29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQpCit2b2lk
IEVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0
YSwgc2l6ZV90IGFsaWdubWVudCkKIHsKLSAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4oZGF0YSkgJSBhbGlnbm1lbnQpKTsKKyAgICBBU1NFUlQoIShyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4oZGF0YS5kYXRhKCkpICUgYWxpZ25tZW50KSk7CiAKLSAgICB1aW50OF90
KiBidWZmZXIgPSBncm93KGFsaWdubWVudCwgc2l6ZSk7Ci0gICAgbWVtY3B5KGJ1ZmZlciwgZGF0
YSwgc2l6ZSk7CisgICAgYXV0byogYnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQsIGRhdGEuc2l6ZSgp
KTsKKyAgICBtZW1jcHkoYnVmZmVyLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwogfQogCiB2
b2lkIEVuY29kZXI6OmFkZEF0dGFjaG1lbnQoQXR0YWNobWVudCYmIGF0dGFjaG1lbnQpCkluZGV4
OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBT
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDYgKzMxLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorI2luY2x1ZGUgPHd0
Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSVBDIHsKQEAg
LTYwLDcgKzYxLDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgd3JhcEZvclRlc3RpbmcoVW5pcXVl
UmVmPEVuY29kZXI+JiYpOwogCi0gICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3Qg
dWludDhfdCogZGF0YSwgc2l6ZV90LCBzaXplX3QgYWxpZ25tZW50KTsKKyAgICB2b2lkIGVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSwgc2l6ZV90IGFsaWdu
bWVudCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgTj4KKyAgICB2b2lkIGVu
Y29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPFQsIE4+IGRhdGEsIHNpemVfdCBhbGlnbm1lbnQgPSBh
bGlnbm9mKFQpKQorICAgIHsKKyAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGFzQnl0ZXMo
ZGF0YSksIGFsaWdubWVudCk7CisgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAg
ICBFbmNvZGVyJiBvcGVyYXRvcjw8KFQmJiB0KQpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvU2hhcmVkQnVmZmVyQ29weS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9JUEMvU2hhcmVkQnVmZmVyQ29weS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1NoYXJlZEJ1ZmZlckNvcHkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw3ICs0Myw3IEBAIHZvaWQgU2hhcmVkQnVmZmVyQ29weTo6ZW5jb2RlKEVuY29k
ZXImIGUKICAgICBpZiAoIWJ1ZmZlclNpemUpCiAgICAgICAgIHJldHVybjsKICAgICBmb3IgKGF1
dG8mIHNlZ21lbnQgOiAqbV9idWZmZXIpCi0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKHNlZ21lbnQuc2VnbWVudC0+ZGF0YSgpLCBzZWdtZW50LnNlZ21lbnQtPnNpemUoKSwg
MSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHNlZ21lbnQuc2VnbWVu
dC0+Ynl0ZXMoKSwgMSk7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8U2hhcmVkQnVmZmVyQ29weT4gU2hh
cmVkQnVmZmVyQ29weTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uRW5jb2Rlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25FbmNvZGVyLmgJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5l
Y3Rpb25FbmNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1
ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiTWVzc2FnZU5hbWVzLmgiCisjaW5jbHVk
ZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFj
ZSBJUEMgewpAQCAtNTMsMjEgKzU0LDI3IEBAIHB1YmxpYzoKIAogICAgIH5TdHJlYW1Db25uZWN0
aW9uRW5jb2RlcigpID0gZGVmYXVsdDsKIAotICAgIGJvb2wgZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50KQorICAg
IGJvb2wgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhLCBz
aXplX3QgYWxpZ25tZW50KQogICAgIHsKICAgICAgICAgc2l6ZV90IGJ1ZmZlclBvaW50ZXIgPSBz
dGF0aWNfY2FzdDxzaXplX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fYnVmZmVyICsg
bV9lbmNvZGVkU2l6ZSkpOwogICAgICAgICBzaXplX3QgbmV3QnVmZmVyUG9pbnRlciA9IHJvdW5k
VXBUb011bHRpcGxlT2YoYWxpZ25tZW50LCBidWZmZXJQb2ludGVyKTsKICAgICAgICAgaWYgKG5l
d0J1ZmZlclBvaW50ZXIgPCBidWZmZXJQb2ludGVyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBpbnRwdHJfdCBhbGlnbmVkU2l6ZSA9IG1fZW5jb2RlZFNpemUgKyAobmV3QnVm
ZmVyUG9pbnRlciAtIGJ1ZmZlclBvaW50ZXIpOwotICAgICAgICBpZiAoIXJlc2VydmUoYWxpZ25l
ZFNpemUsIHNpemUpKQorICAgICAgICBpZiAoIXJlc2VydmUoYWxpZ25lZFNpemUsIGRhdGEuc2l6
ZSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdWludDhfdCogYnVmZmVy
ID0gbV9idWZmZXIgKyBhbGlnbmVkU2l6ZTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwg
c2l6ZSk7Ci0gICAgICAgIG1fZW5jb2RlZFNpemUgPSBhbGlnbmVkU2l6ZSArIHNpemU7CisgICAg
ICAgIGF1dG8qIGJ1ZmZlciA9IG1fYnVmZmVyICsgYWxpZ25lZFNpemU7CisgICAgICAgIG1lbWNw
eShidWZmZXIsIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgICAgIG1fZW5jb2RlZFNp
emUgPSBhbGlnbmVkU2l6ZSArIGRhdGEuc2l6ZSgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgTj4KKyAgICB2b2lkIGVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShTcGFuPFQsIE4+IGRhdGEsIHNpemVfdCBhbGlnbm1lbnQgPSBhbGln
bm9mKFQpKQorICAgIHsKKyAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGFzQnl0ZXMoZGF0
YSksIGFsaWdubWVudCk7CisgICAgfQorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBT
dHJlYW1Db25uZWN0aW9uRW5jb2RlciYgb3BlcmF0b3I8PChUJiYgdCkKICAgICB7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVy
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw3ICsxNDQsNyBAQCBzdGF0aWMgdm9pZCBlbmNv
ZGVTaGFyZWRCdWZmZXIoRW5jb2RlciYgCiAgICAgLy8gb3ZlciB0aGUgSVBDLiBDb25uZWN0aW9u
VW5peC5jcHAgYWxyZWFkeSB1c2VzIHNoYXJlZCBtZW1vcnkgdG8gc2VuZCBhbnkgSVBDIG1lc3Nh
Z2UgdGhhdCBpcwogICAgIC8vIHRvbyBsYXJnZS4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDg1NzEuCiAgICAgZm9yIChjb25zdCBhdXRvJiBlbGVtZW50IDog
KmJ1ZmZlcikKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoZWxlbWVudC5z
ZWdtZW50LT5kYXRhKCksIGVsZW1lbnQuc2VnbWVudC0+c2l6ZSgpLCAxKTsKKyAgICAgICAgZW5j
b2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoZWxlbWVudC5zZWdtZW50LT5ieXRlcygpLCAxKTsK
ICNlbHNlCiAgICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOwogICAgIGF1dG8gc2hhcmVk
TWVtb3J5QnVmZmVyID0gU2hhcmVkTWVtb3J5Ojpjb3B5QnVmZmVyKCpidWZmZXIpOwpAQCAtMTgw
LDcgKzE4MCw3IEBAIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVTaGEKIAog
ICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAgIGRhdGEuZ3JvdyhidWZmZXJTaXplKTsKLSAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGRhdGEuZGF0YSgpLCBkYXRhLnNp
emUoKSwgMSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsg
ZGF0YSB9LCAxKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYnVmZmVyID0gU2hhcmVk
QnVmZmVyOjpjcmVhdGUoV1RGTW92ZShkYXRhKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJl
ZC93aW4vV2ViQ29yZUFyZ3VtZW50Q29kZXJzV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1NoYXJlZC93aW4vV2ViQ29yZUFyZ3VtZW50Q29kZXJzV2luLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvd2luL1dlYkNvcmVBcmd1bWVudENvZGVy
c1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDEyICs1MSwxMiBAQCBzdGQ6Om9wdGlvbmFs
PEZvbnRBdHRyaWJ1dGVzPiBBcmd1bWVudENvCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENv
ZGVyPExPR0ZPTlQ+IHsKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgTE9HRk9OVCYgbG9nRm9udCkKICAgICB7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZsb2dGb250KSwg
c2l6ZW9mIGxvZ0ZvbnQsIDEpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0
YShTcGFuIHsgJmxvZ0ZvbnQsIDEgfSwgMSk7CiAgICAgfQogICAgIHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPExPR0ZPTlQ+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKICAgICAgICAgTE9H
Rk9OVCBsb2dGb250OwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZsb2dGb250KSwgc2l6ZW9mKGxvZ0ZvbnQpLCAx
KSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJmxv
Z0ZvbnQsIDEgfSwgMSkpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAg
ICByZXR1cm4gbG9nRm9udDsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAJKHJldmlzaW9uIDI3
ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RT
dG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSwxOCArMTMxLDIwIEBAIHN0YXRpYyBXZWJL
aXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YSBlbmNvZGUKICAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmNv
bmRpdGlvbmVkRmlsdGVyc0J5dGVjb2RlU2l6ZTsKICAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmNv
bmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbjsKIAotICAgIEFTU0VSVChlbmNvZGVyLmJ1ZmZlclNp
emUoKSA9PSBDb250ZW50UnVsZUxpc3RGaWxlSGVhZGVyU2l6ZSk7Ci0gICAgcmV0dXJuIFdlYktp
dDo6TmV0d29ya0NhY2hlOjpEYXRhKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6
ZSgpKTsKKyAgICBBU1NFUlQoZW5jb2Rlci5idWZmZXIoKS5zaXplKCkgPT0gQ29udGVudFJ1bGVM
aXN0RmlsZUhlYWRlclNpemUpOworICAgIHJldHVybiBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0
YSB7IGVuY29kZXIuYnVmZmVyKCkgfTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBn
ZXREYXRhKGNvbnN0IFQmLCBjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXpl
X3QpPiYpOwotdGVtcGxhdGU8PiB2b2lkIGdldERhdGEoY29uc3QgV2ViS2l0OjpOZXR3b3JrQ2Fj
aGU6OkRhdGEmIGRhdGEsIGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCosIHNpemVf
dCk+JiBmdW5jdGlvbikKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgZ2V0RGF0YShjb25zdCBU
JiwgY29uc3QgRnVuY3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYpOworCit0ZW1w
bGF0ZTw+IHZvaWQgZ2V0RGF0YShjb25zdCBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YSYgZGF0
YSwgY29uc3QgRnVuY3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYgZnVuY3Rpb24p
CiB7CiAgICAgZGF0YS5hcHBseShmdW5jdGlvbik7CiB9Ci10ZW1wbGF0ZTw+IHZvaWQgZ2V0RGF0
YShjb25zdCBXZWJDb3JlOjpTaGFyZWRCdWZmZXImIGRhdGEsIGNvbnN0IEZ1bmN0aW9uPGJvb2wo
Y29uc3QgdWludDhfdCosIHNpemVfdCk+JiBmdW5jdGlvbikKKwordGVtcGxhdGU8PiB2b2lkIGdl
dERhdGEoY29uc3QgV2ViQ29yZTo6U2hhcmVkQnVmZmVyJiBkYXRhLCBjb25zdCBGdW5jdGlvbjxi
b29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+JiBmdW5jdGlvbikKIHsKLSAgICBmdW5jdGlvbihk
YXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOworICAgIGZ1bmN0aW9uKGRhdGEuYnl0ZXMoKSk7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC0xNTAsMTMgKzE1MiwxMyBAQCBzdGF0aWMgc3Rk
OjpvcHRpb25hbDxDb250ZW50UnVsZUxpc3RNZXRhCiB7CiAgICAgYm9vbCBzdWNjZXNzID0gZmFs
c2U7CiAgICAgQ29udGVudFJ1bGVMaXN0TWV0YURhdGEgbWV0YURhdGE7Ci0gICAgZ2V0RGF0YShm
aWxlRGF0YSwgWyZtZXRhRGF0YSwgJnN1Y2Nlc3MsICZmaWxlRGF0YV0oY29uc3QgdWludDhfdCog
ZGF0YSwgc2l6ZV90IHNpemUpIHsKKyAgICBnZXREYXRhKGZpbGVEYXRhLCBbJm1ldGFEYXRhLCAm
c3VjY2VzcywgJmZpbGVEYXRhXShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkgewogICAgICAg
ICAvLyBUaGUgZmlsZSBkYXRhIHNob3VsZCBiZSBtYXBwZWQgaW50byBvbmUgY29udGludW91cyBt
ZW1vcnkgc2VnbWVudCBzbyB0aGUgc2l6ZQogICAgICAgICAvLyBwYXNzZWQgdG8gdGhlIGFwcGxp
ZXIgc2hvdWxkIGFsd2F5cyBlcXVhbCB0aGUgZGF0YSBzaXplLgotICAgICAgICBpZiAoc2l6ZSAh
PSBmaWxlRGF0YS5zaXplKCkpCisgICAgICAgIGlmIChkYXRhLnNpemUoKSAhPSBmaWxlRGF0YS5z
aXplKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgV1RGOjpQZXJzaXN0
ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOworICAgICAgICBXVEY6OlBlcnNpc3Rl
bmNlOjpEZWNvZGVyIGRlY29kZXIgeyBkYXRhIH07CiAgICAgICAgIAogICAgICAgICBzdGQ6Om9w
dGlvbmFsPHVpbnQzMl90PiB2ZXJzaW9uOwogICAgICAgICBkZWNvZGVyID4+IHZlcnNpb247CkBA
IC0yMjgsOCArMjMwLDggQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TWFwcGVkRGF0YT4gb3BlbkFu
ZAogc3RhdGljIGJvb2wgd3JpdGVEYXRhVG9GaWxlKGNvbnN0IFdlYktpdDo6TmV0d29ya0NhY2hl
OjpEYXRhJiBmaWxlRGF0YSwgUGxhdGZvcm1GaWxlSGFuZGxlIGZkKQogewogICAgIGJvb2wgc3Vj
Y2VzcyA9IHRydWU7Ci0gICAgZmlsZURhdGEuYXBwbHkoW2ZkLCAmc3VjY2Vzc10oY29uc3QgdWlu
dDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgaWYgKHdyaXRlVG9GaWxlKGZkLCBk
YXRhLCBzaXplKSA9PSAtMSkgeworICAgIGZpbGVEYXRhLmFwcGx5KFtmZCwgJnN1Y2Nlc3NdKFNw
YW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhKSB7CisgICAgICAgIGlmICh3cml0ZVRvRmlsZShmZCwg
ZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKSA9PSAtMSkgewogICAgICAgICAgICAgc3VjY2VzcyA9
IGZhbHNlOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvTGVnYWN5U2Vzc2lvblN0YXRl
Q29kaW5nLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
bWFjL0xlZ2FjeVNlc3Npb25TdGF0ZUNvZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3
ICsxMjksNyBAQCBwdWJsaWM6CiAgICAgICAgICp0aGlzIDw8IGxlbmd0aDsKIAogICAgICAgICAq
dGhpcyA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4obGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7Ci0g
ICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKS5nZXQoKSksIGxl
bmd0aCAqIHNpemVvZihVQ2hhciksIGFsaWdub2YoVUNoYXIpKTsKKyAgICAgICAgZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKFNwYW4geyBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3Rl
cnMoKS5nZXQoKSwgbGVuZ3RoIH0pOwogCiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CkBA
IC0xMzcsNyArMTM3LDcgQEAgcHVibGljOgogICAgIEhpc3RvcnlFbnRyeURhdGFFbmNvZGVyJiBv
cGVyYXRvcjw8KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmFsdWUpCiAgICAgewogICAgICAgICAq
dGhpcyA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUuc2l6ZSgpKTsKLSAgICAgICAgZW5j
b2RlRml4ZWRMZW5ndGhEYXRhKHZhbHVlLmRhdGEoKSwgdmFsdWUuc2l6ZSgpLCAxKTsKKyAgICAg
ICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyB2YWx1ZSB9LCAxKTsKIAogICAgICAgICBy
ZXR1cm4gKnRoaXM7CiAgICAgfQpAQCAtMTQ1LDcgKzE0NSw3IEBAIHB1YmxpYzoKICAgICBIaXN0
b3J5RW50cnlEYXRhRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBWZWN0b3I8Y2hhcj4mIHZhbHVl
KQogICAgIHsKICAgICAgICAgKnRoaXMgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZhbHVlLnNp
emUoKSk7Ci0gICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQ4X3QqPih2YWx1ZS5kYXRhKCkpLCB2YWx1ZS5zaXplKCksIDEpOworICAgICAgICBl
bmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IHZhbHVlIH0sIDEpOwogCiAgICAgICAgIHJldHVy
biAqdGhpczsKICAgICB9CkBAIC0yMDYsMTcgKzIwNiwyMyBAQCBwcml2YXRlOgogICAgIHsKICAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2FyaXRobWV0aWM8VHlwZT46OnZhbHVlLCAiIik7
CiAKLSAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KCZ2YWx1ZSksIHNpemVvZih2YWx1ZSksIHNpemVvZih2YWx1ZSkpOworICAgICAgICBlbmNv
ZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZ2YWx1ZSwgMSB9LCBzaXplb2YodmFsdWUpKTsKICAg
ICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAotICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBhbGlnbm1lbnQp
CisgICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRh
dGEsIHVuc2lnbmVkIGFsaWdubWVudCkKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGRh
dGEgfHwgIXNpemUpOwotICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4oZGF0YSkgJSBhbGlnbm1lbnQpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGF0YS5kYXRh
KCkgfHwgIWRhdGEuc2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KGRhdGEuZGF0YSgpKSAlIGFsaWdubWVudCkpOwogCi0gICAgICAgIHVpbnQ4X3Qq
IGJ1ZmZlciA9IGdyb3coYWxpZ25tZW50LCBzaXplKTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlciwg
ZGF0YSwgc2l6ZSk7CisgICAgICAgIGF1dG8qIGJ1ZmZlciA9IGdyb3coYWxpZ25tZW50LCBkYXRh
LnNpemUoKSk7CisgICAgICAgIG1lbWNweShidWZmZXIsIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUo
KSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IE4+CisgICAgdm9p
ZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbjxULCBOPiBkYXRhLCBzaXplX3QgYWxpZ25tZW50
ID0gYWxpZ25vZihUKSkKKyAgICB7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShhc0J5
dGVzKGRhdGEpLCBhbGlnbm1lbnQpOwogICAgIH0KIAogICAgIHVpbnQ4X3QqIGdyb3codW5zaWdu
ZWQgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKQEAgLTYwMSw3ICs2MDcsNyBAQCBwdWJsaWM6CiAK
ICAgICAgICAgVUNoYXIqIGJ1ZmZlcjsKICAgICAgICAgYXV0byBzdHJpbmcgPSBTdHJpbmc6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgICAgICBkZWNvZGVGaXhlZExl
bmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6
ZW9mKFVDaGFyKSwgYWxpZ25vZihVQ2hhcikpOworICAgICAgICBkZWNvZGVGaXhlZExlbmd0aERh
dGEoU3BhbiB7IGJ1ZmZlciwgbGVuZ3RoIH0sIGFsaWdub2YoVUNoYXIpKTsKIAogICAgICAgICB2
YWx1ZSA9IHN0cmluZzsKICAgICAgICAgcmV0dXJuICp0aGlzOwpAQCAtNzM3LDE3ICs3NDMsMjMg
QEAgcHJpdmF0ZToKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2FyaXRobWV0aWM8VHlw
ZT46OnZhbHVlLCAiIik7CiAgICAgICAgIHZhbHVlID0gVHlwZSgpOwogCi0gICAgICAgIGRlY29k
ZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWUpLCBzaXpl
b2YodmFsdWUpLCBzaXplb2YodmFsdWUpKTsKKyAgICAgICAgZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KFNwYW4geyAmdmFsdWUsIDEgfSwgc2l6ZW9mKHZhbHVlKSk7CiAgICAgICAgIHJldHVybiAqdGhp
czsKICAgICB9CiAKLSAgICB2b2lkIGRlY29kZUZpeGVkTGVuZ3RoRGF0YSh1aW50OF90KiBkYXRh
LCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgYWxpZ25tZW50KQorICAgIHZvaWQgZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKFNwYW48c3RkOjpieXRlPiBkYXRhLCB1bnNpZ25lZCBhbGlnbm1lbnQpCiAgICAg
ewotICAgICAgICBpZiAoIWFsaWduQnVmZmVyUG9zaXRpb24oYWxpZ25tZW50LCBzaXplKSkKKyAg
ICAgICAgaWYgKCFhbGlnbkJ1ZmZlclBvc2l0aW9uKGFsaWdubWVudCwgZGF0YS5zaXplKCkpKQog
ICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIG1lbWNweShkYXRhLCBtX2J1ZmZlciwgc2l6
ZSk7Ci0gICAgICAgIG1fYnVmZmVyICs9IHNpemU7CisgICAgICAgIG1lbWNweShkYXRhLmRhdGEo
KSwgbV9idWZmZXIsIGRhdGEuc2l6ZSgpKTsKKyAgICAgICAgbV9idWZmZXIgKz0gZGF0YS5zaXpl
KCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IE4+CisgICAgdm9p
ZCBkZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbjxULCBOPiBkYXRhLCBzaXplX3QgYWxpZ25tZW50
KQorICAgIHsKKyAgICAgICAgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGFzV3JpdGFibGVCeXRlcyhk
YXRhKSwgYWxpZ25tZW50KTsKICAgICB9CiAKICAgICBib29sIGFsaWduQnVmZmVyUG9zaXRpb24o
dW5zaWduZWQgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjkxLDcgKzY5MSw3IEBAIHN0YXRpYyBib29sIGVuY29kZVR5
cGVkQXJyYXkoSVBDOjpFbmNvZGUKICAgICBpZiAoIWRhdGEuYnVmZmVyKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmJ1ZmZlciksIGRhdGEubGVuZ3RoLCAxKTsKKyAg
ICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBzdGQ6OmJ5dGUqPihkYXRhLmJ1ZmZlciksIGRhdGEubGVuZ3RoIH0sIDEpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyNyBAQAorMjAyMS0wNi0xMSAgU2FtIFdlaW5pZyAgPHdlaW5p
Z0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRvcHQgU3BhbiBpbiBtb3JlIHBsYWNlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2ODg3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL2NhaXJvL1BpeGVsRHVtcFN1cHBvcnRDYWlyby5jcHA6CisgICAg
ICAgIChjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JCaXRtYXBDb250ZXh0KToKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9jZy9QaXhlbER1bXBTdXBwb3J0Q0cuY3BwOgorICAgICAgICAoY29tcHV0
ZVNIQTFIYXNoU3RyaW5nRm9yQml0bWFwQ29udGV4dCk6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvQmxvb21GaWx0ZXIuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Z2Vu
ZXJhdGVSYW5kb21EaWdlc3RzKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9G
aWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6Q29ubmVjdGlvbjo6d2ViU29ja2V0SGFuZHNoYWtlKToKKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwOgorICAgICAgICAoV1RSOjpj
b21wdXRlU0hBMUhhc2hTdHJpbmdGb3JDYWlyb1N1cmZhY2UpOgorICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvY2cvVGVzdEludm9jYXRpb25DRy5jcHA6CisgICAgICAgIChXVFI6OmNvbXB1dGVT
SEExSGFzaFN0cmluZ0ZvckNvbnRleHQpOgorCiAyMDIxLTA2LTExICBGdWppaSBIaXJvbm9yaSAg
PEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIFtXaW5dW0R1bXBSZW5kZXJUcmVl
XSAtLW5vLXRpbWVvdXQgc3dpdGNoIGRvZXNuJ3Qgd29yawpJbmRleDogVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2Fpcm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fpcm8uY3BwCShyZXZpc2lv
biAyNzg4MDkpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0
Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHZvaWQgY29tcHV0ZVNI
QTFIYXNoU3RyaW5nRm9yQml0bWFwQ29udGUKICAgICBTSEExIHNoYTE7CiAgICAgdW5zaWduZWQg
Y2hhciogYml0bWFwRGF0YSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpKTsKICAgICBmb3IgKHVuc2lnbmVkIHJvdyA9IDA7
IHJvdyA8IHBpeGVsc0hpZ2g7IHJvdysrKSB7Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMoYml0bWFw
RGF0YSwgNCAqIHBpeGVsc1dpZGUpOworICAgICAgICBzaGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3Bh
biB7IGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlIH0pKTsKICAgICAgICAgYml0bWFwRGF0YSAr
PSBieXRlc1BlclJvdzsKICAgICB9CiAgICAgU0hBMTo6RGlnZXN0IGhhc2g7CkluZGV4OiBUb29s
cy9EdW1wUmVuZGVyVHJlZS9jZy9QaXhlbER1bXBTdXBwb3J0Q0cuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRDRy5jcHAJKHJldmlzaW9u
IDI3ODgwOSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRDRy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDE0ICs4OCwxNCBAQCB2b2lkIGNvbXB1dGVTSEExSGFz
aFN0cmluZ0ZvckJpdG1hcENvbnRlCiAgICAgICAgICAgICB1aW50MzJfdCBidWZmZXJbcGl4ZWxz
V2lkZV07CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNvbHVtbiA9IDA7IGNvbHVtbiA8IHBp
eGVsc1dpZGU7IGNvbHVtbisrKQogICAgICAgICAgICAgICAgIGJ1ZmZlcltjb2x1bW5dID0gT1NS
ZWFkTGl0dGxlSW50MzIoYml0bWFwRGF0YSwgNCAqIGNvbHVtbik7Ci0gICAgICAgICAgICBzaGEx
LmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZlciksIDQgKiBw
aXhlbHNXaWRlKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgYnVm
ZmVyLCBwaXhlbHNXaWRlIH0pKTsKICAgICAgICAgICAgIGJpdG1hcERhdGEgKz0gYnl0ZXNQZXJS
b3c7CiAgICAgICAgIH0KICAgICB9IGVsc2UKICNlbmRpZgogICAgIHsKICAgICAgICAgZm9yICh1
bnNpZ25lZCByb3cgPSAwOyByb3cgPCBwaXhlbHNIaWdoOyByb3crKykgewotICAgICAgICAgICAg
c2hhMS5hZGRCeXRlcyhiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lkZSk7CisgICAgICAgICAgICBz
aGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7IGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlIH0p
KTsKICAgICAgICAgICAgIGJpdG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7CiAgICAgICAgIH0KICAg
ICB9CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9CbG9vbUZpbHRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQmxvb21GaWx0ZXIu
Y3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9C
bG9vbUZpbHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgc3RhdGljIFZl
Y3RvcjxTSEExOjpEaWdlc3Q+IGdlbmVyYXRlUmFuZAogICAgIFNIQTEgc2hhMTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgaGFzaENvdW50OyArK2kpIHsKICAgICAgICAgZG91YmxlIHJh
bmRvbSA9IHJhbmRvbU51bWJlcigpOwotICAgICAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KCZyYW5kb20pLCBzaXplb2YoZG91YmxlKSk7CisgICAgICAgIHNoYTEu
YWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgJnJhbmRvbSwgMSB9KSk7CiAgICAgICAgIFNIQTE6OkRp
Z2VzdCBkaWdlc3Q7CiAgICAgICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsKICAgICAgICAg
aGFzaGVzLmFwcGVuZChkaWdlc3QpOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvRmlsZVN5c3RlbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvRmlsZVN5c3RlbS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsOCAr
MTMzLDggQEAgVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBNYXBwaW5nRXhpc3RpbmdGaQogICAgIEZp
bGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhIG1hcHBlZEZpbGVEYXRhKHRlbXBGaWxlUGF0aCgpLCBG
aWxlU3lzdGVtOjpNYXBwZWRGaWxlTW9kZTo6U2hhcmVkLCBzdWNjZXNzKTsKICAgICBFWFBFQ1Rf
VFJVRShzdWNjZXNzKTsKICAgICBFWFBFQ1RfVFJVRSghIW1hcHBlZEZpbGVEYXRhKTsKLSAgICBF
WFBFQ1RfVFJVRShtYXBwZWRGaWxlRGF0YS5zaXplKCkgPT0gc3RybGVuKEZpbGVTeXN0ZW1UZXN0
RGF0YSkpOwotICAgIEVYUEVDVF9UUlVFKHN0cm5zdHIoRmlsZVN5c3RlbVRlc3REYXRhLCBzdGF0
aWNfY2FzdDxjb25zdCBjaGFyKj4obWFwcGVkRmlsZURhdGEuZGF0YSgpKSwgbWFwcGVkRmlsZURh
dGEuc2l6ZSgpKSk7CisgICAgRVhQRUNUX1RSVUUobWFwcGVkRmlsZURhdGEuZGF0YSgpLnNpemUo
KSA9PSBzdHJsZW4oRmlsZVN5c3RlbVRlc3REYXRhKSk7CisgICAgRVhQRUNUX1RSVUUoc3RybnN0
cihGaWxlU3lzdGVtVGVzdERhdGEsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KG1hcHBl
ZEZpbGVEYXRhLmRhdGEoKS5kYXRhKCkpLCBtYXBwZWRGaWxlRGF0YS5kYXRhKCkuc2l6ZSgpKSk7
CiB9CiAKIFRFU1RfRihGaWxlU3lzdGVtVGVzdCwgTWFwcGluZ0V4aXN0aW5nRW1wdHlGaWxlKQpJ
bmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbQkocmV2aXNpb24gMjc4
ODA5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0zNDAsMTEgKzM0MCwxMSBAQCB2b2lkIENvbm5lY3Rpb246OndlYlNvY2tldEhh
bmRzaGFrZShDb21wCiAKICAgICAgICAgICAgIGNvbnN0ZXhwciBhdXRvKiB3ZWJTb2NrZXRLZXlH
VUlEID0gIjI1OEVBRkE1LUU5MTQtNDdEQS05NUNBLUM1QUIwREM4NUIxMSI7CiAgICAgICAgICAg
ICBTSEExIHNoYTE7Ci0gICAgICAgICAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDhfdCo+KGtleUJlZ2luKSwga2V5RW5kIC0ga2V5QmVnaW4pOwotICAgICAgICAg
ICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih3ZWJTb2Nr
ZXRLZXlHVUlEKSwgc3RybGVuKHdlYlNvY2tldEtleUdVSUQpKTsKKyAgICAgICAgICAgIHNoYTEu
YWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsga2V5QmVnaW4sIGtleUVuZCB9KSk7CisgICAgICAgICAg
ICBzaGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7IHdlYlNvY2tldEtleUdVSUQsIHN0cmxlbih3
ZWJTb2NrZXRLZXlHVUlEKSB9KSk7CiAgICAgICAgICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAg
ICAgICAgICAgIHNoYTEuY29tcHV0ZUhhc2goaGFzaCk7Ci0gICAgICAgICAgICByZXR1cm4gYmFz
ZTY0RW5jb2RlVG9TdHJpbmcoaGFzaC5kYXRhKCksIFNIQTE6Omhhc2hTaXplKTsKKyAgICAgICAg
ICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgaGFzaCB9KTsKICAgICAgICAg
fTsKIAogICAgICAgICBjb25uZWN0aW9uLnNlbmQoSFRUUFJlc3BvbnNlKDEwMSwgewpJbmRleDog
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jYWlyby9UZXN0SW52b2NhdGlvbkNhaXJvLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fp
cm8uY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NhaXJv
L1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBA
IHN0YXRpYyB2b2lkIGNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckNhaXIKICAgICBTSEExIHNoYTE7
CiAgICAgdW5zaWduZWQgY2hhciogYml0bWFwRGF0YSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpKTsKICAgICBmb3IgKHNp
emVfdCByb3cgPSAwOyByb3cgPCBwaXhlbHNIaWdoOyArK3JvdykgewotICAgICAgICBzaGExLmFk
ZEJ5dGVzKGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlKTsKKyAgICAgICAgc2hhMS5hZGRCeXRl
cyhhc0J5dGVzKFNwYW4geyBiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lkZSB9KSk7CiAgICAgICAg
IGJpdG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7CiAgICAgfQogICAgIFNIQTE6OkRpZ2VzdCBoYXNo
OwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cu
Y3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJ
bnZvY2F0aW9uQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NywxNCArODcsMTQgQEAgdm9pZCBj
b21wdXRlU0hBMUhhc2hTdHJpbmdGb3JDb250ZXh0KENHQwogICAgICAgICAgICAgVmVjdG9yPHVp
bnQ4X3Q+IGJ1ZmZlcig0ICogcGl4ZWxzV2lkZSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGNvbHVtbiA9IDA7IGNvbHVtbiA8IHBpeGVsc1dpZGU7IGNvbHVtbisrKQogICAgICAgICAgICAg
ICAgIGJ1ZmZlcltjb2x1bW5dID0gT1NSZWFkTGl0dGxlSW50MzIoYml0bWFwRGF0YSwgNCAqIGNv
bHVtbik7Ci0gICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGJ1ZmZlcik7CisgICAgICAgICAgICBz
aGExLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7IGJ1ZmZlciB9KSk7CiAgICAgICAgICAgICBiaXRt
YXBEYXRhICs9IGJ5dGVzUGVyUm93OwogICAgICAgICB9CiAgICAgfSBlbHNlCiAjZW5kaWYKICAg
ICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgcm93ID0gMDsgcm93IDwgcGl4ZWxzSGlnaDsgcm93
KyspIHsKLSAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoYml0bWFwRGF0YSwgNCAqIHBpeGVsc1dp
ZGUpOworICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhhc0J5dGVzKFNwYW4geyBiaXRtYXBEYXRh
LCA0ICogcGl4ZWxzV2lkZSB9KSk7CiAgICAgICAgICAgICBiaXRtYXBEYXRhICs9IGJ5dGVzUGVy
Um93OwogICAgICAgICB9CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431267</attachid>
            <date>2021-06-12 18:37:13 -0700</date>
            <delta_ts>2021-06-13 08:17:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226887-20210612183712.patch</filename>
            <type>text/plain</type>
            <size>180379</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBA
CisyMDIxLTA2LTEyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogQVBJL0pTU2NyaXB0Lm1tOgorICAg
ICAgICAoK1tKU1NjcmlwdCBzY3JpcHRPZlR5cGU6bWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTp3
aXRoU291cmNlVVJMOmFuZEJ5dGVjb2RlQ2FjaGU6aW5WaXJ0dWFsTWFjaGluZTplcnJvcjpdKToK
KyAgICAgICAgKC1bSlNTY3JpcHQgcmVhZENhY2hlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHdy
aXRlQ2FjaGU6XSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9ja0hhc2g6OkNvZGVCbG9ja0hhc2gpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHA6CisgICAgICAgIChJbnNw
ZWN0b3I6OmJhY2tlbmRDb21tYW5kc0hhc2gpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZm
ZXIuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJDb250ZW50czo6d3JpdGFibGVCeXRlcyk6
CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyQ29udGVudHM6OmJ5dGVzIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6QXJyYXlCdWZmZXI6OndyaXRhYmxlQnl0ZXMpOgorICAgICAgICAoSlNDOjpBcnJh
eUJ1ZmZlcjo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
Lmg6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6d3JpdGFibGVCeXRlcyk6CisgICAg
ICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRp
bWUvQ2FjaGVQYXlsb2FkLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVQYXlsb2FkOjptYWtlTWFw
cGVkUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6bWFrZU1hbGxvY1BheWxv
YWQpOgorICAgICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6Om1ha2VFbXB0eVBheWxvYWQpOgorICAg
ICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6OkNhY2hlUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNh
Y2hlUGF5bG9hZDo6ZnJlZURhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVQYXlsb2FkLmg6
CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6ZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlUGF5bG9hZDo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6
Q2FjaGVQYXlsb2FkKToKKyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKToKKwogMjAyMS0w
Ni0xMSAgUGF0cmljayBBbmdsZSAgPHBhbmdsZUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogQWRkIGluc3RydW1lbnRhdGlvbiB0byBub2RlIGRlc3RydWN0aW9uIGZvciBJbnNw
ZWN0b3JET01BZ2VudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMTMgKzEzNCwxMyBAQCArIChpbnN0YW5jZXR5cGUpc2Ny
aXB0T2ZUeXBlOihKU1NjcmlwdFR5CiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4g
Y3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJGaWxlIGF0IHBhdGggJUAg
Y291bGQgbm90IGJlIG1hcHBlZC4iLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihzeXN0ZW1QYXRo
KV0sIGVycm9yKTsKIAotICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCkpKQor
ICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmlsZURhdGEuZGF0YSgpLnNpemUoKSkpCiAg
ICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIk5v
dCBhbGwgY2hhcmFjdGVycyBpbiBmaWxlIGF0ICVAIGFyZSBBU0NJSS4iLCBzdGF0aWNfY2FzdDxO
U1N0cmluZyAqPihzeXN0ZW1QYXRoKV0sIGVycm9yKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gYWRv
cHROUyhbW0pTU2NyaXB0IGFsbG9jXSBpbml0XSk7CiAgICAgcmVzdWx0LT5tX3ZpcnR1YWxNYWNo
aW5lID0gdm07CiAgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOwotICAgIHJlc3VsdC0+bV9zb3Vy
Y2UgPSBTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcoYml0d2lzZV9jYXN0
PGNvbnN0IExDaGFyKj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpKSk7CisgICAg
cmVzdWx0LT5tX3NvdXJjZSA9IFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWlu
ZyhiaXR3aXNlX2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmls
ZURhdGEuZGF0YSgpLnNpemUoKSkpOwogICAgIHJlc3VsdC0+bV9tYXBwZWRTb3VyY2UgPSBXVEZN
b3ZlKGZpbGVEYXRhKTsKICAgICByZXN1bHQtPm1fc291cmNlVVJMID0gc291cmNlVVJMOwogICAg
IHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7CkBAIC0xNjgsMjQgKzE2OCwyMyBAQCAt
ICh2b2lkKXJlYWRDYWNoZQogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgY29uc3QgdWludDhfdCogZmlsZURhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihtYXBwZWRGaWxlLmRhdGEoKSk7Ci0gICAgdW5zaWduZWQgZmlsZVRvdGFsU2l6ZSA9IG1h
cHBlZEZpbGUuc2l6ZSgpOworICAgIGF1dG8gZmlsZURhdGEgPSBtYXBwZWRGaWxlLmRhdGEoKTsK
IAogICAgIC8vIEVuc3VyZSB3ZSBhdCBsZWFzdCBoYXZlIGEgU0hBMTo6RGlnZXN0IHRvIHJlYWQu
Ci0gICAgaWYgKGZpbGVUb3RhbFNpemUgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgeworICAgIGlm
IChmaWxlRGF0YS5zaXplKCkgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgewogICAgICAgICBGaWxl
U3lzdGVtOjpkZWxldGVGaWxlKGNhY2hlRmlsZW5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgdW5zaWduZWQgZmlsZURhdGFTaXplID0gZmlsZVRvdGFsU2l6ZSAtIHNpemVvZihT
SEExOjpEaWdlc3QpOworICAgIHVuc2lnbmVkIGZpbGVEYXRhU2l6ZSA9IGZpbGVEYXRhLnNpemUo
KSAtIHNpemVvZihTSEExOjpEaWdlc3QpOwogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFz
aDsKICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhmaWxlRGF0YSwgZmlsZURhdGFT
aXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKGZpbGVEYXRhLmZpcnN0KGZpbGVEYXRhU2l6ZSkpOwog
ICAgIHNoYTEuY29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2VzdCBm
aWxlSGFzaDsKLSAgICBtZW1jcHkoJmZpbGVIYXNoLCBmaWxlRGF0YSArIGZpbGVEYXRhU2l6ZSwg
c2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOworICAgIG1lbWNweSgmZmlsZUhhc2gsIGZpbGVEYXRhLmRh
dGEoKSArIGZpbGVEYXRhU2l6ZSwgc2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOwogCiAgICAgaWYgKGNv
bXB1dGVkSGFzaCAhPSBmaWxlSGFzaCkgewogICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxl
KGNhY2hlRmlsZW5hbWUpOwpAQCAtMzQzLDcgKzM0Miw3IEBAIC0gKEJPT0wpd3JpdGVDYWNoZToo
U3RyaW5nJillcnJvcgogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFzaDsKICAgICBTSEEx
IHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhtX2NhY2hlZEJ5dGVjb2RlLT5kYXRhKCksIG1fY2Fj
aGVkQnl0ZWNvZGUtPnNpemUoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgbV9jYWNoZWRC
eXRlY29kZS0+ZGF0YSgpLCBtX2NhY2hlZEJ5dGVjb2RlLT5zaXplKCkgfSk7CiAgICAgc2hhMS5j
b21wdXRlSGFzaChjb21wdXRlZEhhc2gpOwogICAgIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKHRl
bXBGRCwgY29tcHV0ZWRIYXNoLmRhdGEoKSwgc2l6ZW9mKGNvbXB1dGVkSGFzaCkpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0hhc2guY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgQ29kZUJsb2Nr
SGFzaDo6Q29kZUJsb2NrSGFzaChjb25zdCBTb3VyYwogICAgIEFTU0VSVChzb3VyY2VDb2RlLmxl
bmd0aCgpID49IDApOwogICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhTb3VyY2VDb2RlTGVuZ3Ro
VG9IYXNoID0gNTAwICogTUI7CiAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzb3VyY2VD
b2RlLmxlbmd0aCgpKSA8IG1heFNvdXJjZUNvZGVMZW5ndGhUb0hhc2gpCi0gICAgICAgIHNoYTEu
YWRkQnl0ZXMoc291cmNlQ29kZS50b1VURjgoKSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoc291
cmNlQ29kZS50b1VURjgoKS5ieXRlcygpKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gSnVzdCBo
YXNoIHdpdGggdGhlIGxlbmd0aCBhbmQgc2FtcGxlcyBvZiB0aGUgc291cmNlIHN0cmluZyBpbnN0
ZWFkLgogICAgICAgICBTdHJpbmdWaWV3IHN0ciA9IHNvdXJjZUNvZGUucHJvdmlkZXIoKS0+c291
cmNlKCk7CkBAIC02MiwxMCArNjIsMTAgQEAgQ29kZUJsb2NrSGFzaDo6Q29kZUJsb2NrSGFzaChj
b25zdCBTb3VyYwogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHIubGVuZ3RoKCk7CiAgICAg
ICAgIHVuc2lnbmVkIHN0ZXAgPSAobGVuZ3RoID4+IDEwKSArIDE7CiAKLSAgICAgICAgc2hhMS5h
ZGRCeXRlcyhiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KCZsZW5ndGgpLCBzaXplb2YobGVuZ3RoKSk7
CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZsZW5ndGgsIDEgfSk7CiAgICAgICAgIGRv
IHsKICAgICAgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IHN0cltpbmRleF07Ci0gICAgICAgICAg
ICBzaGExLmFkZEJ5dGVzKGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oJmNoYXJhY3RlciksIHNpemVv
ZihjaGFyYWN0ZXIpKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZjaGFyYWN0
ZXIsIDEgfSk7CiAgICAgICAgICAgICBvbGRJbmRleCA9IGluZGV4OwogICAgICAgICAgICAgaW5k
ZXggKz0gc3RlcDsKICAgICAgICAgfSB3aGlsZSAoaW5kZXggPiBvbGRJbmRleCAmJiBpbmRleCA8
IGxlbmd0aCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VIYXNo
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VI
YXNoLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BhcnNlSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiBQYXJzZUhhc2g6OlBhcnNlSGFzaChjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VD
b2RlKQogewogICAgIFNIQTEgc2hhMTsKLSAgICBzaGExLmFkZEJ5dGVzKHNvdXJjZUNvZGUudG9V
VEY4KCkpOworICAgIHNoYTEuYWRkQnl0ZXMoc291cmNlQ29kZS50b1VURjgoKS5ieXRlcygpKTsK
ICAgICBTSEExOjpEaWdlc3QgZGlnZXN0OwogICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsK
ICAgICB1bnNpZ25lZCBoYXNoID0gZGlnZXN0WzBdIHwgKGRpZ2VzdFsxXSA8PCA4KSB8IChkaWdl
c3RbMl0gPDwgMTYpIHwgKGRpZ2VzdFszXSA8PCAyNCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1JlbW90ZUluc3BlY3RvclV0aWxzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1Jl
bW90ZUluc3BlY3RvclV0aWxzLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgY29uc3QgQ1N0cmluZyYgYmFja2VuZENv
bW1hbmRzSGFzaCgpCiAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSA9IGdfYnl0ZXNfZ2V0X2Rh
dGEoYnl0ZXMuZ2V0KCksICZkYXRhU2l6ZSk7CiAgICAgICAgIEFTU0VSVChkYXRhU2l6ZSk7CiAg
ICAgICAgIFNIQTEgc2hhMTsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhzdGF0aWNfY2FzdDxjb25z
dCB1aW50OF90Kj4oZGF0YSksIGRhdGFTaXplKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFu
IHsgc3RhdGljX2Nhc3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSksIGRhdGFTaXplIH0pOwogICAg
ICAgICBoZXhEaWdlc3QgPSBzaGExLmNvbXB1dGVIZXhEaWdlc3QoKTsKICAgICB9CiAgICAgcmV0
dXJuIGhleERpZ2VzdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogI2luY2x1ZGUgPHd0Zi9QYWNrZWRSZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZl
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtODAsNyAr
ODEsMTAgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBt
X2RhdGEuZ2V0TWF5QmVOdWxsKHNpemVJbkJ5dGVzKCkpOyB9CiAgICAgdW5zaWduZWQgc2l6ZUlu
Qnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX3NpemVJbkJ5dGVzOyB9Ci0gICAgCisKKyAgICBTcGFu
PHN0ZDo6Ynl0ZT4gd3JpdGFibGVCeXRlcygpIHsgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8c3RkOjpi
eXRlKj4oZGF0YSgpKSwgc2l6ZUluQnl0ZXMoKSB9OyB9CisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4geyBzdGF0aWNfY2FzdDxjb25zdCBzdGQ6OmJ5dGUq
PihkYXRhKCkpLCBzaXplSW5CeXRlcygpIH07IH0KKwogICAgIGJvb2wgaXNTaGFyZWQoKSBjb25z
dCB7IHJldHVybiBtX3NoYXJlZDsgfQogICAgIAogcHJpdmF0ZToKQEAgLTEyNyw3ICsxMzEsOSBA
QCBwdWJsaWM6CiAgICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKICAgICBpbmxpbmUgY29uc3Qgdm9p
ZCogZGF0YSgpIGNvbnN0OwogICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7
Ci0gICAgCisgICAgaW5saW5lIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCk7CisgICAg
aW5saW5lIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAgICAgdm9pZCBt
YWtlU2hhcmVkKCk7CiAgICAgdm9pZCBzZXRTaGFyaW5nTW9kZShBcnJheUJ1ZmZlclNoYXJpbmdN
b2RlKTsKICAgICBpbmxpbmUgYm9vbCBpc1NoYXJlZCgpIGNvbnN0OwpAQCAtMTk3LDYgKzIwMywx
NiBAQCB1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJu
IG1fY29udGVudHMuc2l6ZUluQnl0ZXMoKTsKIH0KIAorU3BhbjxzdGQ6OmJ5dGU+IEFycmF5QnVm
ZmVyOjp3cml0YWJsZUJ5dGVzKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZW50cy53cml0YWJsZUJ5
dGVzKCk7Cit9CisKK1NwYW48Y29uc3Qgc3RkOjpieXRlPiBBcnJheUJ1ZmZlcjo6Ynl0ZXMoKSBj
b25zdAoreworICAgIHJldHVybiBtX2NvbnRlbnRzLmJ5dGVzKCk7Cit9CisKIGJvb2wgQXJyYXlC
dWZmZXI6OmlzU2hhcmVkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb250ZW50cy5pc1NoYXJl
ZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZm
ZXJWaWV3LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4Niw5IEBAIHB1
YmxpYzoKIAogICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVM
ZW5ndGg7IH0KIAorICAgIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCkgeyByZXR1cm4g
eyBzdGF0aWNfY2FzdDxzdGQ6OmJ5dGUqPihkYXRhKCkpLCBieXRlTGVuZ3RoKCkgfTsgfQorICAg
IFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0IHsgcmV0dXJuIHsgc3RhdGljX2Nh
c3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSgpKSwgYnl0ZUxlbmd0aCgpIH07IH0KKwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0RGV0YWNoYWJsZShib29sKTsKICAgICBib29sIGlzRGV0
YWNoYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNEZXRhY2hhYmxlOyB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlUGF5bG9hZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsMjcgKzMwLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogCiBD
YWNoZVBheWxvYWQgQ2FjaGVQYXlsb2FkOjptYWtlTWFwcGVkUGF5bG9hZChGaWxlU3lzdGVtOjpN
YXBwZWRGaWxlRGF0YSYmIGRhdGEpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZCh0cnVlLCBk
YXRhLmxlYWtIYW5kbGUoKSwgZGF0YS5zaXplKCkpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQo
dHJ1ZSwgZGF0YS5sZWFrSGFuZGxlKCkpOwogfQogCiBDYWNoZVBheWxvYWQgQ2FjaGVQYXlsb2Fk
OjptYWtlTWFsbG9jUGF5bG9hZChNYWxsb2NQdHI8dWludDhfdCwgVk1NYWxsb2M+JiYgZGF0YSwg
c2l6ZV90IHNpemUpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZChmYWxzZSwgZGF0YS5sZWFr
UHRyKCksIHNpemUpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQoZmFsc2UsIGFzV3JpdGFibGVC
eXRlcyhTcGFuIHsgZGF0YS5sZWFrUHRyKCksIHNpemUgfSkpOwogfQogCiBDYWNoZVBheWxvYWQg
Q2FjaGVQYXlsb2FkOjptYWtlRW1wdHlQYXlsb2FkKCkKIHsKLSAgICByZXR1cm4gQ2FjaGVQYXls
b2FkKHRydWUsIG51bGxwdHIsIDApOworICAgIHJldHVybiBDYWNoZVBheWxvYWQodHJ1ZSwgeyB9
KTsKIH0KIAogQ2FjaGVQYXlsb2FkOjpDYWNoZVBheWxvYWQoQ2FjaGVQYXlsb2FkJiYgb3RoZXIp
CiB7Ci0gICAgbV9tYXBwZWQgPSBvdGhlci5tX21hcHBlZDsKLSAgICBtX3NpemUgPSBvdGhlci5t
X3NpemU7Ci0gICAgbV9kYXRhID0gb3RoZXIubV9kYXRhOwotICAgIG90aGVyLm1fbWFwcGVkID0g
ZmFsc2U7Ci0gICAgb3RoZXIubV9kYXRhID0gbnVsbHB0cjsKLSAgICBvdGhlci5tX3NpemUgPSAw
OworICAgIG1fbWFwcGVkID0gc3RkOjpleGNoYW5nZShvdGhlci5tX21hcHBlZCwgZmFsc2UpOwor
ICAgIG1fZGF0YSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLCB7IH0pOwogfQogCiBDYWNo
ZVBheWxvYWQ6On5DYWNoZVBheWxvYWQoKQpAQCAtNjcsMTIgKzYzLDEzIEBAIENhY2hlUGF5bG9h
ZCYgQ2FjaGVQYXlsb2FkOjpvcGVyYXRvcj0oQ2EKIAogdm9pZCBDYWNoZVBheWxvYWQ6OmZyZWVE
YXRhKCkKIHsKLSAgICBpZiAoIW1fZGF0YSkKKyAgICBpZiAoIW1fZGF0YS5kYXRhKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBpZiAobV9tYXBwZWQpIHsKLSAgICAgICAgRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1fZGF0YSwgbV9zaXplKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZmFzdEZy
ZWUobV9kYXRhKTsKKworICAgIGlmIChtX21hcHBlZCkKKyAgICAgICAgRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1fZGF0YSk7CisgICAgZWxzZQorICAgICAgICBmYXN0RnJlZShtX2RhdGEu
ZGF0YSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHd0Zi9GaWxlU3lz
dGVtLmg+CiAjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MSwyMiArNDIsMjAgQEAgcHVibGljOgogICAgIEpT
X0VYUE9SVF9QUklWQVRFIH5DYWNoZVBheWxvYWQoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBD
YWNoZVBheWxvYWQmIG9wZXJhdG9yPShDYWNoZVBheWxvYWQmJiBvdGhlcik7CiAKLSAgICBjb25z
dCB1aW50OF90KiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBjb25zdCB1aW50OF90KiBkYXRhKCkg
Y29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9kYXRhLmRhdGEoKSk7
IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5zaXplKCk7IH0KIAog
cHJpdmF0ZToKLSAgICBDYWNoZVBheWxvYWQoYm9vbCBtYXBwZWQsIHZvaWQqIGRhdGEsIHNpemVf
dCBzaXplKQorICAgIENhY2hlUGF5bG9hZChib29sIG1hcHBlZCwgU3BhbjxzdGQ6OmJ5dGU+IGRh
dGEpCiAgICAgICAgIDogbV9tYXBwZWQobWFwcGVkKQotICAgICAgICAsIG1fc2l6ZShzaXplKQot
ICAgICAgICAsIG1fZGF0YShzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGF0YSkpCisgICAgICAgICwg
bV9kYXRhKGRhdGEpCiAgICAgewogICAgIH0KIAogICAgIHZvaWQgZnJlZURhdGEoKTsKIAogICAg
IGJvb2wgbV9tYXBwZWQ7Ci0gICAgc2l6ZV90IG1fc2l6ZTsKLSAgICB1aW50OF90KiBtX2RhdGE7
CisgICAgU3BhbjxzdGQ6OmJ5dGU+IG1fZGF0YTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1Bh
cnNlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNyArMjYxLDcg
QEAgYXV0byBTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKGNvbnN0IHVpbgogICAgIH0KIAogICAg
IGlmIChVTkxJS0VMWShPcHRpb25zOjp1c2VFYWdlcldlYkFzc2VtYmx5TW9kdWxlSGFzaGluZygp
KSkKLSAgICAgICAgbV9oYXNoZXIuYWRkQnl0ZXMoYnl0ZXMsIGJ5dGVzU2l6ZSk7CisgICAgICAg
IG1faGFzaGVyLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7IGJ5dGVzLCBieXRlc1NpemUgfSApKTsK
IAogICAgIHNpemVfdCBvZmZzZXRJbkJ5dGVzID0gMDsKICAgICB3aGlsZSAodHJ1ZSkgewpJbmRl
eDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VM
b2cJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsNjggQEAKKzIwMjEtMDYtMTEgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBw
bGUuY29tPgorCisgICAgICAgIEFkb3B0IFNwYW4gaW4gbW9yZSBwbGFjZXMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjg4NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtXSVBdCisKKyAgICAgICAgKiBX
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvRmlsZVN5c3RlbS5j
cHA6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpNYXBwZWRGaWxlRGF0YTo6fk1hcHBl
ZEZpbGVEYXRhKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRh
OjptYXBGaWxlSGFuZGxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OnVubWFwVmll
d09mRmlsZSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjptYXBUb0ZpbGUpOgorICAg
ICAgICAqIHd0Zi9GaWxlU3lzdGVtLmg6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpN
YXBwZWRGaWxlRGF0YTo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChXVEY6OkZpbGVT
eXN0ZW1JbXBsOjpNYXBwZWRGaWxlRGF0YTo6ZGF0YSBjb25zdCk6CisgICAgICAgIChXVEY6OkZp
bGVTeXN0ZW1JbXBsOjpNYXBwZWRGaWxlRGF0YTo6bGVha0hhbmRsZSk6CisgICAgICAgIChXVEY6
OkZpbGVTeXN0ZW1JbXBsOjpNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEpOgorICAgICAg
ICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6TWFwcGVkRmlsZURhdGE6Om9wZXJhdG9yPSk6CisgICAg
ICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpNYXBwZWRGaWxlRGF0YTo6c2l6ZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9TSEExLmNwcDoKKyAg
ICAgICAgKFdURjo6U0hBMTo6YWRkQnl0ZXMpOgorICAgICAgICAoV1RGOjpTSEExOjpmaW5hbGl6
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlNIQTE6OnByb2Nlc3NCbG9jayk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6OlNIQTE6OnJlc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6U0hB
MTo6aGV4RGlnZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6U0hBMTo6Y29tcHV0ZUhleERp
Z2VzdCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1NIQTEuaDoKKyAgICAgICAgKFdURjo6U0hB
MTo6YWRkQnl0ZXMpOgorICAgICAgICAqIHd0Zi9WZWN0b3IuaDoKKyAgICAgICAgKiB3dGYvcGVy
c2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5jcHA6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNl
OjpDb2RlcjxDU3RyaW5nPjo6ZW5jb2RlKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNv
ZGVyPENTdHJpbmc+OjpkZWNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8
U3RyaW5nPjo6ZW5jb2RlKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OmRlY29kZVN0cmlu
Z1RleHQpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8U0hBMTo6RGlnZXN0Pjo6
ZW5jb2RlKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPFNIQTE6OkRpZ2VzdD46
OmRlY29kZSk6CisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaDoK
KyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwOgorICAgICAg
ICAoV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2Rlcjo6RGVjb2Rlcik6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyOjpidWZmZXJQb2ludGVyRm9yRGlyZWN0UmVhZCk6CisgICAgICAg
IChXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEpOgorICAg
ICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2Rlcjo6dmVyaWZ5Q2hlY2tzdW0pOgorICAgICAg
ICAoV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2Rlcjo6fkRlY29kZXIpOiBEZWxldGVkLgorICAgICAg
ICAqIHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oOgorICAgICAgICAqIHd0Zi9w
ZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5jcHA6CisgICAgICAgIChXVEY6OlBlcnNpc3Rl
bmNlOjpFbmNvZGVyOjpncm93KToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6
OnVwZGF0ZUNoZWNrc3VtRm9yRGF0YSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNv
ZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6
RW5jb2Rlcjo6ZW5jb2RlTnVtYmVyKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29k
ZXI6OmVuY29kZUNoZWNrc3VtKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6
OkVuY29kZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6
fkVuY29kZXIpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50
RW5jb2Rlci5oOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6YnVmZmVyIGNv
bnN0KToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6OnVwZGF0ZUNoZWNrc3Vt
Rm9yTnVtYmVyKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6OmJ1ZmZlclNp
emUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi90ZXh0L0Jhc2U2NC5oOgorICAgICAg
ICAoV1RGOjpiYXNlNjRFbmNvZGVUb1ZlY3Rvcik6CisgICAgICAgIChXVEY6OmJhc2U2NEVuY29k
ZVRvU3RyaW5nKToKKyAgICAgICAgKiB3dGYvdGV4dC9DU3RyaW5nLmg6CisKIDIwMjEtMDYtMTEg
IFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRkIFdlYWtIYXNo
TWFwCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dURi93dGYvRmlsZVN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxOSw5ICszMTksOSBA
QCBib29sIGV4Y2x1ZGVGcm9tQmFja3VwKGNvbnN0IFN0cmluZyYpCiAKIE1hcHBlZEZpbGVEYXRh
Ojp+TWFwcGVkRmlsZURhdGEoKQogewotICAgIGlmICghbV9maWxlRGF0YSkKKyAgICBpZiAoIW1f
ZmlsZURhdGEuZGF0YSgpKQogICAgICAgICByZXR1cm47Ci0gICAgdW5tYXBWaWV3T2ZGaWxlKG1f
ZmlsZURhdGEsIG1fZmlsZVNpemUpOworICAgIHVubWFwVmlld09mRmlsZShtX2ZpbGVEYXRhKTsK
IH0KIAogTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKGNvbnN0IFN0cmluZyYgZmlsZVBh
dGgsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUsIGJvb2wmIHN1Y2Nlc3MpCkBAIC0zODMsMTQgKzM4
MywxMyBAQCBib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBtX2ZpbGVEYXRhID0gZGF0YTsKLSAgICBtX2Zp
bGVTaXplID0gc2l6ZTsKKyAgICBtX2ZpbGVEYXRhID0gU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8
c3RkOjpieXRlKj4oZGF0YSksIHNpemUgfTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCB1
bm1hcFZpZXdPZkZpbGUodm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK2Jvb2wgdW5tYXBWaWV3
T2ZGaWxlKFNwYW48c3RkOjpieXRlPiBkYXRhKQogewotICAgIHJldHVybiAhbXVubWFwKGJ1ZmZl
ciwgc2l6ZSk7CisgICAgcmV0dXJuICFtdW5tYXAoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsK
IH0KIAogI2VuZGlmCkBAIC00MzgsNyArNDM3LDcgQEAgU3RyaW5nIGNyZWF0ZVRlbXBvcmFyeVpp
cEFyY2hpdmUoY29uc3QgUwogfQogI2VuZGlmCiAKLU1hcHBlZEZpbGVEYXRhIG1hcFRvRmlsZShj
b25zdCBTdHJpbmcmIHBhdGgsIHNpemVfdCBieXRlc1NpemUsIEZ1bmN0aW9uPHZvaWQoY29uc3Qg
RnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mKT4mJiBhcHBseSwgUGxhdGZv
cm1GaWxlSGFuZGxlKiBvdXRwdXRIYW5kbGUpCitNYXBwZWRGaWxlRGF0YSBtYXBUb0ZpbGUoY29u
c3QgU3RyaW5nJiBwYXRoLCBzaXplX3QgYnl0ZXNTaXplLCBGdW5jdGlvbjx2b2lkKGNvbnN0IEZ1
bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mKT4mJiBhcHBseSwgUGxhdGZvcm1G
aWxlSGFuZGxlKiBvdXRwdXRIYW5kbGUpCiB7CiAgICAgY29uc3RleHByIGJvb2wgZmFpbElmRmls
ZUV4aXN0cyA9IHRydWU7CiAgICAgYXV0byBoYW5kbGUgPSBGaWxlU3lzdGVtOjpvcGVuRmlsZShw
YXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWRXcml0ZSwgRmlsZVN5c3RlbTo6Rmls
ZUFjY2Vzc1Blcm1pc3Npb246OlVzZXIsIGZhaWxJZkZpbGVFeGlzdHMpOwpAQCAtNDU1LDEyICs0
NTQsMTIgQEAgTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcAogICAgICAg
ICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIHZvaWQqIG1hcCA9IGNvbnN0X2Nhc3Q8dm9pZCo+
KG1hcHBlZEZpbGUuZGF0YSgpKTsKLSAgICB1aW50OF90KiBtYXBEYXRhID0gc3RhdGljX2Nhc3Q8
dWludDhfdCo+KG1hcCk7CisgICAgYXV0byBtYXAgPSBtYXBwZWRGaWxlLmRhdGEoKS5kYXRhKCk7
CisgICAgYXV0byBtYXBEYXRhID0gbWFwOwogCi0gICAgYXBwbHkoWyZtYXBEYXRhXShjb25zdCB1
aW50OF90KiBjaHVuaywgc2l6ZV90IGNodW5rU2l6ZSkgewotICAgICAgICBtZW1jcHkobWFwRGF0
YSwgY2h1bmssIGNodW5rU2l6ZSk7Ci0gICAgICAgIG1hcERhdGEgKz0gY2h1bmtTaXplOworICAg
IGFwcGx5KFsmbWFwRGF0YV0oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGNodW5rKSB7CisgICAgICAg
IG1lbWNweShtYXBEYXRhLCBjaHVuay5kYXRhKCksIGNodW5rLnNpemUoKSk7CisgICAgICAgIG1h
cERhdGEgKz0gY2h1bmsuc2l6ZSgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9KTsKIApJ
bmRleDogU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0ZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYv
RmlsZVN5c3RlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8
dXRpbGl0eT4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25T
ZXQuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNp
bmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
QEAgLTIxMCw3ICsyMTEsNyBAQCBXVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHJlYWxQYXRoKGNv
bnN0CiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc1NhZmVUb1VzZU1lbW9yeU1hcEZvclBhdGgo
Y29uc3QgU3RyaW5nJik7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBtYWtlU2FmZVRvVXNlTWVt
b3J5TWFwRm9yUGF0aChjb25zdCBTdHJpbmcmKTsKIAotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wg
dW5tYXBWaWV3T2ZGaWxlKHZvaWQqIGJ1ZmZlciwgc2l6ZV90KTsKK1dURl9FWFBPUlRfUFJJVkFU
RSBib29sIHVubWFwVmlld09mRmlsZShTcGFuPHN0ZDo6Ynl0ZT4pOwogCiBjbGFzcyBNYXBwZWRG
aWxlRGF0YSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC0yMjMsMTcgKzIyNCwx
NSBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5NYXBwZWRGaWxlRGF0YSgpOwog
ICAgIE1hcHBlZEZpbGVEYXRhJiBvcGVyYXRvcj0oTWFwcGVkRmlsZURhdGEmJik7CiAKLSAgICBl
eHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2ZpbGVEYXRhOyB9Ci0g
ICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZURhdGE7IH0KLSAgICB1
bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9maWxlU2l6ZTsgfQorICAgIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fZmlsZURhdGEuZGF0YSgpOyB9Cisg
ICAgU3BhbjxzdGQ6OmJ5dGU+IGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVEYXRhOyB9CiAK
LSAgICB2b2lkKiBsZWFrSGFuZGxlKCkgeyByZXR1cm4gc3RkOjpleGNoYW5nZShtX2ZpbGVEYXRh
LCBudWxscHRyKTsgfQorICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBTcGFuPHN0ZDo6Ynl0ZT4gbGVh
a0hhbmRsZSgpIHsgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9maWxlRGF0YSwgeyB9KTsgfQogCiBw
cml2YXRlOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIG1hcEZpbGVIYW5kbGUoUGxhdGZv
cm1GaWxlSGFuZGxlLCBGaWxlT3Blbk1vZGUsIE1hcHBlZEZpbGVNb2RlKTsKIAotICAgIHZvaWQq
IG1fZmlsZURhdGEgeyBudWxscHRyIH07Ci0gICAgdW5zaWduZWQgbV9maWxlU2l6ZSB7IDAgfTsK
KyAgICBTcGFuPHN0ZDo6Ynl0ZT4gbV9maWxlRGF0YTsKIH07CiAKIGlubGluZSBNYXBwZWRGaWxl
RGF0YTo6TWFwcGVkRmlsZURhdGEoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgTWFwcGVkRmls
ZU1vZGUgbWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKQEAgLTI0NywyMSArMjQ2LDE5IEBAIGlubGlu
ZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGwKIH0KIAogaW5saW5lIE1hcHBlZEZp
bGVEYXRhOjpNYXBwZWRGaWxlRGF0YShNYXBwZWRGaWxlRGF0YSYmIG90aGVyKQotICAgIDogbV9m
aWxlRGF0YShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEsIG51bGxwdHIpKQotICAgICwg
bV9maWxlU2l6ZShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZVNpemUsIDApKQorICAgIDogbV9m
aWxlRGF0YShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEsIHsgfSkpCiB7CiB9CiAKIGlu
bGluZSBNYXBwZWRGaWxlRGF0YSYgTWFwcGVkRmlsZURhdGE6Om9wZXJhdG9yPShNYXBwZWRGaWxl
RGF0YSYmIG90aGVyKQogewotICAgIG1fZmlsZURhdGEgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1f
ZmlsZURhdGEsIG51bGxwdHIpOwotICAgIG1fZmlsZVNpemUgPSBzdGQ6OmV4Y2hhbmdlKG90aGVy
Lm1fZmlsZVNpemUsIDApOworICAgIG1fZmlsZURhdGEgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1f
ZmlsZURhdGEsIHsgfSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCiAvLyBUaGlzIGNyZWF0ZXMg
dGhlIGRlc3RpbmF0aW9uIGZpbGUsIG1hcHMgaXQsIHdyaXRlIHRoZSBwcm92aWRlZCBkYXRhIHRv
IGl0IGFuZCByZXR1cm5zIHRoZSBtYXBwZWQgZmlsZS4KIC8vIFRoaXMgZnVuY3Rpb24gZmFpbHMg
aWYgdGhlcmUgaXMgYWxyZWFkeSBhIGZpbGUgYXQgdGhlIGRlc3RpbmF0aW9uIHBhdGguCi1XVEZf
RVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0
aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVuY3Rpb248dm9pZChjb25zdCBGdW5jdGlvbjxib29sKGNv
bnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYpPiYmIGFwcGx5LCBQbGF0Zm9ybUZpbGVIYW5kbGUqID0g
bnVsbHB0cik7CitXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxlKGNv
bnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVuY3Rpb248dm9pZChjb25zdCBG
dW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+Jik+JiYgYXBwbHksIFBsYXRmb3Jt
RmlsZUhhbmRsZSogPSBudWxscHRyKTsKIAogfSAvLyBuYW1lc3BhY2UgRmlsZVN5c3RlbUltcGwK
IH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93dGYvU0hBMS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvU0hBMS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XVEYvd3RmL1NIQTEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMCArNDYsMTAgQEAg
U0hBMTo6U0hBMSgpCiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiB9CiAK
LXZvaWQgU0hBMTo6YWRkQnl0ZXMoY29uc3QgdWludDhfdCogaW5wdXQsIHNpemVfdCBsZW5ndGgp
Cit2b2lkIFNIQTE6OmFkZEJ5dGVzKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCkKIHsKICAg
ICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgIENDX1NIQTFfVXBkYXRl
KCZtX2NvbnRleHQsIGlucHV0LCBsZW5ndGgpOworICAgIENDX1NIQTFfVXBkYXRlKCZtX2NvbnRl
eHQsIGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpKTsKICAgICBBTExPV19ERVBSRUNBVEVEX0RF
Q0xBUkFUSU9OU19FTkQKIH0KIApAQCAtMTAxLDExICsxMDEsMTEgQEAgU0hBMTo6U0hBMSgpCiAg
ICAgcmVzZXQoKTsKIH0KIAotdm9pZCBTSEExOjphZGRCeXRlcyhjb25zdCB1aW50OF90KiBpbnB1
dCwgc2l6ZV90IGxlbmd0aCkKK3ZvaWQgU0hBMTo6YWRkQnl0ZXMoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGlucHV0KQogewotICAgIHdoaWxlIChsZW5ndGgtLSkgeworICAgIGZvciAoYXV0byBieXRl
IDogaW5wdXQpIHsKICAgICAgICAgQVNTRVJUKG1fY3Vyc29yIDwgNjQpOwotICAgICAgICBtX2J1
ZmZlclttX2N1cnNvcisrXSA9ICppbnB1dCsrOworICAgICAgICBtX2J1ZmZlclttX2N1cnNvcisr
XSA9IHN0ZDo6dG9faW50ZWdlcjx1aW50OF90PihieXRlKTsKICAgICAgICAgKyttX3RvdGFsQnl0
ZXM7CiAgICAgICAgIGlmIChtX2N1cnNvciA9PSA2NCkKICAgICAgICAgICAgIHByb2Nlc3NCbG9j
aygpOwpJbmRleDogU291cmNlL1dURi93dGYvU0hBMS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL1NIQTEuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvU0hBMS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgPGFycmF5PgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAtNDUsMTUgKzQ2LDEzIEBAIGNs
YXNzIFNIQTEgewogcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBTSEExKCk7CiAKLSAg
ICB2b2lkIGFkZEJ5dGVzKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQpCisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgYWRkQnl0ZXMoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkZEJ5dGVzKFQmJiBkYXRhKQogICAgIHsKLSAgICAg
ICAgYWRkQnl0ZXMoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkpOworICAgICAgICByZXR1cm4g
YWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pKTsKICAgICB9
Ci0gICAgdm9pZCBhZGRCeXRlcyhjb25zdCBDU3RyaW5nJiBpbnB1dCkKLSAgICB7Ci0gICAgICAg
IGFkZEJ5dGVzKGlucHV0LmRhdGFBc1VJbnQ4UHRyKCksIGlucHV0Lmxlbmd0aCgpKTsKLSAgICB9
Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkQnl0ZXMoY29uc3QgdWludDhfdCogaW5w
dXQsIHNpemVfdCBsZW5ndGgpOworCisgICAgdm9pZCBhZGRCeXRlcyhjb25zdCBDU3RyaW5nJiBp
bnB1dCkgeyBhZGRCeXRlcyhpbnB1dC5ieXRlcygpKTsgfQogCiAgICAgLy8gU2l6ZSBvZiB0aGUg
U0hBMSBoYXNoCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90
IGhhc2hTaXplID0gMjA7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dURi93dGYvVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxMyw2ICs2MTMsNyBAQCBwcml2
YXRlOgogCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBUIFZhbHVlVHlwZTsKKyAgICB0eXBlZGVmIFQg
dmFsdWVfdHlwZTsKIAogICAgIHR5cGVkZWYgVCogaXRlcmF0b3I7CiAgICAgdHlwZWRlZiBjb25z
dCBUKiBjb25zdF9pdGVyYXRvcjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1Bl
cnNpc3RlbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3Rl
bmNlL1BlcnNpc3RlbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RG
L3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTcsNyArNTcsNyBAQCB2b2lkIENvZGVyPENTdHJpbmc+OjplbmNvZGUoRW5jb2RlciYgZW5jCiAK
ICAgICB1aW50MzJfdCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAgZW5jb2RlciA8PCBs
ZW5ndGg7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RyaW5nLmRhdGFBc1VJ
bnQ4UHRyKCksIGxlbmd0aCk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3Ry
aW5nLmJ5dGVzKCkpOwogfQogCiBzdGQ6Om9wdGlvbmFsPENTdHJpbmc+IENvZGVyPENTdHJpbmc+
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKQEAgLTc4LDcgKzc4LDcgQEAgc3RkOjpvcHRpb25h
bDxDU3RyaW5nPiBDb2RlcjxDU3RyaW5nPjo6ZAogCiAgICAgY2hhciogYnVmZmVyOwogICAgIENT
dHJpbmcgc3RyaW5nID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZCgqbGVuZ3RoLCBidWZmZXIp
OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2Fz
dDx1aW50OF90Kj4oYnVmZmVyKSwgKmxlbmd0aCkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZp
eGVkTGVuZ3RoRGF0YShTcGFuIHsgcmVpbnRlcnByZXRfY2FzdDxzdGQ6OmJ5dGUqPihidWZmZXIp
LCAqbGVuZ3RoIH0pKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgcmV0dXJu
IHN0cmluZzsKQEAgLTk2LDExICs5Niw3IEBAIHZvaWQgQ29kZXI8U3RyaW5nPjo6ZW5jb2RlKEVu
Y29kZXImIGVuY28KICAgICBib29sIGlzOEJpdCA9IHN0cmluZy5pczhCaXQoKTsKIAogICAgIGVu
Y29kZXIgPDwgbGVuZ3RoIDw8IGlzOEJpdDsKLQotICAgIGlmIChpczhCaXQpCi0gICAgICAgIGVu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgp
OwotICAgIGVsc2UKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnMxNigpKSwgbGVuZ3Ro
ICogc2l6ZW9mKFVDaGFyKSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3Ry
aW5nLmJ5dGVzKCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KQEAg
LTExMiw3ICsxMDgsNyBAQCBzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBkZWNv
CiAKICAgICBDaGFyYWN0ZXJUeXBlKiBidWZmZXI7CiAgICAgU3RyaW5nIHN0cmluZyA9IFN0cmlu
Zzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIp
LCBsZW5ndGggKiBzaXplb2YoQ2hhcmFjdGVyVHlwZSkpKQorICAgIGlmICghZGVjb2Rlci5kZWNv
ZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpieXRlKj4oYnVm
ZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJhY3RlclR5cGUpIH0pKQogICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwogICAgIAogICAgIHJldHVybiBzdHJpbmc7CkBAIC0xNDIsMTMgKzEzOCwx
MyBAQCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gQ29kZXI8U3RyaW5nPjo6ZGVjCiAKIHZvaWQgQ29k
ZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNIQTE6OkRp
Z2VzdCYgZGlnZXN0KQogewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGRpZ2Vz
dC5kYXRhKCksIHNpemVvZihkaWdlc3QpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3Ro
RGF0YShkaWdlc3QpOwogfQogCiBzdGQ6Om9wdGlvbmFsPFNIQTE6OkRpZ2VzdD4gQ29kZXI8U0hB
MTo6RGlnZXN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgU0hBMTo6RGlnZXN0
IHRtcDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHRtcC5kYXRhKCks
IHNpemVvZih0bXApKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHRt
cCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgcmV0dXJuIHRtcDsKIH0KSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmgJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRD
b2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw3IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlciwgY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQogICAg
IHsKICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odmVjdG9yLnNpemUo
KSk7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6ZSgpICogc2l6ZW9m
KFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEodmVjdG9yKTsKICAg
ICB9CiAgICAgCiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5Pj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCkBAIC0xNzMsNyArMTczLDcgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAgICAgICBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHk+IHRlbXA7CiAgICAgICAgIHRlbXAuZ3JvdyhzaXplKTsKIAotICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KHRlbXAuZGF0YSgpKSwgc2l6ZSAqIHNpemVvZihUKSkpCisgICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGVGaXhlZExlbmd0aERhdGEodGVtcCkpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwogCiAgICAgICAgIHJldHVybiB0ZW1wOwpJbmRleDogU291cmNlL1dURi93dGYvcGVy
c2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmNwcAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSwyMyArMzEsMjEgQEAKIG5hbWVzcGFjZSBXVEYgewogbmFtZXNwYWNl
IFBlcnNpc3RlbmNlIHsKIAotRGVjb2Rlcjo6RGVjb2Rlcihjb25zdCB1aW50OF90KiBidWZmZXIs
IHNpemVfdCBidWZmZXJTaXplKQotICAgIDogbV9idWZmZXIoYnVmZmVyKQotICAgICwgbV9idWZm
ZXJQb3NpdGlvbihidWZmZXIpCi0gICAgLCBtX2J1ZmZlckVuZChidWZmZXIgKyBidWZmZXJTaXpl
KQorRGVjb2Rlcjo6RGVjb2RlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnVmZmVyKQorICAgIDog
bV9idWZmZXIoYnVmZmVyLmRhdGEoKSkKKyAgICAsIG1fYnVmZmVyUG9zaXRpb24oYnVmZmVyLmRh
dGEoKSkKKyAgICAsIG1fYnVmZmVyRW5kKGJ1ZmZlci5kYXRhKCkgKyBidWZmZXIuc2l6ZSgpKQog
ewogfQogCi1EZWNvZGVyOjp+RGVjb2RlcigpCi17Ci19CitEZWNvZGVyOjp+RGVjb2RlcigpID0g
ZGVmYXVsdDsKIAogYm9vbCBEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKHNp
emVfdCBzaXplKSBjb25zdAogewogICAgIHJldHVybiBzaXplIDw9IHN0YXRpY19jYXN0PHNpemVf
dD4obV9idWZmZXJFbmQgLSBtX2J1ZmZlclBvc2l0aW9uKTsKIH0KIAotY29uc3QgdWludDhfdCog
RGVjb2Rlcjo6YnVmZmVyUG9pbnRlckZvckRpcmVjdFJlYWQoc2l6ZV90IHNpemUpCitjb25zdCBz
dGQ6OmJ5dGUqIERlY29kZXI6OmJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFkKHNpemVfdCBzaXpl
KQogewogICAgIGlmICghYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihzaXplKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CkBAIC01NSwxNiArNTMsMTYgQEAgY29uc3QgdWludDhfdCogRGVj
b2Rlcjo6YnVmZmVyUG9pbnRlckZvcgogICAgIGF1dG8gZGF0YSA9IG1fYnVmZmVyUG9zaXRpb247
CiAgICAgbV9idWZmZXJQb3NpdGlvbiArPSBzaXplOwogCi0gICAgRW5jb2Rlcjo6dXBkYXRlQ2hl
Y2tzdW1Gb3JEYXRhKG1fc2hhMSwgZGF0YSwgc2l6ZSk7CisgICAgRW5jb2Rlcjo6dXBkYXRlQ2hl
Y2tzdW1Gb3JEYXRhKG1fc2hhMSwgU3BhbiB7IGRhdGEsIHNpemUgfSk7CiAgICAgcmV0dXJuIGRh
dGE7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqIGRh
dGEsIHNpemVfdCBzaXplKQorYm9vbCBEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEoU3Bh
bjxzdGQ6OmJ5dGU+IGRhdGEpCiB7Ci0gICAgYXV0byBidWZmZXIgPSBidWZmZXJQb2ludGVyRm9y
RGlyZWN0UmVhZChzaXplKTsKKyAgICBhdXRvIGJ1ZmZlciA9IGJ1ZmZlclBvaW50ZXJGb3JEaXJl
Y3RSZWFkKGRhdGEuc2l6ZSgpKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIG1lbWNweShkYXRhLCBidWZmZXIsIHNpemUpOworICAgIG1lbWNweShkYXRhLmRh
dGEoKSwgYnVmZmVyLCBkYXRhLnNpemUoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEz
OSw3ICsxMzcsNyBAQCBib29sIERlY29kZXI6OnZlcmlmeUNoZWNrc3VtKCkKICAgICBtX3NoYTEu
Y29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2VzdCBzYXZlZEhhc2g7
Ci0gICAgaWYgKCFkZWNvZGVGaXhlZExlbmd0aERhdGEoc2F2ZWRIYXNoLmRhdGEoKSwgc2l6ZW9m
KHNhdmVkSGFzaCkpKQorICAgIGlmICghZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHNhdmVkSGFzaCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBjb21wdXRlZEhhc2ggPT0gc2F2
ZWRIYXNoOwpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29k
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50
RGVjb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5j
ZS9QZXJzaXN0ZW50RGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAK
ICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9TSEExLmg+CisjaW5j
bHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENv
ZGVyLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMzUsNyArMzYsMTIgQEAgbmFtZXNwYWNlIFBl
cnNpc3RlbmNlIHsKIGNsYXNzIERlY29kZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgotICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyKGNvbnN0IHVpbnQ4X3Qq
IGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IERl
Y29kZXIoVCYmIGRhdGEpCisgICAgICAgIDogRGVjb2RlciB7IGFzQnl0ZXMoU3BhbiB7IHN0ZDo6
Zm9yd2FyZDxUPihkYXRhKSB9KSB9CisgICAgeworICAgIH0KKworICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBEZWNvZGVyKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgV1RGX0VYUE9SVF9QUklW
QVRFIH5EZWNvZGVyKCk7CiAKICAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9i
dWZmZXJFbmQgLSBtX2J1ZmZlcjsgfQpAQCAtNDMsNyArNDksMTEgQEAgcHVibGljOgogCiAgICAg
V1RGX0VYUE9SVF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIHZlcmlmeUNoZWNrc3Vt
KCk7CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqLCBzaXplX3QpOworICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVGaXhlZExlbmd0aERhdGEoU3Bhbjxz
dGQ6OmJ5dGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIGRlY29kZUZpeGVkTGVu
Z3RoRGF0YShUJiYgZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVGaXhlZExlbmd0
aERhdGEoYXNXcml0YWJsZUJ5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSkpOwor
ICAgIH0KIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVyYXRvcj4+KHN0ZDo6
b3B0aW9uYWw8Ym9vbD4mKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVjb2RlciYgb3BlcmF0
b3I+PihzdGQ6Om9wdGlvbmFsPHVpbnQ4X3Q+Jik7CkBAIC04NCw3ICs5NCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIG51bUVsZW1lbnRzIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90
Pjo6bWF4KCkgLyBzaXplb2YoVCkgJiYgYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihudW1F
bGVtZW50cyAqIHNpemVvZihUKSk7CiAgICAgfQogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIFdB
Uk5fVU5VU0VEX1JFVFVSTiBjb25zdCB1aW50OF90KiBidWZmZXJQb2ludGVyRm9yRGlyZWN0UmVh
ZChzaXplX3QgbnVtQnl0ZXMpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBXQVJOX1VOVVNFRF9S
RVRVUk4gY29uc3Qgc3RkOjpieXRlKiBidWZmZXJQb2ludGVyRm9yRGlyZWN0UmVhZChzaXplX3Qg
bnVtQnl0ZXMpOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSVBDRGVjb2RlciA9IGZh
bHNlOwogCkBAIC05Miw5ICsxMDIsOSBAQCBwcml2YXRlOgogICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKHNp
emVfdCkgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4gRGVjb2RlciYgZGVjb2Rl
TnVtYmVyKHN0ZDo6b3B0aW9uYWw8VHlwZT4mKTsKIAotICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVm
ZmVyOwotICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyUG9zaXRpb247Ci0gICAgY29uc3QgdWlu
dDhfdCogbV9idWZmZXJFbmQ7CisgICAgY29uc3Qgc3RkOjpieXRlKiBtX2J1ZmZlcjsKKyAgICBj
b25zdCBzdGQ6OmJ5dGUqIG1fYnVmZmVyUG9zaXRpb247CisgICAgY29uc3Qgc3RkOjpieXRlKiBt
X2J1ZmZlckVuZDsKIAogICAgIFNIQTEgbV9zaGExOwogfTsKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5jcHAJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzEsMzQgKzMxLDM0IEBACiBuYW1lc3BhY2UgV1RGIHsKIG5hbWVz
cGFjZSBQZXJzaXN0ZW5jZSB7CiAKLUVuY29kZXI6OkVuY29kZXIoKQotewotfQotCi1FbmNvZGVy
Ojp+RW5jb2RlcigpCi17Ci19CitFbmNvZGVyOjpFbmNvZGVyKCkgPSBkZWZhdWx0OworRW5jb2Rl
cjo6fkVuY29kZXIoKSA9IGRlZmF1bHQ7CiAKLXVpbnQ4X3QqIEVuY29kZXI6Omdyb3coc2l6ZV90
IHNpemUpCitzdGQ6OmJ5dGUqIEVuY29kZXI6Omdyb3coc2l6ZV90IHNpemUpCiB7CiAgICAgc2l6
ZV90IG5ld1Bvc2l0aW9uID0gbV9idWZmZXIuc2l6ZSgpOwogICAgIG1fYnVmZmVyLmdyb3cobV9i
dWZmZXIuc2l6ZSgpICsgc2l6ZSk7CiAgICAgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKSArIG5ld1Bv
c2l0aW9uOwogfQogCi12b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yRGF0YShTSEExJiBz
aGExLCBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3ZvaWQgRW5jb2Rlcjo6dXBk
YXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmIHNoYTEsIFNwYW48Y29uc3QgdWludDhfdD4gZGF0YSkK
K3sKKyAgICByZXR1cm4gdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKHNoYTEsIGFzQnl0ZXMoZGF0YSkp
OworfQorCit2b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yRGF0YShTSEExJiBzaGExLCBT
cGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKICAgICBhdXRvIHR5cGVTYWx0ID0gU2FsdDx1
aW50OF90Kj46OnZhbHVlOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7Ci0gICAgc2hhMS5hZGRCeXRlcyhk
YXRhLCBzaXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmdHlwZVNhbHQsIDEgfSk7Cisg
ICAgc2hhMS5hZGRCeXRlcyhkYXRhKTsKIH0KIAotdm9pZCBFbmNvZGVyOjplbmNvZGVGaXhlZExl
bmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCit2b2lkIEVuY29kZXI6
OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKLSAg
ICB1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhLCBzaXplKTsKKyAgICB1cGRhdGVD
aGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhKTsKIAotICAgIHVpbnQ4X3QqIGJ1ZmZlciA9IGdy
b3coc2l6ZSk7Ci0gICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7CisgICAgYXV0byogYnVm
ZmVyID0gZ3JvdyhkYXRhLnNpemUoKSk7CisgICAgbWVtY3B5KGJ1ZmZlciwgZGF0YS5kYXRhKCks
IGRhdGEuc2l6ZSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KQEAgLTY2LDcgKzY2
LDcgQEAgRW5jb2RlciYgRW5jb2Rlcjo6ZW5jb2RlTnVtYmVyKFR5cGUgdmFsdQogewogICAgIEVu
Y29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKG1fc2hhMSwgdmFsdWUpOwogCi0gICAgdWlu
dDhfdCogYnVmZmVyID0gZ3JvdyhzaXplb2YoVHlwZSkpOworICAgIGF1dG8qIGJ1ZmZlciA9IGdy
b3coc2l6ZW9mKFR5cGUpKTsKICAgICBtZW1jcHkoYnVmZmVyLCAmdmFsdWUsIHNpemVvZihUeXBl
KSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQpAQCAtMTI1LDcgKzEyNSw3IEBAIHZvaWQgRW5jb2Rl
cjo6ZW5jb2RlQ2hlY2tzdW0oKQogewogICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwogICAgIG1fc2hh
MS5jb21wdXRlSGFzaChoYXNoKTsKLSAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEoaGFzaC5kYXRh
KCksIGhhc2guc2l6ZSgpKTsKKyAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEoaGFzaCk7CiB9CiAK
IH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29k
ZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVy
c2lzdGVudEVuY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5j
bHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvU0hBMS5oPgorI2luY2x1ZGUg
PHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9wZXJz
aXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaD4KIApAQCAtNDMsNyArNDQsMTEgQEAgcHVibGljOgog
ICAgIFdURl9FWFBPUlRfUFJJVkFURSB+RW5jb2RlcigpOwogCiAgICAgV1RGX0VYUE9SVF9QUklW
QVRFIHZvaWQgZW5jb2RlQ2hlY2tzdW0oKTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBl
bmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCosIHNpemVfdCk7CisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48Y29uc3Qgc3RkOjpi
eXRlPik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBlbmNvZGVGaXhlZExlbmd0aERh
dGEoVCYmIGRhdGEpCisgICAgeworICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEoYXNCeXRl
cyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pKTsKKyAgICB9CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZW51bTxUPjo6dmFsdWU+KiA9
IG51bGxwdHI+CiAgICAgRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBUJiB0KQpAQCAtNzAsMjMg
Kzc1LDIyIEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRW5jb2RlciYgb3BlcmF0
b3I8PChmbG9hdCk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwo
ZG91YmxlKTsKIAotICAgIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1f
YnVmZmVyLmRhdGEoKTsgfQotICAgIHNpemVfdCBidWZmZXJTaXplKCkgY29uc3QgeyByZXR1cm4g
bV9idWZmZXIuc2l6ZSgpOyB9Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQg
dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKKyAg
ICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXI7
IH0KKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tz
dW1Gb3JEYXRhKFNIQTEmLCBTcGFuPGNvbnN0IHVpbnQ4X3Q+KTsKKyAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBTcGFuPGNvbnN0
IHN0ZDo6Ynl0ZT4pOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPiBzdGF0aWMgdm9pZCB1
cGRhdGVDaGVja3N1bUZvck51bWJlcihTSEExJiwgVHlwZSk7CiAKICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNJUENFbmNvZGVyID0gZmFsc2U7CiAKIHByaXZhdGU6Ci0KICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUeXBlPiBFbmNvZGVyJiBlbmNvZGVOdW1iZXIoVHlwZSk7CiAKLSAgICB1aW50
OF90KiBncm93KHNpemVfdCk7CisgICAgc3RkOjpieXRlKiBncm93KHNpemVfdCk7CiAKICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4gc3RydWN0IFNhbHQ7CiAKLSAgICBWZWN0b3I8dWludDhf
dCwgNDA5Nj4gbV9idWZmZXI7CisgICAgVmVjdG9yPHN0ZDo6Ynl0ZSwgNDA5Nj4gbV9idWZmZXI7
CiAgICAgU0hBMSBtX3NoYTE7CiB9OwogCkBAIC0xMDYsOCArMTEwLDggQEAgdGVtcGxhdGUgPHR5
cGVuYW1lIFR5cGU+CiB2b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKFNIQTEm
IHNoYTEsIFR5cGUgdmFsdWUpCiB7CiAgICAgYXV0byB0eXBlU2FsdCA9IFNhbHQ8VHlwZT46OnZh
bHVlOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnR5cGVT
YWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7Ci0gICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9j
YXN0PHVpbnQ4X3QqPigmdmFsdWUpLCBzaXplb2YodmFsdWUpKTsKKyAgICBzaGExLmFkZEJ5dGVz
KFNwYW4geyAmdHlwZVNhbHQsIDEgfSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgJnZhbHVl
LCAxIH0pOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0MCwzOSArMTQwLDM5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRp
YyAKICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSAnPSc7CiB9CiAKLXN0
YXRpYyBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoY29uc3QgdWludDhfdCog
aW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5
IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4gYmFz
ZTY0RW5jb2RlSW50ZXJuYWwoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0LCBCYXNlNjRFbmNv
ZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewotICAgIGF1dG8gZGVzdGlu
YXRpb25MZW5ndGggPSBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShpbnB1dExlbmd0aCwgcG9s
aWN5KTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uTGVuZ3RoID0gY2FsY3VsYXRlQmFzZTY0RW5jb2Rl
ZFNpemUoaW5wdXQuc2l6ZSgpLCBwb2xpY3kpOwogICAgIGlmICghZGVzdGluYXRpb25MZW5ndGgp
CiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBWZWN0b3I8dWludDhfdD4gZGVzdGluYXRpb25W
ZWN0b3IoZGVzdGluYXRpb25MZW5ndGgpOwotICAgIGJhc2U2NEVuY29kZUludGVybmFsKGlucHV0
RGF0YUJ1ZmZlciwgaW5wdXRMZW5ndGgsIGRlc3RpbmF0aW9uVmVjdG9yLmRhdGEoKSwgZGVzdGlu
YXRpb25MZW5ndGgsIHBvbGljeSwgbWFwKTsKKyAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChyZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCks
IGRlc3RpbmF0aW9uVmVjdG9yLmRhdGEoKSwgZGVzdGluYXRpb25MZW5ndGgsIHBvbGljeSwgbWFw
KTsKICAgICByZXR1cm4gZGVzdGluYXRpb25WZWN0b3I7CiB9CiAKLXZvaWQgYmFzZTY0RW5jb2Rl
KGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIFVDaGFy
KiBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uTGVuZ3RoLCBCYXNl
NjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordm9pZCBiYXNlNjRF
bmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0LCBVQ2hhciogZGVzdGluYXRpb25EYXRh
QnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkxlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBv
bGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKICAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3Ro
KQogICAgICAgICByZXR1cm47Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8
Y29uc3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlv
bkRhdGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7CisgICAgYmFzZTY0
RW5jb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0
YSgpKSwgaW5wdXQuc2l6ZSgpLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVu
Z3RoLCBwb2xpY3ksIG1hcCk7CiB9CiAKLXZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqIGlu
cHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIExDaGFyKiBkZXN0aW5hdGlvbkRh
dGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uTGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kg
cG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordm9pZCBiYXNlNjRFbmNvZGUoU3Bhbjxjb25z
dCBzdGQ6OmJ5dGU+IGlucHV0LCBMQ2hhciogZGVzdGluYXRpb25EYXRhQnVmZmVyLCB1bnNpZ25l
ZCBkZXN0aW5hdGlvbkxlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5j
b2RlTWFwIG1hcCkKIHsKICAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQogICAgICAgICByZXR1
cm47Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+
KGlucHV0RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRl
c3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7CisgICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6
ZSgpLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1h
cCk7CiB9CiAKLVZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCB2b2lk
KiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xp
Y3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQorVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVu
Y29kZVRvVmVjdG9yKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9s
aWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5j
b2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZlciks
IGlucHV0TGVuZ3RoLCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZUludGVy
bmFsKGlucHV0LCBwb2xpY3ksIG1hcCk7CiB9CiAKLVN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmlu
Zyhjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNl
NjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQorU3RyaW5nIGJhc2U2
NEVuY29kZVRvU3RyaW5nKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwgQmFzZTY0RW5jb2Rl
UG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gbWFrZVN0
cmluZyhiYXNlNjRFbmNvZGVkKGlucHV0RGF0YUJ1ZmZlciwgaW5wdXRMZW5ndGgsIHBvbGljeSwg
bWFwKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChpbnB1dCwgcG9saWN5
LCBtYXApKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8
VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGVJbnRlcm5hbChjb25zdCBUKiBpbnB1dERhdGFC
dWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9u
cz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKQEAgLTI1NCw4NCArMjU0LDI3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBzdGQ6Om9wdGlvbmEKICAgICByZXR1cm4gZGVzdGlu
YXRpb247CiB9CiAKLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUo
Y29uc3QgU3RyaW5nJiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlv
bnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW5wdXQu
bGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGggfHwgaW5wdXQuaXM4Qml0KCkpCi0gICAgICAgIHJl
dHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG9w
dGlvbnMsIG1hcCk7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJh
Y3RlcnMxNigpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVj
dG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3RyaW5nVmlldyBpbnB1dCwgT3B0aW9uU2V0PEJh
c2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAg
dW5zaWduZWQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGggfHwgaW5w
dXQuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5j
aGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7Ci0gICAgcmV0dXJuIGJhc2U2NERl
Y29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7
Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9w
dGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgaWYgKGlucHV0LnNpemUoKSA+IHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuZGF0YSgpLCBp
bnB1dC5zaXplKCksIG9wdGlvbnMsIG1hcCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVp
bnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCwgT3B0aW9uU2V0
PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCitzdGQ6
Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKFNwYW48Y29uc3Qgc3RkOjpi
eXRlPiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2
NERlY29kZU1hcCBtYXApCiB7CiAgICAgaWYgKGlucHV0LnNpemUoKSA+IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAg
ICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpLCBvcHRpb25zLCBtYXApOwogfQogCi1z
dGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IHVpbnQ4X3Qq
IGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9w
dGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUlu
dGVybmFsKGRhdGEsIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKLX0KLQotc3RkOjpvcHRpb25hbDxW
ZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBs
ZW5ndGgsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRpb25zLCBCYXNlNjREZWNv
ZGVNYXAgbWFwKQotewotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJl
dF9jYXN0PGNvbnN0IExDaGFyKj4oZGF0YSksIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKLX0KLQot
c3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBTdHJp
bmcmIGlucHV0KQorc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShj
b25zdCBTdHJpbmcmIGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9u
cywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBpbnB1dC5s
ZW5ndGgoKTsKICAgICBpZiAoIWxlbmd0aCB8fCBpbnB1dC5pczhCaXQoKSkKLSAgICAgICAgcmV0
dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgeyB9
LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFs
KGlucHV0LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIHsgfSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwp
OworICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgo
KSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5h
bChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOwogfQogCi1zdGQ6
Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFN0cmluZ1ZpZXcgaW5w
dXQpCitzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKFN0cmluZ1Zp
ZXcgaW5wdXQsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRpb25zLCBCYXNlNjRE
ZWNvZGVNYXAgbWFwKQogewogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgpOwog
ICAgIGlmICghbGVuZ3RoIHx8IGlucHV0LmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gYmFzZTY0
RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERl
Y29kZU1hcDo6VVJMKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hh
cmFjdGVyczE2KCksIGxlbmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7Ci19Ci0KLXN0
ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBpbnB1dCkKLXsKLSAgICBpZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
ICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUo
KSwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVjdG9y
PHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCkKLXsK
LSAgICBpZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1h
eCgpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHJldHVybiBiYXNlNjREZWNv
ZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkp
LCBpbnB1dC5zaXplKCksIHsgfSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOwotfQotCi1zdGQ6Om9w
dGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGRh
dGEsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwo
ZGF0YSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKLX0KLQotc3RkOjpvcHRp
b25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBjaGFyKiBkYXRhLCB1
bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBsZW5ndGgsIHsgfSwgQmFzZTY0RGVj
b2RlTWFwOjpVUkwpOworICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQu
Y2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOworICAgIHJldHVybiBiYXNlNjRE
ZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXAp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvQmFz
ZTY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuaAkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuaAkod29ya2luZyBjb3B5
KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRl
IDx3dGYvT3B0aW9uU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCkBAIC01Niw1NCArNTcsMzUgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhpbXVt
QmFzZTY0TAogLy8gUmF0aGVyIHRoYW4gYmVpbmcgcGVyZmVjdGx5IHByZWNpc2UsIHRoaXMgaXMg
YSBiaXQgY29uc2VydmF0aXZlLgogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhpbXVtQmFz
ZTY0RW5jb2RlcklucHV0QnVmZmVyU2l6ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+
OjptYXgoKSAvIDc3ICogNzYgLyA0ICogMyAtIDI7CiAKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQsIFVDaGFyKiwgdW5zaWduZWQsIEJh
c2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJh
c2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci1XVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVkLCBMQ2hhciosIHVu
c2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5z
ZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOworV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPiwg
VUNoYXIqIGRlc3RpbmF0aW9uQnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkJ1ZmZlclNpemUs
IEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMs
IEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+LCBMQ2hhciog
ZGVzdGluYXRpb25CdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uQnVmZmVyU2l6ZSwgQmFzZTY0
RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0
RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKIAotV1RGX0VYUE9SVF9QUklW
QVRFIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCB2b2lkKiwgdW5z
aWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNl
cnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci1WZWN0
b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jiwg
QmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywg
QmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKLVZlY3Rvcjx1aW50
OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8Y2hhcj4mLCBCYXNlNjRFbmNv
ZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNv
ZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2
NEVuY29kZVRvVmVjdG9yKGNvbnN0IENTdHJpbmcmLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNl
NjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRF
bmNvZGVNYXA6OkRlZmF1bHQpOwotCi1XVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIGJhc2U2NEVu
Y29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgQmFzZTY0RW5jb2RlUG9saWN5ID0g
QmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFz
ZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKLVN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25z
dCBWZWN0b3I8dWludDhfdD4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xp
Y3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRl
ZmF1bHQpOwotU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3RvcjxjaGFyPiYs
IEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMs
IEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci1TdHJpbmcgYmFz
ZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgQ1N0cmluZyYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJh
c2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2
NEVuY29kZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgVmVjdG9yPHVpbnQ4X3Q+
IGJhc2U2NEVuY29kZVRvVmVjdG9yKFNwYW48Y29uc3Qgc3RkOjpieXRlPiwgQmFzZTY0RW5jb2Rl
UG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2Rl
TWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFZl
Y3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihUJiYsIEJhc2U2NEVuY29kZVBvbGlj
eSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9
IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CiAKK1dURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcg
YmFzZTY0RW5jb2RlVG9TdHJpbmcoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+LCBCYXNlNjRFbmNvZGVQ
b2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVN
YXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3Ry
aW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKFQmJiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0
RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5j
b2RlTWFwOjpEZWZhdWx0KTsKKworV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0aW9uYWw8VmVj
dG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+LCBPcHRpb25T
ZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERl
Y29kZU1hcDo6RGVmYXVsdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0
b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBTdHJpbmcmLCBPcHRpb25TZXQ8QmFzZTY0
RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6
RGVmYXVsdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGJhc2U2NERlY29kZShTdHJpbmdWaWV3LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9u
cz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7Ci1X
VEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERl
Y29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9u
cz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7Ci1X
VEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERl
Y29kZShjb25zdCBWZWN0b3I8Y2hhcj4mLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4g
PSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7Ci1XVEZf
RVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29k
ZShjb25zdCB1aW50OF90KiwgdW5zaWduZWQsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25z
PiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKLVdU
Rl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVj
b2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+
ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRlZmF1bHQpOwotCi1p
bmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1h
cCBtYXApCi17Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlucHV0LmRhdGEoKSwg
aW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7Ci19Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6
OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVt
b3ZlX3JlZmVyZW5jZV90PFQ+PiwgU3RyaW5nPiAmJiAhc3RkOjppc19zYW1lX3Y8c3RkOjpyZW1v
dmVfY29uc3RfdDxzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxUPj4sIFN0cmluZ1ZpZXc+PiogPSBu
dWxscHRyPgorc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShUJiYs
IE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFwID0g
QmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKIAotaW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNl
NjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBCYXNlNjRFbmNvZGVQ
b2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordGVtcGxhdGU8dHlwZW5hbWUgVD4g
VmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKFQmJiBpbnB1dCwgQmFzZTY0RW5j
b2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gYmFz
ZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSwgbWFw
KTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoYXNCeXRlcyhTcGFuIHsgc3RkOjpm
b3J3YXJkPFQ+KGlucHV0KSB9KSwgcG9saWN5LCBtYXApOwogfQogCi1pbmxpbmUgVmVjdG9yPHVp
bnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IENTdHJpbmcmIGlucHV0LCBCYXNlNjRF
bmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordGVtcGxhdGU8dHlwZW5h
bWUgVD4gU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKFQmJiBpbnB1dCwgQmFzZTY0RW5jb2Rl
UG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gYmFzZTY0
RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwgcG9saWN5LCBtYXAp
OworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhhc0J5dGVzKFNwYW4geyBzdGQ6OmZv
cndhcmQ8VD4oaW5wdXQpIH0pLCBwb2xpY3ksIG1hcCk7CiB9CiAKLWlubGluZSBTdHJpbmcgYmFz
ZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCwgQmFzZTY0RW5j
b2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZV92PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8
c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmc+ICYmICFzdGQ6OmlzX3NhbWVfdjxz
dGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+PiwgU3RyaW5nVmll
dz4+Kj4KK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoVCYmIGlu
cHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2Rl
TWFwIG1hcCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5wdXQuZGF0YSgp
LCBpbnB1dC5zaXplKCksIHBvbGljeSwgbWFwKTsKLX0KLQotaW5saW5lIFN0cmluZyBiYXNlNjRF
bmNvZGVUb1N0cmluZyhjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xp
Y3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQotewotICAgIHJldHVybiBiYXNlNjRFbmNv
ZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5LCBtYXApOwotfQot
Ci1pbmxpbmUgU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IENTdHJpbmcmIGlucHV0
LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQotewotICAg
IHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0Lmxlbmd0aCgp
LCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZShhc0J5dGVzKFNwYW4geyBz
dGQ6OmZvcndhcmQ8VD4oaW5wdXQpIH0pLCBvcHRpb25zLCBtYXApOwogfQogCiAKQEAgLTExMiw2
MSArOTQsNTcgQEAgaW5saW5lIFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdAogLy8g
VGhpcyBmb3JtYXQgdXNlcyAnLScgYW5kICdfJyBpbnN0ZWFkIG9mICcrJyBhbmQgJy8nIHJlc3Bl
Y3RpdmVseS4KIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVZlY3Rvcjx1aW50
OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihjb25zdCB2b2lkKiwgdW5zaWduZWQpOwotVmVj
dG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKGNvbnN0IFZlY3Rv
cjxjaGFyPiYpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKGNvbnN0
IENTdHJpbmcmKTsKK1ZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3RvcihTcGFu
PGNvbnN0IHN0ZDo6Ynl0ZT4pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVjdG9yPHVpbnQ4X3Q+
IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKFQmJik7CiAKLVN0cmluZyBiYXNlNjRVUkxFbmNvZGVU
b1N0cmluZyhjb25zdCB2b2lkKiwgdW5zaWduZWQpOwotU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRv
U3RyaW5nKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOwotU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRv
U3RyaW5nKGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3Ry
aW5nKGNvbnN0IENTdHJpbmcmKTsKK1N0cmluZyBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhTcGFu
PGNvbnN0IHN0ZDo6Ynl0ZT4pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGJhc2U2NFVS
TEVuY29kZVRvU3RyaW5nKFQmJik7CiAKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFs
PFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFN0cmluZyYpOwotV1RGX0VY
UE9SVF9QUklWQVRFIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNv
ZGUoU3RyaW5nVmlldyk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8
dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mKTsKLVdURl9F
WFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVj
b2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0aW9u
YWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgdWludDhfdCosIHVuc2ln
bmVkKTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4g
YmFzZTY0VVJMRGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCk7CitzdGQ6Om9wdGlvbmFsPFZl
Y3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7Citz
dGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFN0cmlu
ZyYpOworc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShTdHJp
bmdWaWV3KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNf
c2FtZV92PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBT
dHJpbmc+ICYmICFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3Zl
X3JlZmVyZW5jZV90PFQ+PiwgU3RyaW5nVmlldz4+KiA9IG51bGxwdHI+CitzdGQ6Om9wdGlvbmFs
PFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFQmJik7CiAKLWlubGluZSBWZWN0b3I8
dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3Qgdm9pZCogaW5wdXQsIHVuc2ln
bmVkIGxlbmd0aCkKK2lubGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0
b3IoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNv
ZGVUb1ZlY3RvcihpbnB1dCwgbGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0
RW5jb2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dCwg
QmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKIH0KIAotaW5s
aW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8
dWludDhfdD4mIGlucHV0KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVjdG9yPHVpbnQ4X3Q+IGJh
c2U2NFVSTEVuY29kZVRvVmVjdG9yKFQmJiBpbnB1dCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5j
b2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJhc2U2NEVuY29kZVBvbGlj
eTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRv
VmVjdG9yKHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCksIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBC
YXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0
VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCkKK2lubGluZSBTdHJp
bmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQog
ewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRhKCksIGlucHV0LnNp
emUoKSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKKyAg
ICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeTo6
VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBWZWN0b3I8dWludDhfdD4g
YmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgQ1N0cmluZyYgaW5wdXQpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoVCYmIGlucHV0KQogewot
ICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRhKCksIGlucHV0Lmxlbmd0
aCgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAg
IHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhzdGQ6OmZvcndhcmQ8VD4oaW5wdXQpLCBCYXNl
NjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQogCi1pbmxpbmUg
U3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqIGlucHV0LCB1bnNpZ25l
ZCBsZW5ndGgpCitpbmxpbmUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVS
TERlY29kZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2
NEVuY29kZVRvU3RyaW5nKGlucHV0LCBsZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBC
YXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZShpbnB1dCwgeyB9
LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBTdHJpbmcgYmFzZTY0VVJMRW5j
b2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKK2lubGluZSBzdGQ6Om9w
dGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFN0cmluZyYgaW5w
dXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LmRhdGEoKSwgaW5w
dXQuc2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwp
OworICAgIHJldHVybiBiYXNlNjREZWNvZGUoaW5wdXQsIHsgfSwgQmFzZTY0RGVjb2RlTWFwOjpV
UkwpOwogfQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IFZl
Y3RvcjxjaGFyPiYgaW5wdXQpCitpbmxpbmUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+
IGJhc2U2NFVSTERlY29kZShTdHJpbmdWaWV3IGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRF
bmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgQmFzZTY0RW5jb2RlUG9s
aWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKKyAgICByZXR1cm4gYmFzZTY0RGVjb2Rl
KGlucHV0LCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKIH0KIAotaW5saW5lIFN0cmluZyBi
YXNlNjRVUkxFbmNvZGVUb1N0cmluZyhjb25zdCBDU3RyaW5nJiBpbnB1dCkKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZV92PHN0ZDo6cmVtb3ZlX2Nv
bnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmc+ICYmICFzdGQ6OmlzX3Nh
bWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+PiwgU3Ry
aW5nVmlldz4+Kj4KK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNv
ZGUoVCYmIGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5k
YXRhKCksIGlucHV0Lmxlbmd0aCgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5j
b2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjRVUkxEZWNvZGUoYXNCeXRlcyhTcGFuIHsg
c3RkOjpmb3J3YXJkPFQ+KGlucHV0KSB9KSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IHN0YXRpYyBpbmxpbmUgYm9vbCBpc0Jhc2U2NE9yQmFzZTY0VVJMQ2hhcmFjdGVy
KENoYXJhY3RlclR5cGUgYykKQEAgLTIwOCw1NyArMTg2LDM2IEBAIGlubGluZSB1bnNpZ25lZCBj
YWxjdWxhdGVCYXNlNjRFbmNvZGVkU2kKIH0KIAogc3RydWN0IEJhc2U2NFNwZWNpZmljYXRpb24g
ewotICAgIGNvbnN0IHZvaWQqIGlucHV0RGF0YTsKLSAgICB1bnNpZ25lZCBpbnB1dExlbmd0aDsK
KyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXREYXRhOwogICAgIEJhc2U2NEVuY29kZVBv
bGljeSBwb2xpY3k7CiAgICAgQmFzZTY0RW5jb2RlTWFwIG1hcDsKIH07CiAKLWlubGluZSBCYXNl
NjRTcGVjaWZpY2F0aW9uIGJhc2U2NEVuY29kZWQoY29uc3Qgdm9pZCogaW5wdXREYXRhLCB1bnNp
Z25lZCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9IEJhc2U2NEVuY29k
ZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCBtYXAgPSBCYXNlNjRFbmNv
ZGVNYXA6OkRlZmF1bHQpCi17Ci0gICAgcmV0dXJuIHsgaW5wdXREYXRhLCBpbnB1dExlbmd0aCwg
cG9saWN5LCBtYXAgfTsKLX0KLQotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5j
b2RlZChjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9s
aWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcykKLXsKLSAgICByZXR1cm4g
YmFzZTY0RW5jb2RlZChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5KTsKLX0KLQot
aW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChjb25zdCBWZWN0b3I8Y2hh
cj4mIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5
OjpEb05vdEluc2VydExGcykKLXsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5kYXRh
KCksIGlucHV0LnNpemUoKSwgcG9saWN5KTsKLX0KLQotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRp
b24gYmFzZTY0RW5jb2RlZChjb25zdCBDU3RyaW5nJiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5
IHBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMpCi17Ci0gICAgcmV0
dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwgcG9saWN5KTsK
LX0KLQotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChjb25zdCB2
b2lkKiBpbnB1dERhdGEsIHVuc2lnbmVkIGlucHV0TGVuZ3RoKQoraW5saW5lIEJhc2U2NFNwZWNp
ZmljYXRpb24gYmFzZTY0RW5jb2RlZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQsIEJhc2U2
NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZz
LCBCYXNlNjRFbmNvZGVNYXAgbWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KQogewotICAg
IHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0RGF0YSwgaW5wdXRMZW5ndGgsIEJhc2U2NEVuY29k
ZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIHsgaW5wdXQs
IHBvbGljeSwgbWFwIH07CiB9CiAKLWlubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NFVS
TEVuY29kZWQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChUJiYgaW5wdXQsIEJhc2U2NEVu
Y29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBC
YXNlNjRFbmNvZGVNYXAgbWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KQogewotICAgIHJl
dHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRFbmNv
ZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjRF
bmNvZGVkKGFzQnl0ZXMoU3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCkgfSksIHBvbGljeSwg
bWFwKTsKIH0KIAotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChj
b25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0KQoraW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFz
ZTY0VVJMRW5jb2RlZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCiB7Ci0gICAgcmV0dXJu
IGJhc2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29k
ZWQoaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7
CiB9CiAKLWlubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NFVSTEVuY29kZWQoY29uc3Qg
Q1N0cmluZyYgaW5wdXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBCYXNlNjRTcGVjaWZpY2F0aW9u
IGJhc2U2NFVSTEVuY29kZWQoVCYmIGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVk
KGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBC
YXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoYXNCeXRlcyhT
cGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGlucHV0KSB9KSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkws
IEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKIH0KIAogdGVtcGxhdGU8PiBjbGFzcyBTdHJpbmdUeXBl
QWRhcHRlcjxCYXNlNjRTcGVjaWZpY2F0aW9uPiB7CiBwdWJsaWM6CiAgICAgU3RyaW5nVHlwZUFk
YXB0ZXIoY29uc3QgQmFzZTY0U3BlY2lmaWNhdGlvbiYgYmFzZTY0KQogICAgICAgICA6IG1fYmFz
ZTY0IHsgYmFzZTY0IH0KLSAgICAgICAgLCBtX2VuY29kZWRMZW5ndGggeyBjYWxjdWxhdGVCYXNl
NjRFbmNvZGVkU2l6ZShiYXNlNjQuaW5wdXRMZW5ndGgsIGJhc2U2NC5wb2xpY3kpIH0KKyAgICAg
ICAgLCBtX2VuY29kZWRMZW5ndGggeyBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShiYXNlNjQu
aW5wdXREYXRhLnNpemUoKSwgYmFzZTY0LnBvbGljeSkgfQogICAgIHsKICAgICB9CiAKQEAgLTI2
Nyw3ICsyMjQsNyBAQCBwdWJsaWM6CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPiB2b2lkIHdyaXRlVG8oQ2hhcmFjdGVyVHlwZSogZGVzdGluYXRpb24pIGNvbnN0CiAgICAg
ewotICAgICAgICBiYXNlNjRFbmNvZGUobV9iYXNlNjQuaW5wdXREYXRhLCBtX2Jhc2U2NC5pbnB1
dExlbmd0aCwgZGVzdGluYXRpb24sIG1fZW5jb2RlZExlbmd0aCwgbV9iYXNlNjQucG9saWN5LCBt
X2Jhc2U2NC5tYXApOworICAgICAgICBiYXNlNjRFbmNvZGUobV9iYXNlNjQuaW5wdXREYXRhLCBk
ZXN0aW5hdGlvbiwgbV9lbmNvZGVkTGVuZ3RoLCBtX2Jhc2U2NC5wb2xpY3ksIG1fYmFzZTY0Lm1h
cCk7CiAgICAgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9DU3RyaW5n
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9DU3RyaW5nLmgJKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KICNpbmNsdWRl
IDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
U3Bhbi5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtMzksOSArNDAsMTEgQEAgREVDTEFSRV9B
TExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoQwogY2xhc3MgQ1N0cmluZ0J1ZmZlciBmaW5h
bCA6IHB1YmxpYyBSZWZDb3VudGVkPENTdHJpbmdCdWZmZXI+IHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihDU3RyaW5nQnVmZmVyKTsKIHB1YmxpYzoK
LSAgICBjb25zdCBjaGFyKiBkYXRhKCkgeyByZXR1cm4gbXV0YWJsZURhdGEoKTsgfQorICAgIGNv
bnN0IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PENTdHJpbmdCdWZmZXIq
Pih0aGlzKS0+bXV0YWJsZURhdGEoKTsgfQogICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJl
dHVybiBtX2xlbmd0aDsgfQogCisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGJ5dGVzKCkgY29u
c3QgeyByZXR1cm4gYXNCeXRlcyhTcGFuIHsgZGF0YSgpLCBsZW5ndGgoKSB9KTsgfQorCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDU3RyaW5nOwogCkBAIC02Niw2ICs2OSwyMCBAQCBwdWJs
aWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBDU3RyaW5nIG5ld1VuaW5pdGlhbGl6
ZWQoc2l6ZV90IGxlbmd0aCwgY2hhciomIGNoYXJhY3RlckJ1ZmZlcik7CiAgICAgQ1N0cmluZyhI
YXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IG1fYnVmZmVyKEhhc2hUYWJsZURlbGV0ZWRWYWx1
ZSkgeyB9CiAKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKG1fYnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIG1fYnVmZmVyLT5ieXRl
cygpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFNwYW48c3RkOjpieXRlPiBt
dXRhYmxlQnl0ZXMoKQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8gbXV0YWJsZURhdGEgPSB0aGlz
LT5tdXRhYmxlRGF0YSgpKQorICAgICAgICAgICAgcmV0dXJuIGFzV3JpdGFibGVCeXRlcyhTcGFu
IHsgbXV0YWJsZURhdGEsIG1fYnVmZmVyLT5sZW5ndGgoKSB9KTsKKyAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICB9CisKICAgICBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3QKICAgICB7CiAgICAgICAg
IHJldHVybiBtX2J1ZmZlciA/IG1fYnVmZmVyLT5kYXRhKCkgOiBudWxscHRyOwpJbmRleDogU291
cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvdGV4dC9TdHJpbmdWaWV3LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3Rm
L3RleHQvU3RyaW5nVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5NCw4IEBAIHB1Ymxp
YzoKICAgICBjb25zdCBMQ2hhciogY2hhcmFjdGVyczgoKSBjb25zdDsKICAgICBjb25zdCBVQ2hh
ciogY2hhcmFjdGVyczE2KCkgY29uc3Q7CiAKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0
ZXMoKSBjb25zdDsKKwogICAgIGJvb2wgaXNBbGxBU0NJSSgpIGNvbnN0OwogCiAgICAgU3RyaW5n
IHRvU3RyaW5nKCkgY29uc3Q7CkBAIC00MjQsNiArNDI2LDEzIEBAIGlubGluZSBjb25zdCBVQ2hh
ciogU3RyaW5nVmlldzo6Y2hhcmFjdGUKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgVUNo
YXIqPihtX2NoYXJhY3RlcnMpOwogfQogCitpbmxpbmUgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IFN0
cmluZ1ZpZXc6OmJ5dGVzKCkgY29uc3QKK3sKKyAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgIHJl
dHVybiBhc0J5dGVzKFNwYW4geyBjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSB9KTsKKyAgICByZXR1
cm4gYXNCeXRlcyhTcGFuIHsgY2hhcmFjdGVyczE2KCksIGxlbmd0aCgpIH0pOworfQorCiBpbmxp
bmUgYm9vbCBTdHJpbmdWaWV3Ojppc0FsbEFTQ0lJKCkgY29uc3QKIHsKICAgICBpZiAoaXM4Qml0
KCkpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2
LDcgQEAKIAogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgor
I2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQVNDSUlMaXRlcmFsLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KQEAgLTEzNCw2ICsxMzUsNyBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiAhbV9pbXBsIHx8IG1faW1wbC0+aXM4Qml0
KCk7IH0KIAogICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9pbXBs
ID8gbV9pbXBsLT5sZW5ndGgoKSAqIChpczhCaXQoKSA/IHNpemVvZihMQ2hhcikgOiBzaXplb2Yo
VUNoYXIpKSA6IDA7IH0KKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25zdDsK
IAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBDU3RyaW5nIGFzY2lpKCkgY29uc3Q7CiAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIENTdHJpbmcgbGF0aW4xKCkgY29uc3Q7CkBAIC00ODMsNiArNDg1LDE2
IEBAIHRlbXBsYXRlPD4gaW5saW5lIGNvbnN0IFVDaGFyKiBTdHJpbmc6OmMKICAgICByZXR1cm4g
Y2hhcmFjdGVyczE2KCk7CiB9CiAKK2lubGluZSBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gU3RyaW5n
OjpieXRlcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ltcGwpCisgICAgICAgIHJldHVybiB7IH07
CisKKyAgICBpZiAobV9pbXBsLT5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGFzQnl0ZXMoU3Bh
biB7IG1faW1wbC0+Y2hhcmFjdGVyczgoKSwgbV9pbXBsLT5sZW5ndGgoKSB9KTsKKyAgICByZXR1
cm4gYXNCeXRlcyhTcGFuIHsgbV9pbXBsLT5jaGFyYWN0ZXJzMTYoKSwgbV9pbXBsLT5sZW5ndGgo
KSB9KTsKK30KKwogaW5saW5lIFVDaGFyIFN0cmluZzo6Y2hhcmFjdGVyQXQodW5zaWduZWQgaW5k
ZXgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ltcGwgfHwgaW5kZXggPj0gbV9pbXBsLT5sZW5ndGgo
KSkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzYzLDkgKzM2Myw5IEBAIFN0cmluZyBjcmVhdGVUZW1wb3JhcnlEaXJlY3RvcnkoKQog
ICAgIH0pOwogfQogCi1ib29sIHVubWFwVmlld09mRmlsZSh2b2lkKiBidWZmZXIsIHNpemVfdCkK
K2Jvb2wgdW5tYXBWaWV3T2ZGaWxlKFNwYW48c3RkOjpieXRlPiBkYXRhKQogewotICAgIHJldHVy
biBVbm1hcFZpZXdPZkZpbGUoYnVmZmVyKTsKKyAgICByZXR1cm4gVW5tYXBWaWV3T2ZGaWxlKGRh
dGEuZGF0YSgpKTsKIH0KIAogYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0
Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBGaWxlT3Blbk1vZGUgb3Blbk1vZGUsIE1hcHBlZEZpbGVN
b2RlKQpAQCAtMzc0LDcgKzM3NCw3IEBAIGJvb2wgTWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5k
bGUoUGxhdGYKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byBzaXplID0gZmlsZVNp
emUoaGFuZGxlKTsKLSAgICBpZiAoIXNpemUgfHwgKnNpemUgPiBzdGQ6Om51bWVyaWNfbGltaXRz
PHNpemVfdD46Om1heCgpIHx8ICpzaXplID4gc3RkOjpudW1lcmljX2xpbWl0czxkZWNsdHlwZSht
X2ZpbGVTaXplKT46Om1heCgpKSB7CisgICAgaWYgKCFzaXplIHx8ICpzaXplID4gc3RkOjpudW1l
cmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSB8fCAqc2l6ZSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8
ZGVjbHR5cGUobV9maWxlRGF0YS5zaXplKCkpPjo6bWF4KCkpIHsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIApAQCAtNDAzLDExICs0MDMsMTIgQEAgYm9vbCBNYXBwZWRGaWxlRGF0YTo6
bWFwRmlsZUhhbmRsZShQbGF0ZgogICAgIGlmICghbWFwcGluZykKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgbV9maWxlRGF0YSA9IE1hcFZpZXdPZkZpbGUobWFwcGluZywgZGVzaXJlZEFj
Y2VzcywgMCwgMCwgKnNpemUpOworICAgIGF1dG8gZGF0YSA9IE1hcFZpZXdPZkZpbGUobWFwcGlu
ZywgZGVzaXJlZEFjY2VzcywgMCwgMCwgKnNpemUpOwogICAgIENsb3NlSGFuZGxlKG1hcHBpbmcp
OwotICAgIGlmICghbV9maWxlRGF0YSkKKyAgICBpZiAoIWRhdGEpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBtX2ZpbGVTaXplID0gKnNpemU7CisKKyAgICBtX2ZpbGVEYXRhID0gU3BhbiB7
IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpieXRlKj4oZGF0YSksICpzaXplIH07CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBACisyMDIxLTA2
LTExICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBBZG9wdCBTcGFu
IGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBbV0lQXQorCisgICAgICAgICogTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0
Lmg6CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHQ6OmVuY29kZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHQ6OmRlY29kZSk6CisgICAgICAgICogTW9kdWxlcy9o
aWdobGlnaHQvQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFw
cEhpZ2hsaWdodFJhbmdlRGF0YTo6dG9TaGFyZWRCdWZmZXIgY29uc3QpOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvclJlc3BvbnNlRGF0YS5oOgorICAgICAgICAoV2Vi
Q29yZTo6ZW5jb2RlQXJyYXlCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZGVjb2RlQXJyYXlC
dWZmZXIpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENy
ZWF0aW9uT3B0aW9ucy5oOgorICAgICAgICAoV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENy
ZWF0aW9uT3B0aW9uczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1dGhu
L1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpQdWJs
aWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRXZWJTb2NrZXRBY2NlcHQpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0J1ZmZlclNvdXJjZS5oOgorICAgICAgICAoV2ViQ29yZTo6QnVmZmVy
U291cmNlOjpieXRlcyBjb25zdCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmVu
Y29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRl
Y29kZSk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvU2VyaWFsaXplZE5GQS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6U2VyaWFsaXplZE5GQTo6cG9pbnRl
ckF0T2Zmc2V0SW5GaWxlIGNvbnN0KToKKyAgICAgICAgKiBjcnlwdG8vbWFjL1NlcmlhbGl6ZWRD
cnlwdG9LZXlXcmFwTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQW5kU3RvcmVNYXN0
ZXJLZXkpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omhhc2hQ
b2ludGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTVBhdGNoU3VwcG9ydDo6Y3JlYXRlRGlnZXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OmFkZFN0cmluZ1RvU0hBMSk6IERlbGV0ZWQuCisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9u
dGVuZEhvc3Q6OnNob3dDZXJ0aWZpY2F0ZSk6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yTmV0
d29ya0FnZW50OjpnZXRTZXJpYWxpemVkQ2VydGlmaWNhdGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmRD
dXN0b21EYXRhOjpjcmVhdGVTaGFyZWRCdWZmZXIgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OlNoYXJl
ZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmFwcGVuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpkYXRhIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmJ5dGVzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6ZGVjb2RlciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpzaXplIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9j
b2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNBQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNB
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9Nb2RlbC5oOgorICAgICAgICAoV2ViQ29yZTo6TW9kZWw6OmVuY29kZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNb2RlbDo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9QaXhlbEJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6UGl4ZWxCdWZmZXI6OmVuY29k
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6ZGVjb2RlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVz
Lmg6CisgICAgICAgIChXZWJDb3JlOjpDYXBhYmlsaXR5VmFsdWVPclJhbmdlOjplbmNvZGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FwYWJpbGl0eVZhbHVlT3JSYW5nZTo6ZGVjb2RlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZFN0cmluZ1RvU0hBMSk6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHA6CisgICAgICAgIChXVEY6
OlBlcnNpc3RlbmNlOjplbmNvZGVDRkRhdGEpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6
ZGVjb2RlQ0ZEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IpOgorICAgICAg
ICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaDoKKyAgICAgICAgKiB3b3JrZXJzL3Nl
cnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzKToKKyAgICAgICAgKiB3b3JrZXJz
L3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
V1NjcmlwdFN0b3JhZ2U6OnN0b3JlKToKKwogMjAyMS0wNi0xMSAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgogCiAgICAgICAgIExhemlseSBjb21wdXRlIFNlY3VyaXR5T3JpZ2luOjpt
X2lzUG90ZW50aWFsbHlUcnVzdHdvcnRoeSBmb3IgcGVyZm9ybWFuY2UKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvSW5pdERhdGFSZWdpc3RyeS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJl
Z2lzdHJ5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9l
bmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0
LDcgKzEwNCw3IEBAIHN0YXRpYyBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzYW5pdGl6ZUtleWkKICAg
ICBhdXRvIG9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgYXV0byBraWRzQXJy
YXkgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgZm9yIChhdXRvJiBidWZmZXIgOiBrZXlJ
REJ1ZmZlci52YWx1ZSgpKQotICAgICAgICBraWRzQXJyYXktPnB1c2hTdHJpbmcoYmFzZTY0VVJM
RW5jb2RlVG9TdHJpbmcoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKSk7CisgICAgICAg
IGtpZHNBcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhidWZmZXItPmJ5
dGVzKCkpKTsKICAgICBvYmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92ZShraWRzQXJyYXkp
KTsKIAogICAgIENTdHJpbmcganNvbkRhdGEgPSBvYmplY3QtPnRvSlNPTlN0cmluZygpLnV0Zjgo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hs
aWdodC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hpZ2hs
aWdodC9BcHBIaWdobGlnaHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCB0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBBcHBIaWdobGlnaHQ6OmVuY29kZShFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihoaWdo
bGlnaHQtPnNpemUoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoaGlnaGxp
Z2h0LT5kYXRhKCksIGhpZ2hsaWdodC0+c2l6ZSgpLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZp
eGVkTGVuZ3RoRGF0YSgqaGlnaGxpZ2h0LCAxKTsKIAogICAgIGVuY29kZXIgPDwgdGV4dDsKIApA
QCAtNzUsNyArNzUsNyBAQCBzdGQ6Om9wdGlvbmFsPEFwcEhpZ2hsaWdodD4gQXBwSGlnaGxpZ2h0
CiAKICAgICBWZWN0b3I8dWludDhfdD4gaGlnaGxpZ2h0OwogICAgIGhpZ2hsaWdodC5ncm93KCps
ZW5ndGgpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoaGlnaGxpZ2h0
LmRhdGEoKSwgaGlnaGxpZ2h0LnNpemUoKSwgMSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZp
eGVkTGVuZ3RoRGF0YShoaWdobGlnaHQsIDEpKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwogCiAgICAgc3RkOjpvcHRpb25hbDxzdGQ6Om9wdGlvbmFsPFN0cmluZz4+IHRleHQ7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHRSYW5nZURhdGEu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhp
Z2hsaWdodFJhbmdlRGF0YS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFJhbmdlRGF0YS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUzLDcgKzUzLDcgQEAgUmVmPFNoYXJlZEJ1ZmZlcj4gQXBwSGlnaGxpZ2h0UmFuZ2VE
YXRhOgogewogICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2RlcjsKICAgICBlbmNv
ZGVyIDw8ICp0aGlzOwotICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShlbmNvZGVyLmJ1
ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6
Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCkpOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIEFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6Tm9kZVBhdGhDb21wb25lbnQ6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIE5ldHdvcmtTZW5kUXVldWUgUlRDRGF0YUNo
YW5uZWw6OmNyZWF0ZU0KICAgICAgICAgaWYgKCFjaGFubmVsLm1faGFuZGxlci0+c2VuZFN0cmlu
Z0RhdGEodXRmOCkpCiAgICAgICAgICAgICBjaGFubmVsLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJy
b3IsICJFcnJvciBzZW5kaW5nIHN0cmluZyB0aHJvdWdoIFJUQ0RhdGFDaGFubmVsLiJfcyk7CiAg
ICAgfSwgWyZjaGFubmVsXShhdXRvJiBzcGFuKSB7Ci0gICAgICAgIGlmICghY2hhbm5lbC5tX2hh
bmRsZXItPnNlbmRSYXdEYXRhKHNwYW4uZGF0YSgpLCBzcGFuLnNpemUoKSkpCisgICAgICAgIGlm
ICghY2hhbm5lbC5tX2hhbmRsZXItPnNlbmRSYXdEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KHNwYW4uZGF0YSgpKSwgc3Bhbi5zaXplKCkpKQogICAgICAgICAgICAgY2hhbm5l
bC5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3Vy
Y2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAiRXJyb3Igc2VuZGluZyBiaW5hcnkgZGF0YSB0
aHJvdWdoIFJUQ0RhdGFDaGFubmVsLiJfcyk7CiAgICAgfSwgWyZjaGFubmVsXShFeGNlcHRpb25D
b2RlIGVycm9yQ29kZSkgewogICAgICAgICBpZiAoYXV0byogY29udGV4dCA9IGNoYW5uZWwuc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1dGhuL0F1dGhlbnRpY2F0b3JDb29yZGluYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yQ29vcmRpbmF0b3IuY3BwCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhl
bnRpY2F0b3JDb29yZGluYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAg
c3RhdGljIFJlZjxBcnJheUJ1ZmZlcj4gcHJvZHVjZUNsaWVudERhdAogICAgICAgICBvYmplY3Qt
PnNldFN0cmluZygidHlwZSJfcywgIndlYmF1dGhuLmdldCJfcyk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KLSAgICBvYmplY3QtPnNldFN0cmluZygiY2hhbGxlbmdlIl9zLCBiYXNlNjRVUkxFbmNv
ZGVUb1N0cmluZyhjaGFsbGVuZ2UuZGF0YSgpLCBjaGFsbGVuZ2UubGVuZ3RoKCkpKTsKKyAgICBv
YmplY3QtPnNldFN0cmluZygiY2hhbGxlbmdlIl9zLCBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhj
aGFsbGVuZ2UuYnl0ZXMoKSkpOwogICAgIG9iamVjdC0+c2V0U3RyaW5nKCJvcmlnaW4iX3MsIG9y
aWdpbi50b1Jhd1N0cmluZygpKTsKIAogICAgIGF1dG8gdXRmOEpTT05TdHJpbmcgPSBvYmplY3Qt
PnRvSlNPTlN0cmluZygpLnV0ZjgoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXV0aG4vQXV0aGVudGljYXRvclJlc3BvbnNlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvclJlc3BvbnNlRGF0YS5oCShyZXZp
c2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRp
Y2F0b3JSZXNwb25zZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCB0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPgogc3RhdGljIHZvaWQgZW5jb2RlQXJyYXlCdWZmZXIoRW5jb2Rl
ciYgZW5jb2RlciwgY29uc3QgQXJyYXlCdWZmZXImIGJ1ZmZlcikKIHsKICAgICBlbmNvZGVyIDw8
IHN0YXRpY19jYXN0PHVpbnQ2NF90PihidWZmZXIuYnl0ZUxlbmd0aCgpKTsKLSAgICBlbmNvZGVy
LmVuY29kZUZpeGVkTGVuZ3RoRGF0YShzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYnVmZmVy
LmRhdGEoKSksIGJ1ZmZlci5ieXRlTGVuZ3RoKCksIDEpOworICAgIGVuY29kZXIuZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKGJ1ZmZlci5ieXRlcygpLCAxKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4KQEAgLTc1LDcgKzc1LDcgQEAgUmVmUHRyPEFycmF5QnVmZmVyPiBkZWNvZGVBcnJheUJ1
ZmZlcihEZQogICAgIGF1dG8gYnVmZmVyID0gQXJyYXlCdWZmZXI6OnRyeUNyZWF0ZShsZW5ndGgu
dmFsdWUoKSwgc2l6ZW9mKHVpbnQ4X3QpKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShzdGF0
aWNfY2FzdDx1aW50OF90Kj4oYnVmZmVyLT5kYXRhKCkpLCBsZW5ndGgudmFsdWUoKSwgMSkpCisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShidWZmZXItPndyaXRhYmxlQnl0
ZXMoKSwgMSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBidWZmZXI7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRp
YWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVi
bGljS2V5Q3JlZGVudGlhbC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU0LDcgKzU0LDcgQEAgQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cyBQ
dQogfQogCiBQdWJsaWNLZXlDcmVkZW50aWFsOjpQdWJsaWNLZXlDcmVkZW50aWFsKFJlZjxBdXRo
ZW50aWNhdG9yUmVzcG9uc2U+JiYgcmVzcG9uc2UpCi0gICAgOiBCYXNpY0NyZWRlbnRpYWwoYmFz
ZTY0VVJMRW5jb2RlVG9TdHJpbmcocmVzcG9uc2UtPnJhd0lkKCktPmRhdGEoKSwgcmVzcG9uc2Ut
PnJhd0lkKCktPmJ5dGVMZW5ndGgoKSksIFR5cGU6OlB1YmxpY0tleSwgRGlzY292ZXJ5OjpSZW1v
dGUpCisgICAgOiBCYXNpY0NyZWRlbnRpYWwoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcocmVzcG9u
c2UtPnJhd0lkKCktPmJ5dGVzKCkpLCBUeXBlOjpQdWJsaWNLZXksIERpc2NvdmVyeTo6UmVtb3Rl
KQogICAgICwgbV9yZXNwb25zZShXVEZNb3ZlKHJlc3BvbnNlKSkKIHsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0
aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVi
bGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlv
bk9wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDggKzE0MSw4IEBAIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+CiB2b2lkIFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgcnAuaWQgPDwg
cnAubmFtZSA8PCBycC5pY29uOwotICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KHVzZXIuaWQubGVuZ3RoKCkpOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHVz
ZXIuaWQuZGF0YSgpLCB1c2VyLmlkLmxlbmd0aCgpLCAxKTsKKyAgICBlbmNvZGVyIDw8IHN0YXRp
Y19jYXN0PHVpbnQ2NF90Pih1c2VyLmlkLmJ5dGVzKCkuc2l6ZSgpKTsKKyAgICBlbmNvZGVyLmVu
Y29kZUZpeGVkTGVuZ3RoRGF0YSh1c2VyLmlkLmJ5dGVzKCksIDEpOwogICAgIGVuY29kZXIgPDwg
dXNlci5kaXNwbGF5TmFtZSA8PCB1c2VyLm5hbWUgPDwgdXNlci5pY29uIDw8IHB1YktleUNyZWRQ
YXJhbXMgPDwgdGltZW91dCA8PCBleGNsdWRlQ3JlZGVudGlhbHMgPDwgYXV0aGVudGljYXRvclNl
bGVjdGlvbiA8PCBhdHRlc3RhdGlvbiA8PCBleHRlbnNpb25zOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlD
cmVkZW50aWFsRGVzY3JpcHRvci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDggKzQ3LDggQEAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQg
UHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3I6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAogewogICAgIGVuY29kZXIgPDwgdHlwZTsKLSAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0
PHVpbnQ2NF90PihpZC5sZW5ndGgoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERh
dGEoaWQuZGF0YSgpLCBpZC5sZW5ndGgoKSwgMSk7CisgICAgZW5jb2RlciA8PCBzdGF0aWNfY2Fz
dDx1aW50NjRfdD4oaWQuYnl0ZXMoKS5zaXplKCkpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKGlkLmJ5dGVzKCksIDEpOwogICAgIGVuY29kZXIgPDwgdHJhbnNwb3J0czsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRz
aGFrZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRz
L1dlYlNvY2tldEhhbmRzaGFrZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05NywxOSArOTcsMjAgQEAgc3RhdGljIFN0cmluZyBnZW5lcmF0ZVNlY1dlYlNvY2tl
dEtleSgpCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBub25jZVNpemUgPSAxNjsKICAgICB1bnNp
Z25lZCBjaGFyIGtleVtub25jZVNpemVdOwogICAgIGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tVmFs
dWVzKGtleSwgbm9uY2VTaXplKTsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoa2V5
LCBub25jZVNpemUpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhrZXkpOwogfQog
CiBTdHJpbmcgV2ViU29ja2V0SGFuZHNoYWtlOjpnZXRFeHBlY3RlZFdlYlNvY2tldEFjY2VwdChj
b25zdCBTdHJpbmcmIHNlY1dlYlNvY2tldEtleSkKIHsKICAgICBjb25zdGV4cHIgdWludDhfdCB3
ZWJTb2NrZXRLZXlHVUlEW10gPSAiMjU4RUFGQTUtRTkxNC00N0RBLTk1Q0EtQzVBQjBEQzg1QjEx
IjsKKwogICAgIFNIQTEgc2hhMTsKLSAgICBDU3RyaW5nIGtleURhdGEgPSBzZWNXZWJTb2NrZXRL
ZXkuYXNjaWkoKTsKLSAgICBzaGExLmFkZEJ5dGVzKGtleURhdGEuZGF0YUFzVUludDhQdHIoKSwg
a2V5RGF0YS5sZW5ndGgoKSk7Ci0gICAgc2hhMS5hZGRCeXRlcyh3ZWJTb2NrZXRLZXlHVUlELCBz
dGQ6OnNpemUod2ViU29ja2V0S2V5R1VJRCkgLSAxKTsKKyAgICBzaGExLmFkZEJ5dGVzKHNlY1dl
YlNvY2tldEtleS5hc2NpaSgpLmJ5dGVzKCkpOworICAgIHNoYTEuYWRkQnl0ZXMod2ViU29ja2V0
S2V5R1VJRCk7CisKICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAgICBzaGExLmNvbXB1dGVIYXNo
KGhhc2gpOwotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhoYXNoLmRhdGEoKSwgU0hB
MTo6aGFzaFNpemUpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhoYXNoKTsKIH0K
IAogV2ViU29ja2V0SGFuZHNoYWtlOjpXZWJTb2NrZXRIYW5kc2hha2UoY29uc3QgVVJMJiB1cmws
IGNvbnN0IFN0cmluZyYgcHJvdG9jb2wsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBT
dHJpbmcmIGNsaWVudE9yaWdpbiwgYm9vbCBhbGxvd0Nvb2tpZXMpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9CdWZmZXJTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9CdWZmZXJTb3VyY2UuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQnVmZmVyU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU3LDYgKzU3LDEzIEBAIHB1YmxpYzoKICAgICAgICAgfSwgbV92YXJpYW50KTsKICAgICB9CiAK
KyAgICBTcGFuPGNvbnN0IHVpbnQ4X3Q+IGJ5dGVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBXVEY6OnZpc2l0KFtdKGF1dG8mIGJ1ZmZlcikgLT4gU3Bhbjxjb25zdCB1aW50OF90PiB7
CisgICAgICAgICAgICByZXR1cm4gYnVmZmVyID8gU3Bhbjxjb25zdCB1aW50OF90PiB7IHN0YXRp
Y19jYXN0PGNvbnN0IHVpbnQ4X3QqPihidWZmZXItPmRhdGEoKSksIGJ1ZmZlci0+Ynl0ZUxlbmd0
aCgpIH0gOiBTcGFuPGNvbnN0IHVpbnQ4X3Q+IHsgfTsKKyAgICAgICAgfSwgbV92YXJpYW50KTsK
KyAgICB9CisKIHByaXZhdGU6CiAgICAgVmFyaWFudFR5cGUgbV92YXJpYW50OwogfTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJp
YWxpemVkU2NyaXB0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTY0LDE1ICsxNjQsMTUgQEAg
dm9pZCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmVuY29kZShFbmNvZAogCiAgICAgaWYgKGhhc0Fy
cmF5KSB7CiAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1fYXJyYXlC
dWZmZXJDb250ZW50c0FycmF5LT5zaXplKCkpOwotICAgICAgICBmb3IgKGNvbnN0IGF1dG8gJmFy
cmF5QnVmZmVyQ29udGVudHMgOiAqbV9hcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkpIHsKKyAgICAg
ICAgZm9yIChjb25zdCBhdXRvJiBhcnJheUJ1ZmZlckNvbnRlbnRzIDogKm1fYXJyYXlCdWZmZXJD
b250ZW50c0FycmF5KSB7CiAgICAgICAgICAgICBlbmNvZGVyIDw8IGFycmF5QnVmZmVyQ29udGVu
dHMuc2l6ZUluQnl0ZXMoKTsKLSAgICAgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihhcnJheUJ1ZmZlckNvbnRlbnRzLmRhdGEo
KSksIGFycmF5QnVmZmVyQ29udGVudHMuc2l6ZUluQnl0ZXMoKSwgMSk7CisgICAgICAgICAgICBl
bmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShhcnJheUJ1ZmZlckNvbnRlbnRzLmJ5dGVzKCks
IDEpOwogICAgICAgICB9CiAgICAgfQogCiAjaWYgRU5BQkxFKFdFQl9SVEMpCiAgICAgZW5jb2Rl
ciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4obV9kZXRhY2hlZFJUQ0RhdGFDaGFubmVscy5zaXpl
KCkpOwotICAgIGZvciAoY29uc3QgYXV0byAmY2hhbm5lbCA6IG1fZGV0YWNoZWRSVENEYXRhQ2hh
bm5lbHMpCisgICAgZm9yIChjb25zdCBhdXRvJiBjaGFubmVsIDogbV9kZXRhY2hlZFJUQ0RhdGFD
aGFubmVscykKICAgICAgICAgZW5jb2RlciA8PCAqY2hhbm5lbDsKICNlbmRpZgogfQpAQCAtMjA2
LDcgKzIwNiw3IEBAIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWQKICAg
ICAgICAgICAgIGF1dG8gYnVmZmVyID0gR2lnYWNhZ2U6OnRyeU1hbGxvYyhHaWdhY2FnZTo6UHJp
bWl0aXZlLCBidWZmZXJTaXplKTsKICAgICAgICAgICAgIGlmICghYnVmZmVyKQogICAgICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZp
eGVkTGVuZ3RoRGF0YShzdGF0aWNfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgYnVmZmVyU2l6ZSwg
MSkpIHsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3Bh
biB7IHN0YXRpY19jYXN0PHN0ZDo6Ynl0ZSo+KGJ1ZmZlciksIGJ1ZmZlclNpemUgfSwgMSkpIHsK
ICAgICAgICAgICAgICAgICBHaWdhY2FnZTo6ZnJlZShHaWdhY2FnZTo6UHJpbWl0aXZlLCBidWZm
ZXIpOwogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvU2VyaWFsaXplZE5GQS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvU2VyaWFsaXplZE5G
QS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL1NlcmlhbGl6ZWRORkEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAg
U2VyaWFsaXplZE5GQTo6U2VyaWFsaXplZE5GQShGaWxlU3lzdGVtOgogdGVtcGxhdGU8dHlwZW5h
bWUgVD4KIGNvbnN0IFQqIFNlcmlhbGl6ZWRORkE6OnBvaW50ZXJBdE9mZnNldEluRmlsZShzaXpl
X3Qgb2Zmc2V0KSBjb25zdAogewotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IFQq
PihzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4obV9maWxlLmRhdGEoKSkgKyBvZmZzZXQpOwor
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IFQqPihtX2ZpbGUuZGF0YSgpLmRhdGEo
KSArIG9mZnNldCk7CiB9CiAKIGF1dG8gU2VyaWFsaXplZE5GQTo6bm9kZXMoKSBjb25zdCAtPiBj
b25zdCBSYW5nZTxJbW11dGFibGVORkFOb2RlPgpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRv
L21hYy9DcnlwdG9LZXlFQ01hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5
cHRvL21hYy9DcnlwdG9LZXlFQ01hYy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5RUNNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTcsMTAgKzE5NywxMCBAQCBib29sIENyeXB0b0tleUVDOjpwbGF0Zm9ybUFkZEZpZWxkRWxlbWVu
CiAKICAgICBpZiAoVU5MSUtFTFkoKHNpemUgIT0gcHVibGljS2V5U2l6ZSkgJiYgKHNpemUgIT0g
cHJpdmF0ZUtleVNpemUpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGp3ay54ID0gYmFz
ZTY0VVJMRW5jb2RlVG9TdHJpbmcocmVzdWx0LmRhdGEoKSArIDEsIGtleVNpemVJbkJ5dGVzKTsK
LSAgICBqd2sueSA9IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKHJlc3VsdC5kYXRhKCkgKyBrZXlT
aXplSW5CeXRlcyArIDEsIGtleVNpemVJbkJ5dGVzKTsKKyAgICBqd2sueCA9IGJhc2U2NFVSTEVu
Y29kZVRvU3RyaW5nKFNwYW4geyByZXN1bHQgfS5zdWJzcGFuKDEsIGtleVNpemVJbkJ5dGVzKSk7
CisgICAgandrLnkgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhTcGFuIHsgcmVzdWx0IH0uc3Vi
c3BhbigxICsga2V5U2l6ZUluQnl0ZXMsIGtleVNpemVJbkJ5dGVzKSk7CiAgICAgaWYgKHNpemUg
PiBwdWJsaWNLZXlTaXplKQotICAgICAgICBqd2suZCA9IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5n
KHJlc3VsdC5kYXRhKCkgKyBwdWJsaWNLZXlTaXplLCBrZXlTaXplSW5CeXRlcyk7CisgICAgICAg
IGp3ay5kID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoU3BhbiB7IHJlc3VsdCB9LnN1YnNwYW4o
cHVibGljS2V5U2l6ZSwga2V5U2l6ZUluQnl0ZXMpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL1NlcmlhbGl6ZWRD
cnlwdG9LZXlXcmFwTWFjLm1tCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vbWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjcsNyArMTY3LDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBm
aQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIH0KICAgICBSZXRhaW5QdHI8Q0ZE
YXRhUmVmPiBrZXlEYXRhID0gYWRvcHRDRihrZXlEYXRhUmVmKTsKLSAgICByZXR1cm4gYmFzZTY0
RGVjb2RlKENGRGF0YUdldEJ5dGVQdHIoa2V5RGF0YS5nZXQoKSksIENGRGF0YUdldExlbmd0aChr
ZXlEYXRhLmdldCgpKSk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZShTcGFuIHsgQ0ZEYXRhR2V0
Qnl0ZVB0cihrZXlEYXRhLmdldCgpKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KENGRGF0YUdldExl
bmd0aChrZXlEYXRhLmdldCgpKSkgfSk7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTYwNiw3ICsxNjA2LDggQEAgRXhjZXB0aW9uT3I8dm9pZD4gTm9kZTo6c2V0VGV4
dENvbnRlbnQoYwogc3RhdGljIFNIQTE6OkRpZ2VzdCBoYXNoUG9pbnRlcihjb25zdCB2b2lkKiBw
b2ludGVyKQogewogICAgIFNIQTEgc2hhMTsKLSAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZwb2ludGVyKSwgc2l6ZW9mKHBvaW50ZXIpKTsKKyAgICBz
aGExLmFkZEJ5dGVzKFNwYW4geyAmcG9pbnRlciwgMSB9KTsKKwogICAgIFNIQTE6OkRpZ2VzdCBk
aWdlc3Q7CiAgICAgc2hhMS5jb21wdXRlSGFzaChkaWdlc3QpOwogICAgIHJldHVybiBkaWdlc3Q7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzOCw3ICszMzgsNyBAQCB2b2lkIEZpbGVSZWFkZXJM
b2FkZXI6OmNvbnZlcnRUb0RhdGFVUkwoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBt
X3N0cmluZ1Jlc3VsdCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgbV9kYXRhVHlwZS5pc0VtcHR5KCkg
PyAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiA6IG1fZGF0YVR5cGUsICI7YmFzZTY0LCIsIGJh
c2U2NEVuY29kZWQobV9yYXdEYXRhLT5kYXRhKCksIG1fYnl0ZXNMb2FkZWQpKTsKKyAgICBtX3N0
cmluZ1Jlc3VsdCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgbV9kYXRhVHlwZS5pc0VtcHR5KCkgPyAi
YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiA6IG1fZGF0YVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2
NEVuY29kZWQobV9yYXdEYXRhLT5ieXRlcygpKSk7CiB9CiAKIGJvb2wgRmlsZVJlYWRlckxvYWRl
cjo6aXNDb21wbGV0ZWQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3
b3JrU2VuZFF1ZXVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL05l
dHdvcmtTZW5kUXVldWUuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9m
aWxlYXBpL05ldHdvcmtTZW5kUXVldWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MywxMSArNTMs
MTAgQEAgdm9pZCBOZXR3b3JrU2VuZFF1ZXVlOjplbnF1ZXVlKENTdHJpbmcmJgogdm9pZCBOZXR3
b3JrU2VuZFF1ZXVlOjplbnF1ZXVlKGNvbnN0IEpTQzo6QXJyYXlCdWZmZXImIGJpbmFyeURhdGEs
IHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCiB7CiAgICAgaWYgKG1f
cXVldWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGF1dG8qIGRhdGEgPSBzdGF0aWNfY2FzdDxjb25z
dCB1aW50OF90Kj4oYmluYXJ5RGF0YS5kYXRhKCkpOwotICAgICAgICBtX3dyaXRlUmF3RGF0YShT
cGFuIHsgZGF0YSArIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGggfSk7CisgICAgICAgIG1fd3JpdGVS
YXdEYXRhKGJpbmFyeURhdGEuYnl0ZXMoKS5zdWJzcGFuKGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtX3F1ZXVlLmFwcGVuZChTaGFyZWRCdWZm
ZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYmluYXJ5RGF0YS5kYXRhKCkp
ICsgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkpOworICAgIG1fcXVldWUuYXBwZW5kKFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKGJpbmFyeURhdGEuYnl0ZXMoKS5zdWJzcGFuKGJ5dGVPZmZzZXQsIGJ5dGVM
ZW5ndGgpKSk7CiB9CiAKIHZvaWQgTmV0d29ya1NlbmRRdWV1ZTo6ZW5xdWV1ZShXZWJDb3JlOjpC
bG9iJiBibG9iKQpAQCAtOTMsNyArOTIsOSBAQCB2b2lkIE5ldHdvcmtTZW5kUXVldWU6OnByb2Nl
c3NNZXNzYWdlcygpCiAgICAgICAgIHN3aXRjaE9uKG1fcXVldWUuZmlyc3QoKSwgW3RoaXNdKGNv
bnN0IENTdHJpbmcmIHV0ZjgpIHsKICAgICAgICAgICAgIG1fd3JpdGVTdHJpbmcodXRmOCk7CiAg
ICAgICAgIH0sIFt0aGlzXShSZWY8U2hhcmVkQnVmZmVyPiYgZGF0YSkgewotICAgICAgICAgICAg
ZGF0YS0+Zm9yRWFjaFNlZ21lbnQobV93cml0ZVJhd0RhdGEpOworICAgICAgICAgICAgZGF0YS0+
Zm9yRWFjaFNlZ21lbnQoW3RoaXNdKGF1dG8mIHNwYW4pIHsKKyAgICAgICAgICAgICAgICBtX3dy
aXRlUmF3RGF0YShhc0J5dGVzKHNwYW4pKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICB9LCBb
dGhpcywgJnNob3VsZFN0b3BQcm9jZXNzaW5nXShVbmlxdWVSZWY8QmxvYkxvYWRlcj4mIGxvYWRl
cikgewogICAgICAgICAgICAgYXV0byBlcnJvckNvZGUgPSBsb2FkZXItPmVycm9yQ29kZSgpOwog
ICAgICAgICAgICAgaWYgKGxvYWRlci0+aXNMb2FkaW5nKCkgfHwgKGVycm9yQ29kZSAmJiBlcnJv
ckNvZGUudmFsdWUoKSA9PSBBYm9ydEVycm9yKSkgewpAQCAtMTAyLDcgKzEwMyw3IEBAIHZvaWQg
TmV0d29ya1NlbmRRdWV1ZTo6cHJvY2Vzc01lc3NhZ2VzKCkKICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgaWYgKGNvbnN0IGF1dG8mIHJlc3VsdCA9IGxvYWRlci0+YXJyYXlCdWZmZXJSZXN1
bHQoKSkgewotICAgICAgICAgICAgICAgIG1fd3JpdGVSYXdEYXRhKFNwYW4geyBzdGF0aWNfY2Fz
dDxjb25zdCB1aW50OF90Kj4ocmVzdWx0LT5kYXRhKCkpLCByZXN1bHQtPmJ5dGVMZW5ndGgoKSB9
KTsKKyAgICAgICAgICAgICAgICBtX3dyaXRlUmF3RGF0YShyZXN1bHQtPmJ5dGVzKCkpOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEFTU0VSVChl
cnJvckNvZGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVl
LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTmV0d29ya1Nl
bmRRdWV1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIGNsYXNzIFNoYXJlZEJ1
ZmZlcjsKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIE5ldHdvcmtTZW5kUXVldWUgOiBwdWJsaWMgQ29u
dGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIgewogcHVibGljOgogICAgIHVzaW5nIFdyaXRlU3RyaW5n
ID0gRnVuY3Rpb248dm9pZChjb25zdCBDU3RyaW5nJiB1dGY4KT47Ci0gICAgdXNpbmcgV3JpdGVS
YXdEYXRhID0gRnVuY3Rpb248dm9pZChjb25zdCBTcGFuPGNvbnN0IHVpbnQ4X3Q+Jik+OworICAg
IHVzaW5nIFdyaXRlUmF3RGF0YSA9IEZ1bmN0aW9uPHZvaWQoY29uc3QgU3Bhbjxjb25zdCBzdGQ6
OmJ5dGU+Jik+OwogICAgIGVudW0gY2xhc3MgQ29udGludWUgeyBObywgWWVzIH07CiAgICAgdXNp
bmcgUHJvY2Vzc0Vycm9yID0gRnVuY3Rpb248Q29udGludWUoRXhjZXB0aW9uQ29kZSk+OwogICAg
IE5ldHdvcmtTZW5kUXVldWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdyaXRlU3RyaW5nJiYs
IFdyaXRlUmF3RGF0YSYmLCBQcm9jZXNzRXJyb3ImJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM5NCwyOCArMzk0LDIzIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IERPTVBhdGNoU3VwcG9ydDo6
aW5uZXIKICAgICByZXR1cm4geyB9OwogfQogCi1zdGF0aWMgdm9pZCBhZGRTdHJpbmdUb1NIQTEo
U0hBMSYgc2hhMSwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgQ1N0cmluZyBjU3RyaW5n
ID0gc3RyaW5nLnV0ZjgoKTsKLSAgICBzaGExLmFkZEJ5dGVzKGNTdHJpbmcuZGF0YUFzVUludDhQ
dHIoKSwgY1N0cmluZy5sZW5ndGgoKSk7Ci19Ci0KIHN0ZDo6dW5pcXVlX3B0cjxET01QYXRjaFN1
cHBvcnQ6OkRpZ2VzdD4gRE9NUGF0Y2hTdXBwb3J0OjpjcmVhdGVEaWdlc3QoTm9kZSYgbm9kZSwg
VW51c2VkTm9kZXNNYXAqIHVudXNlZE5vZGVzTWFwKQogewogICAgIGF1dG8gZGlnZXN0ID0gbWFr
ZVVuaXF1ZTxEaWdlc3Q+KCk7CiAgICAgZGlnZXN0LT5ub2RlID0gJm5vZGU7CisKICAgICBTSEEx
IHNoYTE7CiAKICAgICBhdXRvIG5vZGVUeXBlID0gbm9kZS5ub2RlVHlwZSgpOwotICAgIHNoYTEu
YWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oJm5vZGVUeXBlKSwgc2l6
ZW9mKG5vZGVUeXBlKSk7Ci0gICAgYWRkU3RyaW5nVG9TSEExKHNoYTEsIG5vZGUubm9kZU5hbWUo
KSk7Ci0gICAgYWRkU3RyaW5nVG9TSEExKHNoYTEsIG5vZGUubm9kZVZhbHVlKCkpOworICAgIHNo
YTEuYWRkQnl0ZXMoU3BhbiB7ICZub2RlVHlwZSwgMSB9KTsKKyAgICBzaGExLmFkZEJ5dGVzKG5v
ZGUubm9kZU5hbWUoKS51dGY4KCkuYnl0ZXMoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhub2RlLm5v
ZGVWYWx1ZSgpLnV0ZjgoKS5ieXRlcygpKTsKIAogICAgIGlmIChub2RlLm5vZGVUeXBlKCkgPT0g
Tm9kZTo6RUxFTUVOVF9OT0RFKSB7CiAgICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS5maXJzdENo
aWxkKCk7CiAgICAgICAgIHdoaWxlIChjaGlsZCkgewogICAgICAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPERpZ2VzdD4gY2hpbGRJbmZvID0gY3JlYXRlRGlnZXN0KCpjaGlsZCwgdW51c2VkTm9kZXNN
YXApOwotICAgICAgICAgICAgYWRkU3RyaW5nVG9TSEExKHNoYTEsIGNoaWxkSW5mby0+c2hhMSk7
CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGNoaWxkSW5mby0+c2hhMS51dGY4KCkuYnl0ZXMo
KSk7CiAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwogICAgICAgICAg
ICAgZGlnZXN0LT5jaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShjaGlsZEluZm8pKTsKICAgICAgICAg
fQpAQCAtNDI0LDE5ICs0MTksMTkgQEAgc3RkOjp1bmlxdWVfcHRyPERPTVBhdGNoU3VwcG9ydDo6
RGlnZXN0PgogICAgICAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGVzV2l0aG91dFVwZGF0ZSgp
KSB7CiAgICAgICAgICAgICBTSEExIGF0dHJzU0hBMTsKICAgICAgICAgICAgIGZvciAoYXV0byYg
YXR0cmlidXRlIDogZWxlbWVudC5hdHRyaWJ1dGVzSXRlcmF0b3IoKSkgewotICAgICAgICAgICAg
ICAgIGFkZFN0cmluZ1RvU0hBMShhdHRyc1NIQTEsIGF0dHJpYnV0ZS5uYW1lKCkudG9TdHJpbmco
KSk7Ci0gICAgICAgICAgICAgICAgYWRkU3RyaW5nVG9TSEExKGF0dHJzU0hBMSwgYXR0cmlidXRl
LnZhbHVlKCkpOworICAgICAgICAgICAgICAgIGF0dHJzU0hBMS5hZGRCeXRlcyhhdHRyaWJ1dGUu
bmFtZSgpLnRvU3RyaW5nKCkudXRmOCgpLmJ5dGVzKCkpOworICAgICAgICAgICAgICAgIGF0dHJz
U0hBMS5hZGRCeXRlcyhhdHRyaWJ1dGUudmFsdWUoKS5zdHJpbmcoKS51dGY4KCkuYnl0ZXMoKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTSEExOjpEaWdlc3QgYXR0cnNIYXNoOwogICAg
ICAgICAgICAgYXR0cnNTSEExLmNvbXB1dGVIYXNoKGF0dHJzSGFzaCk7Ci0gICAgICAgICAgICBk
aWdlc3QtPmF0dHJzU0hBMSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGF0dHJzSGFzaC5kYXRhKCks
IDEwKTsKLSAgICAgICAgICAgIGFkZFN0cmluZ1RvU0hBMShzaGExLCBkaWdlc3QtPmF0dHJzU0hB
MSk7CisgICAgICAgICAgICBkaWdlc3QtPmF0dHJzU0hBMSA9IGJhc2U2NEVuY29kZVRvU3RyaW5n
KGF0dHJzSGFzaCk7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGRpZ2VzdC0+YXR0cnNTSEEx
LnV0ZjgoKS5ieXRlcygpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIFNIQTE6OkRpZ2VzdCBo
YXNoOwogICAgIHNoYTEuY29tcHV0ZUhhc2goaGFzaCk7Ci0gICAgZGlnZXN0LT5zaGExID0gYmFz
ZTY0RW5jb2RlVG9TdHJpbmcoaGFzaC5kYXRhKCksIDEwKTsKKyAgICBkaWdlc3QtPnNoYTEgPSBi
YXNlNjRFbmNvZGVUb1N0cmluZyhoYXNoKTsKICAgICBpZiAodW51c2VkTm9kZXNNYXApCiAgICAg
ICAgIHVudXNlZE5vZGVzTWFwLT5hZGQoZGlnZXN0LT5zaGExLCBkaWdlc3QuZ2V0KCkpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRI
b3N0LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kSG9zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwMiw3ICs2MDIsNyBA
QCBib29sIEluc3BlY3RvckZyb250ZW5kSG9zdDo6c2hvd0NlcnRpZmljCiAgICAgaWYgKCFkYXRh
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVy
IGRlY29kZXIoZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXplKCkpOworICAgIFdURjo6UGVyc2lzdGVu
Y2U6OkRlY29kZXIgZGVjb2RlciB7ICpkYXRhIH07CiAgICAgc3RkOjpvcHRpb25hbDxDZXJ0aWZp
Y2F0ZUluZm8+IGNlcnRpZmljYXRlSW5mbzsKICAgICBkZWNvZGVyID4+IGNlcnRpZmljYXRlSW5m
bzsKICAgICBpZiAoIWNlcnRpZmljYXRlSW5mbykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBAIHVuc2lnbmVkIE5ldHdvcmtSZXNvdXJjZXNE
YXRhOjpSZXNvdXJjZUQKICAgICAgICAgbV9jb250ZW50ID0gbV9kZWNvZGVyLT5kZWNvZGVBbmRG
bHVzaChtX2RhdGFCdWZmZXItPmRhdGEoKSwgZGF0YUxlbmd0aCk7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgbV9iYXNlNjRFbmNvZGVkID0gdHJ1ZTsKLSAgICAgICAgbV9jb250ZW50ID0gYmFzZTY0
RW5jb2RlVG9TdHJpbmcobV9kYXRhQnVmZmVyLT5kYXRhKCksIGRhdGFMZW5ndGgpOworICAgICAg
ICBtX2NvbnRlbnQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhtX2RhdGFCdWZmZXItPmJ5dGVzKCkp
OwogICAgIH0KIAogICAgIG1fZGF0YUJ1ZmZlciA9IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JET01BZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OTgsNyArMTY5OCw3IEBAIHN0
YXRpYyBTdHJpbmcgY29tcHV0ZUNvbnRlbnRTZWN1cml0eVBvbGkKICAgICBhdXRvIGNyeXB0b0Rp
Z2VzdCA9IFBBTDo6Q3J5cHRvRGlnZXN0OjpjcmVhdGUoUEFMOjpDcnlwdG9EaWdlc3Q6OkFsZ29y
aXRobTo6U0hBXzI1Nik7CiAgICAgY3J5cHRvRGlnZXN0LT5hZGRCeXRlcyhjb250ZW50LmRhdGEo
KSwgY29udGVudC5zaXplKCkpOwogICAgIGF1dG8gZGlnZXN0ID0gY3J5cHRvRGlnZXN0LT5jb21w
dXRlSGFzaCgpOwotICAgIHJldHVybiBtYWtlU3RyaW5nKCJzaGEyNTYtIiwgYmFzZTY0RW5jb2Rl
ZChkaWdlc3QuZGF0YSgpLCBkaWdlc3Quc2l6ZSgpKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmco
InNoYTI1Ni0iLCBiYXNlNjRFbmNvZGVkKGRpZ2VzdCkpOwogfQogCiBSZWY8UHJvdG9jb2w6OkRP
TTo6Tm9kZT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZShOb2RlKiBub2Rl
LCBpbnQgZGVwdGgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3Rvck5ldHdvcmtBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NSw3ICsxNzUsNyBAQCBSZWY8UHJvdG9jb2w6Ok5ldHdv
cms6OldlYlNvY2tldEZyYW1lPiBiCiAgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpXZWJT
b2NrZXRGcmFtZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldE9wY29kZShmcmFtZS5vcENvZGUpCiAg
ICAgICAgIC5zZXRNYXNrKGZyYW1lLm1hc2tlZCkKLSAgICAgICAgLnNldFBheWxvYWREYXRhKGZy
YW1lLm9wQ29kZSA9PSAxID8gU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhmcmFt
ZS5wYXlsb2FkLCBmcmFtZS5wYXlsb2FkTGVuZ3RoKSA6IGJhc2U2NEVuY29kZVRvU3RyaW5nKGZy
YW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgpKQorICAgICAgICAuc2V0UGF5bG9hZERh
dGEoZnJhbWUub3BDb2RlID09IDEgPyBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNr
KGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgpIDogYmFzZTY0RW5jb2RlVG9TdHJp
bmcoU3BhbiB7IGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGggfSkpCiAgICAgICAg
IC5zZXRQYXlsb2FkTGVuZ3RoKGZyYW1lLnBheWxvYWRMZW5ndGgpCiAgICAgICAgIC5yZWxlYXNl
KCk7CiB9CkBAIC01ODksNyArNTg5LDcgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRp
ZFJlY2VpdmVEYQogICAgICAgICAvLyBPZnRlbiB0aGUgZGF0YSBpcyB0ZXh0IGFuZCB3ZSB3b3Vs
ZCBoYXZlIGEgZGVjb2RlciwgYnV0IGZvciBub24tdGV4dCB3ZSB3b24ndCBoYXZlIGEgZGVjb2Rl
ci4KICAgICAgICAgLy8gU3luYyBYSFJzIG1heSBub3QgaGF2ZSBhIGNhY2hlZCByZXNvdXJjZSwg
d2hpbGUgbm9uLXN5bmMgWEhScyB1c3VhbGx5IHRyYW5zZmVyIGRhdGEgb3ZlciBvbiBjb21wbGV0
aW9uLgogICAgICAgICBpZiAobV9sb2FkaW5nWEhSU3luY2hyb25vdXNseSAmJiByZXNvdXJjZURh
dGEgJiYgIXJlc291cmNlRGF0YS0+aGFzQnVmZmVyZWREYXRhKCkgJiYgIXJlc291cmNlRGF0YS0+
Y2FjaGVkUmVzb3VyY2UoKSkKLSAgICAgICAgICAgIG1fcmVzb3VyY2VzRGF0YS0+c2V0UmVzb3Vy
Y2VDb250ZW50KHJlcXVlc3RJZCwgYmFzZTY0RW5jb2RlVG9TdHJpbmcoZGF0YSwgZGF0YUxlbmd0
aCksIHRydWUpOworICAgICAgICAgICAgbV9yZXNvdXJjZXNEYXRhLT5zZXRSZXNvdXJjZUNvbnRl
bnQocmVxdWVzdElkLCBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgZGF0YSwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGRhdGFMZW5ndGgpIH0pLCB0cnVlKTsKICAgICB9CiAKICAgICBtX2Zyb250
ZW5kRGlzcGF0Y2hlci0+ZGF0YVJlY2VpdmVkKHJlcXVlc3RJZCwgdGltZXN0YW1wKCksIGRhdGFM
ZW5ndGgsIGVuY29kZWREYXRhTGVuZ3RoKTsKQEAgLTEwMDUsNyArMTAwNSw3IEBAIFByb3RvY29s
OjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG8KIAogICAgIFdURjo6UGVyc2lzdGVuY2U6
OkVuY29kZXIgZW5jb2RlcjsKICAgICBXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxXZWJDb3JlOjpD
ZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUoZW5jb2RlciwgY2VydGlmaWNhdGUudmFsdWUoKSk7Ci0g
ICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIu
YnVmZmVyU2l6ZSgpKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoZW5jb2Rlci5i
dWZmZXIoKSk7CiB9CiAKIFdlYlNvY2tldCogSW5zcGVjdG9yTmV0d29ya0FnZW50Ojp3ZWJTb2Nr
ZXRGb3JSZXF1ZXN0SWQoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYgcmVxdWVz
dElkKQpAQCAtMTQxMCw3ICsxNDEwLDcgQEAgYm9vbCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmNh
Y2hlZFJlc291cgogICAgICAgICB9CiAKICAgICAgICAgKmJhc2U2NEVuY29kZWQgPSB0cnVlOwot
ICAgICAgICAqcmVzdWx0ID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoYnVmZmVyLT5kYXRhKCksIGJ1
ZmZlci0+c2l6ZSgpKTsKKyAgICAgICAgKnJlc3VsdCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGJ1
ZmZlci0+Ynl0ZXMoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VB
Z2VudC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDcgKzEx
Myw3IEBAIGJvb2wgSW5zcGVjdG9yUGFnZUFnZW50OjpzaGFyZWRCdWZmZXJDb24KIGJvb2wgSW5z
cGVjdG9yUGFnZUFnZW50OjpkYXRhQ29udGVudChjb25zdCB1aW50OF90KiBkYXRhLCB1bnNpZ25l
ZCBzaXplLCBjb25zdCBTdHJpbmcmIHRleHRFbmNvZGluZ05hbWUsIGJvb2wgd2l0aEJhc2U2NEVu
Y29kZSwgU3RyaW5nKiByZXN1bHQpCiB7CiAgICAgaWYgKHdpdGhCYXNlNjRFbmNvZGUpIHsKLSAg
ICAgICAgKnJlc3VsdCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGRhdGEsIHNpemUpOworICAgICAg
ICAqcmVzdWx0ID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoU3BhbiB7IGRhdGEsIHNpemUgfSk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTEwMiw3ICsxMTAyLDcgQEAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0bwogICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoIkNvdWxkIG5vdCBjcmVhdGUgd2ViIGFyY2hpdmUgZm9yIG1haW4gZnJhbWUiX3Mp
OwogCiAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gYnVmZmVyID0gYXJjaGl2ZS0+cmF3RGF0YVJl
cHJlc2VudGF0aW9uKCk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKENGRGF0YUdl
dEJ5dGVQdHIoYnVmZmVyLmdldCgpKSwgQ0ZEYXRhR2V0TGVuZ3RoKGJ1ZmZlci5nZXQoKSkpOwor
ICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgQ0ZEYXRhR2V0Qnl0ZVB0cihi
dWZmZXIuZ2V0KCkpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQ0ZEYXRhR2V0TGVuZ3RoKGJ1ZmZl
ci5nZXQoKSkpIH0pOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9p
Y29uL0ljb25Mb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9p
Y29uL0ljb25Mb2FkZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3
IEBAIHZvaWQgSWNvbkxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmUKICAgICAgICAgZGF0
YSA9IG51bGxwdHI7CiAKICAgICBjb25zdGV4cHIgdWludDhfdCBwZGZNYWdpY051bWJlcltdID0g
eyAnJScsICdQJywgJ0QnLCAnRicgfTsKLSAgICBpZiAoZGF0YSAmJiBkYXRhLT5zdGFydHNXaXRo
KFNwYW4geyBwZGZNYWdpY051bWJlciwgc3RkOjpzaXplKHBkZk1hZ2ljTnVtYmVyKSB9KSkgewor
ICAgIGlmIChkYXRhICYmIGRhdGEtPnN0YXJ0c1dpdGgocGRmTWFnaWNOdW1iZXIpKSB7CiAgICAg
ICAgIExPRyhJY29uRGF0YWJhc2UsICJJY29uTG9hZGVyOjpmaW5pc2hMb2FkaW5nKCkgLSBJZ25v
cmluZyBpY29uIGF0ICVzIGJlY2F1c2UgaXQgYXBwZWFycyB0byBiZSBhIFBERiIsIG1fcmVzb3Vy
Y2UtPnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKICAgICAgICAgZGF0YSA9IG51bGxw
dHI7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9CYXNlNjRVdGlsaXRpZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNwcAko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9CYXNlNjRVdGlsaXRpZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIEV4Y2VwdGlvbk9yPFN0cmluZz4g
QmFzZTY0VXRpbGl0aWVzOjpidG8KICAgICBpZiAoIXN0cmluZ1RvRW5jb2RlLmlzQWxsTGF0aW4x
KCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IgfTsK
IAotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhzdHJpbmdUb0VuY29kZS5sYXRpbjEo
KSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKHN0cmluZ1RvRW5jb2RlLmxhdGlu
MSgpLmJ5dGVzKCkpOwogfQogCiBFeGNlcHRpb25PcjxTdHJpbmc+IEJhc2U2NFV0aWxpdGllczo6
YXRvYihjb25zdCBTdHJpbmcmIGVuY29kZWRTdHJpbmcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEuY3BwCShyZXZpc2lvbiAyNzg4MDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgUmVmPFNoYXJlZEJ1ZmZlcj4gUGFzdGVib2Fy
ZEN1c3RvbURhdGE6OgogICAgIGVuY29kZXIgPDwgbV9vcmlnaW47CiAgICAgZW5jb2RlciA8PCBz
YW1lT3JpZ2luQ3VzdG9tU3RyaW5nRGF0YSgpOwogICAgIGVuY29kZXIgPDwgb3JkZXJlZFR5cGVz
KCk7Ci0gICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCksIGVu
Y29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZW5j
b2Rlci5idWZmZXIoKSk7CiB9CiAKIFBhc3RlYm9hcmRDdXN0b21EYXRhIFBhc3RlYm9hcmRDdXN0
b21EYXRhOjpmcm9tUGVyc2lzdGVuY2VEZWNvZGVyKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIm
JiBkZWNvZGVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZm
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxOCArMzYsMTMgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1TaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihjb25zdCB1aW50OF90KiBkYXRh
LCBzaXplX3Qgc2l6ZSkKK1NoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKFNwYW48Y29uc3Qgc3Rk
OjpieXRlPiBkYXRhKQogewotICAgIGFwcGVuZChkYXRhLCBzaXplKTsKLX0KLQotU2hhcmVkQnVm
ZmVyOjpTaGFyZWRCdWZmZXIoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpCi17Ci0gICAg
YXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBzaXplKTsKKyAg
ICBhcHBlbmQoZGF0YSk7CiB9CiAKIFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKEZpbGVTeXN0
ZW06Ok1hcHBlZEZpbGVEYXRhJiYgZmlsZURhdGEpCi0gICAgOiBtX3NpemUoZmlsZURhdGEuc2l6
ZSgpKQorICAgIDogbV9zaXplKGZpbGVEYXRhLmRhdGEoKS5zaXplKCkpCiB7CiAgICAgbV9zZWdt
ZW50cy5hcHBlbmQoezAsIERhdGFTZWdtZW50OjpjcmVhdGUoV1RGTW92ZShmaWxlRGF0YSkpfSk7
CiB9CkBAIC0xODgsMTMgKzE4MywxMyBAQCB2b2lkIFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKGNvbnN0
IFNoYXJlZEJ1CiAgICAgQVNTRVJUKGludGVybmFsbHlDb25zaXN0ZW50KCkpOwogfQogCi12b2lk
IFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5ndGgp
Cit2b2lkIFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhKQog
ewogICAgIEFTU0VSVCghbV9oYXNCZWVuQ29tYmluZWRJbnRvT25lU2VnbWVudCk7CiAgICAgVmVj
dG9yPHVpbnQ4X3Q+IHZlY3RvcjsKLSAgICB2ZWN0b3IuYXBwZW5kKGRhdGEsIGxlbmd0aCk7Ci0g
ICAgbV9zZWdtZW50cy5hcHBlbmQoe21fc2l6ZSwgRGF0YVNlZ21lbnQ6OmNyZWF0ZShXVEZNb3Zl
KHZlY3RvcikpfSk7Ci0gICAgbV9zaXplICs9IGxlbmd0aDsKKyAgICB2ZWN0b3IuYXBwZW5kKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuZGF0YSgpKSwgZGF0YS5zaXplKCkp
OworICAgIG1fc2VnbWVudHMuYXBwZW5kKHsgbV9zaXplLCBEYXRhU2VnbWVudDo6Y3JlYXRlKFdU
Rk1vdmUodmVjdG9yKSkgfSk7CisgICAgbV9zaXplICs9IGRhdGEuc2l6ZSgpOwogICAgIEFTU0VS
VChpbnRlcm5hbGx5Q29uc2lzdGVudCgpKTsKIH0KIApAQCAtMjMyLDcgKzIyNyw3IEBAIHZvaWQg
U2hhcmVkQnVmZmVyOjpmb3JFYWNoU2VnbWVudChjb25zdCAKICAgICAgICAgYXBwbHkoU3BhbiB7
IHNlZ21lbnQuc2VnbWVudC0+ZGF0YSgpLCBzZWdtZW50LnNlZ21lbnQtPnNpemUoKSB9KTsKIH0K
IAotYm9vbCBTaGFyZWRCdWZmZXI6OnN0YXJ0c1dpdGgoY29uc3QgU3Bhbjxjb25zdCB1aW50OF90
PiYgcHJlZml4KSBjb25zdAorYm9vbCBTaGFyZWRCdWZmZXI6OnN0YXJ0c1dpdGgoY29uc3QgU3Bh
bjxjb25zdCBzdGQ6OmJ5dGU+JiBwcmVmaXgpIGNvbnN0CiB7CiAgICAgaWYgKHByZWZpeC5lbXB0
eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI0MCw3ICsyMzUsNyBAQCBib29sIFNoYXJl
ZEJ1ZmZlcjo6c3RhcnRzV2l0aChjb25zdCBTcGFuCiAgICAgaWYgKHNpemUoKSA8IHByZWZpeC5z
aXplKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGNvbnN0IHVpbnQ4X3QqIHByZWZp
eFB0ciA9IHByZWZpeC5kYXRhKCk7CisgICAgYXV0byogcHJlZml4UHRyID0gcHJlZml4LmRhdGEo
KTsKICAgICBzaXplX3QgcmVtYWluaW5nID0gcHJlZml4LnNpemUoKTsKICAgICBmb3IgKGF1dG8m
IHNlZ21lbnQgOiBtX3NlZ21lbnRzKSB7CiAgICAgICAgIHNpemVfdCBhbW91bnRUb0NvbXBhcmVU
aGlzVGltZSA9IHN0ZDo6bWluKHJlbWFpbmluZywgc2VnbWVudC5zZWdtZW50LT5zaXplKCkpOwpA
QCAtMzAxLDExICsyOTYsNDAgQEAgY29uc3QgdWludDhfdCogU2hhcmVkQnVmZmVyOjpEYXRhU2Vn
bWVudAogI2lmIFVTRShHU1RSRUFNRVIpCiAgICAgICAgIFtdKGNvbnN0IFJlZlB0cjxHc3RNYXBw
ZWRPd25lZEJ1ZmZlcj4mIGRhdGEpIHsgcmV0dXJuIGRhdGEtPmRhdGEoKTsgfSwKICNlbmRpZgot
ICAgICAgICBbXShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuZGF0YSgpKTsgfQorICAgICAgICBb
XShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5kYXRhKCkuZGF0YSgpKTsgfQogICAgICk7
CiAgICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwgbV9pbW11dGFibGVEYXRhKTsKIH0KIAor
U3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmJ5dGVzKCkg
Y29uc3QKK3sKKyAgICBhdXRvIHZpc2l0b3IgPSBXVEY6Om1ha2VWaXNpdG9yKAorICAgICAgICBb
XShjb25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBhc0J5
dGVzKFNwYW4geyBkYXRhIH0pOworICAgICAgICB9LAorI2lmIFVTRShDRikKKyAgICAgICAgW10o
Y29uc3QgUmV0YWluUHRyPENGRGF0YVJlZj4mIGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBh
c0J5dGVzKFNwYW4geyBDRkRhdGFHZXRCeXRlUHRyKGRhdGEuZ2V0KCkpLCBzdGF0aWNfY2FzdDxz
aXplX3Q+KENGRGF0YUdldExlbmd0aChkYXRhLmdldCgpKSkgfSk7CisgICAgICAgIH0sCisjZW5k
aWYKKyNpZiBVU0UoR0xJQikKKyAgICAgICAgW10oY29uc3QgR1JlZlB0cjxHQnl0ZXM+JiBkYXRh
KSB7CisgICAgICAgICAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgc3RhdGljX2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KGdfYnl0ZXNfZ2V0X2RhdGEoZGF0YS5nZXQoKSwgbnVsbHB0cikpLCBnX2J5dGVz
X2dldF9zaXplKGRhdGEuZ2V0KCkpIH0pOworICAgICAgICB9LAorI2VuZGlmCisjaWYgVVNFKEdT
VFJFQU1FUikKKyAgICAgICAgW10oY29uc3QgUmVmUHRyPEdzdE1hcHBlZE93bmVkQnVmZmVyPiYg
ZGF0YSkgeworICAgICAgICAgICAgcmV0dXJuIGFzQnl0ZXMoU3BhbiB7IGRhdGEtPmRhdGEoKSwg
ZGF0YS0+c2l6ZSgpIH0pOworICAgICAgICB9LAorI2VuZGlmCisgICAgICAgIFtdKGNvbnN0IEZp
bGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBkYXRhKSB7CisgICAgICAgICAgICByZXR1cm4gZGF0
YS5kYXRhKCk7CisgICAgICAgIH0KKyAgICApOworICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0
b3IsIG1faW1tdXRhYmxlRGF0YSk7CisKK30KKwogYm9vbCBTaGFyZWRCdWZmZXI6OkRhdGFTZWdt
ZW50Ojpjb250YWluc01hcHBlZEZpbGVEYXRhKCkgY29uc3QKIHsKICAgICByZXR1cm4gV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YT4obV9pbW11dGFibGVE
YXRhKTsKQEAgLTMxOSw3ICszNDMsNyBAQCB2b2lkIFNoYXJlZEJ1ZmZlcjo6aGludE1lbW9yeU5v
dE5lZWRlZFNvCiAKIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgU2hhcmVkQnVmZmVyOjpkZWNv
ZGVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4geyByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihkYXRhKCkpLCBzaXplKCkgfTsKKyAgICByZXR1cm4geyBieXRlcygpIH07CiB9CiAKIGJv
b2wgU2hhcmVkQnVmZmVyOjpvcGVyYXRvcj09KGNvbnN0IFNoYXJlZEJ1ZmZlciYgb3RoZXIpIGNv
bnN0CkBAIC0zODQsNyArNDA4LDcgQEAgc2l6ZV90IFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6
OnNpemUoKQogI2lmIFVTRShHU1RSRUFNRVIpCiAgICAgICAgIFtdKGNvbnN0IFJlZlB0cjxHc3RN
YXBwZWRPd25lZEJ1ZmZlcj4mIGRhdGEpIHsgcmV0dXJuIGRhdGEtPnNpemUoKTsgfSwKICNlbmRp
ZgotICAgICAgICBbXShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeyBy
ZXR1cm4gZGF0YS5zaXplKCk7IH0KKyAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6TWFwcGVk
RmlsZURhdGEmIGRhdGEpIHsgcmV0dXJuIGRhdGEuZGF0YSgpLnNpemUoKTsgfQogICAgICk7CiAg
ICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwgbV9pbW11dGFibGVEYXRhKTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNjcsOCArNjcsMTIgQEAgY2xhc3MgU2hhcmVkQnVmZmVyRGF0YVZpZXc7CiBjbGFzcyBXRUJD
T1JFX0VYUE9SVCBTaGFyZWRCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxTaGFyZWRCdWZmZXI+
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKCkgeyByZXR1
cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRCdWZmZXIpOyB9Ci0gICAgc3RhdGljIFJlZjxTaGFyZWRC
dWZmZXI+IGNyZWF0ZShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4g
YWRvcHRSZWYoKm5ldyBTaGFyZWRCdWZmZXIoZGF0YSwgc2l6ZSkpOyB9Ci0gICAgc3RhdGljIFJl
ZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRCdWZmZXIoZGF0YSwgc2l6ZSkpOyB9CisgICAgc3Rh
dGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkg
eyByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRCdWZmZXIoZGF0YSkpOyB9CisgICAgc3RhdGlj
IFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShTcGFuPGNvbnN0IHVpbnQ4X3Q+IGRhdGEpIHsgcmV0
dXJuIGNyZWF0ZShhc0J5dGVzKGRhdGEpKTsgfQorICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVy
PiBjcmVhdGUoU3Bhbjxjb25zdCBjaGFyPiBkYXRhKSB7IHJldHVybiBjcmVhdGUoYXNCeXRlcyhk
YXRhKSk7IH0KKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IHN0ZDo6
Ynl0ZSogZGF0YSwgc2l6ZV90IHNpemUpIHsgcmV0dXJuIGNyZWF0ZShTcGFuIHsgZGF0YSwgc2l6
ZSB9KTsgfQorICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoY29uc3QgdWludDhf
dCogZGF0YSwgc2l6ZV90IHNpemUpIHsgcmV0dXJuIGNyZWF0ZShTcGFuIHsgZGF0YSwgc2l6ZSB9
KTsgfQorICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoY29uc3QgY2hhciogZGF0
YSwgc2l6ZV90IHNpemUpIHsgcmV0dXJuIGNyZWF0ZShTcGFuIHsgZGF0YSwgc2l6ZSB9KTsgfQog
ICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoRmlsZVN5c3RlbTo6TWFwcGVkRmls
ZURhdGEmJiBtYXBwZWRGaWxlRGF0YSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRCdWZm
ZXIoV1RGTW92ZShtYXBwZWRGaWxlRGF0YSkpKTsgfQogCiAgICAgZW51bSBjbGFzcyBNYXlVc2VG
aWxlTWFwcGluZyA6IGJvb2wgeyBObywgWWVzIH07CkBAIC0xMDEsNiArMTA1LDggQEAgcHVibGlj
OgogICAgIC8vIEZJWE1FOiBBdWRpdCB0aGUgY2FsbCBzaXRlcyBvZiB0aGlzIGZ1bmN0aW9uIGFu
ZCByZXBsYWNlIHRoZW0gd2l0aCBpdGVyYXRpb24gaWYgcG9zc2libGUuCiAgICAgY29uc3QgdWlu
dDhfdCogZGF0YSgpIGNvbnN0OwogICAgIGNvbnN0IGNoYXIqIGRhdGFBc0NoYXJQdHIoKSBjb25z
dCB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihkYXRhKCkpOyB9CisgICAg
U3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4gYXNCeXRlcyhTcGFu
IHsgZGF0YSgpLCBzaXplKCkgfSk7IH0KKwogICAgIFZlY3Rvcjx1aW50OF90PiBjb3B5RGF0YSgp
IHsgcmV0dXJuIHsgZGF0YSgpLCBzaXplKCkgfTsgfQogCiAgICAgLy8gQ29tYmluZXMgYWxsIHRo
ZSBzZWdtZW50cyBpbnRvIGEgVmVjdG9yIGFuZCByZXR1cm5zIHRoYXQgdmVjdG9yIGFmdGVyIGNs
ZWFyaW5nIHRoZSBTaGFyZWRCdWZmZXIuCkBAIC0xMTUsOCArMTIxLDEyIEBAIHB1YmxpYzoKICAg
ICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhc2l6ZSgpOyB9CiAKICAgICB2b2lkIGFw
cGVuZChjb25zdCBTaGFyZWRCdWZmZXImKTsKLSAgICB2b2lkIGFwcGVuZChjb25zdCB1aW50OF90
Kiwgc2l6ZV90KTsKLSAgICB2b2lkIGFwcGVuZChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVu
Z3RoKSB7IGFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgbGVu
Z3RoKTsgfQorICAgIHZvaWQgYXBwZW5kKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CisgICAgdm9p
ZCBhcHBlbmQoU3Bhbjxjb25zdCB1aW50OF90PiBkYXRhKSB7IGFwcGVuZChhc0J5dGVzKGRhdGEp
KTsgfQorICAgIHZvaWQgYXBwZW5kKFNwYW48Y29uc3QgY2hhcj4gZGF0YSkgeyBhcHBlbmQoYXNC
eXRlcyhkYXRhKSk7IH0KKyAgICB2b2lkIGFwcGVuZChjb25zdCBzdGQ6OmJ5dGUqIGRhdGEsIHNp
emVfdCBsZW5ndGgpIHsgYXBwZW5kKFNwYW4geyBkYXRhLCBsZW5ndGggfSk7IH0KKyAgICB2b2lk
IGFwcGVuZChjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoKSB7IGFwcGVuZChTcGFu
IHsgZGF0YSwgbGVuZ3RoIH0pOyB9CisgICAgdm9pZCBhcHBlbmQoY29uc3QgY2hhciogZGF0YSwg
c2l6ZV90IGxlbmd0aCkgeyBhcHBlbmQoU3BhbiB7IGRhdGEsIGxlbmd0aCB9KTsgfQogICAgIHZv
aWQgYXBwZW5kKFZlY3Rvcjx1aW50OF90PiYmKTsKIAogICAgIHZvaWQgY2xlYXIoKTsKQEAgLTEz
MSw2ICsxNDEsOCBAQCBwdWJsaWM6CiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IHVpbnQ4
X3QqIGRhdGEoKSBjb25zdDsKICAgICAgICAgV0VCQ09SRV9FWFBPUlQgc2l6ZV90IHNpemUoKSBj
b25zdDsKIAorICAgICAgICBXRUJDT1JFX0VYUE9SVCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0
ZXMoKSBjb25zdDsKKwogICAgICAgICBzdGF0aWMgUmVmPERhdGFTZWdtZW50PiBjcmVhdGUoVmVj
dG9yPHVpbnQ4X3Q+JiYgZGF0YSkKICAgICAgICAgewogICAgICAgICAgICAgZGF0YS5zaHJpbmtU
b0ZpdCgpOwpAQCAtMTg3LDcgKzE5OSw5IEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAgdm9pZCBm
b3JFYWNoU2VnbWVudChjb25zdCBGdW5jdGlvbjx2b2lkKGNvbnN0IFNwYW48Y29uc3QgdWludDhf
dD4mKT4mKSBjb25zdDsKLSAgICBib29sIHN0YXJ0c1dpdGgoY29uc3QgU3Bhbjxjb25zdCB1aW50
OF90PiYgcHJlZml4KSBjb25zdDsKKworICAgIGJvb2wgc3RhcnRzV2l0aChjb25zdCBTcGFuPGNv
bnN0IHN0ZDo6Ynl0ZT4mIHByZWZpeCkgY29uc3Q7CisgICAgYm9vbCBzdGFydHNXaXRoKGNvbnN0
IFNwYW48Y29uc3QgdWludDhfdD4mIHByZWZpeCkgY29uc3QgeyByZXR1cm4gc3RhcnRzV2l0aChh
c0J5dGVzKHByZWZpeCkpOyB9CiAKICAgICBzdHJ1Y3QgRGF0YVNlZ21lbnRWZWN0b3JFbnRyeSB7
CiAgICAgICAgIHNpemVfdCBiZWdpblBvc2l0aW9uOwpAQCAtMjEyLDggKzIyNiw3IEBAIHB1Ymxp
YzoKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBTaGFyZWRCdWZmZXIoKSA9IGRlZmF1bHQ7Ci0g
ICAgZXhwbGljaXQgU2hhcmVkQnVmZmVyKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwotICAgIGV4
cGxpY2l0IFNoYXJlZEJ1ZmZlcihjb25zdCBjaGFyKiwgc2l6ZV90KTsKKyAgICBleHBsaWNpdCBT
aGFyZWRCdWZmZXIoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KTsKICAgICBleHBsaWNpdCBTaGFyZWRC
dWZmZXIoVmVjdG9yPHVpbnQ4X3Q+JiYpOwogICAgIGV4cGxpY2l0IFNoYXJlZEJ1ZmZlcihGaWxl
U3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmKTsKICNpZiBVU0UoQ0YpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3Ry
ZWFtRGVzY3JpcHRpb24uaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vY29jb2EvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkF1ZGlvU3RyZWFtRGVzY3JpcHRpb24u
aCIKICNpbmNsdWRlIDxDb3JlQXVkaW8vQ29yZUF1ZGlvVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYv
U3Bhbi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTgwLDEzICs4MSwxMyBAQCBwcml2
YXRlOgogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgQ0FBdWRpb1N0cmVhbURlc2NyaXB0
aW9uOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKLSAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmbV9zdHJl
YW1EZXNjcmlwdGlvbiksIHNpemVvZihtX3N0cmVhbURlc2NyaXB0aW9uKSwgMSk7CisgICAgZW5j
b2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZtX3N0cmVhbURlc2NyaXB0aW9uLCAx
IH0sIDEpOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgogYm9vbCBDQUF1ZGlvU3RyZWFt
RGVzY3JpcHRpb246OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBDQUF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb24mIGRlc2NyaXB0aW9uKQogewotICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVu
Z3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmZGVzY3JpcHRpb24ubV9zdHJlYW1E
ZXNjcmlwdGlvbiksIHNpemVvZihkZXNjcmlwdGlvbi5tX3N0cmVhbURlc2NyaXB0aW9uKSwgMSk7
CisgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmZGVzY3Jp
cHRpb24ubV9zdHJlYW1EZXNjcmlwdGlvbiwgMSB9LCAxKTsKIH0KIAogaW5saW5lIENBQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbiB0b0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbihjb25zdCBBdWRpb1N0
cmVhbURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVh
cktleS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Vu
Y3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTk4LDE1ICsxOTgsMTMgQEAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGV4dHJhY3RLZXlpZHNG
cgogewogICAgIFJlZjxTaGFyZWRCdWZmZXI+IGtleUlkcyA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRl
KCk7CiAKLSAgICBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBrZXlJZHNNYXAgPSBleHRy
YWN0S2V5aWRzTG9jYXRpb25Gcm9tQ2VuY0luaXREYXRhKGluaXREYXRhKTsKLSAgICB1bnNpZ25l
ZCBrZXlJZENvdW50ID0ga2V5SWRzTWFwLmZpcnN0OwotICAgIHVuc2lnbmVkIGluZGV4ID0ga2V5
SWRzTWFwLnNlY29uZDsKKyAgICBhdXRvIFtrZXlJZENvdW50LCBpbmRleF0gPSBleHRyYWN0S2V5
aWRzTG9jYXRpb25Gcm9tQ2VuY0luaXREYXRhKGluaXREYXRhKTsKIAogICAgIC8vIENoZWNrIGlm
IGluaXREYXRhIGlzIGEgdmFsaWQgQ0VOQyBpbml0RGF0YS4KICAgICBpZiAoIWtleUlkQ291bnQg
fHwgIWluZGV4KQogICAgICAgICByZXR1cm4ga2V5SWRzOwogCi0gICAgYXV0byogZGF0YSA9IGlu
aXREYXRhLmRhdGEoKTsKKyAgICBhdXRvIGRhdGEgPSBpbml0RGF0YS5ieXRlcygpOwogCiAgICAg
YXV0byBvYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGF1dG8ga2V5SWRzQXJy
YXkgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CkBAIC0yMTgsNyArMjE2LDcgQEAgc3RhdGljIFJl
ZjxTaGFyZWRCdWZmZXI+IGV4dHJhY3RLZXlpZHNGcgogICAgIC8vICJraWRzIgogICAgIC8vIEFu
IGFycmF5IG9mIGtleSBJRHMuIEVhY2ggZWxlbWVudCBvZiB0aGUgYXJyYXkgaXMgdGhlIGJhc2U2
NHVybCBlbmNvZGluZyBvZiB0aGUgb2N0ZXQgc2VxdWVuY2UgY29udGFpbmluZyB0aGUga2V5IElE
IHZhbHVlLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlJZENvdW50OyBpKyspIHsK
LSAgICAgICAga2V5SWRzQXJyYXktPnB1c2hTdHJpbmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmco
JmRhdGFbaW5kZXhdLCBDbGVhcktleTo6S2V5SURTaXplSW5CeXRlcykpOworICAgICAgICBrZXlJ
ZHNBcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhkYXRhLnN1YnNwYW4o
aW5kZXgsIENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVzKSkpOwogICAgICAgICBpbmRleCArPSBD
bGVhcktleTo6S2V5SURTaXplSW5CeXRlczsKICAgICB9CiAKQEAgLTI0NSw3ICsyNDMsNyBAQCBz
dGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gZXh0cmFjdEtleUlkRnJvCiAgICAgLy8gVGhlIGZvcm1h
dCBpcyBhIEpTT04gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyBtZW1iZXJzOgogICAg
IC8vICJraWRzIgogICAgIC8vIEFuIGFycmF5IG9mIGtleSBJRHMuIEVhY2ggZWxlbWVudCBvZiB0
aGUgYXJyYXkgaXMgdGhlIGJhc2U2NHVybCBlbmNvZGluZyBvZiB0aGUgb2N0ZXQgc2VxdWVuY2Ug
Y29udGFpbmluZyB0aGUga2V5IElEIHZhbHVlLgotICAgIGtleUlkc0FycmF5LT5wdXNoU3RyaW5n
KGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGluaXREYXRhLmRhdGEoKSwgaW5pdERhdGEuc2l6ZSgp
KSk7CisgICAga2V5SWRzQXJyYXktPnB1c2hTdHJpbmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmco
aW5pdERhdGEuYnl0ZXMoKSkpOwogCiAgICAgb2JqZWN0LT5zZXRBcnJheSgia2lkcyIsIFdURk1v
dmUoa2V5SWRzQXJyYXkpKTsKICAgICBDU3RyaW5nIGpzb25EYXRhID0gb2JqZWN0LT50b0pTT05T
dHJpbmcoKS51dGY4KCk7CkBAIC01NzgsOSArNTc2LDggQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Np
b25DbGVhcktleTo6cmVtb3ZlUwogCiAgICAgLy8gQ29uc3RydWN0IHRoZSBLZXlTdGF0dXNWZWN0
b3Igb2JqZWN0LCByZXByZXNlbnRpbmcgcmVsZWFzZWQga2V5cywgYW5kIHRoZSBtZXNzYWdlIGlu
IHRoZQogICAgIC8vICdsaWNlbnNlIHJlbGVhc2UnIGZvcm1hdC4KLSAgICBLZXlTdGF0dXNWZWN0
b3Iga2V5U3RhdHVzVmVjdG9yID0gbV9rZXlTdG9yZS5hbGxLZXlzQXMoQ0RNSW5zdGFuY2VTZXNz
aW9uOjpLZXlTdGF0dXM6OlJlbGVhc2VkKTsKLSAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtZXNz
YWdlOwotICAgIHsKKyAgICBhdXRvIGtleVN0YXR1c1ZlY3RvciA9IG1fa2V5U3RvcmUuYWxsS2V5
c0FzKENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpSZWxlYXNlZCk7CisgICAgYXV0byBt
ZXNzYWdlID0gWyZdewogICAgICAgICAvLyBDb25zdHJ1Y3QgSlNPTiB0aGF0IHJlcHJlc2VudHMg
dGhlICdsaWNlbnNlIHJlbGVhc2UnIGZvcm1hdCwgY3JlYXRpbmcgYSAna2lkcycgYXJyYXkKICAg
ICAgICAgLy8gb2YgYmFzZTY0VVJMLWVuY29kZWQga2V5IElEcyBmb3IgYWxsIGtleXMgdGhhdCB3
ZXJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNlc3Npb24uCiAgICAgICAgIGF1dG8gcm9vdE9iamVj
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CkBAIC01ODgsNyArNTg1LDcgQEAgdm9pZCBDRE1J
bnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlUwogICAgICAgICAgICAgYXV0byBhcnJheSA9
IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYga2V5
IDogbV9rZXlTdG9yZSkgewogICAgICAgICAgICAgICAgIEFTU0VSVChrZXktPmlkKCkuc2l6ZSgp
IDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7Ci0gICAgICAgICAgICAg
ICAgYXJyYXktPnB1c2hTdHJpbmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoa2V5LT5pZCgpLmRh
dGEoKSwga2V5LT5pZCgpLnNpemUoKSkpOworICAgICAgICAgICAgICAgIGFycmF5LT5wdXNoU3Ry
aW5nKGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGtleS0+aWQoKSkpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgcm9vdE9iamVjdC0+c2V0QXJyYXkoImtpZHMiLCBXVEZNb3ZlKGFycmF5KSk7
CiAgICAgICAgIH0KQEAgLTU5NiwxMSArNTkzLDExIEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9u
Q2xlYXJLZXk6OnJlbW92ZVMKICAgICAgICAgLy8gQ29weSB0aGUgSlNPTiBkYXRhIGludG8gYSBT
aGFyZWRCdWZmZXIgb2JqZWN0LgogICAgICAgICBTdHJpbmcgbWVzc2FnZVN0cmluZyA9IHJvb3RP
YmplY3QtPnRvSlNPTlN0cmluZygpOwogICAgICAgICBDU3RyaW5nIG1lc3NhZ2VDU3RyaW5nID0g
bWVzc2FnZVN0cmluZy51dGY4KCk7Ci0gICAgICAgIG1lc3NhZ2UgPSBTaGFyZWRCdWZmZXI6OmNy
ZWF0ZShtZXNzYWdlQ1N0cmluZy5kYXRhKCksIG1lc3NhZ2VDU3RyaW5nLmxlbmd0aCgpKTsKLSAg
ICB9CisgICAgICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShtZXNzYWdlQ1N0cmluZy5k
YXRhKCksIG1lc3NhZ2VDU3RyaW5nLmxlbmd0aCgpKTsKKyAgICB9KCk7CiAKICAgICBtX2tleVN0
b3JlLnJlbW92ZUFsbEtleXMoKTsKLSAgICBkaXNwYXRjaENhbGxiYWNrKFdURk1vdmUoa2V5U3Rh
dHVzVmVjdG9yKSwgUmVmPFNoYXJlZEJ1ZmZlcj4oKm1lc3NhZ2UpLCBTdWNjZXNzVmFsdWU6OlN1
Y2NlZWRlZCk7CisgICAgZGlzcGF0Y2hDYWxsYmFjayhXVEZNb3ZlKGtleVN0YXR1c1ZlY3Rvciks
IFdURk1vdmUobWVzc2FnZSksIFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVkKTsKIH0KIAogdm9pZCBD
RE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6c3RvcmVSZWNvcmRPZktleVVzYWdlKGNvbnN0IFN0
cmluZyYpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL0tleWVkRGVjb2Rl
ckdlbmVyaWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVy
aWMvS2V5ZWREZWNvZGVyR2VuZXJpYy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvS2V5ZWREZWNvZGVyR2VuZXJpYy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU4LDcgKzU4LDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiByZWFk
U3RyaW5nKAogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAogICAgIFZlY3Rvcjx1aW50
OF90PiBidWZmZXIoc2l6ZS52YWx1ZSgpKTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKGJ1ZmZlci5kYXRhKCksIHNpemUudmFsdWUoKSkpCisgICAgaWYgKCFkZWNvZGVy
LmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgYnVmZmVyIH0pKQogICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwogICAgIGF1dG8gcmVzdWx0ID0gU3RyaW5nOjpmcm9tVVRGOChidWZmZXIu
ZGF0YSgpLCBzaXplLnZhbHVlKCkpOwogICAgIGlmIChyZXN1bHQuaXNOdWxsKCkpCkBAIC0xMTcs
NyArMTE3LDcgQEAgS2V5ZWREZWNvZGVyR2VuZXJpYzo6S2V5ZWREZWNvZGVyR2VuZXJpYwogICAg
ICAgICAgICAgaWYgKCFvaykKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIFZl
Y3Rvcjx1aW50OF90PiBidWZmZXIoKnNpemUpOwotICAgICAgICAgICAgb2sgPSBkZWNvZGVyLmRl
Y29kZUZpeGVkTGVuZ3RoRGF0YShidWZmZXIuZGF0YSgpLCAqc2l6ZSk7CisgICAgICAgICAgICBv
ayA9IGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBidWZmZXIgfSk7CiAgICAg
ICAgICAgICBpZiAoIW9rKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgbV9k
aWN0aW9uYXJ5U3RhY2subGFzdCgpLT5hZGQoKmtleSwgV1RGTW92ZShidWZmZXIpKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01vZGVsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTW9kZWwuaAkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTW9kZWwuaAkod29ya2luZyBj
b3B5KQpAQCAtNTYsNyArNTYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBNb2Rl
bDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBzdGF0
aWNfY2FzdDxzaXplX3Q+KG1fZGF0YS0+c2l6ZSgpKTsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVk
TGVuZ3RoRGF0YShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCksIDEpOworICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKG1fZGF0YS0+Ynl0ZXMoKSwgMSk7CiB9CiAKIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+CkBAIC03NCw3ICs3NCw3IEBAIFJlZlB0cjxNb2RlbD4gTW9kZWw6
OmRlY29kZShEZWNvZGVyJiBkZWMKIAogICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAgIGRh
dGEuZ3JvdygqbGVuZ3RoKTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgMSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZp
eGVkTGVuZ3RoRGF0YShkYXRhLCAxKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBy
ZXR1cm4gTW9kZWw6OmNyZWF0ZShTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGRhdGEpKSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVy
LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1BpeGVsQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4gdm9pZCBQaXhlbEJ1ZmZlcgogCiAgICAgZW5jb2RlciA8PCBtX2Zvcm1h
dDsKICAgICBlbmNvZGVyIDw8IG1fc2l6ZTsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3Ro
RGF0YShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5ieXRlTGVuZ3RoKCksIDEpOworICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKG1fZGF0YS0+Ynl0ZXMoKSwgMSk7CiB9CiAKIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IFBpeGVsQnVmZmVy
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKQEAgLTExMyw3ICsxMTMsNyBAQCB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGQ6Om9wdGlvbmFsPFBpCiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5n
dGhEYXRhKHJlc3VsdC0+bV9kYXRhLT5kYXRhKCksIHJlc3VsdC0+bV9kYXRhLT5ieXRlTGVuZ3Ro
KCksIDEpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVzdWx0LT5t
X2RhdGEtPndyaXRhYmxlQnl0ZXMoKSwgMSkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CiAKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9i
akMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0JKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MTUsNyArNzE1LDcgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25GYWly
UGxheVN0cmVhbWluZwogICAgICAgICBpZGVudGlmaWVyID0gYWRvcHROUyhbW05TU3RyaW5nIGFs
bG9jXSBpbml0V2l0aERhdGE6aW5pdERhdGEtPmNyZWF0ZU5TRGF0YSgpLmdldCgpIGVuY29kaW5n
Ok5TVVRGOFN0cmluZ0VuY29kaW5nXSk7CiAjaWYgSEFWRShGQUlSUExBWVNUUkVBTUlOR19DRU5D
X0lOSVREQVRBKQogICAgIGVsc2UgaWYgKGluaXREYXRhVHlwZSA9PSBJbml0RGF0YVJlZ2lzdHJ5
OjpjZW5jTmFtZSgpKSB7Ci0gICAgICAgIGF1dG8gcHNzaFN0cmluZyA9IGJhc2U2NEVuY29kZVRv
U3RyaW5nKGluaXREYXRhLT5kYXRhKCksIGluaXREYXRhLT5zaXplKCkpOworICAgICAgICBhdXRv
IHBzc2hTdHJpbmcgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbml0RGF0YS0+Ynl0ZXMoKSk7CiAg
ICAgICAgIGluaXRpYWxpemF0aW9uRGF0YSA9IFtOU0pTT05TZXJpYWxpemF0aW9uIGRhdGFXaXRo
SlNPTk9iamVjdDpAeyBAInBzc2giOiAoTlNTdHJpbmcqKXBzc2hTdHJpbmcgfSBvcHRpb25zOk5T
SlNPTldyaXRpbmdQcmV0dHlQcmludGVkIGVycm9yOm5pbF07CiAgICAgfQogI2VuZGlmCkBAIC0x
MTk1LDggKzExOTUsOCBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5n
CiAgICAgICAgICAgICBhdXRvIGVudHJ5ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAg
ICAgICAgIGF1dG8mIGtleUlEID0gcmVxdWVzdERhdGEuZmlyc3Q7CiAgICAgICAgICAgICBhdXRv
JiBwYXlsb2FkID0gcmVxdWVzdERhdGEuc2Vjb25kOwotICAgICAgICAgICAgZW50cnktPnNldFN0
cmluZygia2V5SUQiLCBiYXNlNjRFbmNvZGVUb1N0cmluZyhrZXlJRC0+ZGF0YSgpLCBrZXlJRC0+
c2l6ZSgpKSk7Ci0gICAgICAgICAgICBlbnRyeS0+c2V0U3RyaW5nKCJwYXlsb2FkIiwgYmFzZTY0
RW5jb2RlVG9TdHJpbmcocGF5bG9hZC5nZXQoKS5ieXRlcywgcGF5bG9hZC5nZXQoKS5sZW5ndGgp
KTsKKyAgICAgICAgICAgIGVudHJ5LT5zZXRTdHJpbmcoImtleUlEIiwgYmFzZTY0RW5jb2RlVG9T
dHJpbmcoa2V5SUQtPmJ5dGVzKCkpKTsKKyAgICAgICAgICAgIGVudHJ5LT5zZXRTdHJpbmcoInBh
eWxvYWQiLCBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgc3RhdGljX2Nhc3Q8Y29uc3Qgc3Rk
OjpieXRlKj4ocGF5bG9hZC5nZXQoKS5ieXRlcyksIHBheWxvYWQuZ2V0KCkubGVuZ3RoIH0pKTsK
ICAgICAgICAgICAgIHJlcXVlc3RKU09OLT5wdXNoT2JqZWN0KFdURk1vdmUoZW50cnkpKTsKICAg
ICAgICAgfQogICAgICAgICBhdXRvIHJlcXVlc3RCdWZmZXIgPSB1dGY4QnVmZmVyKHJlcXVlc3RK
U09OLT50b0pTT05TdHJpbmcoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
U1NMS2V5R2VuZXJhdG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9TU0xLZXlHZW5lcmF0b3JNYWMubW0JKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0b3JNYWMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTIxOSw3ICsyMTksNyBAQCBzdGF0aWMgU3RyaW5nIHNpZ25lZFB1YmxpY0tleUFuZENo
YWxsZW5nCiAgICAgaWYgKFNlY0FzbjFFbmNvZGVJdGVtKGNvZGVyLCAmc2lnbmVkUHVibGljS2V5
QW5kQ2hhbGxlbmdlLCBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VUZW1wbGF0ZSwgJmVuY29k
ZWRTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2UpICE9IG5vRXJyKQogICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CiAKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoZW5jb2RlZFNpZ25l
ZFB1YmxpY0tleUFuZENoYWxsZW5nZS5EYXRhLCBlbmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hh
bGxlbmdlLkxlbmd0aCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKFNwYW4geyBl
bmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlLkRhdGEsIGVuY29kZWRTaWduZWRQdWJs
aWNLZXlBbmRDaGFsbGVuZ2UuTGVuZ3RoIH0pOwogfQogCiBBTExPV19ERVBSRUNBVEVEX0RFQ0xB
UkFUSU9OU19FTkQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1Jl
YWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVz
LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTE0LDE2ICsxMTQsMTYgQEAgcHJpdmF0ZToKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lk
IENhcGFiaWxpdHlWYWx1ZU9yUmFuZ2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAog
ewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDhfdCo+KCZtX21pbk9yVmFsdWUpLCBzaXplb2YoVmFsdWVVbmlvbiksIGFsaWdub2Yo
VmFsdWVVbmlvbikpOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZtX21heCksIHNpemVvZihWYWx1ZVVuaW9uKSwgYWxp
Z25vZihWYWx1ZVVuaW9uKSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoU3Bh
biB7ICZtX21pbk9yVmFsdWUsIDEgfSwgYWxpZ25vZihWYWx1ZVVuaW9uKSk7CisgICAgZW5jb2Rl
ci5lbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZtX21heCwgMSB9LCBhbGlnbm9mKFZhbHVl
VW5pb24pKTsKICAgICBlbmNvZGVyIDw8IG1fdHlwZTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4KIGJvb2wgQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZTo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIsIENhcGFiaWxpdHlWYWx1ZU9yUmFuZ2UmIHZhbHVlT3JSYW5nZSkKIHsKLSAgICByZXR1cm4g
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4o
JnZhbHVlT3JSYW5nZS5tX21pbk9yVmFsdWUpLCBzaXplb2YoVmFsdWVVbmlvbiksIGFsaWdub2Yo
VmFsdWVVbmlvbikpCi0gICAgICAgICYmIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2YWx1ZU9yUmFuZ2UubV9tYXgpLCBzaXplb2YoVmFs
dWVVbmlvbiksIGFsaWdub2YoVmFsdWVVbmlvbikpCisgICAgcmV0dXJuIGRlY29kZXIuZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmdmFsdWVPclJhbmdlLm1fbWluT3JWYWx1ZSwgMSB9LCBh
bGlnbm9mKFZhbHVlVW5pb24pKQorICAgICAgICAmJiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3Ro
RGF0YShTcGFuIHsgJnZhbHVlT3JSYW5nZS5tX21heCwgMSB9LCBhbGlnbm9mKFZhbHVlVW5pb24p
KQogICAgICAgICAmJiBkZWNvZGVyLmRlY29kZSh2YWx1ZU9yUmFuZ2UubV90eXBlKTsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNv
dXJjZUNlbnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3Vy
Y2VDZW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksMTMgKzEzOSwxMyBAQCBzdGF0aWMg
dm9pZCBhZGRTdHJpbmdUb1NIQTEoU0hBMSYgc2hhMSwgCiAKICAgICBpZiAoc3RyaW5nLmlzOEJp
dCgpICYmIHN0cmluZy5pc0FsbEFTQ0lJKCkpIHsKICAgICAgICAgY29uc3QgdWludDhfdCBudWxs
Qnl0ZSA9IDA7Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMoc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0
cmluZy5sZW5ndGgoKSk7Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMoJm51bGxCeXRlLCAxKTsKKyAg
ICAgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5s
ZW5ndGgoKSB9KTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgJm51bGxCeXRlLCAxIH0p
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgYXV0byB1dGY4ID0gc3RyaW5nLnV0Zjgo
KTsKLSAgICBzaGExLmFkZEJ5dGVzKHV0ZjguZGF0YUFzVUludDhQdHIoKSwgdXRmOC5sZW5ndGgo
KSArIDEpOyAvLyBJbmNsdWRlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4KKyAgICBzaGExLmFkZEJ5
dGVzKFNwYW4geyB1dGY4LmRhdGFBc1VJbnQ4UHRyKCksIHV0ZjgubGVuZ3RoKCkgKyAxIH0pOyAv
LyBJbmNsdWRlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4KIH0KIAogU3RyaW5nIFJlYWx0aW1lTWVk
aWFTb3VyY2VDZW50ZXI6Omhhc2hTdHJpbmdXaXRoU2FsdChjb25zdCBTdHJpbmcmIGlkLCBjb25z
dCBTdHJpbmcmIGhhc2hTYWx0KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9DcmVkZW50aWFsQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9DcmVkZW50aWFsQmFzZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05Nyw4ICs5Nyw5IEBAIGJvb2wgQ3JlZGVudGlhbEJhc2U6OmNvbXBhcmUoY29uc3Qg
Q3JlZGUKIAogU3RyaW5nIENyZWRlbnRpYWxCYXNlOjpzZXJpYWxpemF0aW9uRm9yQmFzaWNBdXRo
b3JpemF0aW9uSGVhZGVyKCkgY29uc3QKIHsKKyAgICAvLyBGSVhNRTogQWRkIG1ha2VTdHJpbmcg
dmFyaWFudCB0aGF0IGNyZWF0ZXMgYSB1dGY4IGJ1ZmZlciBkaXJlY3RseS4KICAgICBhdXRvIGNy
ZWRlbnRpYWxTdHJpbmdEYXRhID0gbWFrZVN0cmluZyhtX3VzZXIsICc6JywgbV9wYXNzd29yZCku
dXRmOCgpOwotICAgIHJldHVybiBtYWtlU3RyaW5nKCJCYXNpYyAiLCBiYXNlNjRFbmNvZGVkKGNy
ZWRlbnRpYWxTdHJpbmdEYXRhKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIkJhc2ljICIsIGJh
c2U2NEVuY29kZWQoY3JlZGVudGlhbFN0cmluZ0RhdGEuYnl0ZXMoKSkpOwogfQogCiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0NlcnRpZmljYXRlSW5mb0NGTmV0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nl
cnRpZmljYXRlSW5mb0NGTmV0LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIxMCw3ICsyMTAsNyBAQCBzdGF0aWMgdm9pZCBlbmNvZGVDRkRhdGEoRW5jb2Rl
ciYgZW5jb2RlCiAgICAgY29uc3QgdWludDhfdCogYnl0ZVB0ciA9IENGRGF0YUdldEJ5dGVQdHIo
ZGF0YSk7CiAKICAgICBlbmNvZGVyIDw8IGxlbmd0aDsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVk
TGVuZ3RoRGF0YShieXRlUHRyLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkpOworICAgIGVu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBieXRlUHRyLCBzdGF0aWNfY2FzdDxz
aXplX3Q+KGxlbmd0aCkgfSk7CiB9CiAKIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldGFpblB0cjxD
RkRhdGFSZWY+PiBkZWNvZGVDRkRhdGEoRGVjb2RlciYgZGVjb2RlcikKQEAgLTIyNSw3ICsyMjUs
NyBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXRhaW5QdHI8Q0ZEYXRhUmVmCiAgICAgaWYgKCFw
b2ludGVyKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIGFkb3B0
Q0YoQ0ZEYXRhQ3JlYXRlKG51bGxwdHIsIHBvaW50ZXIsICpzaXplKSk7CisgICAgcmV0dXJuIGFk
b3B0Q0YoQ0ZEYXRhQ3JlYXRlKG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KHBvaW50ZXIpLCAqc2l6ZSkpOwogfQogCiAjaWYgSEFWRShTRUNfVFJVU1RfU0VSSUFMSVpB
VElPTikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9DZXJ0aWZp
Y2F0ZUluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvQ2VydGlmaWNhdGVJbmZvLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9DZXJ0aWZpY2F0ZUluZm8uaAkod29ya2luZyBjb3B5
KQpAQCAtNzUsNyArNzUsNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxHUmVmUHRyPEdCeXRl
QXJyCiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXIgJmVuY29kZXIsIGNvbnN0IEdSZWZQ
dHI8R0J5dGVBcnJheT4mIGJ5dGVBcnJheSkKICAgICB7CiAgICAgICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KGJ5dGVBcnJheS0+bGVuKTsKLSAgICAgICAgZW5jb2Rlci5lbmNv
ZGVGaXhlZExlbmd0aERhdGEoYnl0ZUFycmF5LT5kYXRhLCBieXRlQXJyYXktPmxlbik7CisgICAg
ICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBieXRlQXJyYXktPmRhdGEs
IGJ5dGVBcnJheS0+bGVuIH0pOwogICAgIH0KIAogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEdS
ZWZQdHI8R0J5dGVBcnJheT4+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQpAQCAtODcsNyArODcs
NyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxHUmVmUHRyPEdCeXRlQXJyCiAKICAgICAgICAg
R1JlZlB0cjxHQnl0ZUFycmF5PiBieXRlQXJyYXkgPSBhZG9wdEdSZWYoZ19ieXRlX2FycmF5X3Np
emVkX25ldygqc2l6ZSkpOwogICAgICAgICBnX2J5dGVfYXJyYXlfc2V0X3NpemUoYnl0ZUFycmF5
LmdldCgpLCAqc2l6ZSk7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERh
dGEoYnl0ZUFycmF5LT5kYXRhLCAqc2l6ZSkpCisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVG
aXhlZExlbmd0aERhdGEoU3BhbiB7IGJ5dGVBcnJheS0+ZGF0YSwgKnNpemUgfSkpCiAgICAgICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAgICByZXR1cm4gYnl0ZUFycmF5OwogICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1l
bnQuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwv
U1FMaXRlU3RhdGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCBib29s
IFNRTGl0ZVN0YXRlbWVudDo6ZXhlY3V0ZUNvbW1hbmQoKQogICAgIHJldHVybiBzdGVwKCkgPT0g
U1FMSVRFX0RPTkU7CiB9CiAKLWludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRl
eCwgU3Bhbjxjb25zdCB1aW50OF90PiBibG9iKQoraW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEJs
b2IoaW50IGluZGV4LCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYmxvYikKIHsKICAgICBBU1NFUlQo
aW5kZXggPiAwKTsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8PSBi
aW5kUGFyYW1ldGVyQ291bnQoKSk7CkBAIC05NSw2ICs5NSwxMSBAQCBpbnQgU1FMaXRlU3RhdGVt
ZW50OjpiaW5kQmxvYihpbnQgaW5kZXgsCiAgICAgcmV0dXJuIHNxbGl0ZTNfYmluZF9ibG9iKG1f
c3RhdGVtZW50LCBpbmRleCwgYmxvYi5kYXRhKCksIGJsb2Iuc2l6ZSgpLCBTUUxJVEVfVFJBTlNJ
RU5UKTsKIH0KIAoraW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IoaW50IGluZGV4LCBTcGFu
PGNvbnN0IHVpbnQ4X3Q+IGJsb2IpCit7CisgICAgcmV0dXJuIGJpbmRCbG9iKGluZGV4LCBhc0J5
dGVzKGJsb2IpKTsKK30KKwogaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IoaW50IGluZGV4
LCBjb25zdCBTdHJpbmcmIHRleHQpCiB7CiAgICAgLy8gU3RyaW5nOjpjaGFyYWN0ZXJzKCkgcmV0
dXJucyAwIGZvciB0aGUgZW1wdHkgc3RyaW5nLCB3aGljaCBTUUxpdGUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQg
flNRTGl0ZVN0YXRlbWVudCgpOwogICAgIFdFQkNPUkVfRVhQT1JUIFNRTGl0ZVN0YXRlbWVudChT
UUxpdGVTdGF0ZW1lbnQmJik7CiAgICAgCisgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJpbmRCbG9i
KGludCBpbmRleCwgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KTsKICAgICBXRUJDT1JFX0VYUE9SVCBp
bnQgYmluZEJsb2IoaW50IGluZGV4LCBTcGFuPGNvbnN0IHVpbnQ4X3Q+KTsKICAgICBXRUJDT1JF
X0VYUE9SVCBpbnQgYmluZEJsb2IoaW50IGluZGV4LCBjb25zdCBTdHJpbmcmKTsKICAgICBXRUJD
T1JFX0VYUE9SVCBpbnQgYmluZFRleHQoaW50IGluZGV4LCBTdHJpbmdWaWV3KTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAJKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDcgKzI1MSw3IEBAIHN0ZDo6b3B0aW9uYWw8UGFzdGVi
b2FyZEN1c3RvbURhdGE+IFBhc3QKICAgICAgICAgaWYgKEhBTkRMRSBjYkRhdGEgPSA6OkdldENs
aXBib2FyZERhdGEoQ3VzdG9tRGF0YUNsaXBib2FyZEZvcm1hdCkpIHsKICAgICAgICAgICAgIHNp
emVfdCBzaXplID0gR2xvYmFsU2l6ZShjYkRhdGEpOwogICAgICAgICAgICAgYXV0byBkYXRhID0g
c3RhdGljX2Nhc3Q8dWludDhfdCo+KEdsb2JhbExvY2soY2JEYXRhKSk7Ci0gICAgICAgICAgICBh
dXRvIGN1c3RvbURhdGEgPSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6ZnJvbVBlcnNpc3RlbmNlRGVj
b2Rlcih7ZGF0YSwgc2l6ZX0pOworICAgICAgICAgICAgYXV0byBjdXN0b21EYXRhID0gUGFzdGVi
b2FyZEN1c3RvbURhdGE6OmZyb21QZXJzaXN0ZW5jZURlY29kZXIoU3BhbiB7IGRhdGEsIHNpemUg
fSk7CiAKICAgICAgICAgICAgIEdsb2JhbFVubG9jayhjYkRhdGEpOwogICAgICAgICAgICAgOjpD
bG9zZUNsaXBib2FyZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3Nl
cnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVn
aXN0cmF0aW9uRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTksMTAgKzQ1OSwxMCBA
QCBib29sIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2VzCiAgICAgICAgICAgICB8
fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDYsIHVwZGF0ZVZpYUNhY2hlVG9TdHJpbmcoZGF0
YS5yZWdpc3RyYXRpb24udXBkYXRlVmlhQ2FjaGUpKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAg
IHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRleHQoNywgZGF0YS5zY3JpcHRVUkwuc3RyaW5nKCkp
ICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCg4
LCB3b3JrZXJUeXBlVG9TdHJpbmcoZGF0YS53b3JrZXJUeXBlKSkgIT0gU1FMSVRFX09LCi0gICAg
ICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDksIFNwYW4geyBjc3BFbmNvZGVy
LmJ1ZmZlcigpLCBjc3BFbmNvZGVyLmJ1ZmZlclNpemUoKSB9KSAhPSBTUUxJVEVfT0sKKyAgICAg
ICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoOSwgY3NwRW5jb2Rlci5idWZmZXIo
KSkgIT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0
KDEwLCBkYXRhLnJlZmVycmVyUG9saWN5KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGlu
c2VydFN0YXRlbWVudC0+YmluZEJsb2IoMTEsIFNwYW4geyBzY3JpcHRSZXNvdXJjZU1hcEVuY29k
ZXIuYnVmZmVyKCksIHNjcmlwdFJlc291cmNlTWFwRW5jb2Rlci5idWZmZXJTaXplKCkgfSkgIT0g
U1FMSVRFX09LCi0gICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDEyLCBT
cGFuIHsgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXIoKSwgY2VydGlmaWNhdGVJbmZvRW5j
b2Rlci5idWZmZXJTaXplKCkgfSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRT
dGF0ZW1lbnQtPmJpbmRCbG9iKDExLCBzY3JpcHRSZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVyKCkp
ICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kQmxvYigx
MiwgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXIoKSkgIT0gU1FMSVRFX09LCiAgICAgICAg
ICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIkZhaWxlZCB0byBzdG9yZSBy
ZWdpc3RyYXRpb24gZGF0YSBpbnRvIHJlY29yZHMgdGFibGUgKCVpKSAtICVzIiwgbV9kYXRhYmFz
ZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTUxNyw3ICs1MTcsNyBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0
YWJhc2U6OmltcG9ydFJlY29yCiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29udGVudFNlY3VyaXR5
UG9saWN5UmVzcG9uc2VIZWFkZXJzPiBjb250ZW50U2VjdXJpdHlQb2xpY3k7CiAgICAgICAgIGF1
dG8gY29udGVudFNlY3VyaXR5UG9saWN5RGF0YVNwYW4gPSBzcWwtPmNvbHVtbkJsb2JBc1NwYW4o
OCk7CiAgICAgICAgIGlmIChjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhU3Bhbi5zaXplKCkpIHsK
LSAgICAgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgY3NwRGVjb2Rlcihjb250ZW50
U2VjdXJpdHlQb2xpY3lEYXRhU3Bhbi5kYXRhKCksIGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGFT
cGFuLnNpemUoKSk7CisgICAgICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGNzcERl
Y29kZXIgeyBjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhU3BhbiB9OwogICAgICAgICAgICAgY3Nw
RGVjb2RlciA+PiBjb250ZW50U2VjdXJpdHlQb2xpY3k7CiAgICAgICAgICAgICBpZiAoIWNvbnRl
bnRTZWN1cml0eVBvbGljeSkgewogICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNl
cnZpY2VXb3JrZXIsICJSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3JkczogRmFpbGVk
IHRvIGRlY29kZSBjb250ZW50U2VjdXJpdHlQb2xpY3kiKTsKQEAgLTUzMCw3ICs1MzAsNyBAQCBT
dHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yCiAgICAgICAgIEhhc2hNYXA8
VVJMLCBTZXJ2aWNlV29ya2VyQ29udGV4dERhdGE6OkltcG9ydGVkU2NyaXB0PiBzY3JpcHRSZXNv
dXJjZU1hcDsKICAgICAgICAgYXV0byBzY3JpcHRSZXNvdXJjZU1hcERhdGFTcGFuID0gc3FsLT5j
b2x1bW5CbG9iQXNTcGFuKDEwKTsKICAgICAgICAgaWYgKHNjcmlwdFJlc291cmNlTWFwRGF0YVNw
YW4uc2l6ZSgpKSB7Ci0gICAgICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIHNjcmlw
dFJlc291cmNlTWFwRGVjb2RlcihzY3JpcHRSZXNvdXJjZU1hcERhdGFTcGFuLmRhdGEoKSwgc2Ny
aXB0UmVzb3VyY2VNYXBEYXRhU3Bhbi5zaXplKCkpOworICAgICAgICAgICAgV1RGOjpQZXJzaXN0
ZW5jZTo6RGVjb2RlciBzY3JpcHRSZXNvdXJjZU1hcERlY29kZXIgeyBzY3JpcHRSZXNvdXJjZU1h
cERhdGFTcGFuIH07CiAgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPEhhc2hNYXA8VVJMLCBJbXBv
cnRlZFNjcmlwdEF0dHJpYnV0ZXM+PiBzY3JpcHRSZXNvdXJjZU1hcFdpdGhvdXRTY3JpcHRzOwog
ICAgICAgICAgICAgc2NyaXB0UmVzb3VyY2VNYXBEZWNvZGVyID4+IHNjcmlwdFJlc291cmNlTWFw
V2l0aG91dFNjcmlwdHM7CiAgICAgICAgICAgICBpZiAoIXNjcmlwdFJlc291cmNlTWFwV2l0aG91
dFNjcmlwdHMpIHsKQEAgLTU0Myw3ICs1NDMsNyBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJh
c2U6OmltcG9ydFJlY29yCiAgICAgICAgIGF1dG8gY2VydGlmaWNhdGVJbmZvRGF0YVNwYW4gPSBz
cWwtPmNvbHVtbkJsb2JBc1NwYW4oMTEpOwogICAgICAgICBzdGQ6Om9wdGlvbmFsPENlcnRpZmlj
YXRlSW5mbz4gY2VydGlmaWNhdGVJbmZvOwogCi0gICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRl
Y29kZXIgY2VydGlmaWNhdGVJbmZvRGVjb2RlcihjZXJ0aWZpY2F0ZUluZm9EYXRhU3Bhbi5kYXRh
KCksIGNlcnRpZmljYXRlSW5mb0RhdGFTcGFuLnNpemUoKSk7CisgICAgICAgIFdURjo6UGVyc2lz
dGVuY2U6OkRlY29kZXIgY2VydGlmaWNhdGVJbmZvRGVjb2RlciB7IGNlcnRpZmljYXRlSW5mb0Rh
dGFTcGFuIH07CiAgICAgICAgIGNlcnRpZmljYXRlSW5mb0RlY29kZXIgPj4gY2VydGlmaWNhdGVJ
bmZvOwogICAgICAgICBpZiAoIWNlcnRpZmljYXRlSW5mbykgewogICAgICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRS
ZWNvcmRzOiBGYWlsZWQgdG8gZGVjb2RlIGNlcnRpZmljYXRlSW5mbyIpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NjcmlwdFN0b3JhZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTY3JpcHRT
dG9yYWdlLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9z
ZXJ2aWNlL3NlcnZlci9TV1NjcmlwdFN0b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3
ICs1Niw3IEBAIFN0cmluZyBTV1NjcmlwdFN0b3JhZ2U6OnNoYTJIYXNoKGNvbnN0IFMKICAgICBh
dXRvIGlucHV0VXRmOCA9IGlucHV0LnV0ZjgoKTsKICAgICBjcnlwdG8tPmFkZEJ5dGVzKGlucHV0
VXRmOC5kYXRhKCksIGlucHV0VXRmOC5sZW5ndGgoKSk7CiAgICAgYXV0byBoYXNoID0gY3J5cHRv
LT5jb21wdXRlSGFzaCgpOwotICAgIHJldHVybiBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhoYXNo
LmRhdGEoKSwgaGFzaC5zaXplKCkpOworICAgIHJldHVybiBiYXNlNjRVUkxFbmNvZGVUb1N0cmlu
ZyhoYXNoKTsKIH0KIAogU3RyaW5nIFNXU2NyaXB0U3RvcmFnZTo6c2hhMkhhc2goY29uc3QgVVJM
JiBpbnB1dCkgY29uc3QKQEAgLTg2LDkgKzg2LDkgQEAgU2NyaXB0QnVmZmVyIFNXU2NyaXB0U3Rv
cmFnZTo6c3RvcmUoY29ucwogICAgIGF1dG8gc2NyaXB0UGF0aCA9IHRoaXMtPnNjcmlwdFBhdGgo
cmVnaXN0cmF0aW9uS2V5LCBzY3JpcHRVUkwpOwogICAgIEZpbGVTeXN0ZW06Om1ha2VBbGxEaXJl
Y3RvcmllcyhGaWxlU3lzdGVtOjpwYXJlbnRQYXRoKHNjcmlwdFBhdGgpKTsKIAotICAgIGF1dG8g
aXRlcmF0ZU92ZXJCdWZmZXJBbmRXcml0ZURhdGEgPSBbJl0oY29uc3QgRnVuY3Rpb248Ym9vbChj
b25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIHdyaXRlRGF0YSkgewotICAgICAgICBmb3IgKGF1dG8g
aXQgPSBzY3JpcHQuYnVmZmVyKCktPmJlZ2luKCk7IGl0ICE9IHNjcmlwdC5idWZmZXIoKS0+ZW5k
KCk7ICsraXQpCi0gICAgICAgICAgICB3cml0ZURhdGEoaXQtPnNlZ21lbnQtPmRhdGEoKSwgaXQt
PnNlZ21lbnQtPnNpemUoKSk7CisgICAgYXV0byBpdGVyYXRlT3ZlckJ1ZmZlckFuZFdyaXRlRGF0
YSA9IFsmXShjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+JiB3cml0
ZURhdGEpIHsKKyAgICAgICAgZm9yIChhdXRvJiBzZWdtZW50RW50cnkgOiAqc2NyaXB0LmJ1ZmZl
cigpKQorICAgICAgICAgICAgd3JpdGVEYXRhKHNlZ21lbnRFbnRyeS5zZWdtZW50LT5ieXRlcygp
KTsKICAgICB9OwogCiAgICAgaWYgKCFzaG91bGRVc2VGaWxlTWFwcGluZyhzY3JpcHQuYnVmZmVy
KCktPnNpemUoKSkpIHsKQEAgLTk3LDggKzk3LDggQEAgU2NyaXB0QnVmZmVyIFNXU2NyaXB0U3Rv
cmFnZTo6c3RvcmUoY29ucwogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU2VydmljZVdv
cmtlciwgIlNXU2NyaXB0U3RvcmFnZTo6c3RvcmU6IEZhaWx1cmUgdG8gc3RvcmUgJXMsIEZpbGVT
eXN0ZW06Om9wZW5GaWxlKCkgZmFpbGVkIiwgc2NyaXB0UGF0aC51dGY4KCkuZGF0YSgpKTsKICAg
ICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIH0KLSAgICAgICAgaXRlcmF0ZU92ZXJCdWZm
ZXJBbmRXcml0ZURhdGEoWyZdKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7Ci0g
ICAgICAgICAgICBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShoYW5kbGUsIGRhdGEsIHNpemUpOwor
ICAgICAgICBpdGVyYXRlT3ZlckJ1ZmZlckFuZFdyaXRlRGF0YShbJl0oU3Bhbjxjb25zdCBzdGQ6
OmJ5dGU+IGRhdGEpIHsKKyAgICAgICAgICAgIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKGhhbmRs
ZSwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9KTsKICAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGhhbmRsZSk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSw4MSBAQAorMjAyMS0wNi0xMSAgU2FtIFdlaW5pZyAgPHdl
aW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRvcHQgU3BhbiBpbiBtb3JlIHBsYWNlcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2ODg3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6ZW5jb2RlKToKKyAgICAgICAg
KFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6ZGVjb2RlUmVjb3JkSGVhZGVyKToKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6c3RvcmVPcmlnaW4pOgorICAg
ICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVhZE9yaWdpbik6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6ZW5jb2RlQ2FjaGVOYW1lcyk6CisgICAgICAgIChXZWJL
aXQ6OkNhY2hlU3RvcmFnZTo6ZGVjb2RlQ2FjaGVzTmFtZXMpOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ2FjaGU6OkRhdGE6Om1hcFRvRmlsZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6Y29tcHV0ZVNIQTEpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZURhdGEuaDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhOjpE
YXRhKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29j
b2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YTo6YXBwbHkgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6OmFkb3B0TWFwKToKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHA6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6OmVuY29kZUFzU3RvcmFnZVJlY29yZCBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6OmRlY29kZVN0b3JhZ2VS
ZWNvcmQpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6aGFzaFN0cmluZyk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6S2V5Ojpjb21wdXRlSGFzaCBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6S2V5Ojpjb21wdXRlUGFydGl0aW9uSGFzaCBjb25zdCk6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHA6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6ZGVjb2RlUmVjb3JkTWV0YURhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmVuY29kZVJlY29yZE1ldGFEYXRhKToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRy
eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3VicmVzb3VyY2VzRW50cnk6
OmVuY29kZUFzU3RvcmFnZVJlY29yZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6U3VicmVzb3VyY2VzRW50cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQpOgorICAgICAgICAq
IFBsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVyLmg6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0Fy
Z3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxDU3RyaW5nPjo6
ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxDU3RyaW5nPjo6ZGVjb2RlKToK
KyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxTdHJpbmc+OjplbmNvZGUpOgorICAgICAgICAo
SVBDOjpkZWNvZGVTdHJpbmdUZXh0KToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxTSEEx
OjpEaWdlc3Q+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFNIQTE6OkRp
Z2VzdD46OmRlY29kZSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmg6
CisgICAgICAgIChJUEM6OlNpbXBsZUFyZ3VtZW50Q29kZXI6OmVuY29kZSk6CisgICAgICAgIChJ
UEM6OlNpbXBsZUFyZ3VtZW50Q29kZXI6OmRlY29kZSk6CisgICAgICAgICogUGxhdGZvcm0vSVBD
L0FycmF5UmVmZXJlbmNlLmg6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0RlY29kZXIuY3BwOgor
ICAgICAgICAoSVBDOjpEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAq
IFBsYXRmb3JtL0lQQy9EZWNvZGVyLmg6CisgICAgICAgIChJUEM6OkRlY29kZXI6OmRlY29kZUZp
eGVkTGVuZ3RoRGF0YSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0VuY29kZXIuY3BwOgorICAg
ICAgICAoSVBDOjpFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAqIFBs
YXRmb3JtL0lQQy9FbmNvZGVyLmg6CisgICAgICAgICogUGxhdGZvcm0vSVBDL1NoYXJlZEJ1ZmZl
ckNvcHkuY3BwOgorICAgICAgICAoSVBDOjpTaGFyZWRCdWZmZXJDb3B5OjplbmNvZGUgY29uc3Qp
OgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uRW5jb2Rlci5oOgorICAg
ICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoSVBDOjpl
bmNvZGVTaGFyZWRCdWZmZXIpOgorICAgICAgICAoSVBDOjpkZWNvZGVTaGFyZWRCdWZmZXIpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuY3BwOgorICAg
ICAgICAoQVBJOjplbmNvZGVDb250ZW50UnVsZUxpc3RNZXRhRGF0YSk6CisgICAgICAgIChBUEk6
OmdldERhdGEpOgorICAgICAgICAoQVBJOjpkZWNvZGVDb250ZW50UnVsZUxpc3RNZXRhRGF0YSk6
CisgICAgICAgIChBUEk6OndyaXRlRGF0YVRvRmlsZSk6CisgICAgICAgICogVUlQcm9jZXNzL21h
Yy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwOgorICAgICAgICAoV2ViS2l0OjpIaXN0b3J5
RW50cnlEYXRhRW5jb2Rlcjo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlF
bnRyeURhdGFFbmNvZGVyOjplbmNvZGVBcml0aG1ldGljVHlwZSk6CisgICAgICAgIChXZWJLaXQ6
Okhpc3RvcnlFbnRyeURhdGFFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAg
ICAoV2ViS2l0OjpIaXN0b3J5RW50cnlEYXRhRGVjb2Rlcjo6b3BlcmF0b3I+Pik6CisgICAgICAg
IChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFEZWNvZGVyOjpkZWNvZGVBcml0aG1ldGljVHlwZSk6
CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFEZWNvZGVyOjpkZWNvZGVGaXhlZExl
bmd0aERhdGEpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6ZW5jb2RlVHlwZWRBcnJheSk6CisK
IDIwMjEtMDYtMTEgIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyNzg3NTQuCkluZGV4OiBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dE1hbmFnZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyMyw3ICszMjMsNyBAQCB2b2lkIFByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlcjo6
ZmlyCiAgICAgICAgIGNyeXB0by0+YWRkQnl0ZXMocHVibGljS2V5RGF0YS0+ZGF0YSgpLCBwdWJs
aWNLZXlEYXRhLT5zaXplKCkpOwogICAgICAgICBhdXRvIHB1YmxpY0tleURhdGFIYXNoID0gY3J5
cHRvLT5jb21wdXRlSGFzaCgpOwogCi0gICAgICAgIGF1dG8ga2V5SUQgPSBiYXNlNjRVUkxFbmNv
ZGVUb1N0cmluZyhwdWJsaWNLZXlEYXRhSGFzaC5kYXRhKCksIHB1YmxpY0tleURhdGFIYXNoLnNp
emUoKSk7CisgICAgICAgIGF1dG8ga2V5SUQgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhwdWJs
aWNLZXlEYXRhSGFzaCk7CiAgICAgICAgIGlmIChrZXlJRCAhPSBhdHRyaWJ1dGlvbi5zb3VyY2VV
bmxpbmthYmxlVG9rZW4oKS0+a2V5SURCYXNlNjRVUkwpCiAgICAgICAgICAgICByZXR1cm47CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5n
aW5lQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTY1LDcgKzU2NSw3IEBAIFN0b3JhZ2U6OlJlY29yZCBD
YWNoZTo6ZW5jb2RlKGNvbnN0IFJlY28KIAogICAgIGVuY29kZXIuZW5jb2RlQ2hlY2tzdW0oKTsK
IAotICAgIERhdGEgaGVhZGVyKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgp
KTsKKyAgICBEYXRhIGhlYWRlcihlbmNvZGVyLmJ1ZmZlcigpKTsKICAgICBEYXRhIGJvZHk7CiAg
ICAgV1RGOjpzd2l0Y2hPbihyZWNvcmQucmVzcG9uc2VCb2R5LCBbXShjb25zdCBSZWY8V2ViQ29y
ZTo6Rm9ybURhdGE+JiBmb3JtRGF0YSkgewogICAgICAgICAvLyBGSVhNRTogU3RvcmUgZm9ybSBk
YXRhIGJvZHkuCkBAIC02MzAsNyArNjMwLDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29y
ZTo6RE9NQ2FjaGVFbgogCiBzdGQ6Om9wdGlvbmFsPENhY2hlOjpEZWNvZGVkUmVjb3JkPiBDYWNo
ZTo6ZGVjb2RlUmVjb3JkSGVhZGVyKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYgc3RvcmFnZSkKIHsK
LSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoc3RvcmFnZS5oZWFkZXIuZGF0
YSgpLCBzdG9yYWdlLmhlYWRlci5zaXplKCkpOworICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29k
ZXIgZGVjb2RlcihTcGFuIHsgc3RvcmFnZS5oZWFkZXIuZGF0YSgpLCBzdG9yYWdlLmhlYWRlci5z
aXplKCkgfSk7CiAKICAgICBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gaW5zZXJ0aW9uVGltZTsKICAg
ICBkZWNvZGVyID4+IGluc2VydGlvblRpbWU7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNo
ZXMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
NSwxNCArMTA1LDE0IEBAIHZvaWQgQ2FjaGVzOjpzdG9yZU9yaWdpbihDb21wbGV0aW9uQ2FsbGIK
ICAgICBlbmNvZGVyIDw8IG1fb3JpZ2luLmNsaWVudE9yaWdpbi5wcm90b2NvbDsKICAgICBlbmNv
ZGVyIDw8IG1fb3JpZ2luLmNsaWVudE9yaWdpbi5ob3N0OwogICAgIGVuY29kZXIgPDwgbV9vcmln
aW4uY2xpZW50T3JpZ2luLnBvcnQ7Ci0gICAgbV9lbmdpbmUtPndyaXRlRmlsZShjYWNoZXNPcmln
aW5GaWxlbmFtZShtX3Jvb3RQYXRoKSwgRGF0YSB7IGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIu
YnVmZmVyU2l6ZSgpIH0sIFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChzdGQ6Om9wdGlvbmFsPEVy
cm9yPiYmIGVycm9yKSBtdXRhYmxlIHsKKyAgICBtX2VuZ2luZS0+d3JpdGVGaWxlKGNhY2hlc09y
aWdpbkZpbGVuYW1lKG1fcm9vdFBhdGgpLCBEYXRhIHsgZW5jb2Rlci5idWZmZXIoKSB9LCBbcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSAoc3RkOjpvcHRpb25hbDxFcnJvcj4mJiBlcnJvcikgbXV0YWJs
ZSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoZXJyb3IpKTsKICAgICB9KTsK
IH0KIAogc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+IENhY2hlczo6cmVhZE9y
aWdpbihjb25zdCBEYXRhJiBkYXRhKQogewotICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIg
ZGVjb2RlcihkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOworICAgIFdURjo6UGVyc2lzdGVuY2U6
OkRlY29kZXIgZGVjb2RlcihTcGFuIHsgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpIH0pOwogCiAg
ICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IHRvcE9yaWdpbjsK
ICAgICBkZWNvZGVyID4+IHRvcE9yaWdpbjsKQEAgLTQwNCwxMiArNDA0LDEyIEBAIHN0YXRpYyBp
bmxpbmUgRGF0YSBlbmNvZGVDYWNoZU5hbWVzKGNvbnMKICAgICAgICAgZW5jb2RlciA8PCBjYWNo
ZS51bmlxdWVOYW1lKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIERhdGEgeyBlbmNvZGVyLmJ1ZmZl
cigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSB9OworICAgIHJldHVybiBEYXRhIHsgZW5jb2Rlci5i
dWZmZXIoKSB9OwogfQogCiBzdGF0aWMgaW5saW5lIEV4cGVjdGVkPFZlY3RvcjxzdGQ6OnBhaXI8
U3RyaW5nLCBTdHJpbmc+PiwgRXJyb3I+IGRlY29kZUNhY2hlc05hbWVzKGNvbnN0IERhdGEmIGRh
dGEpCiB7Ci0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEuZGF0YSgp
LCBkYXRhLnNpemUoKSk7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKFNw
YW4geyBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkgfSk7CiAgICAgc3RkOjpvcHRpb25hbDx1aW50
NjRfdD4gY291bnQ7CiAgICAgZGVjb2RlciA+PiBjb3VudDsKICAgICBpZiAoIWNvdW50KQpJbmRl
eDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZURhdGEuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogRGF0YSBEYXRhOjptYXBUb0Zp
bGUoY29uc3QgU3RyaW5nJiBwYXRoKSBjb25zdAogewogICAgIEZpbGVTeXN0ZW06OlBsYXRmb3Jt
RmlsZUhhbmRsZSBoYW5kbGU7Ci0gICAgYXV0byBhcHBseURhdGEgPSBbJl0oY29uc3QgRnVuY3Rp
b248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIGFwcGxpZXIpIHsgYXBwbHkoYXBwbGll
cik7IH07CisgICAgYXV0byBhcHBseURhdGEgPSBbJl0oY29uc3QgRnVuY3Rpb248Ym9vbChTcGFu
PGNvbnN0IHN0ZDo6Ynl0ZT4pPiYgYXBwbGllcikgeyBhcHBseShhcHBsaWVyKTsgfTsKICAgICBh
dXRvIG1hcHBlZEZpbGUgPSBGaWxlU3lzdGVtOjptYXBUb0ZpbGUocGF0aCwgc2l6ZSgpLCBXVEZN
b3ZlKGFwcGx5RGF0YSksICZoYW5kbGUpOwogICAgIGlmICghbWFwcGVkRmlsZSkKICAgICAgICAg
cmV0dXJuIHsgfTsKQEAgLTg2LDkgKzg2LDkgQEAgRGF0YSBhZG9wdEFuZE1hcEZpbGUoRmlsZVN5
c3RlbTo6UGxhdGZvcgogU0hBMTo6RGlnZXN0IGNvbXB1dGVTSEExKGNvbnN0IERhdGEmIGRhdGEs
IGNvbnN0IFNhbHQmIHNhbHQpCiB7CiAgICAgU0hBMSBzaGExOwotICAgIHNoYTEuYWRkQnl0ZXMo
c2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKTsKLSAgICBkYXRhLmFwcGx5KFsmc2hhMV0oY29uc3Qg
dWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhkYXRh
LCBzaXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKHNhbHQpOworICAgIGRhdGEuYXBwbHkoWyZzaGEx
XShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkgeworICAgICAgICBzaGExLmFkZEJ5dGVzKGRh
dGEpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9KTsKIApJbmRleDogU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVk
ZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rpb25EaXNwYXRjaGVyLmg+
CiAjaW5jbHVkZSA8d3RmL1NIQTEuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUg
PHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCkBAIC01NCw2ICs1NSwxMCBAQCBjbGFzcyBEYXRhIHsKIHB1YmxpYzoKICAgICBEYXRh
KCkgeyB9CiAgICAgRGF0YShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKKyAgICBEYXRhKFNwYW48
Y29uc3Qgc3RkOjpieXRlPiBkYXRhKQorICAgICAgICA6IERhdGEocmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50OF90Kj4oZGF0YS5kYXRhKCkpLCBkYXRhLnNpemUoKSkKKyAgICB7CisgICAgfQog
CiAgICAgfkRhdGEoKSB7IH0KIApAQCAtNzksNyArODQsNyBAQCBwdWJsaWM6CiAKICAgICBEYXRh
IHN1YnJhbmdlKHNpemVfdCBvZmZzZXQsIHNpemVfdCkgY29uc3Q7CiAKLSAgICBib29sIGFwcGx5
KGNvbnN0IEZ1bmN0aW9uPGJvb2wgKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYpIGNvbnN0Owor
ICAgIGJvb2wgYXBwbHkoY29uc3QgRnVuY3Rpb248Ym9vbCAoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+
KT4mKSBjb25zdDsKIAogICAgIERhdGEgbWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkgY29u
c3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRGF0YUNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1tCShyZXZpc2lvbiAyNzg4MDkpCisrKyBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5t
bQkod29ya2luZyBjb3B5KQpAQCAtNjksMTIgKzY5LDEyIEBAIGJvb2wgRGF0YTo6aXNOdWxsKCkg
Y29uc3QKICAgICByZXR1cm4gIW1fZGlzcGF0Y2hEYXRhOwogfQogCi1ib29sIERhdGE6OmFwcGx5
KGNvbnN0IEZ1bmN0aW9uPGJvb2wgKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYgYXBwbGllcikg
Y29uc3QKK2Jvb2wgRGF0YTo6YXBwbHkoY29uc3QgRnVuY3Rpb248Ym9vbCAoU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+KT4mIGFwcGxpZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3NpemUpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gZGlzcGF0Y2hfZGF0YV9hcHBseShtX2Rpc3BhdGNo
RGF0YS5nZXQoKSwgWyZhcHBsaWVyXShkaXNwYXRjaF9kYXRhX3QsIHNpemVfdCwgY29uc3Qgdm9p
ZCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgcmV0dXJuIGFwcGxpZXIoc3RhdGljX2Nh
c3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBzaXplKTsKKyAgICAgICAgcmV0dXJuIGFwcGxpZXIo
U3BhbiB7IHN0YXRpY19jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGRhdGEpLCBzaXplIH0pOwogICAg
IH0pOwogfQogCkBAIC05NCwxNCArOTQsMTEgQEAgRGF0YSBjb25jYXRlbmF0ZShjb25zdCBEYXRh
JiBhLCBjb25zdCBEYQogCiBEYXRhIERhdGE6OmFkb3B0TWFwKEZpbGVTeXN0ZW06Ok1hcHBlZEZp
bGVEYXRhJiYgbWFwcGVkRmlsZSwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkKQog
ewotICAgIHNpemVfdCBzaXplID0gbWFwcGVkRmlsZS5zaXplKCk7Ci0gICAgdm9pZCogbWFwID0g
bWFwcGVkRmlsZS5sZWFrSGFuZGxlKCk7Ci0gICAgQVNTRVJUKG1hcCk7Ci0gICAgQVNTRVJUKG1h
cCAhPSBNQVBfRkFJTEVEKTsKKyAgICBhdXRvIG1hcCA9IG1hcHBlZEZpbGUubGVha0hhbmRsZSgp
OworICAgIEFTU0VSVChtYXAuZGF0YSgpKTsKKyAgICBBU1NFUlQobWFwLmRhdGEoKSAhPSBNQVBf
RkFJTEVEKTsKICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmQpOwotICAgIGF1dG8gYm9keU1h
cCA9IGFkb3B0T1NPYmplY3QoZGlzcGF0Y2hfZGF0YV9jcmVhdGUobWFwLCBzaXplLCBkaXNwYXRj
aF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCBb
bWFwLCBzaXplXSB7Ci0gICAgICAgIG11bm1hcChtYXAsIHNpemUpOwotICAgIH0pKTsKKyAgICBh
dXRvIGJvZHlNYXAgPSBhZG9wdE9TT2JqZWN0KGRpc3BhdGNoX2RhdGFfY3JlYXRlKG1hcC5kYXRh
KCksIG1hcC5zaXplKCksIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVf
UFJJT1JJVFlfREVGQVVMVCwgMCksIERJU1BBVENIX0RBVEFfREVTVFJVQ1RPUl9NVU5NQVApKTsK
ICAgICByZXR1cm4geyBXVEZNb3ZlKGJvZHlNYXApLCBEYXRhOjpCYWNraW5nOjpNYXAgfTsKIH0K
IApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVF
bnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05OSwxMCArOTksMTAgQEAgU3RvcmFnZTo6UmVjb3JkIEVudHJ5OjplbmNvZGVBc1N0
b3JhZ2VSZQogICAgIAogICAgIGVuY29kZXIuZW5jb2RlQ2hlY2tzdW0oKTsKIAotICAgIERhdGEg
aGVhZGVyKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICBEYXRh
IGhlYWRlciB7IGVuY29kZXIuYnVmZmVyKCkgfTsKICAgICBEYXRhIGJvZHk7CiAgICAgaWYgKG1f
YnVmZmVyKQotICAgICAgICBib2R5ID0geyBtX2J1ZmZlci0+ZGF0YSgpLCBtX2J1ZmZlci0+c2l6
ZSgpIH07CisgICAgICAgIGJvZHkgPSB7IG1fYnVmZmVyLT5ieXRlcygpIH07CiAKICAgICByZXR1
cm4geyBtX2tleSwgbV90aW1lU3RhbXAsIGhlYWRlciwgYm9keSwgeyB9IH07CiB9CkBAIC0xMTEs
NyArMTExLDcgQEAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBFbnRyeTo6ZGVjb2RlU3Rvcgogewog
ICAgIGF1dG8gZW50cnkgPSBtYWtlVW5pcXVlPEVudHJ5PihzdG9yYWdlRW50cnkpOwogCi0gICAg
V1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKHN0b3JhZ2VFbnRyeS5oZWFkZXIuZGF0
YSgpLCBzdG9yYWdlRW50cnkuaGVhZGVyLnNpemUoKSk7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6
RGVjb2RlciBkZWNvZGVyIHsgU3BhbiB7IHN0b3JhZ2VFbnRyeS5oZWFkZXIuZGF0YSgpLCBzdG9y
YWdlRW50cnkuaGVhZGVyLnNpemUoKSB9IH07CiAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSByZXNwb25zZTsKICAgICBpZiAoIVdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2U6OmRlY29kZShk
ZWNvZGVyLCByZXNwb25zZSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpJbmRleDogU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5
LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxMyArODgsMTMg
QEAgc3RhdGljIHZvaWQgaGFzaFN0cmluZyhTSEExJiBzaGExLCBjb25zdAogCiAgICAgaWYgKHN0
cmluZy5pczhCaXQoKSAmJiBzdHJpbmcuaXNBbGxBU0NJSSgpKSB7CiAgICAgICAgIGNvbnN0IHVp
bnQ4X3QgbnVsbEJ5dGUgPSAwOwotICAgICAgICBzaGExLmFkZEJ5dGVzKHN0cmluZy5jaGFyYWN0
ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAgICAgICBzaGExLmFkZEJ5dGVzKCZudWxsQnl0
ZSwgMSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IHN0cmluZy5jaGFyYWN0ZXJzOCgp
LCBzdHJpbmcubGVuZ3RoKCkgfSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZudWxs
Qnl0ZSwgMSB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvIGNTdHJpbmcgPSBz
dHJpbmcudXRmOCgpOwogICAgIC8vIEluY2x1ZGUgdGVybWluYXRpbmcgbnVsbCBieXRlLgotICAg
IHNoYTEuYWRkQnl0ZXMoY1N0cmluZy5kYXRhQXNVSW50OFB0cigpLCBjU3RyaW5nLmxlbmd0aCgp
ICsgMSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgY1N0cmluZy5kYXRhQXNVSW50OFB0cigp
LCBjU3RyaW5nLmxlbmd0aCgpICsgMSB9KTsKIH0KIAogS2V5OjpIYXNoVHlwZSBLZXk6OmNvbXB1
dGVIYXNoKGNvbnN0IFNhbHQmIHNhbHQpIGNvbnN0CkBAIC0xMDIsNyArMTAyLDcgQEAgS2V5OjpI
YXNoVHlwZSBLZXk6OmNvbXB1dGVIYXNoKGNvbnN0IFNhbAogICAgIC8vIFdlIGRvbid0IHJlYWxs
eSBuZWVkIGEgY3J5cHRvZ3JhcGhpYyBoYXNoLiBUaGUga2V5IGlzIGFsd2F5cyB2ZXJpZmllZCBh
Z2FpbnN0IHRoZSBlbnRyeSBoZWFkZXIuCiAgICAgLy8gU0hBMSBqdXN0IGhhcHBlbnMgdG8gYmUg
c3VpdGFibHkgc2l6ZWQsIGZhc3QgYW5kIGF2YWlsYWJsZS4KICAgICBTSEExIHNoYTE7Ci0gICAg
c2hhMS5hZGRCeXRlcyhzYWx0LmRhdGEoKSwgc2FsdC5zaXplKCkpOworICAgIHNoYTEuYWRkQnl0
ZXMoc2FsdCk7CiAKICAgICBoYXNoU3RyaW5nKHNoYTEsIG1fcGFydGl0aW9uKTsKICAgICBoYXNo
U3RyaW5nKHNoYTEsIG1fdHlwZSk7CkBAIC0xMTcsNyArMTE3LDcgQEAgS2V5OjpIYXNoVHlwZSBL
ZXk6OmNvbXB1dGVIYXNoKGNvbnN0IFNhbAogS2V5OjpIYXNoVHlwZSBLZXk6OmNvbXB1dGVQYXJ0
aXRpb25IYXNoKGNvbnN0IFNhbHQmIHNhbHQpIGNvbnN0CiB7CiAgICAgU0hBMSBzaGExOwotICAg
IHNoYTEuYWRkQnl0ZXMoc2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKTsKKyAgICBzaGExLmFkZEJ5
dGVzKHNhbHQpOwogCiAgICAgaGFzaFN0cmluZyhzaGExLCBtX3BhcnRpdGlvbik7CiAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVTdG9yYWdlLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDU0LDggKzQ1NCw4IEBAIHN0cnVjdCBSZWNvcmRNZXRhRGF0YSB7CiBzdGF0aWMgV0FS
Tl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlUmVjb3JkTWV0YURhdGEoUmVjb3JkTWV0YURhdGEm
IG1ldGFEYXRhLCBjb25zdCBEYXRhJiBmaWxlRGF0YSkKIHsKICAgICBib29sIHN1Y2Nlc3MgPSBm
YWxzZTsKLSAgICBmaWxlRGF0YS5hcHBseShbJm1ldGFEYXRhLCAmc3VjY2Vzc10oY29uc3QgdWlu
dDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVj
b2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOworICAgIGZpbGVEYXRhLmFwcGx5KFsmbWV0YURhdGEs
ICZzdWNjZXNzXShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkgeworICAgICAgICBXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YSk7CiAgICAgICAgIAogICAgICAgICBzdGQ6
Om9wdGlvbmFsPHVuc2lnbmVkPiBjYWNoZVN0b3JhZ2VWZXJzaW9uOwogICAgICAgICBkZWNvZGVy
ID4+IGNhY2hlU3RvcmFnZVZlcnNpb247CkBAIC01ODYsNyArNTg2LDcgQEAgc3RhdGljIERhdGEg
ZW5jb2RlUmVjb3JkTWV0YURhdGEoY29uc3QgUgogCiAgICAgZW5jb2Rlci5lbmNvZGVDaGVja3N1
bSgpOwogCi0gICAgcmV0dXJuIERhdGEoZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJT
aXplKCkpOworICAgIHJldHVybiB7IGVuY29kZXIuYnVmZmVyKCkgfTsKIH0KIAogc3RkOjpvcHRp
b25hbDxCbG9iU3RvcmFnZTo6QmxvYj4gU3RvcmFnZTo6c3RvcmVCb2R5QXNCbG9iKFdyaXRlT3Bl
cmF0aW9uJiB3cml0ZU9wZXJhdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3Vy
Y2VzRW50cnkuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTIzLDE0ICsxMjMsMTQgQEAgU3RvcmFnZTo6UmVjb3JkIFN1YnJlc291cmNlc0Vu
dHJ5OjplbmNvZAogCiAgICAgZW5jb2Rlci5lbmNvZGVDaGVja3N1bSgpOwogCi0gICAgcmV0dXJu
IHsgbV9rZXksIG1fdGltZVN0YW1wLCB7IGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVy
U2l6ZSgpIH0sIHsgfSwgeyB9fTsKKyAgICByZXR1cm4geyBtX2tleSwgbV90aW1lU3RhbXAsIHsg
ZW5jb2Rlci5idWZmZXIoKSB9LCB7IH0sIHsgfX07CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTdWJy
ZXNvdXJjZXNFbnRyeT4gU3VicmVzb3VyY2VzRW50cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQoY29u
c3QgU3RvcmFnZTo6UmVjb3JkJiBzdG9yYWdlRW50cnkpCiB7CiAgICAgYXV0byBlbnRyeSA9IG1h
a2VVbmlxdWU8U3VicmVzb3VyY2VzRW50cnk+KHN0b3JhZ2VFbnRyeSk7CiAKLSAgICBXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoc3RvcmFnZUVudHJ5LmhlYWRlci5kYXRhKCksIHN0
b3JhZ2VFbnRyeS5oZWFkZXIuc2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVy
IGRlY29kZXIgeyBTcGFuIHsgc3RvcmFnZUVudHJ5LmhlYWRlci5kYXRhKCksIHN0b3JhZ2VFbnRy
eS5oZWFkZXIuc2l6ZSgpIH0gfTsKICAgICBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxTdWJyZXNvdXJj
ZUluZm8+PiBzdWJyZXNvdXJjZXM7CiAgICAgZGVjb2RlciA+PiBzdWJyZXNvdXJjZXM7CiAgICAg
aWYgKCFzdWJyZXNvdXJjZXMpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1
bWVudENvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJn
dW1lbnRDb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0lQQy9Bcmd1bWVudENvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDEzICs3OSwxMyBAQCBz
dHJ1Y3QgQXJndW1lbnRDb2RlcjxULCB0eXBlbmFtZSBzdGQ6OmVuCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRW5jb2Rlcj4KICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
VCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZ2YWx1ZSksIHNpemVvZihUKSwgYWxpZ25v
ZihUKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmdmFs
dWUsIDEgfSwgYWxpZ25vZihUKSk7CiAgICAgfQogCiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8
VD4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewogICAgICAgICBUIHJlc3VsdDsKLSAg
ICAgICAgaWYgKGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KCZyZXN1bHQpLCBzaXplb2YoVCksIGFsaWdub2YoVCkpKQorICAgICAgICBpZiAo
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZyZXN1bHQsIDEgfSkpCiAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5j
cHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3Vt
ZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCB2b2lkIEFyZ3Vt
ZW50Q29kZXI8Q1N0cmluZz46OmVuY29kZShFbmNvCiAKICAgICB1aW50MzJfdCBsZW5ndGggPSBz
dHJpbmcubGVuZ3RoKCk7CiAgICAgZW5jb2RlciA8PCBsZW5ndGg7Ci0gICAgZW5jb2Rlci5lbmNv
ZGVGaXhlZExlbmd0aERhdGEoc3RyaW5nLmRhdGFBc1VJbnQ4UHRyKCksIGxlbmd0aCwgMSk7Cisg
ICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RyaW5nLmJ5dGVzKCksIDEpOwogfQog
CiBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBBcmd1bWVudENvZGVyPENTdHJpbmc+OjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgQ1N0cmluZyYgcmVzdWx0KQpAQCAtMTAzLDcgKzEwMyw3IEBAIFdB
Uk5fVU5VU0VEX1JFVFVSTiBib29sIEFyZ3VtZW50Q29kZXI8Q1MKIAogICAgIGNoYXIqIGJ1ZmZl
cjsKICAgICBDU3RyaW5nIHN0cmluZyA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQobGVuZ3Ro
LCBidWZmZXIpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRl
cnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoLCAxKSkKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBidWZmZXIsIGxlbmd0aCB9LCAxKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmVzdWx0ID0gc3RyaW5nOwpAQCAtMTIzLDExICsx
MjMsNyBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8U3RyaW5nPjo6ZW5jb2RlKEVuY29kCiAgICAgYm9v
bCBpczhCaXQgPSBzdHJpbmcuaXM4Qml0KCk7CiAKICAgICBlbmNvZGVyIDw8IGxlbmd0aCA8PCBp
czhCaXQ7Ci0KLSAgICBpZiAoaXM4Qml0KQotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShzdHJpbmcuY2hhcmFjdGVyczgoKSwgbGVuZ3RoICogc2l6ZW9mKExDaGFyKSwgYWxp
Z25vZihMQ2hhcikpOwotICAgIGVsc2UKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnMx
NigpKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSwgYWxpZ25vZihVQ2hhcikpOworICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0cmluZy5ieXRlcygpKTsKIH0KIHRlbXBsYXRlCiB2
b2lkIEFyZ3VtZW50Q29kZXI8U3RyaW5nPjo6ZW5jb2RlPEVuY29kZXI+KEVuY29kZXImLCBjb25z
dCBTdHJpbmcmKTsKQEAgLTE0Myw3ICsxMzksNyBAQCBzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9u
YWw8U3RyaW5nPiBkZWNvCiAgICAgCiAgICAgQ2hhcmFjdGVyVHlwZSogYnVmZmVyOwogICAgIFN0
cmluZyBzdHJpbmcgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIp
OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2Fz
dDx1aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJhY3RlclR5cGUpLCBhbGln
bm9mKENoYXJhY3RlclR5cGUpKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhE
YXRhKFNwYW4geyBidWZmZXIsIGxlbmd0aCB9KSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKICAgICAKICAgICByZXR1cm4gc3RyaW5nOwpAQCAtMTgxLDEyICsxNzcsMTIgQEAgV0FSTl9V
TlVTRURfUkVUVVJOIGJvb2wgQXJndW1lbnRDb2RlcjxTdAogCiB2b2lkIEFyZ3VtZW50Q29kZXI8
U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNIQTE6OkRpZ2Vz
dCYgZGlnZXN0KQogewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGRpZ2VzdC5k
YXRhKCksIHNpemVvZihkaWdlc3QpLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3Ro
RGF0YShkaWdlc3QsIDEpOwogfQogCiBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBBcmd1bWVudENv
ZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTSEExOjpEaWdlc3Qm
IGRpZ2VzdCkKIHsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoZGln
ZXN0LmRhdGEoKSwgc2l6ZW9mKGRpZ2VzdCksIDEpOworICAgIHJldHVybiBkZWNvZGVyLmRlY29k
ZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3QsIDEpOwogfQogCiAjaWYgSEFWRShBVURJVF9UT0tFTikK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2Rl
cnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTIgKzQ1LDEyIEBAIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBTaW1wbGVBcmd1bWUKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgog
ICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBUJiB0KQogICAg
IHsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4oJnQpLCBzaXplb2YoVCksIGFsaWdub2YoVCkpOworICAgICAgICBl
bmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJnQsIDEgfSk7CiAgICAgfQogCiAg
ICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVy
LCBUJiB0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhE
YXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ0KSwgc2l6ZW9mKFQpLCBhbGlnbm9mKFQp
KTsKKyAgICAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAm
dCwgMSB9KTsKICAgICB9CiB9OwogCkBAIC02MSwxMyArNjEsMTQgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IEV4dGVudD4gc3RydQogICAgIHsKICAgICAgICAgaWYgKCFFeHRlbnQpCiAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGFycmF5UmVmZXJlbmNlLmRhdGEoKSks
IGFycmF5UmVmZXJlbmNlLnNpemUoKSAqIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAg
IGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBhcnJheVJlZmVyZW5jZS5kYXRh
KCksIGFycmF5UmVmZXJlbmNlLnNpemUoKSB9KTsKICAgICB9CiAgICAgc3RhdGljIHN0ZDo6b3B0
aW9uYWw8QXJyYXlSZWZlcmVuY2VUeXBlPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7
CiAgICAgICAgIGlmICghRXh0ZW50KQogICAgICAgICAgICAgcmV0dXJuIEFycmF5UmVmZXJlbmNl
VHlwZSgpOwotICAgICAgICBjb25zdCB1aW50OF90KiBkYXRhID0gZGVjb2Rlci5kZWNvZGVGaXhl
ZExlbmd0aFJlZmVyZW5jZShFeHRlbnQgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpOworCisgICAg
ICAgIGNvbnN0IGF1dG8qIGRhdGEgPSBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoUmVmZXJlbmNl
KEV4dGVudCAqIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CiAgICAgICAgIGlmICghZGF0YSkKICAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIHJldHVybiBBcnJheVJlZmVy
ZW5jZVR5cGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4oZGF0YSksIEV4dGVudCk7CkBAIC04
Miw3ICs4Myw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBBcmd1bWVudENvZGUKICAg
ICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYXJyYXlSZWZlcmVuY2Uuc2l6
ZSgpKTsKICAgICAgICAgaWYgKCFhcnJheVJlZmVyZW5jZS5zaXplKCkpCiAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGFycmF5UmVmZXJlbmNlLmRhdGEoKSksIGFycmF5UmVmZXJl
bmNlLnNpemUoKSAqIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAgIGVuY29kZXIuZW5j
b2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBhcnJheVJlZmVyZW5jZS5kYXRhKCksIGFycmF5UmVm
ZXJlbmNlLnNpemUoKSB9KTsKICAgICB9CiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8QXJyYXlS
ZWZlcmVuY2VUeXBlPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7CkBAIC05Niw3ICs5
Nyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBBcmd1bWVudENvZGUKICAgICAgICAg
aWYgKFVOTElLRUxZKGRhdGFTaXplLmhhc092ZXJmbG93ZWQoKSkpCiAgICAgICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwogCi0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEgPSBkZWNvZGVy
LmRlY29kZUZpeGVkTGVuZ3RoUmVmZXJlbmNlKGRhdGFTaXplLCBhbGlnbm9mKFQpKTsKKyAgICAg
ICAgY29uc3QgYXV0byogZGF0YSA9IGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhSZWZlcmVuY2Uo
ZGF0YVNpemUsIGFsaWdub2YoVCkpOwogICAgICAgICBpZiAoIWRhdGEpCiAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAgICByZXR1cm4gQXJyYXlSZWZlcmVuY2VUeXBlKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KGRhdGEpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KHNpemUp
KTsKQEAgLTQyMyw3ICs0MjQsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpCiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mIHZl
Y3RvcikKICAgICB7CiAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZl
Y3Rvci5zaXplKCkpOwotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih2ZWN0b3IuZGF0YSgpKSwgdmVjdG9yLnNpemUo
KSAqIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKHZlY3RvciwgYWxpZ25vZihUKSk7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBX
QVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiYgdmVjdG9yKQpA
QCAtNDQ2LDcgKzQ0Nyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2kKICAgICAgICAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1p
bkNhcGFjaXR5PiB0ZW1wOwogICAgICAgICB0ZW1wLmdyb3coc2l6ZSk7CiAKLSAgICAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3Qq
Pih0ZW1wLmRhdGEoKSksIHNpemUgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpKQorICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHRlbXApKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgICAgIHZlY3Rvci5zd2FwKHRlbXApOwpAQCAtNDczLDcgKzQ3NCw3
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICAgICAgVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiB2ZWN0
b3I7CiAgICAgICAgIHZlY3Rvci5ncm93KHNpemUpOwogCi0gICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4odmVjdG9yLmRh
dGEoKSksIHNpemUgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpKQorICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHZlY3RvcikpCiAgICAgICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogCiAgICAgICAgIHJldHVybiB2ZWN0b3I7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9BcnJheVJlZmVyZW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL0FycmF5UmVmZXJlbmNlLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FycmF5UmVmZXJlbmNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDYgKzMwLDggQEAKIAogbmFtZXNwYWNlIElQQyB7CiAKKy8vIEZJWE1FOiBSZXBsYWNl
IHdpdGggPHd0Zi9TcGFuLmg+CisKIGlubGluZSBjb25zdGV4cHIgc2l6ZV90IGFycmF5UmVmZXJl
bmNlRHluYW1pY0V4dGVudCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCk7CiAK
IHRlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgRXh0ZW50ID0gYXJyYXlSZWZlcmVuY2VEeW5h
bWljRXh0ZW50PgpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsMTMgKzIwNiwxMyBAQCBib29sIERlY29kZXI6OmJ1ZmZl
cklzTGFyZ2VFbm91Z2hUb0NvbnRhCiAgICAgcmV0dXJuIGFsaWduZWRCdWZmZXJJc0xhcmdlRW5v
dWdoVG9Db250YWluKHJvdW5kVXBUb0FsaWdubWVudChtX2J1ZmZlclBvcywgYWxpZ25tZW50KSwg
bV9idWZmZXIsIG1fYnVmZmVyRW5kLCBzaXplKTsKIH0KIAotYm9vbCBEZWNvZGVyOjpkZWNvZGVG
aXhlZExlbmd0aERhdGEodWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1l
bnQpCitib29sIERlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPHN0ZDo6Ynl0ZT4g
ZGF0YSwgc2l6ZV90IGFsaWdubWVudCkKIHsKLSAgICBpZiAoIWFsaWduQnVmZmVyUG9zaXRpb24o
YWxpZ25tZW50LCBzaXplKSkKKyAgICBpZiAoIWFsaWduQnVmZmVyUG9zaXRpb24oYWxpZ25tZW50
LCBkYXRhLnNpemUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1lbWNweShkYXRh
LCBtX2J1ZmZlclBvcywgc2l6ZSk7Ci0gICAgbV9idWZmZXJQb3MgKz0gc2l6ZTsKKyAgICBtZW1j
cHkoZGF0YS5kYXRhKCksIG1fYnVmZmVyUG9zLCBkYXRhLnNpemUoKSk7CisgICAgbV9idWZmZXJQ
b3MgKz0gZGF0YS5zaXplKCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksMTMg
QEAgcHVibGljOgogICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGlzVmFsaWQoKSBjb25zdCB7
IHJldHVybiBtX2J1ZmZlclBvcyAhPSBudWxscHRyOyB9CiAgICAgdm9pZCBtYXJrSW52YWxpZCgp
IHsgbV9idWZmZXJQb3MgPSBudWxscHRyOyB9CiAKLSAgICBXQVJOX1VOVVNFRF9SRVRVUk4gYm9v
bCBkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCogZGF0YSwgc2l6ZV90LCBzaXplX3QgYWxp
Z25tZW50KTsKKyAgICBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVGaXhlZExlbmd0aERh
dGEoU3BhbjxzdGQ6OmJ5dGU+LCBzaXplX3QgYWxpZ25tZW50KTsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CisgICAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlRml4ZWRMZW5ndGhE
YXRhKFQmJiBkYXRhLCBzaXplX3QgYWxpZ25tZW50ID0gYWxpZ25vZih0eXBlbmFtZSBkZWNsdHlw
ZShTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pOjp2YWx1ZV90eXBlKSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBkZWNvZGVGaXhlZExlbmd0aERhdGEoYXNXcml0YWJsZUJ5dGVzKFNwYW4g
eyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSksIGFsaWdubWVudCk7CisgICAgfQogCiAgICAgLy8g
VGhlIGRhdGEgaW4gdGhlIHJldHVybmVkIHBvaW50ZXIgaGVyZSB3aWxsIG9ubHkgYmUgdmFsaWQg
Zm9yIHRoZSBsaWZldGltZSBvZiB0aGUgRGVjb2RlciBvYmplY3QuCiAgICAgLy8gUmV0dXJucyBu
dWxscHRyIG9uIGZhaWx1cmUuCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNv
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVy
LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5j
b2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiwxMiArMjAyLDEyIEBAIHVpbnQ4X3QqIEVu
Y29kZXI6Omdyb3coc2l6ZV90IGFsaWdubWVudCwKICAgICByZXR1cm4gbV9idWZmZXIgKyBhbGln
bmVkU2l6ZTsKIH0KIAotdm9pZCBFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3Qg
dWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQpCit2b2lkIEVuY29k
ZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSwgc2l6
ZV90IGFsaWdubWVudCkKIHsKLSAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4oZGF0YSkgJSBhbGlnbm1lbnQpKTsKKyAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4oZGF0YS5kYXRhKCkpICUgYWxpZ25tZW50KSk7CiAKLSAgICB1aW50OF90KiBidWZm
ZXIgPSBncm93KGFsaWdubWVudCwgc2l6ZSk7Ci0gICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6
ZSk7CisgICAgYXV0byogYnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQsIGRhdGEuc2l6ZSgpKTsKKyAg
ICBtZW1jcHkoYnVmZmVyLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwogfQogCiB2b2lkIEVu
Y29kZXI6OmFkZEF0dGFjaG1lbnQoQXR0YWNobWVudCYmIGF0dGFjaG1lbnQpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMx
LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorI2luY2x1ZGUgPHd0Zi9TcGFu
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSVBDIHsKQEAgLTYwLDcg
KzYxLDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgd3JhcEZvclRlc3RpbmcoVW5pcXVlUmVmPEVu
Y29kZXI+JiYpOwogCi0gICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhf
dCogZGF0YSwgc2l6ZV90LCBzaXplX3QgYWxpZ25tZW50KTsKKyAgICB2b2lkIGVuY29kZUZpeGVk
TGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSwgc2l6ZV90IGFsaWdubWVudCk7
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKFQmJiBkYXRhLCBzaXplX3QgYWxpZ25tZW50ID0gYWxpZ25vZih0eXBlbmFtZSBkZWNsdHlw
ZShTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pOjp2YWx1ZV90eXBlKSkKKyAgICB7Cisg
ICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShhc0J5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8
VD4oZGF0YSkgfSksIGFsaWdubWVudCk7CisgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KICAgICBFbmNvZGVyJiBvcGVyYXRvcjw8KFQmJiB0KQpJbmRleDogU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9JUEMvU2hhcmVkQnVmZmVyQ29weS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvU2hhcmVkQnVmZmVyQ29weS5jcHAJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1NoYXJlZEJ1ZmZlckNvcHkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHZvaWQgU2hhcmVkQnVmZmVyQ29weTo6ZW5jb2Rl
KEVuY29kZXImIGUKICAgICBpZiAoIWJ1ZmZlclNpemUpCiAgICAgICAgIHJldHVybjsKICAgICBm
b3IgKGF1dG8mIHNlZ21lbnQgOiAqbV9idWZmZXIpCi0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKHNlZ21lbnQuc2VnbWVudC0+ZGF0YSgpLCBzZWdtZW50LnNlZ21lbnQtPnNp
emUoKSwgMSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHNlZ21lbnQu
c2VnbWVudC0+Ynl0ZXMoKSwgMSk7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8U2hhcmVkQnVmZmVyQ29w
eT4gU2hhcmVkQnVmZmVyQ29weTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uRW5jb2Rlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25FbmNvZGVy
LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVh
bUNvbm5lY3Rpb25FbmNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAog
I2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiTWVzc2FnZU5hbWVzLmgiCisj
aW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5h
bWVzcGFjZSBJUEMgewpAQCAtNTMsMjIgKzU0LDI4IEBAIHB1YmxpYzoKIAogICAgIH5TdHJlYW1D
b25uZWN0aW9uRW5jb2RlcigpID0gZGVmYXVsdDsKIAotICAgIGJvb2wgZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50
KQorICAgIGJvb2wgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBk
YXRhLCBzaXplX3QgYWxpZ25tZW50KQogICAgIHsKICAgICAgICAgc2l6ZV90IGJ1ZmZlclBvaW50
ZXIgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fYnVm
ZmVyICsgbV9lbmNvZGVkU2l6ZSkpOwogICAgICAgICBzaXplX3QgbmV3QnVmZmVyUG9pbnRlciA9
IHJvdW5kVXBUb011bHRpcGxlT2YoYWxpZ25tZW50LCBidWZmZXJQb2ludGVyKTsKICAgICAgICAg
aWYgKG5ld0J1ZmZlclBvaW50ZXIgPCBidWZmZXJQb2ludGVyKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBpbnRwdHJfdCBhbGlnbmVkU2l6ZSA9IG1fZW5jb2RlZFNpemUgKyAo
bmV3QnVmZmVyUG9pbnRlciAtIGJ1ZmZlclBvaW50ZXIpOwotICAgICAgICBpZiAoIXJlc2VydmUo
YWxpZ25lZFNpemUsIHNpemUpKQorICAgICAgICBpZiAoIXJlc2VydmUoYWxpZ25lZFNpemUsIGRh
dGEuc2l6ZSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdWludDhfdCog
YnVmZmVyID0gbV9idWZmZXIgKyBhbGlnbmVkU2l6ZTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlciwg
ZGF0YSwgc2l6ZSk7Ci0gICAgICAgIG1fZW5jb2RlZFNpemUgPSBhbGlnbmVkU2l6ZSArIHNpemU7
CisgICAgICAgIGF1dG8qIGJ1ZmZlciA9IG1fYnVmZmVyICsgYWxpZ25lZFNpemU7CisgICAgICAg
IG1lbWNweShidWZmZXIsIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgICAgIG1fZW5j
b2RlZFNpemUgPSBhbGlnbmVkU2l6ZSArIGRhdGEuc2l6ZSgpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCBzaXplX3QgYWxpZ25tZW50ID0gYWxpZ25vZihUKSkKKyAg
ICB7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShhc0J5dGVzKFNwYW4geyBzdGQ6OmZv
cndhcmQ8VD4oZGF0YSkgfSksIGFsaWdubWVudCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KICAgICBTdHJlYW1Db25uZWN0aW9uRW5jb2RlciYgb3BlcmF0b3I8PChUJiYgdCkK
ICAgICB7CiAgICAgICAgIEFyZ3VtZW50Q29kZXI8c3RkOjpyZW1vdmVfY29uc3RfdDxzdGQ6OnJl
bW92ZV9yZWZlcmVuY2VfdDxUPj4sIHZvaWQ+OjplbmNvZGUoKnRoaXMsIHN0ZDo6Zm9yd2FyZDxU
Pih0KSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENv
ZGVycy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNv
cmVBcmd1bWVudENvZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw3ICsxNDQsNyBAQCBz
dGF0aWMgdm9pZCBlbmNvZGVTaGFyZWRCdWZmZXIoRW5jb2RlciYgCiAgICAgLy8gb3ZlciB0aGUg
SVBDLiBDb25uZWN0aW9uVW5peC5jcHAgYWxyZWFkeSB1c2VzIHNoYXJlZCBtZW1vcnkgdG8gc2Vu
ZCBhbnkgSVBDIG1lc3NhZ2UgdGhhdCBpcwogICAgIC8vIHRvbyBsYXJnZS4gU2VlIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg1NzEuCiAgICAgZm9yIChjb25zdCBh
dXRvJiBlbGVtZW50IDogKmJ1ZmZlcikKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEoZWxlbWVudC5zZWdtZW50LT5kYXRhKCksIGVsZW1lbnQuc2VnbWVudC0+c2l6ZSgpLCAx
KTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoZWxlbWVudC5zZWdtZW50
LT5ieXRlcygpLCAxKTsKICNlbHNlCiAgICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOwog
ICAgIGF1dG8gc2hhcmVkTWVtb3J5QnVmZmVyID0gU2hhcmVkTWVtb3J5Ojpjb3B5QnVmZmVyKCpi
dWZmZXIpOwpAQCAtMTgwLDcgKzE4MCw3IEBAIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9v
bCBkZWNvZGVTaGEKIAogICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAgIGRhdGEuZ3Jvdyhi
dWZmZXJTaXplKTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGRhdGEu
ZGF0YSgpLCBkYXRhLnNpemUoKSwgMSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVu
Z3RoRGF0YShkYXRhLCAxKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYnVmZmVyID0g
U2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShkYXRhKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1NoYXJlZC9tYWMvQXV4aWxpYXJ5UHJvY2Vzc01hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1NoYXJlZC9tYWMvQXV4aWxpYXJ5UHJvY2Vzc01hYy5tbQkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL0F1eGlsaWFyeVByb2Nlc3NNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTMyMSw3ICszMjEsNyBAQCBzdGF0aWMgU3RyaW5nIHNhbmRib3hGaWxl
UGF0aChjb25zdCBTdHJpCiAgICAgY3J5cHRvLT5hZGRCeXRlcyhoZWFkZXIuZGF0YSgpLCBoZWFk
ZXIubGVuZ3RoKCkpOwogICAgIGF1dG8gaGFzaCA9IGNyeXB0by0+Y29tcHV0ZUhhc2goKTsKIAot
ICAgIHJldHVybiBtYWtlU3RyaW5nKGRpcmVjdG9yeVBhdGgsICIvQ29tcGlsZWRTYW5kYm94KyIs
IGJhc2U2NFVSTEVuY29kZWQoaGFzaC5kYXRhKCksIGhhc2guc2l6ZSgpKSk7CisgICAgcmV0dXJu
IG1ha2VTdHJpbmcoZGlyZWN0b3J5UGF0aCwgIi9Db21waWxlZFNhbmRib3grIiwgYmFzZTY0VVJM
RW5jb2RlZChoYXNoKSk7CiB9CiAKIHN0YXRpYyBib29sIGVuc3VyZVNhbmRib3hDYWNoZURpcmVj
dG9yeShjb25zdCBTYW5kYm94SW5mbyYgaW5mbykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVk
L3dpbi9XZWJDb3JlQXJndW1lbnRDb2RlcnNXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL3dpbi9XZWJDb3JlQXJndW1lbnRDb2RlcnNXaW4uY3BwCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vV2ViQ29yZUFyZ3VtZW50Q29kZXJz
V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTIgKzUxLDEyIEBAIHN0ZDo6b3B0aW9uYWw8
Rm9udEF0dHJpYnV0ZXM+IEFyZ3VtZW50Q28KIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29k
ZXI8TE9HRk9OVD4gewogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBj
b25zdCBMT0dGT05UJiBsb2dGb250KQogICAgIHsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhl
ZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oJmxvZ0ZvbnQpLCBz
aXplb2YgbG9nRm9udCwgMSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KFNwYW4geyAmbG9nRm9udCwgMSB9LCAxKTsKICAgICB9CiAgICAgc3RhdGljIHN0ZDo6b3B0aW9u
YWw8TE9HRk9OVD4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewogICAgICAgICBMT0dG
T05UIGxvZ0ZvbnQ7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEo
cmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJmxvZ0ZvbnQpLCBzaXplb2YobG9nRm9udCksIDEp
KQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmbG9n
Rm9udCwgMSB9LCAxKSkKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAg
IHJldHVybiBsb2dGb250OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNwcAkocmV2aXNpb24gMjc4
ODA5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0
b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDE4ICsxMzEsMjAgQEAgc3RhdGljIFdlYktp
dDo6TmV0d29ya0NhY2hlOjpEYXRhIGVuY29kZQogICAgIGVuY29kZXIgPDwgbWV0YURhdGEuY29u
ZGl0aW9uZWRGaWx0ZXJzQnl0ZWNvZGVTaXplOwogICAgIGVuY29kZXIgPDwgbWV0YURhdGEuY29u
ZGl0aW9uc0FwcGx5T25seVRvRG9tYWluOwogCi0gICAgQVNTRVJUKGVuY29kZXIuYnVmZmVyU2l6
ZSgpID09IENvbnRlbnRSdWxlTGlzdEZpbGVIZWFkZXJTaXplKTsKLSAgICByZXR1cm4gV2ViS2l0
OjpOZXR3b3JrQ2FjaGU6OkRhdGEoZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXpl
KCkpOworICAgIEFTU0VSVChlbmNvZGVyLmJ1ZmZlcigpLnNpemUoKSA9PSBDb250ZW50UnVsZUxp
c3RGaWxlSGVhZGVyU2l6ZSk7CisgICAgcmV0dXJuIFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRh
IHsgZW5jb2Rlci5idWZmZXIoKSB9OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGdl
dERhdGEoY29uc3QgVCYsIGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCosIHNpemVf
dCk+Jik7Ci10ZW1wbGF0ZTw+IHZvaWQgZ2V0RGF0YShjb25zdCBXZWJLaXQ6Ok5ldHdvcmtDYWNo
ZTo6RGF0YSYgZGF0YSwgY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90
KT4mIGZ1bmN0aW9uKQordGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBnZXREYXRhKGNvbnN0IFQm
LCBjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+Jik7CisKK3RlbXBs
YXRlPD4gdm9pZCBnZXREYXRhKGNvbnN0IFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhJiBkYXRh
LCBjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+JiBmdW5jdGlvbikK
IHsKICAgICBkYXRhLmFwcGx5KGZ1bmN0aW9uKTsKIH0KLXRlbXBsYXRlPD4gdm9pZCBnZXREYXRh
KGNvbnN0IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlciYgZGF0YSwgY29uc3QgRnVuY3Rpb248Ym9vbChj
b25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIGZ1bmN0aW9uKQorCit0ZW1wbGF0ZTw+IHZvaWQgZ2V0
RGF0YShjb25zdCBXZWJDb3JlOjpTaGFyZWRCdWZmZXImIGRhdGEsIGNvbnN0IEZ1bmN0aW9uPGJv
b2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mIGZ1bmN0aW9uKQogewotICAgIGZ1bmN0aW9uKGRh
dGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgZnVuY3Rpb24oZGF0YS5ieXRlcygpKTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTE1MCwxMyArMTUyLDEzIEBAIHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPENvbnRlbnRSdWxlTGlzdE1ldGEKIHsKICAgICBib29sIHN1Y2Nlc3MgPSBmYWxz
ZTsKICAgICBDb250ZW50UnVsZUxpc3RNZXRhRGF0YSBtZXRhRGF0YTsKLSAgICBnZXREYXRhKGZp
bGVEYXRhLCBbJm1ldGFEYXRhLCAmc3VjY2VzcywgJmZpbGVEYXRhXShjb25zdCB1aW50OF90KiBk
YXRhLCBzaXplX3Qgc2l6ZSkgeworICAgIGdldERhdGEoZmlsZURhdGEsIFsmbWV0YURhdGEsICZz
dWNjZXNzLCAmZmlsZURhdGFdKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhKSB7CiAgICAgICAg
IC8vIFRoZSBmaWxlIGRhdGEgc2hvdWxkIGJlIG1hcHBlZCBpbnRvIG9uZSBjb250aW51b3VzIG1l
bW9yeSBzZWdtZW50IHNvIHRoZSBzaXplCiAgICAgICAgIC8vIHBhc3NlZCB0byB0aGUgYXBwbGll
ciBzaG91bGQgYWx3YXlzIGVxdWFsIHRoZSBkYXRhIHNpemUuCi0gICAgICAgIGlmIChzaXplICE9
IGZpbGVEYXRhLnNpemUoKSkKKyAgICAgICAgaWYgKGRhdGEuc2l6ZSgpICE9IGZpbGVEYXRhLnNp
emUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBXVEY6OlBlcnNpc3Rl
bmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YSwgc2l6ZSk7CisgICAgICAgIFdURjo6UGVyc2lzdGVu
Y2U6OkRlY29kZXIgZGVjb2RlciB7IGRhdGEgfTsKICAgICAgICAgCiAgICAgICAgIHN0ZDo6b3B0
aW9uYWw8dWludDMyX3Q+IHZlcnNpb247CiAgICAgICAgIGRlY29kZXIgPj4gdmVyc2lvbjsKQEAg
LTIyOCw4ICsyMzAsOCBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxNYXBwZWREYXRhPiBvcGVuQW5k
CiBzdGF0aWMgYm9vbCB3cml0ZURhdGFUb0ZpbGUoY29uc3QgV2ViS2l0OjpOZXR3b3JrQ2FjaGU6
OkRhdGEmIGZpbGVEYXRhLCBQbGF0Zm9ybUZpbGVIYW5kbGUgZmQpCiB7CiAgICAgYm9vbCBzdWNj
ZXNzID0gdHJ1ZTsKLSAgICBmaWxlRGF0YS5hcHBseShbZmQsICZzdWNjZXNzXShjb25zdCB1aW50
OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgewotICAgICAgICBpZiAod3JpdGVUb0ZpbGUoZmQsIGRh
dGEsIHNpemUpID09IC0xKSB7CisgICAgZmlsZURhdGEuYXBwbHkoW2ZkLCAmc3VjY2Vzc10oU3Bh
bjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpIHsKKyAgICAgICAgaWYgKHdyaXRlVG9GaWxlKGZkLCBk
YXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpID09IC0xKSB7CiAgICAgICAgICAgICBzdWNjZXNzID0g
ZmFsc2U7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJB
dXRoZW50aWNhdGlvblBhbmVsLm1tCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBzdGF0aWMgUmV0YWluUHRyPE5TRGF0YT4gcHJvZHVj
ZUNsaWVudERhCiAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpAIndlYmF1dGhuLmdldCIg
Zm9yS2V5OkAidHlwZSJdOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgW2RpY3Rpb25hcnkg
c2V0T2JqZWN0OmJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNoYWxsZW5nZS5ieXRlcywgY2hhbGxl
bmdlLmxlbmd0aCkgZm9yS2V5OkAiY2hhbGxlbmdlIl07CisgICAgW2RpY3Rpb25hcnkgc2V0T2Jq
ZWN0OmJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKFNwYW4geyBzdGF0aWNfY2FzdDxjb25zdCBzdGQ6
OmJ5dGUqPihjaGFsbGVuZ2UuYnl0ZXMpLCBjaGFsbGVuZ2UubGVuZ3RoIH0pIGZvcktleTpAImNo
YWxsZW5nZSJdOwogICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpvcmlnaW4gZm9yS2V5OkAib3Jp
Z2luIl07CiAKICAgICByZXR1cm4gW05TSlNPTlNlcmlhbGl6YXRpb24gZGF0YVdpdGhKU09OT2Jq
ZWN0OmRpY3Rpb25hcnkuZ2V0KCkgb3B0aW9uczpOU0pTT05Xcml0aW5nU29ydGVkS2V5cyBlcnJv
cjpuaWxdOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24v
Q29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsQXV0aGVudGljYXRvci5tbQko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGlj
YXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3
ICs4NSw3IEBAIHN0YXRpYyBpbmxpbmUgSGFzaFNldDxTdHJpbmc+IHByb2R1Y2VIYXMKICAgICBI
YXNoU2V0PFN0cmluZz4gcmVzdWx0OwogICAgIGZvciAoYXV0byYgY3JlZGVudGlhbERlc2NyaXB0
b3IgOiBjcmVkZW50aWFsRGVzY3JpcHRvcnMpIHsKICAgICAgICAgaWYgKGVtcHR5VHJhbnNwb3J0
c09yQ29udGFpbihjcmVkZW50aWFsRGVzY3JpcHRvci50cmFuc3BvcnRzLCBBdXRoZW50aWNhdG9y
VHJhbnNwb3J0OjpJbnRlcm5hbCkgJiYgY3JlZGVudGlhbERlc2NyaXB0b3IudHlwZSA9PSBQdWJs
aWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5ICYmIGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlk
VmVjdG9yLnNpemUoKSA9PSBjcmVkZW50aWFsSWRMZW5ndGgpCi0gICAgICAgICAgICByZXN1bHQu
YWRkKGJhc2U2NEVuY29kZVRvU3RyaW5nKGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9yLmRh
dGEoKSwgY3JlZGVudGlhbERlc2NyaXB0b3IuaWRWZWN0b3Iuc2l6ZSgpKSk7CisgICAgICAgICAg
ICByZXN1bHQuYWRkKGJhc2U2NEVuY29kZVRvU3RyaW5nKGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlk
VmVjdG9yKSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0yMzMsNyArMjMzLDcg
QEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6Om1ha2VDcmVkZW50aWFsKAogICAgICAgICBpZiAo
bm90Rm91bmQgIT0gbV9leGlzdGluZ0NyZWRlbnRpYWxzLmZpbmRNYXRjaGluZyhbJmV4Y2x1ZGVD
cmVkZW50aWFsSWRzXSAoYXV0byYgY3JlZGVudGlhbCkgewogICAgICAgICAgICAgYXV0byogcmF3
SWQgPSBjcmVkZW50aWFsLT5yYXdJZCgpOwogICAgICAgICAgICAgQVNTRVJUKHJhd0lkKTsKLSAg
ICAgICAgICAgIHJldHVybiBleGNsdWRlQ3JlZGVudGlhbElkcy5jb250YWlucyhiYXNlNjRFbmNv
ZGVUb1N0cmluZyhyYXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgpKSk7CisgICAgICAg
ICAgICByZXR1cm4gZXhjbHVkZUNyZWRlbnRpYWxJZHMuY29udGFpbnMoYmFzZTY0RW5jb2RlVG9T
dHJpbmcocmF3SWQtPmJ5dGVzKCkpKTsKICAgICAgICAgfSkpIHsKICAgICAgICAgICAgIHJlY2Vp
dmVFeGNlcHRpb24oeyBOb3RBbGxvd2VkRXJyb3IsICJBdCBsZWFzdCBvbmUgY3JlZGVudGlhbCBt
YXRjaGVzIGFuIGVudHJ5IG9mIHRoZSBleGNsdWRlQ3JlZGVudGlhbHMgbGlzdCBpbiB0aGUgcGxh
dGZvcm0gYXR0YWNoZWQgYXV0aGVudGljYXRvci4iX3MgfSwgV2ViQXV0aGVudGljYXRpb25TdGF0
dXM6OkxBRXhjbHVkZUNyZWRlbnRpYWxzTWF0Y2hlZCk7CiAgICAgICAgICAgICByZXR1cm47CkBA
IC01MTAsNyArNTEwLDcgQEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6OmdldEFzc2VydGlvbigp
CiAgICAgICAgIH0KIAogICAgICAgICBhdXRvKiByYXdJZCA9IGNyZWRlbnRpYWwtPnJhd0lkKCk7
Ci0gICAgICAgIGlmIChhbGxvd0NyZWRlbnRpYWxJZHMuY29udGFpbnMoYmFzZTY0RW5jb2RlVG9T
dHJpbmcocmF3SWQtPmRhdGEoKSwgcmF3SWQtPmJ5dGVMZW5ndGgoKSkpKQorICAgICAgICBpZiAo
YWxsb3dDcmVkZW50aWFsSWRzLmNvbnRhaW5zKGJhc2U2NEVuY29kZVRvU3RyaW5nKHJhd0lkLT5i
eXRlcygpKSkpCiAgICAgICAgICAgICBhc3NlcnRpb25SZXNwb25zZXMudW5jaGVja2VkQXBwZW5k
KGNyZWRlbnRpYWwuY29weVJlZigpKTsKICAgICB9CiAgICAgaWYgKGFzc2VydGlvblJlc3BvbnNl
cy5pc0VtcHR5KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRp
Y2F0aW9uL01vY2svTW9ja0xvY2FsQ29ubmVjdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tMb2NhbENvbm5lY3Rp
b24ubW0JKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1
dGhlbnRpY2F0aW9uL01vY2svTW9ja0xvY2FsQ29ubmVjdGlvbi5tbQkod29ya2luZyBjb3B5KQpA
QCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgTW9ja0xvY2FsQ29ubmVjdGlvbjo6ZmlsdGVyUmVzcG9u
c2UKICAgICBmb3IgKDsgaXRyICE9IHJlc3BvbnNlcy5lbmQoKTsgKytpdHIpIHsKICAgICAgICAg
YXV0byogcmF3SWQgPSBpdHItPmdldCgpLnJhd0lkKCk7CiAgICAgICAgIEFTU0VSVChyYXdJZCk7
Ci0gICAgICAgIGF1dG8gcmF3SWRCYXNlNjQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhyYXdJZC0+
ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgYXV0byByYXdJZEJhc2U2NCA9
IGJhc2U2NEVuY29kZVRvU3RyaW5nKHJhd0lkLT5ieXRlcygpKTsKICAgICAgICAgaWYgKHJhd0lk
QmFzZTY0ID09IHByZWZlcnJlZENyZWRlbnRpYWxJZEJhc2U2NCkKICAgICAgICAgICAgIGJyZWFr
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9MZWdhY3lTZXNzaW9u
U3RhdGVDb2RpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21h
Yy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTI5LDcgKzEyOSw3IEBAIHB1YmxpYzoKICAgICAgICAgKnRoaXMgPDwg
bGVuZ3RoOwogCiAgICAgICAgICp0aGlzIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihsZW5ndGgg
KiBzaXplb2YoVUNoYXIpKTsKLSAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hh
cmFjdGVycygpLmdldCgpKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSwgYWxpZ25vZihVQ2hhcikp
OworICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IFN0cmluZ1ZpZXcodmFsdWUp
LnVwY29udmVydGVkQ2hhcmFjdGVycygpLmdldCgpLCBsZW5ndGggfSk7CiAKICAgICAgICAgcmV0
dXJuICp0aGlzOwogICAgIH0KQEAgLTEzNyw3ICsxMzcsNyBAQCBwdWJsaWM6CiAgICAgSGlzdG9y
eUVudHJ5RGF0YUVuY29kZXImIG9wZXJhdG9yPDwoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2YWx1
ZSkKICAgICB7CiAgICAgICAgICp0aGlzIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1ZS5z
aXplKCkpOwotICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEodmFsdWUuZGF0YSgpLCB2YWx1
ZS5zaXplKCksIDEpOworICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEodmFsdWUsIDEpOwog
CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CkBAIC0xNDUsNyArMTQ1LDcgQEAgcHVibGlj
OgogICAgIEhpc3RvcnlFbnRyeURhdGFFbmNvZGVyJiBvcGVyYXRvcjw8KGNvbnN0IFZlY3Rvcjxj
aGFyPiYgdmFsdWUpCiAgICAgewogICAgICAgICAqdGhpcyA8PCBzdGF0aWNfY2FzdDx1aW50NjRf
dD4odmFsdWUuc2l6ZSgpKTsKLSAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZhbHVlLmRhdGEoKSksIHZhbHVlLnNpemUoKSwgMSk7
CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YSh2YWx1ZSwgMSk7CiAKICAgICAgICAgcmV0
dXJuICp0aGlzOwogICAgIH0KQEAgLTIwNiwxNyArMjA2LDIzIEBAIHByaXZhdGU6CiAgICAgewog
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYXJpdGhtZXRpYzxUeXBlPjo6dmFsdWUsICIi
KTsKIAotICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oJnZhbHVlKSwgc2l6ZW9mKHZhbHVlKSwgc2l6ZW9mKHZhbHVlKSk7CisgICAgICAgIGVu
Y29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJnZhbHVlLCAxIH0sIHNpemVvZih2YWx1ZSkpOwog
ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCi0gICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0
aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGFsaWdubWVu
dCkKKyAgICB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
ZGF0YSwgdW5zaWduZWQgYWxpZ25tZW50KQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
ZGF0YSB8fCAhc2l6ZSk7Ci0gICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90PihkYXRhKSAlIGFsaWdubWVudCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChkYXRhLmRh
dGEoKSB8fCAhZGF0YS5zaXplKCkpOworICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4oZGF0YS5kYXRhKCkpICUgYWxpZ25tZW50KSk7CiAKLSAgICAgICAgdWludDhf
dCogYnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQsIHNpemUpOwotICAgICAgICBtZW1jcHkoYnVmZmVy
LCBkYXRhLCBzaXplKTsKKyAgICAgICAgYXV0byogYnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQsIGRh
dGEuc2l6ZSgpKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciwgZGF0YS5kYXRhKCksIGRhdGEuc2l6
ZSgpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCBzaXplX3QgYWxpZ25tZW50ID0gYWxpZ25vZihUKSkK
KyAgICB7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShhc0J5dGVzKFNwYW4geyBzdGQ6
OmZvcndhcmQ8VD4oZGF0YSkgfSksIGFsaWdubWVudCk7CiAgICAgfQogCiAgICAgdWludDhfdCog
Z3Jvdyh1bnNpZ25lZCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQpAQCAtNjAxLDcgKzYwNyw3IEBA
IHB1YmxpYzoKIAogICAgICAgICBVQ2hhciogYnVmZmVyOwogICAgICAgICBhdXRvIHN0cmluZyA9
IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgICAgIGRl
Y29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIpLCBs
ZW5ndGggKiBzaXplb2YoVUNoYXIpLCBhbGlnbm9mKFVDaGFyKSk7CisgICAgICAgIGRlY29kZUZp
eGVkTGVuZ3RoRGF0YShTcGFuIHsgYnVmZmVyLCBsZW5ndGggfSwgYWxpZ25vZihVQ2hhcikpOwog
CiAgICAgICAgIHZhbHVlID0gc3RyaW5nOwogICAgICAgICByZXR1cm4gKnRoaXM7CkBAIC03Mzcs
MTcgKzc0MywyMyBAQCBwcml2YXRlOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYXJp
dGhtZXRpYzxUeXBlPjo6dmFsdWUsICIiKTsKICAgICAgICAgdmFsdWUgPSBUeXBlKCk7CiAKLSAg
ICAgICAgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2
YWx1ZSksIHNpemVvZih2YWx1ZSksIHNpemVvZih2YWx1ZSkpOworICAgICAgICBkZWNvZGVGaXhl
ZExlbmd0aERhdGEoU3BhbiB7ICZ2YWx1ZSwgMSB9LCBzaXplb2YodmFsdWUpKTsKICAgICAgICAg
cmV0dXJuICp0aGlzOwogICAgIH0KIAotICAgIHZvaWQgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVp
bnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBhbGlnbm1lbnQpCisgICAgdm9pZCBk
ZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbjxzdGQ6OmJ5dGU+IGRhdGEsIHVuc2lnbmVkIGFsaWdu
bWVudCkKICAgICB7Ci0gICAgICAgIGlmICghYWxpZ25CdWZmZXJQb3NpdGlvbihhbGlnbm1lbnQs
IHNpemUpKQorICAgICAgICBpZiAoIWFsaWduQnVmZmVyUG9zaXRpb24oYWxpZ25tZW50LCBkYXRh
LnNpemUoKSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbWVtY3B5KGRhdGEsIG1f
YnVmZmVyLCBzaXplKTsKLSAgICAgICAgbV9idWZmZXIgKz0gc2l6ZTsKKyAgICAgICAgbWVtY3B5
KGRhdGEuZGF0YSgpLCBtX2J1ZmZlciwgZGF0YS5zaXplKCkpOworICAgICAgICBtX2J1ZmZlciAr
PSBkYXRhLnNpemUoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZv
aWQgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCBzaXplX3QgYWxpZ25tZW50KQorICAg
IHsKKyAgICAgICAgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGFzV3JpdGFibGVCeXRlcyhTcGFuIHsg
c3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pLCBhbGlnbm1lbnQpOwogICAgIH0KIAogICAgIGJvb2wg
YWxpZ25CdWZmZXJQb3NpdGlvbih1bnNpZ25lZCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQpJbmRl
eDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0
Q2hhbm5lbC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw4ICs1
OSw4IEBAIE5ldHdvcmtTZW5kUXVldWUgV2ViU29ja2V0Q2hhbm5lbDo6Y3JlYXQKICAgICAgICAg
Y2hhbm5lbC5ub3RpZnlTZW5kRnJhbWUoV2ViU29ja2V0RnJhbWU6Ok9wQ29kZTo6T3BDb2RlVGV4
dCwgdXRmOFN0cmluZy5kYXRhQXNVSW50OFB0cigpLCB1dGY4U3RyaW5nLmxlbmd0aCgpKTsKICAg
ICAgICAgY2hhbm5lbC5zZW5kTWVzc2FnZShNZXNzYWdlczo6TmV0d29ya1NvY2tldENoYW5uZWw6
OlNlbmRTdHJpbmcgeyBJUEM6OkRhdGFSZWZlcmVuY2UgeyB1dGY4U3RyaW5nLmRhdGFBc1VJbnQ4
UHRyKCksIHV0ZjhTdHJpbmcubGVuZ3RoKCkgfSB9LCB1dGY4U3RyaW5nLmxlbmd0aCgpKTsKICAg
ICB9LCBbJmNoYW5uZWxdKGF1dG8mIHNwYW4pIHsKLSAgICAgICAgY2hhbm5lbC5ub3RpZnlTZW5k
RnJhbWUoV2ViU29ja2V0RnJhbWU6Ok9wQ29kZTo6T3BDb2RlQmluYXJ5LCBzcGFuLmRhdGEoKSwg
c3Bhbi5zaXplKCkpOwotICAgICAgICBjaGFubmVsLnNlbmRNZXNzYWdlKE1lc3NhZ2VzOjpOZXR3
b3JrU29ja2V0Q2hhbm5lbDo6U2VuZERhdGEgeyBJUEM6OkRhdGFSZWZlcmVuY2UgeyBzcGFuLmRh
dGEoKSwgc3Bhbi5zaXplKCkgfSB9LCBzcGFuLnNpemUoKSk7CisgICAgICAgIGNoYW5uZWwubm90
aWZ5U2VuZEZyYW1lKFdlYlNvY2tldEZyYW1lOjpPcENvZGU6Ok9wQ29kZUJpbmFyeSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3Bhbi5kYXRhKCkpLCBzcGFuLnNpemUoKSk7Cisg
ICAgICAgIGNoYW5uZWwuc2VuZE1lc3NhZ2UoTWVzc2FnZXM6Ok5ldHdvcmtTb2NrZXRDaGFubmVs
OjpTZW5kRGF0YSB7IElQQzo6RGF0YVJlZmVyZW5jZSB7IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KHNwYW4uZGF0YSgpKSwgc3Bhbi5zaXplKCkgfSB9LCBzcGFuLnNpemUoKSk7CiAg
ICAgfSwgWyZjaGFubmVsXShFeGNlcHRpb25Db2RlIGV4Y2VwdGlvbkNvZGUpIHsKICAgICAgICAg
YXV0byBjb2RlID0gc3RhdGljX2Nhc3Q8aW50PihleGNlcHRpb25Db2RlKTsKICAgICAgICAgY2hh
bm5lbC5mYWlsKG1ha2VTdHJpbmcoIkZhaWxlZCB0byBsb2FkIEJsb2I6IGV4Y2VwdGlvbiBjb2Rl
ID0gIiwgY29kZSkpOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBD
VGVzdGluZ0FQSS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02OTEsNyArNjkxLDcgQEAgc3RhdGljIGJvb2wgZW5jb2RlVHlwZWRBcnJheShJUEM6OkVuY29k
ZQogICAgIGlmICghZGF0YS5idWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGVu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGRhdGEuYnVmZmVyKSwgZGF0YS5sZW5ndGgsIDEpOworICAgIGVuY29kZXIuZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKFNwYW4geyByZWludGVycHJldF9jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGRh
dGEuYnVmZmVyKSwgZGF0YS5sZW5ndGggfSwgMSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5k
ZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDI3IEBACisyMDIxLTA2LTExICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAg
ICAgICBBZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
Y2Fpcm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmNwcDoKKyAgICAgICAgKGNvbXB1dGVTSEExSGFz
aFN0cmluZ0ZvckJpdG1hcENvbnRleHQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2NnL1Bp
eGVsRHVtcFN1cHBvcnRDRy5jcHA6CisgICAgICAgIChjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JC
aXRtYXBDb250ZXh0KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9CbG9vbUZp
bHRlci5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpnZW5lcmF0ZVJhbmRvbURpZ2VzdHMp
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2Nv
Y29hL0hUVFBTZXJ2ZXIubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9uOjp3
ZWJTb2NrZXRIYW5kc2hha2UpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvY2Fpcm8vVGVz
dEludm9jYXRpb25DYWlyby5jcHA6CisgICAgICAgIChXVFI6OmNvbXB1dGVTSEExSGFzaFN0cmlu
Z0ZvckNhaXJvU3VyZmFjZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52
b2NhdGlvbkNHLmNwcDoKKyAgICAgICAgKFdUUjo6Y29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQ29u
dGV4dCk6CisKIDIwMjEtMDYtMTEgIEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29u
eS5jb20+CiAKICAgICAgICAgW1dpbl1bRHVtcFJlbmRlclRyZWVdIC0tbm8tdGltZW91dCBzd2l0
Y2ggZG9lc24ndCB3b3JrCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1
bXBTdXBwb3J0Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nh
aXJvL1BpeGVsRHVtcFN1cHBvcnRDYWlyby5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL2NhaXJvL1BpeGVsRHVtcFN1cHBvcnRDYWlyby5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JCaXRt
YXBDb250ZQogICAgIFNIQTEgc2hhMTsKICAgICB1bnNpZ25lZCBjaGFyKiBiaXRtYXBEYXRhID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEo
c3VyZmFjZSkpOwogICAgIGZvciAodW5zaWduZWQgcm93ID0gMDsgcm93IDwgcGl4ZWxzSGlnaDsg
cm93KyspIHsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lk
ZSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IGJpdG1hcERhdGEsIDQgKiBwaXhlbHNX
aWRlIH0pOwogICAgICAgICBiaXRtYXBEYXRhICs9IGJ5dGVzUGVyUm93OwogICAgIH0KICAgICBT
SEExOjpEaWdlc3QgaGFzaDsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVt
cFN1cHBvcnRDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2cvUGl4
ZWxEdW1wU3VwcG9ydENHLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2cvUGl4ZWxEdW1wU3VwcG9ydENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTQg
Kzg4LDE0IEBAIHZvaWQgY29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQml0bWFwQ29udGUKICAgICAg
ICAgICAgIHVpbnQzMl90IGJ1ZmZlcltwaXhlbHNXaWRlXTsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgY29sdW1uID0gMDsgY29sdW1uIDwgcGl4ZWxzV2lkZTsgY29sdW1uKyspCiAgICAgICAg
ICAgICAgICAgYnVmZmVyW2NvbHVtbl0gPSBPU1JlYWRMaXR0bGVJbnQzMihiaXRtYXBEYXRhLCA0
ICogY29sdW1uKTsKLSAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50OF90Kj4oYnVmZmVyKSwgNCAqIHBpeGVsc1dpZGUpOworICAgICAgICAgICAgc2hh
MS5hZGRCeXRlcyhTcGFuIHsgYnVmZmVyLCBwaXhlbHNXaWRlIH0pOwogICAgICAgICAgICAgYml0
bWFwRGF0YSArPSBieXRlc1BlclJvdzsKICAgICAgICAgfQogICAgIH0gZWxzZQogI2VuZGlmCiAg
ICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIHJvdyA9IDA7IHJvdyA8IHBpeGVsc0hpZ2g7IHJv
dysrKSB7Ci0gICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGJpdG1hcERhdGEsIDQgKiBwaXhlbHNX
aWRlKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IGJpdG1hcERhdGEsIDQgKiBw
aXhlbHNXaWRlIH0pOwogICAgICAgICAgICAgYml0bWFwRGF0YSArPSBieXRlc1BlclJvdzsKICAg
ICAgICAgfQogICAgIH0KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0Jsb29t
RmlsdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9C
bG9vbUZpbHRlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL0Jsb29tRmlsdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBA
QCBzdGF0aWMgVmVjdG9yPFNIQTE6OkRpZ2VzdD4gZ2VuZXJhdGVSYW5kCiAgICAgU0hBMSBzaGEx
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBoYXNoQ291bnQ7ICsraSkgewogICAgICAg
ICBkb3VibGUgcmFuZG9tID0gcmFuZG9tTnVtYmVyKCk7Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMo
cmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnJhbmRvbSksIHNpemVvZihkb3VibGUpKTsKKyAg
ICAgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgJnJhbmRvbSwgMSB9KTsKICAgICAgICAgU0hBMTo6
RGlnZXN0IGRpZ2VzdDsKICAgICAgICAgc2hhMS5jb21wdXRlSGFzaChkaWdlc3QpOwogICAgICAg
ICBoYXNoZXMuYXBwZW5kKGRpZ2VzdCk7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9GaWxlU3lzdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9GaWxlU3lzdGVtLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw4
ICsxMzMsOCBAQCBURVNUX0YoRmlsZVN5c3RlbVRlc3QsIE1hcHBpbmdFeGlzdGluZ0ZpCiAgICAg
RmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEgbWFwcGVkRmlsZURhdGEodGVtcEZpbGVQYXRoKCks
IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVNb2RlOjpTaGFyZWQsIHN1Y2Nlc3MpOwogICAgIEVYUEVD
VF9UUlVFKHN1Y2Nlc3MpOwogICAgIEVYUEVDVF9UUlVFKCEhbWFwcGVkRmlsZURhdGEpOwotICAg
IEVYUEVDVF9UUlVFKG1hcHBlZEZpbGVEYXRhLnNpemUoKSA9PSBzdHJsZW4oRmlsZVN5c3RlbVRl
c3REYXRhKSk7Ci0gICAgRVhQRUNUX1RSVUUoc3RybnN0cihGaWxlU3lzdGVtVGVzdERhdGEsIHN0
YXRpY19jYXN0PGNvbnN0IGNoYXIqPihtYXBwZWRGaWxlRGF0YS5kYXRhKCkpLCBtYXBwZWRGaWxl
RGF0YS5zaXplKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShtYXBwZWRGaWxlRGF0YS5kYXRhKCkuc2l6
ZSgpID09IHN0cmxlbihGaWxlU3lzdGVtVGVzdERhdGEpKTsKKyAgICBFWFBFQ1RfVFJVRShzdHJu
c3RyKEZpbGVTeXN0ZW1UZXN0RGF0YSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4obWFw
cGVkRmlsZURhdGEuZGF0YSgpLmRhdGEoKSksIG1hcHBlZEZpbGVEYXRhLmRhdGEoKS5zaXplKCkp
KTsKIH0KIAogVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBNYXBwaW5nRXhpc3RpbmdFbXB0eUZpbGUp
CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TSEExLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TSEExLmNwcAkocmV2aXNpb24gMjc4
ODA5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU0hBMS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDcgKzM4LDcgQEAgc3RhdGljIHZvaWQgZXhwZWN0U0hBMShDU3RyaW5nIGlu
cHV0LCBpbgogewogICAgIFNIQTEgc2hhMTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcGVh
dDsgKytpKQotICAgICAgICBzaGExLmFkZEJ5dGVzKGlucHV0KTsKKyAgICAgICAgc2hhMS5hZGRC
eXRlcyhpbnB1dC5ieXRlcygpKTsKICAgICBDU3RyaW5nIGFjdHVhbCA9IHNoYTEuY29tcHV0ZUhl
eERpZ2VzdCgpOwogCiAgICAgQVNTRVJUX0VRKGV4cGVjdGVkLmxlbmd0aCgpLCBhY3R1YWwubGVu
Z3RoKCkpOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbQkocmV2
aXNpb24gMjc4ODA5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0zNDAsMTEgKzM0MCwxMSBAQCB2b2lkIENvbm5lY3Rpb246Ondl
YlNvY2tldEhhbmRzaGFrZShDb21wCiAKICAgICAgICAgICAgIGNvbnN0ZXhwciBhdXRvKiB3ZWJT
b2NrZXRLZXlHVUlEID0gIjI1OEVBRkE1LUU5MTQtNDdEQS05NUNBLUM1QUIwREM4NUIxMSI7CiAg
ICAgICAgICAgICBTSEExIHNoYTE7Ci0gICAgICAgICAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGtleUJlZ2luKSwga2V5RW5kIC0ga2V5QmVnaW4pOwot
ICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3Qq
Pih3ZWJTb2NrZXRLZXlHVUlEKSwgc3RybGVuKHdlYlNvY2tldEtleUdVSUQpKTsKKyAgICAgICAg
ICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IGtleUJlZ2luLCBrZXlFbmQgfSk7CisgICAgICAgICAg
ICBzaGExLmFkZEJ5dGVzKFNwYW4geyB3ZWJTb2NrZXRLZXlHVUlELCBzdHJsZW4od2ViU29ja2V0
S2V5R1VJRCkgfSk7CiAgICAgICAgICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAgICAgICAgICAg
IHNoYTEuY29tcHV0ZUhhc2goaGFzaCk7Ci0gICAgICAgICAgICByZXR1cm4gYmFzZTY0RW5jb2Rl
VG9TdHJpbmcoaGFzaC5kYXRhKCksIFNIQTE6Omhhc2hTaXplKTsKKyAgICAgICAgICAgIHJldHVy
biBiYXNlNjRFbmNvZGVUb1N0cmluZyhoYXNoKTsKICAgICAgICAgfTsKIAogICAgICAgICBjb25u
ZWN0aW9uLnNlbmQoSFRUUFJlc3BvbnNlKDEwMSwgewpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9jYWlyby9UZXN0SW52b2NhdGlvbkNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fp
cm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyB2b2lkIGNvbXB1
dGVTSEExSGFzaFN0cmluZ0ZvckNhaXIKICAgICBTSEExIHNoYTE7CiAgICAgdW5zaWduZWQgY2hh
ciogYml0bWFwRGF0YSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpKTsKICAgICBmb3IgKHNpemVfdCByb3cgPSAwOyByb3cg
PCBwaXhlbHNIaWdoOyArK3JvdykgewotICAgICAgICBzaGExLmFkZEJ5dGVzKGJpdG1hcERhdGEs
IDQgKiBwaXhlbHNXaWRlKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgYml0bWFwRGF0
YSwgNCAqIHBpeGVsc1dpZGUgfSk7CiAgICAgICAgIGJpdG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7
CiAgICAgfQogICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBU
b29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05NCw3ICs5NCw3IEBAIHZvaWQgY29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQ29udGV4
dChDR0MKICNlbmRpZgogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCByb3cgPSAwOyByb3cg
PCBwaXhlbHNIaWdoOyByb3crKykgewotICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhiaXRtYXBE
YXRhLCA0ICogcGl4ZWxzV2lkZSk7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyBi
aXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lkZSB9KTsKICAgICAgICAgICAgIGJpdG1hcERhdGEgKz0g
Ynl0ZXNQZXJSb3c7CiAgICAgICAgIH0KICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431276</attachid>
            <date>2021-06-13 08:18:00 -0700</date>
            <delta_ts>2021-06-13 08:37:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226887-20210613081759.patch</filename>
            <type>text/plain</type>
            <size>186205</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBA
CisyMDIxLTA2LTEyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogQVBJL0pTU2NyaXB0Lm1tOgorICAg
ICAgICAoK1tKU1NjcmlwdCBzY3JpcHRPZlR5cGU6bWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTp3
aXRoU291cmNlVVJMOmFuZEJ5dGVjb2RlQ2FjaGU6aW5WaXJ0dWFsTWFjaGluZTplcnJvcjpdKToK
KyAgICAgICAgKC1bSlNTY3JpcHQgcmVhZENhY2hlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHdy
aXRlQ2FjaGU6XSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9ja0hhc2g6OkNvZGVCbG9ja0hhc2gpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHA6CisgICAgICAgIChJbnNw
ZWN0b3I6OmJhY2tlbmRDb21tYW5kc0hhc2gpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZm
ZXIuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJDb250ZW50czo6d3JpdGFibGVCeXRlcyk6
CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyQ29udGVudHM6OmJ5dGVzIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6QXJyYXlCdWZmZXI6OndyaXRhYmxlQnl0ZXMpOgorICAgICAgICAoSlNDOjpBcnJh
eUJ1ZmZlcjo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
Lmg6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6d3JpdGFibGVCeXRlcyk6CisgICAg
ICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRp
bWUvQ2FjaGVQYXlsb2FkLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVQYXlsb2FkOjptYWtlTWFw
cGVkUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6bWFrZU1hbGxvY1BheWxv
YWQpOgorICAgICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6Om1ha2VFbXB0eVBheWxvYWQpOgorICAg
ICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6OkNhY2hlUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNh
Y2hlUGF5bG9hZDo6ZnJlZURhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVQYXlsb2FkLmg6
CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6ZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlUGF5bG9hZDo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6
Q2FjaGVQYXlsb2FkKToKKyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKToKKwogMjAyMS0w
Ni0xMSAgUGF0cmljayBBbmdsZSAgPHBhbmdsZUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogQWRkIGluc3RydW1lbnRhdGlvbiB0byBub2RlIGRlc3RydWN0aW9uIGZvciBJbnNw
ZWN0b3JET01BZ2VudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMTMgKzEzNCwxMyBAQCArIChpbnN0YW5jZXR5cGUpc2Ny
aXB0T2ZUeXBlOihKU1NjcmlwdFR5CiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4g
Y3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJGaWxlIGF0IHBhdGggJUAg
Y291bGQgbm90IGJlIG1hcHBlZC4iLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihzeXN0ZW1QYXRo
KV0sIGVycm9yKTsKIAotICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCkpKQor
ICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmlsZURhdGEuZGF0YSgpLnNpemUoKSkpCiAg
ICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIk5v
dCBhbGwgY2hhcmFjdGVycyBpbiBmaWxlIGF0ICVAIGFyZSBBU0NJSS4iLCBzdGF0aWNfY2FzdDxO
U1N0cmluZyAqPihzeXN0ZW1QYXRoKV0sIGVycm9yKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gYWRv
cHROUyhbW0pTU2NyaXB0IGFsbG9jXSBpbml0XSk7CiAgICAgcmVzdWx0LT5tX3ZpcnR1YWxNYWNo
aW5lID0gdm07CiAgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOwotICAgIHJlc3VsdC0+bV9zb3Vy
Y2UgPSBTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcoYml0d2lzZV9jYXN0
PGNvbnN0IExDaGFyKj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpKSk7CisgICAg
cmVzdWx0LT5tX3NvdXJjZSA9IFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWlu
ZyhiaXR3aXNlX2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmls
ZURhdGEuZGF0YSgpLnNpemUoKSkpOwogICAgIHJlc3VsdC0+bV9tYXBwZWRTb3VyY2UgPSBXVEZN
b3ZlKGZpbGVEYXRhKTsKICAgICByZXN1bHQtPm1fc291cmNlVVJMID0gc291cmNlVVJMOwogICAg
IHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7CkBAIC0xNjgsMjQgKzE2OCwyMyBAQCAt
ICh2b2lkKXJlYWRDYWNoZQogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgY29uc3QgdWludDhfdCogZmlsZURhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihtYXBwZWRGaWxlLmRhdGEoKSk7Ci0gICAgdW5zaWduZWQgZmlsZVRvdGFsU2l6ZSA9IG1h
cHBlZEZpbGUuc2l6ZSgpOworICAgIGF1dG8gZmlsZURhdGEgPSBtYXBwZWRGaWxlLmRhdGEoKTsK
IAogICAgIC8vIEVuc3VyZSB3ZSBhdCBsZWFzdCBoYXZlIGEgU0hBMTo6RGlnZXN0IHRvIHJlYWQu
Ci0gICAgaWYgKGZpbGVUb3RhbFNpemUgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgeworICAgIGlm
IChmaWxlRGF0YS5zaXplKCkgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgewogICAgICAgICBGaWxl
U3lzdGVtOjpkZWxldGVGaWxlKGNhY2hlRmlsZW5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgdW5zaWduZWQgZmlsZURhdGFTaXplID0gZmlsZVRvdGFsU2l6ZSAtIHNpemVvZihT
SEExOjpEaWdlc3QpOworICAgIHVuc2lnbmVkIGZpbGVEYXRhU2l6ZSA9IGZpbGVEYXRhLnNpemUo
KSAtIHNpemVvZihTSEExOjpEaWdlc3QpOwogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFz
aDsKICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhmaWxlRGF0YSwgZmlsZURhdGFT
aXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKGZpbGVEYXRhLmZpcnN0KGZpbGVEYXRhU2l6ZSkpOwog
ICAgIHNoYTEuY29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2VzdCBm
aWxlSGFzaDsKLSAgICBtZW1jcHkoJmZpbGVIYXNoLCBmaWxlRGF0YSArIGZpbGVEYXRhU2l6ZSwg
c2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOworICAgIG1lbWNweSgmZmlsZUhhc2gsIGZpbGVEYXRhLmRh
dGEoKSArIGZpbGVEYXRhU2l6ZSwgc2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOwogCiAgICAgaWYgKGNv
bXB1dGVkSGFzaCAhPSBmaWxlSGFzaCkgewogICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxl
KGNhY2hlRmlsZW5hbWUpOwpAQCAtMzQzLDcgKzM0Miw3IEBAIC0gKEJPT0wpd3JpdGVDYWNoZToo
U3RyaW5nJillcnJvcgogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFzaDsKICAgICBTSEEx
IHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhtX2NhY2hlZEJ5dGVjb2RlLT5kYXRhKCksIG1fY2Fj
aGVkQnl0ZWNvZGUtPnNpemUoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgbV9jYWNoZWRC
eXRlY29kZS0+ZGF0YSgpLCBtX2NhY2hlZEJ5dGVjb2RlLT5zaXplKCkgfSk7CiAgICAgc2hhMS5j
b21wdXRlSGFzaChjb21wdXRlZEhhc2gpOwogICAgIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKHRl
bXBGRCwgY29tcHV0ZWRIYXNoLmRhdGEoKSwgc2l6ZW9mKGNvbXB1dGVkSGFzaCkpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0hhc2guY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgQ29kZUJsb2Nr
SGFzaDo6Q29kZUJsb2NrSGFzaChjb25zdCBTb3VyYwogICAgIEFTU0VSVChzb3VyY2VDb2RlLmxl
bmd0aCgpID49IDApOwogICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhTb3VyY2VDb2RlTGVuZ3Ro
VG9IYXNoID0gNTAwICogTUI7CiAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzb3VyY2VD
b2RlLmxlbmd0aCgpKSA8IG1heFNvdXJjZUNvZGVMZW5ndGhUb0hhc2gpCi0gICAgICAgIHNoYTEu
YWRkQnl0ZXMoc291cmNlQ29kZS50b1VURjgoKSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoc291
cmNlQ29kZS50b1VURjgoKS5ieXRlcygpKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gSnVzdCBo
YXNoIHdpdGggdGhlIGxlbmd0aCBhbmQgc2FtcGxlcyBvZiB0aGUgc291cmNlIHN0cmluZyBpbnN0
ZWFkLgogICAgICAgICBTdHJpbmdWaWV3IHN0ciA9IHNvdXJjZUNvZGUucHJvdmlkZXIoKS0+c291
cmNlKCk7CkBAIC02MiwxMCArNjIsMTAgQEAgQ29kZUJsb2NrSGFzaDo6Q29kZUJsb2NrSGFzaChj
b25zdCBTb3VyYwogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHIubGVuZ3RoKCk7CiAgICAg
ICAgIHVuc2lnbmVkIHN0ZXAgPSAobGVuZ3RoID4+IDEwKSArIDE7CiAKLSAgICAgICAgc2hhMS5h
ZGRCeXRlcyhiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KCZsZW5ndGgpLCBzaXplb2YobGVuZ3RoKSk7
CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZsZW5ndGgsIDEgfSk7CiAgICAgICAgIGRv
IHsKICAgICAgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IHN0cltpbmRleF07Ci0gICAgICAgICAg
ICBzaGExLmFkZEJ5dGVzKGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oJmNoYXJhY3RlciksIHNpemVv
ZihjaGFyYWN0ZXIpKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZjaGFyYWN0
ZXIsIDEgfSk7CiAgICAgICAgICAgICBvbGRJbmRleCA9IGluZGV4OwogICAgICAgICAgICAgaW5k
ZXggKz0gc3RlcDsKICAgICAgICAgfSB3aGlsZSAoaW5kZXggPiBvbGRJbmRleCAmJiBpbmRleCA8
IGxlbmd0aCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VIYXNo
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VI
YXNoLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BhcnNlSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiBQYXJzZUhhc2g6OlBhcnNlSGFzaChjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VD
b2RlKQogewogICAgIFNIQTEgc2hhMTsKLSAgICBzaGExLmFkZEJ5dGVzKHNvdXJjZUNvZGUudG9V
VEY4KCkpOworICAgIHNoYTEuYWRkQnl0ZXMoc291cmNlQ29kZS50b1VURjgoKS5ieXRlcygpKTsK
ICAgICBTSEExOjpEaWdlc3QgZGlnZXN0OwogICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsK
ICAgICB1bnNpZ25lZCBoYXNoID0gZGlnZXN0WzBdIHwgKGRpZ2VzdFsxXSA8PCA4KSB8IChkaWdl
c3RbMl0gPDwgMTYpIHwgKGRpZ2VzdFszXSA8PCAyNCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1JlbW90ZUluc3BlY3RvclV0aWxzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1Jl
bW90ZUluc3BlY3RvclV0aWxzLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgY29uc3QgQ1N0cmluZyYgYmFja2VuZENv
bW1hbmRzSGFzaCgpCiAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSA9IGdfYnl0ZXNfZ2V0X2Rh
dGEoYnl0ZXMuZ2V0KCksICZkYXRhU2l6ZSk7CiAgICAgICAgIEFTU0VSVChkYXRhU2l6ZSk7CiAg
ICAgICAgIFNIQTEgc2hhMTsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhzdGF0aWNfY2FzdDxjb25z
dCB1aW50OF90Kj4oZGF0YSksIGRhdGFTaXplKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFu
IHsgc3RhdGljX2Nhc3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSksIGRhdGFTaXplIH0pOwogICAg
ICAgICBoZXhEaWdlc3QgPSBzaGExLmNvbXB1dGVIZXhEaWdlc3QoKTsKICAgICB9CiAgICAgcmV0
dXJuIGhleERpZ2VzdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogI2luY2x1ZGUgPHd0Zi9QYWNrZWRSZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZl
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtODAsNyAr
ODEsMTAgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBt
X2RhdGEuZ2V0TWF5QmVOdWxsKHNpemVJbkJ5dGVzKCkpOyB9CiAgICAgdW5zaWduZWQgc2l6ZUlu
Qnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX3NpemVJbkJ5dGVzOyB9Ci0gICAgCisKKyAgICBTcGFu
PHN0ZDo6Ynl0ZT4gd3JpdGFibGVCeXRlcygpIHsgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8c3RkOjpi
eXRlKj4oZGF0YSgpKSwgc2l6ZUluQnl0ZXMoKSB9OyB9CisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4geyBzdGF0aWNfY2FzdDxjb25zdCBzdGQ6OmJ5dGUq
PihkYXRhKCkpLCBzaXplSW5CeXRlcygpIH07IH0KKwogICAgIGJvb2wgaXNTaGFyZWQoKSBjb25z
dCB7IHJldHVybiBtX3NoYXJlZDsgfQogICAgIAogcHJpdmF0ZToKQEAgLTEyNyw3ICsxMzEsOSBA
QCBwdWJsaWM6CiAgICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKICAgICBpbmxpbmUgY29uc3Qgdm9p
ZCogZGF0YSgpIGNvbnN0OwogICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7
Ci0gICAgCisgICAgaW5saW5lIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCk7CisgICAg
aW5saW5lIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAgICAgdm9pZCBt
YWtlU2hhcmVkKCk7CiAgICAgdm9pZCBzZXRTaGFyaW5nTW9kZShBcnJheUJ1ZmZlclNoYXJpbmdN
b2RlKTsKICAgICBpbmxpbmUgYm9vbCBpc1NoYXJlZCgpIGNvbnN0OwpAQCAtMTk3LDYgKzIwMywx
NiBAQCB1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJu
IG1fY29udGVudHMuc2l6ZUluQnl0ZXMoKTsKIH0KIAorU3BhbjxzdGQ6OmJ5dGU+IEFycmF5QnVm
ZmVyOjp3cml0YWJsZUJ5dGVzKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZW50cy53cml0YWJsZUJ5
dGVzKCk7Cit9CisKK1NwYW48Y29uc3Qgc3RkOjpieXRlPiBBcnJheUJ1ZmZlcjo6Ynl0ZXMoKSBj
b25zdAoreworICAgIHJldHVybiBtX2NvbnRlbnRzLmJ5dGVzKCk7Cit9CisKIGJvb2wgQXJyYXlC
dWZmZXI6OmlzU2hhcmVkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb250ZW50cy5pc1NoYXJl
ZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZm
ZXJWaWV3LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4Niw5IEBAIHB1
YmxpYzoKIAogICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVM
ZW5ndGg7IH0KIAorICAgIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCkgeyByZXR1cm4g
eyBzdGF0aWNfY2FzdDxzdGQ6OmJ5dGUqPihkYXRhKCkpLCBieXRlTGVuZ3RoKCkgfTsgfQorICAg
IFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0IHsgcmV0dXJuIHsgc3RhdGljX2Nh
c3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSgpKSwgYnl0ZUxlbmd0aCgpIH07IH0KKwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0RGV0YWNoYWJsZShib29sKTsKICAgICBib29sIGlzRGV0
YWNoYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNEZXRhY2hhYmxlOyB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlUGF5bG9hZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsMjcgKzMwLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogCiBD
YWNoZVBheWxvYWQgQ2FjaGVQYXlsb2FkOjptYWtlTWFwcGVkUGF5bG9hZChGaWxlU3lzdGVtOjpN
YXBwZWRGaWxlRGF0YSYmIGRhdGEpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZCh0cnVlLCBk
YXRhLmxlYWtIYW5kbGUoKSwgZGF0YS5zaXplKCkpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQo
dHJ1ZSwgZGF0YS5sZWFrSGFuZGxlKCkpOwogfQogCiBDYWNoZVBheWxvYWQgQ2FjaGVQYXlsb2Fk
OjptYWtlTWFsbG9jUGF5bG9hZChNYWxsb2NQdHI8dWludDhfdCwgVk1NYWxsb2M+JiYgZGF0YSwg
c2l6ZV90IHNpemUpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZChmYWxzZSwgZGF0YS5sZWFr
UHRyKCksIHNpemUpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQoZmFsc2UsIGFzV3JpdGFibGVC
eXRlcyhTcGFuIHsgZGF0YS5sZWFrUHRyKCksIHNpemUgfSkpOwogfQogCiBDYWNoZVBheWxvYWQg
Q2FjaGVQYXlsb2FkOjptYWtlRW1wdHlQYXlsb2FkKCkKIHsKLSAgICByZXR1cm4gQ2FjaGVQYXls
b2FkKHRydWUsIG51bGxwdHIsIDApOworICAgIHJldHVybiBDYWNoZVBheWxvYWQodHJ1ZSwgeyB9
KTsKIH0KIAogQ2FjaGVQYXlsb2FkOjpDYWNoZVBheWxvYWQoQ2FjaGVQYXlsb2FkJiYgb3RoZXIp
CiB7Ci0gICAgbV9tYXBwZWQgPSBvdGhlci5tX21hcHBlZDsKLSAgICBtX3NpemUgPSBvdGhlci5t
X3NpemU7Ci0gICAgbV9kYXRhID0gb3RoZXIubV9kYXRhOwotICAgIG90aGVyLm1fbWFwcGVkID0g
ZmFsc2U7Ci0gICAgb3RoZXIubV9kYXRhID0gbnVsbHB0cjsKLSAgICBvdGhlci5tX3NpemUgPSAw
OworICAgIG1fbWFwcGVkID0gc3RkOjpleGNoYW5nZShvdGhlci5tX21hcHBlZCwgZmFsc2UpOwor
ICAgIG1fZGF0YSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLCB7IH0pOwogfQogCiBDYWNo
ZVBheWxvYWQ6On5DYWNoZVBheWxvYWQoKQpAQCAtNjcsMTIgKzYzLDEzIEBAIENhY2hlUGF5bG9h
ZCYgQ2FjaGVQYXlsb2FkOjpvcGVyYXRvcj0oQ2EKIAogdm9pZCBDYWNoZVBheWxvYWQ6OmZyZWVE
YXRhKCkKIHsKLSAgICBpZiAoIW1fZGF0YSkKKyAgICBpZiAoIW1fZGF0YS5kYXRhKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBpZiAobV9tYXBwZWQpIHsKLSAgICAgICAgRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1fZGF0YSwgbV9zaXplKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZmFzdEZy
ZWUobV9kYXRhKTsKKworICAgIGlmIChtX21hcHBlZCkKKyAgICAgICAgRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1fZGF0YSk7CisgICAgZWxzZQorICAgICAgICBmYXN0RnJlZShtX2RhdGEu
ZGF0YSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHd0Zi9GaWxlU3lz
dGVtLmg+CiAjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MSwyMiArNDIsMjAgQEAgcHVibGljOgogICAgIEpT
X0VYUE9SVF9QUklWQVRFIH5DYWNoZVBheWxvYWQoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBD
YWNoZVBheWxvYWQmIG9wZXJhdG9yPShDYWNoZVBheWxvYWQmJiBvdGhlcik7CiAKLSAgICBjb25z
dCB1aW50OF90KiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBjb25zdCB1aW50OF90KiBkYXRhKCkg
Y29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9kYXRhLmRhdGEoKSk7
IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5zaXplKCk7IH0KIAog
cHJpdmF0ZToKLSAgICBDYWNoZVBheWxvYWQoYm9vbCBtYXBwZWQsIHZvaWQqIGRhdGEsIHNpemVf
dCBzaXplKQorICAgIENhY2hlUGF5bG9hZChib29sIG1hcHBlZCwgU3BhbjxzdGQ6OmJ5dGU+IGRh
dGEpCiAgICAgICAgIDogbV9tYXBwZWQobWFwcGVkKQotICAgICAgICAsIG1fc2l6ZShzaXplKQot
ICAgICAgICAsIG1fZGF0YShzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGF0YSkpCisgICAgICAgICwg
bV9kYXRhKGRhdGEpCiAgICAgewogICAgIH0KIAogICAgIHZvaWQgZnJlZURhdGEoKTsKIAogICAg
IGJvb2wgbV9tYXBwZWQ7Ci0gICAgc2l6ZV90IG1fc2l6ZTsKLSAgICB1aW50OF90KiBtX2RhdGE7
CisgICAgU3BhbjxzdGQ6OmJ5dGU+IG1fZGF0YTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1Bh
cnNlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNyArMjYxLDcg
QEAgYXV0byBTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKGNvbnN0IHVpbgogICAgIH0KIAogICAg
IGlmIChVTkxJS0VMWShPcHRpb25zOjp1c2VFYWdlcldlYkFzc2VtYmx5TW9kdWxlSGFzaGluZygp
KSkKLSAgICAgICAgbV9oYXNoZXIuYWRkQnl0ZXMoYnl0ZXMsIGJ5dGVzU2l6ZSk7CisgICAgICAg
IG1faGFzaGVyLmFkZEJ5dGVzKGFzQnl0ZXMoU3BhbiB7IGJ5dGVzLCBieXRlc1NpemUgfSApKTsK
IAogICAgIHNpemVfdCBvZmZzZXRJbkJ5dGVzID0gMDsKICAgICB3aGlsZSAodHJ1ZSkgewpJbmRl
eDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VM
b2cJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsNjggQEAKKzIwMjEtMDYtMTEgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBw
bGUuY29tPgorCisgICAgICAgIEFkb3B0IFNwYW4gaW4gbW9yZSBwbGFjZXMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjg4NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtXSVBdCisKKyAgICAgICAgKiBX
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvRmlsZVN5c3RlbS5j
cHA6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpNYXBwZWRGaWxlRGF0YTo6fk1hcHBl
ZEZpbGVEYXRhKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRh
OjptYXBGaWxlSGFuZGxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OnVubWFwVmll
d09mRmlsZSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjptYXBUb0ZpbGUpOgorICAg
ICAgICAqIHd0Zi9GaWxlU3lzdGVtLmg6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpN
YXBwZWRGaWxlRGF0YTo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChXVEY6OkZpbGVT
eXN0ZW1JbXBsOjpNYXBwZWRGaWxlRGF0YTo6ZGF0YSBjb25zdCk6CisgICAgICAgIChXVEY6OkZp
bGVTeXN0ZW1JbXBsOjpNYXBwZWRGaWxlRGF0YTo6bGVha0hhbmRsZSk6CisgICAgICAgIChXVEY6
OkZpbGVTeXN0ZW1JbXBsOjpNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEpOgorICAgICAg
ICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6TWFwcGVkRmlsZURhdGE6Om9wZXJhdG9yPSk6CisgICAg
ICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpNYXBwZWRGaWxlRGF0YTo6c2l6ZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9TSEExLmNwcDoKKyAg
ICAgICAgKFdURjo6U0hBMTo6YWRkQnl0ZXMpOgorICAgICAgICAoV1RGOjpTSEExOjpmaW5hbGl6
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlNIQTE6OnByb2Nlc3NCbG9jayk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6OlNIQTE6OnJlc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6U0hB
MTo6aGV4RGlnZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6U0hBMTo6Y29tcHV0ZUhleERp
Z2VzdCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1NIQTEuaDoKKyAgICAgICAgKFdURjo6U0hB
MTo6YWRkQnl0ZXMpOgorICAgICAgICAqIHd0Zi9WZWN0b3IuaDoKKyAgICAgICAgKiB3dGYvcGVy
c2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5jcHA6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNl
OjpDb2RlcjxDU3RyaW5nPjo6ZW5jb2RlKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNv
ZGVyPENTdHJpbmc+OjpkZWNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8
U3RyaW5nPjo6ZW5jb2RlKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OmRlY29kZVN0cmlu
Z1RleHQpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8U0hBMTo6RGlnZXN0Pjo6
ZW5jb2RlKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPFNIQTE6OkRpZ2VzdD46
OmRlY29kZSk6CisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaDoK
KyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwOgorICAgICAg
ICAoV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2Rlcjo6RGVjb2Rlcik6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyOjpidWZmZXJQb2ludGVyRm9yRGlyZWN0UmVhZCk6CisgICAgICAg
IChXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEpOgorICAg
ICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2Rlcjo6dmVyaWZ5Q2hlY2tzdW0pOgorICAgICAg
ICAoV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2Rlcjo6fkRlY29kZXIpOiBEZWxldGVkLgorICAgICAg
ICAqIHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oOgorICAgICAgICAqIHd0Zi9w
ZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5jcHA6CisgICAgICAgIChXVEY6OlBlcnNpc3Rl
bmNlOjpFbmNvZGVyOjpncm93KToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6
OnVwZGF0ZUNoZWNrc3VtRm9yRGF0YSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNv
ZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6
RW5jb2Rlcjo6ZW5jb2RlTnVtYmVyKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29k
ZXI6OmVuY29kZUNoZWNrc3VtKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6
OkVuY29kZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6
fkVuY29kZXIpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50
RW5jb2Rlci5oOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6YnVmZmVyIGNv
bnN0KToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6OnVwZGF0ZUNoZWNrc3Vt
Rm9yTnVtYmVyKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6OmJ1ZmZlclNp
emUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi90ZXh0L0Jhc2U2NC5oOgorICAgICAg
ICAoV1RGOjpiYXNlNjRFbmNvZGVUb1ZlY3Rvcik6CisgICAgICAgIChXVEY6OmJhc2U2NEVuY29k
ZVRvU3RyaW5nKToKKyAgICAgICAgKiB3dGYvdGV4dC9DU3RyaW5nLmg6CisKIDIwMjEtMDYtMTEg
IFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRkIFdlYWtIYXNo
TWFwCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dURi93dGYvRmlsZVN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxOSw5ICszMTksOSBA
QCBib29sIGV4Y2x1ZGVGcm9tQmFja3VwKGNvbnN0IFN0cmluZyYpCiAKIE1hcHBlZEZpbGVEYXRh
Ojp+TWFwcGVkRmlsZURhdGEoKQogewotICAgIGlmICghbV9maWxlRGF0YSkKKyAgICBpZiAoIW1f
ZmlsZURhdGEuZGF0YSgpKQogICAgICAgICByZXR1cm47Ci0gICAgdW5tYXBWaWV3T2ZGaWxlKG1f
ZmlsZURhdGEsIG1fZmlsZVNpemUpOworICAgIHVubWFwVmlld09mRmlsZShtX2ZpbGVEYXRhKTsK
IH0KIAogTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKGNvbnN0IFN0cmluZyYgZmlsZVBh
dGgsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUsIGJvb2wmIHN1Y2Nlc3MpCkBAIC0zODMsMTQgKzM4
MywxMyBAQCBib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBtX2ZpbGVEYXRhID0gZGF0YTsKLSAgICBtX2Zp
bGVTaXplID0gc2l6ZTsKKyAgICBtX2ZpbGVEYXRhID0gU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8
c3RkOjpieXRlKj4oZGF0YSksIHNpemUgfTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCB1
bm1hcFZpZXdPZkZpbGUodm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK2Jvb2wgdW5tYXBWaWV3
T2ZGaWxlKFNwYW48c3RkOjpieXRlPiBkYXRhKQogewotICAgIHJldHVybiAhbXVubWFwKGJ1ZmZl
ciwgc2l6ZSk7CisgICAgcmV0dXJuICFtdW5tYXAoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsK
IH0KIAogI2VuZGlmCkBAIC00MzgsNyArNDM3LDcgQEAgU3RyaW5nIGNyZWF0ZVRlbXBvcmFyeVpp
cEFyY2hpdmUoY29uc3QgUwogfQogI2VuZGlmCiAKLU1hcHBlZEZpbGVEYXRhIG1hcFRvRmlsZShj
b25zdCBTdHJpbmcmIHBhdGgsIHNpemVfdCBieXRlc1NpemUsIEZ1bmN0aW9uPHZvaWQoY29uc3Qg
RnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mKT4mJiBhcHBseSwgUGxhdGZv
cm1GaWxlSGFuZGxlKiBvdXRwdXRIYW5kbGUpCitNYXBwZWRGaWxlRGF0YSBtYXBUb0ZpbGUoY29u
c3QgU3RyaW5nJiBwYXRoLCBzaXplX3QgYnl0ZXNTaXplLCBGdW5jdGlvbjx2b2lkKGNvbnN0IEZ1
bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mKT4mJiBhcHBseSwgUGxhdGZvcm1G
aWxlSGFuZGxlKiBvdXRwdXRIYW5kbGUpCiB7CiAgICAgY29uc3RleHByIGJvb2wgZmFpbElmRmls
ZUV4aXN0cyA9IHRydWU7CiAgICAgYXV0byBoYW5kbGUgPSBGaWxlU3lzdGVtOjpvcGVuRmlsZShw
YXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWRXcml0ZSwgRmlsZVN5c3RlbTo6Rmls
ZUFjY2Vzc1Blcm1pc3Npb246OlVzZXIsIGZhaWxJZkZpbGVFeGlzdHMpOwpAQCAtNDU1LDEyICs0
NTQsMTIgQEAgTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcAogICAgICAg
ICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIHZvaWQqIG1hcCA9IGNvbnN0X2Nhc3Q8dm9pZCo+
KG1hcHBlZEZpbGUuZGF0YSgpKTsKLSAgICB1aW50OF90KiBtYXBEYXRhID0gc3RhdGljX2Nhc3Q8
dWludDhfdCo+KG1hcCk7CisgICAgYXV0byBtYXAgPSBtYXBwZWRGaWxlLmRhdGEoKS5kYXRhKCk7
CisgICAgYXV0byBtYXBEYXRhID0gbWFwOwogCi0gICAgYXBwbHkoWyZtYXBEYXRhXShjb25zdCB1
aW50OF90KiBjaHVuaywgc2l6ZV90IGNodW5rU2l6ZSkgewotICAgICAgICBtZW1jcHkobWFwRGF0
YSwgY2h1bmssIGNodW5rU2l6ZSk7Ci0gICAgICAgIG1hcERhdGEgKz0gY2h1bmtTaXplOworICAg
IGFwcGx5KFsmbWFwRGF0YV0oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGNodW5rKSB7CisgICAgICAg
IG1lbWNweShtYXBEYXRhLCBjaHVuay5kYXRhKCksIGNodW5rLnNpemUoKSk7CisgICAgICAgIG1h
cERhdGEgKz0gY2h1bmsuc2l6ZSgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9KTsKIApJ
bmRleDogU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0ZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYv
RmlsZVN5c3RlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8
dXRpbGl0eT4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25T
ZXQuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNp
bmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
QEAgLTIxMCw3ICsyMTEsNyBAQCBXVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHJlYWxQYXRoKGNv
bnN0CiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc1NhZmVUb1VzZU1lbW9yeU1hcEZvclBhdGgo
Y29uc3QgU3RyaW5nJik7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBtYWtlU2FmZVRvVXNlTWVt
b3J5TWFwRm9yUGF0aChjb25zdCBTdHJpbmcmKTsKIAotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wg
dW5tYXBWaWV3T2ZGaWxlKHZvaWQqIGJ1ZmZlciwgc2l6ZV90KTsKK1dURl9FWFBPUlRfUFJJVkFU
RSBib29sIHVubWFwVmlld09mRmlsZShTcGFuPHN0ZDo6Ynl0ZT4pOwogCiBjbGFzcyBNYXBwZWRG
aWxlRGF0YSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC0yMjMsMTcgKzIyNCwx
NSBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5NYXBwZWRGaWxlRGF0YSgpOwog
ICAgIE1hcHBlZEZpbGVEYXRhJiBvcGVyYXRvcj0oTWFwcGVkRmlsZURhdGEmJik7CiAKLSAgICBl
eHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2ZpbGVEYXRhOyB9Ci0g
ICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZURhdGE7IH0KLSAgICB1
bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9maWxlU2l6ZTsgfQorICAgIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fZmlsZURhdGEuZGF0YSgpOyB9Cisg
ICAgU3BhbjxzdGQ6OmJ5dGU+IGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVEYXRhOyB9CiAK
LSAgICB2b2lkKiBsZWFrSGFuZGxlKCkgeyByZXR1cm4gc3RkOjpleGNoYW5nZShtX2ZpbGVEYXRh
LCBudWxscHRyKTsgfQorICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBTcGFuPHN0ZDo6Ynl0ZT4gbGVh
a0hhbmRsZSgpIHsgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9maWxlRGF0YSwgeyB9KTsgfQogCiBw
cml2YXRlOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIG1hcEZpbGVIYW5kbGUoUGxhdGZv
cm1GaWxlSGFuZGxlLCBGaWxlT3Blbk1vZGUsIE1hcHBlZEZpbGVNb2RlKTsKIAotICAgIHZvaWQq
IG1fZmlsZURhdGEgeyBudWxscHRyIH07Ci0gICAgdW5zaWduZWQgbV9maWxlU2l6ZSB7IDAgfTsK
KyAgICBTcGFuPHN0ZDo6Ynl0ZT4gbV9maWxlRGF0YTsKIH07CiAKIGlubGluZSBNYXBwZWRGaWxl
RGF0YTo6TWFwcGVkRmlsZURhdGEoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgTWFwcGVkRmls
ZU1vZGUgbWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKQEAgLTI0NywyMSArMjQ2LDE5IEBAIGlubGlu
ZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGwKIH0KIAogaW5saW5lIE1hcHBlZEZp
bGVEYXRhOjpNYXBwZWRGaWxlRGF0YShNYXBwZWRGaWxlRGF0YSYmIG90aGVyKQotICAgIDogbV9m
aWxlRGF0YShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEsIG51bGxwdHIpKQotICAgICwg
bV9maWxlU2l6ZShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZVNpemUsIDApKQorICAgIDogbV9m
aWxlRGF0YShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEsIHsgfSkpCiB7CiB9CiAKIGlu
bGluZSBNYXBwZWRGaWxlRGF0YSYgTWFwcGVkRmlsZURhdGE6Om9wZXJhdG9yPShNYXBwZWRGaWxl
RGF0YSYmIG90aGVyKQogewotICAgIG1fZmlsZURhdGEgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1f
ZmlsZURhdGEsIG51bGxwdHIpOwotICAgIG1fZmlsZVNpemUgPSBzdGQ6OmV4Y2hhbmdlKG90aGVy
Lm1fZmlsZVNpemUsIDApOworICAgIG1fZmlsZURhdGEgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1f
ZmlsZURhdGEsIHsgfSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCiAvLyBUaGlzIGNyZWF0ZXMg
dGhlIGRlc3RpbmF0aW9uIGZpbGUsIG1hcHMgaXQsIHdyaXRlIHRoZSBwcm92aWRlZCBkYXRhIHRv
IGl0IGFuZCByZXR1cm5zIHRoZSBtYXBwZWQgZmlsZS4KIC8vIFRoaXMgZnVuY3Rpb24gZmFpbHMg
aWYgdGhlcmUgaXMgYWxyZWFkeSBhIGZpbGUgYXQgdGhlIGRlc3RpbmF0aW9uIHBhdGguCi1XVEZf
RVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0
aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVuY3Rpb248dm9pZChjb25zdCBGdW5jdGlvbjxib29sKGNv
bnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYpPiYmIGFwcGx5LCBQbGF0Zm9ybUZpbGVIYW5kbGUqID0g
bnVsbHB0cik7CitXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxlKGNv
bnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVuY3Rpb248dm9pZChjb25zdCBG
dW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+Jik+JiYgYXBwbHksIFBsYXRmb3Jt
RmlsZUhhbmRsZSogPSBudWxscHRyKTsKIAogfSAvLyBuYW1lc3BhY2UgRmlsZVN5c3RlbUltcGwK
IH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93dGYvU0hBMS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvU0hBMS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XVEYvd3RmL1NIQTEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMCArNDYsMTAgQEAg
U0hBMTo6U0hBMSgpCiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiB9CiAK
LXZvaWQgU0hBMTo6YWRkQnl0ZXMoY29uc3QgdWludDhfdCogaW5wdXQsIHNpemVfdCBsZW5ndGgp
Cit2b2lkIFNIQTE6OmFkZEJ5dGVzKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCkKIHsKICAg
ICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgIENDX1NIQTFfVXBkYXRl
KCZtX2NvbnRleHQsIGlucHV0LCBsZW5ndGgpOworICAgIENDX1NIQTFfVXBkYXRlKCZtX2NvbnRl
eHQsIGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpKTsKICAgICBBTExPV19ERVBSRUNBVEVEX0RF
Q0xBUkFUSU9OU19FTkQKIH0KIApAQCAtMTAxLDExICsxMDEsMTEgQEAgU0hBMTo6U0hBMSgpCiAg
ICAgcmVzZXQoKTsKIH0KIAotdm9pZCBTSEExOjphZGRCeXRlcyhjb25zdCB1aW50OF90KiBpbnB1
dCwgc2l6ZV90IGxlbmd0aCkKK3ZvaWQgU0hBMTo6YWRkQnl0ZXMoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGlucHV0KQogewotICAgIHdoaWxlIChsZW5ndGgtLSkgeworICAgIGZvciAoYXV0byBieXRl
IDogaW5wdXQpIHsKICAgICAgICAgQVNTRVJUKG1fY3Vyc29yIDwgNjQpOwotICAgICAgICBtX2J1
ZmZlclttX2N1cnNvcisrXSA9ICppbnB1dCsrOworICAgICAgICBtX2J1ZmZlclttX2N1cnNvcisr
XSA9IHN0ZDo6dG9faW50ZWdlcjx1aW50OF90PihieXRlKTsKICAgICAgICAgKyttX3RvdGFsQnl0
ZXM7CiAgICAgICAgIGlmIChtX2N1cnNvciA9PSA2NCkKICAgICAgICAgICAgIHByb2Nlc3NCbG9j
aygpOwpJbmRleDogU291cmNlL1dURi93dGYvU0hBMS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL1NIQTEuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvU0hBMS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgPGFycmF5PgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAtNDUsMTUgKzQ2LDEzIEBAIGNs
YXNzIFNIQTEgewogcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBTSEExKCk7CiAKLSAg
ICB2b2lkIGFkZEJ5dGVzKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQpCisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgYWRkQnl0ZXMoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkZEJ5dGVzKFQmJiBkYXRhKQogICAgIHsKLSAgICAg
ICAgYWRkQnl0ZXMoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkpOworICAgICAgICByZXR1cm4g
YWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pKTsKICAgICB9
Ci0gICAgdm9pZCBhZGRCeXRlcyhjb25zdCBDU3RyaW5nJiBpbnB1dCkKLSAgICB7Ci0gICAgICAg
IGFkZEJ5dGVzKGlucHV0LmRhdGFBc1VJbnQ4UHRyKCksIGlucHV0Lmxlbmd0aCgpKTsKLSAgICB9
Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkQnl0ZXMoY29uc3QgdWludDhfdCogaW5w
dXQsIHNpemVfdCBsZW5ndGgpOworCisgICAgdm9pZCBhZGRCeXRlcyhjb25zdCBDU3RyaW5nJiBp
bnB1dCkgeyBhZGRCeXRlcyhpbnB1dC5ieXRlcygpKTsgfQogCiAgICAgLy8gU2l6ZSBvZiB0aGUg
U0hBMSBoYXNoCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90
IGhhc2hTaXplID0gMjA7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dURi93dGYvVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxMyw2ICs2MTMsNyBAQCBwcml2
YXRlOgogCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBUIFZhbHVlVHlwZTsKKyAgICB0eXBlZGVmIFQg
dmFsdWVfdHlwZTsKIAogICAgIHR5cGVkZWYgVCogaXRlcmF0b3I7CiAgICAgdHlwZWRlZiBjb25z
dCBUKiBjb25zdF9pdGVyYXRvcjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1Bl
cnNpc3RlbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3Rl
bmNlL1BlcnNpc3RlbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RG
L3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTcsNyArNTcsNyBAQCB2b2lkIENvZGVyPENTdHJpbmc+OjplbmNvZGUoRW5jb2RlciYgZW5jCiAK
ICAgICB1aW50MzJfdCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAgZW5jb2RlciA8PCBs
ZW5ndGg7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RyaW5nLmRhdGFBc1VJ
bnQ4UHRyKCksIGxlbmd0aCk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3Ry
aW5nLmJ5dGVzKCkpOwogfQogCiBzdGQ6Om9wdGlvbmFsPENTdHJpbmc+IENvZGVyPENTdHJpbmc+
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKQEAgLTc4LDcgKzc4LDcgQEAgc3RkOjpvcHRpb25h
bDxDU3RyaW5nPiBDb2RlcjxDU3RyaW5nPjo6ZAogCiAgICAgY2hhciogYnVmZmVyOwogICAgIENT
dHJpbmcgc3RyaW5nID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZCgqbGVuZ3RoLCBidWZmZXIp
OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2Fz
dDx1aW50OF90Kj4oYnVmZmVyKSwgKmxlbmd0aCkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZp
eGVkTGVuZ3RoRGF0YShTcGFuIHsgcmVpbnRlcnByZXRfY2FzdDxzdGQ6OmJ5dGUqPihidWZmZXIp
LCAqbGVuZ3RoIH0pKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgcmV0dXJu
IHN0cmluZzsKQEAgLTk2LDExICs5Niw3IEBAIHZvaWQgQ29kZXI8U3RyaW5nPjo6ZW5jb2RlKEVu
Y29kZXImIGVuY28KICAgICBib29sIGlzOEJpdCA9IHN0cmluZy5pczhCaXQoKTsKIAogICAgIGVu
Y29kZXIgPDwgbGVuZ3RoIDw8IGlzOEJpdDsKLQotICAgIGlmIChpczhCaXQpCi0gICAgICAgIGVu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgp
OwotICAgIGVsc2UKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnMxNigpKSwgbGVuZ3Ro
ICogc2l6ZW9mKFVDaGFyKSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3Ry
aW5nLmJ5dGVzKCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KQEAg
LTExMiw3ICsxMDgsNyBAQCBzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBkZWNv
CiAKICAgICBDaGFyYWN0ZXJUeXBlKiBidWZmZXI7CiAgICAgU3RyaW5nIHN0cmluZyA9IFN0cmlu
Zzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIp
LCBsZW5ndGggKiBzaXplb2YoQ2hhcmFjdGVyVHlwZSkpKQorICAgIGlmICghZGVjb2Rlci5kZWNv
ZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpieXRlKj4oYnVm
ZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJhY3RlclR5cGUpIH0pKQogICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwogICAgIAogICAgIHJldHVybiBzdHJpbmc7CkBAIC0xNDIsMTMgKzEzOCwx
MyBAQCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gQ29kZXI8U3RyaW5nPjo6ZGVjCiAKIHZvaWQgQ29k
ZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNIQTE6OkRp
Z2VzdCYgZGlnZXN0KQogewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGRpZ2Vz
dC5kYXRhKCksIHNpemVvZihkaWdlc3QpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3Ro
RGF0YShkaWdlc3QpOwogfQogCiBzdGQ6Om9wdGlvbmFsPFNIQTE6OkRpZ2VzdD4gQ29kZXI8U0hB
MTo6RGlnZXN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgU0hBMTo6RGlnZXN0
IHRtcDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHRtcC5kYXRhKCks
IHNpemVvZih0bXApKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHRt
cCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgcmV0dXJuIHRtcDsKIH0KSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmgJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRD
b2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw3IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlciwgY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQogICAg
IHsKICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odmVjdG9yLnNpemUo
KSk7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6ZSgpICogc2l6ZW9m
KFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEodmVjdG9yKTsKICAg
ICB9CiAgICAgCiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5Pj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCkBAIC0xNzMsNyArMTczLDcgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAgICAgICBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHk+IHRlbXA7CiAgICAgICAgIHRlbXAuZ3JvdyhzaXplKTsKIAotICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KHRlbXAuZGF0YSgpKSwgc2l6ZSAqIHNpemVvZihUKSkpCisgICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGVGaXhlZExlbmd0aERhdGEodGVtcCkpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwogCiAgICAgICAgIHJldHVybiB0ZW1wOwpJbmRleDogU291cmNlL1dURi93dGYvcGVy
c2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmNwcAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSwyMyArMzEsMjEgQEAKIG5hbWVzcGFjZSBXVEYgewogbmFtZXNwYWNl
IFBlcnNpc3RlbmNlIHsKIAotRGVjb2Rlcjo6RGVjb2Rlcihjb25zdCB1aW50OF90KiBidWZmZXIs
IHNpemVfdCBidWZmZXJTaXplKQotICAgIDogbV9idWZmZXIoYnVmZmVyKQotICAgICwgbV9idWZm
ZXJQb3NpdGlvbihidWZmZXIpCi0gICAgLCBtX2J1ZmZlckVuZChidWZmZXIgKyBidWZmZXJTaXpl
KQorRGVjb2Rlcjo6RGVjb2RlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnVmZmVyKQorICAgIDog
bV9idWZmZXIoYnVmZmVyLmRhdGEoKSkKKyAgICAsIG1fYnVmZmVyUG9zaXRpb24oYnVmZmVyLmRh
dGEoKSkKKyAgICAsIG1fYnVmZmVyRW5kKGJ1ZmZlci5kYXRhKCkgKyBidWZmZXIuc2l6ZSgpKQog
ewogfQogCi1EZWNvZGVyOjp+RGVjb2RlcigpCi17Ci19CitEZWNvZGVyOjp+RGVjb2RlcigpID0g
ZGVmYXVsdDsKIAogYm9vbCBEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKHNp
emVfdCBzaXplKSBjb25zdAogewogICAgIHJldHVybiBzaXplIDw9IHN0YXRpY19jYXN0PHNpemVf
dD4obV9idWZmZXJFbmQgLSBtX2J1ZmZlclBvc2l0aW9uKTsKIH0KIAotY29uc3QgdWludDhfdCog
RGVjb2Rlcjo6YnVmZmVyUG9pbnRlckZvckRpcmVjdFJlYWQoc2l6ZV90IHNpemUpCitjb25zdCBz
dGQ6OmJ5dGUqIERlY29kZXI6OmJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFkKHNpemVfdCBzaXpl
KQogewogICAgIGlmICghYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihzaXplKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CkBAIC01NSwxNiArNTMsMTYgQEAgY29uc3QgdWludDhfdCogRGVj
b2Rlcjo6YnVmZmVyUG9pbnRlckZvcgogICAgIGF1dG8gZGF0YSA9IG1fYnVmZmVyUG9zaXRpb247
CiAgICAgbV9idWZmZXJQb3NpdGlvbiArPSBzaXplOwogCi0gICAgRW5jb2Rlcjo6dXBkYXRlQ2hl
Y2tzdW1Gb3JEYXRhKG1fc2hhMSwgZGF0YSwgc2l6ZSk7CisgICAgRW5jb2Rlcjo6dXBkYXRlQ2hl
Y2tzdW1Gb3JEYXRhKG1fc2hhMSwgU3BhbiB7IGRhdGEsIHNpemUgfSk7CiAgICAgcmV0dXJuIGRh
dGE7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqIGRh
dGEsIHNpemVfdCBzaXplKQorYm9vbCBEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEoU3Bh
bjxzdGQ6OmJ5dGU+IGRhdGEpCiB7Ci0gICAgYXV0byBidWZmZXIgPSBidWZmZXJQb2ludGVyRm9y
RGlyZWN0UmVhZChzaXplKTsKKyAgICBhdXRvIGJ1ZmZlciA9IGJ1ZmZlclBvaW50ZXJGb3JEaXJl
Y3RSZWFkKGRhdGEuc2l6ZSgpKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIG1lbWNweShkYXRhLCBidWZmZXIsIHNpemUpOworICAgIG1lbWNweShkYXRhLmRh
dGEoKSwgYnVmZmVyLCBkYXRhLnNpemUoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEz
OSw3ICsxMzcsNyBAQCBib29sIERlY29kZXI6OnZlcmlmeUNoZWNrc3VtKCkKICAgICBtX3NoYTEu
Y29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2VzdCBzYXZlZEhhc2g7
Ci0gICAgaWYgKCFkZWNvZGVGaXhlZExlbmd0aERhdGEoc2F2ZWRIYXNoLmRhdGEoKSwgc2l6ZW9m
KHNhdmVkSGFzaCkpKQorICAgIGlmICghZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHNhdmVkSGFzaCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBjb21wdXRlZEhhc2ggPT0gc2F2
ZWRIYXNoOwpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29k
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50
RGVjb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5j
ZS9QZXJzaXN0ZW50RGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAK
ICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9TSEExLmg+CisjaW5j
bHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENv
ZGVyLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMzUsNyArMzYsMTIgQEAgbmFtZXNwYWNlIFBl
cnNpc3RlbmNlIHsKIGNsYXNzIERlY29kZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgotICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyKGNvbnN0IHVpbnQ4X3Qq
IGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IERl
Y29kZXIoVCYmIGRhdGEpCisgICAgICAgIDogRGVjb2RlciB7IGFzQnl0ZXMoU3BhbiB7IHN0ZDo6
Zm9yd2FyZDxUPihkYXRhKSB9KSB9CisgICAgeworICAgIH0KKworICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBEZWNvZGVyKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgV1RGX0VYUE9SVF9QUklW
QVRFIH5EZWNvZGVyKCk7CiAKICAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9i
dWZmZXJFbmQgLSBtX2J1ZmZlcjsgfQpAQCAtNDMsNyArNDksMTEgQEAgcHVibGljOgogCiAgICAg
V1RGX0VYUE9SVF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIHZlcmlmeUNoZWNrc3Vt
KCk7CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqLCBzaXplX3QpOworICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVGaXhlZExlbmd0aERhdGEoU3Bhbjxz
dGQ6OmJ5dGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIGRlY29kZUZpeGVkTGVu
Z3RoRGF0YShUJiYgZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVGaXhlZExlbmd0
aERhdGEoYXNXcml0YWJsZUJ5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSkpOwor
ICAgIH0KIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVyYXRvcj4+KHN0ZDo6
b3B0aW9uYWw8Ym9vbD4mKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVjb2RlciYgb3BlcmF0
b3I+PihzdGQ6Om9wdGlvbmFsPHVpbnQ4X3Q+Jik7CkBAIC04NCw3ICs5NCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIG51bUVsZW1lbnRzIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90
Pjo6bWF4KCkgLyBzaXplb2YoVCkgJiYgYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihudW1F
bGVtZW50cyAqIHNpemVvZihUKSk7CiAgICAgfQogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIFdB
Uk5fVU5VU0VEX1JFVFVSTiBjb25zdCB1aW50OF90KiBidWZmZXJQb2ludGVyRm9yRGlyZWN0UmVh
ZChzaXplX3QgbnVtQnl0ZXMpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBXQVJOX1VOVVNFRF9S
RVRVUk4gY29uc3Qgc3RkOjpieXRlKiBidWZmZXJQb2ludGVyRm9yRGlyZWN0UmVhZChzaXplX3Qg
bnVtQnl0ZXMpOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSVBDRGVjb2RlciA9IGZh
bHNlOwogCkBAIC05Miw5ICsxMDIsOSBAQCBwcml2YXRlOgogICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKHNp
emVfdCkgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4gRGVjb2RlciYgZGVjb2Rl
TnVtYmVyKHN0ZDo6b3B0aW9uYWw8VHlwZT4mKTsKIAotICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVm
ZmVyOwotICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyUG9zaXRpb247Ci0gICAgY29uc3QgdWlu
dDhfdCogbV9idWZmZXJFbmQ7CisgICAgY29uc3Qgc3RkOjpieXRlKiBtX2J1ZmZlcjsKKyAgICBj
b25zdCBzdGQ6OmJ5dGUqIG1fYnVmZmVyUG9zaXRpb247CisgICAgY29uc3Qgc3RkOjpieXRlKiBt
X2J1ZmZlckVuZDsKIAogICAgIFNIQTEgbV9zaGExOwogfTsKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5jcHAJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzEsMzQgKzMxLDM0IEBACiBuYW1lc3BhY2UgV1RGIHsKIG5hbWVz
cGFjZSBQZXJzaXN0ZW5jZSB7CiAKLUVuY29kZXI6OkVuY29kZXIoKQotewotfQotCi1FbmNvZGVy
Ojp+RW5jb2RlcigpCi17Ci19CitFbmNvZGVyOjpFbmNvZGVyKCkgPSBkZWZhdWx0OworRW5jb2Rl
cjo6fkVuY29kZXIoKSA9IGRlZmF1bHQ7CiAKLXVpbnQ4X3QqIEVuY29kZXI6Omdyb3coc2l6ZV90
IHNpemUpCitzdGQ6OmJ5dGUqIEVuY29kZXI6Omdyb3coc2l6ZV90IHNpemUpCiB7CiAgICAgc2l6
ZV90IG5ld1Bvc2l0aW9uID0gbV9idWZmZXIuc2l6ZSgpOwogICAgIG1fYnVmZmVyLmdyb3cobV9i
dWZmZXIuc2l6ZSgpICsgc2l6ZSk7CiAgICAgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKSArIG5ld1Bv
c2l0aW9uOwogfQogCi12b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yRGF0YShTSEExJiBz
aGExLCBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3ZvaWQgRW5jb2Rlcjo6dXBk
YXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmIHNoYTEsIFNwYW48Y29uc3QgdWludDhfdD4gZGF0YSkK
K3sKKyAgICByZXR1cm4gdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKHNoYTEsIGFzQnl0ZXMoZGF0YSkp
OworfQorCit2b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yRGF0YShTSEExJiBzaGExLCBT
cGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKICAgICBhdXRvIHR5cGVTYWx0ID0gU2FsdDx1
aW50OF90Kj46OnZhbHVlOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7Ci0gICAgc2hhMS5hZGRCeXRlcyhk
YXRhLCBzaXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmdHlwZVNhbHQsIDEgfSk7Cisg
ICAgc2hhMS5hZGRCeXRlcyhkYXRhKTsKIH0KIAotdm9pZCBFbmNvZGVyOjplbmNvZGVGaXhlZExl
bmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCit2b2lkIEVuY29kZXI6
OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKLSAg
ICB1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhLCBzaXplKTsKKyAgICB1cGRhdGVD
aGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhKTsKIAotICAgIHVpbnQ4X3QqIGJ1ZmZlciA9IGdy
b3coc2l6ZSk7Ci0gICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7CisgICAgYXV0byogYnVm
ZmVyID0gZ3JvdyhkYXRhLnNpemUoKSk7CisgICAgbWVtY3B5KGJ1ZmZlciwgZGF0YS5kYXRhKCks
IGRhdGEuc2l6ZSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KQEAgLTY2LDcgKzY2
LDcgQEAgRW5jb2RlciYgRW5jb2Rlcjo6ZW5jb2RlTnVtYmVyKFR5cGUgdmFsdQogewogICAgIEVu
Y29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKG1fc2hhMSwgdmFsdWUpOwogCi0gICAgdWlu
dDhfdCogYnVmZmVyID0gZ3JvdyhzaXplb2YoVHlwZSkpOworICAgIGF1dG8qIGJ1ZmZlciA9IGdy
b3coc2l6ZW9mKFR5cGUpKTsKICAgICBtZW1jcHkoYnVmZmVyLCAmdmFsdWUsIHNpemVvZihUeXBl
KSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQpAQCAtMTI1LDcgKzEyNSw3IEBAIHZvaWQgRW5jb2Rl
cjo6ZW5jb2RlQ2hlY2tzdW0oKQogewogICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwogICAgIG1fc2hh
MS5jb21wdXRlSGFzaChoYXNoKTsKLSAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEoaGFzaC5kYXRh
KCksIGhhc2guc2l6ZSgpKTsKKyAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEoaGFzaCk7CiB9CiAK
IH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29k
ZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVy
c2lzdGVudEVuY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5j
bHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvU0hBMS5oPgorI2luY2x1ZGUg
PHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9wZXJz
aXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaD4KIApAQCAtNDMsNyArNDQsMTEgQEAgcHVibGljOgog
ICAgIFdURl9FWFBPUlRfUFJJVkFURSB+RW5jb2RlcigpOwogCiAgICAgV1RGX0VYUE9SVF9QUklW
QVRFIHZvaWQgZW5jb2RlQ2hlY2tzdW0oKTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBl
bmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCosIHNpemVfdCk7CisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48Y29uc3Qgc3RkOjpi
eXRlPik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBlbmNvZGVGaXhlZExlbmd0aERh
dGEoVCYmIGRhdGEpCisgICAgeworICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEoYXNCeXRl
cyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pKTsKKyAgICB9CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZW51bTxUPjo6dmFsdWU+KiA9
IG51bGxwdHI+CiAgICAgRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBUJiB0KQpAQCAtNzAsMjMg
Kzc1LDIyIEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRW5jb2RlciYgb3BlcmF0
b3I8PChmbG9hdCk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwo
ZG91YmxlKTsKIAotICAgIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1f
YnVmZmVyLmRhdGEoKTsgfQotICAgIHNpemVfdCBidWZmZXJTaXplKCkgY29uc3QgeyByZXR1cm4g
bV9idWZmZXIuc2l6ZSgpOyB9Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQg
dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKKyAg
ICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXI7
IH0KKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tz
dW1Gb3JEYXRhKFNIQTEmLCBTcGFuPGNvbnN0IHVpbnQ4X3Q+KTsKKyAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBTcGFuPGNvbnN0
IHN0ZDo6Ynl0ZT4pOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPiBzdGF0aWMgdm9pZCB1
cGRhdGVDaGVja3N1bUZvck51bWJlcihTSEExJiwgVHlwZSk7CiAKICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNJUENFbmNvZGVyID0gZmFsc2U7CiAKIHByaXZhdGU6Ci0KICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUeXBlPiBFbmNvZGVyJiBlbmNvZGVOdW1iZXIoVHlwZSk7CiAKLSAgICB1aW50
OF90KiBncm93KHNpemVfdCk7CisgICAgc3RkOjpieXRlKiBncm93KHNpemVfdCk7CiAKICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4gc3RydWN0IFNhbHQ7CiAKLSAgICBWZWN0b3I8dWludDhf
dCwgNDA5Nj4gbV9idWZmZXI7CisgICAgVmVjdG9yPHN0ZDo6Ynl0ZSwgNDA5Nj4gbV9idWZmZXI7
CiAgICAgU0hBMSBtX3NoYTE7CiB9OwogCkBAIC0xMDYsOCArMTEwLDggQEAgdGVtcGxhdGUgPHR5
cGVuYW1lIFR5cGU+CiB2b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKFNIQTEm
IHNoYTEsIFR5cGUgdmFsdWUpCiB7CiAgICAgYXV0byB0eXBlU2FsdCA9IFNhbHQ8VHlwZT46OnZh
bHVlOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnR5cGVT
YWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7Ci0gICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9j
YXN0PHVpbnQ4X3QqPigmdmFsdWUpLCBzaXplb2YodmFsdWUpKTsKKyAgICBzaGExLmFkZEJ5dGVz
KFNwYW4geyAmdHlwZVNhbHQsIDEgfSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgJnZhbHVl
LCAxIH0pOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0MCwzOSArMTQwLDM5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRp
YyAKICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSAnPSc7CiB9CiAKLXN0
YXRpYyBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoY29uc3QgdWludDhfdCog
aW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5
IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4gYmFz
ZTY0RW5jb2RlSW50ZXJuYWwoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0LCBCYXNlNjRFbmNv
ZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewotICAgIGF1dG8gZGVzdGlu
YXRpb25MZW5ndGggPSBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShpbnB1dExlbmd0aCwgcG9s
aWN5KTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uTGVuZ3RoID0gY2FsY3VsYXRlQmFzZTY0RW5jb2Rl
ZFNpemUoaW5wdXQuc2l6ZSgpLCBwb2xpY3kpOwogICAgIGlmICghZGVzdGluYXRpb25MZW5ndGgp
CiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBWZWN0b3I8dWludDhfdD4gZGVzdGluYXRpb25W
ZWN0b3IoZGVzdGluYXRpb25MZW5ndGgpOwotICAgIGJhc2U2NEVuY29kZUludGVybmFsKGlucHV0
RGF0YUJ1ZmZlciwgaW5wdXRMZW5ndGgsIGRlc3RpbmF0aW9uVmVjdG9yLmRhdGEoKSwgZGVzdGlu
YXRpb25MZW5ndGgsIHBvbGljeSwgbWFwKTsKKyAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChyZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCks
IGRlc3RpbmF0aW9uVmVjdG9yLmRhdGEoKSwgZGVzdGluYXRpb25MZW5ndGgsIHBvbGljeSwgbWFw
KTsKICAgICByZXR1cm4gZGVzdGluYXRpb25WZWN0b3I7CiB9CiAKLXZvaWQgYmFzZTY0RW5jb2Rl
KGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIFVDaGFy
KiBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uTGVuZ3RoLCBCYXNl
NjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordm9pZCBiYXNlNjRF
bmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0LCBVQ2hhciogZGVzdGluYXRpb25EYXRh
QnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkxlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBv
bGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKICAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3Ro
KQogICAgICAgICByZXR1cm47Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8
Y29uc3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlv
bkRhdGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7CisgICAgYmFzZTY0
RW5jb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0
YSgpKSwgaW5wdXQuc2l6ZSgpLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVu
Z3RoLCBwb2xpY3ksIG1hcCk7CiB9CiAKLXZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqIGlu
cHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIExDaGFyKiBkZXN0aW5hdGlvbkRh
dGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uTGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kg
cG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordm9pZCBiYXNlNjRFbmNvZGUoU3Bhbjxjb25z
dCBzdGQ6OmJ5dGU+IGlucHV0LCBMQ2hhciogZGVzdGluYXRpb25EYXRhQnVmZmVyLCB1bnNpZ25l
ZCBkZXN0aW5hdGlvbkxlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5j
b2RlTWFwIG1hcCkKIHsKICAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQogICAgICAgICByZXR1
cm47Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+
KGlucHV0RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRl
c3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7CisgICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6
ZSgpLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1h
cCk7CiB9CiAKLVZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCB2b2lk
KiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xp
Y3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQorVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVu
Y29kZVRvVmVjdG9yKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9s
aWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5j
b2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZlciks
IGlucHV0TGVuZ3RoLCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZUludGVy
bmFsKGlucHV0LCBwb2xpY3ksIG1hcCk7CiB9CiAKLVN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmlu
Zyhjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNl
NjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQorU3RyaW5nIGJhc2U2
NEVuY29kZVRvU3RyaW5nKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwgQmFzZTY0RW5jb2Rl
UG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gbWFrZVN0
cmluZyhiYXNlNjRFbmNvZGVkKGlucHV0RGF0YUJ1ZmZlciwgaW5wdXRMZW5ndGgsIHBvbGljeSwg
bWFwKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChpbnB1dCwgcG9saWN5
LCBtYXApKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8
VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGVJbnRlcm5hbChjb25zdCBUKiBpbnB1dERhdGFC
dWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9u
cz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKQEAgLTI1NCw4NCArMjU0LDI3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBzdGQ6Om9wdGlvbmEKICAgICByZXR1cm4gZGVzdGlu
YXRpb247CiB9CiAKLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUo
Y29uc3QgU3RyaW5nJiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlv
bnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW5wdXQu
bGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGggfHwgaW5wdXQuaXM4Qml0KCkpCi0gICAgICAgIHJl
dHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG9w
dGlvbnMsIG1hcCk7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJh
Y3RlcnMxNigpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVj
dG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3RyaW5nVmlldyBpbnB1dCwgT3B0aW9uU2V0PEJh
c2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAg
dW5zaWduZWQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGggfHwgaW5w
dXQuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5j
aGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7Ci0gICAgcmV0dXJuIGJhc2U2NERl
Y29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7
Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9w
dGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgaWYgKGlucHV0LnNpemUoKSA+IHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuZGF0YSgpLCBp
bnB1dC5zaXplKCksIG9wdGlvbnMsIG1hcCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVp
bnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCwgT3B0aW9uU2V0
PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCitzdGQ6
Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKFNwYW48Y29uc3Qgc3RkOjpi
eXRlPiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2
NERlY29kZU1hcCBtYXApCiB7CiAgICAgaWYgKGlucHV0LnNpemUoKSA+IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAg
ICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpLCBvcHRpb25zLCBtYXApOwogfQogCi1z
dGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IHVpbnQ4X3Qq
IGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9w
dGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUlu
dGVybmFsKGRhdGEsIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKLX0KLQotc3RkOjpvcHRpb25hbDxW
ZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBs
ZW5ndGgsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRpb25zLCBCYXNlNjREZWNv
ZGVNYXAgbWFwKQotewotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJl
dF9jYXN0PGNvbnN0IExDaGFyKj4oZGF0YSksIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKLX0KLQot
c3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBTdHJp
bmcmIGlucHV0KQorc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShj
b25zdCBTdHJpbmcmIGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9u
cywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBpbnB1dC5s
ZW5ndGgoKTsKICAgICBpZiAoIWxlbmd0aCB8fCBpbnB1dC5pczhCaXQoKSkKLSAgICAgICAgcmV0
dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgeyB9
LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFs
KGlucHV0LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIHsgfSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwp
OworICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgo
KSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5h
bChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOwogfQogCi1zdGQ6
Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFN0cmluZ1ZpZXcgaW5w
dXQpCitzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKFN0cmluZ1Zp
ZXcgaW5wdXQsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRpb25zLCBCYXNlNjRE
ZWNvZGVNYXAgbWFwKQogewogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgpOwog
ICAgIGlmICghbGVuZ3RoIHx8IGlucHV0LmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gYmFzZTY0
RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERl
Y29kZU1hcDo6VVJMKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hh
cmFjdGVyczE2KCksIGxlbmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7Ci19Ci0KLXN0
ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBpbnB1dCkKLXsKLSAgICBpZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
ICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUo
KSwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVjdG9y
PHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCkKLXsK
LSAgICBpZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1h
eCgpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHJldHVybiBiYXNlNjREZWNv
ZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkp
LCBpbnB1dC5zaXplKCksIHsgfSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOwotfQotCi1zdGQ6Om9w
dGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGRh
dGEsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwo
ZGF0YSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKLX0KLQotc3RkOjpvcHRp
b25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBjaGFyKiBkYXRhLCB1
bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBsZW5ndGgsIHsgfSwgQmFzZTY0RGVj
b2RlTWFwOjpVUkwpOworICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQu
Y2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOworICAgIHJldHVybiBiYXNlNjRE
ZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXAp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvQmFz
ZTY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuaAkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuaAkod29ya2luZyBjb3B5
KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRl
IDx3dGYvT3B0aW9uU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCkBAIC01Niw1NCArNTcsMzUgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhpbXVt
QmFzZTY0TAogLy8gUmF0aGVyIHRoYW4gYmVpbmcgcGVyZmVjdGx5IHByZWNpc2UsIHRoaXMgaXMg
YSBiaXQgY29uc2VydmF0aXZlLgogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhpbXVtQmFz
ZTY0RW5jb2RlcklucHV0QnVmZmVyU2l6ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+
OjptYXgoKSAvIDc3ICogNzYgLyA0ICogMyAtIDI7CiAKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQsIFVDaGFyKiwgdW5zaWduZWQsIEJh
c2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJh
c2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci1XVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVkLCBMQ2hhciosIHVu
c2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5z
ZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOworV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPiwg
VUNoYXIqIGRlc3RpbmF0aW9uQnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkJ1ZmZlclNpemUs
IEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMs
IEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+LCBMQ2hhciog
ZGVzdGluYXRpb25CdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uQnVmZmVyU2l6ZSwgQmFzZTY0
RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0
RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKIAotV1RGX0VYUE9SVF9QUklW
QVRFIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCB2b2lkKiwgdW5z
aWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNl
cnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci1WZWN0
b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jiwg
QmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywg
QmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKLVZlY3Rvcjx1aW50
OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8Y2hhcj4mLCBCYXNlNjRFbmNv
ZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNv
ZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2
NEVuY29kZVRvVmVjdG9yKGNvbnN0IENTdHJpbmcmLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNl
NjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRF
bmNvZGVNYXA6OkRlZmF1bHQpOwotCi1XVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIGJhc2U2NEVu
Y29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgQmFzZTY0RW5jb2RlUG9saWN5ID0g
QmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFz
ZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKLVN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25z
dCBWZWN0b3I8dWludDhfdD4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xp
Y3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRl
ZmF1bHQpOwotU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3RvcjxjaGFyPiYs
IEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMs
IEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci1TdHJpbmcgYmFz
ZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgQ1N0cmluZyYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJh
c2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2
NEVuY29kZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgVmVjdG9yPHVpbnQ4X3Q+
IGJhc2U2NEVuY29kZVRvVmVjdG9yKFNwYW48Y29uc3Qgc3RkOjpieXRlPiwgQmFzZTY0RW5jb2Rl
UG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2Rl
TWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFZl
Y3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihUJiYsIEJhc2U2NEVuY29kZVBvbGlj
eSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9
IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CiAKK1dURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcg
YmFzZTY0RW5jb2RlVG9TdHJpbmcoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+LCBCYXNlNjRFbmNvZGVQ
b2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVN
YXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3Ry
aW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKFQmJiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0
RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5j
b2RlTWFwOjpEZWZhdWx0KTsKKworV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0aW9uYWw8VmVj
dG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+LCBPcHRpb25T
ZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERl
Y29kZU1hcDo6RGVmYXVsdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0
b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBTdHJpbmcmLCBPcHRpb25TZXQ8QmFzZTY0
RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6
RGVmYXVsdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGJhc2U2NERlY29kZShTdHJpbmdWaWV3LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9u
cz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7Ci1X
VEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERl
Y29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9u
cz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7Ci1X
VEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERl
Y29kZShjb25zdCBWZWN0b3I8Y2hhcj4mLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4g
PSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7Ci1XVEZf
RVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29k
ZShjb25zdCB1aW50OF90KiwgdW5zaWduZWQsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25z
PiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKLVdU
Rl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVj
b2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+
ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRlZmF1bHQpOwotCi1p
bmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1h
cCBtYXApCi17Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlucHV0LmRhdGEoKSwg
aW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7Ci19Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6
OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVt
b3ZlX3JlZmVyZW5jZV90PFQ+PiwgU3RyaW5nPiAmJiAhc3RkOjppc19zYW1lX3Y8c3RkOjpyZW1v
dmVfY29uc3RfdDxzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxUPj4sIFN0cmluZ1ZpZXc+PiogPSBu
dWxscHRyPgorc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShUJiYs
IE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFwID0g
QmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKIAotaW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNl
NjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBCYXNlNjRFbmNvZGVQ
b2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordGVtcGxhdGU8dHlwZW5hbWUgVD4g
VmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKFQmJiBpbnB1dCwgQmFzZTY0RW5j
b2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gYmFz
ZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSwgbWFw
KTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoYXNCeXRlcyhTcGFuIHsgc3RkOjpm
b3J3YXJkPFQ+KGlucHV0KSB9KSwgcG9saWN5LCBtYXApOwogfQogCi1pbmxpbmUgVmVjdG9yPHVp
bnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IENTdHJpbmcmIGlucHV0LCBCYXNlNjRF
bmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordGVtcGxhdGU8dHlwZW5h
bWUgVD4gU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKFQmJiBpbnB1dCwgQmFzZTY0RW5jb2Rl
UG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gYmFzZTY0
RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwgcG9saWN5LCBtYXAp
OworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhhc0J5dGVzKFNwYW4geyBzdGQ6OmZv
cndhcmQ8VD4oaW5wdXQpIH0pLCBwb2xpY3ksIG1hcCk7CiB9CiAKLWlubGluZSBTdHJpbmcgYmFz
ZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCwgQmFzZTY0RW5j
b2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZV92PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8
c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmc+ICYmICFzdGQ6OmlzX3NhbWVfdjxz
dGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+PiwgU3RyaW5nVmll
dz4+Kj4KK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoVCYmIGlu
cHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2Rl
TWFwIG1hcCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5wdXQuZGF0YSgp
LCBpbnB1dC5zaXplKCksIHBvbGljeSwgbWFwKTsKLX0KLQotaW5saW5lIFN0cmluZyBiYXNlNjRF
bmNvZGVUb1N0cmluZyhjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xp
Y3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQotewotICAgIHJldHVybiBiYXNlNjRFbmNv
ZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5LCBtYXApOwotfQot
Ci1pbmxpbmUgU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IENTdHJpbmcmIGlucHV0
LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQotewotICAg
IHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0Lmxlbmd0aCgp
LCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZShhc0J5dGVzKFNwYW4geyBz
dGQ6OmZvcndhcmQ8VD4oaW5wdXQpIH0pLCBvcHRpb25zLCBtYXApOwogfQogCiAKQEAgLTExMiw2
MSArOTQsNTcgQEAgaW5saW5lIFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdAogLy8g
VGhpcyBmb3JtYXQgdXNlcyAnLScgYW5kICdfJyBpbnN0ZWFkIG9mICcrJyBhbmQgJy8nIHJlc3Bl
Y3RpdmVseS4KIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVZlY3Rvcjx1aW50
OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihjb25zdCB2b2lkKiwgdW5zaWduZWQpOwotVmVj
dG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKGNvbnN0IFZlY3Rv
cjxjaGFyPiYpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKGNvbnN0
IENTdHJpbmcmKTsKK1ZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3RvcihTcGFu
PGNvbnN0IHN0ZDo6Ynl0ZT4pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVjdG9yPHVpbnQ4X3Q+
IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKFQmJik7CiAKLVN0cmluZyBiYXNlNjRVUkxFbmNvZGVU
b1N0cmluZyhjb25zdCB2b2lkKiwgdW5zaWduZWQpOwotU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRv
U3RyaW5nKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOwotU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRv
U3RyaW5nKGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3Ry
aW5nKGNvbnN0IENTdHJpbmcmKTsKK1N0cmluZyBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhTcGFu
PGNvbnN0IHN0ZDo6Ynl0ZT4pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGJhc2U2NFVS
TEVuY29kZVRvU3RyaW5nKFQmJik7CiAKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFs
PFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFN0cmluZyYpOwotV1RGX0VY
UE9SVF9QUklWQVRFIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNv
ZGUoU3RyaW5nVmlldyk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8
dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mKTsKLVdURl9F
WFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVj
b2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0aW9u
YWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgdWludDhfdCosIHVuc2ln
bmVkKTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4g
YmFzZTY0VVJMRGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCk7CitzdGQ6Om9wdGlvbmFsPFZl
Y3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7Citz
dGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFN0cmlu
ZyYpOworc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShTdHJp
bmdWaWV3KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNf
c2FtZV92PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBT
dHJpbmc+ICYmICFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3Zl
X3JlZmVyZW5jZV90PFQ+PiwgU3RyaW5nVmlldz4+KiA9IG51bGxwdHI+CitzdGQ6Om9wdGlvbmFs
PFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFQmJik7CiAKLWlubGluZSBWZWN0b3I8
dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3Qgdm9pZCogaW5wdXQsIHVuc2ln
bmVkIGxlbmd0aCkKK2lubGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0
b3IoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNv
ZGVUb1ZlY3RvcihpbnB1dCwgbGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0
RW5jb2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dCwg
QmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKIH0KIAotaW5s
aW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8
dWludDhfdD4mIGlucHV0KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVjdG9yPHVpbnQ4X3Q+IGJh
c2U2NFVSTEVuY29kZVRvVmVjdG9yKFQmJiBpbnB1dCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5j
b2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJhc2U2NEVuY29kZVBvbGlj
eTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRv
VmVjdG9yKHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCksIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBC
YXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0
VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCkKK2lubGluZSBTdHJp
bmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQog
ewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRhKCksIGlucHV0LnNp
emUoKSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKKyAg
ICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeTo6
VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBWZWN0b3I8dWludDhfdD4g
YmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgQ1N0cmluZyYgaW5wdXQpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoVCYmIGlucHV0KQogewot
ICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRhKCksIGlucHV0Lmxlbmd0
aCgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAg
IHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhzdGQ6OmZvcndhcmQ8VD4oaW5wdXQpLCBCYXNl
NjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQogCi1pbmxpbmUg
U3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqIGlucHV0LCB1bnNpZ25l
ZCBsZW5ndGgpCitpbmxpbmUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVS
TERlY29kZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2
NEVuY29kZVRvU3RyaW5nKGlucHV0LCBsZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBC
YXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZShpbnB1dCwgeyB9
LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBTdHJpbmcgYmFzZTY0VVJMRW5j
b2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKK2lubGluZSBzdGQ6Om9w
dGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFN0cmluZyYgaW5w
dXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LmRhdGEoKSwgaW5w
dXQuc2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwp
OworICAgIHJldHVybiBiYXNlNjREZWNvZGUoaW5wdXQsIHsgfSwgQmFzZTY0RGVjb2RlTWFwOjpV
UkwpOwogfQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IFZl
Y3RvcjxjaGFyPiYgaW5wdXQpCitpbmxpbmUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+
IGJhc2U2NFVSTERlY29kZShTdHJpbmdWaWV3IGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRF
bmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgQmFzZTY0RW5jb2RlUG9s
aWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKKyAgICByZXR1cm4gYmFzZTY0RGVjb2Rl
KGlucHV0LCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKIH0KIAotaW5saW5lIFN0cmluZyBi
YXNlNjRVUkxFbmNvZGVUb1N0cmluZyhjb25zdCBDU3RyaW5nJiBpbnB1dCkKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZV92PHN0ZDo6cmVtb3ZlX2Nv
bnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmc+ICYmICFzdGQ6OmlzX3Nh
bWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+PiwgU3Ry
aW5nVmlldz4+Kj4KK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNv
ZGUoVCYmIGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5k
YXRhKCksIGlucHV0Lmxlbmd0aCgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5j
b2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjRVUkxEZWNvZGUoYXNCeXRlcyhTcGFuIHsg
c3RkOjpmb3J3YXJkPFQ+KGlucHV0KSB9KSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IHN0YXRpYyBpbmxpbmUgYm9vbCBpc0Jhc2U2NE9yQmFzZTY0VVJMQ2hhcmFjdGVy
KENoYXJhY3RlclR5cGUgYykKQEAgLTIwOCw1NyArMTg2LDM2IEBAIGlubGluZSB1bnNpZ25lZCBj
YWxjdWxhdGVCYXNlNjRFbmNvZGVkU2kKIH0KIAogc3RydWN0IEJhc2U2NFNwZWNpZmljYXRpb24g
ewotICAgIGNvbnN0IHZvaWQqIGlucHV0RGF0YTsKLSAgICB1bnNpZ25lZCBpbnB1dExlbmd0aDsK
KyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXREYXRhOwogICAgIEJhc2U2NEVuY29kZVBv
bGljeSBwb2xpY3k7CiAgICAgQmFzZTY0RW5jb2RlTWFwIG1hcDsKIH07CiAKLWlubGluZSBCYXNl
NjRTcGVjaWZpY2F0aW9uIGJhc2U2NEVuY29kZWQoY29uc3Qgdm9pZCogaW5wdXREYXRhLCB1bnNp
Z25lZCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9IEJhc2U2NEVuY29k
ZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCBtYXAgPSBCYXNlNjRFbmNv
ZGVNYXA6OkRlZmF1bHQpCi17Ci0gICAgcmV0dXJuIHsgaW5wdXREYXRhLCBpbnB1dExlbmd0aCwg
cG9saWN5LCBtYXAgfTsKLX0KLQotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5j
b2RlZChjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9s
aWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcykKLXsKLSAgICByZXR1cm4g
YmFzZTY0RW5jb2RlZChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5KTsKLX0KLQot
aW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChjb25zdCBWZWN0b3I8Y2hh
cj4mIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5
OjpEb05vdEluc2VydExGcykKLXsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5kYXRh
KCksIGlucHV0LnNpemUoKSwgcG9saWN5KTsKLX0KLQotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRp
b24gYmFzZTY0RW5jb2RlZChjb25zdCBDU3RyaW5nJiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5
IHBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMpCi17Ci0gICAgcmV0
dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwgcG9saWN5KTsK
LX0KLQotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChjb25zdCB2
b2lkKiBpbnB1dERhdGEsIHVuc2lnbmVkIGlucHV0TGVuZ3RoKQoraW5saW5lIEJhc2U2NFNwZWNp
ZmljYXRpb24gYmFzZTY0RW5jb2RlZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQsIEJhc2U2
NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZz
LCBCYXNlNjRFbmNvZGVNYXAgbWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KQogewotICAg
IHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0RGF0YSwgaW5wdXRMZW5ndGgsIEJhc2U2NEVuY29k
ZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIHsgaW5wdXQs
IHBvbGljeSwgbWFwIH07CiB9CiAKLWlubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NFVS
TEVuY29kZWQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChUJiYgaW5wdXQsIEJhc2U2NEVu
Y29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBC
YXNlNjRFbmNvZGVNYXAgbWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KQogewotICAgIHJl
dHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRFbmNv
ZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjRF
bmNvZGVkKGFzQnl0ZXMoU3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCkgfSksIHBvbGljeSwg
bWFwKTsKIH0KIAotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChj
b25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0KQoraW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFz
ZTY0VVJMRW5jb2RlZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCiB7Ci0gICAgcmV0dXJu
IGJhc2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29k
ZWQoaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7
CiB9CiAKLWlubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NFVSTEVuY29kZWQoY29uc3Qg
Q1N0cmluZyYgaW5wdXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBCYXNlNjRTcGVjaWZpY2F0aW9u
IGJhc2U2NFVSTEVuY29kZWQoVCYmIGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVk
KGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBC
YXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoYXNCeXRlcyhT
cGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGlucHV0KSB9KSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkws
IEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKIH0KIAogdGVtcGxhdGU8PiBjbGFzcyBTdHJpbmdUeXBl
QWRhcHRlcjxCYXNlNjRTcGVjaWZpY2F0aW9uPiB7CiBwdWJsaWM6CiAgICAgU3RyaW5nVHlwZUFk
YXB0ZXIoY29uc3QgQmFzZTY0U3BlY2lmaWNhdGlvbiYgYmFzZTY0KQogICAgICAgICA6IG1fYmFz
ZTY0IHsgYmFzZTY0IH0KLSAgICAgICAgLCBtX2VuY29kZWRMZW5ndGggeyBjYWxjdWxhdGVCYXNl
NjRFbmNvZGVkU2l6ZShiYXNlNjQuaW5wdXRMZW5ndGgsIGJhc2U2NC5wb2xpY3kpIH0KKyAgICAg
ICAgLCBtX2VuY29kZWRMZW5ndGggeyBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShiYXNlNjQu
aW5wdXREYXRhLnNpemUoKSwgYmFzZTY0LnBvbGljeSkgfQogICAgIHsKICAgICB9CiAKQEAgLTI2
Nyw3ICsyMjQsNyBAQCBwdWJsaWM6CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPiB2b2lkIHdyaXRlVG8oQ2hhcmFjdGVyVHlwZSogZGVzdGluYXRpb24pIGNvbnN0CiAgICAg
ewotICAgICAgICBiYXNlNjRFbmNvZGUobV9iYXNlNjQuaW5wdXREYXRhLCBtX2Jhc2U2NC5pbnB1
dExlbmd0aCwgZGVzdGluYXRpb24sIG1fZW5jb2RlZExlbmd0aCwgbV9iYXNlNjQucG9saWN5LCBt
X2Jhc2U2NC5tYXApOworICAgICAgICBiYXNlNjRFbmNvZGUobV9iYXNlNjQuaW5wdXREYXRhLCBk
ZXN0aW5hdGlvbiwgbV9lbmNvZGVkTGVuZ3RoLCBtX2Jhc2U2NC5wb2xpY3ksIG1fYmFzZTY0Lm1h
cCk7CiAgICAgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9DU3RyaW5n
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9DU3RyaW5nLmgJKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KICNpbmNsdWRl
IDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
U3Bhbi5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtMzksOSArNDAsMTEgQEAgREVDTEFSRV9B
TExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoQwogY2xhc3MgQ1N0cmluZ0J1ZmZlciBmaW5h
bCA6IHB1YmxpYyBSZWZDb3VudGVkPENTdHJpbmdCdWZmZXI+IHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihDU3RyaW5nQnVmZmVyKTsKIHB1YmxpYzoK
LSAgICBjb25zdCBjaGFyKiBkYXRhKCkgeyByZXR1cm4gbXV0YWJsZURhdGEoKTsgfQorICAgIGNv
bnN0IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PENTdHJpbmdCdWZmZXIq
Pih0aGlzKS0+bXV0YWJsZURhdGEoKTsgfQogICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJl
dHVybiBtX2xlbmd0aDsgfQogCisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGJ5dGVzKCkgY29u
c3QgeyByZXR1cm4gYXNCeXRlcyhTcGFuIHsgZGF0YSgpLCBsZW5ndGgoKSB9KTsgfQorCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDU3RyaW5nOwogCkBAIC02Niw2ICs2OSwyMCBAQCBwdWJs
aWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBDU3RyaW5nIG5ld1VuaW5pdGlhbGl6
ZWQoc2l6ZV90IGxlbmd0aCwgY2hhciomIGNoYXJhY3RlckJ1ZmZlcik7CiAgICAgQ1N0cmluZyhI
YXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IG1fYnVmZmVyKEhhc2hUYWJsZURlbGV0ZWRWYWx1
ZSkgeyB9CiAKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKG1fYnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIG1fYnVmZmVyLT5ieXRl
cygpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFNwYW48c3RkOjpieXRlPiBt
dXRhYmxlQnl0ZXMoKQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8gbXV0YWJsZURhdGEgPSB0aGlz
LT5tdXRhYmxlRGF0YSgpKQorICAgICAgICAgICAgcmV0dXJuIGFzV3JpdGFibGVCeXRlcyhTcGFu
IHsgbXV0YWJsZURhdGEsIG1fYnVmZmVyLT5sZW5ndGgoKSB9KTsKKyAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICB9CisKICAgICBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3QKICAgICB7CiAgICAgICAg
IHJldHVybiBtX2J1ZmZlciA/IG1fYnVmZmVyLT5kYXRhKCkgOiBudWxscHRyOwpJbmRleDogU291
cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvdGV4dC9TdHJpbmdWaWV3LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3Rm
L3RleHQvU3RyaW5nVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5NCw4IEBAIHB1Ymxp
YzoKICAgICBjb25zdCBMQ2hhciogY2hhcmFjdGVyczgoKSBjb25zdDsKICAgICBjb25zdCBVQ2hh
ciogY2hhcmFjdGVyczE2KCkgY29uc3Q7CiAKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0
ZXMoKSBjb25zdDsKKwogICAgIGJvb2wgaXNBbGxBU0NJSSgpIGNvbnN0OwogCiAgICAgU3RyaW5n
IHRvU3RyaW5nKCkgY29uc3Q7CkBAIC00MjQsNiArNDI2LDEzIEBAIGlubGluZSBjb25zdCBVQ2hh
ciogU3RyaW5nVmlldzo6Y2hhcmFjdGUKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgVUNo
YXIqPihtX2NoYXJhY3RlcnMpOwogfQogCitpbmxpbmUgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IFN0
cmluZ1ZpZXc6OmJ5dGVzKCkgY29uc3QKK3sKKyAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgIHJl
dHVybiBhc0J5dGVzKFNwYW4geyBjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSB9KTsKKyAgICByZXR1
cm4gYXNCeXRlcyhTcGFuIHsgY2hhcmFjdGVyczE2KCksIGxlbmd0aCgpIH0pOworfQorCiBpbmxp
bmUgYm9vbCBTdHJpbmdWaWV3Ojppc0FsbEFTQ0lJKCkgY29uc3QKIHsKICAgICBpZiAoaXM4Qml0
KCkpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2
LDcgQEAKIAogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgor
I2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQVNDSUlMaXRlcmFsLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KQEAgLTEzNCw2ICsxMzUsNyBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiAhbV9pbXBsIHx8IG1faW1wbC0+aXM4Qml0
KCk7IH0KIAogICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9pbXBs
ID8gbV9pbXBsLT5sZW5ndGgoKSAqIChpczhCaXQoKSA/IHNpemVvZihMQ2hhcikgOiBzaXplb2Yo
VUNoYXIpKSA6IDA7IH0KKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25zdDsK
IAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBDU3RyaW5nIGFzY2lpKCkgY29uc3Q7CiAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIENTdHJpbmcgbGF0aW4xKCkgY29uc3Q7CkBAIC00ODMsNiArNDg1LDE2
IEBAIHRlbXBsYXRlPD4gaW5saW5lIGNvbnN0IFVDaGFyKiBTdHJpbmc6OmMKICAgICByZXR1cm4g
Y2hhcmFjdGVyczE2KCk7CiB9CiAKK2lubGluZSBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gU3RyaW5n
OjpieXRlcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ltcGwpCisgICAgICAgIHJldHVybiB7IH07
CisKKyAgICBpZiAobV9pbXBsLT5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGFzQnl0ZXMoU3Bh
biB7IG1faW1wbC0+Y2hhcmFjdGVyczgoKSwgbV9pbXBsLT5sZW5ndGgoKSB9KTsKKyAgICByZXR1
cm4gYXNCeXRlcyhTcGFuIHsgbV9pbXBsLT5jaGFyYWN0ZXJzMTYoKSwgbV9pbXBsLT5sZW5ndGgo
KSB9KTsKK30KKwogaW5saW5lIFVDaGFyIFN0cmluZzo6Y2hhcmFjdGVyQXQodW5zaWduZWQgaW5k
ZXgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ltcGwgfHwgaW5kZXggPj0gbV9pbXBsLT5sZW5ndGgo
KSkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzYzLDkgKzM2Myw5IEBAIFN0cmluZyBjcmVhdGVUZW1wb3JhcnlEaXJlY3RvcnkoKQog
ICAgIH0pOwogfQogCi1ib29sIHVubWFwVmlld09mRmlsZSh2b2lkKiBidWZmZXIsIHNpemVfdCkK
K2Jvb2wgdW5tYXBWaWV3T2ZGaWxlKFNwYW48c3RkOjpieXRlPiBkYXRhKQogewotICAgIHJldHVy
biBVbm1hcFZpZXdPZkZpbGUoYnVmZmVyKTsKKyAgICByZXR1cm4gVW5tYXBWaWV3T2ZGaWxlKGRh
dGEuZGF0YSgpKTsKIH0KIAogYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0
Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBGaWxlT3Blbk1vZGUgb3Blbk1vZGUsIE1hcHBlZEZpbGVN
b2RlKQpAQCAtMzc0LDcgKzM3NCw3IEBAIGJvb2wgTWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5k
bGUoUGxhdGYKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byBzaXplID0gZmlsZVNp
emUoaGFuZGxlKTsKLSAgICBpZiAoIXNpemUgfHwgKnNpemUgPiBzdGQ6Om51bWVyaWNfbGltaXRz
PHNpemVfdD46Om1heCgpIHx8ICpzaXplID4gc3RkOjpudW1lcmljX2xpbWl0czxkZWNsdHlwZSht
X2ZpbGVTaXplKT46Om1heCgpKSB7CisgICAgaWYgKCFzaXplIHx8ICpzaXplID4gc3RkOjpudW1l
cmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSB8fCAqc2l6ZSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8
ZGVjbHR5cGUobV9maWxlRGF0YS5zaXplKCkpPjo6bWF4KCkpIHsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIApAQCAtNDAzLDExICs0MDMsMTIgQEAgYm9vbCBNYXBwZWRGaWxlRGF0YTo6
bWFwRmlsZUhhbmRsZShQbGF0ZgogICAgIGlmICghbWFwcGluZykKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgbV9maWxlRGF0YSA9IE1hcFZpZXdPZkZpbGUobWFwcGluZywgZGVzaXJlZEFj
Y2VzcywgMCwgMCwgKnNpemUpOworICAgIGF1dG8gZGF0YSA9IE1hcFZpZXdPZkZpbGUobWFwcGlu
ZywgZGVzaXJlZEFjY2VzcywgMCwgMCwgKnNpemUpOwogICAgIENsb3NlSGFuZGxlKG1hcHBpbmcp
OwotICAgIGlmICghbV9maWxlRGF0YSkKKyAgICBpZiAoIWRhdGEpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBtX2ZpbGVTaXplID0gKnNpemU7CisKKyAgICBtX2ZpbGVEYXRhID0gU3BhbiB7
IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpieXRlKj4oZGF0YSksICpzaXplIH07CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBACisyMDIxLTA2
LTExICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBBZG9wdCBTcGFu
IGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBbV0lQXQorCisgICAgICAgICogTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0
Lmg6CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHQ6OmVuY29kZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHQ6OmRlY29kZSk6CisgICAgICAgICogTW9kdWxlcy9o
aWdobGlnaHQvQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFw
cEhpZ2hsaWdodFJhbmdlRGF0YTo6dG9TaGFyZWRCdWZmZXIgY29uc3QpOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvclJlc3BvbnNlRGF0YS5oOgorICAgICAgICAoV2Vi
Q29yZTo6ZW5jb2RlQXJyYXlCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZGVjb2RlQXJyYXlC
dWZmZXIpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENy
ZWF0aW9uT3B0aW9ucy5oOgorICAgICAgICAoV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENy
ZWF0aW9uT3B0aW9uczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1dGhu
L1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpQdWJs
aWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRXZWJTb2NrZXRBY2NlcHQpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0J1ZmZlclNvdXJjZS5oOgorICAgICAgICAoV2ViQ29yZTo6QnVmZmVy
U291cmNlOjpieXRlcyBjb25zdCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmVu
Y29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRl
Y29kZSk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvU2VyaWFsaXplZE5GQS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6U2VyaWFsaXplZE5GQTo6cG9pbnRl
ckF0T2Zmc2V0SW5GaWxlIGNvbnN0KToKKyAgICAgICAgKiBjcnlwdG8vbWFjL1NlcmlhbGl6ZWRD
cnlwdG9LZXlXcmFwTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQW5kU3RvcmVNYXN0
ZXJLZXkpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omhhc2hQ
b2ludGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTVBhdGNoU3VwcG9ydDo6Y3JlYXRlRGlnZXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OmFkZFN0cmluZ1RvU0hBMSk6IERlbGV0ZWQuCisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9u
dGVuZEhvc3Q6OnNob3dDZXJ0aWZpY2F0ZSk6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yTmV0
d29ya0FnZW50OjpnZXRTZXJpYWxpemVkQ2VydGlmaWNhdGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmRD
dXN0b21EYXRhOjpjcmVhdGVTaGFyZWRCdWZmZXIgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OlNoYXJl
ZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmFwcGVuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpkYXRhIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmJ5dGVzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6ZGVjb2RlciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpzaXplIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9j
b2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNBQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNB
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9Nb2RlbC5oOgorICAgICAgICAoV2ViQ29yZTo6TW9kZWw6OmVuY29kZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNb2RlbDo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9QaXhlbEJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6UGl4ZWxCdWZmZXI6OmVuY29k
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6ZGVjb2RlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVz
Lmg6CisgICAgICAgIChXZWJDb3JlOjpDYXBhYmlsaXR5VmFsdWVPclJhbmdlOjplbmNvZGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FwYWJpbGl0eVZhbHVlT3JSYW5nZTo6ZGVjb2RlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZFN0cmluZ1RvU0hBMSk6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHA6CisgICAgICAgIChXVEY6
OlBlcnNpc3RlbmNlOjplbmNvZGVDRkRhdGEpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6
ZGVjb2RlQ0ZEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IpOgorICAgICAg
ICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaDoKKyAgICAgICAgKiB3b3JrZXJzL3Nl
cnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzKToKKyAgICAgICAgKiB3b3JrZXJz
L3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
V1NjcmlwdFN0b3JhZ2U6OnN0b3JlKToKKwogMjAyMS0wNi0xMSAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgogCiAgICAgICAgIExhemlseSBjb21wdXRlIFNlY3VyaXR5T3JpZ2luOjpt
X2lzUG90ZW50aWFsbHlUcnVzdHdvcnRoeSBmb3IgcGVyZm9ybWFuY2UKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvSW5pdERhdGFSZWdpc3RyeS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJl
Z2lzdHJ5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9l
bmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0
LDcgKzEwNCw3IEBAIHN0YXRpYyBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzYW5pdGl6ZUtleWkKICAg
ICBhdXRvIG9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgYXV0byBraWRzQXJy
YXkgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgZm9yIChhdXRvJiBidWZmZXIgOiBrZXlJ
REJ1ZmZlci52YWx1ZSgpKQotICAgICAgICBraWRzQXJyYXktPnB1c2hTdHJpbmcoYmFzZTY0VVJM
RW5jb2RlVG9TdHJpbmcoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKSk7CisgICAgICAg
IGtpZHNBcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhidWZmZXItPmJ5
dGVzKCkpKTsKICAgICBvYmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92ZShraWRzQXJyYXkp
KTsKIAogICAgIENTdHJpbmcganNvbkRhdGEgPSBvYmplY3QtPnRvSlNPTlN0cmluZygpLnV0Zjgo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hs
aWdodC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hpZ2hs
aWdodC9BcHBIaWdobGlnaHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCB0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBBcHBIaWdobGlnaHQ6OmVuY29kZShFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihoaWdo
bGlnaHQtPnNpemUoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoaGlnaGxp
Z2h0LT5kYXRhKCksIGhpZ2hsaWdodC0+c2l6ZSgpLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZp
eGVkTGVuZ3RoRGF0YSgqaGlnaGxpZ2h0LCAxKTsKIAogICAgIGVuY29kZXIgPDwgdGV4dDsKIApA
QCAtNzUsNyArNzUsNyBAQCBzdGQ6Om9wdGlvbmFsPEFwcEhpZ2hsaWdodD4gQXBwSGlnaGxpZ2h0
CiAKICAgICBWZWN0b3I8dWludDhfdD4gaGlnaGxpZ2h0OwogICAgIGhpZ2hsaWdodC5ncm93KCps
ZW5ndGgpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoaGlnaGxpZ2h0
LmRhdGEoKSwgaGlnaGxpZ2h0LnNpemUoKSwgMSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZp
eGVkTGVuZ3RoRGF0YShoaWdobGlnaHQsIDEpKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwogCiAgICAgc3RkOjpvcHRpb25hbDxzdGQ6Om9wdGlvbmFsPFN0cmluZz4+IHRleHQ7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHRSYW5nZURhdGEu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhp
Z2hsaWdodFJhbmdlRGF0YS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFJhbmdlRGF0YS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUzLDcgKzUzLDcgQEAgUmVmPFNoYXJlZEJ1ZmZlcj4gQXBwSGlnaGxpZ2h0UmFuZ2VE
YXRhOgogewogICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2RlcjsKICAgICBlbmNv
ZGVyIDw8ICp0aGlzOwotICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShlbmNvZGVyLmJ1
ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6
Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCkpOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIEFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6Tm9kZVBhdGhDb21wb25lbnQ6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIE5ldHdvcmtTZW5kUXVldWUgUlRDRGF0YUNo
YW5uZWw6OmNyZWF0ZU0KICAgICAgICAgaWYgKCFjaGFubmVsLm1faGFuZGxlci0+c2VuZFN0cmlu
Z0RhdGEodXRmOCkpCiAgICAgICAgICAgICBjaGFubmVsLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJy
b3IsICJFcnJvciBzZW5kaW5nIHN0cmluZyB0aHJvdWdoIFJUQ0RhdGFDaGFubmVsLiJfcyk7CiAg
ICAgfSwgWyZjaGFubmVsXShhdXRvJiBzcGFuKSB7Ci0gICAgICAgIGlmICghY2hhbm5lbC5tX2hh
bmRsZXItPnNlbmRSYXdEYXRhKHNwYW4uZGF0YSgpLCBzcGFuLnNpemUoKSkpCisgICAgICAgIGlm
ICghY2hhbm5lbC5tX2hhbmRsZXItPnNlbmRSYXdEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KHNwYW4uZGF0YSgpKSwgc3Bhbi5zaXplKCkpKQogICAgICAgICAgICAgY2hhbm5l
bC5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3Vy
Y2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAiRXJyb3Igc2VuZGluZyBiaW5hcnkgZGF0YSB0
aHJvdWdoIFJUQ0RhdGFDaGFubmVsLiJfcyk7CiAgICAgfSwgWyZjaGFubmVsXShFeGNlcHRpb25D
b2RlIGVycm9yQ29kZSkgewogICAgICAgICBpZiAoYXV0byogY29udGV4dCA9IGNoYW5uZWwuc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Bs
dWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tU
aW1lUGx1Z2luUmVwbGFjZW1lbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTM0MCw3ICszNDAsNyBA
QCBzdGF0aWMgSlNWYWx1ZSAqanNWYWx1ZVdpdGhBVk1ldGFkYXRhSXRlCiAgICAgICAgIGlkIHZh
bHVlID0gaXRlbS52YWx1ZTsKICAgICAgICAgTlNTdHJpbmcgKm1pbWVUeXBlID0gW1tpdGVtIGV4
dHJhQXR0cmlidXRlc10gb2JqZWN0Rm9yS2V5OkAiTUlNRXR5cGUiXTsKICAgICAgICAgaWYgKFt2
YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0RhdGEgY2xhc3NdXSAmJiBtaW1lVHlwZSkgewotICAgICAg
ICAgICAgYXV0byBkYXRhNjQgPSBtYWtlU3RyaW5nKCJkYXRhOiIsIFN0cmluZyhtaW1lVHlwZSks
ICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoW3ZhbHVlIGJ5dGVzXSwgW3ZhbHVlIGxlbmd0aF0p
KTsKKyAgICAgICAgICAgIGF1dG8gZGF0YTY0ID0gbWFrZVN0cmluZygiZGF0YToiLCBTdHJpbmco
bWltZVR5cGUpLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKFNwYW4geyBzdGF0aWNfY2FzdDxj
b25zdCBzdGQ6OmJ5dGU+KFt2YWx1ZSBieXRlc10pLCBbdmFsdWUgbGVuZ3RoXSB9KSk7CiAgICAg
ICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6KF9fYnJpZGdlIE5TU3RyaW5nICopZGF0YTY0
LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkgZm9yS2V5OkAidmFsdWUiXTsKICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6dmFsdWUgZm9yS2V5OkAidmFsdWUi
XTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvckNv
b3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
dGhuL0F1dGhlbnRpY2F0b3JDb29yZGluYXRvci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBzdGF0aWMgUmVmPEFycmF5QnVmZmVy
PiBwcm9kdWNlQ2xpZW50RGF0CiAgICAgICAgIG9iamVjdC0+c2V0U3RyaW5nKCJ0eXBlIl9zLCAi
d2ViYXV0aG4uZ2V0Il9zKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIG9iamVjdC0+c2V0
U3RyaW5nKCJjaGFsbGVuZ2UiX3MsIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNoYWxsZW5nZS5k
YXRhKCksIGNoYWxsZW5nZS5sZW5ndGgoKSkpOworICAgIG9iamVjdC0+c2V0U3RyaW5nKCJjaGFs
bGVuZ2UiX3MsIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNoYWxsZW5nZS5ieXRlcygpKSk7CiAg
ICAgb2JqZWN0LT5zZXRTdHJpbmcoIm9yaWdpbiJfcywgb3JpZ2luLnRvUmF3U3RyaW5nKCkpOwog
CiAgICAgYXV0byB1dGY4SlNPTlN0cmluZyA9IG9iamVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yUmVz
cG9uc2VEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRo
bi9BdXRoZW50aWNhdG9yUmVzcG9uc2VEYXRhLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvclJlc3BvbnNlRGF0YS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiBz
dGF0aWMgdm9pZCBlbmNvZGVBcnJheUJ1ZmZlcihFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBBcnJh
eUJ1ZmZlciYgYnVmZmVyKQogewogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KGJ1ZmZlci5ieXRlTGVuZ3RoKCkpOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihidWZmZXIuZGF0YSgpKSwgYnVmZmVyLmJ5dGVM
ZW5ndGgoKSwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLmJ5
dGVzKCksIDEpOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgpAQCAtNzUsNyArNzUsNyBA
QCBSZWZQdHI8QXJyYXlCdWZmZXI+IGRlY29kZUFycmF5QnVmZmVyKERlCiAgICAgYXV0byBidWZm
ZXIgPSBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKGxlbmd0aC52YWx1ZSgpLCBzaXplb2YodWludDhf
dCkpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHN0YXRpY19jYXN0PHVpbnQ4X3QqPihidWZm
ZXItPmRhdGEoKSksIGxlbmd0aC52YWx1ZSgpLCAxKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKGJ1ZmZlci0+d3JpdGFibGVCeXRlcygpLCAxKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIGJ1ZmZlcjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcAko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJs
aWNLZXlDcmVkZW50aWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBBdXRo
ZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzIFB1CiB9CiAKIFB1YmxpY0tleUNyZWRl
bnRpYWw6OlB1YmxpY0tleUNyZWRlbnRpYWwoUmVmPEF1dGhlbnRpY2F0b3JSZXNwb25zZT4mJiBy
ZXNwb25zZSkKLSAgICA6IEJhc2ljQ3JlZGVudGlhbChiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhy
ZXNwb25zZS0+cmF3SWQoKS0+ZGF0YSgpLCByZXNwb25zZS0+cmF3SWQoKS0+Ynl0ZUxlbmd0aCgp
KSwgVHlwZTo6UHVibGljS2V5LCBEaXNjb3Zlcnk6OlJlbW90ZSkKKyAgICA6IEJhc2ljQ3JlZGVu
dGlhbChiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhyZXNwb25zZS0+cmF3SWQoKS0+Ynl0ZXMoKSks
IFR5cGU6OlB1YmxpY0tleSwgRGlzY292ZXJ5OjpSZW1vdGUpCiAgICAgLCBtX3Jlc3BvbnNlKFdU
Rk1vdmUocmVzcG9uc2UpKQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRp
b25PcHRpb25zLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDEsOCArMTQxLDggQEAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgUHVi
bGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIp
IGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBycC5pZCA8PCBycC5uYW1lIDw8IHJwLmljb247Ci0g
ICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odXNlci5pZC5sZW5ndGgoKSk7Ci0g
ICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEodXNlci5pZC5kYXRhKCksIHVzZXIuaWQu
bGVuZ3RoKCksIDEpOworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHVzZXIu
aWQuYnl0ZXMoKS5zaXplKCkpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHVz
ZXIuaWQuYnl0ZXMoKSwgMSk7CiAgICAgZW5jb2RlciA8PCB1c2VyLmRpc3BsYXlOYW1lIDw8IHVz
ZXIubmFtZSA8PCB1c2VyLmljb24gPDwgcHViS2V5Q3JlZFBhcmFtcyA8PCB0aW1lb3V0IDw8IGV4
Y2x1ZGVDcmVkZW50aWFscyA8PCBhdXRoZW50aWNhdG9yU2VsZWN0aW9uIDw8IGF0dGVzdGF0aW9u
IDw8IGV4dGVuc2lvbnM7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0
aG4vUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmgJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVi
bGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcs
OCBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBQdWJsaWNLZXlDcmVkZW50aWFsRGVz
Y3JpcHRvcjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8
PCB0eXBlOwotICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGlkLmxlbmd0aCgp
KTsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShpZC5kYXRhKCksIGlkLmxlbmd0
aCgpLCAxKTsKKyAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihpZC5ieXRlcygp
LnNpemUoKSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoaWQuYnl0ZXMoKSwg
MSk7CiAgICAgZW5jb2RlciA8PCB0cmFuc3BvcnRzOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNw
cAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRz
L1dlYlNvY2tldEhhbmRzaGFrZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDE5ICs5NywyMCBA
QCBzdGF0aWMgU3RyaW5nIGdlbmVyYXRlU2VjV2ViU29ja2V0S2V5KCkKICAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IG5vbmNlU2l6ZSA9IDE2OwogICAgIHVuc2lnbmVkIGNoYXIga2V5W25vbmNlU2l6
ZV07CiAgICAgY3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21WYWx1ZXMoa2V5LCBub25jZVNpemUpOwot
ICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhrZXksIG5vbmNlU2l6ZSk7CisgICAgcmV0
dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGtleSk7CiB9CiAKIFN0cmluZyBXZWJTb2NrZXRIYW5k
c2hha2U6OmdldEV4cGVjdGVkV2ViU29ja2V0QWNjZXB0KGNvbnN0IFN0cmluZyYgc2VjV2ViU29j
a2V0S2V5KQogewogICAgIGNvbnN0ZXhwciB1aW50OF90IHdlYlNvY2tldEtleUdVSURbXSA9ICIy
NThFQUZBNS1FOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTEiOworCiAgICAgU0hBMSBzaGExOwot
ICAgIENTdHJpbmcga2V5RGF0YSA9IHNlY1dlYlNvY2tldEtleS5hc2NpaSgpOwotICAgIHNoYTEu
YWRkQnl0ZXMoa2V5RGF0YS5kYXRhQXNVSW50OFB0cigpLCBrZXlEYXRhLmxlbmd0aCgpKTsKLSAg
ICBzaGExLmFkZEJ5dGVzKHdlYlNvY2tldEtleUdVSUQsIHN0ZDo6c2l6ZSh3ZWJTb2NrZXRLZXlH
VUlEKSAtIDEpOworICAgIHNoYTEuYWRkQnl0ZXMoc2VjV2ViU29ja2V0S2V5LmFzY2lpKCkuYnl0
ZXMoKSk7CisgICAgc2hhMS5hZGRCeXRlcyh3ZWJTb2NrZXRLZXlHVUlEKTsKKwogICAgIFNIQTE6
OkRpZ2VzdCBoYXNoOwogICAgIHNoYTEuY29tcHV0ZUhhc2goaGFzaCk7Ci0gICAgcmV0dXJuIGJh
c2U2NEVuY29kZVRvU3RyaW5nKGhhc2guZGF0YSgpLCBTSEExOjpoYXNoU2l6ZSk7CisgICAgcmV0
dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGhhc2gpOwogfQogCiBXZWJTb2NrZXRIYW5kc2hha2U6
OldlYlNvY2tldEhhbmRzaGFrZShjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBwcm90b2Nv
bCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgY2xpZW50T3JpZ2luLCBi
b29sIGFsbG93Q29va2llcykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0J1ZmZl
clNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0J1ZmZl
clNvdXJjZS5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9CdWZmZXJTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsMTMgQEAgcHVibGlj
OgogICAgICAgICB9LCBtX3ZhcmlhbnQpOwogICAgIH0KIAorICAgIFNwYW48Y29uc3QgdWludDhf
dD4gYnl0ZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQoW10oYXV0
byYgYnVmZmVyKSAtPiBTcGFuPGNvbnN0IHVpbnQ4X3Q+IHsKKyAgICAgICAgICAgIHJldHVybiBi
dWZmZXIgPyBTcGFuPGNvbnN0IHVpbnQ4X3Q+IHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+
KGJ1ZmZlci0+ZGF0YSgpKSwgYnVmZmVyLT5ieXRlTGVuZ3RoKCkgfSA6IFNwYW48Y29uc3QgdWlu
dDhfdD4geyB9OworICAgICAgICB9LCBtX3ZhcmlhbnQpOworICAgIH0KKwogcHJpdmF0ZToKICAg
ICBWYXJpYW50VHlwZSBtX3ZhcmlhbnQ7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjQsMTUgKzE2NCwxNSBAQCB2b2lkIFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6ZW5jb2RlKEVuY29kCiAKICAgICBpZiAoaGFzQXJyYXkpIHsKICAgICAgICAgZW5jb2Rl
ciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4obV9hcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXktPnNp
emUoKSk7Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byAmYXJyYXlCdWZmZXJDb250ZW50cyA6ICpt
X2FycmF5QnVmZmVyQ29udGVudHNBcnJheSkgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGFy
cmF5QnVmZmVyQ29udGVudHMgOiAqbV9hcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkpIHsKICAgICAg
ICAgICAgIGVuY29kZXIgPDwgYXJyYXlCdWZmZXJDb250ZW50cy5zaXplSW5CeXRlcygpOwotICAg
ICAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RhdGljX2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KGFycmF5QnVmZmVyQ29udGVudHMuZGF0YSgpKSwgYXJyYXlCdWZmZXJDb250ZW50
cy5zaXplSW5CeXRlcygpLCAxKTsKKyAgICAgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKGFycmF5QnVmZmVyQ29udGVudHMuYnl0ZXMoKSwgMSk7CiAgICAgICAgIH0KICAgICB9
CiAKICNpZiBFTkFCTEUoV0VCX1JUQykKICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2
NF90PihtX2RldGFjaGVkUlRDRGF0YUNoYW5uZWxzLnNpemUoKSk7Ci0gICAgZm9yIChjb25zdCBh
dXRvICZjaGFubmVsIDogbV9kZXRhY2hlZFJUQ0RhdGFDaGFubmVscykKKyAgICBmb3IgKGNvbnN0
IGF1dG8mIGNoYW5uZWwgOiBtX2RldGFjaGVkUlRDRGF0YUNoYW5uZWxzKQogICAgICAgICBlbmNv
ZGVyIDw8ICpjaGFubmVsOwogI2VuZGlmCiB9CkBAIC0yMDYsNyArMjA2LDcgQEAgUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZAogICAgICAgICAgICAgYXV0byBidWZmZXIg
PSBHaWdhY2FnZTo6dHJ5TWFsbG9jKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJ1ZmZlclNpemUpOwog
ICAgICAgICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHN0YXRpY19j
YXN0PHVpbnQ4X3QqPihidWZmZXIpLCBidWZmZXJTaXplLCAxKSkgeworICAgICAgICAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgc3RhdGljX2Nhc3Q8c3RkOjpi
eXRlKj4oYnVmZmVyKSwgYnVmZmVyU2l6ZSB9LCAxKSkgewogICAgICAgICAgICAgICAgIEdpZ2Fj
YWdlOjpmcmVlKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJ1ZmZlcik7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9TZXJpYWxpemVkTkZBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9TZXJpYWxpemVkTkZBLmNwcAkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvU2VyaWFsaXplZE5GQS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBTZXJpYWxpemVkTkZBOjpTZXJpYWxp
emVkTkZBKEZpbGVTeXN0ZW06CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogY29uc3QgVCogU2VyaWFs
aXplZE5GQTo6cG9pbnRlckF0T2Zmc2V0SW5GaWxlKHNpemVfdCBvZmZzZXQpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHN0YXRpY19jYXN0PGNvbnN0IHVp
bnQ4X3QqPihtX2ZpbGUuZGF0YSgpKSArIG9mZnNldCk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgVCo+KG1fZmlsZS5kYXRhKCkuZGF0YSgpICsgb2Zmc2V0KTsKIH0KIAogYXV0
byBTZXJpYWxpemVkTkZBOjpub2RlcygpIGNvbnN0IC0+IGNvbnN0IFJhbmdlPEltbXV0YWJsZU5G
QU5vZGU+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleUVDTWFj
LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9Dcnlw
dG9LZXlFQ01hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NywxMCArMTk3LDEwIEBAIGJvb2wg
Q3J5cHRvS2V5RUM6OnBsYXRmb3JtQWRkRmllbGRFbGVtZW4KIAogICAgIGlmIChVTkxJS0VMWSgo
c2l6ZSAhPSBwdWJsaWNLZXlTaXplKSAmJiAoc2l6ZSAhPSBwcml2YXRlS2V5U2l6ZSkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgandrLnggPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhy
ZXN1bHQuZGF0YSgpICsgMSwga2V5U2l6ZUluQnl0ZXMpOwotICAgIGp3ay55ID0gYmFzZTY0VVJM
RW5jb2RlVG9TdHJpbmcocmVzdWx0LmRhdGEoKSArIGtleVNpemVJbkJ5dGVzICsgMSwga2V5U2l6
ZUluQnl0ZXMpOworICAgIGp3ay54ID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoU3BhbiB7IHJl
c3VsdCB9LnN1YnNwYW4oMSwga2V5U2l6ZUluQnl0ZXMpKTsKKyAgICBqd2sueSA9IGJhc2U2NFVS
TEVuY29kZVRvU3RyaW5nKFNwYW4geyByZXN1bHQgfS5zdWJzcGFuKDEgKyBrZXlTaXplSW5CeXRl
cywga2V5U2l6ZUluQnl0ZXMpKTsKICAgICBpZiAoc2l6ZSA+IHB1YmxpY0tleVNpemUpCi0gICAg
ICAgIGp3ay5kID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcocmVzdWx0LmRhdGEoKSArIHB1Ymxp
Y0tleVNpemUsIGtleVNpemVJbkJ5dGVzKTsKKyAgICAgICAgandrLmQgPSBiYXNlNjRVUkxFbmNv
ZGVUb1N0cmluZyhTcGFuIHsgcmVzdWx0IH0uc3Vic3BhbihwdWJsaWNLZXlTaXplLCBrZXlTaXpl
SW5CeXRlcykpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vbWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvU2VyaWFsaXplZENyeXB0b0tleVdyYXBNYWMubW0JKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvU2VyaWFsaXplZENy
eXB0b0tleVdyYXBNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw3ICsxNjcsNyBAQCBzdGF0
aWMgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGZpCiAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CiAgICAgfQogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGtleURhdGEgPSBhZG9w
dENGKGtleURhdGFSZWYpOwotICAgIHJldHVybiBiYXNlNjREZWNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0
cihrZXlEYXRhLmdldCgpKSwgQ0ZEYXRhR2V0TGVuZ3RoKGtleURhdGEuZ2V0KCkpKTsKKyAgICBy
ZXR1cm4gYmFzZTY0RGVjb2RlKFNwYW4geyBDRkRhdGFHZXRCeXRlUHRyKGtleURhdGEuZ2V0KCkp
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQ0ZEYXRhR2V0TGVuZ3RoKGtleURhdGEuZ2V0KCkpKSB9
KTsKIH0KIAogc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGRlZmF1bHRXZWJDcnlwdG9N
YXN0ZXJLZXkoKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjA2LDcgKzE2MDYs
OCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBOb2RlOjpzZXRUZXh0Q29udGVudChjCiBzdGF0aWMgU0hB
MTo6RGlnZXN0IGhhc2hQb2ludGVyKGNvbnN0IHZvaWQqIHBvaW50ZXIpCiB7CiAgICAgU0hBMSBz
aGExOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4o
JnBvaW50ZXIpLCBzaXplb2YocG9pbnRlcikpOworICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZw
b2ludGVyLCAxIH0pOworCiAgICAgU0hBMTo6RGlnZXN0IGRpZ2VzdDsKICAgICBzaGExLmNvbXB1
dGVIYXNoKGRpZ2VzdCk7CiAgICAgcmV0dXJuIGRpZ2VzdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzM4LDcgKzMzOCw3IEBAIHZvaWQgRmlsZVJlYWRlckxvYWRlcjo6Y29udmVydFRvRGF0YVVS
TCgKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fc3RyaW5nUmVzdWx0ID0gbWFrZVN0
cmluZygiZGF0YToiLCBtX2RhdGFUeXBlLmlzRW1wdHkoKSA/ICJhcHBsaWNhdGlvbi9vY3RldC1z
dHJlYW0iIDogbV9kYXRhVHlwZSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChtX3Jhd0RhdGEt
PmRhdGEoKSwgbV9ieXRlc0xvYWRlZCkpOworICAgIG1fc3RyaW5nUmVzdWx0ID0gbWFrZVN0cmlu
ZygiZGF0YToiLCBtX2RhdGFUeXBlLmlzRW1wdHkoKSA/ICJhcHBsaWNhdGlvbi9vY3RldC1zdHJl
YW0iIDogbV9kYXRhVHlwZSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChtX3Jhd0RhdGEtPmJ5
dGVzKCkpKTsKIH0KIAogYm9vbCBGaWxlUmVhZGVyTG9hZGVyOjppc0NvbXBsZXRlZCgpIGNvbnN0
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL05ldHdvcmtTZW5kUXVldWUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTmV0d29ya1NlbmRRdWV1ZS5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTmV0d29ya1NlbmRRdWV1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDExICs1MywxMCBAQCB2b2lkIE5ldHdvcmtTZW5k
UXVldWU6OmVucXVldWUoQ1N0cmluZyYmCiB2b2lkIE5ldHdvcmtTZW5kUXVldWU6OmVucXVldWUo
Y29uc3QgSlNDOjpBcnJheUJ1ZmZlciYgYmluYXJ5RGF0YSwgdW5zaWduZWQgYnl0ZU9mZnNldCwg
dW5zaWduZWQgYnl0ZUxlbmd0aCkKIHsKICAgICBpZiAobV9xdWV1ZS5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgYXV0byogZGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihiaW5hcnlEYXRh
LmRhdGEoKSk7Ci0gICAgICAgIG1fd3JpdGVSYXdEYXRhKFNwYW4geyBkYXRhICsgYnl0ZU9mZnNl
dCwgYnl0ZUxlbmd0aCB9KTsKKyAgICAgICAgbV93cml0ZVJhd0RhdGEoYmluYXJ5RGF0YS5ieXRl
cygpLnN1YnNwYW4oYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIG1fcXVldWUuYXBwZW5kKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHN0YXRpY19jYXN0
PGNvbnN0IHVpbnQ4X3QqPihiaW5hcnlEYXRhLmRhdGEoKSkgKyBieXRlT2Zmc2V0LCBieXRlTGVu
Z3RoKSk7CisgICAgbV9xdWV1ZS5hcHBlbmQoU2hhcmVkQnVmZmVyOjpjcmVhdGUoYmluYXJ5RGF0
YS5ieXRlcygpLnN1YnNwYW4oYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkpKTsKIH0KIAogdm9pZCBO
ZXR3b3JrU2VuZFF1ZXVlOjplbnF1ZXVlKFdlYkNvcmU6OkJsb2ImIGJsb2IpCkBAIC05Myw3ICs5
Miw5IEBAIHZvaWQgTmV0d29ya1NlbmRRdWV1ZTo6cHJvY2Vzc01lc3NhZ2VzKCkKICAgICAgICAg
c3dpdGNoT24obV9xdWV1ZS5maXJzdCgpLCBbdGhpc10oY29uc3QgQ1N0cmluZyYgdXRmOCkgewog
ICAgICAgICAgICAgbV93cml0ZVN0cmluZyh1dGY4KTsKICAgICAgICAgfSwgW3RoaXNdKFJlZjxT
aGFyZWRCdWZmZXI+JiBkYXRhKSB7Ci0gICAgICAgICAgICBkYXRhLT5mb3JFYWNoU2VnbWVudCht
X3dyaXRlUmF3RGF0YSk7CisgICAgICAgICAgICBkYXRhLT5mb3JFYWNoU2VnbWVudChbdGhpc10o
YXV0byYgc3BhbikgeworICAgICAgICAgICAgICAgIG1fd3JpdGVSYXdEYXRhKGFzQnl0ZXMoc3Bh
bikpOworICAgICAgICAgICAgfSk7CiAgICAgICAgIH0sIFt0aGlzLCAmc2hvdWxkU3RvcFByb2Nl
c3NpbmddKFVuaXF1ZVJlZjxCbG9iTG9hZGVyPiYgbG9hZGVyKSB7CiAgICAgICAgICAgICBhdXRv
IGVycm9yQ29kZSA9IGxvYWRlci0+ZXJyb3JDb2RlKCk7CiAgICAgICAgICAgICBpZiAobG9hZGVy
LT5pc0xvYWRpbmcoKSB8fCAoZXJyb3JDb2RlICYmIGVycm9yQ29kZS52YWx1ZSgpID09IEFib3J0
RXJyb3IpKSB7CkBAIC0xMDIsNyArMTAzLDcgQEAgdm9pZCBOZXR3b3JrU2VuZFF1ZXVlOjpwcm9j
ZXNzTWVzc2FnZXMoKQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoY29uc3QgYXV0
byYgcmVzdWx0ID0gbG9hZGVyLT5hcnJheUJ1ZmZlclJlc3VsdCgpKSB7Ci0gICAgICAgICAgICAg
ICAgbV93cml0ZVJhd0RhdGEoU3BhbiB7IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihyZXN1
bHQtPmRhdGEoKSksIHJlc3VsdC0+Ynl0ZUxlbmd0aCgpIH0pOworICAgICAgICAgICAgICAgIG1f
d3JpdGVSYXdEYXRhKHJlc3VsdC0+Ynl0ZXMoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgQVNTRVJUKGVycm9yQ29kZSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL05ldHdvcmtTZW5kUXVldWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL05ldHdvcmtTZW5kUXVldWUuaAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4LDcgKzQ4LDcgQEAgY2xhc3MgU2hhcmVkQnVmZmVyOwogY2xhc3MgV0VCQ09SRV9F
WFBPUlQgTmV0d29ya1NlbmRRdWV1ZSA6IHB1YmxpYyBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZl
ciB7CiBwdWJsaWM6CiAgICAgdXNpbmcgV3JpdGVTdHJpbmcgPSBGdW5jdGlvbjx2b2lkKGNvbnN0
IENTdHJpbmcmIHV0ZjgpPjsKLSAgICB1c2luZyBXcml0ZVJhd0RhdGEgPSBGdW5jdGlvbjx2b2lk
KGNvbnN0IFNwYW48Y29uc3QgdWludDhfdD4mKT47CisgICAgdXNpbmcgV3JpdGVSYXdEYXRhID0g
RnVuY3Rpb248dm9pZChjb25zdCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4mKT47CiAgICAgZW51bSBj
bGFzcyBDb250aW51ZSB7IE5vLCBZZXMgfTsKICAgICB1c2luZyBQcm9jZXNzRXJyb3IgPSBGdW5j
dGlvbjxDb250aW51ZShFeGNlcHRpb25Db2RlKT47CiAgICAgTmV0d29ya1NlbmRRdWV1ZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiwgV3JpdGVTdHJpbmcmJiwgV3JpdGVSYXdEYXRhJiYsIFByb2Nl
c3NFcnJvciYmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBv
cnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1
cHBvcnQuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
RE9NUGF0Y2hTdXBwb3J0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk0LDI4ICszOTQsMjMgQEAg
RXhjZXB0aW9uT3I8dm9pZD4gRE9NUGF0Y2hTdXBwb3J0Ojppbm5lcgogICAgIHJldHVybiB7IH07
CiB9CiAKLXN0YXRpYyB2b2lkIGFkZFN0cmluZ1RvU0hBMShTSEExJiBzaGExLCBjb25zdCBTdHJp
bmcmIHN0cmluZykKLXsKLSAgICBDU3RyaW5nIGNTdHJpbmcgPSBzdHJpbmcudXRmOCgpOwotICAg
IHNoYTEuYWRkQnl0ZXMoY1N0cmluZy5kYXRhQXNVSW50OFB0cigpLCBjU3RyaW5nLmxlbmd0aCgp
KTsKLX0KLQogc3RkOjp1bmlxdWVfcHRyPERPTVBhdGNoU3VwcG9ydDo6RGlnZXN0PiBET01QYXRj
aFN1cHBvcnQ6OmNyZWF0ZURpZ2VzdChOb2RlJiBub2RlLCBVbnVzZWROb2Rlc01hcCogdW51c2Vk
Tm9kZXNNYXApCiB7CiAgICAgYXV0byBkaWdlc3QgPSBtYWtlVW5pcXVlPERpZ2VzdD4oKTsKICAg
ICBkaWdlc3QtPm5vZGUgPSAmbm9kZTsKKwogICAgIFNIQTEgc2hhMTsKIAogICAgIGF1dG8gbm9k
ZVR5cGUgPSBub2RlLm5vZGVUeXBlKCk7Ci0gICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPigmbm9kZVR5cGUpLCBzaXplb2Yobm9kZVR5cGUpKTsKLSAgICBh
ZGRTdHJpbmdUb1NIQTEoc2hhMSwgbm9kZS5ub2RlTmFtZSgpKTsKLSAgICBhZGRTdHJpbmdUb1NI
QTEoc2hhMSwgbm9kZS5ub2RlVmFsdWUoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgJm5v
ZGVUeXBlLCAxIH0pOworICAgIHNoYTEuYWRkQnl0ZXMobm9kZS5ub2RlTmFtZSgpLnV0ZjgoKS5i
eXRlcygpKTsKKyAgICBzaGExLmFkZEJ5dGVzKG5vZGUubm9kZVZhbHVlKCkudXRmOCgpLmJ5dGVz
KCkpOwogCiAgICAgaWYgKG5vZGUubm9kZVR5cGUoKSA9PSBOb2RlOjpFTEVNRU5UX05PREUpIHsK
ICAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQoKTsKICAgICAgICAgd2hpbGUg
KGNoaWxkKSB7CiAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8RGlnZXN0PiBjaGlsZEluZm8g
PSBjcmVhdGVEaWdlc3QoKmNoaWxkLCB1bnVzZWROb2Rlc01hcCk7Ci0gICAgICAgICAgICBhZGRT
dHJpbmdUb1NIQTEoc2hhMSwgY2hpbGRJbmZvLT5zaGExKTsKKyAgICAgICAgICAgIHNoYTEuYWRk
Qnl0ZXMoY2hpbGRJbmZvLT5zaGExLnV0ZjgoKS5ieXRlcygpKTsKICAgICAgICAgICAgIGNoaWxk
ID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CiAgICAgICAgICAgICBkaWdlc3QtPmNoaWxkcmVuLmFw
cGVuZChXVEZNb3ZlKGNoaWxkSW5mbykpOwogICAgICAgICB9CkBAIC00MjQsMTkgKzQxOSwxOSBA
QCBzdGQ6OnVuaXF1ZV9wdHI8RE9NUGF0Y2hTdXBwb3J0OjpEaWdlc3Q+CiAgICAgICAgIGlmIChl
bGVtZW50Lmhhc0F0dHJpYnV0ZXNXaXRob3V0VXBkYXRlKCkpIHsKICAgICAgICAgICAgIFNIQTEg
YXR0cnNTSEExOwogICAgICAgICAgICAgZm9yIChhdXRvJiBhdHRyaWJ1dGUgOiBlbGVtZW50LmF0
dHJpYnV0ZXNJdGVyYXRvcigpKSB7Ci0gICAgICAgICAgICAgICAgYWRkU3RyaW5nVG9TSEExKGF0
dHJzU0hBMSwgYXR0cmlidXRlLm5hbWUoKS50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICBh
ZGRTdHJpbmdUb1NIQTEoYXR0cnNTSEExLCBhdHRyaWJ1dGUudmFsdWUoKSk7CisgICAgICAgICAg
ICAgICAgYXR0cnNTSEExLmFkZEJ5dGVzKGF0dHJpYnV0ZS5uYW1lKCkudG9TdHJpbmcoKS51dGY4
KCkuYnl0ZXMoKSk7CisgICAgICAgICAgICAgICAgYXR0cnNTSEExLmFkZEJ5dGVzKGF0dHJpYnV0
ZS52YWx1ZSgpLnN0cmluZygpLnV0ZjgoKS5ieXRlcygpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIFNIQTE6OkRpZ2VzdCBhdHRyc0hhc2g7CiAgICAgICAgICAgICBhdHRyc1NIQTEuY29t
cHV0ZUhhc2goYXR0cnNIYXNoKTsKLSAgICAgICAgICAgIGRpZ2VzdC0+YXR0cnNTSEExID0gYmFz
ZTY0RW5jb2RlVG9TdHJpbmcoYXR0cnNIYXNoLmRhdGEoKSwgMTApOwotICAgICAgICAgICAgYWRk
U3RyaW5nVG9TSEExKHNoYTEsIGRpZ2VzdC0+YXR0cnNTSEExKTsKKyAgICAgICAgICAgIGRpZ2Vz
dC0+YXR0cnNTSEExID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoYXR0cnNIYXNoKTsKKyAgICAgICAg
ICAgIHNoYTEuYWRkQnl0ZXMoZGlnZXN0LT5hdHRyc1NIQTEudXRmOCgpLmJ5dGVzKCkpOwogICAg
ICAgICB9CiAgICAgfQogCiAgICAgU0hBMTo6RGlnZXN0IGhhc2g7CiAgICAgc2hhMS5jb21wdXRl
SGFzaChoYXNoKTsKLSAgICBkaWdlc3QtPnNoYTEgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhoYXNo
LmRhdGEoKSwgMTApOworICAgIGRpZ2VzdC0+c2hhMSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGhh
c2gpOwogICAgIGlmICh1bnVzZWROb2Rlc01hcCkKICAgICAgICAgdW51c2VkTm9kZXNNYXAtPmFk
ZChkaWdlc3QtPnNoYTEsIGRpZ2VzdC5nZXQoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjAyLDcgKzYwMiw3IEBAIGJvb2wgSW5zcGVjdG9yRnJvbnRl
bmRIb3N0OjpzaG93Q2VydGlmaWMKICAgICBpZiAoIWRhdGEpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihkYXRhLT5kYXRhKCks
IGRhdGEtPnNpemUoKSk7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyIHsg
KmRhdGEgfTsKICAgICBzdGQ6Om9wdGlvbmFsPENlcnRpZmljYXRlSW5mbz4gY2VydGlmaWNhdGVJ
bmZvOwogICAgIGRlY29kZXIgPj4gY2VydGlmaWNhdGVJbmZvOwogICAgIGlmICghY2VydGlmaWNh
dGVJbmZvKQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNE
YXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jl
c291cmNlc0RhdGEuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyAr
MTA2LDcgQEAgdW5zaWduZWQgTmV0d29ya1Jlc291cmNlc0RhdGE6OlJlc291cmNlRAogICAgICAg
ICBtX2NvbnRlbnQgPSBtX2RlY29kZXItPmRlY29kZUFuZEZsdXNoKG1fZGF0YUJ1ZmZlci0+ZGF0
YSgpLCBkYXRhTGVuZ3RoKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2Jhc2U2NEVuY29kZWQg
PSB0cnVlOwotICAgICAgICBtX2NvbnRlbnQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhtX2RhdGFC
dWZmZXItPmRhdGEoKSwgZGF0YUxlbmd0aCk7CisgICAgICAgIG1fY29udGVudCA9IGJhc2U2NEVu
Y29kZVRvU3RyaW5nKG1fZGF0YUJ1ZmZlci0+Ynl0ZXMoKSk7CiAgICAgfQogCiAgICAgbV9kYXRh
QnVmZmVyID0gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTY5OCw3ICsxNjk4LDcgQEAgc3RhdGljIFN0cmluZyBjb21wdXRlQ29u
dGVudFNlY3VyaXR5UG9saQogICAgIGF1dG8gY3J5cHRvRGlnZXN0ID0gUEFMOjpDcnlwdG9EaWdl
c3Q6OmNyZWF0ZShQQUw6OkNyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMjU2KTsKICAgICBj
cnlwdG9EaWdlc3QtPmFkZEJ5dGVzKGNvbnRlbnQuZGF0YSgpLCBjb250ZW50LnNpemUoKSk7CiAg
ICAgYXV0byBkaWdlc3QgPSBjcnlwdG9EaWdlc3QtPmNvbXB1dGVIYXNoKCk7Ci0gICAgcmV0dXJu
IG1ha2VTdHJpbmcoInNoYTI1Ni0iLCBiYXNlNjRFbmNvZGVkKGRpZ2VzdC5kYXRhKCksIGRpZ2Vz
dC5zaXplKCkpKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygic2hhMjU2LSIsIGJhc2U2NEVuY29k
ZWQoZGlnZXN0KSk7CiB9CiAKIFJlZjxQcm90b2NvbDo6RE9NOjpOb2RlPiBJbnNwZWN0b3JET01B
Z2VudDo6YnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqIG5vZGUsIGludCBkZXB0aCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5l
dHdvcmtBZ2VudC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTc1LDcgKzE3NSw3IEBAIFJlZjxQcm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0RnJhbWU+IGIK
ICAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldEZyYW1lOjpjcmVhdGUoKQog
ICAgICAgICAuc2V0T3Bjb2RlKGZyYW1lLm9wQ29kZSkKICAgICAgICAgLnNldE1hc2soZnJhbWUu
bWFza2VkKQotICAgICAgICAuc2V0UGF5bG9hZERhdGEoZnJhbWUub3BDb2RlID09IDEgPyBTdHJp
bmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxv
YWRMZW5ndGgpIDogYmFzZTY0RW5jb2RlVG9TdHJpbmcoZnJhbWUucGF5bG9hZCwgZnJhbWUucGF5
bG9hZExlbmd0aCkpCisgICAgICAgIC5zZXRQYXlsb2FkRGF0YShmcmFtZS5vcENvZGUgPT0gMSA/
IFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soZnJhbWUucGF5bG9hZCwgZnJhbWUu
cGF5bG9hZExlbmd0aCkgOiBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgZnJhbWUucGF5bG9h
ZCwgZnJhbWUucGF5bG9hZExlbmd0aCB9KSkKICAgICAgICAgLnNldFBheWxvYWRMZW5ndGgoZnJh
bWUucGF5bG9hZExlbmd0aCkKICAgICAgICAgLnJlbGVhc2UoKTsKIH0KQEAgLTU4OSw3ICs1ODks
NyBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlkUmVjZWl2ZURhCiAgICAgICAgIC8v
IE9mdGVuIHRoZSBkYXRhIGlzIHRleHQgYW5kIHdlIHdvdWxkIGhhdmUgYSBkZWNvZGVyLCBidXQg
Zm9yIG5vbi10ZXh0IHdlIHdvbid0IGhhdmUgYSBkZWNvZGVyLgogICAgICAgICAvLyBTeW5jIFhI
UnMgbWF5IG5vdCBoYXZlIGEgY2FjaGVkIHJlc291cmNlLCB3aGlsZSBub24tc3luYyBYSFJzIHVz
dWFsbHkgdHJhbnNmZXIgZGF0YSBvdmVyIG9uIGNvbXBsZXRpb24uCiAgICAgICAgIGlmIChtX2xv
YWRpbmdYSFJTeW5jaHJvbm91c2x5ICYmIHJlc291cmNlRGF0YSAmJiAhcmVzb3VyY2VEYXRhLT5o
YXNCdWZmZXJlZERhdGEoKSAmJiAhcmVzb3VyY2VEYXRhLT5jYWNoZWRSZXNvdXJjZSgpKQotICAg
ICAgICAgICAgbV9yZXNvdXJjZXNEYXRhLT5zZXRSZXNvdXJjZUNvbnRlbnQocmVxdWVzdElkLCBi
YXNlNjRFbmNvZGVUb1N0cmluZyhkYXRhLCBkYXRhTGVuZ3RoKSwgdHJ1ZSk7CisgICAgICAgICAg
ICBtX3Jlc291cmNlc0RhdGEtPnNldFJlc291cmNlQ29udGVudChyZXF1ZXN0SWQsIGJhc2U2NEVu
Y29kZVRvU3RyaW5nKFNwYW4geyBkYXRhLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGF0YUxlbmd0
aCkgfSksIHRydWUpOwogICAgIH0KIAogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kYXRhUmVj
ZWl2ZWQocmVxdWVzdElkLCB0aW1lc3RhbXAoKSwgZGF0YUxlbmd0aCwgZW5jb2RlZERhdGFMZW5n
dGgpOwpAQCAtMTAwNSw3ICsxMDA1LDcgQEAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5n
PiBJbnNwZWN0bwogCiAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciBlbmNvZGVyOwogICAg
IFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz46OmVuY29k
ZShlbmNvZGVyLCBjZXJ0aWZpY2F0ZS52YWx1ZSgpKTsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2Rl
VG9TdHJpbmcoZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOworICAgIHJl
dHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhlbmNvZGVyLmJ1ZmZlcigpKTsKIH0KIAogV2ViU29j
a2V0KiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OndlYlNvY2tldEZvclJlcXVlc3RJZChjb25zdCBQ
cm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiByZXF1ZXN0SWQpCkBAIC0xNDEwLDcgKzE0MTAs
NyBAQCBib29sIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6Y2FjaGVkUmVzb3VyCiAgICAgICAgIH0K
IAogICAgICAgICAqYmFzZTY0RW5jb2RlZCA9IHRydWU7Ci0gICAgICAgICpyZXN1bHQgPSBiYXNl
NjRFbmNvZGVUb1N0cmluZyhidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpOworICAgICAg
ICAqcmVzdWx0ID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoYnVmZmVyLT5ieXRlcygpKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAkocmV2aXNpb24gMjc4
ODA5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdl
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyArMTEzLDcgQEAgYm9vbCBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OnNoYXJlZEJ1ZmZlckNvbgogYm9vbCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRhdGFD
b250ZW50KGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIHNpemUsIGNvbnN0IFN0cmluZyYg
dGV4dEVuY29kaW5nTmFtZSwgYm9vbCB3aXRoQmFzZTY0RW5jb2RlLCBTdHJpbmcqIHJlc3VsdCkK
IHsKICAgICBpZiAod2l0aEJhc2U2NEVuY29kZSkgewotICAgICAgICAqcmVzdWx0ID0gYmFzZTY0
RW5jb2RlVG9TdHJpbmcoZGF0YSwgc2l6ZSk7CisgICAgICAgICpyZXN1bHQgPSBiYXNlNjRFbmNv
ZGVUb1N0cmluZyhTcGFuIHsgZGF0YSwgc2l6ZSB9KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCkBAIC0xMTAyLDcgKzExMDIsNyBAQCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJp
bmc+IEluc3BlY3RvCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQ291bGQgbm90IGNy
ZWF0ZSB3ZWIgYXJjaGl2ZSBmb3IgbWFpbiBmcmFtZSJfcyk7CiAKICAgICBSZXRhaW5QdHI8Q0ZE
YXRhUmVmPiBidWZmZXIgPSBhcmNoaXZlLT5yYXdEYXRhUmVwcmVzZW50YXRpb24oKTsKLSAgICBy
ZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoQ0ZEYXRhR2V0Qnl0ZVB0cihidWZmZXIuZ2V0KCkp
LCBDRkRhdGFHZXRMZW5ndGgoYnVmZmVyLmdldCgpKSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29k
ZVRvU3RyaW5nKFNwYW4geyBDRkRhdGFHZXRCeXRlUHRyKGJ1ZmZlci5nZXQoKSksIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihDRkRhdGFHZXRMZW5ndGgoYnVmZmVyLmdldCgpKSkgfSk7CiB9CiAjZW5k
aWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNo
aXZlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRt
bC9NSFRNTEFyY2hpdmUuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODEsMTYgKzE4MSwxNCBAQCBSZWY8U2hhcmVkQnVmZmVyPiBNSFRNTEFyY2hpdmU6OmdlbmVyYXRl
CiAgICAgICAgIG1odG1sRGF0YS0+YXBwZW5kKGFzY2lpU3RyaW5nLmRhdGEoKSwgYXNjaWlTdHJp
bmcubGVuZ3RoKCkpOwogCiAgICAgICAgIC8vIEZJWE1FOiBpZGVhbGx5IHdlIHdvdWxkIGVuY29k
ZSB0aGUgY29udGVudCBhcyBhIHN0cmVhbSB3aXRob3V0IGhhdmluZyB0byBmZXRjaCBpdCBhbGwu
Ci0gICAgICAgIGF1dG8qIGRhdGEgPSByZXNvdXJjZS5kYXRhLT5kYXRhKCk7Ci0gICAgICAgIHNp
emVfdCBkYXRhTGVuZ3RoID0gcmVzb3VyY2UuZGF0YS0+c2l6ZSgpOwogICAgICAgICBpZiAoIXN0
cmNtcChjb250ZW50RW5jb2RpbmcsIHF1b3RlZFByaW50YWJsZSkpIHsKLSAgICAgICAgICAgIGF1
dG8gZW5jb2RlZERhdGEgPSBxdW90ZWRQcmludGFibGVFbmNvZGUoZGF0YSwgZGF0YUxlbmd0aCk7
CisgICAgICAgICAgICBhdXRvIGVuY29kZWREYXRhID0gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKHJl
c291cmNlLmRhdGEtPmJ5dGVzKCkpOwogICAgICAgICAgICAgbWh0bWxEYXRhLT5hcHBlbmQoZW5j
b2RlZERhdGEuZGF0YSgpLCBlbmNvZGVkRGF0YS5zaXplKCkpOwogICAgICAgICAgICAgbWh0bWxE
YXRhLT5hcHBlbmQoIlxyXG4iLCAyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFT
U0VSVCghc3RyY21wKGNvbnRlbnRFbmNvZGluZywgYmFzZTY0KSk7CiAgICAgICAgICAgICAvLyBX
ZSBhcmUgbm90IHNwZWNpZnlpbmcgaW5zZXJ0TEZzID0gdHJ1ZSBiZWxvdyBhcyBpdCB3b3VsZCBj
dXQgdGhlIGxpbmVzIHdpdGggTEZzIGFuZCBNSFRNTCByZXF1aXJlcyBDUkxGcy4KLSAgICAgICAg
ICAgIGF1dG8gZW5jb2RlZERhdGEgPSBiYXNlNjRFbmNvZGVUb1ZlY3RvcihkYXRhLCBkYXRhTGVu
Z3RoKTsKKyAgICAgICAgICAgIGF1dG8gZW5jb2RlZERhdGEgPSBiYXNlNjRFbmNvZGVUb1ZlY3Rv
cihyZXNvdXJjZS5kYXRhLT5ieXRlcygpKTsKICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBtYXhp
bXVtTGluZUxlbmd0aCA9IDc2OwogICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gMDsKICAgICAg
ICAgICAgIHNpemVfdCBlbmNvZGVkRGF0YUxlbmd0aCA9IGVuY29kZWREYXRhLnNpemUoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MUGFyc2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTFBh
cnNlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNo
aXZlL21odG1sL01IVE1MUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDcgKzE5NSw3
IEBAIFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IE1IVE1MUGFyc2VyOjpwYXIKICAgICBWZWN0b3I8
dWludDhfdD4gZGF0YTsKICAgICBzd2l0Y2ggKG1pbWVIZWFkZXIuY29udGVudFRyYW5zZmVyRW5j
b2RpbmcoKSkgewogICAgIGNhc2UgTUlNRUhlYWRlcjo6QmFzZTY0OiB7Ci0gICAgICAgIGF1dG8g
ZGVjb2RlZERhdGEgPSBiYXNlNjREZWNvZGUoY29udGVudC0+ZGF0YSgpLCBjb250ZW50LT5zaXpl
KCkpOworICAgICAgICBhdXRvIGRlY29kZWREYXRhID0gYmFzZTY0RGVjb2RlKGNvbnRlbnQtPmJ5
dGVzKCkpOwogICAgICAgICBpZiAoIWRlY29kZWREYXRhKSB7CiAgICAgICAgICAgICBMT0dfRVJS
T1IoIkludmFsaWQgYmFzZTY0IGNvbnRlbnQgZm9yIE1IVE1MIHBhcnQuIik7CiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKQEAgLTIwNCw3ICsyMDQsNyBAQCBSZWZQdHI8QXJjaGl2ZVJlc291
cmNlPiBNSFRNTFBhcnNlcjo6cGFyCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIE1J
TUVIZWFkZXI6OlF1b3RlZFByaW50YWJsZToKLSAgICAgICAgZGF0YSA9IHF1b3RlZFByaW50YWJs
ZURlY29kZShjb250ZW50LT5kYXRhKCksIGNvbnRlbnQtPnNpemUoKSk7CisgICAgICAgIGRhdGEg
PSBxdW90ZWRQcmludGFibGVEZWNvZGUoY29udGVudC0+Ynl0ZXMoKSk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgTUlNRUhlYWRlcjo6U2V2ZW5CaXQ6CiAgICAgY2FzZSBNSU1FSGVhZGVyOjpC
aW5hcnk6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcAko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkxvYWRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIEljb25Mb2FkZXI6
Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlCiAgICAgICAgIGRhdGEgPSBudWxscHRyOwogCiAgICAg
Y29uc3RleHByIHVpbnQ4X3QgcGRmTWFnaWNOdW1iZXJbXSA9IHsgJyUnLCAnUCcsICdEJywgJ0Yn
IH07Ci0gICAgaWYgKGRhdGEgJiYgZGF0YS0+c3RhcnRzV2l0aChTcGFuIHsgcGRmTWFnaWNOdW1i
ZXIsIHN0ZDo6c2l6ZShwZGZNYWdpY051bWJlcikgfSkpIHsKKyAgICBpZiAoZGF0YSAmJiBkYXRh
LT5zdGFydHNXaXRoKHBkZk1hZ2ljTnVtYmVyKSkgewogICAgICAgICBMT0coSWNvbkRhdGFiYXNl
LCAiSWNvbkxvYWRlcjo6ZmluaXNoTG9hZGluZygpIC0gSWdub3JpbmcgaWNvbiBhdCAlcyBiZWNh
dXNlIGl0IGFwcGVhcnMgdG8gYmUgYSBQREYiLCBtX3Jlc291cmNlLT51cmwoKS5zdHJpbmcoKS5h
c2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIGRhdGEgPSBudWxscHRyOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0Jhc2U2NFV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzgsNyArMzgsNyBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IEJhc2U2NFV0aWxpdGllczo6YnRv
CiAgICAgaWYgKCFzdHJpbmdUb0VuY29kZS5pc0FsbExhdGluMSgpKQogICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSW52YWxpZENoYXJhY3RlckVycm9yIH07CiAKLSAgICByZXR1cm4gYmFzZTY0
RW5jb2RlVG9TdHJpbmcoc3RyaW5nVG9FbmNvZGUubGF0aW4xKCkpOworICAgIHJldHVybiBiYXNl
NjRFbmNvZGVUb1N0cmluZyhzdHJpbmdUb0VuY29kZS5sYXRpbjEoKS5ieXRlcygpKTsKIH0KIAog
RXhjZXB0aW9uT3I8U3RyaW5nPiBCYXNlNjRVdGlsaXRpZXM6OmF0b2IoY29uc3QgU3RyaW5nJiBl
bmNvZGVkU3RyaW5nKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1
c3RvbURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3Rl
Ym9hcmRDdXN0b21EYXRhLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3
ICs4OSw3IEBAIFJlZjxTaGFyZWRCdWZmZXI+IFBhc3RlYm9hcmRDdXN0b21EYXRhOjoKICAgICBl
bmNvZGVyIDw8IG1fb3JpZ2luOwogICAgIGVuY29kZXIgPDwgc2FtZU9yaWdpbkN1c3RvbVN0cmlu
Z0RhdGEoKTsKICAgICBlbmNvZGVyIDw8IG9yZGVyZWRUeXBlcygpOwotICAgIHJldHVybiBTaGFy
ZWRCdWZmZXI6OmNyZWF0ZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7
CisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCkpOwogfQog
CiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6ZnJvbVBlcnNpc3Rl
bmNlRGVjb2RlcihXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyJiYgZGVjb2RlcikKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzYsMTggKzM2LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU2hhcmVkQnVm
ZmVyOjpTaGFyZWRCdWZmZXIoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCitTaGFy
ZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKLSAg
ICBhcHBlbmQoZGF0YSwgc2l6ZSk7Ci19Ci0KLVNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKGNv
bnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKQotewotICAgIGFwcGVuZChyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgc2l6ZSk7CisgICAgYXBwZW5kKGRhdGEpOwogfQog
CiBTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYm
IGZpbGVEYXRhKQotICAgIDogbV9zaXplKGZpbGVEYXRhLnNpemUoKSkKKyAgICA6IG1fc2l6ZShm
aWxlRGF0YS5kYXRhKCkuc2l6ZSgpKQogewogICAgIG1fc2VnbWVudHMuYXBwZW5kKHswLCBEYXRh
U2VnbWVudDo6Y3JlYXRlKFdURk1vdmUoZmlsZURhdGEpKX0pOwogfQpAQCAtMTg4LDEzICsxODMs
MTMgQEAgdm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVuZChjb25zdCBTaGFyZWRCdQogICAgIEFTU0VS
VChpbnRlcm5hbGx5Q29uc2lzdGVudCgpKTsKIH0KIAotdm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVu
ZChjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoKQordm9pZCBTaGFyZWRCdWZmZXI6
OmFwcGVuZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKICAgICBBU1NFUlQoIW1faGFz
QmVlbkNvbWJpbmVkSW50b09uZVNlZ21lbnQpOwogICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3I7
Ci0gICAgdmVjdG9yLmFwcGVuZChkYXRhLCBsZW5ndGgpOwotICAgIG1fc2VnbWVudHMuYXBwZW5k
KHttX3NpemUsIERhdGFTZWdtZW50OjpjcmVhdGUoV1RGTW92ZSh2ZWN0b3IpKX0pOwotICAgIG1f
c2l6ZSArPSBsZW5ndGg7CisgICAgdmVjdG9yLmFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKTsKKyAgICBtX3NlZ21lbnRzLmFw
cGVuZCh7IG1fc2l6ZSwgRGF0YVNlZ21lbnQ6OmNyZWF0ZShXVEZNb3ZlKHZlY3RvcikpIH0pOwor
ICAgIG1fc2l6ZSArPSBkYXRhLnNpemUoKTsKICAgICBBU1NFUlQoaW50ZXJuYWxseUNvbnNpc3Rl
bnQoKSk7CiB9CiAKQEAgLTIzMiw3ICsyMjcsNyBAQCB2b2lkIFNoYXJlZEJ1ZmZlcjo6Zm9yRWFj
aFNlZ21lbnQoY29uc3QgCiAgICAgICAgIGFwcGx5KFNwYW4geyBzZWdtZW50LnNlZ21lbnQtPmRh
dGEoKSwgc2VnbWVudC5zZWdtZW50LT5zaXplKCkgfSk7CiB9CiAKLWJvb2wgU2hhcmVkQnVmZmVy
OjpzdGFydHNXaXRoKGNvbnN0IFNwYW48Y29uc3QgdWludDhfdD4mIHByZWZpeCkgY29uc3QKK2Jv
b2wgU2hhcmVkQnVmZmVyOjpzdGFydHNXaXRoKGNvbnN0IFNwYW48Y29uc3Qgc3RkOjpieXRlPiYg
cHJlZml4KSBjb25zdAogewogICAgIGlmIChwcmVmaXguZW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CkBAIC0yNDAsNyArMjM1LDcgQEAgYm9vbCBTaGFyZWRCdWZmZXI6OnN0YXJ0c1dpdGgo
Y29uc3QgU3BhbgogICAgIGlmIChzaXplKCkgPCBwcmVmaXguc2l6ZSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBjb25zdCB1aW50OF90KiBwcmVmaXhQdHIgPSBwcmVmaXguZGF0YSgp
OworICAgIGF1dG8qIHByZWZpeFB0ciA9IHByZWZpeC5kYXRhKCk7CiAgICAgc2l6ZV90IHJlbWFp
bmluZyA9IHByZWZpeC5zaXplKCk7CiAgICAgZm9yIChhdXRvJiBzZWdtZW50IDogbV9zZWdtZW50
cykgewogICAgICAgICBzaXplX3QgYW1vdW50VG9Db21wYXJlVGhpc1RpbWUgPSBzdGQ6Om1pbihy
ZW1haW5pbmcsIHNlZ21lbnQuc2VnbWVudC0+c2l6ZSgpKTsKQEAgLTMwMSwxMSArMjk2LDQwIEBA
IGNvbnN0IHVpbnQ4X3QqIFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQKICNpZiBVU0UoR1NUUkVB
TUVSKQogICAgICAgICBbXShjb25zdCBSZWZQdHI8R3N0TWFwcGVkT3duZWRCdWZmZXI+JiBkYXRh
KSB7IHJldHVybiBkYXRhLT5kYXRhKCk7IH0sCiAjZW5kaWYKLSAgICAgICAgW10oY29uc3QgRmls
ZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IHVpbnQ4X3QqPihkYXRhLmRhdGEoKSk7IH0KKyAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6
TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KGRhdGEuZGF0YSgpLmRhdGEoKSk7IH0KICAgICApOwogICAgIHJldHVybiBXVEY6OnZp
c2l0KHZpc2l0b3IsIG1faW1tdXRhYmxlRGF0YSk7CiB9CiAKK1NwYW48Y29uc3Qgc3RkOjpieXRl
PiBTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpieXRlcygpIGNvbnN0Cit7CisgICAgYXV0byB2
aXNpdG9yID0gV1RGOjptYWtlVmlzaXRvcigKKyAgICAgICAgW10oY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBkYXRhKSB7CisgICAgICAgICAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgZGF0YSB9KTsK
KyAgICAgICAgfSwKKyNpZiBVU0UoQ0YpCisgICAgICAgIFtdKGNvbnN0IFJldGFpblB0cjxDRkRh
dGFSZWY+JiBkYXRhKSB7CisgICAgICAgICAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgQ0ZEYXRh
R2V0Qnl0ZVB0cihkYXRhLmdldCgpKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihDRkRhdGFHZXRMZW5n
dGgoZGF0YS5nZXQoKSkpIH0pOworICAgICAgICB9LAorI2VuZGlmCisjaWYgVVNFKEdMSUIpCisg
ICAgICAgIFtdKGNvbnN0IEdSZWZQdHI8R0J5dGVzPiYgZGF0YSkgeworICAgICAgICAgICAgcmV0
dXJuIGFzQnl0ZXMoU3BhbiB7IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihnX2J5dGVzX2dl
dF9kYXRhKGRhdGEuZ2V0KCksIG51bGxwdHIpKSwgZ19ieXRlc19nZXRfc2l6ZShkYXRhLmdldCgp
KSB9KTsKKyAgICAgICAgfSwKKyNlbmRpZgorI2lmIFVTRShHU1RSRUFNRVIpCisgICAgICAgIFtd
KGNvbnN0IFJlZlB0cjxHc3RNYXBwZWRPd25lZEJ1ZmZlcj4mIGRhdGEpIHsKKyAgICAgICAgICAg
IHJldHVybiBhc0J5dGVzKFNwYW4geyBkYXRhLT5kYXRhKCksIGRhdGEtPnNpemUoKSB9KTsKKyAg
ICAgICAgfSwKKyNlbmRpZgorICAgICAgICBbXShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxl
RGF0YSYgZGF0YSkgeworICAgICAgICAgICAgcmV0dXJuIGRhdGEuZGF0YSgpOworICAgICAgICB9
CisgICAgKTsKKyAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBtX2ltbXV0YWJsZURhdGEp
OworCit9CisKIGJvb2wgU2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVudDo6Y29udGFpbnNNYXBwZWRG
aWxlRGF0YSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Rmls
ZVN5c3RlbTo6TWFwcGVkRmlsZURhdGE+KG1faW1tdXRhYmxlRGF0YSk7CkBAIC0zMTksNyArMzQz
LDcgQEAgdm9pZCBTaGFyZWRCdWZmZXI6OmhpbnRNZW1vcnlOb3ROZWVkZWRTbwogCiBXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyIFNoYXJlZEJ1ZmZlcjo6ZGVjb2RlcigpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIHsgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSgpKSwgc2l6ZSgp
IH07CisgICAgcmV0dXJuIHsgYnl0ZXMoKSB9OwogfQogCiBib29sIFNoYXJlZEJ1ZmZlcjo6b3Bl
cmF0b3I9PShjb25zdCBTaGFyZWRCdWZmZXImIG90aGVyKSBjb25zdApAQCAtMzg0LDcgKzQwOCw3
IEBAIHNpemVfdCBTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpzaXplKCkKICNpZiBVU0UoR1NU
UkVBTUVSKQogICAgICAgICBbXShjb25zdCBSZWZQdHI8R3N0TWFwcGVkT3duZWRCdWZmZXI+JiBk
YXRhKSB7IHJldHVybiBkYXRhLT5zaXplKCk7IH0sCiAjZW5kaWYKLSAgICAgICAgW10oY29uc3Qg
RmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsgcmV0dXJuIGRhdGEuc2l6ZSgpOyB9
CisgICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBkYXRhKSB7IHJl
dHVybiBkYXRhLmRhdGEoKS5zaXplKCk7IH0KICAgICApOwogICAgIHJldHVybiBXVEY6OnZpc2l0
KHZpc2l0b3IsIG1faW1tdXRhYmxlRGF0YSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TaGFyZWRCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TaGFyZWRCdWZmZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2hhcmVkQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDggKzY3LDEyIEBAIGNs
YXNzIFNoYXJlZEJ1ZmZlckRhdGFWaWV3OwogY2xhc3MgV0VCQ09SRV9FWFBPUlQgU2hhcmVkQnVm
ZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8U2hhcmVkQnVmZmVyPiB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hh
cmVkQnVmZmVyKTsgfQotICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoY29uc3Qg
dWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hhcmVk
QnVmZmVyKGRhdGEsIHNpemUpKTsgfQotICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVh
dGUoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
U2hhcmVkQnVmZmVyKGRhdGEsIHNpemUpKTsgfQorICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVy
PiBjcmVhdGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpIHsgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU2hhcmVkQnVmZmVyKGRhdGEpKTsgfQorICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBj
cmVhdGUoU3Bhbjxjb25zdCB1aW50OF90PiBkYXRhKSB7IHJldHVybiBjcmVhdGUoYXNCeXRlcyhk
YXRhKSk7IH0KKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKFNwYW48Y29uc3Qg
Y2hhcj4gZGF0YSkgeyByZXR1cm4gY3JlYXRlKGFzQnl0ZXMoZGF0YSkpOyB9CisgICAgc3RhdGlj
IFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShjb25zdCBzdGQ6OmJ5dGUqIGRhdGEsIHNpemVfdCBz
aXplKSB7IHJldHVybiBjcmVhdGUoU3BhbiB7IGRhdGEsIHNpemUgfSk7IH0KKyAgICBzdGF0aWMg
UmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXpl
KSB7IHJldHVybiBjcmVhdGUoU3BhbiB7IGRhdGEsIHNpemUgfSk7IH0KKyAgICBzdGF0aWMgUmVm
PFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKSB7IHJl
dHVybiBjcmVhdGUoU3BhbiB7IGRhdGEsIHNpemUgfSk7IH0KICAgICBzdGF0aWMgUmVmPFNoYXJl
ZEJ1ZmZlcj4gY3JlYXRlKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYgbWFwcGVkRmlsZURh
dGEpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hhcmVkQnVmZmVyKFdURk1vdmUobWFwcGVkRmls
ZURhdGEpKSk7IH0KIAogICAgIGVudW0gY2xhc3MgTWF5VXNlRmlsZU1hcHBpbmcgOiBib29sIHsg
Tm8sIFllcyB9OwpAQCAtMTAxLDYgKzEwNSw4IEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTogQXVk
aXQgdGhlIGNhbGwgc2l0ZXMgb2YgdGhpcyBmdW5jdGlvbiBhbmQgcmVwbGFjZSB0aGVtIHdpdGgg
aXRlcmF0aW9uIGlmIHBvc3NpYmxlLgogICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEoKSBjb25zdDsK
ICAgICBjb25zdCBjaGFyKiBkYXRhQXNDaGFyUHRyKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSgpKTsgfQorICAgIFNwYW48Y29uc3Qgc3RkOjpieXRl
PiBieXRlcygpIGNvbnN0IHsgcmV0dXJuIGFzQnl0ZXMoU3BhbiB7IGRhdGEoKSwgc2l6ZSgpIH0p
OyB9CisKICAgICBWZWN0b3I8dWludDhfdD4gY29weURhdGEoKSB7IHJldHVybiB7IGRhdGEoKSwg
c2l6ZSgpIH07IH0KIAogICAgIC8vIENvbWJpbmVzIGFsbCB0aGUgc2VnbWVudHMgaW50byBhIFZl
Y3RvciBhbmQgcmV0dXJucyB0aGF0IHZlY3RvciBhZnRlciBjbGVhcmluZyB0aGUgU2hhcmVkQnVm
ZmVyLgpAQCAtMTE1LDggKzEyMSwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0VtcHR5KCkgY29u
c3QgeyByZXR1cm4gIXNpemUoKTsgfQogCiAgICAgdm9pZCBhcHBlbmQoY29uc3QgU2hhcmVkQnVm
ZmVyJik7Ci0gICAgdm9pZCBhcHBlbmQoY29uc3QgdWludDhfdCosIHNpemVfdCk7Ci0gICAgdm9p
ZCBhcHBlbmQoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCkgeyBhcHBlbmQocmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSksIGxlbmd0aCk7IH0KKyAgICB2b2lkIGFw
cGVuZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOworICAgIHZvaWQgYXBwZW5kKFNwYW48Y29uc3Qg
dWludDhfdD4gZGF0YSkgeyBhcHBlbmQoYXNCeXRlcyhkYXRhKSk7IH0KKyAgICB2b2lkIGFwcGVu
ZChTcGFuPGNvbnN0IGNoYXI+IGRhdGEpIHsgYXBwZW5kKGFzQnl0ZXMoZGF0YSkpOyB9CisgICAg
dm9pZCBhcHBlbmQoY29uc3Qgc3RkOjpieXRlKiBkYXRhLCBzaXplX3QgbGVuZ3RoKSB7IGFwcGVu
ZChTcGFuIHsgZGF0YSwgbGVuZ3RoIH0pOyB9CisgICAgdm9pZCBhcHBlbmQoY29uc3QgdWludDhf
dCogZGF0YSwgc2l6ZV90IGxlbmd0aCkgeyBhcHBlbmQoU3BhbiB7IGRhdGEsIGxlbmd0aCB9KTsg
fQorICAgIHZvaWQgYXBwZW5kKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpIHsgYXBw
ZW5kKFNwYW4geyBkYXRhLCBsZW5ndGggfSk7IH0KICAgICB2b2lkIGFwcGVuZChWZWN0b3I8dWlu
dDhfdD4mJik7CiAKICAgICB2b2lkIGNsZWFyKCk7CkBAIC0xMzEsNiArMTQxLDggQEAgcHVibGlj
OgogICAgICAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCB1aW50OF90KiBkYXRhKCkgY29uc3Q7CiAg
ICAgICAgIFdFQkNPUkVfRVhQT1JUIHNpemVfdCBzaXplKCkgY29uc3Q7CiAKKyAgICAgICAgV0VC
Q09SRV9FWFBPUlQgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGJ5dGVzKCkgY29uc3Q7CisKICAgICAg
ICAgc3RhdGljIFJlZjxEYXRhU2VnbWVudD4gY3JlYXRlKFZlY3Rvcjx1aW50OF90PiYmIGRhdGEp
CiAgICAgICAgIHsKICAgICAgICAgICAgIGRhdGEuc2hyaW5rVG9GaXQoKTsKQEAgLTE4Nyw3ICsx
OTksOSBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIHZvaWQgZm9yRWFjaFNlZ21lbnQoY29uc3Qg
RnVuY3Rpb248dm9pZChjb25zdCBTcGFuPGNvbnN0IHVpbnQ4X3Q+Jik+JikgY29uc3Q7Ci0gICAg
Ym9vbCBzdGFydHNXaXRoKGNvbnN0IFNwYW48Y29uc3QgdWludDhfdD4mIHByZWZpeCkgY29uc3Q7
CisKKyAgICBib29sIHN0YXJ0c1dpdGgoY29uc3QgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+JiBwcmVm
aXgpIGNvbnN0OworICAgIGJvb2wgc3RhcnRzV2l0aChjb25zdCBTcGFuPGNvbnN0IHVpbnQ4X3Q+
JiBwcmVmaXgpIGNvbnN0IHsgcmV0dXJuIHN0YXJ0c1dpdGgoYXNCeXRlcyhwcmVmaXgpKTsgfQog
CiAgICAgc3RydWN0IERhdGFTZWdtZW50VmVjdG9yRW50cnkgewogICAgICAgICBzaXplX3QgYmVn
aW5Qb3NpdGlvbjsKQEAgLTIxMiw4ICsyMjYsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAg
ZXhwbGljaXQgU2hhcmVkQnVmZmVyKCkgPSBkZWZhdWx0OwotICAgIGV4cGxpY2l0IFNoYXJlZEJ1
ZmZlcihjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKLSAgICBleHBsaWNpdCBTaGFyZWRCdWZmZXIo
Y29uc3QgY2hhciosIHNpemVfdCk7CisgICAgZXhwbGljaXQgU2hhcmVkQnVmZmVyKFNwYW48Y29u
c3Qgc3RkOjpieXRlPik7CiAgICAgZXhwbGljaXQgU2hhcmVkQnVmZmVyKFZlY3Rvcjx1aW50OF90
PiYmKTsKICAgICBleHBsaWNpdCBTaGFyZWRCdWZmZXIoRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURh
dGEmJik7CiAjaWYgVVNFKENGKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
Y29jb2EvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0NB
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBA
CiAKICNpbmNsdWRlICJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSA8Q29yZUF1
ZGlvL0NvcmVBdWRpb1R5cGVzLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC04MCwxMyArODEsMTMgQEAgcHJpdmF0ZToKIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+CiB2b2lkIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0CiB7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oJm1fc3RyZWFtRGVzY3JpcHRpb24pLCBzaXpl
b2YobV9zdHJlYW1EZXNjcmlwdGlvbiksIDEpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKFNwYW4geyAmbV9zdHJlYW1EZXNjcmlwdGlvbiwgMSB9LCAxKTsKIH0KIAogdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KIGJvb2wgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikK
IHsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4oJmRlc2NyaXB0aW9uLm1fc3RyZWFtRGVzY3JpcHRpb24pLCBzaXplb2Yo
ZGVzY3JpcHRpb24ubV9zdHJlYW1EZXNjcmlwdGlvbiksIDEpOworICAgIHJldHVybiBkZWNvZGVy
LmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJmRlc2NyaXB0aW9uLm1fc3RyZWFtRGVzY3Jp
cHRpb24sIDEgfSwgMSk7CiB9CiAKIGlubGluZSBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24gdG9D
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oY29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZGVz
Y3JpcHRpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9j
bGVhcmtleS9DRE1DbGVhcktleS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtl
eS9DRE1DbGVhcktleS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OCwxNSArMTk4LDEzIEBAIHN0
YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBleHRyYWN0S2V5aWRzRnIKIHsKICAgICBSZWY8U2hhcmVk
QnVmZmVyPiBrZXlJZHMgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZSgpOwogCi0gICAgc3RkOjpwYWly
PHVuc2lnbmVkLCB1bnNpZ25lZD4ga2V5SWRzTWFwID0gZXh0cmFjdEtleWlkc0xvY2F0aW9uRnJv
bUNlbmNJbml0RGF0YShpbml0RGF0YSk7Ci0gICAgdW5zaWduZWQga2V5SWRDb3VudCA9IGtleUlk
c01hcC5maXJzdDsKLSAgICB1bnNpZ25lZCBpbmRleCA9IGtleUlkc01hcC5zZWNvbmQ7CisgICAg
YXV0byBba2V5SWRDb3VudCwgaW5kZXhdID0gZXh0cmFjdEtleWlkc0xvY2F0aW9uRnJvbUNlbmNJ
bml0RGF0YShpbml0RGF0YSk7CiAKICAgICAvLyBDaGVjayBpZiBpbml0RGF0YSBpcyBhIHZhbGlk
IENFTkMgaW5pdERhdGEuCiAgICAgaWYgKCFrZXlJZENvdW50IHx8ICFpbmRleCkKICAgICAgICAg
cmV0dXJuIGtleUlkczsKIAotICAgIGF1dG8qIGRhdGEgPSBpbml0RGF0YS5kYXRhKCk7CisgICAg
YXV0byBkYXRhID0gaW5pdERhdGEuYnl0ZXMoKTsKIAogICAgIGF1dG8gb2JqZWN0ID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKICAgICBhdXRvIGtleUlkc0FycmF5ID0gSlNPTjo6QXJyYXk6OmNy
ZWF0ZSgpOwpAQCAtMjE4LDcgKzIxNiw3IEBAIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBleHRy
YWN0S2V5aWRzRnIKICAgICAvLyAia2lkcyIKICAgICAvLyBBbiBhcnJheSBvZiBrZXkgSURzLiBF
YWNoIGVsZW1lbnQgb2YgdGhlIGFycmF5IGlzIHRoZSBiYXNlNjR1cmwgZW5jb2Rpbmcgb2YgdGhl
IG9jdGV0IHNlcXVlbmNlIGNvbnRhaW5pbmcgdGhlIGtleSBJRCB2YWx1ZS4KICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwga2V5SWRDb3VudDsgaSsrKSB7Ci0gICAgICAgIGtleUlkc0FycmF5
LT5wdXNoU3RyaW5nKGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKCZkYXRhW2luZGV4XSwgQ2xlYXJL
ZXk6OktleUlEU2l6ZUluQnl0ZXMpKTsKKyAgICAgICAga2V5SWRzQXJyYXktPnB1c2hTdHJpbmco
YmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoZGF0YS5zdWJzcGFuKGluZGV4LCBDbGVhcktleTo6S2V5
SURTaXplSW5CeXRlcykpKTsKICAgICAgICAgaW5kZXggKz0gQ2xlYXJLZXk6OktleUlEU2l6ZUlu
Qnl0ZXM7CiAgICAgfQogCkBAIC0yNDUsNyArMjQzLDcgQEAgc3RhdGljIFJlZjxTaGFyZWRCdWZm
ZXI+IGV4dHJhY3RLZXlJZEZybwogICAgIC8vIFRoZSBmb3JtYXQgaXMgYSBKU09OIG9iamVjdCBj
b250YWluaW5nIHRoZSBmb2xsb3dpbmcgbWVtYmVyczoKICAgICAvLyAia2lkcyIKICAgICAvLyBB
biBhcnJheSBvZiBrZXkgSURzLiBFYWNoIGVsZW1lbnQgb2YgdGhlIGFycmF5IGlzIHRoZSBiYXNl
NjR1cmwgZW5jb2Rpbmcgb2YgdGhlIG9jdGV0IHNlcXVlbmNlIGNvbnRhaW5pbmcgdGhlIGtleSBJ
RCB2YWx1ZS4KLSAgICBrZXlJZHNBcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVUb1N0
cmluZyhpbml0RGF0YS5kYXRhKCksIGluaXREYXRhLnNpemUoKSkpOworICAgIGtleUlkc0FycmF5
LT5wdXNoU3RyaW5nKGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGluaXREYXRhLmJ5dGVzKCkpKTsK
IAogICAgIG9iamVjdC0+c2V0QXJyYXkoImtpZHMiLCBXVEZNb3ZlKGtleUlkc0FycmF5KSk7CiAg
ICAgQ1N0cmluZyBqc29uRGF0YSA9IG9iamVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgpOwpAQCAt
NTc4LDkgKzU3Niw4IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlbW92ZVMK
IAogICAgIC8vIENvbnN0cnVjdCB0aGUgS2V5U3RhdHVzVmVjdG9yIG9iamVjdCwgcmVwcmVzZW50
aW5nIHJlbGVhc2VkIGtleXMsIGFuZCB0aGUgbWVzc2FnZSBpbiB0aGUKICAgICAvLyAnbGljZW5z
ZSByZWxlYXNlJyBmb3JtYXQuCi0gICAgS2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvciA9
IG1fa2V5U3RvcmUuYWxsS2V5c0FzKENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpSZWxl
YXNlZCk7Ci0gICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbWVzc2FnZTsKLSAgICB7CisgICAgYXV0
byBrZXlTdGF0dXNWZWN0b3IgPSBtX2tleVN0b3JlLmFsbEtleXNBcyhDRE1JbnN0YW5jZVNlc3Np
b246OktleVN0YXR1czo6UmVsZWFzZWQpOworICAgIGF1dG8gbWVzc2FnZSA9IFsmXXsKICAgICAg
ICAgLy8gQ29uc3RydWN0IEpTT04gdGhhdCByZXByZXNlbnRzIHRoZSAnbGljZW5zZSByZWxlYXNl
JyBmb3JtYXQsIGNyZWF0aW5nIGEgJ2tpZHMnIGFycmF5CiAgICAgICAgIC8vIG9mIGJhc2U2NFVS
TC1lbmNvZGVkIGtleSBJRHMgZm9yIGFsbCBrZXlzIHRoYXQgd2VyZSBhc3NvY2lhdGVkIHdpdGgg
dGhpcyBzZXNzaW9uLgogICAgICAgICBhdXRvIHJvb3RPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwpAQCAtNTg4LDcgKzU4NSw3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJL
ZXk6OnJlbW92ZVMKICAgICAgICAgICAgIGF1dG8gYXJyYXkgPSBKU09OOjpBcnJheTo6Y3JlYXRl
KCk7CiAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IG1fa2V5U3RvcmUpIHsKICAg
ICAgICAgICAgICAgICBBU1NFUlQoa2V5LT5pZCgpLnNpemUoKSA8PSBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkPjo6bWF4KCkpOwotICAgICAgICAgICAgICAgIGFycmF5LT5wdXNoU3RyaW5n
KGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGtleS0+aWQoKS5kYXRhKCksIGtleS0+aWQoKS5zaXpl
KCkpKTsKKyAgICAgICAgICAgICAgICBhcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVU
b1N0cmluZyhrZXktPmlkKCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJvb3RPYmpl
Y3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92ZShhcnJheSkpOwogICAgICAgICB9CkBAIC01OTYs
MTEgKzU5MywxMSBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTCiAg
ICAgICAgIC8vIENvcHkgdGhlIEpTT04gZGF0YSBpbnRvIGEgU2hhcmVkQnVmZmVyIG9iamVjdC4K
ICAgICAgICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmcgPSByb290T2JqZWN0LT50b0pTT05TdHJpbmco
KTsKICAgICAgICAgQ1N0cmluZyBtZXNzYWdlQ1N0cmluZyA9IG1lc3NhZ2VTdHJpbmcudXRmOCgp
OwotICAgICAgICBtZXNzYWdlID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUobWVzc2FnZUNTdHJpbmcu
ZGF0YSgpLCBtZXNzYWdlQ1N0cmluZy5sZW5ndGgoKSk7Ci0gICAgfQorICAgICAgICByZXR1cm4g
U2hhcmVkQnVmZmVyOjpjcmVhdGUobWVzc2FnZUNTdHJpbmcuZGF0YSgpLCBtZXNzYWdlQ1N0cmlu
Zy5sZW5ndGgoKSk7CisgICAgfSgpOwogCiAgICAgbV9rZXlTdG9yZS5yZW1vdmVBbGxLZXlzKCk7
Ci0gICAgZGlzcGF0Y2hDYWxsYmFjayhXVEZNb3ZlKGtleVN0YXR1c1ZlY3RvciksIFJlZjxTaGFy
ZWRCdWZmZXI+KCptZXNzYWdlKSwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVkZWQpOworICAgIGRpc3Bh
dGNoQ2FsbGJhY2soV1RGTW92ZShrZXlTdGF0dXNWZWN0b3IpLCBXVEZNb3ZlKG1lc3NhZ2UpLCBT
dWNjZXNzVmFsdWU6OlN1Y2NlZWRlZCk7CiB9CiAKIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xl
YXJLZXk6OnN0b3JlUmVjb3JkT2ZLZXlVc2FnZShjb25zdCBTdHJpbmcmKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9LZXllZERlY29kZXJHZW5lcmljLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL0tleWVkRGVjb2RlckdlbmVy
aWMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5l
cmljL0tleWVkRGVjb2RlckdlbmVyaWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3
IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gcmVhZFN0cmluZygKICAgICAgICAgcmV0
dXJuIGVtcHR5U3RyaW5nKCk7CiAKICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyKHNpemUudmFs
dWUoKSk7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShidWZmZXIuZGF0
YSgpLCBzaXplLnZhbHVlKCkpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERh
dGEoU3BhbiB7IGJ1ZmZlciB9KSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICBh
dXRvIHJlc3VsdCA9IFN0cmluZzo6ZnJvbVVURjgoYnVmZmVyLmRhdGEoKSwgc2l6ZS52YWx1ZSgp
KTsKICAgICBpZiAocmVzdWx0LmlzTnVsbCgpKQpAQCAtMTE3LDcgKzExNyw3IEBAIEtleWVkRGVj
b2RlckdlbmVyaWM6OktleWVkRGVjb2RlckdlbmVyaWMKICAgICAgICAgICAgIGlmICghb2spCiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVy
KCpzaXplKTsKLSAgICAgICAgICAgIG9rID0gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEo
YnVmZmVyLmRhdGEoKSwgKnNpemUpOworICAgICAgICAgICAgb2sgPSBkZWNvZGVyLmRlY29kZUZp
eGVkTGVuZ3RoRGF0YShTcGFuIHsgYnVmZmVyIH0pOwogICAgICAgICAgICAgaWYgKCFvaykKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIG1fZGljdGlvbmFyeVN0YWNrLmxhc3Qo
KS0+YWRkKCprZXksIFdURk1vdmUoYnVmZmVyKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Nb2RlbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL01vZGVsLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL01vZGVsLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcg
QEAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgTW9kZWw6OmVuY29kZShFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2Rh
dGEtPnNpemUoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEobV9kYXRhLT5k
YXRhKCksIG1fZGF0YS0+c2l6ZSgpLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3Ro
RGF0YShtX2RhdGEtPmJ5dGVzKCksIDEpOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgpA
QCAtNzQsNyArNzQsNyBAQCBSZWZQdHI8TW9kZWw+IE1vZGVsOjpkZWNvZGUoRGVjb2RlciYgZGVj
CiAKICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKICAgICBkYXRhLmdyb3coKmxlbmd0aCk7Ci0g
ICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShkYXRhLmRhdGEoKSwgZGF0YS5z
aXplKCksIDEpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoZGF0YSwg
MSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIE1vZGVsOjpjcmVhdGUo
U2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShkYXRhKSkpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oCShyZXZpc2lvbiAyNzg4MDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQg
UGl4ZWxCdWZmZXIKIAogICAgIGVuY29kZXIgPDwgbV9mb3JtYXQ7CiAgICAgZW5jb2RlciA8PCBt
X3NpemU7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEobV9kYXRhLT5kYXRhKCks
IG1fZGF0YS0+Ynl0ZUxlbmd0aCgpLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3Ro
RGF0YShtX2RhdGEtPmJ5dGVzKCksIDEpOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBQaXhlbEJ1ZmZlcjo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCkBAIC0xMTMsNyArMTEzLDcgQEAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RkOjpv
cHRpb25hbDxQaQogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZXN1bHQtPm1fZGF0
YS0+ZGF0YSgpLCByZXN1bHQtPm1fZGF0YS0+Ynl0ZUxlbmd0aCgpLCAxKSkKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlc3VsdC0+bV9kYXRhLT53cml0YWJsZUJ5dGVz
KCksIDEpKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgcmV0dXJuIHJlc3Vs
dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUlu
c3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCShyZXZpc2lvbiAyNzg4MDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0
YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzE1LDcg
KzcxNSw3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmcKICAgICAg
ICAgaWRlbnRpZmllciA9IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhEYXRhOmlu
aXREYXRhLT5jcmVhdGVOU0RhdGEoKS5nZXQoKSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGlu
Z10pOwogI2lmIEhBVkUoRkFJUlBMQVlTVFJFQU1JTkdfQ0VOQ19JTklUREFUQSkKICAgICBlbHNl
IGlmIChpbml0RGF0YVR5cGUgPT0gSW5pdERhdGFSZWdpc3RyeTo6Y2VuY05hbWUoKSkgewotICAg
ICAgICBhdXRvIHBzc2hTdHJpbmcgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbml0RGF0YS0+ZGF0
YSgpLCBpbml0RGF0YS0+c2l6ZSgpKTsKKyAgICAgICAgYXV0byBwc3NoU3RyaW5nID0gYmFzZTY0
RW5jb2RlVG9TdHJpbmcoaW5pdERhdGEtPmJ5dGVzKCkpOwogICAgICAgICBpbml0aWFsaXphdGlv
bkRhdGEgPSBbTlNKU09OU2VyaWFsaXphdGlvbiBkYXRhV2l0aEpTT05PYmplY3Q6QHsgQCJwc3No
IjogKE5TU3RyaW5nKilwc3NoU3RyaW5nIH0gb3B0aW9uczpOU0pTT05Xcml0aW5nUHJldHR5UHJp
bnRlZCBlcnJvcjpuaWxdOwogICAgIH0KICNlbmRpZgpAQCAtMTE5NSw4ICsxMTk1LDggQEAgdm9p
ZCBDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZwogICAgICAgICAgICAgYXV0byBl
bnRyeSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBhdXRvJiBrZXlJRCA9
IHJlcXVlc3REYXRhLmZpcnN0OwogICAgICAgICAgICAgYXV0byYgcGF5bG9hZCA9IHJlcXVlc3RE
YXRhLnNlY29uZDsKLSAgICAgICAgICAgIGVudHJ5LT5zZXRTdHJpbmcoImtleUlEIiwgYmFzZTY0
RW5jb2RlVG9TdHJpbmcoa2V5SUQtPmRhdGEoKSwga2V5SUQtPnNpemUoKSkpOwotICAgICAgICAg
ICAgZW50cnktPnNldFN0cmluZygicGF5bG9hZCIsIGJhc2U2NEVuY29kZVRvU3RyaW5nKHBheWxv
YWQuZ2V0KCkuYnl0ZXMsIHBheWxvYWQuZ2V0KCkubGVuZ3RoKSk7CisgICAgICAgICAgICBlbnRy
eS0+c2V0U3RyaW5nKCJrZXlJRCIsIGJhc2U2NEVuY29kZVRvU3RyaW5nKGtleUlELT5ieXRlcygp
KSk7CisgICAgICAgICAgICBlbnRyeS0+c2V0U3RyaW5nKCJwYXlsb2FkIiwgYmFzZTY0RW5jb2Rl
VG9TdHJpbmcoU3BhbiB7IHN0YXRpY19jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KHBheWxvYWQuZ2V0
KCkuYnl0ZXMpLCBwYXlsb2FkLmdldCgpLmxlbmd0aCB9KSk7CiAgICAgICAgICAgICByZXF1ZXN0
SlNPTi0+cHVzaE9iamVjdChXVEZNb3ZlKGVudHJ5KSk7CiAgICAgICAgIH0KICAgICAgICAgYXV0
byByZXF1ZXN0QnVmZmVyID0gdXRmOEJ1ZmZlcihyZXF1ZXN0SlNPTi0+dG9KU09OU3RyaW5nKCkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRvck1hYy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU1NMS2V5R2VuZXJh
dG9yTWFjLm1tCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvU1NMS2V5R2VuZXJhdG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksNyArMjE5LDcg
QEAgc3RhdGljIFN0cmluZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZwogICAgIGlmIChTZWNB
c24xRW5jb2RlSXRlbShjb2RlciwgJnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZSwgc2lnbmVk
UHVibGljS2V5QW5kQ2hhbGxlbmdlVGVtcGxhdGUsICZlbmNvZGVkU2lnbmVkUHVibGljS2V5QW5k
Q2hhbGxlbmdlKSAhPSBub0VycikKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0
dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGVuY29kZWRTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVu
Z2UuRGF0YSwgZW5jb2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZS5MZW5ndGgpOworICAg
IHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgZW5jb2RlZFNpZ25lZFB1YmxpY0tl
eUFuZENoYWxsZW5nZS5EYXRhLCBlbmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlLkxl
bmd0aCB9KTsKIH0KIAogQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2Fw
YWJpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcy5oCShyZXZpc2lvbiAyNzg4MDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291
cmNlQ2FwYWJpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCwxNiArMTE0LDE2IEBAIHBy
aXZhdGU6CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBDYXBhYmlsaXR5VmFsdWVPclJh
bmdlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKLSAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmbV9taW5P
clZhbHVlKSwgc2l6ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZhbHVlVW5pb24pKTsKLSAgICBl
bmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPigmbV9tYXgpLCBzaXplb2YoVmFsdWVVbmlvbiksIGFsaWdub2YoVmFsdWVVbmlvbikpOwor
ICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmbV9taW5PclZhbHVlLCAx
IH0sIGFsaWdub2YoVmFsdWVVbmlvbikpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKFNwYW4geyAmbV9tYXgsIDEgfSwgYWxpZ25vZihWYWx1ZVVuaW9uKSk7CiAgICAgZW5jb2Rl
ciA8PCBtX3R5cGU7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CiBib29sIENhcGFiaWxp
dHlWYWx1ZU9yUmFuZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBDYXBhYmlsaXR5VmFsdWVP
clJhbmdlJiB2YWx1ZU9yUmFuZ2UpCiB7Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2YWx1ZU9yUmFuZ2UubV9taW5P
clZhbHVlKSwgc2l6ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZhbHVlVW5pb24pKQotICAgICAg
ICAmJiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPigmdmFsdWVPclJhbmdlLm1fbWF4KSwgc2l6ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZh
bHVlVW5pb24pKQorICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFu
IHsgJnZhbHVlT3JSYW5nZS5tX21pbk9yVmFsdWUsIDEgfSwgYWxpZ25vZihWYWx1ZVVuaW9uKSkK
KyAgICAgICAgJiYgZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZ2YWx1ZU9y
UmFuZ2UubV9tYXgsIDEgfSwgYWxpZ25vZihWYWx1ZVVuaW9uKSkKICAgICAgICAgJiYgZGVjb2Rl
ci5kZWNvZGUodmFsdWVPclJhbmdlLm1fdHlwZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVk
aWFTb3VyY2VDZW50ZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM5LDEzICsxMzksMTMgQEAgc3RhdGljIHZvaWQgYWRkU3RyaW5nVG9TSEEx
KFNIQTEmIHNoYTEsIAogCiAgICAgaWYgKHN0cmluZy5pczhCaXQoKSAmJiBzdHJpbmcuaXNBbGxB
U0NJSSgpKSB7CiAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbnVsbEJ5dGUgPSAwOwotICAgICAgICBz
aGExLmFkZEJ5dGVzKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAg
ICAgICBzaGExLmFkZEJ5dGVzKCZudWxsQnl0ZSwgMSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMo
U3BhbiB7IHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkgfSk7CisgICAgICAg
IHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZudWxsQnl0ZSwgMSB9KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIGF1dG8gdXRmOCA9IHN0cmluZy51dGY4KCk7Ci0gICAgc2hhMS5hZGRCeXRl
cyh1dGY4LmRhdGFBc1VJbnQ4UHRyKCksIHV0ZjgubGVuZ3RoKCkgKyAxKTsgLy8gSW5jbHVkZSB0
ZXJtaW5hdGluZyBudWxsIGJ5dGUuCisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgdXRmOC5kYXRh
QXNVSW50OFB0cigpLCB1dGY4Lmxlbmd0aCgpICsgMSB9KTsgLy8gSW5jbHVkZSB0ZXJtaW5hdGlu
ZyBudWxsIGJ5dGUuCiB9CiAKIFN0cmluZyBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpoYXNo
U3RyaW5nV2l0aFNhbHQoY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgU3RyaW5nJiBoYXNoU2FsdCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlh
bEJhc2UuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0NyZWRlbnRpYWxCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsOCArOTcsOSBA
QCBib29sIENyZWRlbnRpYWxCYXNlOjpjb21wYXJlKGNvbnN0IENyZWRlCiAKIFN0cmluZyBDcmVk
ZW50aWFsQmFzZTo6c2VyaWFsaXphdGlvbkZvckJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcigpIGNv
bnN0CiB7CisgICAgLy8gRklYTUU6IEFkZCBtYWtlU3RyaW5nIHZhcmlhbnQgdGhhdCBjcmVhdGVz
IGEgdXRmOCBidWZmZXIgZGlyZWN0bHkuCiAgICAgYXV0byBjcmVkZW50aWFsU3RyaW5nRGF0YSA9
IG1ha2VTdHJpbmcobV91c2VyLCAnOicsIG1fcGFzc3dvcmQpLnV0ZjgoKTsKLSAgICByZXR1cm4g
bWFrZVN0cmluZygiQmFzaWMgIiwgYmFzZTY0RW5jb2RlZChjcmVkZW50aWFsU3RyaW5nRGF0YSkp
OworICAgIHJldHVybiBtYWtlU3RyaW5nKCJCYXNpYyAiLCBiYXNlNjRFbmNvZGVkKGNyZWRlbnRp
YWxTdHJpbmdEYXRhLmJ5dGVzKCkpKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5j
cHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvQ2VydGlmaWNhdGVJbmZvQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNyArMjEw
LDcgQEAgc3RhdGljIHZvaWQgZW5jb2RlQ0ZEYXRhKEVuY29kZXImIGVuY29kZQogICAgIGNvbnN0
IHVpbnQ4X3QqIGJ5dGVQdHIgPSBDRkRhdGFHZXRCeXRlUHRyKGRhdGEpOwogCiAgICAgZW5jb2Rl
ciA8PCBsZW5ndGg7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYnl0ZVB0ciwg
c3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShTcGFuIHsgYnl0ZVB0ciwgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpIH0pOwog
fQogCiBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4gZGVjb2RlQ0ZE
YXRhKERlY29kZXImIGRlY29kZXIpCkBAIC0yMjUsNyArMjI1LDcgQEAgc3RhdGljIHN0ZDo6b3B0
aW9uYWw8UmV0YWluUHRyPENGRGF0YVJlZgogICAgIGlmICghcG9pbnRlcikKICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0ZShudWxs
cHRyLCBwb2ludGVyLCAqc2l6ZSkpOworICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0ZShu
dWxscHRyLCByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwb2ludGVyKSwgKnNpemUp
KTsKIH0KIAogI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ2VydGlmaWNhdGVJbmZvLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0NlcnRpZmljYXRlSW5m
by5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvQ2VydGlmaWNhdGVJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAg
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8R1JlZlB0cjxHQnl0ZUFycgogICAgIHN0YXRpYyB2b2lk
IGVuY29kZShFbmNvZGVyICZlbmNvZGVyLCBjb25zdCBHUmVmUHRyPEdCeXRlQXJyYXk+JiBieXRl
QXJyYXkpCiAgICAgewogICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90Pihi
eXRlQXJyYXktPmxlbik7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGJ5
dGVBcnJheS0+ZGF0YSwgYnl0ZUFycmF5LT5sZW4pOworICAgICAgICBlbmNvZGVyLmVuY29kZUZp
eGVkTGVuZ3RoRGF0YShTcGFuIHsgYnl0ZUFycmF5LT5kYXRhLCBieXRlQXJyYXktPmxlbiB9KTsK
ICAgICB9CiAKICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxHUmVmUHRyPEdCeXRlQXJyYXk+PiBk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKQEAgLTg3LDcgKzg3LDcgQEAgdGVtcGxhdGU8PiBzdHJ1
Y3QgQ29kZXI8R1JlZlB0cjxHQnl0ZUFycgogCiAgICAgICAgIEdSZWZQdHI8R0J5dGVBcnJheT4g
Ynl0ZUFycmF5ID0gYWRvcHRHUmVmKGdfYnl0ZV9hcnJheV9zaXplZF9uZXcoKnNpemUpKTsKICAg
ICAgICAgZ19ieXRlX2FycmF5X3NldF9zaXplKGJ5dGVBcnJheS5nZXQoKSwgKnNpemUpOwotICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ5dGVBcnJheS0+ZGF0YSwg
KnNpemUpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4g
eyBieXRlQXJyYXktPmRhdGEsICpzaXplIH0pKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKICAgICAgICAgcmV0dXJuIGJ5dGVBcnJheTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAkocmV2aXNpb24gMjc4
ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OmV4
ZWN1dGVDb21tYW5kKCkKICAgICByZXR1cm4gc3RlcCgpID09IFNRTElURV9ET05FOwogfQogCi1p
bnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kQmxvYihpbnQgaW5kZXgsIFNwYW48Y29uc3QgdWludDhf
dD4gYmxvYikKK2ludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgU3Bhbjxj
b25zdCBzdGQ6OmJ5dGU+IGJsb2IpCiB7CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAgQVNT
RVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkp
OwpAQCAtOTUsNiArOTUsMTEgQEAgaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IoaW50IGlu
ZGV4LAogICAgIHJldHVybiBzcWxpdGUzX2JpbmRfYmxvYihtX3N0YXRlbWVudCwgaW5kZXgsIGJs
b2IuZGF0YSgpLCBibG9iLnNpemUoKSwgU1FMSVRFX1RSQU5TSUVOVCk7CiB9CiAKK2ludCBTUUxp
dGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgU3Bhbjxjb25zdCB1aW50OF90PiBibG9i
KQoreworICAgIHJldHVybiBiaW5kQmxvYihpbmRleCwgYXNCeXRlcyhibG9iKSk7Cit9CisKIGlu
dCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0
KQogewogICAgIC8vIFN0cmluZzo6Y2hhcmFjdGVycygpIHJldHVybnMgMCBmb3IgdGhlIGVtcHR5
IHN0cmluZywgd2hpY2ggU1FMaXRlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwv
U1FMaXRlU3RhdGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
c3FsL1NRTGl0ZVN0YXRlbWVudC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYg
KzM5LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIH5TUUxpdGVTdGF0ZW1lbnQoKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCBTUUxpdGVTdGF0ZW1lbnQoU1FMaXRlU3RhdGVtZW50JiYpOwog
ICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIGludCBiaW5kQmxvYihpbnQgaW5kZXgsIFNwYW48Y29u
c3Qgc3RkOjpieXRlPik7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJpbmRCbG9iKGludCBpbmRl
eCwgU3Bhbjxjb25zdCB1aW50OF90Pik7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJpbmRCbG9i
KGludCBpbmRleCwgY29uc3QgU3RyaW5nJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJpbmRU
ZXh0KGludCBpbmRleCwgU3RyaW5nVmlldyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1F1b3RlZFByaW50YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU1LDEyICs1NSw3IEBAIHN0YXRpYyBzaXplX3QgbGVuZ3RoT2ZMaW5lRW5kaW5n
QXRJbmRleCgKICAgICByZXR1cm4gMDsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50
YWJsZUVuY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQotewotICAgIHJldHVybiBx
dW90ZWRQcmludGFibGVFbmNvZGUoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkpOwotfQotCi1W
ZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IHVpbnQ4X3QqIGlucHV0
LCBzaXplX3QgaW5wdXRMZW5ndGgpCitzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50
YWJsZUVuY29kZShjb25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGlucHV0TGVuZ3RoKQogewog
ICAgIFZlY3Rvcjx1aW50OF90PiBvdXQ7CiAgICAgb3V0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
aW5wdXRMZW5ndGgpOwpAQCAtMTE2LDEyICsxMTEsMTIgQEAgVmVjdG9yPHVpbnQ4X3Q+IHF1b3Rl
ZFByaW50YWJsZUVuY29kZShjbwogICAgIHJldHVybiBvdXQ7CiB9CiAKLVZlY3Rvcjx1aW50OF90
PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKK1Zl
Y3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+
IGlucHV0KQogewotICAgIHJldHVybiBxdW90ZWRQcmludGFibGVEZWNvZGUoaW5wdXQuZGF0YSgp
LCBpbnB1dC5zaXplKCkpOworICAgIHJldHVybiBxdW90ZWRQcmludGFibGVFbmNvZGUocmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpKTsK
IH0KIAotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCB1aW50OF90
KiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCkKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4gcXVvdGVk
UHJpbnRhYmxlRGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3RoKQog
ewogICAgIFZlY3Rvcjx1aW50OF90PiBvdXQ7CiAgICAgaWYgKCFkYXRhTGVuZ3RoKQpAQCAtMTU2
LDQgKzE1MSw5IEBAIFZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY28KICAg
ICByZXR1cm4gb3V0OwogfQogCitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVjb2Rl
KFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCkKK3sKKyAgICByZXR1cm4gcXVvdGVkUHJpbnRh
YmxlRGVjb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0LmRhdGEoKSks
IGlucHV0LnNpemUoKSk7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvUXVvdGVkUHJpbnRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9RdW90ZWRQcmludGFibGUuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzEsMTMgKzMxLDExIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1WZWN0b3I8
dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOwot
VmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCB1aW50OF90Kiwgc2l6
ZV90KTsKLQotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCBWZWN0
b3I8dWludDhfdD4mKTsKLVZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY29u
c3QgdWludDhfdCosIHNpemVfdCk7CitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5j
b2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRh
YmxlRGVjb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5j
cHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0
ZWJvYXJkV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDcgKzI1MSw3IEBAIHN0ZDo6b3B0
aW9uYWw8UGFzdGVib2FyZEN1c3RvbURhdGE+IFBhc3QKICAgICAgICAgaWYgKEhBTkRMRSBjYkRh
dGEgPSA6OkdldENsaXBib2FyZERhdGEoQ3VzdG9tRGF0YUNsaXBib2FyZEZvcm1hdCkpIHsKICAg
ICAgICAgICAgIHNpemVfdCBzaXplID0gR2xvYmFsU2l6ZShjYkRhdGEpOwogICAgICAgICAgICAg
YXV0byBkYXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KEdsb2JhbExvY2soY2JEYXRhKSk7Ci0g
ICAgICAgICAgICBhdXRvIGN1c3RvbURhdGEgPSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6ZnJvbVBl
cnNpc3RlbmNlRGVjb2Rlcih7ZGF0YSwgc2l6ZX0pOworICAgICAgICAgICAgYXV0byBjdXN0b21E
YXRhID0gUGFzdGVib2FyZEN1c3RvbURhdGE6OmZyb21QZXJzaXN0ZW5jZURlY29kZXIoU3BhbiB7
IGRhdGEsIHNpemUgfSk7CiAKICAgICAgICAgICAgIEdsb2JhbFVubG9jayhjYkRhdGEpOwogICAg
ICAgICAgICAgOjpDbG9zZUNsaXBib2FyZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFz
ZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2Vydmlj
ZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTks
MTAgKzQ1OSwxMCBAQCBib29sIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2VzCiAg
ICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDYsIHVwZGF0ZVZpYUNhY2hl
VG9TdHJpbmcoZGF0YS5yZWdpc3RyYXRpb24udXBkYXRlVmlhQ2FjaGUpKSAhPSBTUUxJVEVfT0sK
ICAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRleHQoNywgZGF0YS5zY3JpcHRV
Ukwuc3RyaW5nKCkpICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50
LT5iaW5kVGV4dCg4LCB3b3JrZXJUeXBlVG9TdHJpbmcoZGF0YS53b3JrZXJUeXBlKSkgIT0gU1FM
SVRFX09LCi0gICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDksIFNwYW4g
eyBjc3BFbmNvZGVyLmJ1ZmZlcigpLCBjc3BFbmNvZGVyLmJ1ZmZlclNpemUoKSB9KSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoOSwgY3NwRW5j
b2Rlci5idWZmZXIoKSkgIT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1l
bnQtPmJpbmRUZXh0KDEwLCBkYXRhLnJlZmVycmVyUG9saWN5KSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoMTEsIFNwYW4geyBzY3JpcHRSZXNv
dXJjZU1hcEVuY29kZXIuYnVmZmVyKCksIHNjcmlwdFJlc291cmNlTWFwRW5jb2Rlci5idWZmZXJT
aXplKCkgfSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJp
bmRCbG9iKDEyLCBTcGFuIHsgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXIoKSwgY2VydGlm
aWNhdGVJbmZvRW5jb2Rlci5idWZmZXJTaXplKCkgfSkgIT0gU1FMSVRFX09LCisgICAgICAgICAg
ICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDExLCBzY3JpcHRSZXNvdXJjZU1hcEVuY29k
ZXIuYnVmZmVyKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50
LT5iaW5kQmxvYigxMiwgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXIoKSkgIT0gU1FMSVRF
X09LCiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIkZhaWxl
ZCB0byBzdG9yZSByZWdpc3RyYXRpb24gZGF0YSBpbnRvIHJlY29yZHMgdGFibGUgKCVpKSAtICVz
IiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTUxNyw3ICs1MTcsNyBAQCBTdHJpbmcgUmVn
aXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yCiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29u
dGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzPiBjb250ZW50U2VjdXJpdHlQb2xpY3k7
CiAgICAgICAgIGF1dG8gY29udGVudFNlY3VyaXR5UG9saWN5RGF0YVNwYW4gPSBzcWwtPmNvbHVt
bkJsb2JBc1NwYW4oOCk7CiAgICAgICAgIGlmIChjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhU3Bh
bi5zaXplKCkpIHsKLSAgICAgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgY3NwRGVj
b2Rlcihjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhU3Bhbi5kYXRhKCksIGNvbnRlbnRTZWN1cml0
eVBvbGljeURhdGFTcGFuLnNpemUoKSk7CisgICAgICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpE
ZWNvZGVyIGNzcERlY29kZXIgeyBjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhU3BhbiB9OwogICAg
ICAgICAgICAgY3NwRGVjb2RlciA+PiBjb250ZW50U2VjdXJpdHlQb2xpY3k7CiAgICAgICAgICAg
ICBpZiAoIWNvbnRlbnRTZWN1cml0eVBvbGljeSkgewogICAgICAgICAgICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIsICJSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVj
b3JkczogRmFpbGVkIHRvIGRlY29kZSBjb250ZW50U2VjdXJpdHlQb2xpY3kiKTsKQEAgLTUzMCw3
ICs1MzAsNyBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yCiAgICAg
ICAgIEhhc2hNYXA8VVJMLCBTZXJ2aWNlV29ya2VyQ29udGV4dERhdGE6OkltcG9ydGVkU2NyaXB0
PiBzY3JpcHRSZXNvdXJjZU1hcDsKICAgICAgICAgYXV0byBzY3JpcHRSZXNvdXJjZU1hcERhdGFT
cGFuID0gc3FsLT5jb2x1bW5CbG9iQXNTcGFuKDEwKTsKICAgICAgICAgaWYgKHNjcmlwdFJlc291
cmNlTWFwRGF0YVNwYW4uc2l6ZSgpKSB7Ci0gICAgICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpE
ZWNvZGVyIHNjcmlwdFJlc291cmNlTWFwRGVjb2RlcihzY3JpcHRSZXNvdXJjZU1hcERhdGFTcGFu
LmRhdGEoKSwgc2NyaXB0UmVzb3VyY2VNYXBEYXRhU3Bhbi5zaXplKCkpOworICAgICAgICAgICAg
V1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBzY3JpcHRSZXNvdXJjZU1hcERlY29kZXIgeyBzY3Jp
cHRSZXNvdXJjZU1hcERhdGFTcGFuIH07CiAgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPEhhc2hN
YXA8VVJMLCBJbXBvcnRlZFNjcmlwdEF0dHJpYnV0ZXM+PiBzY3JpcHRSZXNvdXJjZU1hcFdpdGhv
dXRTY3JpcHRzOwogICAgICAgICAgICAgc2NyaXB0UmVzb3VyY2VNYXBEZWNvZGVyID4+IHNjcmlw
dFJlc291cmNlTWFwV2l0aG91dFNjcmlwdHM7CiAgICAgICAgICAgICBpZiAoIXNjcmlwdFJlc291
cmNlTWFwV2l0aG91dFNjcmlwdHMpIHsKQEAgLTU0Myw3ICs1NDMsNyBAQCBTdHJpbmcgUmVnaXN0
cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yCiAgICAgICAgIGF1dG8gY2VydGlmaWNhdGVJbmZv
RGF0YVNwYW4gPSBzcWwtPmNvbHVtbkJsb2JBc1NwYW4oMTEpOwogICAgICAgICBzdGQ6Om9wdGlv
bmFsPENlcnRpZmljYXRlSW5mbz4gY2VydGlmaWNhdGVJbmZvOwogCi0gICAgICAgIFdURjo6UGVy
c2lzdGVuY2U6OkRlY29kZXIgY2VydGlmaWNhdGVJbmZvRGVjb2RlcihjZXJ0aWZpY2F0ZUluZm9E
YXRhU3Bhbi5kYXRhKCksIGNlcnRpZmljYXRlSW5mb0RhdGFTcGFuLnNpemUoKSk7CisgICAgICAg
IFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgY2VydGlmaWNhdGVJbmZvRGVjb2RlciB7IGNlcnRp
ZmljYXRlSW5mb0RhdGFTcGFuIH07CiAgICAgICAgIGNlcnRpZmljYXRlSW5mb0RlY29kZXIgPj4g
Y2VydGlmaWNhdGVJbmZvOwogICAgICAgICBpZiAoIWNlcnRpZmljYXRlSW5mbykgewogICAgICAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIlJlZ2lzdHJhdGlvbkRhdGFi
YXNlOjppbXBvcnRSZWNvcmRzOiBGYWlsZWQgdG8gZGVjb2RlIGNlcnRpZmljYXRlSW5mbyIpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NjcmlwdFN0b3Jh
Z2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2
ZXIvU1dTY3JpcHRTdG9yYWdlLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNv
cmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NjcmlwdFN0b3JhZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Niw3ICs1Niw3IEBAIFN0cmluZyBTV1NjcmlwdFN0b3JhZ2U6OnNoYTJIYXNoKGNv
bnN0IFMKICAgICBhdXRvIGlucHV0VXRmOCA9IGlucHV0LnV0ZjgoKTsKICAgICBjcnlwdG8tPmFk
ZEJ5dGVzKGlucHV0VXRmOC5kYXRhKCksIGlucHV0VXRmOC5sZW5ndGgoKSk7CiAgICAgYXV0byBo
YXNoID0gY3J5cHRvLT5jb21wdXRlSGFzaCgpOwotICAgIHJldHVybiBiYXNlNjRVUkxFbmNvZGVU
b1N0cmluZyhoYXNoLmRhdGEoKSwgaGFzaC5zaXplKCkpOworICAgIHJldHVybiBiYXNlNjRVUkxF
bmNvZGVUb1N0cmluZyhoYXNoKTsKIH0KIAogU3RyaW5nIFNXU2NyaXB0U3RvcmFnZTo6c2hhMkhh
c2goY29uc3QgVVJMJiBpbnB1dCkgY29uc3QKQEAgLTg2LDkgKzg2LDkgQEAgU2NyaXB0QnVmZmVy
IFNXU2NyaXB0U3RvcmFnZTo6c3RvcmUoY29ucwogICAgIGF1dG8gc2NyaXB0UGF0aCA9IHRoaXMt
PnNjcmlwdFBhdGgocmVnaXN0cmF0aW9uS2V5LCBzY3JpcHRVUkwpOwogICAgIEZpbGVTeXN0ZW06
Om1ha2VBbGxEaXJlY3RvcmllcyhGaWxlU3lzdGVtOjpwYXJlbnRQYXRoKHNjcmlwdFBhdGgpKTsK
IAotICAgIGF1dG8gaXRlcmF0ZU92ZXJCdWZmZXJBbmRXcml0ZURhdGEgPSBbJl0oY29uc3QgRnVu
Y3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIHdyaXRlRGF0YSkgewotICAgICAg
ICBmb3IgKGF1dG8gaXQgPSBzY3JpcHQuYnVmZmVyKCktPmJlZ2luKCk7IGl0ICE9IHNjcmlwdC5i
dWZmZXIoKS0+ZW5kKCk7ICsraXQpCi0gICAgICAgICAgICB3cml0ZURhdGEoaXQtPnNlZ21lbnQt
PmRhdGEoKSwgaXQtPnNlZ21lbnQtPnNpemUoKSk7CisgICAgYXV0byBpdGVyYXRlT3ZlckJ1ZmZl
ckFuZFdyaXRlRGF0YSA9IFsmXShjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpi
eXRlPik+JiB3cml0ZURhdGEpIHsKKyAgICAgICAgZm9yIChhdXRvJiBzZWdtZW50RW50cnkgOiAq
c2NyaXB0LmJ1ZmZlcigpKQorICAgICAgICAgICAgd3JpdGVEYXRhKHNlZ21lbnRFbnRyeS5zZWdt
ZW50LT5ieXRlcygpKTsKICAgICB9OwogCiAgICAgaWYgKCFzaG91bGRVc2VGaWxlTWFwcGluZyhz
Y3JpcHQuYnVmZmVyKCktPnNpemUoKSkpIHsKQEAgLTk3LDggKzk3LDggQEAgU2NyaXB0QnVmZmVy
IFNXU2NyaXB0U3RvcmFnZTo6c3RvcmUoY29ucwogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoU2VydmljZVdvcmtlciwgIlNXU2NyaXB0U3RvcmFnZTo6c3RvcmU6IEZhaWx1cmUgdG8gc3Rv
cmUgJXMsIEZpbGVTeXN0ZW06Om9wZW5GaWxlKCkgZmFpbGVkIiwgc2NyaXB0UGF0aC51dGY4KCku
ZGF0YSgpKTsKICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIH0KLSAgICAgICAgaXRl
cmF0ZU92ZXJCdWZmZXJBbmRXcml0ZURhdGEoWyZdKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVf
dCBzaXplKSB7Ci0gICAgICAgICAgICBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShoYW5kbGUsIGRh
dGEsIHNpemUpOworICAgICAgICBpdGVyYXRlT3ZlckJ1ZmZlckFuZFdyaXRlRGF0YShbJl0oU3Bh
bjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpIHsKKyAgICAgICAgICAgIEZpbGVTeXN0ZW06OndyaXRl
VG9GaWxlKGhhbmRsZSwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9KTsKICAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGhh
bmRsZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw4MSBAQAorMjAyMS0wNi0xMSAgU2Ft
IFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRvcHQgU3BhbiBpbiBtb3Jl
IHBsYWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjI2ODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
W1dJUF0KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2lu
ZUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6ZW5jb2Rl
KToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6ZGVjb2RlUmVjb3JkSGVh
ZGVyKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVD
YWNoZXMuY3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6c3RvcmVP
cmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVhZE9yaWdp
bik6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6ZW5jb2RlQ2FjaGVOYW1lcyk6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6ZGVjb2RlQ2FjaGVzTmFtZXMpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6Om1hcFRvRmlsZSBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Y29tcHV0ZVNIQTEpOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
Y2hlOjpEYXRhOjpEYXRhKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVEYXRhQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YTo6
YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6OmFkb3B0
TWFwKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6OmVuY29kZUFzU3RvcmFn
ZVJlY29yZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6OmRl
Y29kZVN0b3JhZ2VSZWNvcmQpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZUtleS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6aGFzaFN0cmlu
Zyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6S2V5Ojpjb21wdXRlSGFzaCBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6S2V5Ojpjb21wdXRlUGFydGl0aW9u
SGFzaCBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
U3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6ZGVjb2RlUmVjb3Jk
TWV0YURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmVuY29kZVJlY29yZE1l
dGFEYXRhKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJy
ZXNvdXJjZXNFbnRyeS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3VicmVz
b3VyY2VzRW50cnk6OmVuY29kZUFzU3RvcmFnZVJlY29yZCBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYWNoZTo6U3VicmVzb3VyY2VzRW50cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQp
OgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVyLmg6CisgICAgICAgICogUGxh
dGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2Rl
cjxDU3RyaW5nPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxDU3RyaW5n
Pjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxTdHJpbmc+OjplbmNvZGUp
OgorICAgICAgICAoSVBDOjpkZWNvZGVTdHJpbmdUZXh0KToKKyAgICAgICAgKElQQzo6QXJndW1l
bnRDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENv
ZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29kZSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3Vt
ZW50Q29kZXJzLmg6CisgICAgICAgIChJUEM6OlNpbXBsZUFyZ3VtZW50Q29kZXI6OmVuY29kZSk6
CisgICAgICAgIChJUEM6OlNpbXBsZUFyZ3VtZW50Q29kZXI6OmRlY29kZSk6CisgICAgICAgICog
UGxhdGZvcm0vSVBDL0FycmF5UmVmZXJlbmNlLmg6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0Rl
Y29kZXIuY3BwOgorICAgICAgICAoSVBDOjpEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEp
OgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9EZWNvZGVyLmg6CisgICAgICAgIChJUEM6OkRlY29k
ZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0VuY29k
ZXIuY3BwOgorICAgICAgICAoSVBDOjpFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEpOgor
ICAgICAgICAqIFBsYXRmb3JtL0lQQy9FbmNvZGVyLmg6CisgICAgICAgICogUGxhdGZvcm0vSVBD
L1NoYXJlZEJ1ZmZlckNvcHkuY3BwOgorICAgICAgICAoSVBDOjpTaGFyZWRCdWZmZXJDb3B5Ojpl
bmNvZGUgY29uc3QpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uRW5j
b2Rlci5oOgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAg
ICAgICAoSVBDOjplbmNvZGVTaGFyZWRCdWZmZXIpOgorICAgICAgICAoSVBDOjpkZWNvZGVTaGFy
ZWRCdWZmZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3Rv
cmUuY3BwOgorICAgICAgICAoQVBJOjplbmNvZGVDb250ZW50UnVsZUxpc3RNZXRhRGF0YSk6Cisg
ICAgICAgIChBUEk6OmdldERhdGEpOgorICAgICAgICAoQVBJOjpkZWNvZGVDb250ZW50UnVsZUxp
c3RNZXRhRGF0YSk6CisgICAgICAgIChBUEk6OndyaXRlRGF0YVRvRmlsZSk6CisgICAgICAgICog
VUlQcm9jZXNzL21hYy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpIaXN0b3J5RW50cnlEYXRhRW5jb2Rlcjo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJL
aXQ6Okhpc3RvcnlFbnRyeURhdGFFbmNvZGVyOjplbmNvZGVBcml0aG1ldGljVHlwZSk6CisgICAg
ICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERh
dGEpOgorICAgICAgICAoV2ViS2l0OjpIaXN0b3J5RW50cnlEYXRhRGVjb2Rlcjo6b3BlcmF0b3I+
Pik6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFEZWNvZGVyOjpkZWNvZGVBcml0
aG1ldGljVHlwZSk6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFEZWNvZGVyOjpk
ZWNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9JUENU
ZXN0aW5nQVBJLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6ZW5jb2RlVHlw
ZWRBcnJheSk6CisKIDIwMjEtMDYtMTEgIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5j
b20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyNzg3NTQuCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Qcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudE1hbmFnZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyMyw3ICszMjMsNyBAQCB2b2lkIFByaXZhdGVDbGlja01lYXN1cmVt
ZW50TWFuYWdlcjo6ZmlyCiAgICAgICAgIGNyeXB0by0+YWRkQnl0ZXMocHVibGljS2V5RGF0YS0+
ZGF0YSgpLCBwdWJsaWNLZXlEYXRhLT5zaXplKCkpOwogICAgICAgICBhdXRvIHB1YmxpY0tleURh
dGFIYXNoID0gY3J5cHRvLT5jb21wdXRlSGFzaCgpOwogCi0gICAgICAgIGF1dG8ga2V5SUQgPSBi
YXNlNjRVUkxFbmNvZGVUb1N0cmluZyhwdWJsaWNLZXlEYXRhSGFzaC5kYXRhKCksIHB1YmxpY0tl
eURhdGFIYXNoLnNpemUoKSk7CisgICAgICAgIGF1dG8ga2V5SUQgPSBiYXNlNjRVUkxFbmNvZGVU
b1N0cmluZyhwdWJsaWNLZXlEYXRhSGFzaCk7CiAgICAgICAgIGlmIChrZXlJRCAhPSBhdHRyaWJ1
dGlvbi5zb3VyY2VVbmxpbmthYmxlVG9rZW4oKS0+a2V5SURCYXNlNjRVUkwpCiAgICAgICAgICAg
ICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2Fj
aGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFn
ZUVuZ2luZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTY1LDcgKzU2NSw3IEBAIFN0b3Jh
Z2U6OlJlY29yZCBDYWNoZTo6ZW5jb2RlKGNvbnN0IFJlY28KIAogICAgIGVuY29kZXIuZW5jb2Rl
Q2hlY2tzdW0oKTsKIAotICAgIERhdGEgaGVhZGVyKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIu
YnVmZmVyU2l6ZSgpKTsKKyAgICBEYXRhIGhlYWRlcihlbmNvZGVyLmJ1ZmZlcigpKTsKICAgICBE
YXRhIGJvZHk7CiAgICAgV1RGOjpzd2l0Y2hPbihyZWNvcmQucmVzcG9uc2VCb2R5LCBbXShjb25z
dCBSZWY8V2ViQ29yZTo6Rm9ybURhdGE+JiBmb3JtRGF0YSkgewogICAgICAgICAvLyBGSVhNRTog
U3RvcmUgZm9ybSBkYXRhIGJvZHkuCkBAIC02MzAsNyArNjMwLDcgQEAgc3RhdGljIHN0ZDo6b3B0
aW9uYWw8V2ViQ29yZTo6RE9NQ2FjaGVFbgogCiBzdGQ6Om9wdGlvbmFsPENhY2hlOjpEZWNvZGVk
UmVjb3JkPiBDYWNoZTo6ZGVjb2RlUmVjb3JkSGVhZGVyKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYg
c3RvcmFnZSkKIHsKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoc3RvcmFn
ZS5oZWFkZXIuZGF0YSgpLCBzdG9yYWdlLmhlYWRlci5zaXplKCkpOworICAgIFdURjo6UGVyc2lz
dGVuY2U6OkRlY29kZXIgZGVjb2RlcihTcGFuIHsgc3RvcmFnZS5oZWFkZXIuZGF0YSgpLCBzdG9y
YWdlLmhlYWRlci5zaXplKCkgfSk7CiAKICAgICBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gaW5zZXJ0
aW9uVGltZTsKICAgICBkZWNvZGVyID4+IGluc2VydGlvblRpbWU7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3Jh
Z2VFbmdpbmVDYWNoZXMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNSwxNCArMTA1LDE0IEBAIHZvaWQgQ2FjaGVzOjpzdG9yZU9yaWdpbihDb21w
bGV0aW9uQ2FsbGIKICAgICBlbmNvZGVyIDw8IG1fb3JpZ2luLmNsaWVudE9yaWdpbi5wcm90b2Nv
bDsKICAgICBlbmNvZGVyIDw8IG1fb3JpZ2luLmNsaWVudE9yaWdpbi5ob3N0OwogICAgIGVuY29k
ZXIgPDwgbV9vcmlnaW4uY2xpZW50T3JpZ2luLnBvcnQ7Ci0gICAgbV9lbmdpbmUtPndyaXRlRmls
ZShjYWNoZXNPcmlnaW5GaWxlbmFtZShtX3Jvb3RQYXRoKSwgRGF0YSB7IGVuY29kZXIuYnVmZmVy
KCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpIH0sIFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChzdGQ6
Om9wdGlvbmFsPEVycm9yPiYmIGVycm9yKSBtdXRhYmxlIHsKKyAgICBtX2VuZ2luZS0+d3JpdGVG
aWxlKGNhY2hlc09yaWdpbkZpbGVuYW1lKG1fcm9vdFBhdGgpLCBEYXRhIHsgZW5jb2Rlci5idWZm
ZXIoKSB9LCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoc3RkOjpvcHRpb25hbDxFcnJvcj4mJiBl
cnJvcikgbXV0YWJsZSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoZXJyb3Ip
KTsKICAgICB9KTsKIH0KIAogc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+IENh
Y2hlczo6cmVhZE9yaWdpbihjb25zdCBEYXRhJiBkYXRhKQogewotICAgIFdURjo6UGVyc2lzdGVu
Y2U6OkRlY29kZXIgZGVjb2RlcihkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOworICAgIFdURjo6
UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihTcGFuIHsgZGF0YS5kYXRhKCksIGRhdGEuc2l6
ZSgpIH0pOwogCiAgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+
IHRvcE9yaWdpbjsKICAgICBkZWNvZGVyID4+IHRvcE9yaWdpbjsKQEAgLTQwNCwxMiArNDA0LDEy
IEBAIHN0YXRpYyBpbmxpbmUgRGF0YSBlbmNvZGVDYWNoZU5hbWVzKGNvbnMKICAgICAgICAgZW5j
b2RlciA8PCBjYWNoZS51bmlxdWVOYW1lKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIERhdGEgeyBl
bmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSB9OworICAgIHJldHVybiBEYXRh
IHsgZW5jb2Rlci5idWZmZXIoKSB9OwogfQogCiBzdGF0aWMgaW5saW5lIEV4cGVjdGVkPFZlY3Rv
cjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiwgRXJyb3I+IGRlY29kZUNhY2hlc05hbWVzKGNv
bnN0IERhdGEmIGRhdGEpCiB7Ci0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVy
KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2Rl
ciBkZWNvZGVyKFNwYW4geyBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkgfSk7CiAgICAgc3RkOjpv
cHRpb25hbDx1aW50NjRfdD4gY291bnQ7CiAgICAgZGVjb2RlciA+PiBjb3VudDsKICAgICBpZiAo
IWNvdW50KQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogRGF0YSBE
YXRhOjptYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKSBjb25zdAogewogICAgIEZpbGVTeXN0
ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGU7Ci0gICAgYXV0byBhcHBseURhdGEgPSBbJl0o
Y29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIGFwcGxpZXIpIHsg
YXBwbHkoYXBwbGllcik7IH07CisgICAgYXV0byBhcHBseURhdGEgPSBbJl0oY29uc3QgRnVuY3Rp
b248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYgYXBwbGllcikgeyBhcHBseShhcHBsaWVy
KTsgfTsKICAgICBhdXRvIG1hcHBlZEZpbGUgPSBGaWxlU3lzdGVtOjptYXBUb0ZpbGUocGF0aCwg
c2l6ZSgpLCBXVEZNb3ZlKGFwcGx5RGF0YSksICZoYW5kbGUpOwogICAgIGlmICghbWFwcGVkRmls
ZSkKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTg2LDkgKzg2LDkgQEAgRGF0YSBhZG9wdEFuZE1h
cEZpbGUoRmlsZVN5c3RlbTo6UGxhdGZvcgogU0hBMTo6RGlnZXN0IGNvbXB1dGVTSEExKGNvbnN0
IERhdGEmIGRhdGEsIGNvbnN0IFNhbHQmIHNhbHQpCiB7CiAgICAgU0hBMSBzaGExOwotICAgIHNo
YTEuYWRkQnl0ZXMoc2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKTsKLSAgICBkYXRhLmFwcGx5KFsm
c2hhMV0oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgc2hhMS5h
ZGRCeXRlcyhkYXRhLCBzaXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKHNhbHQpOworICAgIGRhdGEu
YXBwbHkoWyZzaGExXShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkgeworICAgICAgICBzaGEx
LmFkZEJ5dGVzKGRhdGEpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9KTsKIApJbmRleDog
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVEYXRhLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3
IEBACiAjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rpb25E
aXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8d3RmL1NIQTEuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5o
PgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCkBAIC01NCw2ICs1NSwxMCBAQCBjbGFzcyBEYXRhIHsKIHB1Ymxp
YzoKICAgICBEYXRhKCkgeyB9CiAgICAgRGF0YShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKKyAg
ICBEYXRhKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhKQorICAgICAgICA6IERhdGEocmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5kYXRhKCkpLCBkYXRhLnNpemUoKSkKKyAg
ICB7CisgICAgfQogCiAgICAgfkRhdGEoKSB7IH0KIApAQCAtNzksNyArODQsNyBAQCBwdWJsaWM6
CiAKICAgICBEYXRhIHN1YnJhbmdlKHNpemVfdCBvZmZzZXQsIHNpemVfdCkgY29uc3Q7CiAKLSAg
ICBib29sIGFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2wgKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3Qp
PiYpIGNvbnN0OworICAgIGJvb2wgYXBwbHkoY29uc3QgRnVuY3Rpb248Ym9vbCAoU3Bhbjxjb25z
dCBzdGQ6OmJ5dGU+KT4mKSBjb25zdDsKIAogICAgIERhdGEgbWFwVG9GaWxlKGNvbnN0IFN0cmlu
ZyYgcGF0aCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1tCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZURhdGFDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjksMTIgKzY5LDEyIEBAIGJvb2wgRGF0
YTo6aXNOdWxsKCkgY29uc3QKICAgICByZXR1cm4gIW1fZGlzcGF0Y2hEYXRhOwogfQogCi1ib29s
IERhdGE6OmFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2wgKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3Qp
PiYgYXBwbGllcikgY29uc3QKK2Jvb2wgRGF0YTo6YXBwbHkoY29uc3QgRnVuY3Rpb248Ym9vbCAo
U3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mIGFwcGxpZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3Np
emUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gZGlzcGF0Y2hfZGF0YV9hcHBs
eShtX2Rpc3BhdGNoRGF0YS5nZXQoKSwgWyZhcHBsaWVyXShkaXNwYXRjaF9kYXRhX3QsIHNpemVf
dCwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgcmV0dXJuIGFwcGxp
ZXIoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBzaXplKTsKKyAgICAgICAgcmV0
dXJuIGFwcGxpZXIoU3BhbiB7IHN0YXRpY19jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGRhdGEpLCBz
aXplIH0pOwogICAgIH0pOwogfQogCkBAIC05NCwxNCArOTQsMTEgQEAgRGF0YSBjb25jYXRlbmF0
ZShjb25zdCBEYXRhJiBhLCBjb25zdCBEYQogCiBEYXRhIERhdGE6OmFkb3B0TWFwKEZpbGVTeXN0
ZW06Ok1hcHBlZEZpbGVEYXRhJiYgbWFwcGVkRmlsZSwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxl
SGFuZGxlIGZkKQogewotICAgIHNpemVfdCBzaXplID0gbWFwcGVkRmlsZS5zaXplKCk7Ci0gICAg
dm9pZCogbWFwID0gbWFwcGVkRmlsZS5sZWFrSGFuZGxlKCk7Ci0gICAgQVNTRVJUKG1hcCk7Ci0g
ICAgQVNTRVJUKG1hcCAhPSBNQVBfRkFJTEVEKTsKKyAgICBhdXRvIG1hcCA9IG1hcHBlZEZpbGUu
bGVha0hhbmRsZSgpOworICAgIEFTU0VSVChtYXAuZGF0YSgpKTsKKyAgICBBU1NFUlQobWFwLmRh
dGEoKSAhPSBNQVBfRkFJTEVEKTsKICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmQpOwotICAg
IGF1dG8gYm9keU1hcCA9IGFkb3B0T1NPYmplY3QoZGlzcGF0Y2hfZGF0YV9jcmVhdGUobWFwLCBz
aXplLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RF
RkFVTFQsIDApLCBbbWFwLCBzaXplXSB7Ci0gICAgICAgIG11bm1hcChtYXAsIHNpemUpOwotICAg
IH0pKTsKKyAgICBhdXRvIGJvZHlNYXAgPSBhZG9wdE9TT2JqZWN0KGRpc3BhdGNoX2RhdGFfY3Jl
YXRlKG1hcC5kYXRhKCksIG1hcC5zaXplKCksIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElT
UEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIERJU1BBVENIX0RBVEFfREVTVFJVQ1RP
Ul9NVU5NQVApKTsKICAgICByZXR1cm4geyBXVEZNb3ZlKGJvZHlNYXApLCBEYXRhOjpCYWNraW5n
OjpNYXAgfTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysr
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05OSwxMCArOTksMTAgQEAgU3RvcmFnZTo6UmVjb3JkIEVudHJ5
OjplbmNvZGVBc1N0b3JhZ2VSZQogICAgIAogICAgIGVuY29kZXIuZW5jb2RlQ2hlY2tzdW0oKTsK
IAotICAgIERhdGEgaGVhZGVyKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgp
KTsKKyAgICBEYXRhIGhlYWRlciB7IGVuY29kZXIuYnVmZmVyKCkgfTsKICAgICBEYXRhIGJvZHk7
CiAgICAgaWYgKG1fYnVmZmVyKQotICAgICAgICBib2R5ID0geyBtX2J1ZmZlci0+ZGF0YSgpLCBt
X2J1ZmZlci0+c2l6ZSgpIH07CisgICAgICAgIGJvZHkgPSB7IG1fYnVmZmVyLT5ieXRlcygpIH07
CiAKICAgICByZXR1cm4geyBtX2tleSwgbV90aW1lU3RhbXAsIGhlYWRlciwgYm9keSwgeyB9IH07
CiB9CkBAIC0xMTEsNyArMTExLDcgQEAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBFbnRyeTo6ZGVj
b2RlU3RvcgogewogICAgIGF1dG8gZW50cnkgPSBtYWtlVW5pcXVlPEVudHJ5PihzdG9yYWdlRW50
cnkpOwogCi0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKHN0b3JhZ2VFbnRy
eS5oZWFkZXIuZGF0YSgpLCBzdG9yYWdlRW50cnkuaGVhZGVyLnNpemUoKSk7CisgICAgV1RGOjpQ
ZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyIHsgU3BhbiB7IHN0b3JhZ2VFbnRyeS5oZWFkZXIu
ZGF0YSgpLCBzdG9yYWdlRW50cnkuaGVhZGVyLnNpemUoKSB9IH07CiAgICAgV2ViQ29yZTo6UmVz
b3VyY2VSZXNwb25zZSByZXNwb25zZTsKICAgICBpZiAoIVdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2U6OmRlY29kZShkZWNvZGVyLCByZXNwb25zZSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpJ
bmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlS2V5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
OCwxMyArODgsMTMgQEAgc3RhdGljIHZvaWQgaGFzaFN0cmluZyhTSEExJiBzaGExLCBjb25zdAog
CiAgICAgaWYgKHN0cmluZy5pczhCaXQoKSAmJiBzdHJpbmcuaXNBbGxBU0NJSSgpKSB7CiAgICAg
ICAgIGNvbnN0IHVpbnQ4X3QgbnVsbEJ5dGUgPSAwOwotICAgICAgICBzaGExLmFkZEJ5dGVzKHN0
cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAgICAgICBzaGExLmFkZEJ5
dGVzKCZudWxsQnl0ZSwgMSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IHN0cmluZy5j
aGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkgfSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMo
U3BhbiB7ICZudWxsQnl0ZSwgMSB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRv
IGNTdHJpbmcgPSBzdHJpbmcudXRmOCgpOwogICAgIC8vIEluY2x1ZGUgdGVybWluYXRpbmcgbnVs
bCBieXRlLgotICAgIHNoYTEuYWRkQnl0ZXMoY1N0cmluZy5kYXRhQXNVSW50OFB0cigpLCBjU3Ry
aW5nLmxlbmd0aCgpICsgMSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgY1N0cmluZy5kYXRh
QXNVSW50OFB0cigpLCBjU3RyaW5nLmxlbmd0aCgpICsgMSB9KTsKIH0KIAogS2V5OjpIYXNoVHlw
ZSBLZXk6OmNvbXB1dGVIYXNoKGNvbnN0IFNhbHQmIHNhbHQpIGNvbnN0CkBAIC0xMDIsNyArMTAy
LDcgQEAgS2V5OjpIYXNoVHlwZSBLZXk6OmNvbXB1dGVIYXNoKGNvbnN0IFNhbAogICAgIC8vIFdl
IGRvbid0IHJlYWxseSBuZWVkIGEgY3J5cHRvZ3JhcGhpYyBoYXNoLiBUaGUga2V5IGlzIGFsd2F5
cyB2ZXJpZmllZCBhZ2FpbnN0IHRoZSBlbnRyeSBoZWFkZXIuCiAgICAgLy8gU0hBMSBqdXN0IGhh
cHBlbnMgdG8gYmUgc3VpdGFibHkgc2l6ZWQsIGZhc3QgYW5kIGF2YWlsYWJsZS4KICAgICBTSEEx
IHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhzYWx0LmRhdGEoKSwgc2FsdC5zaXplKCkpOworICAg
IHNoYTEuYWRkQnl0ZXMoc2FsdCk7CiAKICAgICBoYXNoU3RyaW5nKHNoYTEsIG1fcGFydGl0aW9u
KTsKICAgICBoYXNoU3RyaW5nKHNoYTEsIG1fdHlwZSk7CkBAIC0xMTcsNyArMTE3LDcgQEAgS2V5
OjpIYXNoVHlwZSBLZXk6OmNvbXB1dGVIYXNoKGNvbnN0IFNhbAogS2V5OjpIYXNoVHlwZSBLZXk6
OmNvbXB1dGVQYXJ0aXRpb25IYXNoKGNvbnN0IFNhbHQmIHNhbHQpIGNvbnN0CiB7CiAgICAgU0hB
MSBzaGExOwotICAgIHNoYTEuYWRkQnl0ZXMoc2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKTsKKyAg
ICBzaGExLmFkZEJ5dGVzKHNhbHQpOwogCiAgICAgaGFzaFN0cmluZyhzaGExLCBtX3BhcnRpdGlv
bik7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlU3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDU0LDggKzQ1NCw4IEBAIHN0cnVjdCBSZWNvcmRNZXRhRGF0YSB7
CiBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlUmVjb3JkTWV0YURhdGEoUmVj
b3JkTWV0YURhdGEmIG1ldGFEYXRhLCBjb25zdCBEYXRhJiBmaWxlRGF0YSkKIHsKICAgICBib29s
IHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBmaWxlRGF0YS5hcHBseShbJm1ldGFEYXRhLCAmc3VjY2Vz
c10oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgV1RGOjpQZXJz
aXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOworICAgIGZpbGVEYXRhLmFwcGx5
KFsmbWV0YURhdGEsICZzdWNjZXNzXShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkgeworICAg
ICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YSk7CiAgICAgICAgIAog
ICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBjYWNoZVN0b3JhZ2VWZXJzaW9uOwogICAg
ICAgICBkZWNvZGVyID4+IGNhY2hlU3RvcmFnZVZlcnNpb247CkBAIC01ODYsNyArNTg2LDcgQEAg
c3RhdGljIERhdGEgZW5jb2RlUmVjb3JkTWV0YURhdGEoY29uc3QgUgogCiAgICAgZW5jb2Rlci5l
bmNvZGVDaGVja3N1bSgpOwogCi0gICAgcmV0dXJuIERhdGEoZW5jb2Rlci5idWZmZXIoKSwgZW5j
b2Rlci5idWZmZXJTaXplKCkpOworICAgIHJldHVybiB7IGVuY29kZXIuYnVmZmVyKCkgfTsKIH0K
IAogc3RkOjpvcHRpb25hbDxCbG9iU3RvcmFnZTo6QmxvYj4gU3RvcmFnZTo6c3RvcmVCb2R5QXNC
bG9iKFdyaXRlT3BlcmF0aW9uJiB3cml0ZU9wZXJhdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlU3VicmVzb3VyY2VzRW50cnkuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDE0ICsxMjMsMTQgQEAgU3RvcmFnZTo6UmVjb3JkIFN1
YnJlc291cmNlc0VudHJ5OjplbmNvZAogCiAgICAgZW5jb2Rlci5lbmNvZGVDaGVja3N1bSgpOwog
Ci0gICAgcmV0dXJuIHsgbV9rZXksIG1fdGltZVN0YW1wLCB7IGVuY29kZXIuYnVmZmVyKCksIGVu
Y29kZXIuYnVmZmVyU2l6ZSgpIH0sIHsgfSwgeyB9fTsKKyAgICByZXR1cm4geyBtX2tleSwgbV90
aW1lU3RhbXAsIHsgZW5jb2Rlci5idWZmZXIoKSB9LCB7IH0sIHsgfX07CiB9CiAKIHN0ZDo6dW5p
cXVlX3B0cjxTdWJyZXNvdXJjZXNFbnRyeT4gU3VicmVzb3VyY2VzRW50cnk6OmRlY29kZVN0b3Jh
Z2VSZWNvcmQoY29uc3QgU3RvcmFnZTo6UmVjb3JkJiBzdG9yYWdlRW50cnkpCiB7CiAgICAgYXV0
byBlbnRyeSA9IG1ha2VVbmlxdWU8U3VicmVzb3VyY2VzRW50cnk+KHN0b3JhZ2VFbnRyeSk7CiAK
LSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoc3RvcmFnZUVudHJ5LmhlYWRl
ci5kYXRhKCksIHN0b3JhZ2VFbnRyeS5oZWFkZXIuc2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNpc3Rl
bmNlOjpEZWNvZGVyIGRlY29kZXIgeyBTcGFuIHsgc3RvcmFnZUVudHJ5LmhlYWRlci5kYXRhKCks
IHN0b3JhZ2VFbnRyeS5oZWFkZXIuc2l6ZSgpIH0gfTsKICAgICBzdGQ6Om9wdGlvbmFsPFZlY3Rv
cjxTdWJyZXNvdXJjZUluZm8+PiBzdWJyZXNvdXJjZXM7CiAgICAgZGVjb2RlciA+PiBzdWJyZXNv
dXJjZXM7CiAgICAgaWYgKCFzdWJyZXNvdXJjZXMpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9Bcmd1bWVudENvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvQXJndW1lbnRDb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDEz
ICs3OSwxMyBAQCBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxULCB0eXBlbmFtZSBzdGQ6OmVuCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlciwgVCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZ2YWx1ZSksIHNpemVv
ZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KFNwYW4geyAmdmFsdWUsIDEgfSwgYWxpZ25vZihUKSk7CiAgICAgfQogCiAgICAgc3RhdGljIHN0
ZDo6b3B0aW9uYWw8VD4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewogICAgICAgICBU
IHJlc3VsdDsKLSAgICAgICAgaWYgKGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZyZXN1bHQpLCBzaXplb2YoVCksIGFsaWdub2YoVCkpKQor
ICAgICAgICBpZiAoZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZyZXN1bHQs
IDEgfSkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50
Q29kZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1
bWVudENvZGVycy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vSVBDL0FyZ3VtZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBA
QCB2b2lkIEFyZ3VtZW50Q29kZXI8Q1N0cmluZz46OmVuY29kZShFbmNvCiAKICAgICB1aW50MzJf
dCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAgZW5jb2RlciA8PCBsZW5ndGg7Ci0gICAg
ZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RyaW5nLmRhdGFBc1VJbnQ4UHRyKCksIGxl
bmd0aCwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RyaW5nLmJ5dGVz
KCksIDEpOwogfQogCiBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBBcmd1bWVudENvZGVyPENTdHJp
bmc+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgQ1N0cmluZyYgcmVzdWx0KQpAQCAtMTAzLDcg
KzEwMyw3IEBAIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIEFyZ3VtZW50Q29kZXI8Q1MKIAogICAg
IGNoYXIqIGJ1ZmZlcjsKICAgICBDU3RyaW5nIHN0cmluZyA9IENTdHJpbmc6Om5ld1VuaW5pdGlh
bGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0
aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoLCAxKSkKKyAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBidWZmZXIsIGxlbmd0
aCB9LCAxKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmVzdWx0ID0gc3RyaW5nOwpA
QCAtMTIzLDExICsxMjMsNyBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8U3RyaW5nPjo6ZW5jb2RlKEVu
Y29kCiAgICAgYm9vbCBpczhCaXQgPSBzdHJpbmcuaXM4Qml0KCk7CiAKICAgICBlbmNvZGVyIDw8
IGxlbmd0aCA8PCBpczhCaXQ7Ci0KLSAgICBpZiAoaXM4Qml0KQotICAgICAgICBlbmNvZGVyLmVu
Y29kZUZpeGVkTGVuZ3RoRGF0YShzdHJpbmcuY2hhcmFjdGVyczgoKSwgbGVuZ3RoICogc2l6ZW9m
KExDaGFyKSwgYWxpZ25vZihMQ2hhcikpOwotICAgIGVsc2UKLSAgICAgICAgZW5jb2Rlci5lbmNv
ZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5n
LmNoYXJhY3RlcnMxNigpKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSwgYWxpZ25vZihVQ2hhcikp
OworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0cmluZy5ieXRlcygpKTsKIH0K
IHRlbXBsYXRlCiB2b2lkIEFyZ3VtZW50Q29kZXI8U3RyaW5nPjo6ZW5jb2RlPEVuY29kZXI+KEVu
Y29kZXImLCBjb25zdCBTdHJpbmcmKTsKQEAgLTE0Myw3ICsxMzksNyBAQCBzdGF0aWMgaW5saW5l
IHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBkZWNvCiAgICAgCiAgICAgQ2hhcmFjdGVyVHlwZSogYnVm
ZmVyOwogICAgIFN0cmluZyBzdHJpbmcgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVu
Z3RoLCBidWZmZXIpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJhY3Rl
clR5cGUpLCBhbGlnbm9mKENoYXJhY3RlclR5cGUpKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKFNwYW4geyBidWZmZXIsIGxlbmd0aCB9KSkKICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKICAgICAKICAgICByZXR1cm4gc3RyaW5nOwpAQCAtMTgxLDEyICsxNzcs
MTIgQEAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgQXJndW1lbnRDb2RlcjxTdAogCiB2b2lkIEFy
Z3VtZW50Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0
IFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQogewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpLCAxKTsKKyAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3QsIDEpOwogfQogCiBXQVJOX1VOVVNFRF9SRVRVUk4gYm9v
bCBBcmd1bWVudENvZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBT
SEExOjpEaWdlc3QmIGRpZ2VzdCkKIHsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExl
bmd0aERhdGEoZGlnZXN0LmRhdGEoKSwgc2l6ZW9mKGRpZ2VzdCksIDEpOworICAgIHJldHVybiBk
ZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3QsIDEpOwogfQogCiAjaWYgSEFWRShB
VURJVF9UT0tFTikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29k
ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRD
b2RlcnMuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
QXJndW1lbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTIgKzQ1LDEyIEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBTaW1wbGVBcmd1bWUKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBFbmNvZGVyPgogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25z
dCBUJiB0KQogICAgIHsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oJnQpLCBzaXplb2YoVCksIGFsaWdub2YoVCkp
OworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJnQsIDEgfSk7
CiAgICAgfQogCiAgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyLCBUJiB0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ0KSwgc2l6ZW9mKFQp
LCBhbGlnbm9mKFQpKTsKKyAgICAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhE
YXRhKFNwYW4geyAmdCwgMSB9KTsKICAgICB9CiB9OwogCkBAIC02MSwxMyArNjEsMTQgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IEV4dGVudD4gc3RydQogICAgIHsKICAgICAgICAgaWYg
KCFFeHRlbnQpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGFycmF5UmVmZXJl
bmNlLmRhdGEoKSksIGFycmF5UmVmZXJlbmNlLnNpemUoKSAqIHNpemVvZihUKSwgYWxpZ25vZihU
KSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBhcnJheVJl
ZmVyZW5jZS5kYXRhKCksIGFycmF5UmVmZXJlbmNlLnNpemUoKSB9KTsKICAgICB9CiAgICAgc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8QXJyYXlSZWZlcmVuY2VUeXBlPiBkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKICAgICB7CiAgICAgICAgIGlmICghRXh0ZW50KQogICAgICAgICAgICAgcmV0dXJuIEFy
cmF5UmVmZXJlbmNlVHlwZSgpOwotICAgICAgICBjb25zdCB1aW50OF90KiBkYXRhID0gZGVjb2Rl
ci5kZWNvZGVGaXhlZExlbmd0aFJlZmVyZW5jZShFeHRlbnQgKiBzaXplb2YoVCksIGFsaWdub2Yo
VCkpOworCisgICAgICAgIGNvbnN0IGF1dG8qIGRhdGEgPSBkZWNvZGVyLmRlY29kZUZpeGVkTGVu
Z3RoUmVmZXJlbmNlKEV4dGVudCAqIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CiAgICAgICAgIGlm
ICghZGF0YSkKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIHJldHVy
biBBcnJheVJlZmVyZW5jZVR5cGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4oZGF0YSksIEV4
dGVudCk7CkBAIC04Miw3ICs4Myw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBBcmd1
bWVudENvZGUKICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYXJyYXlS
ZWZlcmVuY2Uuc2l6ZSgpKTsKICAgICAgICAgaWYgKCFhcnJheVJlZmVyZW5jZS5zaXplKCkpCiAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGFycmF5UmVmZXJlbmNlLmRhdGEoKSks
IGFycmF5UmVmZXJlbmNlLnNpemUoKSAqIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAg
IGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBhcnJheVJlZmVyZW5jZS5kYXRh
KCksIGFycmF5UmVmZXJlbmNlLnNpemUoKSB9KTsKICAgICB9CiAgICAgc3RhdGljIHN0ZDo6b3B0
aW9uYWw8QXJyYXlSZWZlcmVuY2VUeXBlPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7
CkBAIC05Niw3ICs5Nyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBBcmd1bWVudENv
ZGUKICAgICAgICAgaWYgKFVOTElLRUxZKGRhdGFTaXplLmhhc092ZXJmbG93ZWQoKSkpCiAgICAg
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIGRh
dGEgPSBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoUmVmZXJlbmNlKGRhdGFTaXplLCBhbGlnbm9m
KFQpKTsKKyAgICAgICAgY29uc3QgYXV0byogZGF0YSA9IGRlY29kZXIuZGVjb2RlRml4ZWRMZW5n
dGhSZWZlcmVuY2UoZGF0YVNpemUsIGFsaWdub2YoVCkpOwogICAgICAgICBpZiAoIWRhdGEpCiAg
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAgICByZXR1cm4gQXJyYXlSZWZl
cmVuY2VUeXBlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KGRhdGEpLCBzdGF0aWNfY2FzdDxz
aXplX3Q+KHNpemUpKTsKQEAgLTQyMyw3ICs0MjQsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpCiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5D
YXBhY2l0eT4mIHZlY3RvcikKICAgICB7CiAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KHZlY3Rvci5zaXplKCkpOwotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih2ZWN0b3IuZGF0YSgpKSwg
dmVjdG9yLnNpemUoKSAqIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAgIGVuY29kZXIu
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHZlY3RvciwgYWxpZ25vZihUKSk7CiAgICAgfQogICAgIAog
ICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
ciwgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5
PiYgdmVjdG9yKQpAQCAtNDQ2LDcgKzQ0Nyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVf
dCBpbmxpbmVDYXBhY2kKICAgICAgICAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxv
d0hhbmRsZXIsIG1pbkNhcGFjaXR5PiB0ZW1wOwogICAgICAgICB0ZW1wLmdyb3coc2l6ZSk7CiAK
LSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9j
YXN0PHVpbnQ4X3QqPih0ZW1wLmRhdGEoKSksIHNpemUgKiBzaXplb2YoVCksIGFsaWdub2YoVCkp
KQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHRlbXApKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHZlY3Rvci5zd2FwKHRlbXApOwpAQCAt
NDczLDcgKzQ3NCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kK
ICAgICAgICAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNh
cGFjaXR5PiB2ZWN0b3I7CiAgICAgICAgIHZlY3Rvci5ncm93KHNpemUpOwogCi0gICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4odmVjdG9yLmRhdGEoKSksIHNpemUgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpKQorICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHZlY3RvcikpCiAgICAgICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgICAgIHJldHVybiB2ZWN0b3I7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9BcnJheVJlZmVyZW5jZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FycmF5UmVmZXJlbmNlLmgJKHJldmlzaW9uIDI3
ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FycmF5UmVmZXJlbmNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDggQEAKIAogbmFtZXNwYWNlIElQQyB7CiAKKy8vIEZJ
WE1FOiBSZXBsYWNlIHdpdGggPHd0Zi9TcGFuLmg+CisKIGlubGluZSBjb25zdGV4cHIgc2l6ZV90
IGFycmF5UmVmZXJlbmNlRHluYW1pY0V4dGVudCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90
Pjo6bWF4KCk7CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgRXh0ZW50ID0gYXJyYXlS
ZWZlcmVuY2VEeW5hbWljRXh0ZW50PgpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
RGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVj
b2Rlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L0RlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsMTMgKzIwNiwxMyBAQCBib29sIERl
Y29kZXI6OmJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhCiAgICAgcmV0dXJuIGFsaWduZWRCdWZm
ZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKHJvdW5kVXBUb0FsaWdubWVudChtX2J1ZmZlclBvcywg
YWxpZ25tZW50KSwgbV9idWZmZXIsIG1fYnVmZmVyRW5kLCBzaXplKTsKIH0KIAotYm9vbCBEZWNv
ZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIHNp
emVfdCBhbGlnbm1lbnQpCitib29sIERlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFu
PHN0ZDo6Ynl0ZT4gZGF0YSwgc2l6ZV90IGFsaWdubWVudCkKIHsKLSAgICBpZiAoIWFsaWduQnVm
ZmVyUG9zaXRpb24oYWxpZ25tZW50LCBzaXplKSkKKyAgICBpZiAoIWFsaWduQnVmZmVyUG9zaXRp
b24oYWxpZ25tZW50LCBkYXRhLnNpemUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IG1lbWNweShkYXRhLCBtX2J1ZmZlclBvcywgc2l6ZSk7Ci0gICAgbV9idWZmZXJQb3MgKz0gc2l6
ZTsKKyAgICBtZW1jcHkoZGF0YS5kYXRhKCksIG1fYnVmZmVyUG9zLCBkYXRhLnNpemUoKSk7Cisg
ICAgbV9idWZmZXJQb3MgKz0gZGF0YS5zaXplKCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgJKHJldmlzaW9uIDI3ODgwOSkKKysr
IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NzksNyArNzksMTMgQEAgcHVibGljOgogICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGlzVmFs
aWQoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlclBvcyAhPSBudWxscHRyOyB9CiAgICAgdm9pZCBt
YXJrSW52YWxpZCgpIHsgbV9idWZmZXJQb3MgPSBudWxscHRyOyB9CiAKLSAgICBXQVJOX1VOVVNF
RF9SRVRVUk4gYm9vbCBkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCogZGF0YSwgc2l6ZV90
LCBzaXplX3QgYWxpZ25tZW50KTsKKyAgICBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVG
aXhlZExlbmd0aERhdGEoU3BhbjxzdGQ6OmJ5dGU+LCBzaXplX3QgYWxpZ25tZW50KTsKKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCBzaXplX3QgYWxpZ25tZW50ID0gYWxpZ25vZih0eXBl
bmFtZSBkZWNsdHlwZShTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pOjp2YWx1ZV90eXBl
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVGaXhlZExlbmd0aERhdGEoYXNXcml0YWJs
ZUJ5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSksIGFsaWdubWVudCk7CisgICAg
fQogCiAgICAgLy8gVGhlIGRhdGEgaW4gdGhlIHJldHVybmVkIHBvaW50ZXIgaGVyZSB3aWxsIG9u
bHkgYmUgdmFsaWQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgRGVjb2RlciBvYmplY3QuCiAgICAg
Ly8gUmV0dXJucyBudWxscHRyIG9uIGZhaWx1cmUuCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9FbmNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0lQQy9FbmNvZGVyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvRW5jb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiwxMiArMjAyLDEyIEBA
IHVpbnQ4X3QqIEVuY29kZXI6Omdyb3coc2l6ZV90IGFsaWdubWVudCwKICAgICByZXR1cm4gbV9i
dWZmZXIgKyBhbGlnbmVkU2l6ZTsKIH0KIAotdm9pZCBFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0
aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQp
Cit2b2lkIEVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0
ZT4gZGF0YSwgc2l6ZV90IGFsaWdubWVudCkKIHsKLSAgICBBU1NFUlQoIShyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4oZGF0YSkgJSBhbGlnbm1lbnQpKTsKKyAgICBBU1NFUlQoIShyZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdD4oZGF0YS5kYXRhKCkpICUgYWxpZ25tZW50KSk7CiAKLSAgICB1
aW50OF90KiBidWZmZXIgPSBncm93KGFsaWdubWVudCwgc2l6ZSk7Ci0gICAgbWVtY3B5KGJ1ZmZl
ciwgZGF0YSwgc2l6ZSk7CisgICAgYXV0byogYnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQsIGRhdGEu
c2l6ZSgpKTsKKyAgICBtZW1jcHkoYnVmZmVyLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwog
fQogCiB2b2lkIEVuY29kZXI6OmFkZEF0dGFjaG1lbnQoQXR0YWNobWVudCYmIGF0dGFjaG1lbnQp
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkp
CisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorI2luY2x1
ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSVBD
IHsKQEAgLTYwLDcgKzYxLDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgd3JhcEZvclRlc3Rpbmco
VW5pcXVlUmVmPEVuY29kZXI+JiYpOwogCi0gICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEo
Y29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90LCBzaXplX3QgYWxpZ25tZW50KTsKKyAgICB2b2lk
IGVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSwgc2l6ZV90
IGFsaWdubWVudCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCBzaXplX3QgYWxpZ25tZW50ID0gYWxpZ25vZih0eXBl
bmFtZSBkZWNsdHlwZShTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pOjp2YWx1ZV90eXBl
KSkKKyAgICB7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShhc0J5dGVzKFNwYW4geyBz
dGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSksIGFsaWdubWVudCk7CisgICAgfQogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KICAgICBFbmNvZGVyJiBvcGVyYXRvcjw8KFQmJiB0KQpJbmRleDogU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU2hhcmVkQnVmZmVyQ29weS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU2hhcmVkQnVmZmVyQ29weS5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1NoYXJlZEJ1ZmZlckNv
cHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHZvaWQgU2hhcmVkQnVmZmVy
Q29weTo6ZW5jb2RlKEVuY29kZXImIGUKICAgICBpZiAoIWJ1ZmZlclNpemUpCiAgICAgICAgIHJl
dHVybjsKICAgICBmb3IgKGF1dG8mIHNlZ21lbnQgOiAqbV9idWZmZXIpCi0gICAgICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHNlZ21lbnQuc2VnbWVudC0+ZGF0YSgpLCBzZWdtZW50
LnNlZ21lbnQtPnNpemUoKSwgMSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKHNlZ21lbnQuc2VnbWVudC0+Ynl0ZXMoKSwgMSk7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8U2hh
cmVkQnVmZmVyQ29weT4gU2hhcmVkQnVmZmVyQ29weTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uRW5jb2Rl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5l
Y3Rpb25FbmNvZGVyLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25FbmNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYg
KzI3LDcgQEAKIAogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiTWVzc2Fn
ZU5hbWVzLmgiCisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CiAKIG5hbWVzcGFjZSBJUEMgewpAQCAtNTMsMjIgKzU0LDI4IEBAIHB1YmxpYzoKIAog
ICAgIH5TdHJlYW1Db25uZWN0aW9uRW5jb2RlcigpID0gZGVmYXVsdDsKIAotICAgIGJvb2wgZW5j
b2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBzaXpl
X3QgYWxpZ25tZW50KQorICAgIGJvb2wgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48Y29uc3Qg
c3RkOjpieXRlPiBkYXRhLCBzaXplX3QgYWxpZ25tZW50KQogICAgIHsKICAgICAgICAgc2l6ZV90
IGJ1ZmZlclBvaW50ZXIgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50
cHRyX3Q+KG1fYnVmZmVyICsgbV9lbmNvZGVkU2l6ZSkpOwogICAgICAgICBzaXplX3QgbmV3QnVm
ZmVyUG9pbnRlciA9IHJvdW5kVXBUb011bHRpcGxlT2YoYWxpZ25tZW50LCBidWZmZXJQb2ludGVy
KTsKICAgICAgICAgaWYgKG5ld0J1ZmZlclBvaW50ZXIgPCBidWZmZXJQb2ludGVyKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpbnRwdHJfdCBhbGlnbmVkU2l6ZSA9IG1fZW5j
b2RlZFNpemUgKyAobmV3QnVmZmVyUG9pbnRlciAtIGJ1ZmZlclBvaW50ZXIpOwotICAgICAgICBp
ZiAoIXJlc2VydmUoYWxpZ25lZFNpemUsIHNpemUpKQorICAgICAgICBpZiAoIXJlc2VydmUoYWxp
Z25lZFNpemUsIGRhdGEuc2l6ZSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgdWludDhfdCogYnVmZmVyID0gbV9idWZmZXIgKyBhbGlnbmVkU2l6ZTsKLSAgICAgICAgbWVt
Y3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7Ci0gICAgICAgIG1fZW5jb2RlZFNpemUgPSBhbGlnbmVk
U2l6ZSArIHNpemU7CisgICAgICAgIGF1dG8qIGJ1ZmZlciA9IG1fYnVmZmVyICsgYWxpZ25lZFNp
emU7CisgICAgICAgIG1lbWNweShidWZmZXIsIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7Cisg
ICAgICAgIG1fZW5jb2RlZFNpemUgPSBhbGlnbmVkU2l6ZSArIGRhdGEuc2l6ZSgpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZv
aWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCBzaXplX3QgYWxpZ25tZW50ID0gYWxp
Z25vZihUKSkKKyAgICB7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShhc0J5dGVzKFNw
YW4geyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSksIGFsaWdubWVudCk7CisgICAgfQorCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBTdHJlYW1Db25uZWN0aW9uRW5jb2RlciYgb3BlcmF0
b3I8PChUJiYgdCkKICAgICB7CiAgICAgICAgIEFyZ3VtZW50Q29kZXI8c3RkOjpyZW1vdmVfY29u
c3RfdDxzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxUPj4sIHZvaWQ+OjplbmNvZGUoKnRoaXMsIHN0
ZDo6Zm9yd2FyZDxUPih0KSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJn
dW1lbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNv
cmVBcmd1bWVudENvZGVycy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQv
U2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw3
ICsxNDQsNyBAQCBzdGF0aWMgdm9pZCBlbmNvZGVTaGFyZWRCdWZmZXIoRW5jb2RlciYgCiAgICAg
Ly8gb3ZlciB0aGUgSVBDLiBDb25uZWN0aW9uVW5peC5jcHAgYWxyZWFkeSB1c2VzIHNoYXJlZCBt
ZW1vcnkgdG8gc2VuZCBhbnkgSVBDIG1lc3NhZ2UgdGhhdCBpcwogICAgIC8vIHRvbyBsYXJnZS4g
U2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg1NzEuCiAgICAg
Zm9yIChjb25zdCBhdXRvJiBlbGVtZW50IDogKmJ1ZmZlcikKLSAgICAgICAgZW5jb2Rlci5lbmNv
ZGVGaXhlZExlbmd0aERhdGEoZWxlbWVudC5zZWdtZW50LT5kYXRhKCksIGVsZW1lbnQuc2VnbWVu
dC0+c2l6ZSgpLCAxKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoZWxl
bWVudC5zZWdtZW50LT5ieXRlcygpLCAxKTsKICNlbHNlCiAgICAgU2hhcmVkTWVtb3J5OjpIYW5k
bGUgaGFuZGxlOwogICAgIGF1dG8gc2hhcmVkTWVtb3J5QnVmZmVyID0gU2hhcmVkTWVtb3J5Ojpj
b3B5QnVmZmVyKCpidWZmZXIpOwpAQCAtMTgwLDcgKzE4MCw3IEBAIHN0YXRpYyBXQVJOX1VOVVNF
RF9SRVRVUk4gYm9vbCBkZWNvZGVTaGEKIAogICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAg
IGRhdGEuZ3JvdyhidWZmZXJTaXplKTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5n
dGhEYXRhKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgMSkpCisgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZUZpeGVkTGVuZ3RoRGF0YShkYXRhLCAxKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgYnVmZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShkYXRhKSk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQXV4aWxpYXJ5UHJvY2Vzc01hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQXV4aWxpYXJ5UHJvY2Vzc01hYy5tbQkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL0F1eGlsaWFyeVByb2Nl
c3NNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMyMSw3ICszMjEsNyBAQCBzdGF0aWMgU3RyaW5n
IHNhbmRib3hGaWxlUGF0aChjb25zdCBTdHJpCiAgICAgY3J5cHRvLT5hZGRCeXRlcyhoZWFkZXIu
ZGF0YSgpLCBoZWFkZXIubGVuZ3RoKCkpOwogICAgIGF1dG8gaGFzaCA9IGNyeXB0by0+Y29tcHV0
ZUhhc2goKTsKIAotICAgIHJldHVybiBtYWtlU3RyaW5nKGRpcmVjdG9yeVBhdGgsICIvQ29tcGls
ZWRTYW5kYm94KyIsIGJhc2U2NFVSTEVuY29kZWQoaGFzaC5kYXRhKCksIGhhc2guc2l6ZSgpKSk7
CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoZGlyZWN0b3J5UGF0aCwgIi9Db21waWxlZFNhbmRib3gr
IiwgYmFzZTY0VVJMRW5jb2RlZChoYXNoKSk7CiB9CiAKIHN0YXRpYyBib29sIGVuc3VyZVNhbmRi
b3hDYWNoZURpcmVjdG9yeShjb25zdCBTYW5kYm94SW5mbyYgaW5mbykKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL3dpbi9XZWJDb3JlQXJndW1lbnRDb2RlcnNXaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9XZWJDb3JlQXJndW1lbnRDb2RlcnNXaW4uY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vV2ViQ29yZUFy
Z3VtZW50Q29kZXJzV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTIgKzUxLDEyIEBAIHN0
ZDo6b3B0aW9uYWw8Rm9udEF0dHJpYnV0ZXM+IEFyZ3VtZW50Q28KIHRlbXBsYXRlPD4gc3RydWN0
IEFyZ3VtZW50Q29kZXI8TE9HRk9OVD4gewogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBMT0dGT05UJiBsb2dGb250KQogICAgIHsKLSAgICAgICAgZW5jb2Rl
ci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4o
JmxvZ0ZvbnQpLCBzaXplb2YgbG9nRm9udCwgMSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKFNwYW4geyAmbG9nRm9udCwgMSB9LCAxKTsKICAgICB9CiAgICAgc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8TE9HRk9OVD4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewog
ICAgICAgICBMT0dGT05UIGxvZ0ZvbnQ7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhl
ZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJmxvZ0ZvbnQpLCBzaXplb2Yo
bG9nRm9udCksIDEpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KFNwYW4geyAmbG9nRm9udCwgMSB9LCAxKSkKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CiAgICAgICAgIHJldHVybiBsb2dGb250OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNwcAko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRl
bnRSdWxlTGlzdFN0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDE4ICsxMzEsMjAgQEAg
c3RhdGljIFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhIGVuY29kZQogICAgIGVuY29kZXIgPDwg
bWV0YURhdGEuY29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNvZGVTaXplOwogICAgIGVuY29kZXIgPDwg
bWV0YURhdGEuY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluOwogCi0gICAgQVNTRVJUKGVuY29k
ZXIuYnVmZmVyU2l6ZSgpID09IENvbnRlbnRSdWxlTGlzdEZpbGVIZWFkZXJTaXplKTsKLSAgICBy
ZXR1cm4gV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGEoZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rl
ci5idWZmZXJTaXplKCkpOworICAgIEFTU0VSVChlbmNvZGVyLmJ1ZmZlcigpLnNpemUoKSA9PSBD
b250ZW50UnVsZUxpc3RGaWxlSGVhZGVyU2l6ZSk7CisgICAgcmV0dXJuIFdlYktpdDo6TmV0d29y
a0NhY2hlOjpEYXRhIHsgZW5jb2Rlci5idWZmZXIoKSB9OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB2b2lkIGdldERhdGEoY29uc3QgVCYsIGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWlu
dDhfdCosIHNpemVfdCk+Jik7Ci10ZW1wbGF0ZTw+IHZvaWQgZ2V0RGF0YShjb25zdCBXZWJLaXQ6
Ok5ldHdvcmtDYWNoZTo6RGF0YSYgZGF0YSwgY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50
OF90Kiwgc2l6ZV90KT4mIGZ1bmN0aW9uKQordGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBnZXRE
YXRhKGNvbnN0IFQmLCBjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+
Jik7CisKK3RlbXBsYXRlPD4gdm9pZCBnZXREYXRhKGNvbnN0IFdlYktpdDo6TmV0d29ya0NhY2hl
OjpEYXRhJiBkYXRhLCBjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+
JiBmdW5jdGlvbikKIHsKICAgICBkYXRhLmFwcGx5KGZ1bmN0aW9uKTsKIH0KLXRlbXBsYXRlPD4g
dm9pZCBnZXREYXRhKGNvbnN0IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlciYgZGF0YSwgY29uc3QgRnVu
Y3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIGZ1bmN0aW9uKQorCit0ZW1wbGF0
ZTw+IHZvaWQgZ2V0RGF0YShjb25zdCBXZWJDb3JlOjpTaGFyZWRCdWZmZXImIGRhdGEsIGNvbnN0
IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mIGZ1bmN0aW9uKQogewotICAg
IGZ1bmN0aW9uKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgZnVuY3Rpb24oZGF0YS5i
eXRlcygpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTE1MCwxMyArMTUyLDEzIEBA
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPENvbnRlbnRSdWxlTGlzdE1ldGEKIHsKICAgICBib29sIHN1
Y2Nlc3MgPSBmYWxzZTsKICAgICBDb250ZW50UnVsZUxpc3RNZXRhRGF0YSBtZXRhRGF0YTsKLSAg
ICBnZXREYXRhKGZpbGVEYXRhLCBbJm1ldGFEYXRhLCAmc3VjY2VzcywgJmZpbGVEYXRhXShjb25z
dCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeworICAgIGdldERhdGEoZmlsZURhdGEsIFsm
bWV0YURhdGEsICZzdWNjZXNzLCAmZmlsZURhdGFdKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRh
KSB7CiAgICAgICAgIC8vIFRoZSBmaWxlIGRhdGEgc2hvdWxkIGJlIG1hcHBlZCBpbnRvIG9uZSBj
b250aW51b3VzIG1lbW9yeSBzZWdtZW50IHNvIHRoZSBzaXplCiAgICAgICAgIC8vIHBhc3NlZCB0
byB0aGUgYXBwbGllciBzaG91bGQgYWx3YXlzIGVxdWFsIHRoZSBkYXRhIHNpemUuCi0gICAgICAg
IGlmIChzaXplICE9IGZpbGVEYXRhLnNpemUoKSkKKyAgICAgICAgaWYgKGRhdGEuc2l6ZSgpICE9
IGZpbGVEYXRhLnNpemUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBX
VEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YSwgc2l6ZSk7CisgICAgICAgIFdU
Rjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlciB7IGRhdGEgfTsKICAgICAgICAgCiAgICAg
ICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IHZlcnNpb247CiAgICAgICAgIGRlY29kZXIgPj4g
dmVyc2lvbjsKQEAgLTIyOCw4ICsyMzAsOCBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxNYXBwZWRE
YXRhPiBvcGVuQW5kCiBzdGF0aWMgYm9vbCB3cml0ZURhdGFUb0ZpbGUoY29uc3QgV2ViS2l0OjpO
ZXR3b3JrQ2FjaGU6OkRhdGEmIGZpbGVEYXRhLCBQbGF0Zm9ybUZpbGVIYW5kbGUgZmQpCiB7CiAg
ICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKLSAgICBmaWxlRGF0YS5hcHBseShbZmQsICZzdWNjZXNz
XShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgewotICAgICAgICBpZiAod3JpdGVU
b0ZpbGUoZmQsIGRhdGEsIHNpemUpID09IC0xKSB7CisgICAgZmlsZURhdGEuYXBwbHkoW2ZkLCAm
c3VjY2Vzc10oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpIHsKKyAgICAgICAgaWYgKHdyaXRl
VG9GaWxlKGZkLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpID09IC0xKSB7CiAgICAgICAgICAg
ICBzdWNjZXNzID0gZmFsc2U7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNh
dGlvblBhbmVsLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCShyZXZpc2lvbiAyNzg4MDkpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5l
bC5tbQkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBzdGF0aWMgUmV0YWluUHRyPE5T
RGF0YT4gcHJvZHVjZUNsaWVudERhCiAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpAIndl
YmF1dGhuLmdldCIgZm9yS2V5OkAidHlwZSJdOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAg
W2RpY3Rpb25hcnkgc2V0T2JqZWN0OmJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNoYWxsZW5nZS5i
eXRlcywgY2hhbGxlbmdlLmxlbmd0aCkgZm9yS2V5OkAiY2hhbGxlbmdlIl07CisgICAgW2RpY3Rp
b25hcnkgc2V0T2JqZWN0OmJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKFNwYW4geyBzdGF0aWNfY2Fz
dDxjb25zdCBzdGQ6OmJ5dGUqPihjaGFsbGVuZ2UuYnl0ZXMpLCBjaGFsbGVuZ2UubGVuZ3RoIH0p
IGZvcktleTpAImNoYWxsZW5nZSJdOwogICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpvcmlnaW4g
Zm9yS2V5OkAib3JpZ2luIl07CiAKICAgICByZXR1cm4gW05TSlNPTlNlcmlhbGl6YXRpb24gZGF0
YVdpdGhKU09OT2JqZWN0OmRpY3Rpb25hcnkuZ2V0KCkgb3B0aW9uczpOU0pTT05Xcml0aW5nU29y
dGVkS2V5cyBlcnJvcjpuaWxdOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0
aGVudGljYXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsQXV0aGVu
dGljYXRvci5tbQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC04NSw3ICs4NSw3IEBAIHN0YXRpYyBpbmxpbmUgSGFzaFNldDxTdHJpbmc+IHByb2R1
Y2VIYXMKICAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0OwogICAgIGZvciAoYXV0byYgY3JlZGVu
dGlhbERlc2NyaXB0b3IgOiBjcmVkZW50aWFsRGVzY3JpcHRvcnMpIHsKICAgICAgICAgaWYgKGVt
cHR5VHJhbnNwb3J0c09yQ29udGFpbihjcmVkZW50aWFsRGVzY3JpcHRvci50cmFuc3BvcnRzLCBB
dXRoZW50aWNhdG9yVHJhbnNwb3J0OjpJbnRlcm5hbCkgJiYgY3JlZGVudGlhbERlc2NyaXB0b3Iu
dHlwZSA9PSBQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5ICYmIGNyZWRlbnRpYWxE
ZXNjcmlwdG9yLmlkVmVjdG9yLnNpemUoKSA9PSBjcmVkZW50aWFsSWRMZW5ndGgpCi0gICAgICAg
ICAgICByZXN1bHQuYWRkKGJhc2U2NEVuY29kZVRvU3RyaW5nKGNyZWRlbnRpYWxEZXNjcmlwdG9y
LmlkVmVjdG9yLmRhdGEoKSwgY3JlZGVudGlhbERlc2NyaXB0b3IuaWRWZWN0b3Iuc2l6ZSgpKSk7
CisgICAgICAgICAgICByZXN1bHQuYWRkKGJhc2U2NEVuY29kZVRvU3RyaW5nKGNyZWRlbnRpYWxE
ZXNjcmlwdG9yLmlkVmVjdG9yKSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0y
MzMsNyArMjMzLDcgQEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6Om1ha2VDcmVkZW50aWFsKAog
ICAgICAgICBpZiAobm90Rm91bmQgIT0gbV9leGlzdGluZ0NyZWRlbnRpYWxzLmZpbmRNYXRjaGlu
ZyhbJmV4Y2x1ZGVDcmVkZW50aWFsSWRzXSAoYXV0byYgY3JlZGVudGlhbCkgewogICAgICAgICAg
ICAgYXV0byogcmF3SWQgPSBjcmVkZW50aWFsLT5yYXdJZCgpOwogICAgICAgICAgICAgQVNTRVJU
KHJhd0lkKTsKLSAgICAgICAgICAgIHJldHVybiBleGNsdWRlQ3JlZGVudGlhbElkcy5jb250YWlu
cyhiYXNlNjRFbmNvZGVUb1N0cmluZyhyYXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgp
KSk7CisgICAgICAgICAgICByZXR1cm4gZXhjbHVkZUNyZWRlbnRpYWxJZHMuY29udGFpbnMoYmFz
ZTY0RW5jb2RlVG9TdHJpbmcocmF3SWQtPmJ5dGVzKCkpKTsKICAgICAgICAgfSkpIHsKICAgICAg
ICAgICAgIHJlY2VpdmVFeGNlcHRpb24oeyBOb3RBbGxvd2VkRXJyb3IsICJBdCBsZWFzdCBvbmUg
Y3JlZGVudGlhbCBtYXRjaGVzIGFuIGVudHJ5IG9mIHRoZSBleGNsdWRlQ3JlZGVudGlhbHMgbGlz
dCBpbiB0aGUgcGxhdGZvcm0gYXR0YWNoZWQgYXV0aGVudGljYXRvci4iX3MgfSwgV2ViQXV0aGVu
dGljYXRpb25TdGF0dXM6OkxBRXhjbHVkZUNyZWRlbnRpYWxzTWF0Y2hlZCk7CiAgICAgICAgICAg
ICByZXR1cm47CkBAIC01MTAsNyArNTEwLDcgQEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6Omdl
dEFzc2VydGlvbigpCiAgICAgICAgIH0KIAogICAgICAgICBhdXRvKiByYXdJZCA9IGNyZWRlbnRp
YWwtPnJhd0lkKCk7Ci0gICAgICAgIGlmIChhbGxvd0NyZWRlbnRpYWxJZHMuY29udGFpbnMoYmFz
ZTY0RW5jb2RlVG9TdHJpbmcocmF3SWQtPmRhdGEoKSwgcmF3SWQtPmJ5dGVMZW5ndGgoKSkpKQor
ICAgICAgICBpZiAoYWxsb3dDcmVkZW50aWFsSWRzLmNvbnRhaW5zKGJhc2U2NEVuY29kZVRvU3Ry
aW5nKHJhd0lkLT5ieXRlcygpKSkpCiAgICAgICAgICAgICBhc3NlcnRpb25SZXNwb25zZXMudW5j
aGVja2VkQXBwZW5kKGNyZWRlbnRpYWwuY29weVJlZigpKTsKICAgICB9CiAgICAgaWYgKGFzc2Vy
dGlvblJlc3BvbnNlcy5pc0VtcHR5KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0xvY2FsQ29ubmVjdGlvbi5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tM
b2NhbENvbm5lY3Rpb24ubW0JKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0xvY2FsQ29ubmVjdGlvbi5tbQkod29y
a2luZyBjb3B5KQpAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgTW9ja0xvY2FsQ29ubmVjdGlvbjo6
ZmlsdGVyUmVzcG9uc2UKICAgICBmb3IgKDsgaXRyICE9IHJlc3BvbnNlcy5lbmQoKTsgKytpdHIp
IHsKICAgICAgICAgYXV0byogcmF3SWQgPSBpdHItPmdldCgpLnJhd0lkKCk7CiAgICAgICAgIEFT
U0VSVChyYXdJZCk7Ci0gICAgICAgIGF1dG8gcmF3SWRCYXNlNjQgPSBiYXNlNjRFbmNvZGVUb1N0
cmluZyhyYXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgYXV0byBy
YXdJZEJhc2U2NCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKHJhd0lkLT5ieXRlcygpKTsKICAgICAg
ICAgaWYgKHJhd0lkQmFzZTY0ID09IHByZWZlcnJlZENyZWRlbnRpYWxJZEJhc2U2NCkKICAgICAg
ICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9M
ZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL21hYy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvTGVnYWN5U2Vzc2lvblN0YXRlQ29k
aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDcgKzEyOSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgKnRoaXMgPDwgbGVuZ3RoOwogCiAgICAgICAgICp0aGlzIDw8IHN0YXRpY19jYXN0PHVpbnQ2
NF90PihsZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKLSAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KFN0cmluZ1ZpZXcodmFsdWUpLnVw
Y29udmVydGVkQ2hhcmFjdGVycygpLmdldCgpKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSwgYWxp
Z25vZihVQ2hhcikpOworICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IFN0cmlu
Z1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpLmdldCgpLCBsZW5ndGggfSk7CiAK
ICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KQEAgLTEzNyw3ICsxMzcsNyBAQCBwdWJsaWM6
CiAgICAgSGlzdG9yeUVudHJ5RGF0YUVuY29kZXImIG9wZXJhdG9yPDwoY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+JiB2YWx1ZSkKICAgICB7CiAgICAgICAgICp0aGlzIDw8IHN0YXRpY19jYXN0PHVpbnQ2
NF90Pih2YWx1ZS5zaXplKCkpOwotICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEodmFsdWUu
ZGF0YSgpLCB2YWx1ZS5zaXplKCksIDEpOworICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEo
dmFsdWUsIDEpOwogCiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CkBAIC0xNDUsNyArMTQ1
LDcgQEAgcHVibGljOgogICAgIEhpc3RvcnlFbnRyeURhdGFFbmNvZGVyJiBvcGVyYXRvcjw8KGNv
bnN0IFZlY3RvcjxjaGFyPiYgdmFsdWUpCiAgICAgewogICAgICAgICAqdGhpcyA8PCBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4odmFsdWUuc2l6ZSgpKTsKLSAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZhbHVlLmRhdGEoKSksIHZhbHVl
LnNpemUoKSwgMSk7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YSh2YWx1ZSwgMSk7CiAK
ICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KQEAgLTIwNiwxNyArMjA2LDIzIEBAIHByaXZh
dGU6CiAgICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYXJpdGhtZXRpYzxUeXBl
Pjo6dmFsdWUsICIiKTsKIAotICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oJnZhbHVlKSwgc2l6ZW9mKHZhbHVlKSwgc2l6ZW9mKHZhbHVlKSk7
CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJnZhbHVlLCAxIH0sIHNpemVv
Zih2YWx1ZSkpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCi0gICAgdm9pZCBlbmNv
ZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIHVuc2ln
bmVkIGFsaWdubWVudCkKKyAgICB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0
IHN0ZDo6Ynl0ZT4gZGF0YSwgdW5zaWduZWQgYWxpZ25tZW50KQogICAgIHsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQoZGF0YSB8fCAhc2l6ZSk7Ci0gICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90PihkYXRhKSAlIGFsaWdubWVudCkpOworICAgICAgICBSRUxFQVNFX0FT
U0VSVChkYXRhLmRhdGEoKSB8fCAhZGF0YS5zaXplKCkpOworICAgICAgICBBU1NFUlQoIShyZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZGF0YS5kYXRhKCkpICUgYWxpZ25tZW50KSk7CiAKLSAg
ICAgICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQsIHNpemUpOwotICAgICAgICBt
ZW1jcHkoYnVmZmVyLCBkYXRhLCBzaXplKTsKKyAgICAgICAgYXV0byogYnVmZmVyID0gZ3Jvdyhh
bGlnbm1lbnQsIGRhdGEuc2l6ZSgpKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciwgZGF0YS5kYXRh
KCksIGRhdGEuc2l6ZSgpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAg
IHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCBzaXplX3QgYWxpZ25tZW50ID0g
YWxpZ25vZihUKSkKKyAgICB7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShhc0J5dGVz
KFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSksIGFsaWdubWVudCk7CiAgICAgfQogCiAg
ICAgdWludDhfdCogZ3Jvdyh1bnNpZ25lZCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQpAQCAtNjAx
LDcgKzYwNyw3IEBAIHB1YmxpYzoKIAogICAgICAgICBVQ2hhciogYnVmZmVyOwogICAgICAgICBh
dXRvIHN0cmluZyA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7
Ci0gICAgICAgIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3Qq
PihidWZmZXIpLCBsZW5ndGggKiBzaXplb2YoVUNoYXIpLCBhbGlnbm9mKFVDaGFyKSk7CisgICAg
ICAgIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgYnVmZmVyLCBsZW5ndGggfSwgYWxpZ25v
ZihVQ2hhcikpOwogCiAgICAgICAgIHZhbHVlID0gc3RyaW5nOwogICAgICAgICByZXR1cm4gKnRo
aXM7CkBAIC03MzcsMTcgKzc0MywyMyBAQCBwcml2YXRlOgogICAgICAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfYXJpdGhtZXRpYzxUeXBlPjo6dmFsdWUsICIiKTsKICAgICAgICAgdmFsdWUgPSBU
eXBlKCk7CiAKLSAgICAgICAgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KCZ2YWx1ZSksIHNpemVvZih2YWx1ZSksIHNpemVvZih2YWx1ZSkpOworICAgICAg
ICBkZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZ2YWx1ZSwgMSB9LCBzaXplb2YodmFsdWUp
KTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAotICAgIHZvaWQgZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBhbGlnbm1lbnQp
CisgICAgdm9pZCBkZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbjxzdGQ6OmJ5dGU+IGRhdGEsIHVu
c2lnbmVkIGFsaWdubWVudCkKICAgICB7Ci0gICAgICAgIGlmICghYWxpZ25CdWZmZXJQb3NpdGlv
bihhbGlnbm1lbnQsIHNpemUpKQorICAgICAgICBpZiAoIWFsaWduQnVmZmVyUG9zaXRpb24oYWxp
Z25tZW50LCBkYXRhLnNpemUoKSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbWVt
Y3B5KGRhdGEsIG1fYnVmZmVyLCBzaXplKTsKLSAgICAgICAgbV9idWZmZXIgKz0gc2l6ZTsKKyAg
ICAgICAgbWVtY3B5KGRhdGEuZGF0YSgpLCBtX2J1ZmZlciwgZGF0YS5zaXplKCkpOworICAgICAg
ICBtX2J1ZmZlciArPSBkYXRhLnNpemUoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorICAgIHZvaWQgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCBzaXplX3QgYWxp
Z25tZW50KQorICAgIHsKKyAgICAgICAgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGFzV3JpdGFibGVC
eXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pLCBhbGlnbm1lbnQpOwogICAgIH0K
IAogICAgIGJvb2wgYWxpZ25CdWZmZXJQb3NpdGlvbih1bnNpZ25lZCBhbGlnbm1lbnQsIHNpemVf
dCBzaXplKQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0
Q2hhbm5lbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdv
cmsvV2ViU29ja2V0Q2hhbm5lbC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01OSw4ICs1OSw4IEBAIE5ldHdvcmtTZW5kUXVldWUgV2ViU29ja2V0Q2hhbm5lbDo6Y3Jl
YXQKICAgICAgICAgY2hhbm5lbC5ub3RpZnlTZW5kRnJhbWUoV2ViU29ja2V0RnJhbWU6Ok9wQ29k
ZTo6T3BDb2RlVGV4dCwgdXRmOFN0cmluZy5kYXRhQXNVSW50OFB0cigpLCB1dGY4U3RyaW5nLmxl
bmd0aCgpKTsKICAgICAgICAgY2hhbm5lbC5zZW5kTWVzc2FnZShNZXNzYWdlczo6TmV0d29ya1Nv
Y2tldENoYW5uZWw6OlNlbmRTdHJpbmcgeyBJUEM6OkRhdGFSZWZlcmVuY2UgeyB1dGY4U3RyaW5n
LmRhdGFBc1VJbnQ4UHRyKCksIHV0ZjhTdHJpbmcubGVuZ3RoKCkgfSB9LCB1dGY4U3RyaW5nLmxl
bmd0aCgpKTsKICAgICB9LCBbJmNoYW5uZWxdKGF1dG8mIHNwYW4pIHsKLSAgICAgICAgY2hhbm5l
bC5ub3RpZnlTZW5kRnJhbWUoV2ViU29ja2V0RnJhbWU6Ok9wQ29kZTo6T3BDb2RlQmluYXJ5LCBz
cGFuLmRhdGEoKSwgc3Bhbi5zaXplKCkpOwotICAgICAgICBjaGFubmVsLnNlbmRNZXNzYWdlKE1l
c3NhZ2VzOjpOZXR3b3JrU29ja2V0Q2hhbm5lbDo6U2VuZERhdGEgeyBJUEM6OkRhdGFSZWZlcmVu
Y2UgeyBzcGFuLmRhdGEoKSwgc3Bhbi5zaXplKCkgfSB9LCBzcGFuLnNpemUoKSk7CisgICAgICAg
IGNoYW5uZWwubm90aWZ5U2VuZEZyYW1lKFdlYlNvY2tldEZyYW1lOjpPcENvZGU6Ok9wQ29kZUJp
bmFyeSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3Bhbi5kYXRhKCkpLCBzcGFu
LnNpemUoKSk7CisgICAgICAgIGNoYW5uZWwuc2VuZE1lc3NhZ2UoTWVzc2FnZXM6Ok5ldHdvcmtT
b2NrZXRDaGFubmVsOjpTZW5kRGF0YSB7IElQQzo6RGF0YVJlZmVyZW5jZSB7IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNwYW4uZGF0YSgpKSwgc3Bhbi5zaXplKCkgfSB9LCBzcGFu
LnNpemUoKSk7CiAgICAgfSwgWyZjaGFubmVsXShFeGNlcHRpb25Db2RlIGV4Y2VwdGlvbkNvZGUp
IHsKICAgICAgICAgYXV0byBjb2RlID0gc3RhdGljX2Nhc3Q8aW50PihleGNlcHRpb25Db2RlKTsK
ICAgICAgICAgY2hhbm5lbC5mYWlsKG1ha2VTdHJpbmcoIkZhaWxlZCB0byBsb2FkIEJsb2I6IGV4
Y2VwdGlvbiBjb2RlID0gIiwgY29kZSkpOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysr
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OTEsNyArNjkxLDcgQEAgc3RhdGljIGJvb2wgZW5jb2RlVHlwZWRBcnJh
eShJUEM6OkVuY29kZQogICAgIGlmICghZGF0YS5idWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDhfdCo+KGRhdGEuYnVmZmVyKSwgZGF0YS5sZW5ndGgsIDEpOworICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyByZWludGVycHJldF9jYXN0PGNvbnN0IHN0
ZDo6Ynl0ZSo+KGRhdGEuYnVmZmVyKSwgZGF0YS5sZW5ndGggfSwgMSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDI3IEBACisyMDIxLTA2LTExICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxl
LmNvbT4KKworICAgICAgICBBZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvY2Fpcm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmNwcDoKKyAgICAgICAgKGNv
bXB1dGVTSEExSGFzaFN0cmluZ0ZvckJpdG1hcENvbnRleHQpOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRDRy5jcHA6CisgICAgICAgIChjb21wdXRlU0hBMUhh
c2hTdHJpbmdGb3JCaXRtYXBDb250ZXh0KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9CbG9vbUZpbHRlci5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpnZW5lcmF0ZVJh
bmRvbURpZ2VzdHMpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0
ZW0uY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpD
b25uZWN0aW9uOjp3ZWJTb2NrZXRIYW5kc2hha2UpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5u
ZXIvY2Fpcm8vVGVzdEludm9jYXRpb25DYWlyby5jcHA6CisgICAgICAgIChXVFI6OmNvbXB1dGVT
SEExSGFzaFN0cmluZ0ZvckNhaXJvU3VyZmFjZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcDoKKyAgICAgICAgKFdUUjo6Y29tcHV0ZVNIQTFIYXNo
U3RyaW5nRm9yQ29udGV4dCk6CisKIDIwMjEtMDYtMTEgIEZ1amlpIEhpcm9ub3JpICA8SGlyb25v
cmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW1dpbl1bRHVtcFJlbmRlclRyZWVdIC0tbm8t
dGltZW91dCBzd2l0Y2ggZG9lc24ndCB3b3JrCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9j
YWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2NhaXJvL1BpeGVsRHVtcFN1cHBvcnRDYWlyby5jcHAJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NhaXJvL1BpeGVsRHVtcFN1cHBvcnRDYWlyby5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBjb21wdXRlU0hBMUhhc2hT
dHJpbmdGb3JCaXRtYXBDb250ZQogICAgIFNIQTEgc2hhMTsKICAgICB1bnNpZ25lZCBjaGFyKiBi
aXRtYXBEYXRhID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X2RhdGEoc3VyZmFjZSkpOwogICAgIGZvciAodW5zaWduZWQgcm93ID0gMDsgcm93IDwg
cGl4ZWxzSGlnaDsgcm93KyspIHsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhiaXRtYXBEYXRhLCA0
ICogcGl4ZWxzV2lkZSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IGJpdG1hcERhdGEs
IDQgKiBwaXhlbHNXaWRlIH0pOwogICAgICAgICBiaXRtYXBEYXRhICs9IGJ5dGVzUGVyUm93Owog
ICAgIH0KICAgICBTSEExOjpEaWdlc3QgaGFzaDsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2NnL1BpeGVsRHVtcFN1cHBvcnRDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2cvUGl4ZWxEdW1wU3VwcG9ydENHLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1wU3VwcG9ydENHLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODgsMTQgKzg4LDE0IEBAIHZvaWQgY29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQml0bWFw
Q29udGUKICAgICAgICAgICAgIHVpbnQzMl90IGJ1ZmZlcltwaXhlbHNXaWRlXTsKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgY29sdW1uID0gMDsgY29sdW1uIDwgcGl4ZWxzV2lkZTsgY29sdW1u
KyspCiAgICAgICAgICAgICAgICAgYnVmZmVyW2NvbHVtbl0gPSBPU1JlYWRMaXR0bGVJbnQzMihi
aXRtYXBEYXRhLCA0ICogY29sdW1uKTsKLSAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYnVmZmVyKSwgNCAqIHBpeGVsc1dpZGUpOworICAg
ICAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgYnVmZmVyLCBwaXhlbHNXaWRlIH0pOwogICAg
ICAgICAgICAgYml0bWFwRGF0YSArPSBieXRlc1BlclJvdzsKICAgICAgICAgfQogICAgIH0gZWxz
ZQogI2VuZGlmCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIHJvdyA9IDA7IHJvdyA8IHBp
eGVsc0hpZ2g7IHJvdysrKSB7Ci0gICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGJpdG1hcERhdGEs
IDQgKiBwaXhlbHNXaWRlKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IGJpdG1h
cERhdGEsIDQgKiBwaXhlbHNXaWRlIH0pOwogICAgICAgICAgICAgYml0bWFwRGF0YSArPSBieXRl
c1BlclJvdzsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL0Jsb29tRmlsdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9CbG9vbUZpbHRlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL0Jsb29tRmlsdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNyArNDUsNyBAQCBzdGF0aWMgVmVjdG9yPFNIQTE6OkRpZ2VzdD4gZ2VuZXJhdGVSYW5kCiAg
ICAgU0hBMSBzaGExOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBoYXNoQ291bnQ7ICsr
aSkgewogICAgICAgICBkb3VibGUgcmFuZG9tID0gcmFuZG9tTnVtYmVyKCk7Ci0gICAgICAgIHNo
YTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnJhbmRvbSksIHNpemVvZihk
b3VibGUpKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgJnJhbmRvbSwgMSB9KTsKICAg
ICAgICAgU0hBMTo6RGlnZXN0IGRpZ2VzdDsKICAgICAgICAgc2hhMS5jb21wdXRlSGFzaChkaWdl
c3QpOwogICAgICAgICBoYXNoZXMuYXBwZW5kKGRpZ2VzdCk7CkluZGV4OiBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysg
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEzMyw4ICsxMzMsOCBAQCBURVNUX0YoRmlsZVN5c3RlbVRlc3QsIE1hcHBpbmdFeGlz
dGluZ0ZpCiAgICAgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEgbWFwcGVkRmlsZURhdGEodGVt
cEZpbGVQYXRoKCksIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVNb2RlOjpTaGFyZWQsIHN1Y2Nlc3Mp
OwogICAgIEVYUEVDVF9UUlVFKHN1Y2Nlc3MpOwogICAgIEVYUEVDVF9UUlVFKCEhbWFwcGVkRmls
ZURhdGEpOwotICAgIEVYUEVDVF9UUlVFKG1hcHBlZEZpbGVEYXRhLnNpemUoKSA9PSBzdHJsZW4o
RmlsZVN5c3RlbVRlc3REYXRhKSk7Ci0gICAgRVhQRUNUX1RSVUUoc3RybnN0cihGaWxlU3lzdGVt
VGVzdERhdGEsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihtYXBwZWRGaWxlRGF0YS5kYXRhKCkp
LCBtYXBwZWRGaWxlRGF0YS5zaXplKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShtYXBwZWRGaWxlRGF0
YS5kYXRhKCkuc2l6ZSgpID09IHN0cmxlbihGaWxlU3lzdGVtVGVzdERhdGEpKTsKKyAgICBFWFBF
Q1RfVFJVRShzdHJuc3RyKEZpbGVTeXN0ZW1UZXN0RGF0YSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyKj4obWFwcGVkRmlsZURhdGEuZGF0YSgpLmRhdGEoKSksIG1hcHBlZEZpbGVEYXRhLmRh
dGEoKS5zaXplKCkpKTsKIH0KIAogVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBNYXBwaW5nRXhpc3Rp
bmdFbXB0eUZpbGUpCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TSEExLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TSEExLmNwcAko
cmV2aXNpb24gMjc4ODA5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU0hBMS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgc3RhdGljIHZvaWQgZXhwZWN0U0hB
MShDU3RyaW5nIGlucHV0LCBpbgogewogICAgIFNIQTEgc2hhMTsKICAgICBmb3IgKGludCBpID0g
MDsgaSA8IHJlcGVhdDsgKytpKQotICAgICAgICBzaGExLmFkZEJ5dGVzKGlucHV0KTsKKyAgICAg
ICAgc2hhMS5hZGRCeXRlcyhpbnB1dC5ieXRlcygpKTsKICAgICBDU3RyaW5nIGFjdHVhbCA9IHNo
YTEuY29tcHV0ZUhleERpZ2VzdCgpOwogCiAgICAgQVNTRVJUX0VRKGV4cGVjdGVkLmxlbmd0aCgp
LCBhY3R1YWwubGVuZ3RoKCkpOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQ
U2VydmVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNl
cnZlci5tbQkocmV2aXNpb24gMjc4ODA5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9I
VFRQU2VydmVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNDAsMTEgKzM0MCwxMSBAQCB2b2lkIENv
bm5lY3Rpb246OndlYlNvY2tldEhhbmRzaGFrZShDb21wCiAKICAgICAgICAgICAgIGNvbnN0ZXhw
ciBhdXRvKiB3ZWJTb2NrZXRLZXlHVUlEID0gIjI1OEVBRkE1LUU5MTQtNDdEQS05NUNBLUM1QUIw
REM4NUIxMSI7CiAgICAgICAgICAgICBTSEExIHNoYTE7Ci0gICAgICAgICAgICBzaGExLmFkZEJ5
dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGtleUJlZ2luKSwga2V5RW5kIC0g
a2V5QmVnaW4pOwotICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQ4X3QqPih3ZWJTb2NrZXRLZXlHVUlEKSwgc3RybGVuKHdlYlNvY2tldEtleUdVSUQp
KTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IGtleUJlZ2luLCBrZXlFbmQgfSk7
CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyB3ZWJTb2NrZXRLZXlHVUlELCBzdHJs
ZW4od2ViU29ja2V0S2V5R1VJRCkgfSk7CiAgICAgICAgICAgICBTSEExOjpEaWdlc3QgaGFzaDsK
ICAgICAgICAgICAgIHNoYTEuY29tcHV0ZUhhc2goaGFzaCk7Ci0gICAgICAgICAgICByZXR1cm4g
YmFzZTY0RW5jb2RlVG9TdHJpbmcoaGFzaC5kYXRhKCksIFNIQTE6Omhhc2hTaXplKTsKKyAgICAg
ICAgICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhoYXNoKTsKICAgICAgICAgfTsKIAog
ICAgICAgICBjb25uZWN0aW9uLnNlbmQoSFRUUFJlc3BvbnNlKDEwMSwgewpJbmRleDogVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9jYWlyby9UZXN0SW52b2NhdGlvbkNhaXJvLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJ
bnZvY2F0aW9uQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHN0YXRp
YyB2b2lkIGNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckNhaXIKICAgICBTSEExIHNoYTE7CiAgICAg
dW5zaWduZWQgY2hhciogYml0bWFwRGF0YSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihj
YWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpKTsKICAgICBmb3IgKHNpemVfdCBy
b3cgPSAwOyByb3cgPCBwaXhlbHNIaWdoOyArK3JvdykgewotICAgICAgICBzaGExLmFkZEJ5dGVz
KGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFu
IHsgYml0bWFwRGF0YSwgNCAqIHBpeGVsc1dpZGUgfSk7CiAgICAgICAgIGJpdG1hcERhdGEgKz0g
Ynl0ZXNQZXJSb3c7CiAgICAgfQogICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwpJbmRleDogVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHZvaWQgY29tcHV0ZVNIQTFIYXNoU3Ry
aW5nRm9yQ29udGV4dChDR0MKICNlbmRpZgogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBy
b3cgPSAwOyByb3cgPCBwaXhlbHNIaWdoOyByb3crKykgewotICAgICAgICAgICAgc2hhMS5hZGRC
eXRlcyhiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lkZSk7CisgICAgICAgICAgICBzaGExLmFkZEJ5
dGVzKFNwYW4geyBiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lkZSB9KTsKICAgICAgICAgICAgIGJp
dG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7CiAgICAgICAgIH0KICAgICB9Cg==
</data>
<flag name="commit-queue"
          id="453012"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431277</attachid>
            <date>2021-06-13 08:23:40 -0700</date>
            <delta_ts>2021-06-13 10:13:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226887-20210613082338.patch</filename>
            <type>text/plain</type>
            <size>187438</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBA
CisyMDIxLTA2LTEyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogQVBJL0pTU2NyaXB0Lm1tOgorICAg
ICAgICAoK1tKU1NjcmlwdCBzY3JpcHRPZlR5cGU6bWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTp3
aXRoU291cmNlVVJMOmFuZEJ5dGVjb2RlQ2FjaGU6aW5WaXJ0dWFsTWFjaGluZTplcnJvcjpdKToK
KyAgICAgICAgKC1bSlNTY3JpcHQgcmVhZENhY2hlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHdy
aXRlQ2FjaGU6XSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9ja0hhc2g6OkNvZGVCbG9ja0hhc2gpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHA6CisgICAgICAgIChJbnNw
ZWN0b3I6OmJhY2tlbmRDb21tYW5kc0hhc2gpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZm
ZXIuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJDb250ZW50czo6d3JpdGFibGVCeXRlcyk6
CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyQ29udGVudHM6OmJ5dGVzIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6QXJyYXlCdWZmZXI6OndyaXRhYmxlQnl0ZXMpOgorICAgICAgICAoSlNDOjpBcnJh
eUJ1ZmZlcjo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
Lmg6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6d3JpdGFibGVCeXRlcyk6CisgICAg
ICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRp
bWUvQ2FjaGVQYXlsb2FkLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVQYXlsb2FkOjptYWtlTWFw
cGVkUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6bWFrZU1hbGxvY1BheWxv
YWQpOgorICAgICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6Om1ha2VFbXB0eVBheWxvYWQpOgorICAg
ICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6OkNhY2hlUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNh
Y2hlUGF5bG9hZDo6ZnJlZURhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVQYXlsb2FkLmg6
CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6ZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlUGF5bG9hZDo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6
Q2FjaGVQYXlsb2FkKToKKyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKToKKwogMjAyMS0w
Ni0xMSAgUGF0cmljayBBbmdsZSAgPHBhbmdsZUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogQWRkIGluc3RydW1lbnRhdGlvbiB0byBub2RlIGRlc3RydWN0aW9uIGZvciBJbnNw
ZWN0b3JET01BZ2VudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMTMgKzEzNCwxMyBAQCArIChpbnN0YW5jZXR5cGUpc2Ny
aXB0T2ZUeXBlOihKU1NjcmlwdFR5CiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4g
Y3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJGaWxlIGF0IHBhdGggJUAg
Y291bGQgbm90IGJlIG1hcHBlZC4iLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihzeXN0ZW1QYXRo
KV0sIGVycm9yKTsKIAotICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCkpKQor
ICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmlsZURhdGEuZGF0YSgpLnNpemUoKSkpCiAg
ICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIk5v
dCBhbGwgY2hhcmFjdGVycyBpbiBmaWxlIGF0ICVAIGFyZSBBU0NJSS4iLCBzdGF0aWNfY2FzdDxO
U1N0cmluZyAqPihzeXN0ZW1QYXRoKV0sIGVycm9yKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gYWRv
cHROUyhbW0pTU2NyaXB0IGFsbG9jXSBpbml0XSk7CiAgICAgcmVzdWx0LT5tX3ZpcnR1YWxNYWNo
aW5lID0gdm07CiAgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOwotICAgIHJlc3VsdC0+bV9zb3Vy
Y2UgPSBTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcoYml0d2lzZV9jYXN0
PGNvbnN0IExDaGFyKj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpKSk7CisgICAg
cmVzdWx0LT5tX3NvdXJjZSA9IFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWlu
ZyhiaXR3aXNlX2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmls
ZURhdGEuZGF0YSgpLnNpemUoKSkpOwogICAgIHJlc3VsdC0+bV9tYXBwZWRTb3VyY2UgPSBXVEZN
b3ZlKGZpbGVEYXRhKTsKICAgICByZXN1bHQtPm1fc291cmNlVVJMID0gc291cmNlVVJMOwogICAg
IHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7CkBAIC0xNjgsMjQgKzE2OCwyMyBAQCAt
ICh2b2lkKXJlYWRDYWNoZQogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgY29uc3QgdWludDhfdCogZmlsZURhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihtYXBwZWRGaWxlLmRhdGEoKSk7Ci0gICAgdW5zaWduZWQgZmlsZVRvdGFsU2l6ZSA9IG1h
cHBlZEZpbGUuc2l6ZSgpOworICAgIGF1dG8gZmlsZURhdGEgPSBtYXBwZWRGaWxlLmRhdGEoKTsK
IAogICAgIC8vIEVuc3VyZSB3ZSBhdCBsZWFzdCBoYXZlIGEgU0hBMTo6RGlnZXN0IHRvIHJlYWQu
Ci0gICAgaWYgKGZpbGVUb3RhbFNpemUgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgeworICAgIGlm
IChmaWxlRGF0YS5zaXplKCkgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgewogICAgICAgICBGaWxl
U3lzdGVtOjpkZWxldGVGaWxlKGNhY2hlRmlsZW5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgdW5zaWduZWQgZmlsZURhdGFTaXplID0gZmlsZVRvdGFsU2l6ZSAtIHNpemVvZihT
SEExOjpEaWdlc3QpOworICAgIHVuc2lnbmVkIGZpbGVEYXRhU2l6ZSA9IGZpbGVEYXRhLnNpemUo
KSAtIHNpemVvZihTSEExOjpEaWdlc3QpOwogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFz
aDsKICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhmaWxlRGF0YSwgZmlsZURhdGFT
aXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKGZpbGVEYXRhLmZpcnN0KGZpbGVEYXRhU2l6ZSkpOwog
ICAgIHNoYTEuY29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2VzdCBm
aWxlSGFzaDsKLSAgICBtZW1jcHkoJmZpbGVIYXNoLCBmaWxlRGF0YSArIGZpbGVEYXRhU2l6ZSwg
c2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOworICAgIG1lbWNweSgmZmlsZUhhc2gsIGZpbGVEYXRhLmRh
dGEoKSArIGZpbGVEYXRhU2l6ZSwgc2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOwogCiAgICAgaWYgKGNv
bXB1dGVkSGFzaCAhPSBmaWxlSGFzaCkgewogICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxl
KGNhY2hlRmlsZW5hbWUpOwpAQCAtMzQzLDcgKzM0Miw3IEBAIC0gKEJPT0wpd3JpdGVDYWNoZToo
U3RyaW5nJillcnJvcgogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFzaDsKICAgICBTSEEx
IHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhtX2NhY2hlZEJ5dGVjb2RlLT5kYXRhKCksIG1fY2Fj
aGVkQnl0ZWNvZGUtPnNpemUoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgbV9jYWNoZWRC
eXRlY29kZS0+ZGF0YSgpLCBtX2NhY2hlZEJ5dGVjb2RlLT5zaXplKCkgfSk7CiAgICAgc2hhMS5j
b21wdXRlSGFzaChjb21wdXRlZEhhc2gpOwogICAgIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKHRl
bXBGRCwgY29tcHV0ZWRIYXNoLmRhdGEoKSwgc2l6ZW9mKGNvbXB1dGVkSGFzaCkpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0hhc2guY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgQ29kZUJsb2Nr
SGFzaDo6Q29kZUJsb2NrSGFzaChjb25zdCBTb3VyYwogICAgIEFTU0VSVChzb3VyY2VDb2RlLmxl
bmd0aCgpID49IDApOwogICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhTb3VyY2VDb2RlTGVuZ3Ro
VG9IYXNoID0gNTAwICogTUI7CiAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzb3VyY2VD
b2RlLmxlbmd0aCgpKSA8IG1heFNvdXJjZUNvZGVMZW5ndGhUb0hhc2gpCi0gICAgICAgIHNoYTEu
YWRkQnl0ZXMoc291cmNlQ29kZS50b1VURjgoKSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoc291
cmNlQ29kZS50b1VURjgoKS5ieXRlcygpKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gSnVzdCBo
YXNoIHdpdGggdGhlIGxlbmd0aCBhbmQgc2FtcGxlcyBvZiB0aGUgc291cmNlIHN0cmluZyBpbnN0
ZWFkLgogICAgICAgICBTdHJpbmdWaWV3IHN0ciA9IHNvdXJjZUNvZGUucHJvdmlkZXIoKS0+c291
cmNlKCk7CkBAIC02MiwxMCArNjIsMTAgQEAgQ29kZUJsb2NrSGFzaDo6Q29kZUJsb2NrSGFzaChj
b25zdCBTb3VyYwogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHIubGVuZ3RoKCk7CiAgICAg
ICAgIHVuc2lnbmVkIHN0ZXAgPSAobGVuZ3RoID4+IDEwKSArIDE7CiAKLSAgICAgICAgc2hhMS5h
ZGRCeXRlcyhiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KCZsZW5ndGgpLCBzaXplb2YobGVuZ3RoKSk7
CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZsZW5ndGgsIDEgfSk7CiAgICAgICAgIGRv
IHsKICAgICAgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IHN0cltpbmRleF07Ci0gICAgICAgICAg
ICBzaGExLmFkZEJ5dGVzKGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oJmNoYXJhY3RlciksIHNpemVv
ZihjaGFyYWN0ZXIpKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZjaGFyYWN0
ZXIsIDEgfSk7CiAgICAgICAgICAgICBvbGRJbmRleCA9IGluZGV4OwogICAgICAgICAgICAgaW5k
ZXggKz0gc3RlcDsKICAgICAgICAgfSB3aGlsZSAoaW5kZXggPiBvbGRJbmRleCAmJiBpbmRleCA8
IGxlbmd0aCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VIYXNo
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VI
YXNoLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BhcnNlSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiBQYXJzZUhhc2g6OlBhcnNlSGFzaChjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VD
b2RlKQogewogICAgIFNIQTEgc2hhMTsKLSAgICBzaGExLmFkZEJ5dGVzKHNvdXJjZUNvZGUudG9V
VEY4KCkpOworICAgIHNoYTEuYWRkQnl0ZXMoc291cmNlQ29kZS50b1VURjgoKS5ieXRlcygpKTsK
ICAgICBTSEExOjpEaWdlc3QgZGlnZXN0OwogICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsK
ICAgICB1bnNpZ25lZCBoYXNoID0gZGlnZXN0WzBdIHwgKGRpZ2VzdFsxXSA8PCA4KSB8IChkaWdl
c3RbMl0gPDwgMTYpIHwgKGRpZ2VzdFszXSA8PCAyNCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1JlbW90ZUluc3BlY3RvclV0aWxzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1Jl
bW90ZUluc3BlY3RvclV0aWxzLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgY29uc3QgQ1N0cmluZyYgYmFja2VuZENv
bW1hbmRzSGFzaCgpCiAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSA9IGdfYnl0ZXNfZ2V0X2Rh
dGEoYnl0ZXMuZ2V0KCksICZkYXRhU2l6ZSk7CiAgICAgICAgIEFTU0VSVChkYXRhU2l6ZSk7CiAg
ICAgICAgIFNIQTEgc2hhMTsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhzdGF0aWNfY2FzdDxjb25z
dCB1aW50OF90Kj4oZGF0YSksIGRhdGFTaXplKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFu
IHsgc3RhdGljX2Nhc3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSksIGRhdGFTaXplIH0pOwogICAg
ICAgICBoZXhEaWdlc3QgPSBzaGExLmNvbXB1dGVIZXhEaWdlc3QoKTsKICAgICB9CiAgICAgcmV0
dXJuIGhleERpZ2VzdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogI2luY2x1ZGUgPHd0Zi9QYWNrZWRSZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZl
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtODAsNyAr
ODEsMTAgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBt
X2RhdGEuZ2V0TWF5QmVOdWxsKHNpemVJbkJ5dGVzKCkpOyB9CiAgICAgdW5zaWduZWQgc2l6ZUlu
Qnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX3NpemVJbkJ5dGVzOyB9Ci0gICAgCisKKyAgICBTcGFu
PHN0ZDo6Ynl0ZT4gd3JpdGFibGVCeXRlcygpIHsgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8c3RkOjpi
eXRlKj4oZGF0YSgpKSwgc2l6ZUluQnl0ZXMoKSB9OyB9CisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4geyBzdGF0aWNfY2FzdDxjb25zdCBzdGQ6OmJ5dGUq
PihkYXRhKCkpLCBzaXplSW5CeXRlcygpIH07IH0KKwogICAgIGJvb2wgaXNTaGFyZWQoKSBjb25z
dCB7IHJldHVybiBtX3NoYXJlZDsgfQogICAgIAogcHJpdmF0ZToKQEAgLTEyNyw3ICsxMzEsOSBA
QCBwdWJsaWM6CiAgICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKICAgICBpbmxpbmUgY29uc3Qgdm9p
ZCogZGF0YSgpIGNvbnN0OwogICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7
Ci0gICAgCisgICAgaW5saW5lIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCk7CisgICAg
aW5saW5lIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAgICAgdm9pZCBt
YWtlU2hhcmVkKCk7CiAgICAgdm9pZCBzZXRTaGFyaW5nTW9kZShBcnJheUJ1ZmZlclNoYXJpbmdN
b2RlKTsKICAgICBpbmxpbmUgYm9vbCBpc1NoYXJlZCgpIGNvbnN0OwpAQCAtMTk3LDYgKzIwMywx
NiBAQCB1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJu
IG1fY29udGVudHMuc2l6ZUluQnl0ZXMoKTsKIH0KIAorU3BhbjxzdGQ6OmJ5dGU+IEFycmF5QnVm
ZmVyOjp3cml0YWJsZUJ5dGVzKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZW50cy53cml0YWJsZUJ5
dGVzKCk7Cit9CisKK1NwYW48Y29uc3Qgc3RkOjpieXRlPiBBcnJheUJ1ZmZlcjo6Ynl0ZXMoKSBj
b25zdAoreworICAgIHJldHVybiBtX2NvbnRlbnRzLmJ5dGVzKCk7Cit9CisKIGJvb2wgQXJyYXlC
dWZmZXI6OmlzU2hhcmVkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb250ZW50cy5pc1NoYXJl
ZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZm
ZXJWaWV3LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4Niw5IEBAIHB1
YmxpYzoKIAogICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVM
ZW5ndGg7IH0KIAorICAgIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCkgeyByZXR1cm4g
eyBzdGF0aWNfY2FzdDxzdGQ6OmJ5dGUqPihkYXRhKCkpLCBieXRlTGVuZ3RoKCkgfTsgfQorICAg
IFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0IHsgcmV0dXJuIHsgc3RhdGljX2Nh
c3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSgpKSwgYnl0ZUxlbmd0aCgpIH07IH0KKwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0RGV0YWNoYWJsZShib29sKTsKICAgICBib29sIGlzRGV0
YWNoYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNEZXRhY2hhYmxlOyB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlUGF5bG9hZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsMjcgKzMwLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogCiBD
YWNoZVBheWxvYWQgQ2FjaGVQYXlsb2FkOjptYWtlTWFwcGVkUGF5bG9hZChGaWxlU3lzdGVtOjpN
YXBwZWRGaWxlRGF0YSYmIGRhdGEpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZCh0cnVlLCBk
YXRhLmxlYWtIYW5kbGUoKSwgZGF0YS5zaXplKCkpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQo
dHJ1ZSwgZGF0YS5sZWFrSGFuZGxlKCkpOwogfQogCiBDYWNoZVBheWxvYWQgQ2FjaGVQYXlsb2Fk
OjptYWtlTWFsbG9jUGF5bG9hZChNYWxsb2NQdHI8dWludDhfdCwgVk1NYWxsb2M+JiYgZGF0YSwg
c2l6ZV90IHNpemUpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZChmYWxzZSwgZGF0YS5sZWFr
UHRyKCksIHNpemUpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQoZmFsc2UsIGFzV3JpdGFibGVC
eXRlcyhTcGFuIHsgZGF0YS5sZWFrUHRyKCksIHNpemUgfSkpOwogfQogCiBDYWNoZVBheWxvYWQg
Q2FjaGVQYXlsb2FkOjptYWtlRW1wdHlQYXlsb2FkKCkKIHsKLSAgICByZXR1cm4gQ2FjaGVQYXls
b2FkKHRydWUsIG51bGxwdHIsIDApOworICAgIHJldHVybiBDYWNoZVBheWxvYWQodHJ1ZSwgeyB9
KTsKIH0KIAogQ2FjaGVQYXlsb2FkOjpDYWNoZVBheWxvYWQoQ2FjaGVQYXlsb2FkJiYgb3RoZXIp
CiB7Ci0gICAgbV9tYXBwZWQgPSBvdGhlci5tX21hcHBlZDsKLSAgICBtX3NpemUgPSBvdGhlci5t
X3NpemU7Ci0gICAgbV9kYXRhID0gb3RoZXIubV9kYXRhOwotICAgIG90aGVyLm1fbWFwcGVkID0g
ZmFsc2U7Ci0gICAgb3RoZXIubV9kYXRhID0gbnVsbHB0cjsKLSAgICBvdGhlci5tX3NpemUgPSAw
OworICAgIG1fbWFwcGVkID0gc3RkOjpleGNoYW5nZShvdGhlci5tX21hcHBlZCwgZmFsc2UpOwor
ICAgIG1fZGF0YSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLCB7IH0pOwogfQogCiBDYWNo
ZVBheWxvYWQ6On5DYWNoZVBheWxvYWQoKQpAQCAtNjcsMTIgKzYzLDEzIEBAIENhY2hlUGF5bG9h
ZCYgQ2FjaGVQYXlsb2FkOjpvcGVyYXRvcj0oQ2EKIAogdm9pZCBDYWNoZVBheWxvYWQ6OmZyZWVE
YXRhKCkKIHsKLSAgICBpZiAoIW1fZGF0YSkKKyAgICBpZiAoIW1fZGF0YS5kYXRhKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBpZiAobV9tYXBwZWQpIHsKLSAgICAgICAgRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1fZGF0YSwgbV9zaXplKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZmFzdEZy
ZWUobV9kYXRhKTsKKworICAgIGlmIChtX21hcHBlZCkKKyAgICAgICAgRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1fZGF0YSk7CisgICAgZWxzZQorICAgICAgICBmYXN0RnJlZShtX2RhdGEu
ZGF0YSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHd0Zi9GaWxlU3lz
dGVtLmg+CiAjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MSwyMiArNDIsMjAgQEAgcHVibGljOgogICAgIEpT
X0VYUE9SVF9QUklWQVRFIH5DYWNoZVBheWxvYWQoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBD
YWNoZVBheWxvYWQmIG9wZXJhdG9yPShDYWNoZVBheWxvYWQmJiBvdGhlcik7CiAKLSAgICBjb25z
dCB1aW50OF90KiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBjb25zdCB1aW50OF90KiBkYXRhKCkg
Y29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9kYXRhLmRhdGEoKSk7
IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5zaXplKCk7IH0KIAog
cHJpdmF0ZToKLSAgICBDYWNoZVBheWxvYWQoYm9vbCBtYXBwZWQsIHZvaWQqIGRhdGEsIHNpemVf
dCBzaXplKQorICAgIENhY2hlUGF5bG9hZChib29sIG1hcHBlZCwgU3BhbjxzdGQ6OmJ5dGU+IGRh
dGEpCiAgICAgICAgIDogbV9tYXBwZWQobWFwcGVkKQotICAgICAgICAsIG1fc2l6ZShzaXplKQot
ICAgICAgICAsIG1fZGF0YShzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGF0YSkpCisgICAgICAgICwg
bV9kYXRhKGRhdGEpCiAgICAgewogICAgIH0KIAogICAgIHZvaWQgZnJlZURhdGEoKTsKIAogICAg
IGJvb2wgbV9tYXBwZWQ7Ci0gICAgc2l6ZV90IG1fc2l6ZTsKLSAgICB1aW50OF90KiBtX2RhdGE7
CisgICAgU3BhbjxzdGQ6OmJ5dGU+IG1fZGF0YTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1Bh
cnNlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNyArMjYxLDcg
QEAgYXV0byBTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKGNvbnN0IHVpbgogICAgIH0KIAogICAg
IGlmIChVTkxJS0VMWShPcHRpb25zOjp1c2VFYWdlcldlYkFzc2VtYmx5TW9kdWxlSGFzaGluZygp
KSkKLSAgICAgICAgbV9oYXNoZXIuYWRkQnl0ZXMoYnl0ZXMsIGJ5dGVzU2l6ZSk7CisgICAgICAg
IG1faGFzaGVyLmFkZEJ5dGVzKFNwYW4geyBieXRlcywgYnl0ZXNTaXplIH0pOwogCiAgICAgc2l6
ZV90IG9mZnNldEluQnl0ZXMgPSAwOwogICAgIHdoaWxlICh0cnVlKSB7CkluZGV4OiBTb3VyY2Uv
V1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw2OCBAQAorMjAyMS0wNi0xMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgQWRvcHQgU3BhbiBpbiBtb3JlIHBsYWNlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIFdURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmNwcDoKKyAgICAg
ICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjp+TWFwcGVkRmlsZURhdGEp
OgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6TWFwcGVkRmlsZURhdGE6Om1hcEZpbGVI
YW5kbGUpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6dW5tYXBWaWV3T2ZGaWxlKToK
KyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Om1hcFRvRmlsZSk6CisgICAgICAgICogd3Rm
L0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVE
YXRhOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6
Ok1hcHBlZEZpbGVEYXRhOjpkYXRhIGNvbnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUlt
cGw6Ok1hcHBlZEZpbGVEYXRhOjpsZWFrSGFuZGxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3Rl
bUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YSk6CisgICAgICAgIChXVEY6OkZp
bGVTeXN0ZW1JbXBsOjpNYXBwZWRGaWxlRGF0YTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6
RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpzaXplIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1NIQTEuY3BwOgorICAgICAgICAoV1RG
OjpTSEExOjphZGRCeXRlcyk6CisgICAgICAgIChXVEY6OlNIQTE6OmZpbmFsaXplKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6U0hBMTo6cHJvY2Vzc0Jsb2NrKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6U0hBMTo6cmVzZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTSEExOjpoZXhEaWdl
c3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTSEExOjpjb21wdXRlSGV4RGlnZXN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3dGYvU0hBMS5oOgorICAgICAgICAoV1RGOjpTSEExOjphZGRCeXRl
cyk6CisgICAgICAgICogd3RmL1ZlY3Rvci5oOgorICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZS9Q
ZXJzaXN0ZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPENT
dHJpbmc+OjplbmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8Q1N0cmlu
Zz46OmRlY29kZSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTdHJpbmc+Ojpl
bmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVjb2RlU3RyaW5nVGV4dCk6Cisg
ICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUpOgor
ICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKToK
KyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oOgorICAgICAgICAq
IHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5jcHA6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyOjpEZWNvZGVyKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6
OkRlY29kZXI6OmJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFkKToKKyAgICAgICAgKFdURjo6UGVy
c2lzdGVuY2U6OkRlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjp2ZXJpZnlDaGVja3N1bSk6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyOjp+RGVjb2Rlcik6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3Bl
cnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmg6CisgICAgICAgICogd3RmL3BlcnNpc3RlbmNl
L1BlcnNpc3RlbnRFbmNvZGVyLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29k
ZXI6Omdyb3cpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6dXBkYXRlQ2hl
Y2tzdW1Gb3JEYXRhKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6OmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjpl
bmNvZGVOdW1iZXIpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6ZW5jb2Rl
Q2hlY2tzdW0pOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6RW5jb2Rlcik6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjp+RW5jb2Rlcik6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmg6
CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjpidWZmZXIgY29uc3QpOgorICAg
ICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIp
OgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6YnVmZmVyU2l6ZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL3RleHQvQmFzZTY0Lmg6CisgICAgICAgIChXVEY6OmJh
c2U2NEVuY29kZVRvVmVjdG9yKToKKyAgICAgICAgKFdURjo6YmFzZTY0RW5jb2RlVG9TdHJpbmcp
OgorICAgICAgICAqIHd0Zi90ZXh0L0NTdHJpbmcuaDoKKwogMjAyMS0wNi0xMSAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgV2Vha0hhc2hNYXAKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL0ZpbGVTeXN0ZW0uY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9G
aWxlU3lzdGVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE5LDkgKzMxOSw5IEBAIGJvb2wgZXhj
bHVkZUZyb21CYWNrdXAoY29uc3QgU3RyaW5nJikKIAogTWFwcGVkRmlsZURhdGE6On5NYXBwZWRG
aWxlRGF0YSgpCiB7Ci0gICAgaWYgKCFtX2ZpbGVEYXRhKQorICAgIGlmICghbV9maWxlRGF0YS5k
YXRhKCkpCiAgICAgICAgIHJldHVybjsKLSAgICB1bm1hcFZpZXdPZkZpbGUobV9maWxlRGF0YSwg
bV9maWxlU2l6ZSk7CisgICAgdW5tYXBWaWV3T2ZGaWxlKG1fZmlsZURhdGEpOwogfQogCiBNYXBw
ZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgTWFwcGVk
RmlsZU1vZGUgbWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKQEAgLTM4MywxNCArMzgzLDEzIEBAIGJv
b2wgTWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5kbGUoUGxhdGYKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAotICAgIG1fZmlsZURhdGEgPSBkYXRhOwotICAgIG1fZmlsZVNpemUgPSBz
aXplOworICAgIG1fZmlsZURhdGEgPSBTcGFuIHsgcmVpbnRlcnByZXRfY2FzdDxzdGQ6OmJ5dGUq
PihkYXRhKSwgc2l6ZSB9OwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIHVubWFwVmlld09m
RmlsZSh2b2lkKiBidWZmZXIsIHNpemVfdCBzaXplKQorYm9vbCB1bm1hcFZpZXdPZkZpbGUoU3Bh
bjxzdGQ6OmJ5dGU+IGRhdGEpCiB7Ci0gICAgcmV0dXJuICFtdW5tYXAoYnVmZmVyLCBzaXplKTsK
KyAgICByZXR1cm4gIW11bm1hcChkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwogfQogCiAjZW5k
aWYKQEAgLTQzOCw3ICs0MzcsNyBAQCBTdHJpbmcgY3JlYXRlVGVtcG9yYXJ5WmlwQXJjaGl2ZShj
b25zdCBTCiB9CiAjZW5kaWYKIAotTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxlKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVuY3Rpb248dm9pZChjb25zdCBGdW5jdGlvbjxi
b29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYpPiYmIGFwcGx5LCBQbGF0Zm9ybUZpbGVIYW5k
bGUqIG91dHB1dEhhbmRsZSkKK01hcHBlZEZpbGVEYXRhIG1hcFRvRmlsZShjb25zdCBTdHJpbmcm
IHBhdGgsIHNpemVfdCBieXRlc1NpemUsIEZ1bmN0aW9uPHZvaWQoY29uc3QgRnVuY3Rpb248Ym9v
bChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYpPiYmIGFwcGx5LCBQbGF0Zm9ybUZpbGVIYW5kbGUq
IG91dHB1dEhhbmRsZSkKIHsKICAgICBjb25zdGV4cHIgYm9vbCBmYWlsSWZGaWxlRXhpc3RzID0g
dHJ1ZTsKICAgICBhdXRvIGhhbmRsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVT
eXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZFdyaXRlLCBGaWxlU3lzdGVtOjpGaWxlQWNjZXNzUGVy
bWlzc2lvbjo6VXNlciwgZmFpbElmRmlsZUV4aXN0cyk7CkBAIC00NTUsMTIgKzQ1NCwxMiBAQCBN
YXBwZWRGaWxlRGF0YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwCiAgICAgICAgIHJldHVybiB7
IH07CiAgICAgfQogCi0gICAgdm9pZCogbWFwID0gY29uc3RfY2FzdDx2b2lkKj4obWFwcGVkRmls
ZS5kYXRhKCkpOwotICAgIHVpbnQ4X3QqIG1hcERhdGEgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4o
bWFwKTsKKyAgICBhdXRvIG1hcCA9IG1hcHBlZEZpbGUuZGF0YSgpLmRhdGEoKTsKKyAgICBhdXRv
IG1hcERhdGEgPSBtYXA7CiAKLSAgICBhcHBseShbJm1hcERhdGFdKGNvbnN0IHVpbnQ4X3QqIGNo
dW5rLCBzaXplX3QgY2h1bmtTaXplKSB7Ci0gICAgICAgIG1lbWNweShtYXBEYXRhLCBjaHVuaywg
Y2h1bmtTaXplKTsKLSAgICAgICAgbWFwRGF0YSArPSBjaHVua1NpemU7CisgICAgYXBwbHkoWyZt
YXBEYXRhXShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gY2h1bmspIHsKKyAgICAgICAgbWVtY3B5KG1h
cERhdGEsIGNodW5rLmRhdGEoKSwgY2h1bmsuc2l6ZSgpKTsKKyAgICAgICAgbWFwRGF0YSArPSBj
aHVuay5zaXplKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0pOwogCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRmls
ZVN5c3RlbS5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVt
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDx1dGlsaXR5Pgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorI2lu
Y2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0
Zi9XYWxsVGltZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtMjEwLDcg
KzIxMSw3IEBAIFdURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgcmVhbFBhdGgoY29uc3QKIFdURl9F
WFBPUlRfUFJJVkFURSBib29sIGlzU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChjb25zdCBTdHJp
bmcmKTsKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIG1ha2VTYWZlVG9Vc2VNZW1vcnlNYXBGb3JQ
YXRoKGNvbnN0IFN0cmluZyYpOwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCB1bm1hcFZpZXdP
ZkZpbGUodm9pZCogYnVmZmVyLCBzaXplX3QpOworV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgdW5t
YXBWaWV3T2ZGaWxlKFNwYW48c3RkOjpieXRlPik7CiAKIGNsYXNzIE1hcHBlZEZpbGVEYXRhIHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTIyMywxNyArMjI0LDE1IEBAIHB1Ymxp
YzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfk1hcHBlZEZpbGVEYXRhKCk7CiAgICAgTWFwcGVk
RmlsZURhdGEmIG9wZXJhdG9yPShNYXBwZWRGaWxlRGF0YSYmKTsKIAotICAgIGV4cGxpY2l0IG9w
ZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fZmlsZURhdGE7IH0KLSAgICBjb25zdCB2
b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9maWxlRGF0YTsgfQotICAgIHVuc2lnbmVkIHNp
emUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVTaXplOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3Ig
Ym9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9maWxlRGF0YS5kYXRhKCk7IH0KKyAgICBTcGFuPHN0
ZDo6Ynl0ZT4gZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZURhdGE7IH0KIAotICAgIHZvaWQq
IGxlYWtIYW5kbGUoKSB7IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fZmlsZURhdGEsIG51bGxwdHIp
OyB9CisgICAgV0FSTl9VTlVTRURfUkVUVVJOIFNwYW48c3RkOjpieXRlPiBsZWFrSGFuZGxlKCkg
eyByZXR1cm4gc3RkOjpleGNoYW5nZShtX2ZpbGVEYXRhLCB7IH0pOyB9CiAKIHByaXZhdGU6CiAg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgbWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5k
bGUsIEZpbGVPcGVuTW9kZSwgTWFwcGVkRmlsZU1vZGUpOwogCi0gICAgdm9pZCogbV9maWxlRGF0
YSB7IG51bGxwdHIgfTsKLSAgICB1bnNpZ25lZCBtX2ZpbGVTaXplIHsgMCB9OworICAgIFNwYW48
c3RkOjpieXRlPiBtX2ZpbGVEYXRhOwogfTsKIAogaW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBw
ZWRGaWxlRGF0YShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBNYXBwZWRGaWxlTW9kZSBtYXBN
b2RlLCBib29sJiBzdWNjZXNzKQpAQCAtMjQ3LDIxICsyNDYsMTkgQEAgaW5saW5lIE1hcHBlZEZp
bGVEYXRhOjpNYXBwZWRGaWxlRGF0YShQbAogfQogCiBpbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1h
cHBlZEZpbGVEYXRhKE1hcHBlZEZpbGVEYXRhJiYgb3RoZXIpCi0gICAgOiBtX2ZpbGVEYXRhKHN0
ZDo6ZXhjaGFuZ2Uob3RoZXIubV9maWxlRGF0YSwgbnVsbHB0cikpCi0gICAgLCBtX2ZpbGVTaXpl
KHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9maWxlU2l6ZSwgMCkpCisgICAgOiBtX2ZpbGVEYXRhKHN0
ZDo6ZXhjaGFuZ2Uob3RoZXIubV9maWxlRGF0YSwgeyB9KSkKIHsKIH0KIAogaW5saW5lIE1hcHBl
ZEZpbGVEYXRhJiBNYXBwZWRGaWxlRGF0YTo6b3BlcmF0b3I9KE1hcHBlZEZpbGVEYXRhJiYgb3Ro
ZXIpCiB7Ci0gICAgbV9maWxlRGF0YSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9maWxlRGF0YSwg
bnVsbHB0cik7Ci0gICAgbV9maWxlU2l6ZSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9maWxlU2l6
ZSwgMCk7CisgICAgbV9maWxlRGF0YSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9maWxlRGF0YSwg
eyB9KTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKIC8vIFRoaXMgY3JlYXRlcyB0aGUgZGVzdGlu
YXRpb24gZmlsZSwgbWFwcyBpdCwgd3JpdGUgdGhlIHByb3ZpZGVkIGRhdGEgdG8gaXQgYW5kIHJl
dHVybnMgdGhlIG1hcHBlZCBmaWxlLgogLy8gVGhpcyBmdW5jdGlvbiBmYWlscyBpZiB0aGVyZSBp
cyBhbHJlYWR5IGEgZmlsZSBhdCB0aGUgZGVzdGluYXRpb24gcGF0aC4KLVdURl9FWFBPUlRfUFJJ
VkFURSBNYXBwZWRGaWxlRGF0YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBzaXplX3Qg
Ynl0ZXNTaXplLCBGdW5jdGlvbjx2b2lkKGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhf
dCosIHNpemVfdCk+Jik+JiYgYXBwbHksIFBsYXRmb3JtRmlsZUhhbmRsZSogPSBudWxscHRyKTsK
K1dURl9FWFBPUlRfUFJJVkFURSBNYXBwZWRGaWxlRGF0YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5n
JiBwYXRoLCBzaXplX3QgYnl0ZXNTaXplLCBGdW5jdGlvbjx2b2lkKGNvbnN0IEZ1bmN0aW9uPGJv
b2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mKT4mJiBhcHBseSwgUGxhdGZvcm1GaWxlSGFuZGxl
KiA9IG51bGxwdHIpOwogCiB9IC8vIG5hbWVzcGFjZSBGaWxlU3lzdGVtSW1wbAogfSAvLyBuYW1l
c3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TSEExLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9TSEExLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93
dGYvU0hBMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEwICs0NiwxMCBAQCBTSEExOjpTSEEx
KCkKICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIH0KIAotdm9pZCBTSEEx
OjphZGRCeXRlcyhjb25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGxlbmd0aCkKK3ZvaWQgU0hB
MTo6YWRkQnl0ZXMoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQogewogICAgIEFMTE9XX0RF
UFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgQ0NfU0hBMV9VcGRhdGUoJm1fY29udGV4
dCwgaW5wdXQsIGxlbmd0aCk7CisgICAgQ0NfU0hBMV9VcGRhdGUoJm1fY29udGV4dCwgaW5wdXQu
ZGF0YSgpLCBpbnB1dC5zaXplKCkpOwogICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05T
X0VORAogfQogCkBAIC0xMDEsMTEgKzEwMSwxMSBAQCBTSEExOjpTSEExKCkKICAgICByZXNldCgp
OwogfQogCi12b2lkIFNIQTE6OmFkZEJ5dGVzKGNvbnN0IHVpbnQ4X3QqIGlucHV0LCBzaXplX3Qg
bGVuZ3RoKQordm9pZCBTSEExOjphZGRCeXRlcyhTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQp
CiB7Ci0gICAgd2hpbGUgKGxlbmd0aC0tKSB7CisgICAgZm9yIChhdXRvIGJ5dGUgOiBpbnB1dCkg
ewogICAgICAgICBBU1NFUlQobV9jdXJzb3IgPCA2NCk7Ci0gICAgICAgIG1fYnVmZmVyW21fY3Vy
c29yKytdID0gKmlucHV0Kys7CisgICAgICAgIG1fYnVmZmVyW21fY3Vyc29yKytdID0gc3RkOjp0
b19pbnRlZ2VyPHVpbnQ4X3Q+KGJ5dGUpOwogICAgICAgICArK21fdG90YWxCeXRlczsKICAgICAg
ICAgaWYgKG1fY3Vyc29yID09IDY0KQogICAgICAgICAgICAgcHJvY2Vzc0Jsb2NrKCk7CkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9TSEExLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU0hB
MS5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9TSEExLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8YXJyYXk+
CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCkBAIC00NSwxNSArNDYsMTEgQEAgY2xhc3MgU0hBMSB7
CiBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIFNIQTEoKTsKIAotICAgIHZvaWQgYWRk
Qnl0ZXMoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCBhZGRCeXRlcyhTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHZvaWQgYWRkQnl0ZXMoVCYmIGRhdGEpCiAgICAgewotICAgICAgICBhZGRCeXRl
cyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSk7CisgICAgICAgIHJldHVybiBhZGRCeXRlcyhh
c0J5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSkpOwogICAgIH0KLSAgICB2b2lk
IGFkZEJ5dGVzKGNvbnN0IENTdHJpbmcmIGlucHV0KQotICAgIHsKLSAgICAgICAgYWRkQnl0ZXMo
aW5wdXQuZGF0YUFzVUludDhQdHIoKSwgaW5wdXQubGVuZ3RoKCkpOwotICAgIH0KLSAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRCeXRlcyhjb25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90
IGxlbmd0aCk7CiAKICAgICAvLyBTaXplIG9mIHRoZSBTSEExIGhhc2gKICAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgaGFzaFNpemUgPSAyMDsKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL1ZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1ZlY3Rv
ci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjEzLDYgKzYxMyw3IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKICAgICB0eXBl
ZGVmIFQgVmFsdWVUeXBlOworICAgIHR5cGVkZWYgVCB2YWx1ZV90eXBlOwogCiAgICAgdHlwZWRl
ZiBUKiBpdGVyYXRvcjsKICAgICB0eXBlZGVmIGNvbnN0IFQqIGNvbnN0X2l0ZXJhdG9yOwpJbmRl
eDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5jcHAJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3Rl
bnRDb2RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgQ29kZXI8
Q1N0cmluZz46OmVuY29kZShFbmNvZGVyJiBlbmMKIAogICAgIHVpbnQzMl90IGxlbmd0aCA9IHN0
cmluZy5sZW5ndGgoKTsKICAgICBlbmNvZGVyIDw8IGxlbmd0aDsKLSAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShzdHJpbmcuZGF0YUFzVUludDhQdHIoKSwgbGVuZ3RoKTsKKyAgICBl
bmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShzdHJpbmcuYnl0ZXMoKSk7CiB9CiAKIHN0ZDo6
b3B0aW9uYWw8Q1N0cmluZz4gQ29kZXI8Q1N0cmluZz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQpAQCAtNzgsNyArNzgsNyBAQCBzdGQ6Om9wdGlvbmFsPENTdHJpbmc+IENvZGVyPENTdHJpbmc+
OjpkCiAKICAgICBjaGFyKiBidWZmZXI7CiAgICAgQ1N0cmluZyBzdHJpbmcgPSBDU3RyaW5nOjpu
ZXdVbmluaXRpYWxpemVkKCpsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIpLCAqbGVu
Z3RoKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyByZWlu
dGVycHJldF9jYXN0PHN0ZDo6Ynl0ZSo+KGJ1ZmZlciksICpsZW5ndGggfSkpCiAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CiAKICAgICByZXR1cm4gc3RyaW5nOwpAQCAtOTYsMTEgKzk2LDcg
QEAgdm9pZCBDb2RlcjxTdHJpbmc+OjplbmNvZGUoRW5jb2RlciYgZW5jbwogICAgIGJvb2wgaXM4
Qml0ID0gc3RyaW5nLmlzOEJpdCgpOwogCiAgICAgZW5jb2RlciA8PCBsZW5ndGggPDwgaXM4Qml0
OwotCi0gICAgaWYgKGlzOEJpdCkKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERh
dGEoc3RyaW5nLmNoYXJhY3RlcnM4KCksIGxlbmd0aCk7Ci0gICAgZWxzZQotICAgICAgICBlbmNv
ZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihzdHJpbmcuY2hhcmFjdGVyczE2KCkpLCBsZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICBl
bmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShzdHJpbmcuYnl0ZXMoKSk7CiB9CiAKIHRlbXBs
YXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgpAQCAtMTEyLDcgKzEwOCw3IEBAIHN0YXRpYyBp
bmxpbmUgc3RkOjpvcHRpb25hbDxTdHJpbmc+IGRlY28KIAogICAgIENoYXJhY3RlclR5cGUqIGJ1
ZmZlcjsKICAgICBTdHJpbmcgc3RyaW5nID0gU3RyaW5nOjpjcmVhdGVVbmluaXRpYWxpemVkKGxl
bmd0aCwgYnVmZmVyKTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1ZmZlciksIGxlbmd0aCAqIHNpemVvZihDaGFyYWN0
ZXJUeXBlKSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsg
cmVpbnRlcnByZXRfY2FzdDxzdGQ6OmJ5dGUqPihidWZmZXIpLCBsZW5ndGggKiBzaXplb2YoQ2hh
cmFjdGVyVHlwZSkgfSkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgCiAgICAg
cmV0dXJuIHN0cmluZzsKQEAgLTE0MiwxMyArMTM4LDEzIEBAIHN0ZDo6b3B0aW9uYWw8U3RyaW5n
PiBDb2RlcjxTdHJpbmc+OjpkZWMKIAogdm9pZCBDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlciwgY29uc3QgU0hBMTo6RGlnZXN0JiBkaWdlc3QpCiB7Ci0gICAgZW5j
b2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0LmRhdGEoKSwgc2l6ZW9mKGRpZ2VzdCkp
OworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGRpZ2VzdCk7CiB9CiAKIHN0ZDo6
b3B0aW9uYWw8U0hBMTo6RGlnZXN0PiBDb2RlcjxTSEExOjpEaWdlc3Q+OjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKIHsKICAgICBTSEExOjpEaWdlc3QgdG1wOwotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGVGaXhlZExlbmd0aERhdGEodG1wLmRhdGEoKSwgc2l6ZW9mKHRtcCkpKQorICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEodG1wKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKICAgICByZXR1cm4gdG1wOwogfQpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lz
dGVuY2UvUGVyc2lzdGVudENvZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3Bl
cnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDksNyArMTQ5LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFj
aQogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCiAgICAgewogICAgICAgICBlbmNvZGVyIDw8IHN0
YXRpY19jYXN0PHVpbnQ2NF90Pih2ZWN0b3Iuc2l6ZSgpKTsKLSAgICAgICAgZW5jb2Rlci5lbmNv
ZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4odmVjdG9y
LmRhdGEoKSksIHZlY3Rvci5zaXplKCkgKiBzaXplb2YoVCkpOworICAgICAgICBlbmNvZGVyLmVu
Y29kZUZpeGVkTGVuZ3RoRGF0YSh2ZWN0b3IpOwogICAgIH0KICAgICAKICAgICBzdGF0aWMgc3Rk
OjpvcHRpb25hbDxWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+PiBkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKQEAgLTE3Myw3ICsxNzMsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpCiAgICAgICAgIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4gdGVtcDsKICAgICAg
ICAgdGVtcC5ncm93KHNpemUpOwogCi0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExl
bmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4odGVtcC5kYXRhKCkpLCBzaXplICog
c2l6ZW9mKFQpKSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YSh0
ZW1wKSkKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKICAgICAgICAgcmV0dXJu
IHRlbXA7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVu
dERlY29kZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0
ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDIzICszMSwy
MSBAQAogbmFtZXNwYWNlIFdURiB7CiBuYW1lc3BhY2UgUGVyc2lzdGVuY2UgewogCi1EZWNvZGVy
OjpEZWNvZGVyKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpCi0gICAg
OiBtX2J1ZmZlcihidWZmZXIpCi0gICAgLCBtX2J1ZmZlclBvc2l0aW9uKGJ1ZmZlcikKLSAgICAs
IG1fYnVmZmVyRW5kKGJ1ZmZlciArIGJ1ZmZlclNpemUpCitEZWNvZGVyOjpEZWNvZGVyKFNwYW48
Y29uc3Qgc3RkOjpieXRlPiBidWZmZXIpCisgICAgOiBtX2J1ZmZlcihidWZmZXIuZGF0YSgpKQor
ICAgICwgbV9idWZmZXJQb3NpdGlvbihidWZmZXIuZGF0YSgpKQorICAgICwgbV9idWZmZXJFbmQo
YnVmZmVyLmRhdGEoKSArIGJ1ZmZlci5zaXplKCkpCiB7CiB9CiAKLURlY29kZXI6On5EZWNvZGVy
KCkKLXsKLX0KK0RlY29kZXI6On5EZWNvZGVyKCkgPSBkZWZhdWx0OwogCiBib29sIERlY29kZXI6
OmJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZV90IHNpemUpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIHNpemUgPD0gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2J1ZmZlckVuZCAtIG1fYnVmZmVy
UG9zaXRpb24pOwogfQogCi1jb25zdCB1aW50OF90KiBEZWNvZGVyOjpidWZmZXJQb2ludGVyRm9y
RGlyZWN0UmVhZChzaXplX3Qgc2l6ZSkKK2NvbnN0IHN0ZDo6Ynl0ZSogRGVjb2Rlcjo6YnVmZmVy
UG9pbnRlckZvckRpcmVjdFJlYWQoc2l6ZV90IHNpemUpCiB7CiAgICAgaWYgKCFidWZmZXJJc0xh
cmdlRW5vdWdoVG9Db250YWluKHNpemUpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTU1
LDE2ICs1MywxNiBAQCBjb25zdCB1aW50OF90KiBEZWNvZGVyOjpidWZmZXJQb2ludGVyRm9yCiAg
ICAgYXV0byBkYXRhID0gbV9idWZmZXJQb3NpdGlvbjsKICAgICBtX2J1ZmZlclBvc2l0aW9uICs9
IHNpemU7CiAKLSAgICBFbmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRh
LCBzaXplKTsKKyAgICBFbmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBTcGFu
IHsgZGF0YSwgc2l6ZSB9KTsKICAgICByZXR1cm4gZGF0YTsKIH0KIAotYm9vbCBEZWNvZGVyOjpk
ZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCitib29sIERl
Y29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKLSAg
ICBhdXRvIGJ1ZmZlciA9IGJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFkKHNpemUpOworICAgIGF1
dG8gYnVmZmVyID0gYnVmZmVyUG9pbnRlckZvckRpcmVjdFJlYWQoZGF0YS5zaXplKCkpOwogICAg
IGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbWVtY3B5KGRhdGEsIGJ1
ZmZlciwgc2l6ZSk7CisgICAgbWVtY3B5KGRhdGEuZGF0YSgpLCBidWZmZXIsIGRhdGEuc2l6ZSgp
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTM5LDcgKzEzNyw3IEBAIGJvb2wgRGVjb2Rl
cjo6dmVyaWZ5Q2hlY2tzdW0oKQogICAgIG1fc2hhMS5jb21wdXRlSGFzaChjb21wdXRlZEhhc2gp
OwogCiAgICAgU0hBMTo6RGlnZXN0IHNhdmVkSGFzaDsKLSAgICBpZiAoIWRlY29kZUZpeGVkTGVu
Z3RoRGF0YShzYXZlZEhhc2guZGF0YSgpLCBzaXplb2Yoc2F2ZWRIYXNoKSkpCisgICAgaWYgKCFk
ZWNvZGVGaXhlZExlbmd0aERhdGEoc2F2ZWRIYXNoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgcmV0dXJuIGNvbXB1dGVkSGFzaCA9PSBzYXZlZEhhc2g7CkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmgJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9FbnVtVHJhaXRz
Lmg+CiAjaW5jbHVkZSA8d3RmL1NIQTEuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1
ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaD4KIAogbmFtZXNwYWNlIFdURiB7
CkBAIC0zNSw3ICszNiwxMiBAQCBuYW1lc3BhY2UgUGVyc2lzdGVuY2UgewogY2xhc3MgRGVjb2Rl
ciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgV1RGX0VYUE9S
VF9QUklWQVRFIERlY29kZXIoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6
ZSk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gRGVjb2RlcihUJiYgZGF0YSkKKyAgICAgICAg
OiBEZWNvZGVyIHsgYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pIH0KKyAg
ICB7CisgICAgfQorCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIERlY29kZXIoU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+KTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfkRlY29kZXIoKTsKIAogICAgIHNp
emVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlckVuZCAtIG1fYnVmZmVyOyB9CkBA
IC00Myw3ICs0OSwxMSBAQCBwdWJsaWM6CiAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgV0FSTl9V
TlVTRURfUkVUVVJOIGJvb2wgdmVyaWZ5Q2hlY2tzdW0oKTsKIAotICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhf
dCosIHNpemVfdCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBi
b29sIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPHN0ZDo6Ynl0ZT4pOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGJvb2wgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShhc1dyaXRhYmxlQnl0ZXMoU3Bh
biB7IHN0ZDo6Zm9yd2FyZDxUPihkYXRhKSB9KSk7CisgICAgfQogCiAgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIERlY29kZXImIG9wZXJhdG9yPj4oc3RkOjpvcHRpb25hbDxib29sPiYpOwogICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVyYXRvcj4+KHN0ZDo6b3B0aW9uYWw8dWludDhf
dD4mKTsKQEAgLTg0LDcgKzk0LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbnVtRWxlbWVu
dHMgPD0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAvIHNpemVvZihUKSAmJiBi
dWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKG51bUVsZW1lbnRzICogc2l6ZW9mKFQpKTsKICAg
ICB9CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgV0FSTl9VTlVTRURfUkVUVVJOIGNvbnN0IHVp
bnQ4X3QqIGJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFkKHNpemVfdCBudW1CeXRlcyk7CisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBjb25zdCBzdGQ6OmJ5dGUqIGJ1
ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFkKHNpemVfdCBudW1CeXRlcyk7CiAKICAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNJUENEZWNvZGVyID0gZmFsc2U7CiAKQEAgLTkyLDkgKzEwMiw5IEBA
IHByaXZhdGU6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBib29s
IGJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZV90KSBjb25zdDsKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUeXBlPiBEZWNvZGVyJiBkZWNvZGVOdW1iZXIoc3RkOjpvcHRpb25hbDxUeXBl
PiYpOwogCi0gICAgY29uc3QgdWludDhfdCogbV9idWZmZXI7Ci0gICAgY29uc3QgdWludDhfdCog
bV9idWZmZXJQb3NpdGlvbjsKLSAgICBjb25zdCB1aW50OF90KiBtX2J1ZmZlckVuZDsKKyAgICBj
b25zdCBzdGQ6OmJ5dGUqIG1fYnVmZmVyOworICAgIGNvbnN0IHN0ZDo6Ynl0ZSogbV9idWZmZXJQ
b3NpdGlvbjsKKyAgICBjb25zdCBzdGQ6OmJ5dGUqIG1fYnVmZmVyRW5kOwogCiAgICAgU0hBMSBt
X3NoYTE7CiB9OwpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVu
Y29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNp
c3RlbnRFbmNvZGVyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvcGVy
c2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwzNCAr
MzEsMzQgQEAKIG5hbWVzcGFjZSBXVEYgewogbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAotRW5j
b2Rlcjo6RW5jb2RlcigpCi17Ci19Ci0KLUVuY29kZXI6On5FbmNvZGVyKCkKLXsKLX0KK0VuY29k
ZXI6OkVuY29kZXIoKSA9IGRlZmF1bHQ7CitFbmNvZGVyOjp+RW5jb2RlcigpID0gZGVmYXVsdDsK
IAotdWludDhfdCogRW5jb2Rlcjo6Z3JvdyhzaXplX3Qgc2l6ZSkKK3N0ZDo6Ynl0ZSogRW5jb2Rl
cjo6Z3JvdyhzaXplX3Qgc2l6ZSkKIHsKICAgICBzaXplX3QgbmV3UG9zaXRpb24gPSBtX2J1ZmZl
ci5zaXplKCk7CiAgICAgbV9idWZmZXIuZ3JvdyhtX2J1ZmZlci5zaXplKCkgKyBzaXplKTsKICAg
ICByZXR1cm4gbV9idWZmZXIuZGF0YSgpICsgbmV3UG9zaXRpb247CiB9CiAKLXZvaWQgRW5jb2Rl
cjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmIHNoYTEsIGNvbnN0IHVpbnQ4X3QqIGRhdGEs
IHNpemVfdCBzaXplKQordm9pZCBFbmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvckRhdGEoU0hBMSYg
c2hhMSwgU3Bhbjxjb25zdCB1aW50OF90PiBkYXRhKQoreworICAgIHJldHVybiB1cGRhdGVDaGVj
a3N1bUZvckRhdGEoc2hhMSwgYXNCeXRlcyhkYXRhKSk7Cit9CisKK3ZvaWQgRW5jb2Rlcjo6dXBk
YXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmIHNoYTEsIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRh
KQogewogICAgIGF1dG8gdHlwZVNhbHQgPSBTYWx0PHVpbnQ4X3QqPjo6dmFsdWU7Ci0gICAgc2hh
MS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdHlwZVNhbHQpLCBzaXplb2Yo
dHlwZVNhbHQpKTsKLSAgICBzaGExLmFkZEJ5dGVzKGRhdGEsIHNpemUpOworICAgIHNoYTEuYWRk
Qnl0ZXMoU3BhbiB7ICZ0eXBlU2FsdCwgMSB9KTsKKyAgICBzaGExLmFkZEJ5dGVzKGRhdGEpOwog
fQogCi12b2lkIEVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShjb25zdCB1aW50OF90KiBk
YXRhLCBzaXplX3Qgc2l6ZSkKK3ZvaWQgRW5jb2Rlcjo6ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNw
YW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhKQogewotICAgIHVwZGF0ZUNoZWNrc3VtRm9yRGF0YSht
X3NoYTEsIGRhdGEsIHNpemUpOworICAgIHVwZGF0ZUNoZWNrc3VtRm9yRGF0YShtX3NoYTEsIGRh
dGEpOwogCi0gICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhzaXplKTsKLSAgICBtZW1jcHkoYnVm
ZmVyLCBkYXRhLCBzaXplKTsKKyAgICBhdXRvKiBidWZmZXIgPSBncm93KGRhdGEuc2l6ZSgpKTsK
KyAgICBtZW1jcHkoYnVmZmVyLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUeXBlPgpAQCAtNjYsNyArNjYsNyBAQCBFbmNvZGVyJiBFbmNvZGVyOjpl
bmNvZGVOdW1iZXIoVHlwZSB2YWx1CiB7CiAgICAgRW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JO
dW1iZXIobV9zaGExLCB2YWx1ZSk7CiAKLSAgICB1aW50OF90KiBidWZmZXIgPSBncm93KHNpemVv
ZihUeXBlKSk7CisgICAgYXV0byogYnVmZmVyID0gZ3JvdyhzaXplb2YoVHlwZSkpOwogICAgIG1l
bWNweShidWZmZXIsICZ2YWx1ZSwgc2l6ZW9mKFR5cGUpKTsKICAgICByZXR1cm4gKnRoaXM7CiB9
CkBAIC0xMjUsNyArMTI1LDcgQEAgdm9pZCBFbmNvZGVyOjplbmNvZGVDaGVja3N1bSgpCiB7CiAg
ICAgU0hBMTo6RGlnZXN0IGhhc2g7CiAgICAgbV9zaGExLmNvbXB1dGVIYXNoKGhhc2gpOwotICAg
IGVuY29kZUZpeGVkTGVuZ3RoRGF0YShoYXNoLmRhdGEoKSwgaGFzaC5zaXplKCkpOworICAgIGVu
Y29kZUZpeGVkTGVuZ3RoRGF0YShoYXNoKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dURi93dGYv
cGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgog
I2luY2x1ZGUgPHd0Zi9TSEExLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2Rlci5o
PgogCkBAIC00Myw3ICs0NCwxMSBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5F
bmNvZGVyKCk7CiAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGVDaGVja3N1bSgp
OwotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShjb25z
dCB1aW50OF90Kiwgc2l6ZV90KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGVG
aXhlZExlbmd0aERhdGEoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShUJiYgZGF0YSkKKyAgICB7CisgICAg
ICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShhc0J5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4o
ZGF0YSkgfSkpOworICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxl
X2lmX3Q8c3RkOjppc19lbnVtPFQ+Ojp2YWx1ZT4qID0gbnVsbHB0cj4KICAgICBFbmNvZGVyJiBv
cGVyYXRvcjw8KGNvbnN0IFQmIHQpCkBAIC03MCwyMyArNzUsMjIgQEAgcHVibGljOgogICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBFbmNvZGVyJiBvcGVyYXRvcjw8KGZsb2F0KTsKICAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgRW5jb2RlciYgb3BlcmF0b3I8PChkb3VibGUpOwogCi0gICAgY29uc3QgdWlu
dDhfdCogYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuZGF0YSgpOyB9Ci0gICAgc2l6
ZV90IGJ1ZmZlclNpemUoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5zaXplKCk7IH0KLQotICAg
IFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZvckRhdGEoU0hB
MSYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOworICAgIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBi
dWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlcjsgfQorICAgIAorICAgIFdURl9FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZvckRhdGEoU0hBMSYsIFNwYW48Y29u
c3QgdWludDhfdD4pOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB1cGRhdGVD
aGVja3N1bUZvckRhdGEoU0hBMSYsIFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFR5cGU+IHN0YXRpYyB2b2lkIHVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKFNI
QTEmLCBUeXBlKTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lQQ0VuY29kZXIgPSBm
YWxzZTsKIAogcHJpdmF0ZToKLQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+IEVuY29kZXIm
IGVuY29kZU51bWJlcihUeXBlKTsKIAotICAgIHVpbnQ4X3QqIGdyb3coc2l6ZV90KTsKKyAgICBz
dGQ6OmJ5dGUqIGdyb3coc2l6ZV90KTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPiBz
dHJ1Y3QgU2FsdDsKIAotICAgIFZlY3Rvcjx1aW50OF90LCA0MDk2PiBtX2J1ZmZlcjsKKyAgICBW
ZWN0b3I8c3RkOjpieXRlLCA0MDk2PiBtX2J1ZmZlcjsKICAgICBTSEExIG1fc2hhMTsKIH07CiAK
QEAgLTEwNiw4ICsxMTAsOCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4KIHZvaWQgRW5jb2Rl
cjo6dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIoU0hBMSYgc2hhMSwgVHlwZSB2YWx1ZSkKIHsKICAg
ICBhdXRvIHR5cGVTYWx0ID0gU2FsdDxUeXBlPjo6dmFsdWU7Ci0gICAgc2hhMS5hZGRCeXRlcyhy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdHlwZVNhbHQpLCBzaXplb2YodHlwZVNhbHQpKTsK
LSAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2YWx1ZSksIHNp
emVvZih2YWx1ZSkpOworICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZ0eXBlU2FsdCwgMSB9KTsK
KyAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmdmFsdWUsIDEgfSk7CiB9CiAKIH0KSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi90ZXh0L0Jhc2U2NC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3Rl
eHQvQmFzZTY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDM5ICsxNDAsMzkgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIAogICAgICAgICBkZXN0aW5hdGlvbkRh
dGFCdWZmZXJbZGlkeCsrXSA9ICc9JzsKIH0KIAotc3RhdGljIFZlY3Rvcjx1aW50OF90PiBiYXNl
NjRFbmNvZGVJbnRlcm5hbChjb25zdCB1aW50OF90KiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVk
IGlucHV0TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAg
bWFwKQorc3RhdGljIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVJbnRlcm5hbChTcGFuPGNv
bnN0IHN0ZDo6Ynl0ZT4gaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVu
Y29kZU1hcCBtYXApCiB7Ci0gICAgYXV0byBkZXN0aW5hdGlvbkxlbmd0aCA9IGNhbGN1bGF0ZUJh
c2U2NEVuY29kZWRTaXplKGlucHV0TGVuZ3RoLCBwb2xpY3kpOworICAgIGF1dG8gZGVzdGluYXRp
b25MZW5ndGggPSBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShpbnB1dC5zaXplKCksIHBvbGlj
eSk7CiAgICAgaWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkKICAgICAgICAgcmV0dXJuIHsgfTsKIAog
ICAgIFZlY3Rvcjx1aW50OF90PiBkZXN0aW5hdGlvblZlY3RvcihkZXN0aW5hdGlvbkxlbmd0aCk7
Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoaW5wdXREYXRhQnVmZmVyLCBpbnB1dExlbmd0aCwg
ZGVzdGluYXRpb25WZWN0b3IuZGF0YSgpLCBkZXN0aW5hdGlvbkxlbmd0aCwgcG9saWN5LCBtYXAp
OworICAgIGJhc2U2NEVuY29kZUludGVybmFsKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGlucHV0LmRhdGEoKSksIGlucHV0LnNpemUoKSwgZGVzdGluYXRpb25WZWN0b3IuZGF0YSgp
LCBkZXN0aW5hdGlvbkxlbmd0aCwgcG9saWN5LCBtYXApOwogICAgIHJldHVybiBkZXN0aW5hdGlv
blZlY3RvcjsKIH0KIAotdm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCogaW5wdXREYXRhQnVm
ZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgVUNoYXIqIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwg
dW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJh
c2U2NEVuY29kZU1hcCBtYXApCit2b2lkIGJhc2U2NEVuY29kZShTcGFuPGNvbnN0IHN0ZDo6Ynl0
ZT4gaW5wdXQsIFVDaGFyKiBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0
aW9uTGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFw
KQogewogICAgIGlmICghZGVzdGluYXRpb25MZW5ndGgpCiAgICAgICAgIHJldHVybjsKLSAgICBi
YXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXREYXRh
QnVmZmVyKSwgaW5wdXRMZW5ndGgsIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgZGVzdGluYXRpb25M
ZW5ndGgsIHBvbGljeSwgbWFwKTsKKyAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCksIGRlc3Rp
bmF0aW9uRGF0YUJ1ZmZlciwgZGVzdGluYXRpb25MZW5ndGgsIHBvbGljeSwgbWFwKTsKIH0KIAot
dm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBp
bnB1dExlbmd0aCwgTENoYXIqIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgdW5zaWduZWQgZGVzdGlu
YXRpb25MZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBt
YXApCit2b2lkIGJhc2U2NEVuY29kZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQsIExDaGFy
KiBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uTGVuZ3RoLCBCYXNl
NjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewogICAgIGlmICgh
ZGVzdGluYXRpb25MZW5ndGgpCiAgICAgICAgIHJldHVybjsKLSAgICBiYXNlNjRFbmNvZGVJbnRl
cm5hbChzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXREYXRhQnVmZmVyKSwgaW5wdXRM
ZW5ndGgsIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgZGVzdGluYXRpb25MZW5ndGgsIHBvbGljeSwg
bWFwKTsKKyAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCksIGRlc3RpbmF0aW9uRGF0YUJ1ZmZl
ciwgZGVzdGluYXRpb25MZW5ndGgsIHBvbGljeSwgbWFwKTsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+
IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWdu
ZWQgaW5wdXRMZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1h
cCBtYXApCitWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+IGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVN
YXAgbWFwKQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxj
b25zdCB1aW50OF90Kj4oaW5wdXREYXRhQnVmZmVyKSwgaW5wdXRMZW5ndGgsIHBvbGljeSwgbWFw
KTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoaW5wdXQsIHBvbGljeSwgbWFwKTsK
IH0KIAotU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1
ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJh
c2U2NEVuY29kZU1hcCBtYXApCitTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoU3Bhbjxjb25z
dCBzdGQ6OmJ5dGU+IGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNv
ZGVNYXAgbWFwKQogewotICAgIHJldHVybiBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoaW5wdXRE
YXRhQnVmZmVyLCBpbnB1dExlbmd0aCwgcG9saWN5LCBtYXApKTsKKyAgICByZXR1cm4gbWFrZVN0
cmluZyhiYXNlNjRFbmNvZGVkKGlucHV0LCBwb2xpY3ksIG1hcCkpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERl
Y29kZUludGVybmFsKGNvbnN0IFQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5n
dGgsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRpb25zLCBCYXNlNjREZWNvZGVN
YXAgbWFwKQpAQCAtMjU0LDg0ICsyNTQsMjcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGlj
IHN0ZDo6b3B0aW9uYQogICAgIHJldHVybiBkZXN0aW5hdGlvbjsKIH0KIAotc3RkOjpvcHRpb25h
bDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBTdHJpbmcmIGlucHV0LCBPcHRp
b25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkK
LXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBpbnB1dC5sZW5ndGgoKTsKLSAgICBpZiAoIWxlbmd0
aCB8fCBpbnB1dC5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFs
KGlucHV0LmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKLSAgICByZXR1cm4g
YmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczE2KCksIGxlbmd0aCwgb3B0aW9u
cywgbWFwKTsKLX0KLQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29k
ZShTdHJpbmdWaWV3IGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9u
cywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKLXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBpbnB1dC5s
ZW5ndGgoKTsKLSAgICBpZiAoIWxlbmd0aCB8fCBpbnB1dC5pczhCaXQoKSkKLSAgICAgICAgcmV0
dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgb3B0
aW9ucywgbWFwKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFj
dGVyczE2KCksIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKLX0KLQotc3RkOjpvcHRpb25hbDxWZWN0
b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0LCBP
cHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1h
cCkKLXsKLSAgICBpZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHJldHVybiBiYXNl
NjREZWNvZGVJbnRlcm5hbChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgb3B0aW9ucywgbWFw
KTsKLX0KLQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25z
dCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0
aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+
PiBiYXNlNjREZWNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0LCBPcHRpb25TZXQ8QmFz
ZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKICAgICBp
ZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQog
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRl
cm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1
dC5zaXplKCksIG9wdGlvbnMsIG1hcCk7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgdWludDhfdCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCBP
cHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1h
cCkKLXsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoZGF0YSwgbGVuZ3RoLCBvcHRp
b25zLCBtYXApOwotfQotCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVj
b2RlKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgT3B0aW9uU2V0PEJhc2U2NERl
Y29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgcmV0dXJu
IGJhc2U2NERlY29kZUludGVybmFsKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihkYXRh
KSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOwotfQotCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50
OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFN0cmluZyYgaW5wdXQpCitzdGQ6Om9wdGlvbmFs
PFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IFN0cmluZyYgaW5wdXQsIE9wdGlv
blNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRpb25zLCBCYXNlNjREZWNvZGVNYXAgbWFwKQog
ewogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgpOwogICAgIGlmICghbGVuZ3Ro
IHx8IGlucHV0LmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwo
aW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsK
LSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczE2KCksIGxl
bmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CisgICAgICAgIHJldHVybiBiYXNlNjRE
ZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7
CisgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnMxNigpLCBs
ZW5ndGgsIG9wdGlvbnMsIG1hcCk7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+
PiBiYXNlNjRVUkxEZWNvZGUoU3RyaW5nVmlldyBpbnB1dCkKK3N0ZDo6b3B0aW9uYWw8VmVjdG9y
PHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3RyaW5nVmlldyBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2
NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7CiAgICAgdW5z
aWduZWQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7CiAgICAgaWYgKCFsZW5ndGggfHwgaW5wdXQu
aXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFy
YWN0ZXJzOCgpLCBsZW5ndGgsIHsgfSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOwotICAgIHJldHVy
biBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCB7IH0s
IEJhc2U2NERlY29kZU1hcDo6VVJMKTsKLX0KLQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQotewotICAg
IGlmIChpbnB1dC5zaXplKCkgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkp
Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUlu
dGVybmFsKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6
VVJMKTsKLX0KLQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29k
ZShjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0KQotewotICAgIGlmIChpbnB1dC5zaXplKCkgPiBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCi0gICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KGlucHV0LmRhdGEoKSksIGlucHV0LnNpemUoKSwgeyB9LCBCYXNl
NjREZWNvZGVNYXA6OlVSTCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjRVUkxEZWNvZGUoY29uc3QgdWludDhfdCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQotewot
ICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChkYXRhLCBsZW5ndGgsIHsgfSwgQmFzZTY0
RGVjb2RlTWFwOjpVUkwpOwotfQotCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFz
ZTY0VVJMRGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBy
ZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oZGF0YSksIGxlbmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CisgICAgICAgIHJl
dHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG9w
dGlvbnMsIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJh
Y3RlcnMxNigpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdU
RgpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RG
L3d0Zi90ZXh0L0Jhc2U2NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKyNpbmNs
dWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTU2LDU0ICs1NywzNSBAQCBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heGltdW1CYXNlNjRMCiAvLyBSYXRoZXIgdGhhbiBi
ZWluZyBwZXJmZWN0bHkgcHJlY2lzZSwgdGhpcyBpcyBhIGJpdCBjb25zZXJ2YXRpdmUuCiBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIG1heGltdW1CYXNlNjRFbmNvZGVySW5wdXRCdWZmZXJTaXpl
ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC8gNzcgKiA3NiAvIDQgKiAz
IC0gMjsKIAotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQq
LCB1bnNpZ25lZCwgVUNoYXIqLCB1bnNpZ25lZCwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0
RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5j
b2RlTWFwOjpEZWZhdWx0KTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShj
b25zdCB2b2lkKiwgdW5zaWduZWQsIExDaGFyKiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGlj
eSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9
IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNl
NjRFbmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+LCBVQ2hhciogZGVzdGluYXRpb25CdWZmZXIs
IHVuc2lnbmVkIGRlc3RpbmF0aW9uQnVmZmVyU2l6ZSwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFz
ZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0
RW5jb2RlTWFwOjpEZWZhdWx0KTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29k
ZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4sIExDaGFyKiBkZXN0aW5hdGlvbkJ1ZmZlciwgdW5zaWdu
ZWQgZGVzdGluYXRpb25CdWZmZXJTaXplLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNv
ZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVN
YXA6OkRlZmF1bHQpOwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2
NEVuY29kZVRvVmVjdG9yKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgQmFzZTY0RW5jb2RlUG9saWN5
ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0g
QmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKLVZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVU
b1ZlY3Rvcihjb25zdCBWZWN0b3I8dWludDhfdD4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNl
NjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRF
bmNvZGVNYXA6OkRlZmF1bHQpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9y
KGNvbnN0IFZlY3RvcjxjaGFyPiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBv
bGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6
RGVmYXVsdCk7Ci1WZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgQ1N0
cmluZyYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNl
cnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci0KLVdU
Rl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3Qgdm9pZCos
IHVuc2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90
SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwot
U3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIEJhc2U2
NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2
NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci1TdHJpbmcgYmFzZTY0RW5j
b2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPGNoYXI+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFz
ZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0
RW5jb2RlTWFwOjpEZWZhdWx0KTsKLVN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdCBD
U3RyaW5nJiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdElu
c2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKK1dU
Rl9FWFBPUlRfUFJJVkFURSBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoU3Bh
bjxjb25zdCBzdGQ6OmJ5dGU+LCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xp
Y3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRl
ZmF1bHQpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29k
ZVRvVmVjdG9yKFQmJiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpE
b05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0
KTsKIAorV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFu
PGNvbnN0IHN0ZDo6Ynl0ZT4sIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGlj
eTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVm
YXVsdCk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmco
VCYmLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0
TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOworCitXVEZf
RVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29k
ZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4sIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9
IHsgfSwgQmFzZTY0RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKIFdURl9F
WFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2Rl
KGNvbnN0IFN0cmluZyYsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFz
ZTY0RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKIFdURl9FWFBPUlRfUFJJ
VkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKFN0cmluZ1Zp
ZXcsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFw
ID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9w
dGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFw
ID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9w
dGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYs
IE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFwID0g
QmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlv
bmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IHVpbnQ4X3QqLCB1bnNpZ25l
ZCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAg
PSBCYXNlNjREZWNvZGVNYXA6OkRlZmF1bHQpOwotV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0
aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgY2hhciosIHVuc2lnbmVk
LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9
IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7Ci0KLWlubGluZSBWZWN0b3I8dWludDhfdD4gYmFz
ZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCwgQmFzZTY0RW5j
b2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKLXsKLSAgICByZXR1cm4gYmFz
ZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSwgbWFw
KTsKLX0KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2Ft
ZV92PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJp
bmc+ICYmICFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3ZlX3Jl
ZmVyZW5jZV90PFQ+PiwgU3RyaW5nVmlldz4+KiA9IG51bGxwdHI+CitzdGQ6Om9wdGlvbmFsPFZl
Y3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKFQmJiwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9w
dGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRlZmF1bHQp
OwogCi1pbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IFZl
Y3RvcjxjaGFyPiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29k
ZU1hcCBtYXApCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5j
b2RlVG9WZWN0b3IoVCYmIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRF
bmNvZGVNYXAgbWFwKQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5k
YXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5LCBtYXApOworICAgIHJldHVybiBiYXNlNjRFbmNv
ZGVUb1ZlY3Rvcihhc0J5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oaW5wdXQpIH0pLCBwb2xp
Y3ksIG1hcCk7CiB9CiAKLWlubGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0
b3IoY29uc3QgQ1N0cmluZyYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2
NEVuY29kZU1hcCBtYXApCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgYmFzZTY0RW5jb2Rl
VG9TdHJpbmcoVCYmIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNv
ZGVNYXAgbWFwKQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRh
KCksIGlucHV0Lmxlbmd0aCgpLCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29k
ZVRvU3RyaW5nKGFzQnl0ZXMoU3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCkgfSksIHBvbGlj
eSwgbWFwKTsKIH0KIAotaW5saW5lIFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdCBW
ZWN0b3I8dWludDhfdD4mIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRF
bmNvZGVNYXAgbWFwKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc3RkOjplbmFibGVfaWZfdDwhc3Rk
Ojppc19zYW1lX3Y8c3RkOjpyZW1vdmVfY29uc3RfdDxzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxU
Pj4sIFN0cmluZz4gJiYgIXN0ZDo6aXNfc2FtZV92PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpy
ZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmdWaWV3Pj4qPgorc3RkOjpvcHRpb25hbDxWZWN0
b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShUJiYgaW5wdXQsIE9wdGlvblNldDxCYXNlNjREZWNv
ZGVPcHRpb25zPiBvcHRpb25zLCBCYXNlNjREZWNvZGVNYXAgbWFwKQogewotICAgIHJldHVybiBi
YXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5LCBt
YXApOwotfQotCi1pbmxpbmUgU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3Rv
cjxjaGFyPiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1h
cCBtYXApCi17Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LmRhdGEoKSwg
aW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7Ci19Ci0KLWlubGluZSBTdHJpbmcgYmFzZTY0RW5j
b2RlVG9TdHJpbmcoY29uc3QgQ1N0cmluZyYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xp
Y3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCi17Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3Ry
aW5nKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIHBvbGljeSwgbWFwKTsKKyAgICByZXR1
cm4gYmFzZTY0RGVjb2RlKGFzQnl0ZXMoU3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCkgfSks
IG9wdGlvbnMsIG1hcCk7CiB9CiAKIApAQCAtMTEyLDYxICs5NCw1NyBAQCBpbmxpbmUgU3RyaW5n
IGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0CiAvLyBUaGlzIGZvcm1hdCB1c2VzICctJyBhbmQg
J18nIGluc3RlYWQgb2YgJysnIGFuZCAnLycgcmVzcGVjdGl2ZWx5LgogLy8gPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KIAotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVj
dG9yKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCk7Ci1WZWN0b3I8dWludDhfdD4gYmFzZTY0VVJMRW5j
b2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik7Ci1WZWN0b3I8dWludDhfdD4gYmFz
ZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPGNoYXI+Jik7Ci1WZWN0b3I8dWludDhf
dD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgQ1N0cmluZyYpOworVmVjdG9yPHVpbnQ4
X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3Io
VCYmKTsKIAotU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqLCB1bnNp
Z25lZCk7Ci1TdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+Jik7Ci1TdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPGNoYXI+
Jik7Ci1TdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY29uc3QgQ1N0cmluZyYpOworU3Ry
aW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoVCYmKTsKIAot
V1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRV
UkxEZWNvZGUoY29uc3QgU3RyaW5nJik7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25h
bDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShTdHJpbmdWaWV3KTsKLVdURl9FWFBP
UlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2Rl
KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOwotV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0aW9u
YWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+Jik7
Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2
NFVSTERlY29kZShjb25zdCB1aW50OF90KiwgdW5zaWduZWQpOwotV1RGX0VYUE9SVF9QUklWQVRF
IHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgY2hh
ciosIHVuc2lnbmVkKTsKK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxE
ZWNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KTsKK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgU3RyaW5nJik7CitzdGQ6Om9wdGlvbmFsPFZlY3Rv
cjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFN0cmluZ1ZpZXcpOwordGVtcGxhdGU8dHlwZW5h
bWUgVCwgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lX3Y8c3RkOjpyZW1vdmVfY29uc3Rf
dDxzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxUPj4sIFN0cmluZz4gJiYgIXN0ZDo6aXNfc2FtZV92
PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmdW
aWV3Pj4qID0gbnVsbHB0cj4KK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRV
UkxEZWNvZGUoVCYmKTsKIAotaW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVU
b1ZlY3Rvcihjb25zdCB2b2lkKiBpbnB1dCwgdW5zaWduZWQgbGVuZ3RoKQoraW5saW5lIFZlY3Rv
cjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3RvcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
aW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlucHV0LCBsZW5ndGgs
IEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0
dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwg
QmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQogCi1pbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2
NFVSTEVuY29kZVRvVmVjdG9yKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoVCYm
IGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRhKCks
IGlucHV0LnNpemUoKSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6
VVJMKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3Ioc3RkOjpmb3J3YXJkPFQ+KGlu
cHV0KSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKIH0K
IAotaW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihjb25zdCBW
ZWN0b3I8Y2hhcj4mIGlucHV0KQoraW5saW5lIFN0cmluZyBiYXNlNjRVUkxFbmNvZGVUb1N0cmlu
ZyhTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29k
ZVRvVmVjdG9yKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6
OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0
cmluZyhpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJM
KTsKIH0KIAotaW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihj
b25zdCBDU3RyaW5nJiBpbnB1dCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBiYXNlNjRV
UkxFbmNvZGVUb1N0cmluZyhUJiYgaW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRv
VmVjdG9yKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIEJhc2U2NEVuY29kZVBvbGljeTo6
VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3Ry
aW5nKHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCksIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNl
NjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9T
dHJpbmcoY29uc3Qgdm9pZCogaW5wdXQsIHVuc2lnbmVkIGxlbmd0aCkKK2lubGluZSBzdGQ6Om9w
dGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFNwYW48Y29uc3Qgc3RkOjpi
eXRlPiBpbnB1dCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5wdXQsIGxl
bmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKKyAg
ICByZXR1cm4gYmFzZTY0RGVjb2RlKGlucHV0LCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsK
IH0KIAotaW5saW5lIFN0cmluZyBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhjb25zdCBWZWN0b3I8
dWludDhfdD4mIGlucHV0KQoraW5saW5lIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjRVUkxEZWNvZGUoY29uc3QgU3RyaW5nJiBpbnB1dCkKIHsKLSAgICByZXR1cm4gYmFzZTY0
RW5jb2RlVG9TdHJpbmcoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29k
ZShpbnB1dCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBTdHJpbmcg
YmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCkKK2lubGlu
ZSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFN0cmluZ1Zp
ZXcgaW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LmRhdGEo
KSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFw
OjpVUkwpOworICAgIHJldHVybiBiYXNlNjREZWNvZGUoaW5wdXQsIHsgfSwgQmFzZTY0RGVjb2Rl
TWFwOjpVUkwpOwogfQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNv
bnN0IENTdHJpbmcmIGlucHV0KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc3RkOjplbmFibGVfaWZf
dDwhc3RkOjppc19zYW1lX3Y8c3RkOjpyZW1vdmVfY29uc3RfdDxzdGQ6OnJlbW92ZV9yZWZlcmVu
Y2VfdDxUPj4sIFN0cmluZz4gJiYgIXN0ZDo6aXNfc2FtZV92PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8
c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmdWaWV3Pj4qPgorc3RkOjpvcHRpb25h
bDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShUJiYgaW5wdXQpCiB7Ci0gICAgcmV0
dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIEJh
c2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJu
IGJhc2U2NFVSTERlY29kZShhc0J5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oaW5wdXQpIH0p
KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGlubGluZSBi
b29sIGlzQmFzZTY0T3JCYXNlNjRVUkxDaGFyYWN0ZXIoQ2hhcmFjdGVyVHlwZSBjKQpAQCAtMjA4
LDU3ICsxODYsMzYgQEAgaW5saW5lIHVuc2lnbmVkIGNhbGN1bGF0ZUJhc2U2NEVuY29kZWRTaQog
fQogCiBzdHJ1Y3QgQmFzZTY0U3BlY2lmaWNhdGlvbiB7Ci0gICAgY29uc3Qgdm9pZCogaW5wdXRE
YXRhOwotICAgIHVuc2lnbmVkIGlucHV0TGVuZ3RoOworICAgIFNwYW48Y29uc3Qgc3RkOjpieXRl
PiBpbnB1dERhdGE7CiAgICAgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeTsKICAgICBCYXNlNjRF
bmNvZGVNYXAgbWFwOwogfTsKIAotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5j
b2RlZChjb25zdCB2b2lkKiBpbnB1dERhdGEsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNlNjRF
bmNvZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywg
QmFzZTY0RW5jb2RlTWFwIG1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCkKLXsKLSAgICBy
ZXR1cm4geyBpbnB1dERhdGEsIGlucHV0TGVuZ3RoLCBwb2xpY3ksIG1hcCB9OwotfQotCi1pbmxp
bmUgQmFzZTY0U3BlY2lmaWNhdGlvbiBiYXNlNjRFbmNvZGVkKGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6
OkRvTm90SW5zZXJ0TEZzKQotewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEo
KSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3kpOwotfQotCi1pbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlv
biBiYXNlNjRFbmNvZGVkKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW5wdXQsIEJhc2U2NEVuY29kZVBv
bGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzKQotewotICAg
IHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3kp
OwotfQotCi1pbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlvbiBiYXNlNjRFbmNvZGVkKGNvbnN0IENT
dHJpbmcmIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0RW5jb2RlUG9s
aWN5OjpEb05vdEluc2VydExGcykKLXsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5k
YXRhKCksIGlucHV0Lmxlbmd0aCgpLCBwb2xpY3kpOwotfQotCi1pbmxpbmUgQmFzZTY0U3BlY2lm
aWNhdGlvbiBiYXNlNjRVUkxFbmNvZGVkKGNvbnN0IHZvaWQqIGlucHV0RGF0YSwgdW5zaWduZWQg
aW5wdXRMZW5ndGgpCitpbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlvbiBiYXNlNjRFbmNvZGVkKFNw
YW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9IEJh
c2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCBtYXAgPSBC
YXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5w
dXREYXRhLCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29k
ZU1hcDo6VVJMKTsKKyAgICByZXR1cm4geyBpbnB1dCwgcG9saWN5LCBtYXAgfTsKIH0KIAotaW5s
aW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIGlucHV0KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gQmFzZTY0U3BlY2lmaWNhdGlvbiBi
YXNlNjRFbmNvZGVkKFQmJiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9IEJhc2U2
NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCBtYXAgPSBCYXNl
NjRFbmNvZGVNYXA6OkRlZmF1bHQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQu
ZGF0YSgpLCBpbnB1dC5zaXplKCksIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNv
ZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoYXNCeXRlcyhTcGFuIHsgc3Rk
Ojpmb3J3YXJkPFQ+KGlucHV0KSB9KSwgcG9saWN5LCBtYXApOwogfQogCi1pbmxpbmUgQmFzZTY0
U3BlY2lmaWNhdGlvbiBiYXNlNjRVUkxFbmNvZGVkKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW5wdXQp
CitpbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlvbiBiYXNlNjRVUkxFbmNvZGVkKFNwYW48Y29uc3Qg
c3RkOjpieXRlPiBpbnB1dCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5kYXRh
KCksIGlucHV0LnNpemUoKSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1h
cDo6VVJMKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dCwgQmFzZTY0RW5jb2RlUG9s
aWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKIH0KIAotaW5saW5lIEJhc2U2NFNwZWNp
ZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChjb25zdCBDU3RyaW5nJiBpbnB1dCkKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChUJiYgaW5w
dXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5n
dGgoKSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKKyAg
ICByZXR1cm4gYmFzZTY0RW5jb2RlZChhc0J5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oaW5w
dXQpIH0pLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwog
fQogCiB0ZW1wbGF0ZTw+IGNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPEJhc2U2NFNwZWNpZmljYXRp
b24+IHsKIHB1YmxpYzoKICAgICBTdHJpbmdUeXBlQWRhcHRlcihjb25zdCBCYXNlNjRTcGVjaWZp
Y2F0aW9uJiBiYXNlNjQpCiAgICAgICAgIDogbV9iYXNlNjQgeyBiYXNlNjQgfQotICAgICAgICAs
IG1fZW5jb2RlZExlbmd0aCB7IGNhbGN1bGF0ZUJhc2U2NEVuY29kZWRTaXplKGJhc2U2NC5pbnB1
dExlbmd0aCwgYmFzZTY0LnBvbGljeSkgfQorICAgICAgICAsIG1fZW5jb2RlZExlbmd0aCB7IGNh
bGN1bGF0ZUJhc2U2NEVuY29kZWRTaXplKGJhc2U2NC5pbnB1dERhdGEuc2l6ZSgpLCBiYXNlNjQu
cG9saWN5KSB9CiAgICAgewogICAgIH0KIApAQCAtMjY3LDcgKzIyNCw3IEBAIHB1YmxpYzoKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZvaWQgd3JpdGVUbyhDaGFyYWN0
ZXJUeXBlKiBkZXN0aW5hdGlvbikgY29uc3QKICAgICB7Ci0gICAgICAgIGJhc2U2NEVuY29kZSht
X2Jhc2U2NC5pbnB1dERhdGEsIG1fYmFzZTY0LmlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvbiwgbV9l
bmNvZGVkTGVuZ3RoLCBtX2Jhc2U2NC5wb2xpY3ksIG1fYmFzZTY0Lm1hcCk7CisgICAgICAgIGJh
c2U2NEVuY29kZShtX2Jhc2U2NC5pbnB1dERhdGEsIGRlc3RpbmF0aW9uLCBtX2VuY29kZWRMZW5n
dGgsIG1fYmFzZTY0LnBvbGljeSwgbV9iYXNlNjQubWFwKTsKICAgICB9CiAKIHByaXZhdGU6Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi90ZXh0L0NTdHJpbmcuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93
dGYvdGV4dC9DU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNs
dWRlIDx3dGYvSGFzaFRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAKIG5hbWVzcGFjZSBXVEYg
ewogCkBAIC0zOSw5ICs0MCwxMSBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJ
RklFUihDCiBjbGFzcyBDU3RyaW5nQnVmZmVyIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8Q1N0
cmluZ0J1ZmZlcj4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVO
VElGSUVSKENTdHJpbmdCdWZmZXIpOwogcHVibGljOgotICAgIGNvbnN0IGNoYXIqIGRhdGEoKSB7
IHJldHVybiBtdXRhYmxlRGF0YSgpOyB9CisgICAgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0IHsg
cmV0dXJuIGNvbnN0X2Nhc3Q8Q1N0cmluZ0J1ZmZlcio+KHRoaXMpLT5tdXRhYmxlRGF0YSgpOyB9
CiAgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CiAKKyAgICBT
cGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25zdCB7IHJldHVybiBhc0J5dGVzKFNwYW4g
eyBkYXRhKCksIGxlbmd0aCgpIH0pOyB9CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIENT
dHJpbmc7CiAKQEAgLTY2LDYgKzY5LDIwIEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIENTdHJpbmcgbmV3VW5pbml0aWFsaXplZChzaXplX3QgbGVuZ3RoLCBjaGFyKiYg
Y2hhcmFjdGVyQnVmZmVyKTsKICAgICBDU3RyaW5nKEhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUp
IDogbV9idWZmZXIoSGFzaFRhYmxlRGVsZXRlZFZhbHVlKSB7IH0KIAorICAgIFNwYW48Y29uc3Qg
c3RkOjpieXRlPiBieXRlcygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9idWZmZXIpCisg
ICAgICAgICAgICByZXR1cm4gbV9idWZmZXItPmJ5dGVzKCk7CisgICAgICAgIHJldHVybiB7IH07
CisgICAgfQorCisgICAgU3BhbjxzdGQ6OmJ5dGU+IG11dGFibGVCeXRlcygpCisgICAgeworICAg
ICAgICBpZiAoYXV0byBtdXRhYmxlRGF0YSA9IHRoaXMtPm11dGFibGVEYXRhKCkpCisgICAgICAg
ICAgICByZXR1cm4gYXNXcml0YWJsZUJ5dGVzKFNwYW4geyBtdXRhYmxlRGF0YSwgbV9idWZmZXIt
Pmxlbmd0aCgpIH0pOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKwogICAgIGNvbnN0IGNo
YXIqIGRhdGEoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fYnVmZmVyID8gbV9idWZm
ZXItPmRhdGEoKSA6IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1Zp
ZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgJKHdvcmtp
bmcgY29weSkKQEAgLTk0LDYgKzk0LDggQEAgcHVibGljOgogICAgIGNvbnN0IExDaGFyKiBjaGFy
YWN0ZXJzOCgpIGNvbnN0OwogICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzMTYoKSBjb25zdDsK
IAorICAgIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAgICAgYm9vbCBp
c0FsbEFTQ0lJKCkgY29uc3Q7CiAKICAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKQEAgLTQy
NCw2ICs0MjYsMTMgQEAgaW5saW5lIGNvbnN0IFVDaGFyKiBTdHJpbmdWaWV3OjpjaGFyYWN0ZQog
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBVQ2hhcio+KG1fY2hhcmFjdGVycyk7CiB9CiAK
K2lubGluZSBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gU3RyaW5nVmlldzo6Ynl0ZXMoKSBjb25zdAor
eworICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGFzQnl0ZXMoU3BhbiB7IGNoYXJh
Y3RlcnM4KCksIGxlbmd0aCgpIH0pOworICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBjaGFyYWN0
ZXJzMTYoKSwgbGVuZ3RoKCkgfSk7Cit9CisKIGlubGluZSBib29sIFN0cmluZ1ZpZXc6OmlzQWxs
QVNDSUkoKSBjb25zdAogewogICAgIGlmIChpczhCaXQoKSkKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L3RleHQvV1RGU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9XVEZT
dHJpbmcuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJp
bmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSA8c3RkYXJn
Lmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9BU0NJSUxpdGVyYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9JbnRl
Z2VyVG9TdHJpbmdDb252ZXJzaW9uLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5o
PgpAQCAtMTM0LDYgKzEzNSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsg
cmV0dXJuICFtX2ltcGwgfHwgbV9pbXBsLT5pczhCaXQoKTsgfQogCiAgICAgdW5zaWduZWQgc2l6
ZUluQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmxlbmd0aCgpICogKGlz
OEJpdCgpID8gc2l6ZW9mKExDaGFyKSA6IHNpemVvZihVQ2hhcikpIDogMDsgfQorICAgIFNwYW48
Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OwogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRF
IENTdHJpbmcgYXNjaWkoKSBjb25zdDsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgQ1N0cmluZyBs
YXRpbjEoKSBjb25zdDsKQEAgLTQ4Myw2ICs0ODUsMTYgQEAgdGVtcGxhdGU8PiBpbmxpbmUgY29u
c3QgVUNoYXIqIFN0cmluZzo6YwogICAgIHJldHVybiBjaGFyYWN0ZXJzMTYoKTsKIH0KIAoraW5s
aW5lIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBTdHJpbmc6OmJ5dGVzKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1faW1wbCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmIChtX2ltcGwtPmlzOEJp
dCgpKQorICAgICAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgbV9pbXBsLT5jaGFyYWN0ZXJzOCgp
LCBtX2ltcGwtPmxlbmd0aCgpIH0pOworICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBtX2ltcGwt
PmNoYXJhY3RlcnMxNigpLCBtX2ltcGwtPmxlbmd0aCgpIH0pOworfQorCiBpbmxpbmUgVUNoYXIg
U3RyaW5nOjpjaGFyYWN0ZXJBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKICAgICBpZiAoIW1f
aW1wbCB8fCBpbmRleCA+PSBtX2ltcGwtPmxlbmd0aCgpKQpJbmRleDogU291cmNlL1dURi93dGYv
d2luL0ZpbGVTeXN0ZW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3dpbi9G
aWxlU3lzdGVtV2luLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvd2lu
L0ZpbGVTeXN0ZW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjMsOSArMzYzLDkgQEAgU3Ry
aW5nIGNyZWF0ZVRlbXBvcmFyeURpcmVjdG9yeSgpCiAgICAgfSk7CiB9CiAKLWJvb2wgdW5tYXBW
aWV3T2ZGaWxlKHZvaWQqIGJ1ZmZlciwgc2l6ZV90KQorYm9vbCB1bm1hcFZpZXdPZkZpbGUoU3Bh
bjxzdGQ6OmJ5dGU+IGRhdGEpCiB7Ci0gICAgcmV0dXJuIFVubWFwVmlld09mRmlsZShidWZmZXIp
OworICAgIHJldHVybiBVbm1hcFZpZXdPZkZpbGUoZGF0YS5kYXRhKCkpOwogfQogCiBib29sIE1h
cHBlZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIEZp
bGVPcGVuTW9kZSBvcGVuTW9kZSwgTWFwcGVkRmlsZU1vZGUpCkBAIC0zNzQsNyArMzc0LDcgQEAg
Ym9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0ZgogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBhdXRvIHNpemUgPSBmaWxlU2l6ZShoYW5kbGUpOwotICAgIGlmICghc2l6
ZSB8fCAqc2l6ZSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgfHwgKnNpemUg
PiBzdGQ6Om51bWVyaWNfbGltaXRzPGRlY2x0eXBlKG1fZmlsZVNpemUpPjo6bWF4KCkpIHsKKyAg
ICBpZiAoIXNpemUgfHwgKnNpemUgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgp
IHx8ICpzaXplID4gc3RkOjpudW1lcmljX2xpbWl0czxkZWNsdHlwZShtX2ZpbGVEYXRhLnNpemUo
KSk+OjptYXgoKSkgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC00MDMsMTEg
KzQwMywxMiBAQCBib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmCiAgICAg
aWYgKCFtYXBwaW5nKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2ZpbGVEYXRhID0g
TWFwVmlld09mRmlsZShtYXBwaW5nLCBkZXNpcmVkQWNjZXNzLCAwLCAwLCAqc2l6ZSk7CisgICAg
YXV0byBkYXRhID0gTWFwVmlld09mRmlsZShtYXBwaW5nLCBkZXNpcmVkQWNjZXNzLCAwLCAwLCAq
c2l6ZSk7CiAgICAgQ2xvc2VIYW5kbGUobWFwcGluZyk7Ci0gICAgaWYgKCFtX2ZpbGVEYXRhKQor
ICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fZmlsZVNpemUgPSAq
c2l6ZTsKKworICAgIG1fZmlsZURhdGEgPSBTcGFuIHsgcmVpbnRlcnByZXRfY2FzdDxzdGQ6OmJ5
dGUqPihkYXRhKSwgKnNpemUgfTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsODAgQEAKKzIwMjEtMDYtMTEgIFNhbSBXZWluaWcgIDx3ZWluaWdA
YXBwbGUuY29tPgorCisgICAgICAgIEFkb3B0IFNwYW4gaW4gbW9yZSBwbGFjZXMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjg4NworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtXSVBdCisKKyAgICAgICAg
KiBNb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFw
cEhpZ2hsaWdodDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcEhpZ2hsaWdo
dDo6ZGVjb2RlKToKKyAgICAgICAgKiBNb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHRSYW5n
ZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwSGlnaGxpZ2h0UmFuZ2VEYXRhOjp0b1No
YXJlZEJ1ZmZlciBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNh
dG9yUmVzcG9uc2VEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjplbmNvZGVBcnJheUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpkZWNvZGVBcnJheUJ1ZmZlcik6CisgICAgICAgICogTW9kdWxl
cy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmg6CisgICAgICAg
IChXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjplbmNvZGUgY29u
c3QpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbERlc2Ny
aXB0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9y
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRI
YW5kc2hha2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpnZXRF
eHBlY3RlZFdlYlNvY2tldEFjY2VwdCk6CisgICAgICAgICogYmluZGluZ3MvanMvQnVmZmVyU291
cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJTb3VyY2U6OmJ5dGVzIGNvbnN0KToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVjb2RlKToKKyAgICAgICAgKiBjb250ZW50
ZXh0ZW5zaW9ucy9TZXJpYWxpemVkTkZBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpTZXJpYWxpemVkTkZBOjpwb2ludGVyQXRPZmZzZXRJbkZpbGUgY29uc3QpOgor
ICAgICAgICAqIGNyeXB0by9tYWMvU2VyaWFsaXplZENyeXB0b0tleVdyYXBNYWMubW06CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVBbmRTdG9yZU1hc3RlcktleSk6CisgICAgICAgICogZG9tL05v
ZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFzaFBvaW50ZXIpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NUGF0Y2hTdXBw
b3J0OjpjcmVhdGVEaWdlc3QpOgorICAgICAgICAoV2ViQ29yZTo6YWRkU3RyaW5nVG9TSEExKTog
RGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6c2hvd0NlcnRpZmljYXRl
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmdldFNlcmlhbGl6ZWRD
ZXJ0aWZpY2F0ZSk6CisgICAgICAgICogcGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGE6OmNyZWF0ZVNoYXJlZEJ1
ZmZlciBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNoYXJlZEJ1ZmZlcjo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZl
cjo6RGF0YVNlZ21lbnQ6OmRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVm
ZmVyOjpEYXRhU2VnbWVudDo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVk
QnVmZmVyOjpkZWNvZGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6
RGF0YVNlZ21lbnQ6OnNpemUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZl
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2NvY29hL0NBQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjplbmNv
ZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpk
ZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01vZGVsLmg6CisgICAgICAgIChX
ZWJDb3JlOjpNb2RlbDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1vZGVsOjpk
ZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlBpeGVsQnVmZmVyOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFt
L1JlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNh
cGFiaWxpdHlWYWx1ZU9yUmFuZ2U6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpD
YXBhYmlsaXR5VmFsdWVPclJhbmdlOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlh
c3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
YWRkU3RyaW5nVG9TSEExKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL0NlcnRpZmlj
YXRlSW5mb0NGTmV0LmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OmVuY29kZUNGRGF0
YSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpkZWNvZGVDRkRhdGEpOgorICAgICAgICAq
IHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50OjpiaW5kQmxvYik6CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZVN0
YXRlbWVudC5oOgorICAgICAgICAqIHdvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9u
RGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVnaXN0cmF0aW9uRGF0YWJhc2U6OmRv
UHVzaENoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaXN0cmF0aW9uRGF0YWJhc2U6Omlt
cG9ydFJlY29yZHMpOgorICAgICAgICAqIHdvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTY3JpcHRT
dG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNXU2NyaXB0U3RvcmFnZTo6c3RvcmUpOgor
CiAyMDIxLTA2LTExICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAg
TGF6aWx5IGNvbXB1dGUgU2VjdXJpdHlPcmlnaW46Om1faXNQb3RlbnRpYWxseVRydXN0d29ydGh5
IGZvciBwZXJmb3JtYW5jZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRt
ZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2VuY3J5cHRlZG1lZGlhL0luaXREYXRhUmVnaXN0cnkuY3BwCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0luaXREYXRhUmVn
aXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAgc3RhdGljIFJlZlB0
cjxTaGFyZWRCdWZmZXI+IHNhbml0aXplS2V5aQogICAgIGF1dG8gb2JqZWN0ID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKICAgICBhdXRvIGtpZHNBcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUo
KTsKICAgICBmb3IgKGF1dG8mIGJ1ZmZlciA6IGtleUlEQnVmZmVyLnZhbHVlKCkpCi0gICAgICAg
IGtpZHNBcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhidWZmZXItPmRh
dGEoKSwgYnVmZmVyLT5zaXplKCkpKTsKKyAgICAgICAga2lkc0FycmF5LT5wdXNoU3RyaW5nKGJh
c2U2NFVSTEVuY29kZVRvU3RyaW5nKGJ1ZmZlci0+Ynl0ZXMoKSkpOwogICAgIG9iamVjdC0+c2V0
QXJyYXkoImtpZHMiLCBXVEZNb3ZlKGtpZHNBcnJheSkpOwogCiAgICAgQ1N0cmluZyBqc29uRGF0
YSA9IG9iamVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0LmgJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lk
IEFwcEhpZ2hsaWdodDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5j
b2RlciA8PCBzdGF0aWNfY2FzdDxzaXplX3Q+KGhpZ2hsaWdodC0+c2l6ZSgpKTsKLSAgICBlbmNv
ZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShoaWdobGlnaHQtPmRhdGEoKSwgaGlnaGxpZ2h0LT5z
aXplKCksIDEpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKCpoaWdobGlnaHQs
IDEpOwogCiAgICAgZW5jb2RlciA8PCB0ZXh0OwogCkBAIC03NSw3ICs3NSw3IEBAIHN0ZDo6b3B0
aW9uYWw8QXBwSGlnaGxpZ2h0PiBBcHBIaWdobGlnaHQKIAogICAgIFZlY3Rvcjx1aW50OF90PiBo
aWdobGlnaHQ7CiAgICAgaGlnaGxpZ2h0Lmdyb3coKmxlbmd0aCk7Ci0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZUZpeGVkTGVuZ3RoRGF0YShoaWdobGlnaHQuZGF0YSgpLCBoaWdobGlnaHQuc2l6ZSgp
LCAxKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGhpZ2hsaWdodCwg
MSkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKICAgICBzdGQ6Om9wdGlvbmFsPHN0
ZDo6b3B0aW9uYWw8U3RyaW5nPj4gdGV4dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFJhbmdlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhLmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9oaWdobGlnaHQvQXBwSGln
aGxpZ2h0UmFuZ2VEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBSZWY8
U2hhcmVkQnVmZmVyPiBBcHBIaWdobGlnaHRSYW5nZURhdGE6CiB7CiAgICAgV1RGOjpQZXJzaXN0
ZW5jZTo6RW5jb2RlciBlbmNvZGVyOwogICAgIGVuY29kZXIgPDwgKnRoaXM7Ci0gICAgcmV0dXJu
IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6
ZSgpKTsKKyAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZW5jb2Rlci5idWZmZXIoKSk7
CiB9CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgQXBwSGlnaGxpZ2h0UmFuZ2VEYXRh
OjpOb2RlUGF0aENvbXBvbmVudDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFD
aGFubmVsLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgw
LDcgQEAgTmV0d29ya1NlbmRRdWV1ZSBSVENEYXRhQ2hhbm5lbDo6Y3JlYXRlTQogICAgICAgICBp
ZiAoIWNoYW5uZWwubV9oYW5kbGVyLT5zZW5kU3RyaW5nRGF0YSh1dGY4KSkKICAgICAgICAgICAg
IGNoYW5uZWwuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNz
YWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgIkVycm9yIHNlbmRpbmcgc3RyaW5n
IHRocm91Z2ggUlRDRGF0YUNoYW5uZWwuIl9zKTsKICAgICB9LCBbJmNoYW5uZWxdKGF1dG8mIHNw
YW4pIHsKLSAgICAgICAgaWYgKCFjaGFubmVsLm1faGFuZGxlci0+c2VuZFJhd0RhdGEoc3Bhbi5k
YXRhKCksIHNwYW4uc2l6ZSgpKSkKKyAgICAgICAgaWYgKCFjaGFubmVsLm1faGFuZGxlci0+c2Vu
ZFJhd0RhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3Bhbi5kYXRhKCkpLCBz
cGFuLnNpemUoKSkpCiAgICAgICAgICAgICBjaGFubmVsLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJy
b3IsICJFcnJvciBzZW5kaW5nIGJpbmFyeSBkYXRhIHRocm91Z2ggUlRDRGF0YUNoYW5uZWwuIl9z
KTsKICAgICB9LCBbJmNoYW5uZWxdKEV4Y2VwdGlvbkNvZGUgZXJyb3JDb2RlKSB7CiAgICAgICAg
IGlmIChhdXRvKiBjb250ZXh0ID0gY2hhbm5lbC5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBs
YWNlbWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMv
UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0JKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQko
d29ya2luZyBjb3B5KQpAQCAtMzQwLDcgKzM0MCw3IEBAIHN0YXRpYyBKU1ZhbHVlICpqc1ZhbHVl
V2l0aEFWTWV0YWRhdGFJdGUKICAgICAgICAgaWQgdmFsdWUgPSBpdGVtLnZhbHVlOwogICAgICAg
ICBOU1N0cmluZyAqbWltZVR5cGUgPSBbW2l0ZW0gZXh0cmFBdHRyaWJ1dGVzXSBvYmplY3RGb3JL
ZXk6QCJNSU1FdHlwZSJdOwogICAgICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TRGF0
YSBjbGFzc11dICYmIG1pbWVUeXBlKSB7Ci0gICAgICAgICAgICBhdXRvIGRhdGE2NCA9IG1ha2VT
dHJpbmcoImRhdGE6IiwgU3RyaW5nKG1pbWVUeXBlKSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2Rl
ZChbdmFsdWUgYnl0ZXNdLCBbdmFsdWUgbGVuZ3RoXSkpOworICAgICAgICAgICAgYXV0byBkYXRh
NjQgPSBtYWtlU3RyaW5nKCJkYXRhOiIsIFN0cmluZyhtaW1lVHlwZSksICI7YmFzZTY0LCIsIGJh
c2U2NEVuY29kZWQoU3BhbiB7IHN0YXRpY19jYXN0PGNvbnN0IHN0ZDo6Ynl0ZT4oW3ZhbHVlIGJ5
dGVzXSksIFt2YWx1ZSBsZW5ndGhdIH0pKTsKICAgICAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9i
amVjdDooX19icmlkZ2UgTlNTdHJpbmcgKilkYXRhNjQuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSBm
b3JLZXk6QCJ2YWx1ZSJdOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIFtkaWN0aW9uYXJ5
IHNldE9iamVjdDp2YWx1ZSBmb3JLZXk6QCJ2YWx1ZSJdOwpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yQ29vcmRpbmF0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvckNvb3JkaW5h
dG9yLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dXRobi9BdXRoZW50aWNhdG9yQ29vcmRpbmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3
ICs2NCw3IEBAIHN0YXRpYyBSZWY8QXJyYXlCdWZmZXI+IHByb2R1Y2VDbGllbnREYXQKICAgICAg
ICAgb2JqZWN0LT5zZXRTdHJpbmcoInR5cGUiX3MsICJ3ZWJhdXRobi5nZXQiX3MpOwogICAgICAg
ICBicmVhazsKICAgICB9Ci0gICAgb2JqZWN0LT5zZXRTdHJpbmcoImNoYWxsZW5nZSJfcywgYmFz
ZTY0VVJMRW5jb2RlVG9TdHJpbmcoY2hhbGxlbmdlLmRhdGEoKSwgY2hhbGxlbmdlLmxlbmd0aCgp
KSk7CisgICAgb2JqZWN0LT5zZXRTdHJpbmcoImNoYWxsZW5nZSJfcywgYmFzZTY0VVJMRW5jb2Rl
VG9TdHJpbmcoY2hhbGxlbmdlLmJ5dGVzKCkpKTsKICAgICBvYmplY3QtPnNldFN0cmluZygib3Jp
Z2luIl9zLCBvcmlnaW4udG9SYXdTdHJpbmcoKSk7CiAKICAgICBhdXRvIHV0ZjhKU09OU3RyaW5n
ID0gb2JqZWN0LT50b0pTT05TdHJpbmcoKS51dGY4KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRpY2F0b3JSZXNwb25zZURhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRpY2F0b3JSZXNwb25zZURh
dGEuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRo
bi9BdXRoZW50aWNhdG9yUmVzcG9uc2VEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5
LDcgQEAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHN0YXRpYyB2b2lkIGVuY29kZUFycmF5QnVm
ZmVyKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEFycmF5QnVmZmVyJiBidWZmZXIpCiB7CiAgICAg
ZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYnVmZmVyLmJ5dGVMZW5ndGgoKSk7Ci0g
ICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGJ1ZmZlci5kYXRhKCkpLCBidWZmZXIuYnl0ZUxlbmd0aCgpLCAxKTsKKyAgICBlbmNvZGVy
LmVuY29kZUZpeGVkTGVuZ3RoRGF0YShidWZmZXIuYnl0ZXMoKSwgMSk7CiB9CiAKIHRlbXBsYXRl
PGNsYXNzIERlY29kZXI+CkBAIC03NSw3ICs3NSw3IEBAIFJlZlB0cjxBcnJheUJ1ZmZlcj4gZGVj
b2RlQXJyYXlCdWZmZXIoRGUKICAgICBhdXRvIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjp0cnlDcmVh
dGUobGVuZ3RoLnZhbHVlKCksIHNpemVvZih1aW50OF90KSk7CiAgICAgaWYgKCFidWZmZXIpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0
aERhdGEoc3RhdGljX2Nhc3Q8dWludDhfdCo+KGJ1ZmZlci0+ZGF0YSgpKSwgbGVuZ3RoLnZhbHVl
KCksIDEpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLT53
cml0YWJsZUJ5dGVzKCksIDEpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4g
YnVmZmVyOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNL
ZXlDcmVkZW50aWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWwuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVu
dE91dHB1dHMgUHUKIH0KIAogUHVibGljS2V5Q3JlZGVudGlhbDo6UHVibGljS2V5Q3JlZGVudGlh
bChSZWY8QXV0aGVudGljYXRvclJlc3BvbnNlPiYmIHJlc3BvbnNlKQotICAgIDogQmFzaWNDcmVk
ZW50aWFsKGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKHJlc3BvbnNlLT5yYXdJZCgpLT5kYXRhKCks
IHJlc3BvbnNlLT5yYXdJZCgpLT5ieXRlTGVuZ3RoKCkpLCBUeXBlOjpQdWJsaWNLZXksIERpc2Nv
dmVyeTo6UmVtb3RlKQorICAgIDogQmFzaWNDcmVkZW50aWFsKGJhc2U2NFVSTEVuY29kZVRvU3Ry
aW5nKHJlc3BvbnNlLT5yYXdJZCgpLT5ieXRlcygpKSwgVHlwZTo6UHVibGljS2V5LCBEaXNjb3Zl
cnk6OlJlbW90ZSkKICAgICAsIG1fcmVzcG9uc2UoV1RGTW92ZShyZXNwb25zZSkpCiB7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxD
cmVhdGlvbk9wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaAkocmV2aXNpb24gMjc4
ODA5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50
aWFsQ3JlYXRpb25PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw4ICsxNDEsOCBAQCB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25P
cHRpb25zOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8
IHJwLmlkIDw8IHJwLm5hbWUgPDwgcnAuaWNvbjsKLSAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0
PHVpbnQ2NF90Pih1c2VyLmlkLmxlbmd0aCgpKTsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YSh1c2VyLmlkLmRhdGEoKSwgdXNlci5pZC5sZW5ndGgoKSwgMSk7CisgICAgZW5jb2Rl
ciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odXNlci5pZC5ieXRlcygpLnNpemUoKSk7CisgICAg
ZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEodXNlci5pZC5ieXRlcygpLCAxKTsKICAgICBl
bmNvZGVyIDw8IHVzZXIuZGlzcGxheU5hbWUgPDwgdXNlci5uYW1lIDw8IHVzZXIuaWNvbiA8PCBw
dWJLZXlDcmVkUGFyYW1zIDw8IHRpbWVvdXQgPDwgZXhjbHVkZUNyZWRlbnRpYWxzIDw8IGF1dGhl
bnRpY2F0b3JTZWxlY3Rpb24gPDwgYXR0ZXN0YXRpb24gPDwgZXh0ZW5zaW9uczsKIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsRGVz
Y3JpcHRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4v
UHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw4ICs0Nyw4IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+CiB2b2lkIFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yOjplbmNvZGUoRW5jb2RlciYg
ZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IHR5cGU7Ci0gICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDx1aW50NjRfdD4oaWQubGVuZ3RoKCkpOwotICAgIGVuY29kZXIuZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKGlkLmRhdGEoKSwgaWQubGVuZ3RoKCksIDEpOworICAgIGVuY29kZXIgPDwg
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KGlkLmJ5dGVzKCkuc2l6ZSgpKTsKKyAgICBlbmNvZGVyLmVu
Y29kZUZpeGVkTGVuZ3RoRGF0YShpZC5ieXRlcygpLCAxKTsKICAgICBlbmNvZGVyIDw8IHRyYW5z
cG9ydHM7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJT
b2NrZXRIYW5kc2hha2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTcsMTkgKzk3LDIwIEBAIHN0YXRpYyBTdHJpbmcgZ2VuZXJhdGVT
ZWNXZWJTb2NrZXRLZXkoKQogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgbm9uY2VTaXplID0gMTY7
CiAgICAgdW5zaWduZWQgY2hhciBrZXlbbm9uY2VTaXplXTsKICAgICBjcnlwdG9ncmFwaGljYWxs
eVJhbmRvbVZhbHVlcyhrZXksIG5vbmNlU2l6ZSk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRv
U3RyaW5nKGtleSwgbm9uY2VTaXplKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmco
a2V5KTsKIH0KIAogU3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRXZWJTb2Nr
ZXRBY2NlcHQoY29uc3QgU3RyaW5nJiBzZWNXZWJTb2NrZXRLZXkpCiB7CiAgICAgY29uc3RleHBy
IHVpbnQ4X3Qgd2ViU29ja2V0S2V5R1VJRFtdID0gIjI1OEVBRkE1LUU5MTQtNDdEQS05NUNBLUM1
QUIwREM4NUIxMSI7CisKICAgICBTSEExIHNoYTE7Ci0gICAgQ1N0cmluZyBrZXlEYXRhID0gc2Vj
V2ViU29ja2V0S2V5LmFzY2lpKCk7Ci0gICAgc2hhMS5hZGRCeXRlcyhrZXlEYXRhLmRhdGFBc1VJ
bnQ4UHRyKCksIGtleURhdGEubGVuZ3RoKCkpOwotICAgIHNoYTEuYWRkQnl0ZXMod2ViU29ja2V0
S2V5R1VJRCwgc3RkOjpzaXplKHdlYlNvY2tldEtleUdVSUQpIC0gMSk7CisgICAgc2hhMS5hZGRC
eXRlcyhzZWNXZWJTb2NrZXRLZXkuYXNjaWkoKS5ieXRlcygpKTsKKyAgICBzaGExLmFkZEJ5dGVz
KHdlYlNvY2tldEtleUdVSUQpOworCiAgICAgU0hBMTo6RGlnZXN0IGhhc2g7CiAgICAgc2hhMS5j
b21wdXRlSGFzaChoYXNoKTsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaGFzaC5k
YXRhKCksIFNIQTE6Omhhc2hTaXplKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmco
aGFzaCk7CiB9CiAKIFdlYlNvY2tldEhhbmRzaGFrZTo6V2ViU29ja2V0SGFuZHNoYWtlKGNvbnN0
IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHByb3RvY29sLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2Vu
dCwgY29uc3QgU3RyaW5nJiBjbGllbnRPcmlnaW4sIGJvb2wgYWxsb3dDb29raWVzKQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQnVmZmVyU291cmNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQnVmZmVyU291cmNlLmgJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0J1ZmZlclNvdXJjZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Nyw2ICs1NywxMyBAQCBwdWJsaWM6CiAgICAgICAgIH0sIG1fdmFyaWFudCk7
CiAgICAgfQogCisgICAgU3Bhbjxjb25zdCB1aW50OF90PiBieXRlcygpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gV1RGOjp2aXNpdChbXShhdXRvJiBidWZmZXIpIC0+IFNwYW48Y29uc3Qg
dWludDhfdD4geworICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlciA/IFNwYW48Y29uc3QgdWludDhf
dD4geyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYnVmZmVyLT5kYXRhKCkpLCBidWZmZXIt
PmJ5dGVMZW5ndGgoKSB9IDogU3Bhbjxjb25zdCB1aW50OF90PiB7IH07CisgICAgICAgIH0sIG1f
dmFyaWFudCk7CisgICAgfQorCiBwcml2YXRlOgogICAgIFZhcmlhbnRUeXBlIG1fdmFyaWFudDsK
IH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NCwxNSAr
MTY0LDE1IEBAIHZvaWQgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjplbmNvZGUoRW5jb2QKIAogICAg
IGlmIChoYXNBcnJheSkgewogICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90
PihtX2FycmF5QnVmZmVyQ29udGVudHNBcnJheS0+c2l6ZSgpKTsKLSAgICAgICAgZm9yIChjb25z
dCBhdXRvICZhcnJheUJ1ZmZlckNvbnRlbnRzIDogKm1fYXJyYXlCdWZmZXJDb250ZW50c0FycmF5
KSB7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgYXJyYXlCdWZmZXJDb250ZW50cyA6ICptX2Fy
cmF5QnVmZmVyQ29udGVudHNBcnJheSkgewogICAgICAgICAgICAgZW5jb2RlciA8PCBhcnJheUJ1
ZmZlckNvbnRlbnRzLnNpemVJbkJ5dGVzKCk7Ci0gICAgICAgICAgICBlbmNvZGVyLmVuY29kZUZp
eGVkTGVuZ3RoRGF0YShzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYXJyYXlCdWZmZXJDb250
ZW50cy5kYXRhKCkpLCBhcnJheUJ1ZmZlckNvbnRlbnRzLnNpemVJbkJ5dGVzKCksIDEpOworICAg
ICAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYXJyYXlCdWZmZXJDb250ZW50
cy5ieXRlcygpLCAxKTsKICAgICAgICAgfQogICAgIH0KIAogI2lmIEVOQUJMRShXRUJfUlRDKQog
ICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1fZGV0YWNoZWRSVENEYXRhQ2hh
bm5lbHMuc2l6ZSgpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8gJmNoYW5uZWwgOiBtX2RldGFjaGVk
UlRDRGF0YUNoYW5uZWxzKQorICAgIGZvciAoY29uc3QgYXV0byYgY2hhbm5lbCA6IG1fZGV0YWNo
ZWRSVENEYXRhQ2hhbm5lbHMpCiAgICAgICAgIGVuY29kZXIgPDwgKmNoYW5uZWw7CiAjZW5kaWYK
IH0KQEAgLTIwNiw3ICsyMDYsNyBAQCBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJp
YWxpemVkCiAgICAgICAgICAgICBhdXRvIGJ1ZmZlciA9IEdpZ2FjYWdlOjp0cnlNYWxsb2MoR2ln
YWNhZ2U6OlByaW1pdGl2ZSwgYnVmZmVyU2l6ZSk7CiAgICAgICAgICAgICBpZiAoIWJ1ZmZlcikK
ICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGVGaXhlZExlbmd0aERhdGEoc3RhdGljX2Nhc3Q8dWludDhfdCo+KGJ1ZmZlciksIGJ1
ZmZlclNpemUsIDEpKSB7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5n
dGhEYXRhKFNwYW4geyBzdGF0aWNfY2FzdDxzdGQ6OmJ5dGUqPihidWZmZXIpLCBidWZmZXJTaXpl
IH0sIDEpKSB7CiAgICAgICAgICAgICAgICAgR2lnYWNhZ2U6OmZyZWUoR2lnYWNhZ2U6OlByaW1p
dGl2ZSwgYnVmZmVyKTsKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAg
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL1NlcmlhbGl6ZWRO
RkEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL1Nl
cmlhbGl6ZWRORkEuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9TZXJpYWxpemVkTkZBLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcg
KzEwNyw3IEBAIFNlcmlhbGl6ZWRORkE6OlNlcmlhbGl6ZWRORkEoRmlsZVN5c3RlbToKIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CiBjb25zdCBUKiBTZXJpYWxpemVkTkZBOjpwb2ludGVyQXRPZmZzZXRJ
bkZpbGUoc2l6ZV90IG9mZnNldCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBUKj4oc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1fZmlsZS5kYXRhKCkpICsg
b2Zmc2V0KTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4obV9maWxlLmRh
dGEoKS5kYXRhKCkgKyBvZmZzZXQpOwogfQogCiBhdXRvIFNlcmlhbGl6ZWRORkE6Om5vZGVzKCkg
Y29uc3QgLT4gY29uc3QgUmFuZ2U8SW1tdXRhYmxlTkZBTm9kZT4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5RUNNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5RUNNYWMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTk3LDEwICsxOTcsMTAgQEAgYm9vbCBDcnlwdG9LZXlFQzo6cGxhdGZvcm1BZGRG
aWVsZEVsZW1lbgogCiAgICAgaWYgKFVOTElLRUxZKChzaXplICE9IHB1YmxpY0tleVNpemUpICYm
IChzaXplICE9IHByaXZhdGVLZXlTaXplKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBq
d2sueCA9IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKHJlc3VsdC5kYXRhKCkgKyAxLCBrZXlTaXpl
SW5CeXRlcyk7Ci0gICAgandrLnkgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhyZXN1bHQuZGF0
YSgpICsga2V5U2l6ZUluQnl0ZXMgKyAxLCBrZXlTaXplSW5CeXRlcyk7CisgICAgandrLnggPSBi
YXNlNjRVUkxFbmNvZGVUb1N0cmluZyhTcGFuIHsgcmVzdWx0IH0uc3Vic3BhbigxLCBrZXlTaXpl
SW5CeXRlcykpOworICAgIGp3ay55ID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoU3BhbiB7IHJl
c3VsdCB9LnN1YnNwYW4oMSArIGtleVNpemVJbkJ5dGVzLCBrZXlTaXplSW5CeXRlcykpOwogICAg
IGlmIChzaXplID4gcHVibGljS2V5U2l6ZSkKLSAgICAgICAgandrLmQgPSBiYXNlNjRVUkxFbmNv
ZGVUb1N0cmluZyhyZXN1bHQuZGF0YSgpICsgcHVibGljS2V5U2l6ZSwga2V5U2l6ZUluQnl0ZXMp
OworICAgICAgICBqd2suZCA9IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKFNwYW4geyByZXN1bHQg
fS5zdWJzcGFuKHB1YmxpY0tleVNpemUsIGtleVNpemVJbkJ5dGVzKSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvU2VyaWFsaXplZENyeXB0
b0tleVdyYXBNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9T
ZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5tbQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYkNvcmUvY3J5cHRvL21hYy9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTY3LDcgKzE2Nyw3IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1
aW50OF90Pj4gZmkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9CiAgICAgUmV0
YWluUHRyPENGRGF0YVJlZj4ga2V5RGF0YSA9IGFkb3B0Q0Yoa2V5RGF0YVJlZik7Ci0gICAgcmV0
dXJuIGJhc2U2NERlY29kZShDRkRhdGFHZXRCeXRlUHRyKGtleURhdGEuZ2V0KCkpLCBDRkRhdGFH
ZXRMZW5ndGgoa2V5RGF0YS5nZXQoKSkpOworICAgIHJldHVybiBiYXNlNjREZWNvZGUoU3BhbiB7
IENGRGF0YUdldEJ5dGVQdHIoa2V5RGF0YS5nZXQoKSksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihD
RkRhdGFHZXRMZW5ndGgoa2V5RGF0YS5nZXQoKSkpIH0pOwogfQogCiBzdGQ6Om9wdGlvbmFsPFZl
Y3Rvcjx1aW50OF90Pj4gZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE2MDYsNyArMTYwNiw4IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IE5v
ZGU6OnNldFRleHRDb250ZW50KGMKIHN0YXRpYyBTSEExOjpEaWdlc3QgaGFzaFBvaW50ZXIoY29u
c3Qgdm9pZCogcG9pbnRlcikKIHsKICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmcG9pbnRlciksIHNpemVvZihwb2ludGVy
KSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgJnBvaW50ZXIsIDEgfSk7CisKICAgICBTSEEx
OjpEaWdlc3QgZGlnZXN0OwogICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsKICAgICByZXR1
cm4gZGlnZXN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2Fk
ZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVS
ZWFkZXJMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzgsNyArMzM4LDcgQEAgdm9pZCBG
aWxlUmVhZGVyTG9hZGVyOjpjb252ZXJ0VG9EYXRhVVJMKAogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgbV9zdHJpbmdSZXN1bHQgPSBtYWtlU3RyaW5nKCJkYXRhOiIsIG1fZGF0YVR5cGUu
aXNFbXB0eSgpID8gImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIgOiBtX2RhdGFUeXBlLCAiO2Jh
c2U2NCwiLCBiYXNlNjRFbmNvZGVkKG1fcmF3RGF0YS0+ZGF0YSgpLCBtX2J5dGVzTG9hZGVkKSk7
CisgICAgbV9zdHJpbmdSZXN1bHQgPSBtYWtlU3RyaW5nKCJkYXRhOiIsIG1fZGF0YVR5cGUuaXNF
bXB0eSgpID8gImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIgOiBtX2RhdGFUeXBlLCAiO2Jhc2U2
NCwiLCBiYXNlNjRFbmNvZGVkKG1fcmF3RGF0YS0+Ynl0ZXMoKSkpOwogfQogCiBib29sIEZpbGVS
ZWFkZXJMb2FkZXI6OmlzQ29tcGxldGVkKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Zp
bGVhcGkvTmV0d29ya1NlbmRRdWV1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTMsMTEgKzUzLDEwIEBAIHZvaWQgTmV0d29ya1NlbmRRdWV1ZTo6ZW5xdWV1ZShDU3RyaW5nJiYK
IHZvaWQgTmV0d29ya1NlbmRRdWV1ZTo6ZW5xdWV1ZShjb25zdCBKU0M6OkFycmF5QnVmZmVyJiBi
aW5hcnlEYXRhLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQogewog
ICAgIGlmIChtX3F1ZXVlLmlzRW1wdHkoKSkgewotICAgICAgICBhdXRvKiBkYXRhID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJpbmFyeURhdGEuZGF0YSgpKTsKLSAgICAgICAgbV93cml0
ZVJhd0RhdGEoU3BhbiB7IGRhdGEgKyBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoIH0pOworICAgICAg
ICBtX3dyaXRlUmF3RGF0YShiaW5hcnlEYXRhLmJ5dGVzKCkuc3Vic3BhbihieXRlT2Zmc2V0LCBi
eXRlTGVuZ3RoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbV9xdWV1ZS5hcHBlbmQo
U2hhcmVkQnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJpbmFyeURh
dGEuZGF0YSgpKSArIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKTsKKyAgICBtX3F1ZXVlLmFwcGVu
ZChTaGFyZWRCdWZmZXI6OmNyZWF0ZShiaW5hcnlEYXRhLmJ5dGVzKCkuc3Vic3BhbihieXRlT2Zm
c2V0LCBieXRlTGVuZ3RoKSkpOwogfQogCiB2b2lkIE5ldHdvcmtTZW5kUXVldWU6OmVucXVldWUo
V2ViQ29yZTo6QmxvYiYgYmxvYikKQEAgLTkzLDcgKzkyLDkgQEAgdm9pZCBOZXR3b3JrU2VuZFF1
ZXVlOjpwcm9jZXNzTWVzc2FnZXMoKQogICAgICAgICBzd2l0Y2hPbihtX3F1ZXVlLmZpcnN0KCks
IFt0aGlzXShjb25zdCBDU3RyaW5nJiB1dGY4KSB7CiAgICAgICAgICAgICBtX3dyaXRlU3RyaW5n
KHV0ZjgpOwogICAgICAgICB9LCBbdGhpc10oUmVmPFNoYXJlZEJ1ZmZlcj4mIGRhdGEpIHsKLSAg
ICAgICAgICAgIGRhdGEtPmZvckVhY2hTZWdtZW50KG1fd3JpdGVSYXdEYXRhKTsKKyAgICAgICAg
ICAgIGRhdGEtPmZvckVhY2hTZWdtZW50KFt0aGlzXShhdXRvJiBzcGFuKSB7CisgICAgICAgICAg
ICAgICAgbV93cml0ZVJhd0RhdGEoYXNCeXRlcyhzcGFuKSk7CisgICAgICAgICAgICB9KTsKICAg
ICAgICAgfSwgW3RoaXMsICZzaG91bGRTdG9wUHJvY2Vzc2luZ10oVW5pcXVlUmVmPEJsb2JMb2Fk
ZXI+JiBsb2FkZXIpIHsKICAgICAgICAgICAgIGF1dG8gZXJyb3JDb2RlID0gbG9hZGVyLT5lcnJv
ckNvZGUoKTsKICAgICAgICAgICAgIGlmIChsb2FkZXItPmlzTG9hZGluZygpIHx8IChlcnJvckNv
ZGUgJiYgZXJyb3JDb2RlLnZhbHVlKCkgPT0gQWJvcnRFcnJvcikpIHsKQEAgLTEwMiw3ICsxMDMs
NyBAQCB2b2lkIE5ldHdvcmtTZW5kUXVldWU6OnByb2Nlc3NNZXNzYWdlcygpCiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIGlmIChjb25zdCBhdXRvJiByZXN1bHQgPSBsb2FkZXItPmFycmF5
QnVmZmVyUmVzdWx0KCkpIHsKLSAgICAgICAgICAgICAgICBtX3dyaXRlUmF3RGF0YShTcGFuIHsg
c3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KHJlc3VsdC0+ZGF0YSgpKSwgcmVzdWx0LT5ieXRl
TGVuZ3RoKCkgfSk7CisgICAgICAgICAgICAgICAgbV93cml0ZVJhd0RhdGEocmVzdWx0LT5ieXRl
cygpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBBU1NFUlQoZXJyb3JDb2RlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTmV0d29y
a1NlbmRRdWV1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTmV0d29y
a1NlbmRRdWV1ZS5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBp
L05ldHdvcmtTZW5kUXVldWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBjbGFz
cyBTaGFyZWRCdWZmZXI7CiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBOZXR3b3JrU2VuZFF1ZXVlIDog
cHVibGljIENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyIHsKIHB1YmxpYzoKICAgICB1c2luZyBX
cml0ZVN0cmluZyA9IEZ1bmN0aW9uPHZvaWQoY29uc3QgQ1N0cmluZyYgdXRmOCk+OwotICAgIHVz
aW5nIFdyaXRlUmF3RGF0YSA9IEZ1bmN0aW9uPHZvaWQoY29uc3QgU3Bhbjxjb25zdCB1aW50OF90
PiYpPjsKKyAgICB1c2luZyBXcml0ZVJhd0RhdGEgPSBGdW5jdGlvbjx2b2lkKGNvbnN0IFNwYW48
Y29uc3Qgc3RkOjpieXRlPiYpPjsKICAgICBlbnVtIGNsYXNzIENvbnRpbnVlIHsgTm8sIFllcyB9
OwogICAgIHVzaW5nIFByb2Nlc3NFcnJvciA9IEZ1bmN0aW9uPENvbnRpbnVlKEV4Y2VwdGlvbkNv
ZGUpPjsKICAgICBOZXR3b3JrU2VuZFF1ZXVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBXcml0
ZVN0cmluZyYmLCBXcml0ZVJhd0RhdGEmJiwgUHJvY2Vzc0Vycm9yJiYpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOTQsMjggKzM5NCwyMyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBET01QYXRj
aFN1cHBvcnQ6OmlubmVyCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotc3RhdGljIHZvaWQgYWRkU3Ry
aW5nVG9TSEExKFNIQTEmIHNoYTEsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAgIENTdHJp
bmcgY1N0cmluZyA9IHN0cmluZy51dGY4KCk7Ci0gICAgc2hhMS5hZGRCeXRlcyhjU3RyaW5nLmRh
dGFBc1VJbnQ4UHRyKCksIGNTdHJpbmcubGVuZ3RoKCkpOwotfQotCiBzdGQ6OnVuaXF1ZV9wdHI8
RE9NUGF0Y2hTdXBwb3J0OjpEaWdlc3Q+IERPTVBhdGNoU3VwcG9ydDo6Y3JlYXRlRGlnZXN0KE5v
ZGUmIG5vZGUsIFVudXNlZE5vZGVzTWFwKiB1bnVzZWROb2Rlc01hcCkKIHsKICAgICBhdXRvIGRp
Z2VzdCA9IG1ha2VVbmlxdWU8RGlnZXN0PigpOwogICAgIGRpZ2VzdC0+bm9kZSA9ICZub2RlOwor
CiAgICAgU0hBMSBzaGExOwogCiAgICAgYXV0byBub2RlVHlwZSA9IG5vZGUubm9kZVR5cGUoKTsK
LSAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZub2Rl
VHlwZSksIHNpemVvZihub2RlVHlwZSkpOwotICAgIGFkZFN0cmluZ1RvU0hBMShzaGExLCBub2Rl
Lm5vZGVOYW1lKCkpOwotICAgIGFkZFN0cmluZ1RvU0hBMShzaGExLCBub2RlLm5vZGVWYWx1ZSgp
KTsKKyAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmbm9kZVR5cGUsIDEgfSk7CisgICAgc2hhMS5h
ZGRCeXRlcyhub2RlLm5vZGVOYW1lKCkudXRmOCgpLmJ5dGVzKCkpOworICAgIHNoYTEuYWRkQnl0
ZXMobm9kZS5ub2RlVmFsdWUoKS51dGY4KCkuYnl0ZXMoKSk7CiAKICAgICBpZiAobm9kZS5ub2Rl
VHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSkgewogICAgICAgICBOb2RlKiBjaGlsZCA9IG5v
ZGUuZmlyc3RDaGlsZCgpOwogICAgICAgICB3aGlsZSAoY2hpbGQpIHsKICAgICAgICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxEaWdlc3Q+IGNoaWxkSW5mbyA9IGNyZWF0ZURpZ2VzdCgqY2hpbGQsIHVu
dXNlZE5vZGVzTWFwKTsKLSAgICAgICAgICAgIGFkZFN0cmluZ1RvU0hBMShzaGExLCBjaGlsZElu
Zm8tPnNoYTEpOworICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhjaGlsZEluZm8tPnNoYTEudXRm
OCgpLmJ5dGVzKCkpOwogICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsK
ICAgICAgICAgICAgIGRpZ2VzdC0+Y2hpbGRyZW4uYXBwZW5kKFdURk1vdmUoY2hpbGRJbmZvKSk7
CiAgICAgICAgIH0KQEAgLTQyNCwxOSArNDE5LDE5IEBAIHN0ZDo6dW5pcXVlX3B0cjxET01QYXRj
aFN1cHBvcnQ6OkRpZ2VzdD4KICAgICAgICAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlc1dpdGhv
dXRVcGRhdGUoKSkgewogICAgICAgICAgICAgU0hBMSBhdHRyc1NIQTE7CiAgICAgICAgICAgICBm
b3IgKGF1dG8mIGF0dHJpYnV0ZSA6IGVsZW1lbnQuYXR0cmlidXRlc0l0ZXJhdG9yKCkpIHsKLSAg
ICAgICAgICAgICAgICBhZGRTdHJpbmdUb1NIQTEoYXR0cnNTSEExLCBhdHRyaWJ1dGUubmFtZSgp
LnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGFkZFN0cmluZ1RvU0hBMShhdHRyc1NIQTEs
IGF0dHJpYnV0ZS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBhdHRyc1NIQTEuYWRkQnl0ZXMo
YXR0cmlidXRlLm5hbWUoKS50b1N0cmluZygpLnV0ZjgoKS5ieXRlcygpKTsKKyAgICAgICAgICAg
ICAgICBhdHRyc1NIQTEuYWRkQnl0ZXMoYXR0cmlidXRlLnZhbHVlKCkuc3RyaW5nKCkudXRmOCgp
LmJ5dGVzKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgU0hBMTo6RGlnZXN0IGF0dHJz
SGFzaDsKICAgICAgICAgICAgIGF0dHJzU0hBMS5jb21wdXRlSGFzaChhdHRyc0hhc2gpOwotICAg
ICAgICAgICAgZGlnZXN0LT5hdHRyc1NIQTEgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhhdHRyc0hh
c2guZGF0YSgpLCAxMCk7Ci0gICAgICAgICAgICBhZGRTdHJpbmdUb1NIQTEoc2hhMSwgZGlnZXN0
LT5hdHRyc1NIQTEpOworICAgICAgICAgICAgZGlnZXN0LT5hdHRyc1NIQTEgPSBiYXNlNjRFbmNv
ZGVUb1N0cmluZyhhdHRyc0hhc2gpOworICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhkaWdlc3Qt
PmF0dHJzU0hBMS51dGY4KCkuYnl0ZXMoKSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBTSEEx
OjpEaWdlc3QgaGFzaDsKICAgICBzaGExLmNvbXB1dGVIYXNoKGhhc2gpOwotICAgIGRpZ2VzdC0+
c2hhMSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGhhc2guZGF0YSgpLCAxMCk7CisgICAgZGlnZXN0
LT5zaGExID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaGFzaCk7CiAgICAgaWYgKHVudXNlZE5vZGVz
TWFwKQogICAgICAgICB1bnVzZWROb2Rlc01hcC0+YWRkKGRpZ2VzdC0+c2hhMSwgZGlnZXN0Lmdl
dCgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
SG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kSG9zdC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDIs
NyArNjAyLDcgQEAgYm9vbCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZpYwogICAg
IGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgV1RGOjpQZXJzaXN0ZW5j
ZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEtPmRhdGEoKSwgZGF0YS0+c2l6ZSgpKTsKKyAgICBXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyAqZGF0YSB9OwogICAgIHN0ZDo6b3B0aW9u
YWw8Q2VydGlmaWNhdGVJbmZvPiBjZXJ0aWZpY2F0ZUluZm87CiAgICAgZGVjb2RlciA+PiBjZXJ0
aWZpY2F0ZUluZm87CiAgICAgaWYgKCFjZXJ0aWZpY2F0ZUluZm8pCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAJKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB1bnNpZ25lZCBOZXR3b3Jr
UmVzb3VyY2VzRGF0YTo6UmVzb3VyY2VECiAgICAgICAgIG1fY29udGVudCA9IG1fZGVjb2Rlci0+
ZGVjb2RlQW5kRmx1c2gobV9kYXRhQnVmZmVyLT5kYXRhKCksIGRhdGFMZW5ndGgpOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIG1fYmFzZTY0RW5jb2RlZCA9IHRydWU7Ci0gICAgICAgIG1fY29udGVu
dCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKG1fZGF0YUJ1ZmZlci0+ZGF0YSgpLCBkYXRhTGVuZ3Ro
KTsKKyAgICAgICAgbV9jb250ZW50ID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcobV9kYXRhQnVmZmVy
LT5ieXRlcygpKTsKICAgICB9CiAKICAgICBtX2RhdGFCdWZmZXIgPSBudWxscHRyOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01B
Z2VudC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjk4LDcgKzE2
OTgsNyBAQCBzdGF0aWMgU3RyaW5nIGNvbXB1dGVDb250ZW50U2VjdXJpdHlQb2xpCiAgICAgYXV0
byBjcnlwdG9EaWdlc3QgPSBQQUw6OkNyeXB0b0RpZ2VzdDo6Y3JlYXRlKFBBTDo6Q3J5cHRvRGln
ZXN0OjpBbGdvcml0aG06OlNIQV8yNTYpOwogICAgIGNyeXB0b0RpZ2VzdC0+YWRkQnl0ZXMoY29u
dGVudC5kYXRhKCksIGNvbnRlbnQuc2l6ZSgpKTsKICAgICBhdXRvIGRpZ2VzdCA9IGNyeXB0b0Rp
Z2VzdC0+Y29tcHV0ZUhhc2goKTsKLSAgICByZXR1cm4gbWFrZVN0cmluZygic2hhMjU2LSIsIGJh
c2U2NEVuY29kZWQoZGlnZXN0LmRhdGEoKSwgZGlnZXN0LnNpemUoKSkpOworICAgIHJldHVybiBt
YWtlU3RyaW5nKCJzaGEyNTYtIiwgYmFzZTY0RW5jb2RlZChkaWdlc3QpKTsKIH0KIAogUmVmPFBy
b3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvck5vZGUo
Tm9kZSogbm9kZSwgaW50IGRlcHRoKQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3
b3JrQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsNyArMTc1LDcgQEAgUmVmPFByb3Rv
Y29sOjpOZXR3b3JrOjpXZWJTb2NrZXRGcmFtZT4gYgogICAgIHJldHVybiBQcm90b2NvbDo6TmV0
d29yazo6V2ViU29ja2V0RnJhbWU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRPcGNvZGUoZnJhbWUu
b3BDb2RlKQogICAgICAgICAuc2V0TWFzayhmcmFtZS5tYXNrZWQpCi0gICAgICAgIC5zZXRQYXls
b2FkRGF0YShmcmFtZS5vcENvZGUgPT0gMSA/IFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFs
bGJhY2soZnJhbWUucGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkgOiBiYXNlNjRFbmNvZGVU
b1N0cmluZyhmcmFtZS5wYXlsb2FkLCBmcmFtZS5wYXlsb2FkTGVuZ3RoKSkKKyAgICAgICAgLnNl
dFBheWxvYWREYXRhKGZyYW1lLm9wQ29kZSA9PSAxID8gU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRp
bjFGYWxsYmFjayhmcmFtZS5wYXlsb2FkLCBmcmFtZS5wYXlsb2FkTGVuZ3RoKSA6IGJhc2U2NEVu
Y29kZVRvU3RyaW5nKFNwYW4geyBmcmFtZS5wYXlsb2FkLCBmcmFtZS5wYXlsb2FkTGVuZ3RoIH0p
KQogICAgICAgICAuc2V0UGF5bG9hZExlbmd0aChmcmFtZS5wYXlsb2FkTGVuZ3RoKQogICAgICAg
ICAucmVsZWFzZSgpOwogfQpAQCAtNTg5LDcgKzU4OSw3IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29y
a0FnZW50OjpkaWRSZWNlaXZlRGEKICAgICAgICAgLy8gT2Z0ZW4gdGhlIGRhdGEgaXMgdGV4dCBh
bmQgd2Ugd291bGQgaGF2ZSBhIGRlY29kZXIsIGJ1dCBmb3Igbm9uLXRleHQgd2Ugd29uJ3QgaGF2
ZSBhIGRlY29kZXIuCiAgICAgICAgIC8vIFN5bmMgWEhScyBtYXkgbm90IGhhdmUgYSBjYWNoZWQg
cmVzb3VyY2UsIHdoaWxlIG5vbi1zeW5jIFhIUnMgdXN1YWxseSB0cmFuc2ZlciBkYXRhIG92ZXIg
b24gY29tcGxldGlvbi4KICAgICAgICAgaWYgKG1fbG9hZGluZ1hIUlN5bmNocm9ub3VzbHkgJiYg
cmVzb3VyY2VEYXRhICYmICFyZXNvdXJjZURhdGEtPmhhc0J1ZmZlcmVkRGF0YSgpICYmICFyZXNv
dXJjZURhdGEtPmNhY2hlZFJlc291cmNlKCkpCi0gICAgICAgICAgICBtX3Jlc291cmNlc0RhdGEt
PnNldFJlc291cmNlQ29udGVudChyZXF1ZXN0SWQsIGJhc2U2NEVuY29kZVRvU3RyaW5nKGRhdGEs
IGRhdGFMZW5ndGgpLCB0cnVlKTsKKyAgICAgICAgICAgIG1fcmVzb3VyY2VzRGF0YS0+c2V0UmVz
b3VyY2VDb250ZW50KHJlcXVlc3RJZCwgYmFzZTY0RW5jb2RlVG9TdHJpbmcoU3BhbiB7IGRhdGEs
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkYXRhTGVuZ3RoKSB9KSwgdHJ1ZSk7CiAgICAgfQogCiAg
ICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRhdGFSZWNlaXZlZChyZXF1ZXN0SWQsIHRpbWVzdGFt
cCgpLCBkYXRhTGVuZ3RoLCBlbmNvZGVkRGF0YUxlbmd0aCk7CkBAIC0xMDA1LDcgKzEwMDUsNyBA
QCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IEluc3BlY3RvCiAKICAgICBXVEY6OlBl
cnNpc3RlbmNlOjpFbmNvZGVyIGVuY29kZXI7CiAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8
V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPjo6ZW5jb2RlKGVuY29kZXIsIGNlcnRpZmljYXRlLnZh
bHVlKCkpOwotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhlbmNvZGVyLmJ1ZmZlcigp
LCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5n
KGVuY29kZXIuYnVmZmVyKCkpOwogfQogCiBXZWJTb2NrZXQqIEluc3BlY3Rvck5ldHdvcmtBZ2Vu
dDo6d2ViU29ja2V0Rm9yUmVxdWVzdElkKGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0
SWQmIHJlcXVlc3RJZCkKQEAgLTE0MTAsNyArMTQxMCw3IEBAIGJvb2wgSW5zcGVjdG9yTmV0d29y
a0FnZW50OjpjYWNoZWRSZXNvdXIKICAgICAgICAgfQogCiAgICAgICAgICpiYXNlNjRFbmNvZGVk
ID0gdHJ1ZTsKLSAgICAgICAgKnJlc3VsdCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGJ1ZmZlci0+
ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7CisgICAgICAgICpyZXN1bHQgPSBiYXNlNjRFbmNvZGVU
b1N0cmluZyhidWZmZXItPmJ5dGVzKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2Vu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JQYWdlQWdlbnQuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExMyw3ICsxMTMsNyBAQCBib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6c2hhcmVkQnVmZmVyQ29u
CiBib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGF0YUNvbnRlbnQoY29uc3QgdWludDhfdCogZGF0
YSwgdW5zaWduZWQgc2l6ZSwgY29uc3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmdOYW1lLCBib29sIHdp
dGhCYXNlNjRFbmNvZGUsIFN0cmluZyogcmVzdWx0KQogewogICAgIGlmICh3aXRoQmFzZTY0RW5j
b2RlKSB7Ci0gICAgICAgICpyZXN1bHQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhkYXRhLCBzaXpl
KTsKKyAgICAgICAgKnJlc3VsdCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKFNwYW4geyBkYXRhLCBz
aXplIH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTExMDIsNyArMTEwMiw3
IEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG8KICAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgY3JlYXRlIHdlYiBhcmNoaXZlIGZvciBtYWlu
IGZyYW1lIl9zKTsKIAogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGJ1ZmZlciA9IGFyY2hpdmUt
PnJhd0RhdGFSZXByZXNlbnRhdGlvbigpOwotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmlu
ZyhDRkRhdGFHZXRCeXRlUHRyKGJ1ZmZlci5nZXQoKSksIENGRGF0YUdldExlbmd0aChidWZmZXIu
Z2V0KCkpKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoU3BhbiB7IENGRGF0YUdl
dEJ5dGVQdHIoYnVmZmVyLmdldCgpKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KENGRGF0YUdldExl
bmd0aChidWZmZXIuZ2V0KCkpKSB9KTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1M
QXJjaGl2ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MSwxNiArMTgxLDE0IEBAIFJlZjxTaGFy
ZWRCdWZmZXI+IE1IVE1MQXJjaGl2ZTo6Z2VuZXJhdGUKICAgICAgICAgbWh0bWxEYXRhLT5hcHBl
bmQoYXNjaWlTdHJpbmcuZGF0YSgpLCBhc2NpaVN0cmluZy5sZW5ndGgoKSk7CiAKICAgICAgICAg
Ly8gRklYTUU6IGlkZWFsbHkgd2Ugd291bGQgZW5jb2RlIHRoZSBjb250ZW50IGFzIGEgc3RyZWFt
IHdpdGhvdXQgaGF2aW5nIHRvIGZldGNoIGl0IGFsbC4KLSAgICAgICAgYXV0byogZGF0YSA9IHJl
c291cmNlLmRhdGEtPmRhdGEoKTsKLSAgICAgICAgc2l6ZV90IGRhdGFMZW5ndGggPSByZXNvdXJj
ZS5kYXRhLT5zaXplKCk7CiAgICAgICAgIGlmICghc3RyY21wKGNvbnRlbnRFbmNvZGluZywgcXVv
dGVkUHJpbnRhYmxlKSkgewotICAgICAgICAgICAgYXV0byBlbmNvZGVkRGF0YSA9IHF1b3RlZFBy
aW50YWJsZUVuY29kZShkYXRhLCBkYXRhTGVuZ3RoKTsKKyAgICAgICAgICAgIGF1dG8gZW5jb2Rl
ZERhdGEgPSBxdW90ZWRQcmludGFibGVFbmNvZGUocmVzb3VyY2UuZGF0YS0+Ynl0ZXMoKSk7CiAg
ICAgICAgICAgICBtaHRtbERhdGEtPmFwcGVuZChlbmNvZGVkRGF0YS5kYXRhKCksIGVuY29kZWRE
YXRhLnNpemUoKSk7CiAgICAgICAgICAgICBtaHRtbERhdGEtPmFwcGVuZCgiXHJcbiIsIDIpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKCFzdHJjbXAoY29udGVudEVuY29k
aW5nLCBiYXNlNjQpKTsKICAgICAgICAgICAgIC8vIFdlIGFyZSBub3Qgc3BlY2lmeWluZyBpbnNl
cnRMRnMgPSB0cnVlIGJlbG93IGFzIGl0IHdvdWxkIGN1dCB0aGUgbGluZXMgd2l0aCBMRnMgYW5k
IE1IVE1MIHJlcXVpcmVzIENSTEZzLgotICAgICAgICAgICAgYXV0byBlbmNvZGVkRGF0YSA9IGJh
c2U2NEVuY29kZVRvVmVjdG9yKGRhdGEsIGRhdGFMZW5ndGgpOworICAgICAgICAgICAgYXV0byBl
bmNvZGVkRGF0YSA9IGJhc2U2NEVuY29kZVRvVmVjdG9yKHJlc291cmNlLmRhdGEtPmJ5dGVzKCkp
OwogICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG1heGltdW1MaW5lTGVuZ3RoID0gNzY7CiAgICAg
ICAgICAgICBzaXplX3QgaW5kZXggPSAwOwogICAgICAgICAgICAgc2l6ZV90IGVuY29kZWREYXRh
TGVuZ3RoID0gZW5jb2RlZERhdGEuc2l6ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVy
L2FyY2hpdmUvbWh0bWwvTUhUTUxQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MUGFyc2VyLmNwcAkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxQYXJzZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTUsNyArMTk1LDcgQEAgUmVmUHRyPEFyY2hpdmVSZXNvdXJj
ZT4gTUhUTUxQYXJzZXI6OnBhcgogICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAgIHN3aXRj
aCAobWltZUhlYWRlci5jb250ZW50VHJhbnNmZXJFbmNvZGluZygpKSB7CiAgICAgY2FzZSBNSU1F
SGVhZGVyOjpCYXNlNjQ6IHsKLSAgICAgICAgYXV0byBkZWNvZGVkRGF0YSA9IGJhc2U2NERlY29k
ZShjb250ZW50LT5kYXRhKCksIGNvbnRlbnQtPnNpemUoKSk7CisgICAgICAgIGF1dG8gZGVjb2Rl
ZERhdGEgPSBiYXNlNjREZWNvZGUoY29udGVudC0+Ynl0ZXMoKSk7CiAgICAgICAgIGlmICghZGVj
b2RlZERhdGEpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiSW52YWxpZCBiYXNlNjQgY29udGVu
dCBmb3IgTUhUTUwgcGFydC4iKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMjA0
LDcgKzIwNCw3IEBAIFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IE1IVE1MUGFyc2VyOjpwYXIKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgTUlNRUhlYWRlcjo6UXVvdGVkUHJpbnRhYmxl
OgotICAgICAgICBkYXRhID0gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnRlbnQtPmRhdGEoKSwg
Y29udGVudC0+c2l6ZSgpKTsKKyAgICAgICAgZGF0YSA9IHF1b3RlZFByaW50YWJsZURlY29kZShj
b250ZW50LT5ieXRlcygpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNSU1FSGVhZGVyOjpT
ZXZlbkJpdDoKICAgICBjYXNlIE1JTUVIZWFkZXI6OkJpbmFyeToKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9pY29uL0ljb25Mb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9pY29uL0ljb25Mb2FkZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTE1LDcgKzExNSw3IEBAIHZvaWQgSWNvbkxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmUK
ICAgICAgICAgZGF0YSA9IG51bGxwdHI7CiAKICAgICBjb25zdGV4cHIgdWludDhfdCBwZGZNYWdp
Y051bWJlcltdID0geyAnJScsICdQJywgJ0QnLCAnRicgfTsKLSAgICBpZiAoZGF0YSAmJiBkYXRh
LT5zdGFydHNXaXRoKFNwYW4geyBwZGZNYWdpY051bWJlciwgc3RkOjpzaXplKHBkZk1hZ2ljTnVt
YmVyKSB9KSkgeworICAgIGlmIChkYXRhICYmIGRhdGEtPnN0YXJ0c1dpdGgocGRmTWFnaWNOdW1i
ZXIpKSB7CiAgICAgICAgIExPRyhJY29uRGF0YWJhc2UsICJJY29uTG9hZGVyOjpmaW5pc2hMb2Fk
aW5nKCkgLSBJZ25vcmluZyBpY29uIGF0ICVzIGJlY2F1c2UgaXQgYXBwZWFycyB0byBiZSBhIFBE
RiIsIG1fcmVzb3VyY2UtPnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKICAgICAgICAg
ZGF0YSA9IG51bGxwdHI7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9CYXNlNjRV
dGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQmFzZTY0VXRp
bGl0aWVzLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9CYXNl
NjRVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIEV4Y2VwdGlv
bk9yPFN0cmluZz4gQmFzZTY0VXRpbGl0aWVzOjpidG8KICAgICBpZiAoIXN0cmluZ1RvRW5jb2Rl
LmlzQWxsTGF0aW4xKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQ2hhcmFj
dGVyRXJyb3IgfTsKIAotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhzdHJpbmdUb0Vu
Y29kZS5sYXRpbjEoKSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKHN0cmluZ1Rv
RW5jb2RlLmxhdGluMSgpLmJ5dGVzKCkpOwogfQogCiBFeGNlcHRpb25PcjxTdHJpbmc+IEJhc2U2
NFV0aWxpdGllczo6YXRvYihjb25zdCBTdHJpbmcmIGVuY29kZWRTdHJpbmcpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEuY3BwCShyZXZp
c2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9t
RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgUmVmPFNoYXJlZEJ1ZmZl
cj4gUGFzdGVib2FyZEN1c3RvbURhdGE6OgogICAgIGVuY29kZXIgPDwgbV9vcmlnaW47CiAgICAg
ZW5jb2RlciA8PCBzYW1lT3JpZ2luQ3VzdG9tU3RyaW5nRGF0YSgpOwogICAgIGVuY29kZXIgPDwg
b3JkZXJlZFR5cGVzKCk7Ci0gICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIu
YnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICByZXR1cm4gU2hhcmVkQnVmZmVy
OjpjcmVhdGUoZW5jb2Rlci5idWZmZXIoKSk7CiB9CiAKIFBhc3RlYm9hcmRDdXN0b21EYXRhIFBh
c3RlYm9hcmRDdXN0b21EYXRhOjpmcm9tUGVyc2lzdGVuY2VEZWNvZGVyKFdURjo6UGVyc2lzdGVu
Y2U6OkRlY29kZXImJiBkZWNvZGVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hh
cmVkQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFy
ZWRCdWZmZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TaGFyZWRCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxOCArMzYsMTMgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1TaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihjb25zdCB1
aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKK1NoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKFNw
YW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhKQogewotICAgIGFwcGVuZChkYXRhLCBzaXplKTsKLX0K
LQotU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNp
emUpCi17Ci0gICAgYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEp
LCBzaXplKTsKKyAgICBhcHBlbmQoZGF0YSk7CiB9CiAKIFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVm
ZmVyKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYgZmlsZURhdGEpCi0gICAgOiBtX3NpemUo
ZmlsZURhdGEuc2l6ZSgpKQorICAgIDogbV9zaXplKGZpbGVEYXRhLmRhdGEoKS5zaXplKCkpCiB7
CiAgICAgbV9zZWdtZW50cy5hcHBlbmQoezAsIERhdGFTZWdtZW50OjpjcmVhdGUoV1RGTW92ZShm
aWxlRGF0YSkpfSk7CiB9CkBAIC0xODgsMTMgKzE4MywxMyBAQCB2b2lkIFNoYXJlZEJ1ZmZlcjo6
YXBwZW5kKGNvbnN0IFNoYXJlZEJ1CiAgICAgQVNTRVJUKGludGVybmFsbHlDb25zaXN0ZW50KCkp
OwogfQogCi12b2lkIFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNp
emVfdCBsZW5ndGgpCit2b2lkIFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKFNwYW48Y29uc3Qgc3RkOjpi
eXRlPiBkYXRhKQogewogICAgIEFTU0VSVCghbV9oYXNCZWVuQ29tYmluZWRJbnRvT25lU2VnbWVu
dCk7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvcjsKLSAgICB2ZWN0b3IuYXBwZW5kKGRhdGEs
IGxlbmd0aCk7Ci0gICAgbV9zZWdtZW50cy5hcHBlbmQoe21fc2l6ZSwgRGF0YVNlZ21lbnQ6OmNy
ZWF0ZShXVEZNb3ZlKHZlY3RvcikpfSk7Ci0gICAgbV9zaXplICs9IGxlbmd0aDsKKyAgICB2ZWN0
b3IuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuZGF0YSgpKSwg
ZGF0YS5zaXplKCkpOworICAgIG1fc2VnbWVudHMuYXBwZW5kKHsgbV9zaXplLCBEYXRhU2VnbWVu
dDo6Y3JlYXRlKFdURk1vdmUodmVjdG9yKSkgfSk7CisgICAgbV9zaXplICs9IGRhdGEuc2l6ZSgp
OwogICAgIEFTU0VSVChpbnRlcm5hbGx5Q29uc2lzdGVudCgpKTsKIH0KIApAQCAtMjMyLDcgKzIy
Nyw3IEBAIHZvaWQgU2hhcmVkQnVmZmVyOjpmb3JFYWNoU2VnbWVudChjb25zdCAKICAgICAgICAg
YXBwbHkoU3BhbiB7IHNlZ21lbnQuc2VnbWVudC0+ZGF0YSgpLCBzZWdtZW50LnNlZ21lbnQtPnNp
emUoKSB9KTsKIH0KIAotYm9vbCBTaGFyZWRCdWZmZXI6OnN0YXJ0c1dpdGgoY29uc3QgU3Bhbjxj
b25zdCB1aW50OF90PiYgcHJlZml4KSBjb25zdAorYm9vbCBTaGFyZWRCdWZmZXI6OnN0YXJ0c1dp
dGgoY29uc3QgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+JiBwcmVmaXgpIGNvbnN0CiB7CiAgICAgaWYg
KHByZWZpeC5lbXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI0MCw3ICsyMzUsNyBA
QCBib29sIFNoYXJlZEJ1ZmZlcjo6c3RhcnRzV2l0aChjb25zdCBTcGFuCiAgICAgaWYgKHNpemUo
KSA8IHByZWZpeC5zaXplKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGNvbnN0IHVp
bnQ4X3QqIHByZWZpeFB0ciA9IHByZWZpeC5kYXRhKCk7CisgICAgYXV0byogcHJlZml4UHRyID0g
cHJlZml4LmRhdGEoKTsKICAgICBzaXplX3QgcmVtYWluaW5nID0gcHJlZml4LnNpemUoKTsKICAg
ICBmb3IgKGF1dG8mIHNlZ21lbnQgOiBtX3NlZ21lbnRzKSB7CiAgICAgICAgIHNpemVfdCBhbW91
bnRUb0NvbXBhcmVUaGlzVGltZSA9IHN0ZDo6bWluKHJlbWFpbmluZywgc2VnbWVudC5zZWdtZW50
LT5zaXplKCkpOwpAQCAtMzAxLDExICsyOTYsNDAgQEAgY29uc3QgdWludDhfdCogU2hhcmVkQnVm
ZmVyOjpEYXRhU2VnbWVudAogI2lmIFVTRShHU1RSRUFNRVIpCiAgICAgICAgIFtdKGNvbnN0IFJl
ZlB0cjxHc3RNYXBwZWRPd25lZEJ1ZmZlcj4mIGRhdGEpIHsgcmV0dXJuIGRhdGEtPmRhdGEoKTsg
fSwKICNlbmRpZgotICAgICAgICBbXShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYg
ZGF0YSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuZGF0YSgpKTsg
fQorICAgICAgICBbXShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeyBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5kYXRhKCkuZGF0YSgp
KTsgfQogICAgICk7CiAgICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwgbV9pbW11dGFibGVE
YXRhKTsKIH0KIAorU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21l
bnQ6OmJ5dGVzKCkgY29uc3QKK3sKKyAgICBhdXRvIHZpc2l0b3IgPSBXVEY6Om1ha2VWaXNpdG9y
KAorICAgICAgICBbXShjb25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEpIHsKKyAgICAgICAgICAg
IHJldHVybiBhc0J5dGVzKFNwYW4geyBkYXRhIH0pOworICAgICAgICB9LAorI2lmIFVTRShDRikK
KyAgICAgICAgW10oY29uc3QgUmV0YWluUHRyPENGRGF0YVJlZj4mIGRhdGEpIHsKKyAgICAgICAg
ICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBDRkRhdGFHZXRCeXRlUHRyKGRhdGEuZ2V0KCkpLCBz
dGF0aWNfY2FzdDxzaXplX3Q+KENGRGF0YUdldExlbmd0aChkYXRhLmdldCgpKSkgfSk7CisgICAg
ICAgIH0sCisjZW5kaWYKKyNpZiBVU0UoR0xJQikKKyAgICAgICAgW10oY29uc3QgR1JlZlB0cjxH
Qnl0ZXM+JiBkYXRhKSB7CisgICAgICAgICAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgc3RhdGlj
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGdfYnl0ZXNfZ2V0X2RhdGEoZGF0YS5nZXQoKSwgbnVsbHB0
cikpLCBnX2J5dGVzX2dldF9zaXplKGRhdGEuZ2V0KCkpIH0pOworICAgICAgICB9LAorI2VuZGlm
CisjaWYgVVNFKEdTVFJFQU1FUikKKyAgICAgICAgW10oY29uc3QgUmVmUHRyPEdzdE1hcHBlZE93
bmVkQnVmZmVyPiYgZGF0YSkgeworICAgICAgICAgICAgcmV0dXJuIGFzQnl0ZXMoU3BhbiB7IGRh
dGEtPmRhdGEoKSwgZGF0YS0+c2l6ZSgpIH0pOworICAgICAgICB9LAorI2VuZGlmCisgICAgICAg
IFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBkYXRhKSB7CisgICAgICAgICAg
ICByZXR1cm4gZGF0YS5kYXRhKCk7CisgICAgICAgIH0KKyAgICApOworICAgIHJldHVybiBXVEY6
OnZpc2l0KHZpc2l0b3IsIG1faW1tdXRhYmxlRGF0YSk7CisKK30KKwogYm9vbCBTaGFyZWRCdWZm
ZXI6OkRhdGFTZWdtZW50Ojpjb250YWluc01hcHBlZEZpbGVEYXRhKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YT4o
bV9pbW11dGFibGVEYXRhKTsKQEAgLTMxOSw3ICszNDMsNyBAQCB2b2lkIFNoYXJlZEJ1ZmZlcjo6
aGludE1lbW9yeU5vdE5lZWRlZFNvCiAKIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgU2hhcmVk
QnVmZmVyOjpkZWNvZGVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4geyByZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQ4X3QqPihkYXRhKCkpLCBzaXplKCkgfTsKKyAgICByZXR1cm4geyBieXRlcygp
IH07CiB9CiAKIGJvb2wgU2hhcmVkQnVmZmVyOjpvcGVyYXRvcj09KGNvbnN0IFNoYXJlZEJ1ZmZl
ciYgb3RoZXIpIGNvbnN0CkBAIC0zODQsNyArNDA4LDcgQEAgc2l6ZV90IFNoYXJlZEJ1ZmZlcjo6
RGF0YVNlZ21lbnQ6OnNpemUoKQogI2lmIFVTRShHU1RSRUFNRVIpCiAgICAgICAgIFtdKGNvbnN0
IFJlZlB0cjxHc3RNYXBwZWRPd25lZEJ1ZmZlcj4mIGRhdGEpIHsgcmV0dXJuIGRhdGEtPnNpemUo
KTsgfSwKICNlbmRpZgotICAgICAgICBbXShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0
YSYgZGF0YSkgeyByZXR1cm4gZGF0YS5zaXplKCk7IH0KKyAgICAgICAgW10oY29uc3QgRmlsZVN5
c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsgcmV0dXJuIGRhdGEuZGF0YSgpLnNpemUoKTsg
fQogICAgICk7CiAgICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwgbV9pbW11dGFibGVEYXRh
KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNjcsOCArNjcsMTIgQEAgY2xhc3MgU2hhcmVkQnVmZmVyRGF0YVZpZXc7
CiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBTaGFyZWRCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxT
aGFyZWRCdWZmZXI+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3Jl
YXRlKCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRCdWZmZXIpOyB9Ci0gICAgc3RhdGlj
IFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6
ZSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRCdWZmZXIoZGF0YSwgc2l6ZSkpOyB9Ci0g
ICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShjb25zdCBjaGFyKiBkYXRhLCBzaXpl
X3Qgc2l6ZSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRCdWZmZXIoZGF0YSwgc2l6ZSkp
OyB9CisgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShTcGFuPGNvbnN0IHN0ZDo6
Ynl0ZT4gZGF0YSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRCdWZmZXIoZGF0YSkpOyB9
CisgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShTcGFuPGNvbnN0IHVpbnQ4X3Q+
IGRhdGEpIHsgcmV0dXJuIGNyZWF0ZShhc0J5dGVzKGRhdGEpKTsgfQorICAgIHN0YXRpYyBSZWY8
U2hhcmVkQnVmZmVyPiBjcmVhdGUoU3Bhbjxjb25zdCBjaGFyPiBkYXRhKSB7IHJldHVybiBjcmVh
dGUoYXNCeXRlcyhkYXRhKSk7IH0KKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRl
KGNvbnN0IHN0ZDo6Ynl0ZSogZGF0YSwgc2l6ZV90IHNpemUpIHsgcmV0dXJuIGNyZWF0ZShTcGFu
IHsgZGF0YSwgc2l6ZSB9KTsgfQorICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUo
Y29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsgcmV0dXJuIGNyZWF0ZShTcGFuIHsg
ZGF0YSwgc2l6ZSB9KTsgfQorICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoY29u
c3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpIHsgcmV0dXJuIGNyZWF0ZShTcGFuIHsgZGF0YSwg
c2l6ZSB9KTsgfQogICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoRmlsZVN5c3Rl
bTo6TWFwcGVkRmlsZURhdGEmJiBtYXBwZWRGaWxlRGF0YSkgeyByZXR1cm4gYWRvcHRSZWYoKm5l
dyBTaGFyZWRCdWZmZXIoV1RGTW92ZShtYXBwZWRGaWxlRGF0YSkpKTsgfQogCiAgICAgZW51bSBj
bGFzcyBNYXlVc2VGaWxlTWFwcGluZyA6IGJvb2wgeyBObywgWWVzIH07CkBAIC0xMDEsNiArMTA1
LDggQEAgcHVibGljOgogICAgIC8vIEZJWE1FOiBBdWRpdCB0aGUgY2FsbCBzaXRlcyBvZiB0aGlz
IGZ1bmN0aW9uIGFuZCByZXBsYWNlIHRoZW0gd2l0aCBpdGVyYXRpb24gaWYgcG9zc2libGUuCiAg
ICAgY29uc3QgdWludDhfdCogZGF0YSgpIGNvbnN0OwogICAgIGNvbnN0IGNoYXIqIGRhdGFBc0No
YXJQdHIoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihkYXRh
KCkpOyB9CisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4g
YXNCeXRlcyhTcGFuIHsgZGF0YSgpLCBzaXplKCkgfSk7IH0KKwogICAgIFZlY3Rvcjx1aW50OF90
PiBjb3B5RGF0YSgpIHsgcmV0dXJuIHsgZGF0YSgpLCBzaXplKCkgfTsgfQogCiAgICAgLy8gQ29t
YmluZXMgYWxsIHRoZSBzZWdtZW50cyBpbnRvIGEgVmVjdG9yIGFuZCByZXR1cm5zIHRoYXQgdmVj
dG9yIGFmdGVyIGNsZWFyaW5nIHRoZSBTaGFyZWRCdWZmZXIuCkBAIC0xMTUsOCArMTIxLDEyIEBA
IHB1YmxpYzoKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhc2l6ZSgpOyB9CiAK
ICAgICB2b2lkIGFwcGVuZChjb25zdCBTaGFyZWRCdWZmZXImKTsKLSAgICB2b2lkIGFwcGVuZChj
b25zdCB1aW50OF90Kiwgc2l6ZV90KTsKLSAgICB2b2lkIGFwcGVuZChjb25zdCBjaGFyKiBkYXRh
LCBzaXplX3QgbGVuZ3RoKSB7IGFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihkYXRhKSwgbGVuZ3RoKTsgfQorICAgIHZvaWQgYXBwZW5kKFNwYW48Y29uc3Qgc3RkOjpieXRl
Pik7CisgICAgdm9pZCBhcHBlbmQoU3Bhbjxjb25zdCB1aW50OF90PiBkYXRhKSB7IGFwcGVuZChh
c0J5dGVzKGRhdGEpKTsgfQorICAgIHZvaWQgYXBwZW5kKFNwYW48Y29uc3QgY2hhcj4gZGF0YSkg
eyBhcHBlbmQoYXNCeXRlcyhkYXRhKSk7IH0KKyAgICB2b2lkIGFwcGVuZChjb25zdCBzdGQ6OmJ5
dGUqIGRhdGEsIHNpemVfdCBsZW5ndGgpIHsgYXBwZW5kKFNwYW4geyBkYXRhLCBsZW5ndGggfSk7
IH0KKyAgICB2b2lkIGFwcGVuZChjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoKSB7
IGFwcGVuZChTcGFuIHsgZGF0YSwgbGVuZ3RoIH0pOyB9CisgICAgdm9pZCBhcHBlbmQoY29uc3Qg
Y2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCkgeyBhcHBlbmQoU3BhbiB7IGRhdGEsIGxlbmd0aCB9
KTsgfQogICAgIHZvaWQgYXBwZW5kKFZlY3Rvcjx1aW50OF90PiYmKTsKIAogICAgIHZvaWQgY2xl
YXIoKTsKQEAgLTEzMSw2ICsxNDEsOCBAQCBwdWJsaWM6CiAgICAgICAgIFdFQkNPUkVfRVhQT1JU
IGNvbnN0IHVpbnQ4X3QqIGRhdGEoKSBjb25zdDsKICAgICAgICAgV0VCQ09SRV9FWFBPUlQgc2l6
ZV90IHNpemUoKSBjb25zdDsKIAorICAgICAgICBXRUJDT1JFX0VYUE9SVCBTcGFuPGNvbnN0IHN0
ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25zdDsKKwogICAgICAgICBzdGF0aWMgUmVmPERhdGFTZWdtZW50
PiBjcmVhdGUoVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSkKICAgICAgICAgewogICAgICAgICAgICAg
ZGF0YS5zaHJpbmtUb0ZpdCgpOwpAQCAtMTg3LDcgKzE5OSw5IEBAIHB1YmxpYzoKICAgICB9Owog
CiAgICAgdm9pZCBmb3JFYWNoU2VnbWVudChjb25zdCBGdW5jdGlvbjx2b2lkKGNvbnN0IFNwYW48
Y29uc3QgdWludDhfdD4mKT4mKSBjb25zdDsKLSAgICBib29sIHN0YXJ0c1dpdGgoY29uc3QgU3Bh
bjxjb25zdCB1aW50OF90PiYgcHJlZml4KSBjb25zdDsKKworICAgIGJvb2wgc3RhcnRzV2l0aChj
b25zdCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4mIHByZWZpeCkgY29uc3Q7CisgICAgYm9vbCBzdGFy
dHNXaXRoKGNvbnN0IFNwYW48Y29uc3QgdWludDhfdD4mIHByZWZpeCkgY29uc3QgeyByZXR1cm4g
c3RhcnRzV2l0aChhc0J5dGVzKHByZWZpeCkpOyB9CiAKICAgICBzdHJ1Y3QgRGF0YVNlZ21lbnRW
ZWN0b3JFbnRyeSB7CiAgICAgICAgIHNpemVfdCBiZWdpblBvc2l0aW9uOwpAQCAtMjEyLDggKzIy
Niw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBTaGFyZWRCdWZmZXIoKSA9
IGRlZmF1bHQ7Ci0gICAgZXhwbGljaXQgU2hhcmVkQnVmZmVyKGNvbnN0IHVpbnQ4X3QqLCBzaXpl
X3QpOwotICAgIGV4cGxpY2l0IFNoYXJlZEJ1ZmZlcihjb25zdCBjaGFyKiwgc2l6ZV90KTsKKyAg
ICBleHBsaWNpdCBTaGFyZWRCdWZmZXIoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KTsKICAgICBleHBs
aWNpdCBTaGFyZWRCdWZmZXIoVmVjdG9yPHVpbnQ4X3Q+JiYpOwogICAgIGV4cGxpY2l0IFNoYXJl
ZEJ1ZmZlcihGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmKTsKICNpZiBVU0UoQ0YpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2Nv
YS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24uaCIKICNpbmNsdWRlIDxDb3JlQXVkaW8vQ29yZUF1ZGlvVHlwZXMuaD4KKyNp
bmNsdWRlIDx3dGYvU3Bhbi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTgwLDEzICs4
MSwxMyBAQCBwcml2YXRlOgogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgQ0FBdWRpb1N0
cmVhbURlc2NyaXB0aW9uOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKLSAgICBl
bmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPigmbV9zdHJlYW1EZXNjcmlwdGlvbiksIHNpemVvZihtX3N0cmVhbURlc2NyaXB0aW9uKSwg
MSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZtX3N0cmVhbURl
c2NyaXB0aW9uLCAxIH0sIDEpOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgogYm9vbCBD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBDQUF1ZGlv
U3RyZWFtRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQogewotICAgIHJldHVybiBkZWNvZGVyLmRl
Y29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmZGVzY3JpcHRp
b24ubV9zdHJlYW1EZXNjcmlwdGlvbiksIHNpemVvZihkZXNjcmlwdGlvbi5tX3N0cmVhbURlc2Ny
aXB0aW9uKSwgMSk7CisgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNw
YW4geyAmZGVzY3JpcHRpb24ubV9zdHJlYW1EZXNjcmlwdGlvbiwgMSB9LCAxKTsKIH0KIAogaW5s
aW5lIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiB0b0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbihj
b25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVh
cmtleS9DRE1DbGVhcktleS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTk4LDE1ICsxOTgsMTMgQEAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGV4
dHJhY3RLZXlpZHNGcgogewogICAgIFJlZjxTaGFyZWRCdWZmZXI+IGtleUlkcyA9IFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKCk7CiAKLSAgICBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBrZXlJ
ZHNNYXAgPSBleHRyYWN0S2V5aWRzTG9jYXRpb25Gcm9tQ2VuY0luaXREYXRhKGluaXREYXRhKTsK
LSAgICB1bnNpZ25lZCBrZXlJZENvdW50ID0ga2V5SWRzTWFwLmZpcnN0OwotICAgIHVuc2lnbmVk
IGluZGV4ID0ga2V5SWRzTWFwLnNlY29uZDsKKyAgICBhdXRvIFtrZXlJZENvdW50LCBpbmRleF0g
PSBleHRyYWN0S2V5aWRzTG9jYXRpb25Gcm9tQ2VuY0luaXREYXRhKGluaXREYXRhKTsKIAogICAg
IC8vIENoZWNrIGlmIGluaXREYXRhIGlzIGEgdmFsaWQgQ0VOQyBpbml0RGF0YS4KICAgICBpZiAo
IWtleUlkQ291bnQgfHwgIWluZGV4KQogICAgICAgICByZXR1cm4ga2V5SWRzOwogCi0gICAgYXV0
byogZGF0YSA9IGluaXREYXRhLmRhdGEoKTsKKyAgICBhdXRvIGRhdGEgPSBpbml0RGF0YS5ieXRl
cygpOwogCiAgICAgYXV0byBvYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGF1
dG8ga2V5SWRzQXJyYXkgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CkBAIC0yMTgsNyArMjE2LDcg
QEAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGV4dHJhY3RLZXlpZHNGcgogICAgIC8vICJraWRz
IgogICAgIC8vIEFuIGFycmF5IG9mIGtleSBJRHMuIEVhY2ggZWxlbWVudCBvZiB0aGUgYXJyYXkg
aXMgdGhlIGJhc2U2NHVybCBlbmNvZGluZyBvZiB0aGUgb2N0ZXQgc2VxdWVuY2UgY29udGFpbmlu
ZyB0aGUga2V5IElEIHZhbHVlLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlJZENv
dW50OyBpKyspIHsKLSAgICAgICAga2V5SWRzQXJyYXktPnB1c2hTdHJpbmcoYmFzZTY0VVJMRW5j
b2RlVG9TdHJpbmcoJmRhdGFbaW5kZXhdLCBDbGVhcktleTo6S2V5SURTaXplSW5CeXRlcykpOwor
ICAgICAgICBrZXlJZHNBcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhk
YXRhLnN1YnNwYW4oaW5kZXgsIENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVzKSkpOwogICAgICAg
ICBpbmRleCArPSBDbGVhcktleTo6S2V5SURTaXplSW5CeXRlczsKICAgICB9CiAKQEAgLTI0NSw3
ICsyNDMsNyBAQCBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gZXh0cmFjdEtleUlkRnJvCiAgICAg
Ly8gVGhlIGZvcm1hdCBpcyBhIEpTT04gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyBt
ZW1iZXJzOgogICAgIC8vICJraWRzIgogICAgIC8vIEFuIGFycmF5IG9mIGtleSBJRHMuIEVhY2gg
ZWxlbWVudCBvZiB0aGUgYXJyYXkgaXMgdGhlIGJhc2U2NHVybCBlbmNvZGluZyBvZiB0aGUgb2N0
ZXQgc2VxdWVuY2UgY29udGFpbmluZyB0aGUga2V5IElEIHZhbHVlLgotICAgIGtleUlkc0FycmF5
LT5wdXNoU3RyaW5nKGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGluaXREYXRhLmRhdGEoKSwgaW5p
dERhdGEuc2l6ZSgpKSk7CisgICAga2V5SWRzQXJyYXktPnB1c2hTdHJpbmcoYmFzZTY0VVJMRW5j
b2RlVG9TdHJpbmcoaW5pdERhdGEuYnl0ZXMoKSkpOwogCiAgICAgb2JqZWN0LT5zZXRBcnJheSgi
a2lkcyIsIFdURk1vdmUoa2V5SWRzQXJyYXkpKTsKICAgICBDU3RyaW5nIGpzb25EYXRhID0gb2Jq
ZWN0LT50b0pTT05TdHJpbmcoKS51dGY4KCk7CkBAIC01NzgsOSArNTc2LDggQEAgdm9pZCBDRE1J
bnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlUwogCiAgICAgLy8gQ29uc3RydWN0IHRoZSBL
ZXlTdGF0dXNWZWN0b3Igb2JqZWN0LCByZXByZXNlbnRpbmcgcmVsZWFzZWQga2V5cywgYW5kIHRo
ZSBtZXNzYWdlIGluIHRoZQogICAgIC8vICdsaWNlbnNlIHJlbGVhc2UnIGZvcm1hdC4KLSAgICBL
ZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVzVmVjdG9yID0gbV9rZXlTdG9yZS5hbGxLZXlzQXMoQ0RN
SW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlJlbGVhc2VkKTsKLSAgICBSZWZQdHI8U2hhcmVk
QnVmZmVyPiBtZXNzYWdlOwotICAgIHsKKyAgICBhdXRvIGtleVN0YXR1c1ZlY3RvciA9IG1fa2V5
U3RvcmUuYWxsS2V5c0FzKENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpSZWxlYXNlZCk7
CisgICAgYXV0byBtZXNzYWdlID0gWyZdewogICAgICAgICAvLyBDb25zdHJ1Y3QgSlNPTiB0aGF0
IHJlcHJlc2VudHMgdGhlICdsaWNlbnNlIHJlbGVhc2UnIGZvcm1hdCwgY3JlYXRpbmcgYSAna2lk
cycgYXJyYXkKICAgICAgICAgLy8gb2YgYmFzZTY0VVJMLWVuY29kZWQga2V5IElEcyBmb3IgYWxs
IGtleXMgdGhhdCB3ZXJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNlc3Npb24uCiAgICAgICAgIGF1
dG8gcm9vdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CkBAIC01ODgsNyArNTg1LDcg
QEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlUwogICAgICAgICAgICAg
YXV0byBhcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgICAgIGZvciAoY29u
c3QgYXV0byYga2V5IDogbV9rZXlTdG9yZSkgewogICAgICAgICAgICAgICAgIEFTU0VSVChrZXkt
PmlkKCkuc2l6ZSgpIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7Ci0g
ICAgICAgICAgICAgICAgYXJyYXktPnB1c2hTdHJpbmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmco
a2V5LT5pZCgpLmRhdGEoKSwga2V5LT5pZCgpLnNpemUoKSkpOworICAgICAgICAgICAgICAgIGFy
cmF5LT5wdXNoU3RyaW5nKGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGtleS0+aWQoKSkpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgcm9vdE9iamVjdC0+c2V0QXJyYXkoImtpZHMiLCBXVEZN
b3ZlKGFycmF5KSk7CiAgICAgICAgIH0KQEAgLTU5NiwxMSArNTkzLDExIEBAIHZvaWQgQ0RNSW5z
dGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlbW92ZVMKICAgICAgICAgLy8gQ29weSB0aGUgSlNPTiBk
YXRhIGludG8gYSBTaGFyZWRCdWZmZXIgb2JqZWN0LgogICAgICAgICBTdHJpbmcgbWVzc2FnZVN0
cmluZyA9IHJvb3RPYmplY3QtPnRvSlNPTlN0cmluZygpOwogICAgICAgICBDU3RyaW5nIG1lc3Nh
Z2VDU3RyaW5nID0gbWVzc2FnZVN0cmluZy51dGY4KCk7Ci0gICAgICAgIG1lc3NhZ2UgPSBTaGFy
ZWRCdWZmZXI6OmNyZWF0ZShtZXNzYWdlQ1N0cmluZy5kYXRhKCksIG1lc3NhZ2VDU3RyaW5nLmxl
bmd0aCgpKTsKLSAgICB9CisgICAgICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShtZXNz
YWdlQ1N0cmluZy5kYXRhKCksIG1lc3NhZ2VDU3RyaW5nLmxlbmd0aCgpKTsKKyAgICB9KCk7CiAK
ICAgICBtX2tleVN0b3JlLnJlbW92ZUFsbEtleXMoKTsKLSAgICBkaXNwYXRjaENhbGxiYWNrKFdU
Rk1vdmUoa2V5U3RhdHVzVmVjdG9yKSwgUmVmPFNoYXJlZEJ1ZmZlcj4oKm1lc3NhZ2UpLCBTdWNj
ZXNzVmFsdWU6OlN1Y2NlZWRlZCk7CisgICAgZGlzcGF0Y2hDYWxsYmFjayhXVEZNb3ZlKGtleVN0
YXR1c1ZlY3RvciksIFdURk1vdmUobWVzc2FnZSksIFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVkKTsK
IH0KIAogdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6c3RvcmVSZWNvcmRPZktleVVz
YWdlKGNvbnN0IFN0cmluZyYpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmlj
L0tleWVkRGVjb2RlckdlbmVyaWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dlbmVyaWMvS2V5ZWREZWNvZGVyR2VuZXJpYy5jcHAJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvS2V5ZWREZWNvZGVyR2VuZXJpYy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8
U3RyaW5nPiByZWFkU3RyaW5nKAogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAogICAg
IFZlY3Rvcjx1aW50OF90PiBidWZmZXIoc2l6ZS52YWx1ZSgpKTsKLSAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ1ZmZlci5kYXRhKCksIHNpemUudmFsdWUoKSkpCisgICAg
aWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgYnVmZmVyIH0pKQogICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIGF1dG8gcmVzdWx0ID0gU3RyaW5nOjpmcm9t
VVRGOChidWZmZXIuZGF0YSgpLCBzaXplLnZhbHVlKCkpOwogICAgIGlmIChyZXN1bHQuaXNOdWxs
KCkpCkBAIC0xMTcsNyArMTE3LDcgQEAgS2V5ZWREZWNvZGVyR2VuZXJpYzo6S2V5ZWREZWNvZGVy
R2VuZXJpYwogICAgICAgICAgICAgaWYgKCFvaykKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXIoKnNpemUpOwotICAgICAgICAgICAgb2sg
PSBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShidWZmZXIuZGF0YSgpLCAqc2l6ZSk7Cisg
ICAgICAgICAgICBvayA9IGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBidWZm
ZXIgfSk7CiAgICAgICAgICAgICBpZiAoIW9rKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLT5hZGQoKmtleSwgV1RGTW92ZShidWZm
ZXIpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01vZGVsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTW9kZWwuaAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTW9kZWwu
aAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
Pgogdm9pZCBNb2RlbDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5j
b2RlciA8PCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fZGF0YS0+c2l6ZSgpKTsKLSAgICBlbmNvZGVy
LmVuY29kZUZpeGVkTGVuZ3RoRGF0YShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCksIDEp
OworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKG1fZGF0YS0+Ynl0ZXMoKSwgMSk7
CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CkBAIC03NCw3ICs3NCw3IEBAIFJlZlB0cjxN
b2RlbD4gTW9kZWw6OmRlY29kZShEZWNvZGVyJiBkZWMKIAogICAgIFZlY3Rvcjx1aW50OF90PiBk
YXRhOwogICAgIGRhdGEuZ3JvdygqbGVuZ3RoKTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4
ZWRMZW5ndGhEYXRhKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgMSkpCisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShkYXRhLCAxKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICByZXR1cm4gTW9kZWw6OmNyZWF0ZShTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZN
b3ZlKGRhdGEpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhl
bEJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1BpeGVsQnVmZmVyLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcg
QEAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBQaXhlbEJ1ZmZlcgogCiAgICAgZW5jb2Rl
ciA8PCBtX2Zvcm1hdDsKICAgICBlbmNvZGVyIDw8IG1fc2l6ZTsKLSAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5ieXRlTGVuZ3RoKCksIDEp
OworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKG1fZGF0YS0+Ynl0ZXMoKSwgMSk7
CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+
IFBpeGVsQnVmZmVyOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKQEAgLTExMyw3ICsxMTMsNyBA
QCB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGQ6Om9wdGlvbmFsPFBpCiAgICAgaWYgKCFyZXN1
bHQpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBpZiAoIWRlY29kZXIuZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKHJlc3VsdC0+bV9kYXRhLT5kYXRhKCksIHJlc3VsdC0+bV9kYXRh
LT5ieXRlTGVuZ3RoKCksIDEpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERh
dGEocmVzdWx0LT5tX2RhdGEtPndyaXRhYmxlQnl0ZXMoKSwgMSkpCiAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CiAKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0
cmVhbWluZ0FWRk9iakMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FW
Rk9iakMubW0JKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZP
YmpDLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03MTUsNyArNzE1LDcgQEAgdm9pZCBDRE1JbnN0YW5j
ZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZwogICAgICAgICBpZGVudGlmaWVyID0gYWRvcHROUyhb
W05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aERhdGE6aW5pdERhdGEtPmNyZWF0ZU5TRGF0YSgpLmdl
dCgpIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSk7CiAjaWYgSEFWRShGQUlSUExBWVNU
UkVBTUlOR19DRU5DX0lOSVREQVRBKQogICAgIGVsc2UgaWYgKGluaXREYXRhVHlwZSA9PSBJbml0
RGF0YVJlZ2lzdHJ5OjpjZW5jTmFtZSgpKSB7Ci0gICAgICAgIGF1dG8gcHNzaFN0cmluZyA9IGJh
c2U2NEVuY29kZVRvU3RyaW5nKGluaXREYXRhLT5kYXRhKCksIGluaXREYXRhLT5zaXplKCkpOwor
ICAgICAgICBhdXRvIHBzc2hTdHJpbmcgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbml0RGF0YS0+
Ynl0ZXMoKSk7CiAgICAgICAgIGluaXRpYWxpemF0aW9uRGF0YSA9IFtOU0pTT05TZXJpYWxpemF0
aW9uIGRhdGFXaXRoSlNPTk9iamVjdDpAeyBAInBzc2giOiAoTlNTdHJpbmcqKXBzc2hTdHJpbmcg
fSBvcHRpb25zOk5TSlNPTldyaXRpbmdQcmV0dHlQcmludGVkIGVycm9yOm5pbF07CiAgICAgfQog
I2VuZGlmCkBAIC0xMTk1LDggKzExOTUsOCBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkZhaXJQ
bGF5U3RyZWFtaW5nCiAgICAgICAgICAgICBhdXRvIGVudHJ5ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKICAgICAgICAgICAgIGF1dG8mIGtleUlEID0gcmVxdWVzdERhdGEuZmlyc3Q7CiAgICAg
ICAgICAgICBhdXRvJiBwYXlsb2FkID0gcmVxdWVzdERhdGEuc2Vjb25kOwotICAgICAgICAgICAg
ZW50cnktPnNldFN0cmluZygia2V5SUQiLCBiYXNlNjRFbmNvZGVUb1N0cmluZyhrZXlJRC0+ZGF0
YSgpLCBrZXlJRC0+c2l6ZSgpKSk7Ci0gICAgICAgICAgICBlbnRyeS0+c2V0U3RyaW5nKCJwYXls
b2FkIiwgYmFzZTY0RW5jb2RlVG9TdHJpbmcocGF5bG9hZC5nZXQoKS5ieXRlcywgcGF5bG9hZC5n
ZXQoKS5sZW5ndGgpKTsKKyAgICAgICAgICAgIGVudHJ5LT5zZXRTdHJpbmcoImtleUlEIiwgYmFz
ZTY0RW5jb2RlVG9TdHJpbmcoa2V5SUQtPmJ5dGVzKCkpKTsKKyAgICAgICAgICAgIGVudHJ5LT5z
ZXRTdHJpbmcoInBheWxvYWQiLCBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgc3RhdGljX2Nh
c3Q8Y29uc3Qgc3RkOjpieXRlKj4ocGF5bG9hZC5nZXQoKS5ieXRlcyksIHBheWxvYWQuZ2V0KCku
bGVuZ3RoIH0pKTsKICAgICAgICAgICAgIHJlcXVlc3RKU09OLT5wdXNoT2JqZWN0KFdURk1vdmUo
ZW50cnkpKTsKICAgICAgICAgfQogICAgICAgICBhdXRvIHJlcXVlc3RCdWZmZXIgPSB1dGY4QnVm
ZmVyKHJlcXVlc3RKU09OLT50b0pTT05TdHJpbmcoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0
Zm9ybURhdGEuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwMCw3ICsxMDAsNyBAQCBzdGF0aWMgU3RyaW5nIGNyZWF0ZVVuaXF1ZUZvbnROYW1lKCkK
ICAgICBHVUlEIGZvbnRVdWlkOwogICAgIENvQ3JlYXRlR3VpZCgmZm9udFV1aWQpOwogCi0gICAg
YXV0byBmb250TmFtZSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KCZmb250VXVpZCksIHNpemVvZihmb250VXVpZCkpOworICAgIGF1dG8gZm9udE5hbWUgPSBi
YXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgJmZvbnRVdWlkLCAxIH0pOwogICAgIEFTU0VSVChm
b250TmFtZS5sZW5ndGgoKSA8IExGX0ZBQ0VTSVpFKTsKICAgICByZXR1cm4gZm9udE5hbWU7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBs
YXRmb3JtRGF0YUNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0
b21QbGF0Zm9ybURhdGFDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAg
c3RhdGljIFN0cmluZyBjcmVhdGVVbmlxdWVGb250TmFtZSgpCiAgICAgR1VJRCBmb250VXVpZDsK
ICAgICBDb0NyZWF0ZUd1aWQoJmZvbnRVdWlkKTsKIAotICAgIGF1dG8gZm9udE5hbWUgPSBiYXNl
NjRFbmNvZGVUb1N0cmluZyhyZWludGVycHJldF9jYXN0PGNoYXIqPigmZm9udFV1aWQpLCBzaXpl
b2YoZm9udFV1aWQpKTsKKyAgICBhdXRvIGZvbnROYW1lID0gYmFzZTY0RW5jb2RlVG9TdHJpbmco
U3BhbiB7ICZmb250VXVpZCwgMSB9KTsKICAgICBBU1NFUlQoZm9udE5hbWUubGVuZ3RoKCkgPCBM
Rl9GQUNFU0laRSk7CiAgICAgcmV0dXJuIGZvbnROYW1lOwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU1NMS2V5R2VuZXJhdG9yTWFjLm1tCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU1NMS2V5R2VuZXJhdG9yTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksNyArMjE5LDcgQEAgc3RhdGljIFN0cmluZyBzaWdu
ZWRQdWJsaWNLZXlBbmRDaGFsbGVuZwogICAgIGlmIChTZWNBc24xRW5jb2RlSXRlbShjb2Rlciwg
JnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZSwgc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdl
VGVtcGxhdGUsICZlbmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlKSAhPSBub0VycikK
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3Ry
aW5nKGVuY29kZWRTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2UuRGF0YSwgZW5jb2RlZFNpZ25l
ZFB1YmxpY0tleUFuZENoYWxsZW5nZS5MZW5ndGgpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVU
b1N0cmluZyhTcGFuIHsgZW5jb2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZS5EYXRhLCBl
bmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlLkxlbmd0aCB9KTsKIH0KIAogQUxMT1df
REVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNv
dXJjZUNhcGFiaWxpdGllcy5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTExNCwxNiArMTE0LDE2IEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPgogdm9pZCBDYXBhYmlsaXR5VmFsdWVPclJhbmdlOjplbmNvZGUoRW5jb2RlciYg
ZW5jb2RlcikgY29uc3QKIHsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmbV9taW5PclZhbHVlKSwgc2l6ZW9mKFZhbHVl
VW5pb24pLCBhbGlnbm9mKFZhbHVlVW5pb24pKTsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmbV9tYXgpLCBzaXplb2Yo
VmFsdWVVbmlvbiksIGFsaWdub2YoVmFsdWVVbmlvbikpOworICAgIGVuY29kZXIuZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKFNwYW4geyAmbV9taW5PclZhbHVlLCAxIH0sIGFsaWdub2YoVmFsdWVVbmlv
bikpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmbV9tYXgsIDEg
fSwgYWxpZ25vZihWYWx1ZVVuaW9uKSk7CiAgICAgZW5jb2RlciA8PCBtX3R5cGU7CiB9CiAKIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+CiBib29sIENhcGFiaWxpdHlWYWx1ZU9yUmFuZ2U6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyLCBDYXBhYmlsaXR5VmFsdWVPclJhbmdlJiB2YWx1ZU9yUmFuZ2Up
CiB7Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KCZ2YWx1ZU9yUmFuZ2UubV9taW5PclZhbHVlKSwgc2l6ZW9mKFZhbHVl
VW5pb24pLCBhbGlnbm9mKFZhbHVlVW5pb24pKQotICAgICAgICAmJiBkZWNvZGVyLmRlY29kZUZp
eGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWVPclJhbmdlLm1f
bWF4KSwgc2l6ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZhbHVlVW5pb24pKQorICAgIHJldHVy
biBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJnZhbHVlT3JSYW5nZS5tX21p
bk9yVmFsdWUsIDEgfSwgYWxpZ25vZihWYWx1ZVVuaW9uKSkKKyAgICAgICAgJiYgZGVjb2Rlci5k
ZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZ2YWx1ZU9yUmFuZ2UubV9tYXgsIDEgfSwgYWxp
Z25vZihWYWx1ZVVuaW9uKSkKICAgICAgICAgJiYgZGVjb2Rlci5kZWNvZGUodmFsdWVPclJhbmdl
Lm1fdHlwZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9S
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDEzICsx
MzksMTMgQEAgc3RhdGljIHZvaWQgYWRkU3RyaW5nVG9TSEExKFNIQTEmIHNoYTEsIAogCiAgICAg
aWYgKHN0cmluZy5pczhCaXQoKSAmJiBzdHJpbmcuaXNBbGxBU0NJSSgpKSB7CiAgICAgICAgIGNv
bnN0IHVpbnQ4X3QgbnVsbEJ5dGUgPSAwOwotICAgICAgICBzaGExLmFkZEJ5dGVzKHN0cmluZy5j
aGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAgICAgICBzaGExLmFkZEJ5dGVzKCZu
dWxsQnl0ZSwgMSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IHN0cmluZy5jaGFyYWN0
ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkgfSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7
ICZudWxsQnl0ZSwgMSB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGF1dG8gdXRm
OCA9IHN0cmluZy51dGY4KCk7Ci0gICAgc2hhMS5hZGRCeXRlcyh1dGY4LmRhdGFBc1VJbnQ4UHRy
KCksIHV0ZjgubGVuZ3RoKCkgKyAxKTsgLy8gSW5jbHVkZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUu
CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgdXRmOC5kYXRhQXNVSW50OFB0cigpLCB1dGY4Lmxl
bmd0aCgpICsgMSB9KTsgLy8gSW5jbHVkZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUuCiB9CiAKIFN0
cmluZyBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpoYXNoU3RyaW5nV2l0aFNhbHQoY29uc3Qg
U3RyaW5nJiBpZCwgY29uc3QgU3RyaW5nJiBoYXNoU2FsdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3BwCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxCYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsOCArOTcsOSBAQCBib29sIENyZWRlbnRpYWxCYXNl
Ojpjb21wYXJlKGNvbnN0IENyZWRlCiAKIFN0cmluZyBDcmVkZW50aWFsQmFzZTo6c2VyaWFsaXph
dGlvbkZvckJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcigpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6
IEFkZCBtYWtlU3RyaW5nIHZhcmlhbnQgdGhhdCBjcmVhdGVzIGEgdXRmOCBidWZmZXIgZGlyZWN0
bHkuCiAgICAgYXV0byBjcmVkZW50aWFsU3RyaW5nRGF0YSA9IG1ha2VTdHJpbmcobV91c2VyLCAn
OicsIG1fcGFzc3dvcmQpLnV0ZjgoKTsKLSAgICByZXR1cm4gbWFrZVN0cmluZygiQmFzaWMgIiwg
YmFzZTY0RW5jb2RlZChjcmVkZW50aWFsU3RyaW5nRGF0YSkpOworICAgIHJldHVybiBtYWtlU3Ry
aW5nKCJCYXNpYyAiLCBiYXNlNjRFbmNvZGVkKGNyZWRlbnRpYWxTdHJpbmdEYXRhLmJ5dGVzKCkp
KTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0
aWZpY2F0ZUluZm9DRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHAJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ2VydGlmaWNhdGVJbmZvQ0ZO
ZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNyArMjEwLDcgQEAgc3RhdGljIHZvaWQgZW5j
b2RlQ0ZEYXRhKEVuY29kZXImIGVuY29kZQogICAgIGNvbnN0IHVpbnQ4X3QqIGJ5dGVQdHIgPSBD
RkRhdGFHZXRCeXRlUHRyKGRhdGEpOwogCiAgICAgZW5jb2RlciA8PCBsZW5ndGg7Ci0gICAgZW5j
b2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYnl0ZVB0ciwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihs
ZW5ndGgpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgYnl0ZVB0
ciwgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpIH0pOwogfQogCiBzdGF0aWMgc3RkOjpvcHRp
b25hbDxSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4gZGVjb2RlQ0ZEYXRhKERlY29kZXImIGRlY29kZXIp
CkBAIC0yMjUsNyArMjI1LDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0YWluUHRyPENGRGF0
YVJlZgogICAgIGlmICghcG9pbnRlcikKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAot
ICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0ZShudWxscHRyLCBwb2ludGVyLCAqc2l6ZSkp
OworICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0ZShudWxscHRyLCByZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPihwb2ludGVyKSwgKnNpemUpKTsKIH0KIAogI2lmIEhBVkUoU0VD
X1RSVVNUX1NFUklBTElaQVRJT04pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvQ2VydGlmaWNhdGVJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL0NlcnRpZmljYXRlSW5mby5oCShyZXZpc2lvbiAyNzg4MDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ2VydGlmaWNhdGVJbmZv
LmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ29k
ZXI8R1JlZlB0cjxHQnl0ZUFycgogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyICZlbmNv
ZGVyLCBjb25zdCBHUmVmUHRyPEdCeXRlQXJyYXk+JiBieXRlQXJyYXkpCiAgICAgewogICAgICAg
ICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90PihieXRlQXJyYXktPmxlbik7Ci0gICAg
ICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGJ5dGVBcnJheS0+ZGF0YSwgYnl0ZUFy
cmF5LT5sZW4pOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsg
Ynl0ZUFycmF5LT5kYXRhLCBieXRlQXJyYXktPmxlbiB9KTsKICAgICB9CiAKICAgICBzdGF0aWMg
c3RkOjpvcHRpb25hbDxHUmVmUHRyPEdCeXRlQXJyYXk+PiBkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKQEAgLTg3LDcgKzg3LDcgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8R1JlZlB0cjxHQnl0
ZUFycgogCiAgICAgICAgIEdSZWZQdHI8R0J5dGVBcnJheT4gYnl0ZUFycmF5ID0gYWRvcHRHUmVm
KGdfYnl0ZV9hcnJheV9zaXplZF9uZXcoKnNpemUpKTsKICAgICAgICAgZ19ieXRlX2FycmF5X3Nl
dF9zaXplKGJ5dGVBcnJheS5nZXQoKSwgKnNpemUpOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKGJ5dGVBcnJheS0+ZGF0YSwgKnNpemUpKQorICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBieXRlQXJyYXktPmRhdGEsICpz
aXplIH0pKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAgICAgcmV0dXJu
IGJ5dGVBcnJheTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FM
aXRlU3RhdGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9z
cWwvU1FMaXRlU3RhdGVtZW50LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1
LDcgKzg1LDcgQEAgYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OmV4ZWN1dGVDb21tYW5kKCkKICAgICBy
ZXR1cm4gc3RlcCgpID09IFNRTElURV9ET05FOwogfQogCi1pbnQgU1FMaXRlU3RhdGVtZW50Ojpi
aW5kQmxvYihpbnQgaW5kZXgsIFNwYW48Y29uc3QgdWludDhfdD4gYmxvYikKK2ludCBTUUxpdGVT
dGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGJsb2Ip
CiB7CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkpOwpAQCAtOTUsNiArOTUsMTEgQEAg
aW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IoaW50IGluZGV4LAogICAgIHJldHVybiBzcWxp
dGUzX2JpbmRfYmxvYihtX3N0YXRlbWVudCwgaW5kZXgsIGJsb2IuZGF0YSgpLCBibG9iLnNpemUo
KSwgU1FMSVRFX1RSQU5TSUVOVCk7CiB9CiAKK2ludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9i
KGludCBpbmRleCwgU3Bhbjxjb25zdCB1aW50OF90PiBibG9iKQoreworICAgIHJldHVybiBiaW5k
QmxvYihpbmRleCwgYXNCeXRlcyhibG9iKSk7Cit9CisKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJp
bmRCbG9iKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0KQogewogICAgIC8vIFN0cmluZzo6
Y2hhcmFjdGVycygpIHJldHVybnMgMCBmb3IgdGhlIGVtcHR5IHN0cmluZywgd2hpY2ggU1FMaXRl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5o
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRl
U3RhdGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAgcHVibGljOgogICAg
IFdFQkNPUkVfRVhQT1JUIH5TUUxpdGVTdGF0ZW1lbnQoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBT
UUxpdGVTdGF0ZW1lbnQoU1FMaXRlU3RhdGVtZW50JiYpOwogICAgIAorICAgIFdFQkNPUkVfRVhQ
T1JUIGludCBiaW5kQmxvYihpbnQgaW5kZXgsIFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAgICAg
V0VCQ09SRV9FWFBPUlQgaW50IGJpbmRCbG9iKGludCBpbmRleCwgU3Bhbjxjb25zdCB1aW50OF90
Pik7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJpbmRCbG9iKGludCBpbmRleCwgY29uc3QgU3Ry
aW5nJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJpbmRUZXh0KGludCBpbmRleCwgU3RyaW5n
Vmlldyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJs
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQ
cmludGFibGUuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1F1b3RlZFByaW50YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDEyICs1NSw3
IEBAIHN0YXRpYyBzaXplX3QgbGVuZ3RoT2ZMaW5lRW5kaW5nQXRJbmRleCgKICAgICByZXR1cm4g
MDsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCBWZWN0
b3I8dWludDhfdD4mIGlucHV0KQotewotICAgIHJldHVybiBxdW90ZWRQcmludGFibGVFbmNvZGUo
aW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkpOwotfQotCi1WZWN0b3I8dWludDhfdD4gcXVvdGVk
UHJpbnRhYmxlRW5jb2RlKGNvbnN0IHVpbnQ4X3QqIGlucHV0LCBzaXplX3QgaW5wdXRMZW5ndGgp
CitzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCB1aW50
OF90KiBpbnB1dCwgc2l6ZV90IGlucHV0TGVuZ3RoKQogewogICAgIFZlY3Rvcjx1aW50OF90PiBv
dXQ7CiAgICAgb3V0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoaW5wdXRMZW5ndGgpOwpAQCAtMTE2
LDEyICsxMTEsMTIgQEAgVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjbwog
ICAgIHJldHVybiBvdXQ7CiB9CiAKLVZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNv
ZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQ
cmludGFibGVFbmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQogewotICAgIHJldHVy
biBxdW90ZWRQcmludGFibGVEZWNvZGUoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkpOworICAg
IHJldHVybiBxdW90ZWRQcmludGFibGVFbmNvZGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpKTsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+
IHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YUxl
bmd0aCkKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0
IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3RoKQogewogICAgIFZlY3Rvcjx1aW50OF90
PiBvdXQ7CiAgICAgaWYgKCFkYXRhTGVuZ3RoKQpAQCAtMTU2LDQgKzE1MSw5IEBAIFZlY3Rvcjx1
aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY28KICAgICByZXR1cm4gb3V0OwogfQogCitW
ZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRl
PiBpbnB1dCkKK3sKKyAgICByZXR1cm4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0LmRhdGEoKSksIGlucHV0LnNpemUoKSk7Cit9CisK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVvdGVkUHJpbnRhYmxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFi
bGUuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9R
dW90ZWRQcmludGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTMgKzMxLDExIEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4u
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1WZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRh
YmxlRW5jb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOwotVmVjdG9yPHVpbnQ4X3Q+IHF1b3Rl
ZFByaW50YWJsZUVuY29kZShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKLQotVmVjdG9yPHVpbnQ4
X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mKTsKLVZlY3Rv
cjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgdWludDhfdCosIHNpemVfdCk7
CitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKFNwYW48Y29uc3Qgc3RkOjpi
eXRlPik7CitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKFNwYW48Y29uc3Qg
c3RkOjpieXRlPik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUxLDcgKzI1MSw3IEBAIHN0ZDo6b3B0aW9uYWw8UGFzdGVib2FyZEN1c3Rv
bURhdGE+IFBhc3QKICAgICAgICAgaWYgKEhBTkRMRSBjYkRhdGEgPSA6OkdldENsaXBib2FyZERh
dGEoQ3VzdG9tRGF0YUNsaXBib2FyZEZvcm1hdCkpIHsKICAgICAgICAgICAgIHNpemVfdCBzaXpl
ID0gR2xvYmFsU2l6ZShjYkRhdGEpOwogICAgICAgICAgICAgYXV0byBkYXRhID0gc3RhdGljX2Nh
c3Q8dWludDhfdCo+KEdsb2JhbExvY2soY2JEYXRhKSk7Ci0gICAgICAgICAgICBhdXRvIGN1c3Rv
bURhdGEgPSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6ZnJvbVBlcnNpc3RlbmNlRGVjb2Rlcih7ZGF0
YSwgc2l6ZX0pOworICAgICAgICAgICAgYXV0byBjdXN0b21EYXRhID0gUGFzdGVib2FyZEN1c3Rv
bURhdGE6OmZyb21QZXJzaXN0ZW5jZURlY29kZXIoU3BhbiB7IGRhdGEsIHNpemUgfSk7CiAKICAg
ICAgICAgICAgIEdsb2JhbFVubG9jayhjYkRhdGEpOwogICAgICAgICAgICAgOjpDbG9zZUNsaXBi
b2FyZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdp
c3RyYXRpb25EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9u
RGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTksMTAgKzQ1OSwxMCBAQCBib29sIFJl
Z2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2VzCiAgICAgICAgICAgICB8fCBpbnNlcnRT
dGF0ZW1lbnQtPmJpbmRUZXh0KDYsIHVwZGF0ZVZpYUNhY2hlVG9TdHJpbmcoZGF0YS5yZWdpc3Ry
YXRpb24udXBkYXRlVmlhQ2FjaGUpKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAgIHx8IGluc2Vy
dFN0YXRlbWVudC0+YmluZFRleHQoNywgZGF0YS5zY3JpcHRVUkwuc3RyaW5nKCkpICE9IFNRTElU
RV9PSwogICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCg4LCB3b3JrZXJU
eXBlVG9TdHJpbmcoZGF0YS53b3JrZXJUeXBlKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8
fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDksIFNwYW4geyBjc3BFbmNvZGVyLmJ1ZmZlcigp
LCBjc3BFbmNvZGVyLmJ1ZmZlclNpemUoKSB9KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8
IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoOSwgY3NwRW5jb2Rlci5idWZmZXIoKSkgIT0gU1FM
SVRFX09LCiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDEwLCBkYXRh
LnJlZmVycmVyUG9saWN5KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGluc2VydFN0YXRl
bWVudC0+YmluZEJsb2IoMTEsIFNwYW4geyBzY3JpcHRSZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVy
KCksIHNjcmlwdFJlc291cmNlTWFwRW5jb2Rlci5idWZmZXJTaXplKCkgfSkgIT0gU1FMSVRFX09L
Ci0gICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDEyLCBTcGFuIHsgY2Vy
dGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXIoKSwgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZm
ZXJTaXplKCkgfSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQt
PmJpbmRCbG9iKDExLCBzY3JpcHRSZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVyKCkpICE9IFNRTElU
RV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kQmxvYigxMiwgY2VydGlm
aWNhdGVJbmZvRW5jb2Rlci5idWZmZXIoKSkgIT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8fCBp
bnNlcnRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIkZhaWxlZCB0byBzdG9yZSByZWdpc3RyYXRp
b24gZGF0YSBpbnRvIHJlY29yZHMgdGFibGUgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVy
cm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTUxNyw3ICs1MTcsNyBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6Omlt
cG9ydFJlY29yCiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29udGVudFNlY3VyaXR5UG9saWN5UmVz
cG9uc2VIZWFkZXJzPiBjb250ZW50U2VjdXJpdHlQb2xpY3k7CiAgICAgICAgIGF1dG8gY29udGVu
dFNlY3VyaXR5UG9saWN5RGF0YVNwYW4gPSBzcWwtPmNvbHVtbkJsb2JBc1NwYW4oOCk7CiAgICAg
ICAgIGlmIChjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhU3Bhbi5zaXplKCkpIHsKLSAgICAgICAg
ICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgY3NwRGVjb2Rlcihjb250ZW50U2VjdXJpdHlQ
b2xpY3lEYXRhU3Bhbi5kYXRhKCksIGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGFTcGFuLnNpemUo
KSk7CisgICAgICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGNzcERlY29kZXIgeyBj
b250ZW50U2VjdXJpdHlQb2xpY3lEYXRhU3BhbiB9OwogICAgICAgICAgICAgY3NwRGVjb2RlciA+
PiBjb250ZW50U2VjdXJpdHlQb2xpY3k7CiAgICAgICAgICAgICBpZiAoIWNvbnRlbnRTZWN1cml0
eVBvbGljeSkgewogICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VXb3Jr
ZXIsICJSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3JkczogRmFpbGVkIHRvIGRlY29k
ZSBjb250ZW50U2VjdXJpdHlQb2xpY3kiKTsKQEAgLTUzMCw3ICs1MzAsNyBAQCBTdHJpbmcgUmVn
aXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yCiAgICAgICAgIEhhc2hNYXA8VVJMLCBTZXJ2
aWNlV29ya2VyQ29udGV4dERhdGE6OkltcG9ydGVkU2NyaXB0PiBzY3JpcHRSZXNvdXJjZU1hcDsK
ICAgICAgICAgYXV0byBzY3JpcHRSZXNvdXJjZU1hcERhdGFTcGFuID0gc3FsLT5jb2x1bW5CbG9i
QXNTcGFuKDEwKTsKICAgICAgICAgaWYgKHNjcmlwdFJlc291cmNlTWFwRGF0YVNwYW4uc2l6ZSgp
KSB7Ci0gICAgICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIHNjcmlwdFJlc291cmNl
TWFwRGVjb2RlcihzY3JpcHRSZXNvdXJjZU1hcERhdGFTcGFuLmRhdGEoKSwgc2NyaXB0UmVzb3Vy
Y2VNYXBEYXRhU3Bhbi5zaXplKCkpOworICAgICAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVj
b2RlciBzY3JpcHRSZXNvdXJjZU1hcERlY29kZXIgeyBzY3JpcHRSZXNvdXJjZU1hcERhdGFTcGFu
IH07CiAgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPEhhc2hNYXA8VVJMLCBJbXBvcnRlZFNjcmlw
dEF0dHJpYnV0ZXM+PiBzY3JpcHRSZXNvdXJjZU1hcFdpdGhvdXRTY3JpcHRzOwogICAgICAgICAg
ICAgc2NyaXB0UmVzb3VyY2VNYXBEZWNvZGVyID4+IHNjcmlwdFJlc291cmNlTWFwV2l0aG91dFNj
cmlwdHM7CiAgICAgICAgICAgICBpZiAoIXNjcmlwdFJlc291cmNlTWFwV2l0aG91dFNjcmlwdHMp
IHsKQEAgLTU0Myw3ICs1NDMsNyBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9y
dFJlY29yCiAgICAgICAgIGF1dG8gY2VydGlmaWNhdGVJbmZvRGF0YVNwYW4gPSBzcWwtPmNvbHVt
bkJsb2JBc1NwYW4oMTEpOwogICAgICAgICBzdGQ6Om9wdGlvbmFsPENlcnRpZmljYXRlSW5mbz4g
Y2VydGlmaWNhdGVJbmZvOwogCi0gICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgY2Vy
dGlmaWNhdGVJbmZvRGVjb2RlcihjZXJ0aWZpY2F0ZUluZm9EYXRhU3Bhbi5kYXRhKCksIGNlcnRp
ZmljYXRlSW5mb0RhdGFTcGFuLnNpemUoKSk7CisgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRl
Y29kZXIgY2VydGlmaWNhdGVJbmZvRGVjb2RlciB7IGNlcnRpZmljYXRlSW5mb0RhdGFTcGFuIH07
CiAgICAgICAgIGNlcnRpZmljYXRlSW5mb0RlY29kZXIgPj4gY2VydGlmaWNhdGVJbmZvOwogICAg
ICAgICBpZiAoIWNlcnRpZmljYXRlSW5mbykgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoU2VydmljZVdvcmtlciwgIlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzOiBG
YWlsZWQgdG8gZGVjb2RlIGNlcnRpZmljYXRlSW5mbyIpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
d29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NjcmlwdFN0b3JhZ2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTY3JpcHRTdG9yYWdlLmNw
cAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3Nl
cnZlci9TV1NjcmlwdFN0b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBA
IFN0cmluZyBTV1NjcmlwdFN0b3JhZ2U6OnNoYTJIYXNoKGNvbnN0IFMKICAgICBhdXRvIGlucHV0
VXRmOCA9IGlucHV0LnV0ZjgoKTsKICAgICBjcnlwdG8tPmFkZEJ5dGVzKGlucHV0VXRmOC5kYXRh
KCksIGlucHV0VXRmOC5sZW5ndGgoKSk7CiAgICAgYXV0byBoYXNoID0gY3J5cHRvLT5jb21wdXRl
SGFzaCgpOwotICAgIHJldHVybiBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhoYXNoLmRhdGEoKSwg
aGFzaC5zaXplKCkpOworICAgIHJldHVybiBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhoYXNoKTsK
IH0KIAogU3RyaW5nIFNXU2NyaXB0U3RvcmFnZTo6c2hhMkhhc2goY29uc3QgVVJMJiBpbnB1dCkg
Y29uc3QKQEAgLTg2LDkgKzg2LDkgQEAgU2NyaXB0QnVmZmVyIFNXU2NyaXB0U3RvcmFnZTo6c3Rv
cmUoY29ucwogICAgIGF1dG8gc2NyaXB0UGF0aCA9IHRoaXMtPnNjcmlwdFBhdGgocmVnaXN0cmF0
aW9uS2V5LCBzY3JpcHRVUkwpOwogICAgIEZpbGVTeXN0ZW06Om1ha2VBbGxEaXJlY3RvcmllcyhG
aWxlU3lzdGVtOjpwYXJlbnRQYXRoKHNjcmlwdFBhdGgpKTsKIAotICAgIGF1dG8gaXRlcmF0ZU92
ZXJCdWZmZXJBbmRXcml0ZURhdGEgPSBbJl0oY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50
OF90Kiwgc2l6ZV90KT4mIHdyaXRlRGF0YSkgewotICAgICAgICBmb3IgKGF1dG8gaXQgPSBzY3Jp
cHQuYnVmZmVyKCktPmJlZ2luKCk7IGl0ICE9IHNjcmlwdC5idWZmZXIoKS0+ZW5kKCk7ICsraXQp
Ci0gICAgICAgICAgICB3cml0ZURhdGEoaXQtPnNlZ21lbnQtPmRhdGEoKSwgaXQtPnNlZ21lbnQt
PnNpemUoKSk7CisgICAgYXV0byBpdGVyYXRlT3ZlckJ1ZmZlckFuZFdyaXRlRGF0YSA9IFsmXShj
b25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+JiB3cml0ZURhdGEpIHsK
KyAgICAgICAgZm9yIChhdXRvJiBzZWdtZW50RW50cnkgOiAqc2NyaXB0LmJ1ZmZlcigpKQorICAg
ICAgICAgICAgd3JpdGVEYXRhKHNlZ21lbnRFbnRyeS5zZWdtZW50LT5ieXRlcygpKTsKICAgICB9
OwogCiAgICAgaWYgKCFzaG91bGRVc2VGaWxlTWFwcGluZyhzY3JpcHQuYnVmZmVyKCktPnNpemUo
KSkpIHsKQEAgLTk3LDggKzk3LDggQEAgU2NyaXB0QnVmZmVyIFNXU2NyaXB0U3RvcmFnZTo6c3Rv
cmUoY29ucwogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIlNX
U2NyaXB0U3RvcmFnZTo6c3RvcmU6IEZhaWx1cmUgdG8gc3RvcmUgJXMsIEZpbGVTeXN0ZW06Om9w
ZW5GaWxlKCkgZmFpbGVkIiwgc2NyaXB0UGF0aC51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAg
IHJldHVybiB7IH07CiAgICAgICAgIH0KLSAgICAgICAgaXRlcmF0ZU92ZXJCdWZmZXJBbmRXcml0
ZURhdGEoWyZdKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gICAgICAgICAg
ICBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShoYW5kbGUsIGRhdGEsIHNpemUpOworICAgICAgICBp
dGVyYXRlT3ZlckJ1ZmZlckFuZFdyaXRlRGF0YShbJl0oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRh
dGEpIHsKKyAgICAgICAgICAgIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKGhhbmRsZSwgZGF0YS5k
YXRhKCksIGRhdGEuc2l6ZSgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
KTsKICAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGhhbmRsZSk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSw4MSBAQAorMjAyMS0wNi0xMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBs
ZS5jb20+CisKKyAgICAgICAgQWRvcHQgU3BhbiBpbiBtb3JlIHBsYWNlcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6
Q2FjaGVTdG9yYWdlOjpDYWNoZTo6ZGVjb2RlUmVjb3JkSGVhZGVyKToKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwOgorICAgICAgICAo
V2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6c3RvcmVPcmlnaW4pOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVhZE9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6
OkNhY2hlU3RvcmFnZTo6ZW5jb2RlQ2FjaGVOYW1lcyk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hl
U3RvcmFnZTo6ZGVjb2RlQ2FjaGVzTmFtZXMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZURhdGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6
OkRhdGE6Om1hcFRvRmlsZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
Y29tcHV0ZVNIQTEpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZURhdGEuaDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhOjpEYXRhKToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW06Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YTo6YXBwbHkgY29uc3QpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6OmFkb3B0TWFwKToKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHA6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtDYWNoZTo6RW50cnk6OmVuY29kZUFzU3RvcmFnZVJlY29yZCBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQpOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6aGFzaFN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtDYWNoZTo6S2V5Ojpjb21wdXRlSGFzaCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtDYWNoZTo6S2V5Ojpjb21wdXRlUGFydGl0aW9uSGFzaCBjb25zdCk6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHA6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6ZGVjb2RlUmVjb3JkTWV0YURhdGEpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmVuY29kZVJlY29yZE1ldGFEYXRhKToKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3VicmVzb3VyY2VzRW50cnk6OmVuY29kZUFz
U3RvcmFnZVJlY29yZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3Vi
cmVzb3VyY2VzRW50cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQpOgorICAgICAgICAqIFBsYXRmb3Jt
L0lQQy9Bcmd1bWVudENvZGVyLmg6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29k
ZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxDU3RyaW5nPjo6ZW5jb2RlKToK
KyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxDU3RyaW5nPjo6ZGVjb2RlKToKKyAgICAgICAg
KElQQzo6QXJndW1lbnRDb2RlcjxTdHJpbmc+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpkZWNv
ZGVTdHJpbmdUZXh0KToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxTSEExOjpEaWdlc3Q+
OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFNIQTE6OkRpZ2VzdD46OmRl
Y29kZSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmg6CisgICAgICAg
IChJUEM6OlNpbXBsZUFyZ3VtZW50Q29kZXI6OmVuY29kZSk6CisgICAgICAgIChJUEM6OlNpbXBs
ZUFyZ3VtZW50Q29kZXI6OmRlY29kZSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FycmF5UmVm
ZXJlbmNlLmg6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0RlY29kZXIuY3BwOgorICAgICAgICAo
SVBDOjpEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAqIFBsYXRmb3Jt
L0lQQy9EZWNvZGVyLmg6CisgICAgICAgIChJUEM6OkRlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3Ro
RGF0YSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0VuY29kZXIuY3BwOgorICAgICAgICAoSVBD
OjpFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAqIFBsYXRmb3JtL0lQ
Qy9FbmNvZGVyLmg6CisgICAgICAgICogUGxhdGZvcm0vSVBDL1NoYXJlZEJ1ZmZlckNvcHkuY3Bw
OgorICAgICAgICAoSVBDOjpTaGFyZWRCdWZmZXJDb3B5OjplbmNvZGUgY29uc3QpOgorICAgICAg
ICAqIFBsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uRW5jb2Rlci5oOgorICAgICAgICAqIFNo
YXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoSVBDOjplbmNvZGVTaGFy
ZWRCdWZmZXIpOgorICAgICAgICAoSVBDOjpkZWNvZGVTaGFyZWRCdWZmZXIpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuY3BwOgorICAgICAgICAoQVBJ
OjplbmNvZGVDb250ZW50UnVsZUxpc3RNZXRhRGF0YSk6CisgICAgICAgIChBUEk6OmdldERhdGEp
OgorICAgICAgICAoQVBJOjpkZWNvZGVDb250ZW50UnVsZUxpc3RNZXRhRGF0YSk6CisgICAgICAg
IChBUEk6OndyaXRlRGF0YVRvRmlsZSk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9MZWdhY3lT
ZXNzaW9uU3RhdGVDb2RpbmcuY3BwOgorICAgICAgICAoV2ViS2l0OjpIaXN0b3J5RW50cnlEYXRh
RW5jb2Rlcjo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFF
bmNvZGVyOjplbmNvZGVBcml0aG1ldGljVHlwZSk6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlF
bnRyeURhdGFFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAoV2ViS2l0
OjpIaXN0b3J5RW50cnlEYXRhRGVjb2Rlcjo6b3BlcmF0b3I+Pik6CisgICAgICAgIChXZWJLaXQ6
Okhpc3RvcnlFbnRyeURhdGFEZWNvZGVyOjpkZWNvZGVBcml0aG1ldGljVHlwZSk6CisgICAgICAg
IChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6ZW5jb2RlVHlwZWRBcnJheSk6CisKIDIwMjEtMDYt
MTEgIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgcmV2ZXJ0aW5nIHIyNzg3NTQuCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXIu
Y3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1By
aXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMyw3
ICszMjMsNyBAQCB2b2lkIFByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlcjo6ZmlyCiAgICAg
ICAgIGNyeXB0by0+YWRkQnl0ZXMocHVibGljS2V5RGF0YS0+ZGF0YSgpLCBwdWJsaWNLZXlEYXRh
LT5zaXplKCkpOwogICAgICAgICBhdXRvIHB1YmxpY0tleURhdGFIYXNoID0gY3J5cHRvLT5jb21w
dXRlSGFzaCgpOwogCi0gICAgICAgIGF1dG8ga2V5SUQgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmlu
ZyhwdWJsaWNLZXlEYXRhSGFzaC5kYXRhKCksIHB1YmxpY0tleURhdGFIYXNoLnNpemUoKSk7Cisg
ICAgICAgIGF1dG8ga2V5SUQgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhwdWJsaWNLZXlEYXRh
SGFzaCk7CiAgICAgICAgIGlmIChrZXlJRCAhPSBhdHRyaWJ1dGlvbi5zb3VyY2VVbmxpbmthYmxl
VG9rZW4oKS0+a2V5SURCYXNlNjRVUkwpCiAgICAgICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2Fj
aGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTY1LDcgKzU2NSw3IEBAIFN0b3JhZ2U6OlJlY29yZCBDYWNoZTo6ZW5j
b2RlKGNvbnN0IFJlY28KIAogICAgIGVuY29kZXIuZW5jb2RlQ2hlY2tzdW0oKTsKIAotICAgIERh
dGEgaGVhZGVyKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICBE
YXRhIGhlYWRlcihlbmNvZGVyLmJ1ZmZlcigpKTsKICAgICBEYXRhIGJvZHk7CiAgICAgV1RGOjpz
d2l0Y2hPbihyZWNvcmQucmVzcG9uc2VCb2R5LCBbXShjb25zdCBSZWY8V2ViQ29yZTo6Rm9ybURh
dGE+JiBmb3JtRGF0YSkgewogICAgICAgICAvLyBGSVhNRTogU3RvcmUgZm9ybSBkYXRhIGJvZHku
CkBAIC02MzAsNyArNjMwLDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RE9NQ2Fj
aGVFbgogCiBzdGQ6Om9wdGlvbmFsPENhY2hlOjpEZWNvZGVkUmVjb3JkPiBDYWNoZTo6ZGVjb2Rl
UmVjb3JkSGVhZGVyKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYgc3RvcmFnZSkKIHsKLSAgICBXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoc3RvcmFnZS5oZWFkZXIuZGF0YSgpLCBzdG9y
YWdlLmhlYWRlci5zaXplKCkpOworICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2Rl
cihTcGFuIHsgc3RvcmFnZS5oZWFkZXIuZGF0YSgpLCBzdG9yYWdlLmhlYWRlci5zaXplKCkgfSk7
CiAKICAgICBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gaW5zZXJ0aW9uVGltZTsKICAgICBkZWNvZGVy
ID4+IGluc2VydGlvblRpbWU7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0Nh
Y2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSwxNCArMTA1
LDE0IEBAIHZvaWQgQ2FjaGVzOjpzdG9yZU9yaWdpbihDb21wbGV0aW9uQ2FsbGIKICAgICBlbmNv
ZGVyIDw8IG1fb3JpZ2luLmNsaWVudE9yaWdpbi5wcm90b2NvbDsKICAgICBlbmNvZGVyIDw8IG1f
b3JpZ2luLmNsaWVudE9yaWdpbi5ob3N0OwogICAgIGVuY29kZXIgPDwgbV9vcmlnaW4uY2xpZW50
T3JpZ2luLnBvcnQ7Ci0gICAgbV9lbmdpbmUtPndyaXRlRmlsZShjYWNoZXNPcmlnaW5GaWxlbmFt
ZShtX3Jvb3RQYXRoKSwgRGF0YSB7IGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6
ZSgpIH0sIFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChzdGQ6Om9wdGlvbmFsPEVycm9yPiYmIGVy
cm9yKSBtdXRhYmxlIHsKKyAgICBtX2VuZ2luZS0+d3JpdGVGaWxlKGNhY2hlc09yaWdpbkZpbGVu
YW1lKG1fcm9vdFBhdGgpLCBEYXRhIHsgZW5jb2Rlci5idWZmZXIoKSB9LCBbcHJvdGVjdGVkVGhp
cyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXSAoc3RkOjpvcHRpb25hbDxFcnJvcj4mJiBlcnJvcikgbXV0YWJsZSB7CiAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoZXJyb3IpKTsKICAgICB9KTsKIH0KIAogc3Rk
OjpvcHRpb25hbDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+IENhY2hlczo6cmVhZE9yaWdpbihjb25z
dCBEYXRhJiBkYXRhKQogewotICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2Rlcihk
YXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOworICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIg
ZGVjb2RlcihTcGFuIHsgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpIH0pOwogCiAgICAgc3RkOjpv
cHRpb25hbDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IHRvcE9yaWdpbjsKICAgICBkZWNv
ZGVyID4+IHRvcE9yaWdpbjsKQEAgLTQwNCwxMiArNDA0LDEyIEBAIHN0YXRpYyBpbmxpbmUgRGF0
YSBlbmNvZGVDYWNoZU5hbWVzKGNvbnMKICAgICAgICAgZW5jb2RlciA8PCBjYWNoZS51bmlxdWVO
YW1lKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIERhdGEgeyBlbmNvZGVyLmJ1ZmZlcigpLCBlbmNv
ZGVyLmJ1ZmZlclNpemUoKSB9OworICAgIHJldHVybiBEYXRhIHsgZW5jb2Rlci5idWZmZXIoKSB9
OwogfQogCiBzdGF0aWMgaW5saW5lIEV4cGVjdGVkPFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBT
dHJpbmc+PiwgRXJyb3I+IGRlY29kZUNhY2hlc05hbWVzKGNvbnN0IERhdGEmIGRhdGEpCiB7Ci0g
ICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEuZGF0YSgpLCBkYXRhLnNp
emUoKSk7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKFNwYW4geyBkYXRh
LmRhdGEoKSwgZGF0YS5zaXplKCkgfSk7CiAgICAgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gY291
bnQ7CiAgICAgZGVjb2RlciA+PiBjb3VudDsKICAgICBpZiAoIWNvdW50KQpJbmRleDogU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURh
dGEuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3
IEBAIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogRGF0YSBEYXRhOjptYXBUb0ZpbGUoY29uc3Qg
U3RyaW5nJiBwYXRoKSBjb25zdAogewogICAgIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRs
ZSBoYW5kbGU7Ci0gICAgYXV0byBhcHBseURhdGEgPSBbJl0oY29uc3QgRnVuY3Rpb248Ym9vbChj
b25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIGFwcGxpZXIpIHsgYXBwbHkoYXBwbGllcik7IH07Cisg
ICAgYXV0byBhcHBseURhdGEgPSBbJl0oY29uc3QgRnVuY3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0
ZDo6Ynl0ZT4pPiYgYXBwbGllcikgeyBhcHBseShhcHBsaWVyKTsgfTsKICAgICBhdXRvIG1hcHBl
ZEZpbGUgPSBGaWxlU3lzdGVtOjptYXBUb0ZpbGUocGF0aCwgc2l6ZSgpLCBXVEZNb3ZlKGFwcGx5
RGF0YSksICZoYW5kbGUpOwogICAgIGlmICghbWFwcGVkRmlsZSkKICAgICAgICAgcmV0dXJuIHsg
fTsKQEAgLTg2LDkgKzg2LDkgQEAgRGF0YSBhZG9wdEFuZE1hcEZpbGUoRmlsZVN5c3RlbTo6UGxh
dGZvcgogU0hBMTo6RGlnZXN0IGNvbXB1dGVTSEExKGNvbnN0IERhdGEmIGRhdGEsIGNvbnN0IFNh
bHQmIHNhbHQpCiB7CiAgICAgU0hBMSBzaGExOwotICAgIHNoYTEuYWRkQnl0ZXMoc2FsdC5kYXRh
KCksIHNhbHQuc2l6ZSgpKTsKLSAgICBkYXRhLmFwcGx5KFsmc2hhMV0oY29uc3QgdWludDhfdCog
ZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhkYXRhLCBzaXplKTsK
KyAgICBzaGExLmFkZEJ5dGVzKHNhbHQpOworICAgIGRhdGEuYXBwbHkoWyZzaGExXShTcGFuPGNv
bnN0IHN0ZDo6Ynl0ZT4gZGF0YSkgeworICAgICAgICBzaGExLmFkZEJ5dGVzKGRhdGEpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9KTsKIApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgJKHJldmlzaW9uIDI3
ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8d3RmL0Zp
bGVTeXN0ZW0uaD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rpb25EaXNwYXRjaGVyLmg+CiAjaW5jbHVk
ZSA8d3RmL1NIQTEuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUgPHd0Zi9UaHJl
YWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBA
IC01NCw2ICs1NSwxMCBAQCBjbGFzcyBEYXRhIHsKIHB1YmxpYzoKICAgICBEYXRhKCkgeyB9CiAg
ICAgRGF0YShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKKyAgICBEYXRhKFNwYW48Y29uc3Qgc3Rk
OjpieXRlPiBkYXRhKQorICAgICAgICA6IERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90Kj4oZGF0YS5kYXRhKCkpLCBkYXRhLnNpemUoKSkKKyAgICB7CisgICAgfQogCiAgICAgfkRh
dGEoKSB7IH0KIApAQCAtNzksNyArODQsNyBAQCBwdWJsaWM6CiAKICAgICBEYXRhIHN1YnJhbmdl
KHNpemVfdCBvZmZzZXQsIHNpemVfdCkgY29uc3Q7CiAKLSAgICBib29sIGFwcGx5KGNvbnN0IEZ1
bmN0aW9uPGJvb2wgKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYpIGNvbnN0OworICAgIGJvb2wg
YXBwbHkoY29uc3QgRnVuY3Rpb248Ym9vbCAoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mKSBjb25z
dDsKIAogICAgIERhdGEgbWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkgY29uc3Q7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNv
Y29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlRGF0YUNvY29hLm1tCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNjksMTIgKzY5LDEyIEBAIGJvb2wgRGF0YTo6aXNOdWxsKCkgY29uc3QKICAg
ICByZXR1cm4gIW1fZGlzcGF0Y2hEYXRhOwogfQogCi1ib29sIERhdGE6OmFwcGx5KGNvbnN0IEZ1
bmN0aW9uPGJvb2wgKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYgYXBwbGllcikgY29uc3QKK2Jv
b2wgRGF0YTo6YXBwbHkoY29uc3QgRnVuY3Rpb248Ym9vbCAoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+
KT4mIGFwcGxpZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3NpemUpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICByZXR1cm4gZGlzcGF0Y2hfZGF0YV9hcHBseShtX2Rpc3BhdGNoRGF0YS5nZXQo
KSwgWyZhcHBsaWVyXShkaXNwYXRjaF9kYXRhX3QsIHNpemVfdCwgY29uc3Qgdm9pZCogZGF0YSwg
c2l6ZV90IHNpemUpIHsKLSAgICAgICAgcmV0dXJuIGFwcGxpZXIoc3RhdGljX2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KGRhdGEpLCBzaXplKTsKKyAgICAgICAgcmV0dXJuIGFwcGxpZXIoU3BhbiB7IHN0
YXRpY19jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGRhdGEpLCBzaXplIH0pOwogICAgIH0pOwogfQog
CkBAIC05NCwxNCArOTQsMTEgQEAgRGF0YSBjb25jYXRlbmF0ZShjb25zdCBEYXRhJiBhLCBjb25z
dCBEYQogCiBEYXRhIERhdGE6OmFkb3B0TWFwKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYg
bWFwcGVkRmlsZSwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkKQogewotICAgIHNp
emVfdCBzaXplID0gbWFwcGVkRmlsZS5zaXplKCk7Ci0gICAgdm9pZCogbWFwID0gbWFwcGVkRmls
ZS5sZWFrSGFuZGxlKCk7Ci0gICAgQVNTRVJUKG1hcCk7Ci0gICAgQVNTRVJUKG1hcCAhPSBNQVBf
RkFJTEVEKTsKKyAgICBhdXRvIG1hcCA9IG1hcHBlZEZpbGUubGVha0hhbmRsZSgpOworICAgIEFT
U0VSVChtYXAuZGF0YSgpKTsKKyAgICBBU1NFUlQobWFwLmRhdGEoKSAhPSBNQVBfRkFJTEVEKTsK
ICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmQpOwotICAgIGF1dG8gYm9keU1hcCA9IGFkb3B0
T1NPYmplY3QoZGlzcGF0Y2hfZGF0YV9jcmVhdGUobWFwLCBzaXplLCBkaXNwYXRjaF9nZXRfZ2xv
YmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCBbbWFwLCBzaXpl
XSB7Ci0gICAgICAgIG11bm1hcChtYXAsIHNpemUpOwotICAgIH0pKTsKKyAgICBhdXRvIGJvZHlN
YXAgPSBhZG9wdE9TT2JqZWN0KGRpc3BhdGNoX2RhdGFfY3JlYXRlKG1hcC5kYXRhKCksIG1hcC5z
aXplKCksIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlf
REVGQVVMVCwgMCksIERJU1BBVENIX0RBVEFfREVTVFJVQ1RPUl9NVU5NQVApKTsKICAgICByZXR1
cm4geyBXVEZNb3ZlKGJvZHlNYXApLCBEYXRhOjpCYWNraW5nOjpNYXAgfTsKIH0KIApJbmRleDog
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVFbnRyeS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
OSwxMCArOTksMTAgQEAgU3RvcmFnZTo6UmVjb3JkIEVudHJ5OjplbmNvZGVBc1N0b3JhZ2VSZQog
ICAgIAogICAgIGVuY29kZXIuZW5jb2RlQ2hlY2tzdW0oKTsKIAotICAgIERhdGEgaGVhZGVyKGVu
Y29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICBEYXRhIGhlYWRlciB7
IGVuY29kZXIuYnVmZmVyKCkgfTsKICAgICBEYXRhIGJvZHk7CiAgICAgaWYgKG1fYnVmZmVyKQot
ICAgICAgICBib2R5ID0geyBtX2J1ZmZlci0+ZGF0YSgpLCBtX2J1ZmZlci0+c2l6ZSgpIH07Cisg
ICAgICAgIGJvZHkgPSB7IG1fYnVmZmVyLT5ieXRlcygpIH07CiAKICAgICByZXR1cm4geyBtX2tl
eSwgbV90aW1lU3RhbXAsIGhlYWRlciwgYm9keSwgeyB9IH07CiB9CkBAIC0xMTEsNyArMTExLDcg
QEAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBFbnRyeTo6ZGVjb2RlU3RvcgogewogICAgIGF1dG8g
ZW50cnkgPSBtYWtlVW5pcXVlPEVudHJ5PihzdG9yYWdlRW50cnkpOwogCi0gICAgV1RGOjpQZXJz
aXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKHN0b3JhZ2VFbnRyeS5oZWFkZXIuZGF0YSgpLCBzdG9y
YWdlRW50cnkuaGVhZGVyLnNpemUoKSk7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBk
ZWNvZGVyIHsgU3BhbiB7IHN0b3JhZ2VFbnRyeS5oZWFkZXIuZGF0YSgpLCBzdG9yYWdlRW50cnku
aGVhZGVyLnNpemUoKSB9IH07CiAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNwb25z
ZTsKICAgICBpZiAoIVdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2U6OmRlY29kZShkZWNvZGVyLCBy
ZXNwb25zZSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpJbmRleDogU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVLZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxMyArODgsMTMgQEAgc3RhdGlj
IHZvaWQgaGFzaFN0cmluZyhTSEExJiBzaGExLCBjb25zdAogCiAgICAgaWYgKHN0cmluZy5pczhC
aXQoKSAmJiBzdHJpbmcuaXNBbGxBU0NJSSgpKSB7CiAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbnVs
bEJ5dGUgPSAwOwotICAgICAgICBzaGExLmFkZEJ5dGVzKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBz
dHJpbmcubGVuZ3RoKCkpOwotICAgICAgICBzaGExLmFkZEJ5dGVzKCZudWxsQnl0ZSwgMSk7Cisg
ICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcu
bGVuZ3RoKCkgfSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZudWxsQnl0ZSwgMSB9
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvIGNTdHJpbmcgPSBzdHJpbmcudXRm
OCgpOwogICAgIC8vIEluY2x1ZGUgdGVybWluYXRpbmcgbnVsbCBieXRlLgotICAgIHNoYTEuYWRk
Qnl0ZXMoY1N0cmluZy5kYXRhQXNVSW50OFB0cigpLCBjU3RyaW5nLmxlbmd0aCgpICsgMSk7Cisg
ICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgY1N0cmluZy5kYXRhQXNVSW50OFB0cigpLCBjU3RyaW5n
Lmxlbmd0aCgpICsgMSB9KTsKIH0KIAogS2V5OjpIYXNoVHlwZSBLZXk6OmNvbXB1dGVIYXNoKGNv
bnN0IFNhbHQmIHNhbHQpIGNvbnN0CkBAIC0xMDIsNyArMTAyLDcgQEAgS2V5OjpIYXNoVHlwZSBL
ZXk6OmNvbXB1dGVIYXNoKGNvbnN0IFNhbAogICAgIC8vIFdlIGRvbid0IHJlYWxseSBuZWVkIGEg
Y3J5cHRvZ3JhcGhpYyBoYXNoLiBUaGUga2V5IGlzIGFsd2F5cyB2ZXJpZmllZCBhZ2FpbnN0IHRo
ZSBlbnRyeSBoZWFkZXIuCiAgICAgLy8gU0hBMSBqdXN0IGhhcHBlbnMgdG8gYmUgc3VpdGFibHkg
c2l6ZWQsIGZhc3QgYW5kIGF2YWlsYWJsZS4KICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRC
eXRlcyhzYWx0LmRhdGEoKSwgc2FsdC5zaXplKCkpOworICAgIHNoYTEuYWRkQnl0ZXMoc2FsdCk7
CiAKICAgICBoYXNoU3RyaW5nKHNoYTEsIG1fcGFydGl0aW9uKTsKICAgICBoYXNoU3RyaW5nKHNo
YTEsIG1fdHlwZSk7CkBAIC0xMTcsNyArMTE3LDcgQEAgS2V5OjpIYXNoVHlwZSBLZXk6OmNvbXB1
dGVIYXNoKGNvbnN0IFNhbAogS2V5OjpIYXNoVHlwZSBLZXk6OmNvbXB1dGVQYXJ0aXRpb25IYXNo
KGNvbnN0IFNhbHQmIHNhbHQpIGNvbnN0CiB7CiAgICAgU0hBMSBzaGExOwotICAgIHNoYTEuYWRk
Qnl0ZXMoc2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKTsKKyAgICBzaGExLmFkZEJ5dGVzKHNhbHQp
OwogCiAgICAgaGFzaFN0cmluZyhzaGExLCBtX3BhcnRpdGlvbik7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVT
dG9yYWdlLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU0
LDggKzQ1NCw4IEBAIHN0cnVjdCBSZWNvcmRNZXRhRGF0YSB7CiBzdGF0aWMgV0FSTl9VTlVTRURf
UkVUVVJOIGJvb2wgZGVjb2RlUmVjb3JkTWV0YURhdGEoUmVjb3JkTWV0YURhdGEmIG1ldGFEYXRh
LCBjb25zdCBEYXRhJiBmaWxlRGF0YSkKIHsKICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAg
ICBmaWxlRGF0YS5hcHBseShbJm1ldGFEYXRhLCAmc3VjY2Vzc10oY29uc3QgdWludDhfdCogZGF0
YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNv
ZGVyKGRhdGEsIHNpemUpOworICAgIGZpbGVEYXRhLmFwcGx5KFsmbWV0YURhdGEsICZzdWNjZXNz
XShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkgeworICAgICAgICBXVEY6OlBlcnNpc3RlbmNl
OjpEZWNvZGVyIGRlY29kZXIoZGF0YSk7CiAgICAgICAgIAogICAgICAgICBzdGQ6Om9wdGlvbmFs
PHVuc2lnbmVkPiBjYWNoZVN0b3JhZ2VWZXJzaW9uOwogICAgICAgICBkZWNvZGVyID4+IGNhY2hl
U3RvcmFnZVZlcnNpb247CkBAIC01ODYsNyArNTg2LDcgQEAgc3RhdGljIERhdGEgZW5jb2RlUmVj
b3JkTWV0YURhdGEoY29uc3QgUgogCiAgICAgZW5jb2Rlci5lbmNvZGVDaGVja3N1bSgpOwogCi0g
ICAgcmV0dXJuIERhdGEoZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOwor
ICAgIHJldHVybiB7IGVuY29kZXIuYnVmZmVyKCkgfTsKIH0KIAogc3RkOjpvcHRpb25hbDxCbG9i
U3RvcmFnZTo6QmxvYj4gU3RvcmFnZTo6c3RvcmVCb2R5QXNCbG9iKFdyaXRlT3BlcmF0aW9uJiB3
cml0ZU9wZXJhdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnku
Y3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTIzLDE0ICsxMjMsMTQgQEAgU3RvcmFnZTo6UmVjb3JkIFN1YnJlc291cmNlc0VudHJ5OjplbmNv
ZAogCiAgICAgZW5jb2Rlci5lbmNvZGVDaGVja3N1bSgpOwogCi0gICAgcmV0dXJuIHsgbV9rZXks
IG1fdGltZVN0YW1wLCB7IGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpIH0s
IHsgfSwgeyB9fTsKKyAgICByZXR1cm4geyBtX2tleSwgbV90aW1lU3RhbXAsIHsgZW5jb2Rlci5i
dWZmZXIoKSB9LCB7IH0sIHsgfX07CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTdWJyZXNvdXJjZXNF
bnRyeT4gU3VicmVzb3VyY2VzRW50cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQoY29uc3QgU3RvcmFn
ZTo6UmVjb3JkJiBzdG9yYWdlRW50cnkpCiB7CiAgICAgYXV0byBlbnRyeSA9IG1ha2VVbmlxdWU8
U3VicmVzb3VyY2VzRW50cnk+KHN0b3JhZ2VFbnRyeSk7CiAKLSAgICBXVEY6OlBlcnNpc3RlbmNl
OjpEZWNvZGVyIGRlY29kZXIoc3RvcmFnZUVudHJ5LmhlYWRlci5kYXRhKCksIHN0b3JhZ2VFbnRy
eS5oZWFkZXIuc2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIg
eyBTcGFuIHsgc3RvcmFnZUVudHJ5LmhlYWRlci5kYXRhKCksIHN0b3JhZ2VFbnRyeS5oZWFkZXIu
c2l6ZSgpIH0gfTsKICAgICBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxTdWJyZXNvdXJjZUluZm8+PiBz
dWJyZXNvdXJjZXM7CiAgICAgZGVjb2RlciA+PiBzdWJyZXNvdXJjZXM7CiAgICAgaWYgKCFzdWJy
ZXNvdXJjZXMpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2Rl
ci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1
bWVudENvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDEzICs3OSwxMyBAQCBzdHJ1Y3QgQXJn
dW1lbnRDb2RlcjxULCB0eXBlbmFtZSBzdGQ6OmVuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5j
b2Rlcj4KICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgVCB2YWx1ZSkK
ICAgICB7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZ2YWx1ZSksIHNpemVvZihUKSwgYWxpZ25vZihUKSk7Cisg
ICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmdmFsdWUsIDEgfSwg
YWxpZ25vZihUKSk7CiAgICAgfQogCiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8VD4gZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCiAgICAgewogICAgICAgICBUIHJlc3VsdDsKLSAgICAgICAgaWYg
KGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+
KCZyZXN1bHQpLCBzaXplb2YoVCksIGFsaWdub2YoVCkpKQorICAgICAgICBpZiAoZGVjb2Rlci5k
ZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZyZXN1bHQsIDEgfSkpCiAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8
Q1N0cmluZz46OmVuY29kZShFbmNvCiAKICAgICB1aW50MzJfdCBsZW5ndGggPSBzdHJpbmcubGVu
Z3RoKCk7CiAgICAgZW5jb2RlciA8PCBsZW5ndGg7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoc3RyaW5nLmRhdGFBc1VJbnQ4UHRyKCksIGxlbmd0aCwgMSk7CisgICAgZW5jb2Rl
ci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RyaW5nLmJ5dGVzKCksIDEpOwogfQogCiBXQVJOX1VO
VVNFRF9SRVRVUk4gYm9vbCBBcmd1bWVudENvZGVyPENTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlciwgQ1N0cmluZyYgcmVzdWx0KQpAQCAtMTAzLDcgKzEwMyw3IEBAIFdBUk5fVU5VU0VE
X1JFVFVSTiBib29sIEFyZ3VtZW50Q29kZXI8Q1MKIAogICAgIGNoYXIqIGJ1ZmZlcjsKICAgICBD
U3RyaW5nIHN0cmluZyA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIp
OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2Fz
dDx1aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoLCAxKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKFNwYW4geyBidWZmZXIsIGxlbmd0aCB9LCAxKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgcmVzdWx0ID0gc3RyaW5nOwpAQCAtMTIzLDExICsxMjMsNyBAQCB2
b2lkIEFyZ3VtZW50Q29kZXI8U3RyaW5nPjo6ZW5jb2RlKEVuY29kCiAgICAgYm9vbCBpczhCaXQg
PSBzdHJpbmcuaXM4Qml0KCk7CiAKICAgICBlbmNvZGVyIDw8IGxlbmd0aCA8PCBpczhCaXQ7Ci0K
LSAgICBpZiAoaXM4Qml0KQotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShz
dHJpbmcuY2hhcmFjdGVyczgoKSwgbGVuZ3RoICogc2l6ZW9mKExDaGFyKSwgYWxpZ25vZihMQ2hh
cikpOwotICAgIGVsc2UKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnMxNigpKSwgbGVu
Z3RoICogc2l6ZW9mKFVDaGFyKSwgYWxpZ25vZihVQ2hhcikpOworICAgIGVuY29kZXIuZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKHN0cmluZy5ieXRlcygpKTsKIH0KIHRlbXBsYXRlCiB2b2lkIEFyZ3Vt
ZW50Q29kZXI8U3RyaW5nPjo6ZW5jb2RlPEVuY29kZXI+KEVuY29kZXImLCBjb25zdCBTdHJpbmcm
KTsKQEAgLTE0Myw3ICsxMzksNyBAQCBzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8U3RyaW5n
PiBkZWNvCiAgICAgCiAgICAgQ2hhcmFjdGVyVHlwZSogYnVmZmVyOwogICAgIFN0cmluZyBzdHJp
bmcgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlm
ICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJhY3RlclR5cGUpLCBhbGlnbm9mKENoYXJh
Y3RlclR5cGUpKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4g
eyBidWZmZXIsIGxlbmd0aCB9KSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAK
ICAgICByZXR1cm4gc3RyaW5nOwpAQCAtMTgxLDEyICsxNzcsMTIgQEAgV0FSTl9VTlVTRURfUkVU
VVJOIGJvb2wgQXJndW1lbnRDb2RlcjxTdAogCiB2b2lkIEFyZ3VtZW50Q29kZXI8U0hBMTo6RGln
ZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNIQTE6OkRpZ2VzdCYgZGlnZXN0
KQogewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNp
emVvZihkaWdlc3QpLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShkaWdl
c3QsIDEpOwogfQogCiBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBBcmd1bWVudENvZGVyPFNIQTE6
OkRpZ2VzdD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTSEExOjpEaWdlc3QmIGRpZ2VzdCkK
IHsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0LmRhdGEo
KSwgc2l6ZW9mKGRpZ2VzdCksIDEpOworICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVu
Z3RoRGF0YShkaWdlc3QsIDEpOwogfQogCiAjaWYgSEFWRShBVURJVF9UT0tFTikKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaAkocmV2aXNpb24gMjc4
ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaAkod29y
a2luZyBjb3B5KQpAQCAtNDUsMTIgKzQ1LDEyIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBTaW1wbGVBcmd1bWUKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgogICAgIHN0YXRp
YyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBUJiB0KQogICAgIHsKLSAgICAg
ICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50OF90Kj4oJnQpLCBzaXplb2YoVCksIGFsaWdub2YoVCkpOworICAgICAgICBlbmNvZGVyLmVu
Y29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJnQsIDEgfSk7CiAgICAgfQogCiAgICAgc3RhdGlj
IFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBUJiB0KQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ0KSwgc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKKyAgICAg
ICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmdCwgMSB9KTsK
ICAgICB9CiB9OwogCkBAIC02MSwxMyArNjEsMTQgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IEV4dGVudD4gc3RydQogICAgIHsKICAgICAgICAgaWYgKCFFeHRlbnQpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGFycmF5UmVmZXJlbmNlLmRhdGEoKSksIGFycmF5UmVm
ZXJlbmNlLnNpemUoKSAqIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAgIGVuY29kZXIu
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBhcnJheVJlZmVyZW5jZS5kYXRhKCksIGFycmF5
UmVmZXJlbmNlLnNpemUoKSB9KTsKICAgICB9CiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8QXJy
YXlSZWZlcmVuY2VUeXBlPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7CiAgICAgICAg
IGlmICghRXh0ZW50KQogICAgICAgICAgICAgcmV0dXJuIEFycmF5UmVmZXJlbmNlVHlwZSgpOwot
ICAgICAgICBjb25zdCB1aW50OF90KiBkYXRhID0gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aFJl
ZmVyZW5jZShFeHRlbnQgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpOworCisgICAgICAgIGNvbnN0
IGF1dG8qIGRhdGEgPSBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoUmVmZXJlbmNlKEV4dGVudCAq
IHNpemVvZihUKSwgYWxpZ25vZihUKSk7CiAgICAgICAgIGlmICghZGF0YSkKICAgICAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIHJldHVybiBBcnJheVJlZmVyZW5jZVR5cGUo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4oZGF0YSksIEV4dGVudCk7CkBAIC04Miw3ICs4Myw3
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBBcmd1bWVudENvZGUKICAgICAgICAgZW5j
b2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYXJyYXlSZWZlcmVuY2Uuc2l6ZSgpKTsKICAg
ICAgICAgaWYgKCFhcnJheVJlZmVyZW5jZS5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDhfdCo+KGFycmF5UmVmZXJlbmNlLmRhdGEoKSksIGFycmF5UmVmZXJlbmNlLnNpemUo
KSAqIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKFNwYW4geyBhcnJheVJlZmVyZW5jZS5kYXRhKCksIGFycmF5UmVmZXJlbmNlLnNp
emUoKSB9KTsKICAgICB9CiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8QXJyYXlSZWZlcmVuY2VU
eXBlPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7CkBAIC05Niw3ICs5Nyw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBBcmd1bWVudENvZGUKICAgICAgICAgaWYgKFVOTElL
RUxZKGRhdGFTaXplLmhhc092ZXJmbG93ZWQoKSkpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwogCi0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEgPSBkZWNvZGVyLmRlY29kZUZp
eGVkTGVuZ3RoUmVmZXJlbmNlKGRhdGFTaXplLCBhbGlnbm9mKFQpKTsKKyAgICAgICAgY29uc3Qg
YXV0byogZGF0YSA9IGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhSZWZlcmVuY2UoZGF0YVNpemUs
IGFsaWdub2YoVCkpOwogICAgICAgICBpZiAoIWRhdGEpCiAgICAgICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogICAgICAgICByZXR1cm4gQXJyYXlSZWZlcmVuY2VUeXBlKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgVCo+KGRhdGEpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KHNpemUpKTsKQEAgLTQy
Myw3ICs0MjQsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpCiAg
ICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mIHZlY3RvcikKICAg
ICB7CiAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZlY3Rvci5zaXpl
KCkpOwotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPih2ZWN0b3IuZGF0YSgpKSwgdmVjdG9yLnNpemUoKSAqIHNpemVv
ZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KHZlY3RvciwgYWxpZ25vZihUKSk7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBXQVJOX1VOVVNF
RF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiYgdmVjdG9yKQpAQCAtNDQ2LDcg
KzQ0Nyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICAg
ICAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5
PiB0ZW1wOwogICAgICAgICB0ZW1wLmdyb3coc2l6ZSk7CiAKLSAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPih0ZW1wLmRh
dGEoKSksIHNpemUgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpKQorICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHRlbXApKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgICAgIHZlY3Rvci5zd2FwKHRlbXApOwpAQCAtNDczLDcgKzQ3NCw3IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICAgICAgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiB2ZWN0b3I7CiAgICAg
ICAgIHZlY3Rvci5ncm93KHNpemUpOwogCi0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhl
ZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4odmVjdG9yLmRhdGEoKSksIHNp
emUgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKHZlY3RvcikpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwogCiAgICAgICAgIHJldHVybiB2ZWN0b3I7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0lQQy9BcnJheVJlZmVyZW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vSVBDL0FycmF5UmVmZXJlbmNlLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL0FycmF5UmVmZXJlbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYg
KzMwLDggQEAKIAogbmFtZXNwYWNlIElQQyB7CiAKKy8vIEZJWE1FOiBSZXBsYWNlIHdpdGggPHd0
Zi9TcGFuLmg+CisKIGlubGluZSBjb25zdGV4cHIgc2l6ZV90IGFycmF5UmVmZXJlbmNlRHluYW1p
Y0V4dGVudCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCk7CiAKIHRlbXBsYXRl
IDx0eXBlbmFtZSBULCBzaXplX3QgRXh0ZW50ID0gYXJyYXlSZWZlcmVuY2VEeW5hbWljRXh0ZW50
PgpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5jcHAJKHJldmlzaW9uIDI3
ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMDYsMTMgKzIwNiwxMyBAQCBib29sIERlY29kZXI6OmJ1ZmZlcklzTGFyZ2VF
bm91Z2hUb0NvbnRhCiAgICAgcmV0dXJuIGFsaWduZWRCdWZmZXJJc0xhcmdlRW5vdWdoVG9Db250
YWluKHJvdW5kVXBUb0FsaWdubWVudChtX2J1ZmZlclBvcywgYWxpZ25tZW50KSwgbV9idWZmZXIs
IG1fYnVmZmVyRW5kLCBzaXplKTsKIH0KIAotYm9vbCBEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0
aERhdGEodWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQpCitib29s
IERlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPHN0ZDo6Ynl0ZT4gZGF0YSwgc2l6
ZV90IGFsaWdubWVudCkKIHsKLSAgICBpZiAoIWFsaWduQnVmZmVyUG9zaXRpb24oYWxpZ25tZW50
LCBzaXplKSkKKyAgICBpZiAoIWFsaWduQnVmZmVyUG9zaXRpb24oYWxpZ25tZW50LCBkYXRhLnNp
emUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1lbWNweShkYXRhLCBtX2J1ZmZl
clBvcywgc2l6ZSk7Ci0gICAgbV9idWZmZXJQb3MgKz0gc2l6ZTsKKyAgICBtZW1jcHkoZGF0YS5k
YXRhKCksIG1fYnVmZmVyUG9zLCBkYXRhLnNpemUoKSk7CisgICAgbV9idWZmZXJQb3MgKz0gZGF0
YS5zaXplKCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL0RlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0lQQy9EZWNvZGVyLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vSVBDL0RlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksMTMgQEAgcHVibGlj
OgogICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBt
X2J1ZmZlclBvcyAhPSBudWxscHRyOyB9CiAgICAgdm9pZCBtYXJrSW52YWxpZCgpIHsgbV9idWZm
ZXJQb3MgPSBudWxscHRyOyB9CiAKLSAgICBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVG
aXhlZExlbmd0aERhdGEodWludDhfdCogZGF0YSwgc2l6ZV90LCBzaXplX3QgYWxpZ25tZW50KTsK
KyAgICBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVGaXhlZExlbmd0aERhdGEoU3Bhbjxz
dGQ6OmJ5dGU+LCBzaXplX3QgYWxpZ25tZW50KTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CisgICAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBk
YXRhLCBzaXplX3QgYWxpZ25tZW50ID0gYWxpZ25vZih0eXBlbmFtZSBkZWNsdHlwZShTcGFuIHsg
c3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pOjp2YWx1ZV90eXBlKSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBkZWNvZGVGaXhlZExlbmd0aERhdGEoYXNXcml0YWJsZUJ5dGVzKFNwYW4geyBzdGQ6OmZv
cndhcmQ8VD4oZGF0YSkgfSksIGFsaWdubWVudCk7CisgICAgfQogCiAgICAgLy8gVGhlIGRhdGEg
aW4gdGhlIHJldHVybmVkIHBvaW50ZXIgaGVyZSB3aWxsIG9ubHkgYmUgdmFsaWQgZm9yIHRoZSBs
aWZldGltZSBvZiB0aGUgRGVjb2RlciBvYmplY3QuCiAgICAgLy8gUmV0dXJucyBudWxscHRyIG9u
IGZhaWx1cmUuCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIwMiwxMiArMjAyLDEyIEBAIHVpbnQ4X3QqIEVuY29kZXI6Omdy
b3coc2l6ZV90IGFsaWdubWVudCwKICAgICByZXR1cm4gbV9idWZmZXIgKyBhbGlnbmVkU2l6ZTsK
IH0KIAotdm9pZCBFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCog
ZGF0YSwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQpCit2b2lkIEVuY29kZXI6OmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSwgc2l6ZV90IGFsaWdu
bWVudCkKIHsKLSAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZGF0YSkg
JSBhbGlnbm1lbnQpKTsKKyAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
ZGF0YS5kYXRhKCkpICUgYWxpZ25tZW50KSk7CiAKLSAgICB1aW50OF90KiBidWZmZXIgPSBncm93
KGFsaWdubWVudCwgc2l6ZSk7Ci0gICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7CisgICAg
YXV0byogYnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQsIGRhdGEuc2l6ZSgpKTsKKyAgICBtZW1jcHko
YnVmZmVyLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwogfQogCiB2b2lkIEVuY29kZXI6OmFk
ZEF0dGFjaG1lbnQoQXR0YWNobWVudCYmIGF0dGFjaG1lbnQpCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvRW5jb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0lQQy9FbmNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNp
bmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSVBDIHsKQEAgLTYwLDcgKzYxLDEzIEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgd3JhcEZvclRlc3RpbmcoVW5pcXVlUmVmPEVuY29kZXI+JiYp
OwogCi0gICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwg
c2l6ZV90LCBzaXplX3QgYWxpZ25tZW50KTsKKyAgICB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0
YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSwgc2l6ZV90IGFsaWdubWVudCk7CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBk
YXRhLCBzaXplX3QgYWxpZ25tZW50ID0gYWxpZ25vZih0eXBlbmFtZSBkZWNsdHlwZShTcGFuIHsg
c3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pOjp2YWx1ZV90eXBlKSkKKyAgICB7CisgICAgICAgIGVu
Y29kZUZpeGVkTGVuZ3RoRGF0YShhc0J5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkg
fSksIGFsaWdubWVudCk7CisgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBF
bmNvZGVyJiBvcGVyYXRvcjw8KFQmJiB0KQpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9J
UEMvU2hhcmVkQnVmZmVyQ29weS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvU2hhcmVkQnVmZmVyQ29weS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1NoYXJlZEJ1ZmZlckNvcHkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Myw3ICs0Myw3IEBAIHZvaWQgU2hhcmVkQnVmZmVyQ29weTo6ZW5jb2RlKEVuY29kZXIm
IGUKICAgICBpZiAoIWJ1ZmZlclNpemUpCiAgICAgICAgIHJldHVybjsKICAgICBmb3IgKGF1dG8m
IHNlZ21lbnQgOiAqbV9idWZmZXIpCi0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKHNlZ21lbnQuc2VnbWVudC0+ZGF0YSgpLCBzZWdtZW50LnNlZ21lbnQtPnNpemUoKSwgMSk7
CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHNlZ21lbnQuc2VnbWVudC0+
Ynl0ZXMoKSwgMSk7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8U2hhcmVkQnVmZmVyQ29weT4gU2hhcmVk
QnVmZmVyQ29weTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uRW5jb2Rlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25FbmNvZGVyLmgJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rp
b25FbmNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUg
IkFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiTWVzc2FnZU5hbWVzLmgiCisjaW5jbHVkZSA8
d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBJ
UEMgewpAQCAtNTMsMjIgKzU0LDI4IEBAIHB1YmxpYzoKIAogICAgIH5TdHJlYW1Db25uZWN0aW9u
RW5jb2RlcigpID0gZGVmYXVsdDsKIAotICAgIGJvb2wgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNv
bnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50KQorICAgIGJv
b2wgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhLCBzaXpl
X3QgYWxpZ25tZW50KQogICAgIHsKICAgICAgICAgc2l6ZV90IGJ1ZmZlclBvaW50ZXIgPSBzdGF0
aWNfY2FzdDxzaXplX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fYnVmZmVyICsgbV9l
bmNvZGVkU2l6ZSkpOwogICAgICAgICBzaXplX3QgbmV3QnVmZmVyUG9pbnRlciA9IHJvdW5kVXBU
b011bHRpcGxlT2YoYWxpZ25tZW50LCBidWZmZXJQb2ludGVyKTsKICAgICAgICAgaWYgKG5ld0J1
ZmZlclBvaW50ZXIgPCBidWZmZXJQb2ludGVyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBpbnRwdHJfdCBhbGlnbmVkU2l6ZSA9IG1fZW5jb2RlZFNpemUgKyAobmV3QnVmZmVy
UG9pbnRlciAtIGJ1ZmZlclBvaW50ZXIpOwotICAgICAgICBpZiAoIXJlc2VydmUoYWxpZ25lZFNp
emUsIHNpemUpKQorICAgICAgICBpZiAoIXJlc2VydmUoYWxpZ25lZFNpemUsIGRhdGEuc2l6ZSgp
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdWludDhfdCogYnVmZmVyID0g
bV9idWZmZXIgKyBhbGlnbmVkU2l6ZTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6
ZSk7Ci0gICAgICAgIG1fZW5jb2RlZFNpemUgPSBhbGlnbmVkU2l6ZSArIHNpemU7CisgICAgICAg
IGF1dG8qIGJ1ZmZlciA9IG1fYnVmZmVyICsgYWxpZ25lZFNpemU7CisgICAgICAgIG1lbWNweShi
dWZmZXIsIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgICAgIG1fZW5jb2RlZFNpemUg
PSBhbGlnbmVkU2l6ZSArIGRhdGEuc2l6ZSgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKFQmJiBkYXRhLCBzaXplX3QgYWxpZ25tZW50ID0gYWxpZ25vZihUKSkKKyAgICB7CisgICAg
ICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShhc0J5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4o
ZGF0YSkgfSksIGFsaWdubWVudCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
ICAgICBTdHJlYW1Db25uZWN0aW9uRW5jb2RlciYgb3BlcmF0b3I8PChUJiYgdCkKICAgICB7CiAg
ICAgICAgIEFyZ3VtZW50Q29kZXI8c3RkOjpyZW1vdmVfY29uc3RfdDxzdGQ6OnJlbW92ZV9yZWZl
cmVuY2VfdDxUPj4sIHZvaWQ+OjplbmNvZGUoKnRoaXMsIHN0ZDo6Zm9yd2FyZDxUPih0KSk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVu
dENvZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw3ICsxNDQsNyBAQCBzdGF0aWMgdm9p
ZCBlbmNvZGVTaGFyZWRCdWZmZXIoRW5jb2RlciYgCiAgICAgLy8gb3ZlciB0aGUgSVBDLiBDb25u
ZWN0aW9uVW5peC5jcHAgYWxyZWFkeSB1c2VzIHNoYXJlZCBtZW1vcnkgdG8gc2VuZCBhbnkgSVBD
IG1lc3NhZ2UgdGhhdCBpcwogICAgIC8vIHRvbyBsYXJnZS4gU2VlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg1NzEuCiAgICAgZm9yIChjb25zdCBhdXRvJiBlbGVt
ZW50IDogKmJ1ZmZlcikKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoZWxl
bWVudC5zZWdtZW50LT5kYXRhKCksIGVsZW1lbnQuc2VnbWVudC0+c2l6ZSgpLCAxKTsKKyAgICAg
ICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoZWxlbWVudC5zZWdtZW50LT5ieXRlcygp
LCAxKTsKICNlbHNlCiAgICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOwogICAgIGF1dG8g
c2hhcmVkTWVtb3J5QnVmZmVyID0gU2hhcmVkTWVtb3J5Ojpjb3B5QnVmZmVyKCpidWZmZXIpOwpA
QCAtMTgwLDcgKzE4MCw3IEBAIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVT
aGEKIAogICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAgIGRhdGEuZ3JvdyhidWZmZXJTaXpl
KTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGRhdGEuZGF0YSgpLCBk
YXRhLnNpemUoKSwgMSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShk
YXRhLCAxKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYnVmZmVyID0gU2hhcmVkQnVm
ZmVyOjpjcmVhdGUoV1RGTW92ZShkYXRhKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9t
YWMvQXV4aWxpYXJ5UHJvY2Vzc01hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1No
YXJlZC9tYWMvQXV4aWxpYXJ5UHJvY2Vzc01hYy5tbQkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dlYktpdC9TaGFyZWQvbWFjL0F1eGlsaWFyeVByb2Nlc3NNYWMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTMyMSw3ICszMjEsNyBAQCBzdGF0aWMgU3RyaW5nIHNhbmRib3hGaWxlUGF0aChjb25z
dCBTdHJpCiAgICAgY3J5cHRvLT5hZGRCeXRlcyhoZWFkZXIuZGF0YSgpLCBoZWFkZXIubGVuZ3Ro
KCkpOwogICAgIGF1dG8gaGFzaCA9IGNyeXB0by0+Y29tcHV0ZUhhc2goKTsKIAotICAgIHJldHVy
biBtYWtlU3RyaW5nKGRpcmVjdG9yeVBhdGgsICIvQ29tcGlsZWRTYW5kYm94KyIsIGJhc2U2NFVS
TEVuY29kZWQoaGFzaC5kYXRhKCksIGhhc2guc2l6ZSgpKSk7CisgICAgcmV0dXJuIG1ha2VTdHJp
bmcoZGlyZWN0b3J5UGF0aCwgIi9Db21waWxlZFNhbmRib3grIiwgYmFzZTY0VVJMRW5jb2RlZCho
YXNoKSk7CiB9CiAKIHN0YXRpYyBib29sIGVuc3VyZVNhbmRib3hDYWNoZURpcmVjdG9yeShjb25z
dCBTYW5kYm94SW5mbyYgaW5mbykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9XZWJD
b3JlQXJndW1lbnRDb2RlcnNXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hh
cmVkL3dpbi9XZWJDb3JlQXJndW1lbnRDb2RlcnNXaW4uY3BwCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vV2ViQ29yZUFyZ3VtZW50Q29kZXJzV2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTEsMTIgKzUxLDEyIEBAIHN0ZDo6b3B0aW9uYWw8Rm9udEF0dHJp
YnV0ZXM+IEFyZ3VtZW50Q28KIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8TE9HRk9O
VD4gewogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBMT0dG
T05UJiBsb2dGb250KQogICAgIHsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERh
dGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oJmxvZ0ZvbnQpLCBzaXplb2YgbG9n
Rm9udCwgMSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAm
bG9nRm9udCwgMSB9LCAxKTsKICAgICB9CiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TE9HRk9O
VD4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewogICAgICAgICBMT0dGT05UIGxvZ0Zv
bnQ7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oJmxvZ0ZvbnQpLCBzaXplb2YobG9nRm9udCksIDEpKQorICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmbG9nRm9udCwgMSB9
LCAxKSkKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIHJldHVybiBs
b2dGb250OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElDb250
ZW50UnVsZUxpc3RTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTMxLDE4ICsxMzEsMjAgQEAgc3RhdGljIFdlYktpdDo6TmV0d29y
a0NhY2hlOjpEYXRhIGVuY29kZQogICAgIGVuY29kZXIgPDwgbWV0YURhdGEuY29uZGl0aW9uZWRG
aWx0ZXJzQnl0ZWNvZGVTaXplOwogICAgIGVuY29kZXIgPDwgbWV0YURhdGEuY29uZGl0aW9uc0Fw
cGx5T25seVRvRG9tYWluOwogCi0gICAgQVNTRVJUKGVuY29kZXIuYnVmZmVyU2l6ZSgpID09IENv
bnRlbnRSdWxlTGlzdEZpbGVIZWFkZXJTaXplKTsKLSAgICByZXR1cm4gV2ViS2l0OjpOZXR3b3Jr
Q2FjaGU6OkRhdGEoZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOworICAg
IEFTU0VSVChlbmNvZGVyLmJ1ZmZlcigpLnNpemUoKSA9PSBDb250ZW50UnVsZUxpc3RGaWxlSGVh
ZGVyU2l6ZSk7CisgICAgcmV0dXJuIFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhIHsgZW5jb2Rl
ci5idWZmZXIoKSB9OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGdldERhdGEoY29u
c3QgVCYsIGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCosIHNpemVfdCk+Jik7Ci10
ZW1wbGF0ZTw+IHZvaWQgZ2V0RGF0YShjb25zdCBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YSYg
ZGF0YSwgY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIGZ1bmN0
aW9uKQordGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBnZXREYXRhKGNvbnN0IFQmLCBjb25zdCBG
dW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+Jik7CisKK3RlbXBsYXRlPD4gdm9p
ZCBnZXREYXRhKGNvbnN0IFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhJiBkYXRhLCBjb25zdCBG
dW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+JiBmdW5jdGlvbikKIHsKICAgICBk
YXRhLmFwcGx5KGZ1bmN0aW9uKTsKIH0KLXRlbXBsYXRlPD4gdm9pZCBnZXREYXRhKGNvbnN0IFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlciYgZGF0YSwgY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50
OF90Kiwgc2l6ZV90KT4mIGZ1bmN0aW9uKQorCit0ZW1wbGF0ZTw+IHZvaWQgZ2V0RGF0YShjb25z
dCBXZWJDb3JlOjpTaGFyZWRCdWZmZXImIGRhdGEsIGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxj
b25zdCBzdGQ6OmJ5dGU+KT4mIGZ1bmN0aW9uKQogewotICAgIGZ1bmN0aW9uKGRhdGEuZGF0YSgp
LCBkYXRhLnNpemUoKSk7CisgICAgZnVuY3Rpb24oZGF0YS5ieXRlcygpKTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgVD4KQEAgLTE1MCwxMyArMTUyLDEzIEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFs
PENvbnRlbnRSdWxlTGlzdE1ldGEKIHsKICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKICAgICBD
b250ZW50UnVsZUxpc3RNZXRhRGF0YSBtZXRhRGF0YTsKLSAgICBnZXREYXRhKGZpbGVEYXRhLCBb
Jm1ldGFEYXRhLCAmc3VjY2VzcywgJmZpbGVEYXRhXShjb25zdCB1aW50OF90KiBkYXRhLCBzaXpl
X3Qgc2l6ZSkgeworICAgIGdldERhdGEoZmlsZURhdGEsIFsmbWV0YURhdGEsICZzdWNjZXNzLCAm
ZmlsZURhdGFdKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhKSB7CiAgICAgICAgIC8vIFRoZSBm
aWxlIGRhdGEgc2hvdWxkIGJlIG1hcHBlZCBpbnRvIG9uZSBjb250aW51b3VzIG1lbW9yeSBzZWdt
ZW50IHNvIHRoZSBzaXplCiAgICAgICAgIC8vIHBhc3NlZCB0byB0aGUgYXBwbGllciBzaG91bGQg
YWx3YXlzIGVxdWFsIHRoZSBkYXRhIHNpemUuCi0gICAgICAgIGlmIChzaXplICE9IGZpbGVEYXRh
LnNpemUoKSkKKyAgICAgICAgaWYgKGRhdGEuc2l6ZSgpICE9IGZpbGVEYXRhLnNpemUoKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNv
ZGVyIGRlY29kZXIoZGF0YSwgc2l6ZSk7CisgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29k
ZXIgZGVjb2RlciB7IGRhdGEgfTsKICAgICAgICAgCiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dWlu
dDMyX3Q+IHZlcnNpb247CiAgICAgICAgIGRlY29kZXIgPj4gdmVyc2lvbjsKQEAgLTIyOCw4ICsy
MzAsOCBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxNYXBwZWREYXRhPiBvcGVuQW5kCiBzdGF0aWMg
Ym9vbCB3cml0ZURhdGFUb0ZpbGUoY29uc3QgV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGEmIGZp
bGVEYXRhLCBQbGF0Zm9ybUZpbGVIYW5kbGUgZmQpCiB7CiAgICAgYm9vbCBzdWNjZXNzID0gdHJ1
ZTsKLSAgICBmaWxlRGF0YS5hcHBseShbZmQsICZzdWNjZXNzXShjb25zdCB1aW50OF90KiBkYXRh
LCBzaXplX3Qgc2l6ZSkgewotICAgICAgICBpZiAod3JpdGVUb0ZpbGUoZmQsIGRhdGEsIHNpemUp
ID09IC0xKSB7CisgICAgZmlsZURhdGEuYXBwbHkoW2ZkLCAmc3VjY2Vzc10oU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+IGRhdGEpIHsKKyAgICAgICAgaWYgKHdyaXRlVG9GaWxlKGZkLCBkYXRhLmRhdGEo
KSwgZGF0YS5zaXplKCkpID09IC0xKSB7CiAgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNh
dGlvblBhbmVsLm1tCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQkod29ya2luZyBjb3B5KQpA
QCAtNzAsNyArNzAsNyBAQCBzdGF0aWMgUmV0YWluUHRyPE5TRGF0YT4gcHJvZHVjZUNsaWVudERh
CiAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpAIndlYmF1dGhuLmdldCIgZm9yS2V5OkAi
dHlwZSJdOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0
OmJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNoYWxsZW5nZS5ieXRlcywgY2hhbGxlbmdlLmxlbmd0
aCkgZm9yS2V5OkAiY2hhbGxlbmdlIl07CisgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0OmJhc2U2
NFVSTEVuY29kZVRvU3RyaW5nKFNwYW4geyBzdGF0aWNfY2FzdDxjb25zdCBzdGQ6OmJ5dGUqPihj
aGFsbGVuZ2UuYnl0ZXMpLCBjaGFsbGVuZ2UubGVuZ3RoIH0pIGZvcktleTpAImNoYWxsZW5nZSJd
OwogICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpvcmlnaW4gZm9yS2V5OkAib3JpZ2luIl07CiAK
ICAgICByZXR1cm4gW05TSlNPTlNlcmlhbGl6YXRpb24gZGF0YVdpdGhKU09OT2JqZWN0OmRpY3Rp
b25hcnkuZ2V0KCkgb3B0aW9uczpOU0pTT05Xcml0aW5nU29ydGVkS2V5cyBlcnJvcjpuaWxdOwpJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9j
YWxBdXRoZW50aWNhdG9yLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsQXV0aGVudGljYXRvci5tbQkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29j
b2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBA
IHN0YXRpYyBpbmxpbmUgSGFzaFNldDxTdHJpbmc+IHByb2R1Y2VIYXMKICAgICBIYXNoU2V0PFN0
cmluZz4gcmVzdWx0OwogICAgIGZvciAoYXV0byYgY3JlZGVudGlhbERlc2NyaXB0b3IgOiBjcmVk
ZW50aWFsRGVzY3JpcHRvcnMpIHsKICAgICAgICAgaWYgKGVtcHR5VHJhbnNwb3J0c09yQ29udGFp
bihjcmVkZW50aWFsRGVzY3JpcHRvci50cmFuc3BvcnRzLCBBdXRoZW50aWNhdG9yVHJhbnNwb3J0
OjpJbnRlcm5hbCkgJiYgY3JlZGVudGlhbERlc2NyaXB0b3IudHlwZSA9PSBQdWJsaWNLZXlDcmVk
ZW50aWFsVHlwZTo6UHVibGljS2V5ICYmIGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9yLnNp
emUoKSA9PSBjcmVkZW50aWFsSWRMZW5ndGgpCi0gICAgICAgICAgICByZXN1bHQuYWRkKGJhc2U2
NEVuY29kZVRvU3RyaW5nKGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9yLmRhdGEoKSwgY3Jl
ZGVudGlhbERlc2NyaXB0b3IuaWRWZWN0b3Iuc2l6ZSgpKSk7CisgICAgICAgICAgICByZXN1bHQu
YWRkKGJhc2U2NEVuY29kZVRvU3RyaW5nKGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9yKSk7
CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0yMzMsNyArMjMzLDcgQEAgdm9pZCBM
b2NhbEF1dGhlbnRpY2F0b3I6Om1ha2VDcmVkZW50aWFsKAogICAgICAgICBpZiAobm90Rm91bmQg
IT0gbV9leGlzdGluZ0NyZWRlbnRpYWxzLmZpbmRNYXRjaGluZyhbJmV4Y2x1ZGVDcmVkZW50aWFs
SWRzXSAoYXV0byYgY3JlZGVudGlhbCkgewogICAgICAgICAgICAgYXV0byogcmF3SWQgPSBjcmVk
ZW50aWFsLT5yYXdJZCgpOwogICAgICAgICAgICAgQVNTRVJUKHJhd0lkKTsKLSAgICAgICAgICAg
IHJldHVybiBleGNsdWRlQ3JlZGVudGlhbElkcy5jb250YWlucyhiYXNlNjRFbmNvZGVUb1N0cmlu
ZyhyYXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgpKSk7CisgICAgICAgICAgICByZXR1
cm4gZXhjbHVkZUNyZWRlbnRpYWxJZHMuY29udGFpbnMoYmFzZTY0RW5jb2RlVG9TdHJpbmcocmF3
SWQtPmJ5dGVzKCkpKTsKICAgICAgICAgfSkpIHsKICAgICAgICAgICAgIHJlY2VpdmVFeGNlcHRp
b24oeyBOb3RBbGxvd2VkRXJyb3IsICJBdCBsZWFzdCBvbmUgY3JlZGVudGlhbCBtYXRjaGVzIGFu
IGVudHJ5IG9mIHRoZSBleGNsdWRlQ3JlZGVudGlhbHMgbGlzdCBpbiB0aGUgcGxhdGZvcm0gYXR0
YWNoZWQgYXV0aGVudGljYXRvci4iX3MgfSwgV2ViQXV0aGVudGljYXRpb25TdGF0dXM6OkxBRXhj
bHVkZUNyZWRlbnRpYWxzTWF0Y2hlZCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC01MTAsNyAr
NTEwLDcgQEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6OmdldEFzc2VydGlvbigpCiAgICAgICAg
IH0KIAogICAgICAgICBhdXRvKiByYXdJZCA9IGNyZWRlbnRpYWwtPnJhd0lkKCk7Ci0gICAgICAg
IGlmIChhbGxvd0NyZWRlbnRpYWxJZHMuY29udGFpbnMoYmFzZTY0RW5jb2RlVG9TdHJpbmcocmF3
SWQtPmRhdGEoKSwgcmF3SWQtPmJ5dGVMZW5ndGgoKSkpKQorICAgICAgICBpZiAoYWxsb3dDcmVk
ZW50aWFsSWRzLmNvbnRhaW5zKGJhc2U2NEVuY29kZVRvU3RyaW5nKHJhd0lkLT5ieXRlcygpKSkp
CiAgICAgICAgICAgICBhc3NlcnRpb25SZXNwb25zZXMudW5jaGVja2VkQXBwZW5kKGNyZWRlbnRp
YWwuY29weVJlZigpKTsKICAgICB9CiAgICAgaWYgKGFzc2VydGlvblJlc3BvbnNlcy5pc0VtcHR5
KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01v
Y2svTW9ja0xvY2FsQ29ubmVjdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tMb2NhbENvbm5lY3Rpb24ubW0JKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0
aW9uL01vY2svTW9ja0xvY2FsQ29ubmVjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMTYyLDcg
KzE2Miw3IEBAIHZvaWQgTW9ja0xvY2FsQ29ubmVjdGlvbjo6ZmlsdGVyUmVzcG9uc2UKICAgICBm
b3IgKDsgaXRyICE9IHJlc3BvbnNlcy5lbmQoKTsgKytpdHIpIHsKICAgICAgICAgYXV0byogcmF3
SWQgPSBpdHItPmdldCgpLnJhd0lkKCk7CiAgICAgICAgIEFTU0VSVChyYXdJZCk7Ci0gICAgICAg
IGF1dG8gcmF3SWRCYXNlNjQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhyYXdJZC0+ZGF0YSgpLCBy
YXdJZC0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgYXV0byByYXdJZEJhc2U2NCA9IGJhc2U2NEVu
Y29kZVRvU3RyaW5nKHJhd0lkLT5ieXRlcygpKTsKICAgICAgICAgaWYgKHJhd0lkQmFzZTY0ID09
IHByZWZlcnJlZENyZWRlbnRpYWxJZEJhc2U2NCkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9MZWdhY3lTZXNzaW9uU3RhdGVDb2Rp
bmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9MZWdhY3lT
ZXNzaW9uU3RhdGVDb2RpbmcuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9tYWMvTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTI5LDcgKzEyOSw3IEBAIHB1YmxpYzoKICAgICAgICAgKnRoaXMgPDwgbGVuZ3RoOwog
CiAgICAgICAgICp0aGlzIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihsZW5ndGggKiBzaXplb2Yo
VUNoYXIpKTsKLSAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDhfdCo+KFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygp
LmdldCgpKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSwgYWxpZ25vZihVQ2hhcikpOworICAgICAg
ICBlbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVy
dGVkQ2hhcmFjdGVycygpLmdldCgpLCBsZW5ndGggfSk7CiAKICAgICAgICAgcmV0dXJuICp0aGlz
OwogICAgIH0KQEAgLTEzNyw3ICsxMzcsNyBAQCBwdWJsaWM6CiAgICAgSGlzdG9yeUVudHJ5RGF0
YUVuY29kZXImIG9wZXJhdG9yPDwoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2YWx1ZSkKICAgICB7
CiAgICAgICAgICp0aGlzIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1ZS5zaXplKCkpOwot
ICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEodmFsdWUuZGF0YSgpLCB2YWx1ZS5zaXplKCks
IDEpOworICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEodmFsdWUsIDEpOwogCiAgICAgICAg
IHJldHVybiAqdGhpczsKICAgICB9CkBAIC0xNDUsNyArMTQ1LDcgQEAgcHVibGljOgogICAgIEhp
c3RvcnlFbnRyeURhdGFFbmNvZGVyJiBvcGVyYXRvcjw8KGNvbnN0IFZlY3RvcjxjaGFyPiYgdmFs
dWUpCiAgICAgewogICAgICAgICAqdGhpcyA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUu
c2l6ZSgpKTsKLSAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDhfdCo+KHZhbHVlLmRhdGEoKSksIHZhbHVlLnNpemUoKSwgMSk7CisgICAgICAg
IGVuY29kZUZpeGVkTGVuZ3RoRGF0YSh2YWx1ZSwgMSk7CiAKICAgICAgICAgcmV0dXJuICp0aGlz
OwogICAgIH0KQEAgLTIwNiwxNyArMjA2LDIzIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYXJpdGhtZXRpYzxUeXBlPjo6dmFsdWUsICIiKTsKIAotICAg
ICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnZh
bHVlKSwgc2l6ZW9mKHZhbHVlKSwgc2l6ZW9mKHZhbHVlKSk7CisgICAgICAgIGVuY29kZUZpeGVk
TGVuZ3RoRGF0YShTcGFuIHsgJnZhbHVlLCAxIH0sIHNpemVvZih2YWx1ZSkpOwogICAgICAgICBy
ZXR1cm4gKnRoaXM7CiAgICAgfQogCi0gICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoY29u
c3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGFsaWdubWVudCkKKyAgICB2
b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSwgdW5z
aWduZWQgYWxpZ25tZW50KQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGF0YSB8fCAh
c2l6ZSk7Ci0gICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihkYXRh
KSAlIGFsaWdubWVudCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChkYXRhLmRhdGEoKSB8fCAh
ZGF0YS5zaXplKCkpOworICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4oZGF0YS5kYXRhKCkpICUgYWxpZ25tZW50KSk7CiAKLSAgICAgICAgdWludDhfdCogYnVmZmVy
ID0gZ3JvdyhhbGlnbm1lbnQsIHNpemUpOwotICAgICAgICBtZW1jcHkoYnVmZmVyLCBkYXRhLCBz
aXplKTsKKyAgICAgICAgYXV0byogYnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQsIGRhdGEuc2l6ZSgp
KTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKFQmJiBkYXRhLCBzaXplX3QgYWxpZ25tZW50ID0gYWxpZ25vZihUKSkKKyAgICB7Cisg
ICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShhc0J5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8
VD4oZGF0YSkgfSksIGFsaWdubWVudCk7CiAgICAgfQogCiAgICAgdWludDhfdCogZ3Jvdyh1bnNp
Z25lZCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQpAQCAtNjAxLDcgKzYwNyw3IEBAIHB1YmxpYzoK
IAogICAgICAgICBVQ2hhciogYnVmZmVyOwogICAgICAgICBhdXRvIHN0cmluZyA9IFN0cmluZzo6
Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgICAgIGRlY29kZUZpeGVk
TGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIpLCBsZW5ndGggKiBz
aXplb2YoVUNoYXIpLCBhbGlnbm9mKFVDaGFyKSk7CisgICAgICAgIGRlY29kZUZpeGVkTGVuZ3Ro
RGF0YShTcGFuIHsgYnVmZmVyLCBsZW5ndGggfSwgYWxpZ25vZihVQ2hhcikpOwogCiAgICAgICAg
IHZhbHVlID0gc3RyaW5nOwogICAgICAgICByZXR1cm4gKnRoaXM7CkBAIC03MzcsMTcgKzc0Mywy
MyBAQCBwcml2YXRlOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYXJpdGhtZXRpYzxU
eXBlPjo6dmFsdWUsICIiKTsKICAgICAgICAgdmFsdWUgPSBUeXBlKCk7CiAKLSAgICAgICAgZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2YWx1ZSksIHNp
emVvZih2YWx1ZSksIHNpemVvZih2YWx1ZSkpOworICAgICAgICBkZWNvZGVGaXhlZExlbmd0aERh
dGEoU3BhbiB7ICZ2YWx1ZSwgMSB9LCBzaXplb2YodmFsdWUpKTsKICAgICAgICAgcmV0dXJuICp0
aGlzOwogICAgIH0KIAotICAgIHZvaWQgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqIGRh
dGEsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBhbGlnbm1lbnQpCisgICAgdm9pZCBkZWNvZGVGaXhl
ZExlbmd0aERhdGEoU3BhbjxzdGQ6OmJ5dGU+IGRhdGEsIHVuc2lnbmVkIGFsaWdubWVudCkKICAg
ICB7Ci0gICAgICAgIGlmICghYWxpZ25CdWZmZXJQb3NpdGlvbihhbGlnbm1lbnQsIHNpemUpKQor
ICAgICAgICBpZiAoIWFsaWduQnVmZmVyUG9zaXRpb24oYWxpZ25tZW50LCBkYXRhLnNpemUoKSkp
CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbWVtY3B5KGRhdGEsIG1fYnVmZmVyLCBz
aXplKTsKLSAgICAgICAgbV9idWZmZXIgKz0gc2l6ZTsKKyAgICAgICAgbWVtY3B5KGRhdGEuZGF0
YSgpLCBtX2J1ZmZlciwgZGF0YS5zaXplKCkpOworICAgICAgICBtX2J1ZmZlciArPSBkYXRhLnNp
emUoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCBzaXplX3QgYWxpZ25tZW50KQorICAgIHsKKyAgICAg
ICAgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGFzV3JpdGFibGVCeXRlcyhTcGFuIHsgc3RkOjpmb3J3
YXJkPFQ+KGRhdGEpIH0pLCBhbGlnbm1lbnQpOwogICAgIH0KIAogICAgIGJvb2wgYWxpZ25CdWZm
ZXJQb3NpdGlvbih1bnNpZ25lZCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQpJbmRleDogU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5j
cHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3Jr
L1dlYlNvY2tldENoYW5uZWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw4ICs1OSw4IEBAIE5l
dHdvcmtTZW5kUXVldWUgV2ViU29ja2V0Q2hhbm5lbDo6Y3JlYXQKICAgICAgICAgY2hhbm5lbC5u
b3RpZnlTZW5kRnJhbWUoV2ViU29ja2V0RnJhbWU6Ok9wQ29kZTo6T3BDb2RlVGV4dCwgdXRmOFN0
cmluZy5kYXRhQXNVSW50OFB0cigpLCB1dGY4U3RyaW5nLmxlbmd0aCgpKTsKICAgICAgICAgY2hh
bm5lbC5zZW5kTWVzc2FnZShNZXNzYWdlczo6TmV0d29ya1NvY2tldENoYW5uZWw6OlNlbmRTdHJp
bmcgeyBJUEM6OkRhdGFSZWZlcmVuY2UgeyB1dGY4U3RyaW5nLmRhdGFBc1VJbnQ4UHRyKCksIHV0
ZjhTdHJpbmcubGVuZ3RoKCkgfSB9LCB1dGY4U3RyaW5nLmxlbmd0aCgpKTsKICAgICB9LCBbJmNo
YW5uZWxdKGF1dG8mIHNwYW4pIHsKLSAgICAgICAgY2hhbm5lbC5ub3RpZnlTZW5kRnJhbWUoV2Vi
U29ja2V0RnJhbWU6Ok9wQ29kZTo6T3BDb2RlQmluYXJ5LCBzcGFuLmRhdGEoKSwgc3Bhbi5zaXpl
KCkpOwotICAgICAgICBjaGFubmVsLnNlbmRNZXNzYWdlKE1lc3NhZ2VzOjpOZXR3b3JrU29ja2V0
Q2hhbm5lbDo6U2VuZERhdGEgeyBJUEM6OkRhdGFSZWZlcmVuY2UgeyBzcGFuLmRhdGEoKSwgc3Bh
bi5zaXplKCkgfSB9LCBzcGFuLnNpemUoKSk7CisgICAgICAgIGNoYW5uZWwubm90aWZ5U2VuZEZy
YW1lKFdlYlNvY2tldEZyYW1lOjpPcENvZGU6Ok9wQ29kZUJpbmFyeSwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4oc3Bhbi5kYXRhKCkpLCBzcGFuLnNpemUoKSk7CisgICAgICAgIGNo
YW5uZWwuc2VuZE1lc3NhZ2UoTWVzc2FnZXM6Ok5ldHdvcmtTb2NrZXRDaGFubmVsOjpTZW5kRGF0
YSB7IElQQzo6RGF0YVJlZmVyZW5jZSB7IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+
KHNwYW4uZGF0YSgpKSwgc3Bhbi5zaXplKCkgfSB9LCBzcGFuLnNpemUoKSk7CiAgICAgfSwgWyZj
aGFubmVsXShFeGNlcHRpb25Db2RlIGV4Y2VwdGlvbkNvZGUpIHsKICAgICAgICAgYXV0byBjb2Rl
ID0gc3RhdGljX2Nhc3Q8aW50PihleGNlcHRpb25Db2RlKTsKICAgICAgICAgY2hhbm5lbC5mYWls
KG1ha2VTdHJpbmcoIkZhaWxlZCB0byBsb2FkIEJsb2I6IGV4Y2VwdGlvbiBjb2RlID0gIiwgY29k
ZSkpOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQ
SS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBD
VGVzdGluZ0FQSS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTEsNyAr
NjkxLDcgQEAgc3RhdGljIGJvb2wgZW5jb2RlVHlwZWRBcnJheShJUEM6OkVuY29kZQogICAgIGlm
ICghZGF0YS5idWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGVuY29kZXIuZW5j
b2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEu
YnVmZmVyKSwgZGF0YS5sZW5ndGgsIDEpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKFNwYW4geyByZWludGVycHJldF9jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGRhdGEuYnVmZmVy
KSwgZGF0YS5sZW5ndGggfSwgMSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFRvb2xz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisy
MDIxLTA2LTExICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBBZG9w
dCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2Fpcm8vUGl4
ZWxEdW1wU3VwcG9ydENhaXJvLmNwcDoKKyAgICAgICAgKGNvbXB1dGVTSEExSGFzaFN0cmluZ0Zv
ckJpdG1hcENvbnRleHQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1
cHBvcnRDRy5jcHA6CisgICAgICAgIChjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JCaXRtYXBDb250
ZXh0KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9CbG9vbUZpbHRlci5jcHA6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpnZW5lcmF0ZVJhbmRvbURpZ2VzdHMpOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6VEVTVF9GKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBT
ZXJ2ZXIubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9uOjp3ZWJTb2NrZXRI
YW5kc2hha2UpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvY2Fpcm8vVGVzdEludm9jYXRp
b25DYWlyby5jcHA6CisgICAgICAgIChXVFI6OmNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckNhaXJv
U3VyZmFjZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNH
LmNwcDoKKyAgICAgICAgKFdUUjo6Y29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQ29udGV4dCk6CisK
IDIwMjEtMDYtMTEgIEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAK
ICAgICAgICAgW1dpbl1bRHVtcFJlbmRlclRyZWVdIC0tbm8tdGltZW91dCBzd2l0Y2ggZG9lc24n
dCB3b3JrCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0
Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NhaXJvL1BpeGVs
RHVtcFN1cHBvcnRDYWlyby5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL2NhaXJvL1BpeGVsRHVtcFN1cHBvcnRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc1LDcgKzc1LDcgQEAgdm9pZCBjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JCaXRtYXBDb250ZQog
ICAgIFNIQTEgc2hhMTsKICAgICB1bnNpZ25lZCBjaGFyKiBiaXRtYXBEYXRhID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcio+KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZSkp
OwogICAgIGZvciAodW5zaWduZWQgcm93ID0gMDsgcm93IDwgcGl4ZWxzSGlnaDsgcm93KyspIHsK
LSAgICAgICAgc2hhMS5hZGRCeXRlcyhiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lkZSk7CisgICAg
ICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlIH0pOwog
ICAgICAgICBiaXRtYXBEYXRhICs9IGJ5dGVzUGVyUm93OwogICAgIH0KICAgICBTSEExOjpEaWdl
c3QgaGFzaDsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRD
Ry5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1wU3Vw
cG9ydENHLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2cv
UGl4ZWxEdW1wU3VwcG9ydENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTQgKzg4LDE0IEBA
IHZvaWQgY29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQml0bWFwQ29udGUKICAgICAgICAgICAgIHVp
bnQzMl90IGJ1ZmZlcltwaXhlbHNXaWRlXTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY29s
dW1uID0gMDsgY29sdW1uIDwgcGl4ZWxzV2lkZTsgY29sdW1uKyspCiAgICAgICAgICAgICAgICAg
YnVmZmVyW2NvbHVtbl0gPSBPU1JlYWRMaXR0bGVJbnQzMihiaXRtYXBEYXRhLCA0ICogY29sdW1u
KTsKLSAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90Kj4oYnVmZmVyKSwgNCAqIHBpeGVsc1dpZGUpOworICAgICAgICAgICAgc2hhMS5hZGRCeXRl
cyhTcGFuIHsgYnVmZmVyLCBwaXhlbHNXaWRlIH0pOwogICAgICAgICAgICAgYml0bWFwRGF0YSAr
PSBieXRlc1BlclJvdzsKICAgICAgICAgfQogICAgIH0gZWxzZQogI2VuZGlmCiAgICAgewogICAg
ICAgICBmb3IgKHVuc2lnbmVkIHJvdyA9IDA7IHJvdyA8IHBpeGVsc0hpZ2g7IHJvdysrKSB7Ci0g
ICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlKTsKKyAg
ICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRl
IH0pOwogICAgICAgICAgICAgYml0bWFwRGF0YSArPSBieXRlc1BlclJvdzsKICAgICAgICAgfQog
ICAgIH0KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0Jsb29tRmlsdGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9CbG9vbUZpbHRl
ci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L0Jsb29tRmlsdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBzdGF0aWMg
VmVjdG9yPFNIQTE6OkRpZ2VzdD4gZ2VuZXJhdGVSYW5kCiAgICAgU0hBMSBzaGExOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBoYXNoQ291bnQ7ICsraSkgewogICAgICAgICBkb3VibGUg
cmFuZG9tID0gcmFuZG9tTnVtYmVyKCk7Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oJnJhbmRvbSksIHNpemVvZihkb3VibGUpKTsKKyAgICAgICAgc2hh
MS5hZGRCeXRlcyhTcGFuIHsgJnJhbmRvbSwgMSB9KTsKICAgICAgICAgU0hBMTo6RGlnZXN0IGRp
Z2VzdDsKICAgICAgICAgc2hhMS5jb21wdXRlSGFzaChkaWdlc3QpOwogICAgICAgICBoYXNoZXMu
YXBwZW5kKGRpZ2VzdCk7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxl
U3lzdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9G
aWxlU3lzdGVtLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw4ICsxMzMsOCBA
QCBURVNUX0YoRmlsZVN5c3RlbVRlc3QsIE1hcHBpbmdFeGlzdGluZ0ZpCiAgICAgRmlsZVN5c3Rl
bTo6TWFwcGVkRmlsZURhdGEgbWFwcGVkRmlsZURhdGEodGVtcEZpbGVQYXRoKCksIEZpbGVTeXN0
ZW06Ok1hcHBlZEZpbGVNb2RlOjpTaGFyZWQsIHN1Y2Nlc3MpOwogICAgIEVYUEVDVF9UUlVFKHN1
Y2Nlc3MpOwogICAgIEVYUEVDVF9UUlVFKCEhbWFwcGVkRmlsZURhdGEpOwotICAgIEVYUEVDVF9U
UlVFKG1hcHBlZEZpbGVEYXRhLnNpemUoKSA9PSBzdHJsZW4oRmlsZVN5c3RlbVRlc3REYXRhKSk7
Ci0gICAgRVhQRUNUX1RSVUUoc3RybnN0cihGaWxlU3lzdGVtVGVzdERhdGEsIHN0YXRpY19jYXN0
PGNvbnN0IGNoYXIqPihtYXBwZWRGaWxlRGF0YS5kYXRhKCkpLCBtYXBwZWRGaWxlRGF0YS5zaXpl
KCkpKTsKKyAgICBFWFBFQ1RfVFJVRShtYXBwZWRGaWxlRGF0YS5kYXRhKCkuc2l6ZSgpID09IHN0
cmxlbihGaWxlU3lzdGVtVGVzdERhdGEpKTsKKyAgICBFWFBFQ1RfVFJVRShzdHJuc3RyKEZpbGVT
eXN0ZW1UZXN0RGF0YSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4obWFwcGVkRmlsZURh
dGEuZGF0YSgpLmRhdGEoKSksIG1hcHBlZEZpbGVEYXRhLmRhdGEoKS5zaXplKCkpKTsKIH0KIAog
VEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBNYXBwaW5nRXhpc3RpbmdFbXB0eUZpbGUpCkluZGV4OiBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TSEExLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TSEExLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysg
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU0hBMS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM4LDcgKzM4LDcgQEAgc3RhdGljIHZvaWQgZXhwZWN0U0hBMShDU3RyaW5nIGlucHV0LCBpbgog
ewogICAgIFNIQTEgc2hhMTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcGVhdDsgKytpKQot
ICAgICAgICBzaGExLmFkZEJ5dGVzKGlucHV0KTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhpbnB1
dC5ieXRlcygpKTsKICAgICBDU3RyaW5nIGFjdHVhbCA9IHNoYTEuY29tcHV0ZUhleERpZ2VzdCgp
OwogCiAgICAgQVNTRVJUX0VRKGV4cGVjdGVkLmxlbmd0aCgpLCBhY3R1YWwubGVuZ3RoKCkpOwpJ
bmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbQkocmV2aXNpb24gMjc4
ODA5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0zNDAsMTEgKzM0MCwxMSBAQCB2b2lkIENvbm5lY3Rpb246OndlYlNvY2tldEhh
bmRzaGFrZShDb21wCiAKICAgICAgICAgICAgIGNvbnN0ZXhwciBhdXRvKiB3ZWJTb2NrZXRLZXlH
VUlEID0gIjI1OEVBRkE1LUU5MTQtNDdEQS05NUNBLUM1QUIwREM4NUIxMSI7CiAgICAgICAgICAg
ICBTSEExIHNoYTE7Ci0gICAgICAgICAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDhfdCo+KGtleUJlZ2luKSwga2V5RW5kIC0ga2V5QmVnaW4pOwotICAgICAgICAg
ICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih3ZWJTb2Nr
ZXRLZXlHVUlEKSwgc3RybGVuKHdlYlNvY2tldEtleUdVSUQpKTsKKyAgICAgICAgICAgIHNoYTEu
YWRkQnl0ZXMoU3BhbiB7IGtleUJlZ2luLCBrZXlFbmQgfSk7CisgICAgICAgICAgICBzaGExLmFk
ZEJ5dGVzKFNwYW4geyB3ZWJTb2NrZXRLZXlHVUlELCBzdHJsZW4od2ViU29ja2V0S2V5R1VJRCkg
fSk7CiAgICAgICAgICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAgICAgICAgICAgIHNoYTEuY29t
cHV0ZUhhc2goaGFzaCk7Ci0gICAgICAgICAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmco
aGFzaC5kYXRhKCksIFNIQTE6Omhhc2hTaXplKTsKKyAgICAgICAgICAgIHJldHVybiBiYXNlNjRF
bmNvZGVUb1N0cmluZyhoYXNoKTsKICAgICAgICAgfTsKIAogICAgICAgICBjb25uZWN0aW9uLnNl
bmQoSFRUUFJlc3BvbnNlKDEwMSwgewpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jYWly
by9UZXN0SW52b2NhdGlvbkNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0
UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVTSEExSGFz
aFN0cmluZ0ZvckNhaXIKICAgICBTSEExIHNoYTE7CiAgICAgdW5zaWduZWQgY2hhciogYml0bWFw
RGF0YSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF9kYXRhKHN1cmZhY2UpKTsKICAgICBmb3IgKHNpemVfdCByb3cgPSAwOyByb3cgPCBwaXhlbHNI
aWdoOyArK3JvdykgewotICAgICAgICBzaGExLmFkZEJ5dGVzKGJpdG1hcERhdGEsIDQgKiBwaXhl
bHNXaWRlKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgYml0bWFwRGF0YSwgNCAqIHBp
eGVsc1dpZGUgfSk7CiAgICAgICAgIGJpdG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7CiAgICAgfQog
ICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9U
ZXN0SW52b2NhdGlvbkNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVy
L2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9XZWJL
aXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
NCw3ICs5NCw3IEBAIHZvaWQgY29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQ29udGV4dChDR0MKICNl
bmRpZgogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCByb3cgPSAwOyByb3cgPCBwaXhlbHNI
aWdoOyByb3crKykgewotICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhiaXRtYXBEYXRhLCA0ICog
cGl4ZWxzV2lkZSk7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyBiaXRtYXBEYXRh
LCA0ICogcGl4ZWxzV2lkZSB9KTsKICAgICAgICAgICAgIGJpdG1hcERhdGEgKz0gYnl0ZXNQZXJS
b3c7CiAgICAgICAgIH0KICAgICB9Cg==
</data>
<flag name="commit-queue"
          id="453018"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431278</attachid>
            <date>2021-06-13 09:39:46 -0700</date>
            <delta_ts>2021-06-13 09:58:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226887-20210613093945.patch</filename>
            <type>text/plain</type>
            <size>192801</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBA
CisyMDIxLTA2LTEyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogQVBJL0pTU2NyaXB0Lm1tOgorICAg
ICAgICAoK1tKU1NjcmlwdCBzY3JpcHRPZlR5cGU6bWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTp3
aXRoU291cmNlVVJMOmFuZEJ5dGVjb2RlQ2FjaGU6aW5WaXJ0dWFsTWFjaGluZTplcnJvcjpdKToK
KyAgICAgICAgKC1bSlNTY3JpcHQgcmVhZENhY2hlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHdy
aXRlQ2FjaGU6XSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9ja0hhc2g6OkNvZGVCbG9ja0hhc2gpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHA6CisgICAgICAgIChJbnNw
ZWN0b3I6OmJhY2tlbmRDb21tYW5kc0hhc2gpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZm
ZXIuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJDb250ZW50czo6d3JpdGFibGVCeXRlcyk6
CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyQ29udGVudHM6OmJ5dGVzIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6QXJyYXlCdWZmZXI6OndyaXRhYmxlQnl0ZXMpOgorICAgICAgICAoSlNDOjpBcnJh
eUJ1ZmZlcjo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
Lmg6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6d3JpdGFibGVCeXRlcyk6CisgICAg
ICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRp
bWUvQ2FjaGVQYXlsb2FkLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVQYXlsb2FkOjptYWtlTWFw
cGVkUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6bWFrZU1hbGxvY1BheWxv
YWQpOgorICAgICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6Om1ha2VFbXB0eVBheWxvYWQpOgorICAg
ICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6OkNhY2hlUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNh
Y2hlUGF5bG9hZDo6ZnJlZURhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVQYXlsb2FkLmg6
CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6ZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlUGF5bG9hZDo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6
Q2FjaGVQYXlsb2FkKToKKyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKToKKwogMjAyMS0w
Ni0xMSAgUGF0cmljayBBbmdsZSAgPHBhbmdsZUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogQWRkIGluc3RydW1lbnRhdGlvbiB0byBub2RlIGRlc3RydWN0aW9uIGZvciBJbnNw
ZWN0b3JET01BZ2VudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMTMgKzEzNCwxMyBAQCArIChpbnN0YW5jZXR5cGUpc2Ny
aXB0T2ZUeXBlOihKU1NjcmlwdFR5CiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4g
Y3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJGaWxlIGF0IHBhdGggJUAg
Y291bGQgbm90IGJlIG1hcHBlZC4iLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihzeXN0ZW1QYXRo
KV0sIGVycm9yKTsKIAotICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCkpKQor
ICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmlsZURhdGEuZGF0YSgpLnNpemUoKSkpCiAg
ICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIk5v
dCBhbGwgY2hhcmFjdGVycyBpbiBmaWxlIGF0ICVAIGFyZSBBU0NJSS4iLCBzdGF0aWNfY2FzdDxO
U1N0cmluZyAqPihzeXN0ZW1QYXRoKV0sIGVycm9yKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gYWRv
cHROUyhbW0pTU2NyaXB0IGFsbG9jXSBpbml0XSk7CiAgICAgcmVzdWx0LT5tX3ZpcnR1YWxNYWNo
aW5lID0gdm07CiAgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOwotICAgIHJlc3VsdC0+bV9zb3Vy
Y2UgPSBTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcoYml0d2lzZV9jYXN0
PGNvbnN0IExDaGFyKj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpKSk7CisgICAg
cmVzdWx0LT5tX3NvdXJjZSA9IFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWlu
ZyhiaXR3aXNlX2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmls
ZURhdGEuZGF0YSgpLnNpemUoKSkpOwogICAgIHJlc3VsdC0+bV9tYXBwZWRTb3VyY2UgPSBXVEZN
b3ZlKGZpbGVEYXRhKTsKICAgICByZXN1bHQtPm1fc291cmNlVVJMID0gc291cmNlVVJMOwogICAg
IHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7CkBAIC0xNjgsMjQgKzE2OCwyMyBAQCAt
ICh2b2lkKXJlYWRDYWNoZQogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgY29uc3QgdWludDhfdCogZmlsZURhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihtYXBwZWRGaWxlLmRhdGEoKSk7Ci0gICAgdW5zaWduZWQgZmlsZVRvdGFsU2l6ZSA9IG1h
cHBlZEZpbGUuc2l6ZSgpOworICAgIGF1dG8gZmlsZURhdGEgPSBtYXBwZWRGaWxlLmRhdGEoKTsK
IAogICAgIC8vIEVuc3VyZSB3ZSBhdCBsZWFzdCBoYXZlIGEgU0hBMTo6RGlnZXN0IHRvIHJlYWQu
Ci0gICAgaWYgKGZpbGVUb3RhbFNpemUgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgeworICAgIGlm
IChmaWxlRGF0YS5zaXplKCkgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgewogICAgICAgICBGaWxl
U3lzdGVtOjpkZWxldGVGaWxlKGNhY2hlRmlsZW5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgdW5zaWduZWQgZmlsZURhdGFTaXplID0gZmlsZVRvdGFsU2l6ZSAtIHNpemVvZihT
SEExOjpEaWdlc3QpOworICAgIHVuc2lnbmVkIGZpbGVEYXRhU2l6ZSA9IGZpbGVEYXRhLnNpemUo
KSAtIHNpemVvZihTSEExOjpEaWdlc3QpOwogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFz
aDsKICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhmaWxlRGF0YSwgZmlsZURhdGFT
aXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKGZpbGVEYXRhLmZpcnN0KGZpbGVEYXRhU2l6ZSkpOwog
ICAgIHNoYTEuY29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2VzdCBm
aWxlSGFzaDsKLSAgICBtZW1jcHkoJmZpbGVIYXNoLCBmaWxlRGF0YSArIGZpbGVEYXRhU2l6ZSwg
c2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOworICAgIG1lbWNweSgmZmlsZUhhc2gsIGZpbGVEYXRhLmRh
dGEoKSArIGZpbGVEYXRhU2l6ZSwgc2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOwogCiAgICAgaWYgKGNv
bXB1dGVkSGFzaCAhPSBmaWxlSGFzaCkgewogICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxl
KGNhY2hlRmlsZW5hbWUpOwpAQCAtMzQzLDcgKzM0Miw3IEBAIC0gKEJPT0wpd3JpdGVDYWNoZToo
U3RyaW5nJillcnJvcgogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFzaDsKICAgICBTSEEx
IHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhtX2NhY2hlZEJ5dGVjb2RlLT5kYXRhKCksIG1fY2Fj
aGVkQnl0ZWNvZGUtPnNpemUoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgbV9jYWNoZWRC
eXRlY29kZS0+ZGF0YSgpLCBtX2NhY2hlZEJ5dGVjb2RlLT5zaXplKCkgfSk7CiAgICAgc2hhMS5j
b21wdXRlSGFzaChjb21wdXRlZEhhc2gpOwogICAgIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKHRl
bXBGRCwgY29tcHV0ZWRIYXNoLmRhdGEoKSwgc2l6ZW9mKGNvbXB1dGVkSGFzaCkpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0hhc2guY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgQ29kZUJsb2Nr
SGFzaDo6Q29kZUJsb2NrSGFzaChjb25zdCBTb3VyYwogICAgIEFTU0VSVChzb3VyY2VDb2RlLmxl
bmd0aCgpID49IDApOwogICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhTb3VyY2VDb2RlTGVuZ3Ro
VG9IYXNoID0gNTAwICogTUI7CiAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzb3VyY2VD
b2RlLmxlbmd0aCgpKSA8IG1heFNvdXJjZUNvZGVMZW5ndGhUb0hhc2gpCi0gICAgICAgIHNoYTEu
YWRkQnl0ZXMoc291cmNlQ29kZS50b1VURjgoKSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoc291
cmNlQ29kZS50b1VURjgoKS5ieXRlcygpKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gSnVzdCBo
YXNoIHdpdGggdGhlIGxlbmd0aCBhbmQgc2FtcGxlcyBvZiB0aGUgc291cmNlIHN0cmluZyBpbnN0
ZWFkLgogICAgICAgICBTdHJpbmdWaWV3IHN0ciA9IHNvdXJjZUNvZGUucHJvdmlkZXIoKS0+c291
cmNlKCk7CkBAIC02MiwxMCArNjIsMTAgQEAgQ29kZUJsb2NrSGFzaDo6Q29kZUJsb2NrSGFzaChj
b25zdCBTb3VyYwogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHIubGVuZ3RoKCk7CiAgICAg
ICAgIHVuc2lnbmVkIHN0ZXAgPSAobGVuZ3RoID4+IDEwKSArIDE7CiAKLSAgICAgICAgc2hhMS5h
ZGRCeXRlcyhiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KCZsZW5ndGgpLCBzaXplb2YobGVuZ3RoKSk7
CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZsZW5ndGgsIDEgfSk7CiAgICAgICAgIGRv
IHsKICAgICAgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IHN0cltpbmRleF07Ci0gICAgICAgICAg
ICBzaGExLmFkZEJ5dGVzKGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oJmNoYXJhY3RlciksIHNpemVv
ZihjaGFyYWN0ZXIpKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZjaGFyYWN0
ZXIsIDEgfSk7CiAgICAgICAgICAgICBvbGRJbmRleCA9IGluZGV4OwogICAgICAgICAgICAgaW5k
ZXggKz0gc3RlcDsKICAgICAgICAgfSB3aGlsZSAoaW5kZXggPiBvbGRJbmRleCAmJiBpbmRleCA8
IGxlbmd0aCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VIYXNo
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VI
YXNoLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BhcnNlSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiBQYXJzZUhhc2g6OlBhcnNlSGFzaChjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VD
b2RlKQogewogICAgIFNIQTEgc2hhMTsKLSAgICBzaGExLmFkZEJ5dGVzKHNvdXJjZUNvZGUudG9V
VEY4KCkpOworICAgIHNoYTEuYWRkQnl0ZXMoc291cmNlQ29kZS50b1VURjgoKS5ieXRlcygpKTsK
ICAgICBTSEExOjpEaWdlc3QgZGlnZXN0OwogICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsK
ICAgICB1bnNpZ25lZCBoYXNoID0gZGlnZXN0WzBdIHwgKGRpZ2VzdFsxXSA8PCA4KSB8IChkaWdl
c3RbMl0gPDwgMTYpIHwgKGRpZ2VzdFszXSA8PCAyNCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1JlbW90ZUluc3BlY3RvclV0aWxzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1Jl
bW90ZUluc3BlY3RvclV0aWxzLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgY29uc3QgQ1N0cmluZyYgYmFja2VuZENv
bW1hbmRzSGFzaCgpCiAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSA9IGdfYnl0ZXNfZ2V0X2Rh
dGEoYnl0ZXMuZ2V0KCksICZkYXRhU2l6ZSk7CiAgICAgICAgIEFTU0VSVChkYXRhU2l6ZSk7CiAg
ICAgICAgIFNIQTEgc2hhMTsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhzdGF0aWNfY2FzdDxjb25z
dCB1aW50OF90Kj4oZGF0YSksIGRhdGFTaXplKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFu
IHsgc3RhdGljX2Nhc3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSksIGRhdGFTaXplIH0pOwogICAg
ICAgICBoZXhEaWdlc3QgPSBzaGExLmNvbXB1dGVIZXhEaWdlc3QoKTsKICAgICB9CiAgICAgcmV0
dXJuIGhleERpZ2VzdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogI2luY2x1ZGUgPHd0Zi9QYWNrZWRSZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZl
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtODAsNyAr
ODEsMTAgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBt
X2RhdGEuZ2V0TWF5QmVOdWxsKHNpemVJbkJ5dGVzKCkpOyB9CiAgICAgdW5zaWduZWQgc2l6ZUlu
Qnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX3NpemVJbkJ5dGVzOyB9Ci0gICAgCisKKyAgICBTcGFu
PHN0ZDo6Ynl0ZT4gd3JpdGFibGVCeXRlcygpIHsgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8c3RkOjpi
eXRlKj4oZGF0YSgpKSwgc2l6ZUluQnl0ZXMoKSB9OyB9CisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4geyBzdGF0aWNfY2FzdDxjb25zdCBzdGQ6OmJ5dGUq
PihkYXRhKCkpLCBzaXplSW5CeXRlcygpIH07IH0KKwogICAgIGJvb2wgaXNTaGFyZWQoKSBjb25z
dCB7IHJldHVybiBtX3NoYXJlZDsgfQogICAgIAogcHJpdmF0ZToKQEAgLTEyNyw3ICsxMzEsOSBA
QCBwdWJsaWM6CiAgICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKICAgICBpbmxpbmUgY29uc3Qgdm9p
ZCogZGF0YSgpIGNvbnN0OwogICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7
Ci0gICAgCisgICAgaW5saW5lIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCk7CisgICAg
aW5saW5lIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAgICAgdm9pZCBt
YWtlU2hhcmVkKCk7CiAgICAgdm9pZCBzZXRTaGFyaW5nTW9kZShBcnJheUJ1ZmZlclNoYXJpbmdN
b2RlKTsKICAgICBpbmxpbmUgYm9vbCBpc1NoYXJlZCgpIGNvbnN0OwpAQCAtMTk3LDYgKzIwMywx
NiBAQCB1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJu
IG1fY29udGVudHMuc2l6ZUluQnl0ZXMoKTsKIH0KIAorU3BhbjxzdGQ6OmJ5dGU+IEFycmF5QnVm
ZmVyOjp3cml0YWJsZUJ5dGVzKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZW50cy53cml0YWJsZUJ5
dGVzKCk7Cit9CisKK1NwYW48Y29uc3Qgc3RkOjpieXRlPiBBcnJheUJ1ZmZlcjo6Ynl0ZXMoKSBj
b25zdAoreworICAgIHJldHVybiBtX2NvbnRlbnRzLmJ5dGVzKCk7Cit9CisKIGJvb2wgQXJyYXlC
dWZmZXI6OmlzU2hhcmVkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb250ZW50cy5pc1NoYXJl
ZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZm
ZXJWaWV3LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4Niw5IEBAIHB1
YmxpYzoKIAogICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVM
ZW5ndGg7IH0KIAorICAgIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCkgeyByZXR1cm4g
eyBzdGF0aWNfY2FzdDxzdGQ6OmJ5dGUqPihkYXRhKCkpLCBieXRlTGVuZ3RoKCkgfTsgfQorICAg
IFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0IHsgcmV0dXJuIHsgc3RhdGljX2Nh
c3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSgpKSwgYnl0ZUxlbmd0aCgpIH07IH0KKwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0RGV0YWNoYWJsZShib29sKTsKICAgICBib29sIGlzRGV0
YWNoYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNEZXRhY2hhYmxlOyB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlUGF5bG9hZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsMjcgKzMwLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogCiBD
YWNoZVBheWxvYWQgQ2FjaGVQYXlsb2FkOjptYWtlTWFwcGVkUGF5bG9hZChGaWxlU3lzdGVtOjpN
YXBwZWRGaWxlRGF0YSYmIGRhdGEpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZCh0cnVlLCBk
YXRhLmxlYWtIYW5kbGUoKSwgZGF0YS5zaXplKCkpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQo
dHJ1ZSwgZGF0YS5sZWFrSGFuZGxlKCkpOwogfQogCiBDYWNoZVBheWxvYWQgQ2FjaGVQYXlsb2Fk
OjptYWtlTWFsbG9jUGF5bG9hZChNYWxsb2NQdHI8dWludDhfdCwgVk1NYWxsb2M+JiYgZGF0YSwg
c2l6ZV90IHNpemUpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZChmYWxzZSwgZGF0YS5sZWFr
UHRyKCksIHNpemUpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQoZmFsc2UsIGFzV3JpdGFibGVC
eXRlcyhTcGFuIHsgZGF0YS5sZWFrUHRyKCksIHNpemUgfSkpOwogfQogCiBDYWNoZVBheWxvYWQg
Q2FjaGVQYXlsb2FkOjptYWtlRW1wdHlQYXlsb2FkKCkKIHsKLSAgICByZXR1cm4gQ2FjaGVQYXls
b2FkKHRydWUsIG51bGxwdHIsIDApOworICAgIHJldHVybiBDYWNoZVBheWxvYWQodHJ1ZSwgeyB9
KTsKIH0KIAogQ2FjaGVQYXlsb2FkOjpDYWNoZVBheWxvYWQoQ2FjaGVQYXlsb2FkJiYgb3RoZXIp
CiB7Ci0gICAgbV9tYXBwZWQgPSBvdGhlci5tX21hcHBlZDsKLSAgICBtX3NpemUgPSBvdGhlci5t
X3NpemU7Ci0gICAgbV9kYXRhID0gb3RoZXIubV9kYXRhOwotICAgIG90aGVyLm1fbWFwcGVkID0g
ZmFsc2U7Ci0gICAgb3RoZXIubV9kYXRhID0gbnVsbHB0cjsKLSAgICBvdGhlci5tX3NpemUgPSAw
OworICAgIG1fbWFwcGVkID0gc3RkOjpleGNoYW5nZShvdGhlci5tX21hcHBlZCwgZmFsc2UpOwor
ICAgIG1fZGF0YSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLCB7IH0pOwogfQogCiBDYWNo
ZVBheWxvYWQ6On5DYWNoZVBheWxvYWQoKQpAQCAtNjcsMTIgKzYzLDEzIEBAIENhY2hlUGF5bG9h
ZCYgQ2FjaGVQYXlsb2FkOjpvcGVyYXRvcj0oQ2EKIAogdm9pZCBDYWNoZVBheWxvYWQ6OmZyZWVE
YXRhKCkKIHsKLSAgICBpZiAoIW1fZGF0YSkKKyAgICBpZiAoIW1fZGF0YS5kYXRhKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBpZiAobV9tYXBwZWQpIHsKLSAgICAgICAgRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1fZGF0YSwgbV9zaXplKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZmFzdEZy
ZWUobV9kYXRhKTsKKworICAgIGlmIChtX21hcHBlZCkKKyAgICAgICAgRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1fZGF0YSk7CisgICAgZWxzZQorICAgICAgICBmYXN0RnJlZShtX2RhdGEu
ZGF0YSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHd0Zi9GaWxlU3lz
dGVtLmg+CiAjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MSwyMiArNDIsMjAgQEAgcHVibGljOgogICAgIEpT
X0VYUE9SVF9QUklWQVRFIH5DYWNoZVBheWxvYWQoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBD
YWNoZVBheWxvYWQmIG9wZXJhdG9yPShDYWNoZVBheWxvYWQmJiBvdGhlcik7CiAKLSAgICBjb25z
dCB1aW50OF90KiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBjb25zdCB1aW50OF90KiBkYXRhKCkg
Y29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9kYXRhLmRhdGEoKSk7
IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5zaXplKCk7IH0KIAog
cHJpdmF0ZToKLSAgICBDYWNoZVBheWxvYWQoYm9vbCBtYXBwZWQsIHZvaWQqIGRhdGEsIHNpemVf
dCBzaXplKQorICAgIENhY2hlUGF5bG9hZChib29sIG1hcHBlZCwgU3BhbjxzdGQ6OmJ5dGU+IGRh
dGEpCiAgICAgICAgIDogbV9tYXBwZWQobWFwcGVkKQotICAgICAgICAsIG1fc2l6ZShzaXplKQot
ICAgICAgICAsIG1fZGF0YShzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGF0YSkpCisgICAgICAgICwg
bV9kYXRhKGRhdGEpCiAgICAgewogICAgIH0KIAogICAgIHZvaWQgZnJlZURhdGEoKTsKIAogICAg
IGJvb2wgbV9tYXBwZWQ7Ci0gICAgc2l6ZV90IG1fc2l6ZTsKLSAgICB1aW50OF90KiBtX2RhdGE7
CisgICAgU3BhbjxzdGQ6OmJ5dGU+IG1fZGF0YTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1Bh
cnNlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNyArMjYxLDcg
QEAgYXV0byBTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKGNvbnN0IHVpbgogICAgIH0KIAogICAg
IGlmIChVTkxJS0VMWShPcHRpb25zOjp1c2VFYWdlcldlYkFzc2VtYmx5TW9kdWxlSGFzaGluZygp
KSkKLSAgICAgICAgbV9oYXNoZXIuYWRkQnl0ZXMoYnl0ZXMsIGJ5dGVzU2l6ZSk7CisgICAgICAg
IG1faGFzaGVyLmFkZEJ5dGVzKFNwYW4geyBieXRlcywgYnl0ZXNTaXplIH0pOwogCiAgICAgc2l6
ZV90IG9mZnNldEluQnl0ZXMgPSAwOwogICAgIHdoaWxlICh0cnVlKSB7CkluZGV4OiBTb3VyY2Uv
V1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw2OCBAQAorMjAyMS0wNi0xMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgQWRvcHQgU3BhbiBpbiBtb3JlIHBsYWNlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIFdURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmNwcDoKKyAgICAg
ICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjp+TWFwcGVkRmlsZURhdGEp
OgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6TWFwcGVkRmlsZURhdGE6Om1hcEZpbGVI
YW5kbGUpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6dW5tYXBWaWV3T2ZGaWxlKToK
KyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Om1hcFRvRmlsZSk6CisgICAgICAgICogd3Rm
L0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVE
YXRhOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6
Ok1hcHBlZEZpbGVEYXRhOjpkYXRhIGNvbnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUlt
cGw6Ok1hcHBlZEZpbGVEYXRhOjpsZWFrSGFuZGxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3Rl
bUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YSk6CisgICAgICAgIChXVEY6OkZp
bGVTeXN0ZW1JbXBsOjpNYXBwZWRGaWxlRGF0YTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6
RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpzaXplIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1NIQTEuY3BwOgorICAgICAgICAoV1RG
OjpTSEExOjphZGRCeXRlcyk6CisgICAgICAgIChXVEY6OlNIQTE6OmZpbmFsaXplKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6U0hBMTo6cHJvY2Vzc0Jsb2NrKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6U0hBMTo6cmVzZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTSEExOjpoZXhEaWdl
c3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTSEExOjpjb21wdXRlSGV4RGlnZXN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3dGYvU0hBMS5oOgorICAgICAgICAoV1RGOjpTSEExOjphZGRCeXRl
cyk6CisgICAgICAgICogd3RmL1ZlY3Rvci5oOgorICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZS9Q
ZXJzaXN0ZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPENT
dHJpbmc+OjplbmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8Q1N0cmlu
Zz46OmRlY29kZSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTdHJpbmc+Ojpl
bmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVjb2RlU3RyaW5nVGV4dCk6Cisg
ICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUpOgor
ICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKToK
KyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oOgorICAgICAgICAq
IHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5jcHA6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyOjpEZWNvZGVyKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6
OkRlY29kZXI6OmJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFkKToKKyAgICAgICAgKFdURjo6UGVy
c2lzdGVuY2U6OkRlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjp2ZXJpZnlDaGVja3N1bSk6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyOjp+RGVjb2Rlcik6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3Bl
cnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmg6CisgICAgICAgICogd3RmL3BlcnNpc3RlbmNl
L1BlcnNpc3RlbnRFbmNvZGVyLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29k
ZXI6Omdyb3cpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6dXBkYXRlQ2hl
Y2tzdW1Gb3JEYXRhKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6OmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjpl
bmNvZGVOdW1iZXIpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6ZW5jb2Rl
Q2hlY2tzdW0pOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6RW5jb2Rlcik6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjp+RW5jb2Rlcik6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmg6
CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjpidWZmZXIgY29uc3QpOgorICAg
ICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIp
OgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6YnVmZmVyU2l6ZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL3RleHQvQmFzZTY0Lmg6CisgICAgICAgIChXVEY6OmJh
c2U2NEVuY29kZVRvVmVjdG9yKToKKyAgICAgICAgKFdURjo6YmFzZTY0RW5jb2RlVG9TdHJpbmcp
OgorICAgICAgICAqIHd0Zi90ZXh0L0NTdHJpbmcuaDoKKwogMjAyMS0wNi0xMSAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgV2Vha0hhc2hNYXAKSW5kZXg6
IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtNjkyLDYgKzY5Miw4IEBACiAJCUFEODlCNkI5MUU2NDE1MEYwMDkwNzA3RiAvKiBN
ZW1vcnlQcmVzc3VyZUhhbmRsZXJDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IE1lbW9yeVByZXNzdXJlSGFuZGxlckNvY29hLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBREYyQ0U2NDFFMzlGMTA2MDA2ODg5REIgLyogTWVtb3J5Rm9vdHBy
aW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lbW9yeUZvb3RwcmludC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREYyQ0U2NTFFMzlGMTA2MDA2ODg5REIg
LyogTWVtb3J5Rm9vdHByaW50Q29jb2EuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTWVtb3J5Rm9vdHByaW50Q29jb2EuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlCQzcwMEI0NDI2NzY2ODM0MDA0OUVERjIgLyogU3BhbkNvY29hLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNwYW5Db2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzcwMEI0
NTI2NzY2OUMxMDA0OUVERjIgLyogU3BhbkNGLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwYW5DRi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0EzMEM3RjI2NkQzMDM0MDAwRDIzMEMgLyog
U3Bhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTcGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyQkNGQzNFMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5ndWFnZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYW5ndWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyQkNGQzNGMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5ndWFnZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYW5ndWFnZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtODQwLDYgKzg0Miw3IEBACiAJCQkJQzJCQ0ZDNDExRjYxRDYxNjAwQzky
MjJDIC8qIExhbmd1YWdlQ0YuY3BwICovLAogCQkJCTJDREVEMEVFMTgxMTVDMzgwMDREQkE3MCAv
KiBSdW5Mb29wQ0YuY3BwICovLAogCQkJCUEzRUU1QzNCMjFGRkFDN0MwMEZBQkQ2MSAvKiBTY2hl
ZHVsZVBhaXJDRi5jcHAgKi8sCisJCQkJQkM3MDBCNDUyNjc2NjlDMTAwNDlFREYyIC8qIFNwYW5D
Ri5oICovLAogCQkJCTFBRkRFNjQ3MTk1MjAxQzMwMEM0OEZGQSAvKiBUeXBlQ2FzdHNDRi5oICov
LAogCQkJCTVDMUYwNTk0MjE2NDM3QjMwMDM5MzAyQyAvKiBVUkxDRi5jcHAgKi8sCiAJCQkpOwpA
QCAtMTU4MSw2ICsxNTg0LDcgQEAKIAkJCQkxQ0E4NUNBODI0MUIwQjI2MDA3MUMyRjUgLyogUnVu
dGltZUFwcGxpY2F0aW9uQ2hlY2tzQ29jb2EuY3BwICovLAogCQkJCTFDQTg1Q0E3MjQxQjBCMTEw
MDcxQzJGNSAvKiBSdW50aW1lQXBwbGljYXRpb25DaGVja3NDb2NvYS5oICovLAogCQkJCUEzMEQ0
MTJDMUYwREUwQkEwMEI3MTk1NCAvKiBTb2Z0TGlua2luZy5oICovLAorCQkJCUJDNzAwQjQ0MjY3
NjY4MzQwMDQ5RURGMiAvKiBTcGFuQ29jb2EuaCAqLywKIAkJCQlFQjYxRURDNjI0MDlDQ0MwMDAx
RUZFMzYgLyogU3lzdGVtVHJhY2luZ0NvY29hLmNwcCAqLywKIAkJCQk1Q0MwRUU4NjIxNjJCQzIy
MDBBMUE4NDIgLyogVVJMQ29jb2EubW0gKi8sCiAJCQkJOTMyNDE2NTcyNDNCQzJFNTAwMzJGQUFF
IC8qIFZlY3RvckNvY29hLmggKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxOSw5ICszMTksOSBAQCBib29sIGV4Y2x1ZGVGcm9tQmFja3VwKGNvbnN0IFN0cmluZyYp
CiAKIE1hcHBlZEZpbGVEYXRhOjp+TWFwcGVkRmlsZURhdGEoKQogewotICAgIGlmICghbV9maWxl
RGF0YSkKKyAgICBpZiAoIW1fZmlsZURhdGEuZGF0YSgpKQogICAgICAgICByZXR1cm47Ci0gICAg
dW5tYXBWaWV3T2ZGaWxlKG1fZmlsZURhdGEsIG1fZmlsZVNpemUpOworICAgIHVubWFwVmlld09m
RmlsZShtX2ZpbGVEYXRhKTsKIH0KIAogTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKGNv
bnN0IFN0cmluZyYgZmlsZVBhdGgsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUsIGJvb2wmIHN1Y2Nl
c3MpCkBAIC0zODMsMTQgKzM4MywxMyBAQCBib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFu
ZGxlKFBsYXRmCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBtX2ZpbGVEYXRh
ID0gZGF0YTsKLSAgICBtX2ZpbGVTaXplID0gc2l6ZTsKKyAgICBtX2ZpbGVEYXRhID0gU3BhbiB7
IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpieXRlKj4oZGF0YSksIHNpemUgfTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCB1bm1hcFZpZXdPZkZpbGUodm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6
ZSkKK2Jvb2wgdW5tYXBWaWV3T2ZGaWxlKFNwYW48c3RkOjpieXRlPiBkYXRhKQogewotICAgIHJl
dHVybiAhbXVubWFwKGJ1ZmZlciwgc2l6ZSk7CisgICAgcmV0dXJuICFtdW5tYXAoZGF0YS5kYXRh
KCksIGRhdGEuc2l6ZSgpKTsKIH0KIAogI2VuZGlmCkBAIC00MzgsNyArNDM3LDcgQEAgU3RyaW5n
IGNyZWF0ZVRlbXBvcmFyeVppcEFyY2hpdmUoY29uc3QgUwogfQogI2VuZGlmCiAKLU1hcHBlZEZp
bGVEYXRhIG1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIHNpemVfdCBieXRlc1NpemUsIEZ1
bmN0aW9uPHZvaWQoY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4m
KT4mJiBhcHBseSwgUGxhdGZvcm1GaWxlSGFuZGxlKiBvdXRwdXRIYW5kbGUpCitNYXBwZWRGaWxl
RGF0YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBzaXplX3QgYnl0ZXNTaXplLCBGdW5j
dGlvbjx2b2lkKGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mKT4m
JiBhcHBseSwgUGxhdGZvcm1GaWxlSGFuZGxlKiBvdXRwdXRIYW5kbGUpCiB7CiAgICAgY29uc3Rl
eHByIGJvb2wgZmFpbElmRmlsZUV4aXN0cyA9IHRydWU7CiAgICAgYXV0byBoYW5kbGUgPSBGaWxl
U3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWRXcml0
ZSwgRmlsZVN5c3RlbTo6RmlsZUFjY2Vzc1Blcm1pc3Npb246OlVzZXIsIGZhaWxJZkZpbGVFeGlz
dHMpOwpAQCAtNDU1LDEyICs0NTQsMTIgQEAgTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxlKGNvbnN0
IFN0cmluZyYgcAogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIHZvaWQqIG1hcCA9
IGNvbnN0X2Nhc3Q8dm9pZCo+KG1hcHBlZEZpbGUuZGF0YSgpKTsKLSAgICB1aW50OF90KiBtYXBE
YXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1hcCk7CisgICAgYXV0byBtYXAgPSBtYXBwZWRG
aWxlLmRhdGEoKS5kYXRhKCk7CisgICAgYXV0byBtYXBEYXRhID0gbWFwOwogCi0gICAgYXBwbHko
WyZtYXBEYXRhXShjb25zdCB1aW50OF90KiBjaHVuaywgc2l6ZV90IGNodW5rU2l6ZSkgewotICAg
ICAgICBtZW1jcHkobWFwRGF0YSwgY2h1bmssIGNodW5rU2l6ZSk7Ci0gICAgICAgIG1hcERhdGEg
Kz0gY2h1bmtTaXplOworICAgIGFwcGx5KFsmbWFwRGF0YV0oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+
IGNodW5rKSB7CisgICAgICAgIG1lbWNweShtYXBEYXRhLCBjaHVuay5kYXRhKCksIGNodW5rLnNp
emUoKSk7CisgICAgICAgIG1hcERhdGEgKz0gY2h1bmsuc2l6ZSgpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9KTsKIApJbmRleDogU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICsz
NCw3IEBACiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KQEAgLTIxMCw3ICsyMTEsNyBAQCBXVEZfRVhQT1JUX1BSSVZBVEUg
U3RyaW5nIHJlYWxQYXRoKGNvbnN0CiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc1NhZmVUb1Vz
ZU1lbW9yeU1hcEZvclBhdGgoY29uc3QgU3RyaW5nJik7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBtYWtlU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChjb25zdCBTdHJpbmcmKTsKIAotV1RGX0VY
UE9SVF9QUklWQVRFIGJvb2wgdW5tYXBWaWV3T2ZGaWxlKHZvaWQqIGJ1ZmZlciwgc2l6ZV90KTsK
K1dURl9FWFBPUlRfUFJJVkFURSBib29sIHVubWFwVmlld09mRmlsZShTcGFuPHN0ZDo6Ynl0ZT4p
OwogCiBjbGFzcyBNYXBwZWRGaWxlRGF0YSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CkBAIC0yMjMsMTcgKzIyNCwxNSBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5N
YXBwZWRGaWxlRGF0YSgpOwogICAgIE1hcHBlZEZpbGVEYXRhJiBvcGVyYXRvcj0oTWFwcGVkRmls
ZURhdGEmJik7CiAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
ISFtX2ZpbGVEYXRhOyB9Ci0gICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZmlsZURhdGE7IH0KLSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9maWxlU2l6
ZTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fZmls
ZURhdGEuZGF0YSgpOyB9CisgICAgU3BhbjxzdGQ6OmJ5dGU+IGRhdGEoKSBjb25zdCB7IHJldHVy
biBtX2ZpbGVEYXRhOyB9CiAKLSAgICB2b2lkKiBsZWFrSGFuZGxlKCkgeyByZXR1cm4gc3RkOjpl
eGNoYW5nZShtX2ZpbGVEYXRhLCBudWxscHRyKTsgfQorICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBT
cGFuPHN0ZDo6Ynl0ZT4gbGVha0hhbmRsZSgpIHsgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9maWxl
RGF0YSwgeyB9KTsgfQogCiBwcml2YXRlOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIG1h
cEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBGaWxlT3Blbk1vZGUsIE1hcHBlZEZpbGVN
b2RlKTsKIAotICAgIHZvaWQqIG1fZmlsZURhdGEgeyBudWxscHRyIH07Ci0gICAgdW5zaWduZWQg
bV9maWxlU2l6ZSB7IDAgfTsKKyAgICBTcGFuPHN0ZDo6Ynl0ZT4gbV9maWxlRGF0YTsKIH07CiAK
IGlubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGxhdGZvcm1GaWxlSGFuZGxl
IGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUgbWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKQEAgLTI0Nywy
MSArMjQ2LDE5IEBAIGlubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGwKIH0K
IAogaW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShNYXBwZWRGaWxlRGF0YSYm
IG90aGVyKQotICAgIDogbV9maWxlRGF0YShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEs
IG51bGxwdHIpKQotICAgICwgbV9maWxlU2l6ZShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZVNp
emUsIDApKQorICAgIDogbV9maWxlRGF0YShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEs
IHsgfSkpCiB7CiB9CiAKIGlubGluZSBNYXBwZWRGaWxlRGF0YSYgTWFwcGVkRmlsZURhdGE6Om9w
ZXJhdG9yPShNYXBwZWRGaWxlRGF0YSYmIG90aGVyKQogewotICAgIG1fZmlsZURhdGEgPSBzdGQ6
OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEsIG51bGxwdHIpOwotICAgIG1fZmlsZVNpemUgPSBz
dGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZVNpemUsIDApOworICAgIG1fZmlsZURhdGEgPSBzdGQ6
OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEsIHsgfSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQog
CiAvLyBUaGlzIGNyZWF0ZXMgdGhlIGRlc3RpbmF0aW9uIGZpbGUsIG1hcHMgaXQsIHdyaXRlIHRo
ZSBwcm92aWRlZCBkYXRhIHRvIGl0IGFuZCByZXR1cm5zIHRoZSBtYXBwZWQgZmlsZS4KIC8vIFRo
aXMgZnVuY3Rpb24gZmFpbHMgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIGZpbGUgYXQgdGhlIGRlc3Rp
bmF0aW9uIHBhdGguCi1XVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVuY3Rpb248dm9pZChjb25z
dCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYpPiYmIGFwcGx5LCBQbGF0
Zm9ybUZpbGVIYW5kbGUqID0gbnVsbHB0cik7CitXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmls
ZURhdGEgbWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVu
Y3Rpb248dm9pZChjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+Jik+
JiYgYXBwbHksIFBsYXRmb3JtRmlsZUhhbmRsZSogPSBudWxscHRyKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgRmlsZVN5c3RlbUltcGwKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93
dGYvU0hBMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU0hBMS5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL1NIQTEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NiwxMCArNDYsMTAgQEAgU0hBMTo6U0hBMSgpCiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNM
QVJBVElPTlNfRU5ECiB9CiAKLXZvaWQgU0hBMTo6YWRkQnl0ZXMoY29uc3QgdWludDhfdCogaW5w
dXQsIHNpemVfdCBsZW5ndGgpCit2b2lkIFNIQTE6OmFkZEJ5dGVzKFNwYW48Y29uc3Qgc3RkOjpi
eXRlPiBpbnB1dCkKIHsKICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgot
ICAgIENDX1NIQTFfVXBkYXRlKCZtX2NvbnRleHQsIGlucHV0LCBsZW5ndGgpOworICAgIENDX1NI
QTFfVXBkYXRlKCZtX2NvbnRleHQsIGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpKTsKICAgICBB
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIH0KIApAQCAtMTAxLDExICsxMDEsMTEg
QEAgU0hBMTo6U0hBMSgpCiAgICAgcmVzZXQoKTsKIH0KIAotdm9pZCBTSEExOjphZGRCeXRlcyhj
b25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGxlbmd0aCkKK3ZvaWQgU0hBMTo6YWRkQnl0ZXMo
U3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQogewotICAgIHdoaWxlIChsZW5ndGgtLSkgewor
ICAgIGZvciAoYXV0byBieXRlIDogaW5wdXQpIHsKICAgICAgICAgQVNTRVJUKG1fY3Vyc29yIDwg
NjQpOwotICAgICAgICBtX2J1ZmZlclttX2N1cnNvcisrXSA9ICppbnB1dCsrOworICAgICAgICBt
X2J1ZmZlclttX2N1cnNvcisrXSA9IHN0ZDo6dG9faW50ZWdlcjx1aW50OF90PihieXRlKTsKICAg
ICAgICAgKyttX3RvdGFsQnl0ZXM7CiAgICAgICAgIGlmIChtX2N1cnNvciA9PSA2NCkKICAgICAg
ICAgICAgIHByb2Nlc3NCbG9jaygpOwpJbmRleDogU291cmNlL1dURi93dGYvU0hBMS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NIQTEuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dURi93dGYvU0hBMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgPGFycmF5PgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAt
NDUsMTUgKzQ2LDExIEBAIGNsYXNzIFNIQTEgewogcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBTSEExKCk7CiAKLSAgICB2b2lkIGFkZEJ5dGVzKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
aW5wdXQpCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkQnl0ZXMoU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkZEJ5dGVzKFQmJiBk
YXRhKQogICAgIHsKLSAgICAgICAgYWRkQnl0ZXMoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkp
OworICAgICAgICByZXR1cm4gYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+
KGRhdGEpIH0pKTsKICAgICB9Ci0gICAgdm9pZCBhZGRCeXRlcyhjb25zdCBDU3RyaW5nJiBpbnB1
dCkKLSAgICB7Ci0gICAgICAgIGFkZEJ5dGVzKGlucHV0LmRhdGFBc1VJbnQ4UHRyKCksIGlucHV0
Lmxlbmd0aCgpKTsKLSAgICB9Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkQnl0ZXMo
Y29uc3QgdWludDhfdCogaW5wdXQsIHNpemVfdCBsZW5ndGgpOwogCiAgICAgLy8gU2l6ZSBvZiB0
aGUgU0hBMSBoYXNoCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBjb25zdGV4cHIgc2l6
ZV90IGhhc2hTaXplID0gMjA7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dURi93dGYvVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxMyw2ICs2MTMsNyBAQCBw
cml2YXRlOgogCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBUIFZhbHVlVHlwZTsKKyAgICB0eXBlZGVm
IFQgdmFsdWVfdHlwZTsKIAogICAgIHR5cGVkZWYgVCogaXRlcmF0b3I7CiAgICAgdHlwZWRlZiBj
b25zdCBUKiBjb25zdF9pdGVyYXRvcjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNl
L1BlcnNpc3RlbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNp
c3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTcsNyArNTcsNyBAQCB2b2lkIENvZGVyPENTdHJpbmc+OjplbmNvZGUoRW5jb2RlciYgZW5j
CiAKICAgICB1aW50MzJfdCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAgZW5jb2RlciA8
PCBsZW5ndGg7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RyaW5nLmRhdGFB
c1VJbnQ4UHRyKCksIGxlbmd0aCk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEo
c3RyaW5nLmJ5dGVzKCkpOwogfQogCiBzdGQ6Om9wdGlvbmFsPENTdHJpbmc+IENvZGVyPENTdHJp
bmc+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKQEAgLTc4LDcgKzc4LDcgQEAgc3RkOjpvcHRp
b25hbDxDU3RyaW5nPiBDb2RlcjxDU3RyaW5nPjo6ZAogCiAgICAgY2hhciogYnVmZmVyOwogICAg
IENTdHJpbmcgc3RyaW5nID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZCgqbGVuZ3RoLCBidWZm
ZXIpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgKmxlbmd0aCkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgcmVpbnRlcnByZXRfY2FzdDxzdGQ6OmJ5dGUqPihidWZm
ZXIpLCAqbGVuZ3RoIH0pKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgcmV0
dXJuIHN0cmluZzsKQEAgLTk2LDExICs5Niw3IEBAIHZvaWQgQ29kZXI8U3RyaW5nPjo6ZW5jb2Rl
KEVuY29kZXImIGVuY28KICAgICBib29sIGlzOEJpdCA9IHN0cmluZy5pczhCaXQoKTsKIAogICAg
IGVuY29kZXIgPDwgbGVuZ3RoIDw8IGlzOEJpdDsKLQotICAgIGlmIChpczhCaXQpCi0gICAgICAg
IGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBsZW5n
dGgpOwotICAgIGVsc2UKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnMxNigpKSwgbGVu
Z3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEo
c3RyaW5nLmJ5dGVzKCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4K
QEAgLTExMiw3ICsxMDgsNyBAQCBzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBk
ZWNvCiAKICAgICBDaGFyYWN0ZXJUeXBlKiBidWZmZXI7CiAgICAgU3RyaW5nIHN0cmluZyA9IFN0
cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZm
ZXIpLCBsZW5ndGggKiBzaXplb2YoQ2hhcmFjdGVyVHlwZSkpKQorICAgIGlmICghZGVjb2Rlci5k
ZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpieXRlKj4o
YnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJhY3RlclR5cGUpIH0pKQogICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwogICAgIAogICAgIHJldHVybiBzdHJpbmc7CkBAIC0xNDIsMTMgKzEz
OCwxMyBAQCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gQ29kZXI8U3RyaW5nPjo6ZGVjCiAKIHZvaWQg
Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNIQTE6
OkRpZ2VzdCYgZGlnZXN0KQogewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGRp
Z2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShkaWdlc3QpOwogfQogCiBzdGQ6Om9wdGlvbmFsPFNIQTE6OkRpZ2VzdD4gQ29kZXI8
U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgU0hBMTo6RGln
ZXN0IHRtcDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHRtcC5kYXRh
KCksIHNpemVvZih0bXApKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHRtcCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgcmV0dXJuIHRtcDsKIH0K
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmgJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3Rl
bnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw3IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5j
b2RlciYgZW5jb2RlciwgY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQog
ICAgIHsKICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odmVjdG9yLnNp
emUoKSk7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6ZSgpICogc2l6
ZW9mKFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEodmVjdG9yKTsK
ICAgICB9CiAgICAgCiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5Pj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCkBAIC0xNzMsNyArMTczLDcgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAgICAgICBWZWN0b3I8VCwg
aW5saW5lQ2FwYWNpdHk+IHRlbXA7CiAgICAgICAgIHRlbXAuZ3JvdyhzaXplKTsKIAotICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDhfdCo+KHRlbXAuZGF0YSgpKSwgc2l6ZSAqIHNpemVvZihUKSkpCisgICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEodGVtcCkpCiAgICAgICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogCiAgICAgICAgIHJldHVybiB0ZW1wOwpJbmRleDogU291cmNlL1dURi93dGYv
cGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmNwcAkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSwyMyArMzEsMjEgQEAKIG5hbWVzcGFjZSBXVEYgewogbmFtZXNw
YWNlIFBlcnNpc3RlbmNlIHsKIAotRGVjb2Rlcjo6RGVjb2Rlcihjb25zdCB1aW50OF90KiBidWZm
ZXIsIHNpemVfdCBidWZmZXJTaXplKQotICAgIDogbV9idWZmZXIoYnVmZmVyKQotICAgICwgbV9i
dWZmZXJQb3NpdGlvbihidWZmZXIpCi0gICAgLCBtX2J1ZmZlckVuZChidWZmZXIgKyBidWZmZXJT
aXplKQorRGVjb2Rlcjo6RGVjb2RlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnVmZmVyKQorICAg
IDogbV9idWZmZXIoYnVmZmVyLmRhdGEoKSkKKyAgICAsIG1fYnVmZmVyUG9zaXRpb24oYnVmZmVy
LmRhdGEoKSkKKyAgICAsIG1fYnVmZmVyRW5kKGJ1ZmZlci5kYXRhKCkgKyBidWZmZXIuc2l6ZSgp
KQogewogfQogCi1EZWNvZGVyOjp+RGVjb2RlcigpCi17Ci19CitEZWNvZGVyOjp+RGVjb2Rlcigp
ID0gZGVmYXVsdDsKIAogYm9vbCBEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWlu
KHNpemVfdCBzaXplKSBjb25zdAogewogICAgIHJldHVybiBzaXplIDw9IHN0YXRpY19jYXN0PHNp
emVfdD4obV9idWZmZXJFbmQgLSBtX2J1ZmZlclBvc2l0aW9uKTsKIH0KIAotY29uc3QgdWludDhf
dCogRGVjb2Rlcjo6YnVmZmVyUG9pbnRlckZvckRpcmVjdFJlYWQoc2l6ZV90IHNpemUpCitjb25z
dCBzdGQ6OmJ5dGUqIERlY29kZXI6OmJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFkKHNpemVfdCBz
aXplKQogewogICAgIGlmICghYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihzaXplKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC01NSwxNiArNTMsMTYgQEAgY29uc3QgdWludDhfdCog
RGVjb2Rlcjo6YnVmZmVyUG9pbnRlckZvcgogICAgIGF1dG8gZGF0YSA9IG1fYnVmZmVyUG9zaXRp
b247CiAgICAgbV9idWZmZXJQb3NpdGlvbiArPSBzaXplOwogCi0gICAgRW5jb2Rlcjo6dXBkYXRl
Q2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgZGF0YSwgc2l6ZSk7CisgICAgRW5jb2Rlcjo6dXBkYXRl
Q2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgU3BhbiB7IGRhdGEsIHNpemUgfSk7CiAgICAgcmV0dXJu
IGRhdGE7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3Qq
IGRhdGEsIHNpemVfdCBzaXplKQorYm9vbCBEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEo
U3BhbjxzdGQ6OmJ5dGU+IGRhdGEpCiB7Ci0gICAgYXV0byBidWZmZXIgPSBidWZmZXJQb2ludGVy
Rm9yRGlyZWN0UmVhZChzaXplKTsKKyAgICBhdXRvIGJ1ZmZlciA9IGJ1ZmZlclBvaW50ZXJGb3JE
aXJlY3RSZWFkKGRhdGEuc2l6ZSgpKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIG1lbWNweShkYXRhLCBidWZmZXIsIHNpemUpOworICAgIG1lbWNweShkYXRh
LmRhdGEoKSwgYnVmZmVyLCBkYXRhLnNpemUoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTEzOSw3ICsxMzcsNyBAQCBib29sIERlY29kZXI6OnZlcmlmeUNoZWNrc3VtKCkKICAgICBtX3No
YTEuY29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2VzdCBzYXZlZEhh
c2g7Ci0gICAgaWYgKCFkZWNvZGVGaXhlZExlbmd0aERhdGEoc2F2ZWRIYXNoLmRhdGEoKSwgc2l6
ZW9mKHNhdmVkSGFzaCkpKQorICAgIGlmICghZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHNhdmVkSGFz
aCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBjb21wdXRlZEhhc2ggPT0g
c2F2ZWRIYXNoOwpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERl
Y29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0
ZW50RGVjb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0
ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBA
CiAKICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9TSEExLmg+Cisj
aW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVu
dENvZGVyLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMzUsNyArMzYsMTIgQEAgbmFtZXNwYWNl
IFBlcnNpc3RlbmNlIHsKIGNsYXNzIERlY29kZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgotICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyKGNvbnN0IHVpbnQ4
X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IERlY29kZXIoVCYmIGRhdGEpCisgICAgICAgIDogRGVjb2RlciB7IGFzQnl0ZXMoU3BhbiB7IHN0
ZDo6Zm9yd2FyZDxUPihkYXRhKSB9KSB9CisgICAgeworICAgIH0KKworICAgIFdURl9FWFBPUlRf
UFJJVkFURSBEZWNvZGVyKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIH5EZWNvZGVyKCk7CiAKICAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4g
bV9idWZmZXJFbmQgLSBtX2J1ZmZlcjsgfQpAQCAtNDMsNyArNDksMTEgQEAgcHVibGljOgogCiAg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIHZlcmlmeUNoZWNr
c3VtKCk7CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wg
ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqLCBzaXplX3QpOworICAgIFdURl9FWFBPUlRf
UFJJVkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVGaXhlZExlbmd0aERhdGEoU3Bh
bjxzdGQ6OmJ5dGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIGRlY29kZUZpeGVk
TGVuZ3RoRGF0YShUJiYgZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVGaXhlZExl
bmd0aERhdGEoYXNXcml0YWJsZUJ5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSkp
OworICAgIH0KIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVyYXRvcj4+KHN0
ZDo6b3B0aW9uYWw8Ym9vbD4mKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVjb2RlciYgb3Bl
cmF0b3I+PihzdGQ6Om9wdGlvbmFsPHVpbnQ4X3Q+Jik7CkBAIC04NCw3ICs5NCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIG51bUVsZW1lbnRzIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6
ZV90Pjo6bWF4KCkgLyBzaXplb2YoVCkgJiYgYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihu
dW1FbGVtZW50cyAqIHNpemVvZihUKSk7CiAgICAgfQogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRF
IFdBUk5fVU5VU0VEX1JFVFVSTiBjb25zdCB1aW50OF90KiBidWZmZXJQb2ludGVyRm9yRGlyZWN0
UmVhZChzaXplX3QgbnVtQnl0ZXMpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBXQVJOX1VOVVNF
RF9SRVRVUk4gY29uc3Qgc3RkOjpieXRlKiBidWZmZXJQb2ludGVyRm9yRGlyZWN0UmVhZChzaXpl
X3QgbnVtQnl0ZXMpOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSVBDRGVjb2RlciA9
IGZhbHNlOwogCkBAIC05Miw5ICsxMDIsOSBAQCBwcml2YXRlOgogICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWlu
KHNpemVfdCkgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4gRGVjb2RlciYgZGVj
b2RlTnVtYmVyKHN0ZDo6b3B0aW9uYWw8VHlwZT4mKTsKIAotICAgIGNvbnN0IHVpbnQ4X3QqIG1f
YnVmZmVyOwotICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyUG9zaXRpb247Ci0gICAgY29uc3Qg
dWludDhfdCogbV9idWZmZXJFbmQ7CisgICAgY29uc3Qgc3RkOjpieXRlKiBtX2J1ZmZlcjsKKyAg
ICBjb25zdCBzdGQ6OmJ5dGUqIG1fYnVmZmVyUG9zaXRpb247CisgICAgY29uc3Qgc3RkOjpieXRl
KiBtX2J1ZmZlckVuZDsKIAogICAgIFNIQTEgbV9zaGExOwogfTsKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5jcHAJKHJldmlzaW9uIDI3
ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzEsMzQgKzMxLDM0IEBACiBuYW1lc3BhY2UgV1RGIHsKIG5h
bWVzcGFjZSBQZXJzaXN0ZW5jZSB7CiAKLUVuY29kZXI6OkVuY29kZXIoKQotewotfQotCi1FbmNv
ZGVyOjp+RW5jb2RlcigpCi17Ci19CitFbmNvZGVyOjpFbmNvZGVyKCkgPSBkZWZhdWx0OworRW5j
b2Rlcjo6fkVuY29kZXIoKSA9IGRlZmF1bHQ7CiAKLXVpbnQ4X3QqIEVuY29kZXI6Omdyb3coc2l6
ZV90IHNpemUpCitzdGQ6OmJ5dGUqIEVuY29kZXI6Omdyb3coc2l6ZV90IHNpemUpCiB7CiAgICAg
c2l6ZV90IG5ld1Bvc2l0aW9uID0gbV9idWZmZXIuc2l6ZSgpOwogICAgIG1fYnVmZmVyLmdyb3co
bV9idWZmZXIuc2l6ZSgpICsgc2l6ZSk7CiAgICAgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKSArIG5l
d1Bvc2l0aW9uOwogfQogCi12b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yRGF0YShTSEEx
JiBzaGExLCBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3ZvaWQgRW5jb2Rlcjo6
dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmIHNoYTEsIFNwYW48Y29uc3QgdWludDhfdD4gZGF0
YSkKK3sKKyAgICByZXR1cm4gdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKHNoYTEsIGFzQnl0ZXMoZGF0
YSkpOworfQorCit2b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yRGF0YShTSEExJiBzaGEx
LCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKICAgICBhdXRvIHR5cGVTYWx0ID0gU2Fs
dDx1aW50OF90Kj46OnZhbHVlOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7Ci0gICAgc2hhMS5hZGRCeXRl
cyhkYXRhLCBzaXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmdHlwZVNhbHQsIDEgfSk7
CisgICAgc2hhMS5hZGRCeXRlcyhkYXRhKTsKIH0KIAotdm9pZCBFbmNvZGVyOjplbmNvZGVGaXhl
ZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCit2b2lkIEVuY29k
ZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsK
LSAgICB1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhLCBzaXplKTsKKyAgICB1cGRh
dGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhKTsKIAotICAgIHVpbnQ4X3QqIGJ1ZmZlciA9
IGdyb3coc2l6ZSk7Ci0gICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7CisgICAgYXV0byog
YnVmZmVyID0gZ3JvdyhkYXRhLnNpemUoKSk7CisgICAgbWVtY3B5KGJ1ZmZlciwgZGF0YS5kYXRh
KCksIGRhdGEuc2l6ZSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KQEAgLTY2LDcg
KzY2LDcgQEAgRW5jb2RlciYgRW5jb2Rlcjo6ZW5jb2RlTnVtYmVyKFR5cGUgdmFsdQogewogICAg
IEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKG1fc2hhMSwgdmFsdWUpOwogCi0gICAg
dWludDhfdCogYnVmZmVyID0gZ3JvdyhzaXplb2YoVHlwZSkpOworICAgIGF1dG8qIGJ1ZmZlciA9
IGdyb3coc2l6ZW9mKFR5cGUpKTsKICAgICBtZW1jcHkoYnVmZmVyLCAmdmFsdWUsIHNpemVvZihU
eXBlKSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQpAQCAtMTI1LDcgKzEyNSw3IEBAIHZvaWQgRW5j
b2Rlcjo6ZW5jb2RlQ2hlY2tzdW0oKQogewogICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwogICAgIG1f
c2hhMS5jb21wdXRlSGFzaChoYXNoKTsKLSAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEoaGFzaC5k
YXRhKCksIGhhc2guc2l6ZSgpKTsKKyAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEoaGFzaCk7CiB9
CiAKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVu
Y29kZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2Uv
UGVyc2lzdGVudEVuY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAj
aW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvU0hBMS5oPgorI2luY2x1
ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9w
ZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaD4KIApAQCAtNDMsNyArNDQsMTEgQEAgcHVibGlj
OgogICAgIFdURl9FWFBPUlRfUFJJVkFURSB+RW5jb2RlcigpOwogCiAgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZW5jb2RlQ2hlY2tzdW0oKTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCosIHNpemVfdCk7CisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48Y29uc3Qgc3Rk
OjpieXRlPik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBlbmNvZGVGaXhlZExlbmd0
aERhdGEoVCYmIGRhdGEpCisgICAgeworICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEoYXNC
eXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pKTsKKyAgICB9CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZW51bTxUPjo6dmFsdWU+
KiA9IG51bGxwdHI+CiAgICAgRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBUJiB0KQpAQCAtNzAs
MjMgKzc1LDIyIEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRW5jb2RlciYgb3Bl
cmF0b3I8PChmbG9hdCk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIEVuY29kZXImIG9wZXJhdG9y
PDwoZG91YmxlKTsKIAotICAgIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJu
IG1fYnVmZmVyLmRhdGEoKTsgfQotICAgIHNpemVfdCBidWZmZXJTaXplKCkgY29uc3QgeyByZXR1
cm4gbV9idWZmZXIuc2l6ZSgpOyB9Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsK
KyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9idWZm
ZXI7IH0KKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdXBkYXRlQ2hl
Y2tzdW1Gb3JEYXRhKFNIQTEmLCBTcGFuPGNvbnN0IHVpbnQ4X3Q+KTsKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBTcGFuPGNv
bnN0IHN0ZDo6Ynl0ZT4pOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPiBzdGF0aWMgdm9p
ZCB1cGRhdGVDaGVja3N1bUZvck51bWJlcihTSEExJiwgVHlwZSk7CiAKICAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNJUENFbmNvZGVyID0gZmFsc2U7CiAKIHByaXZhdGU6Ci0KICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUeXBlPiBFbmNvZGVyJiBlbmNvZGVOdW1iZXIoVHlwZSk7CiAKLSAgICB1
aW50OF90KiBncm93KHNpemVfdCk7CisgICAgc3RkOjpieXRlKiBncm93KHNpemVfdCk7CiAKICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4gc3RydWN0IFNhbHQ7CiAKLSAgICBWZWN0b3I8dWlu
dDhfdCwgNDA5Nj4gbV9idWZmZXI7CisgICAgVmVjdG9yPHN0ZDo6Ynl0ZSwgNDA5Nj4gbV9idWZm
ZXI7CiAgICAgU0hBMSBtX3NoYTE7CiB9OwogCkBAIC0xMDYsOCArMTEwLDggQEAgdGVtcGxhdGUg
PHR5cGVuYW1lIFR5cGU+CiB2b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKFNI
QTEmIHNoYTEsIFR5cGUgdmFsdWUpCiB7CiAgICAgYXV0byB0eXBlU2FsdCA9IFNhbHQ8VHlwZT46
OnZhbHVlOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnR5
cGVTYWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7Ci0gICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPigmdmFsdWUpLCBzaXplb2YodmFsdWUpKTsKKyAgICBzaGExLmFkZEJ5
dGVzKFNwYW4geyAmdHlwZVNhbHQsIDEgfSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgJnZh
bHVlLCAxIH0pOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE0MCwzOSArMTQwLDM5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0
YXRpYyAKICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSAnPSc7CiB9CiAK
LXN0YXRpYyBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoY29uc3QgdWludDhf
dCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9s
aWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4g
YmFzZTY0RW5jb2RlSW50ZXJuYWwoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0LCBCYXNlNjRF
bmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewotICAgIGF1dG8gZGVz
dGluYXRpb25MZW5ndGggPSBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShpbnB1dExlbmd0aCwg
cG9saWN5KTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uTGVuZ3RoID0gY2FsY3VsYXRlQmFzZTY0RW5j
b2RlZFNpemUoaW5wdXQuc2l6ZSgpLCBwb2xpY3kpOwogICAgIGlmICghZGVzdGluYXRpb25MZW5n
dGgpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBWZWN0b3I8dWludDhfdD4gZGVzdGluYXRp
b25WZWN0b3IoZGVzdGluYXRpb25MZW5ndGgpOwotICAgIGJhc2U2NEVuY29kZUludGVybmFsKGlu
cHV0RGF0YUJ1ZmZlciwgaW5wdXRMZW5ndGgsIGRlc3RpbmF0aW9uVmVjdG9yLmRhdGEoKSwgZGVz
dGluYXRpb25MZW5ndGgsIHBvbGljeSwgbWFwKTsKKyAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXpl
KCksIGRlc3RpbmF0aW9uVmVjdG9yLmRhdGEoKSwgZGVzdGluYXRpb25MZW5ndGgsIHBvbGljeSwg
bWFwKTsKICAgICByZXR1cm4gZGVzdGluYXRpb25WZWN0b3I7CiB9CiAKLXZvaWQgYmFzZTY0RW5j
b2RlKGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIFVD
aGFyKiBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uTGVuZ3RoLCBC
YXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordm9pZCBiYXNl
NjRFbmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0LCBVQ2hhciogZGVzdGluYXRpb25E
YXRhQnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkxlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5
IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKICAgICBpZiAoIWRlc3RpbmF0aW9uTGVu
Z3RoKQogICAgICAgICByZXR1cm47Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nh
c3Q8Y29uc3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBkZXN0aW5h
dGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7CisgICAgYmFz
ZTY0RW5jb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXQu
ZGF0YSgpKSwgaW5wdXQuc2l6ZSgpLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0aW9u
TGVuZ3RoLCBwb2xpY3ksIG1hcCk7CiB9CiAKLXZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQq
IGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIExDaGFyKiBkZXN0aW5hdGlv
bkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uTGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xp
Y3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordm9pZCBiYXNlNjRFbmNvZGUoU3Bhbjxj
b25zdCBzdGQ6OmJ5dGU+IGlucHV0LCBMQ2hhciogZGVzdGluYXRpb25EYXRhQnVmZmVyLCB1bnNp
Z25lZCBkZXN0aW5hdGlvbkxlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0
RW5jb2RlTWFwIG1hcCkKIHsKICAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQogICAgICAgICBy
ZXR1cm47Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGlucHV0RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIs
IGRlc3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7CisgICAgYmFzZTY0RW5jb2RlSW50ZXJu
YWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQu
c2l6ZSgpLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ks
IG1hcCk7CiB9CiAKLVZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCB2
b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNlNjRFbmNvZGVQ
b2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQorVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2
NEVuY29kZVRvVmVjdG9yKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwgQmFzZTY0RW5jb2Rl
UG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gYmFzZTY0
RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZl
ciksIGlucHV0TGVuZ3RoLCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZUlu
dGVybmFsKGlucHV0LCBwb2xpY3ksIG1hcCk7CiB9CiAKLVN0cmluZyBiYXNlNjRFbmNvZGVUb1N0
cmluZyhjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBC
YXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQorU3RyaW5nIGJh
c2U2NEVuY29kZVRvU3RyaW5nKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwgQmFzZTY0RW5j
b2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gbWFr
ZVN0cmluZyhiYXNlNjRFbmNvZGVkKGlucHV0RGF0YUJ1ZmZlciwgaW5wdXRMZW5ndGgsIHBvbGlj
eSwgbWFwKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChpbnB1dCwgcG9s
aWN5LCBtYXApKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIHN0ZDo6b3B0aW9u
YWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGVJbnRlcm5hbChjb25zdCBUKiBpbnB1dERh
dGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0
aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKQEAgLTI1NCw4NCArMjU0LDI3IEBA
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBzdGQ6Om9wdGlvbmEKICAgICByZXR1cm4gZGVz
dGluYXRpb247CiB9CiAKLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNv
ZGUoY29uc3QgU3RyaW5nJiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9w
dGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW5w
dXQubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGggfHwgaW5wdXQuaXM4Qml0KCkpCi0gICAgICAg
IHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgs
IG9wdGlvbnMsIG1hcCk7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNo
YXJhY3RlcnMxNigpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8
VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3RyaW5nVmlldyBpbnB1dCwgT3B0aW9uU2V0
PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0g
ICAgdW5zaWduZWQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGggfHwg
aW5wdXQuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1
dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7Ci0gICAgcmV0dXJuIGJhc2U2
NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIG9wdGlvbnMsIG1h
cCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+
IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgaWYgKGlucHV0LnNpemUoKSA+
IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKLSAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuZGF0YSgp
LCBpbnB1dC5zaXplKCksIG9wdGlvbnMsIG1hcCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVjdG9y
PHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCwgT3B0aW9u
U2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCitz
dGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKFNwYW48Y29uc3Qgc3Rk
OjpieXRlPiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJh
c2U2NERlY29kZU1hcCBtYXApCiB7CiAgICAgaWYgKGlucHV0LnNpemUoKSA+IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
ICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50OF90Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpLCBvcHRpb25zLCBtYXApOwogfQog
Ci1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IHVpbnQ4
X3QqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+
IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgcmV0dXJuIGJhc2U2NERlY29k
ZUludGVybmFsKGRhdGEsIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKLX0KLQotc3RkOjpvcHRpb25h
bDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25l
ZCBsZW5ndGgsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRpb25zLCBCYXNlNjRE
ZWNvZGVNYXAgbWFwKQotewotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oZGF0YSksIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKLX0K
LQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBT
dHJpbmcmIGlucHV0KQorc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29k
ZShjb25zdCBTdHJpbmcmIGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0
aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBpbnB1
dC5sZW5ndGgoKTsKICAgICBpZiAoIWxlbmd0aCB8fCBpbnB1dC5pczhCaXQoKSkKLSAgICAgICAg
cmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnM4KCksIGxlbmd0aCwg
eyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVy
bmFsKGlucHV0LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIHsgfSwgQmFzZTY0RGVjb2RlTWFwOjpV
UkwpOworICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVy
czgoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRl
cm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOwogfQogCi1z
dGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFN0cmluZ1ZpZXcg
aW5wdXQpCitzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKFN0cmlu
Z1ZpZXcgaW5wdXQsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRpb25zLCBCYXNl
NjREZWNvZGVNYXAgbWFwKQogewogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgp
OwogICAgIGlmICghbGVuZ3RoIHx8IGlucHV0LmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gYmFz
ZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCB7IH0sIEJhc2U2
NERlY29kZU1hcDo6VVJMKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQu
Y2hhcmFjdGVyczE2KCksIGxlbmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7Ci19Ci0K
LXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBpbnB1dCkKLXsKLSAgICBpZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5kYXRhKCksIGlucHV0LnNp
emUoKSwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVj
dG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCkK
LXsKLSAgICBpZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46
Om1heCgpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHJldHVybiBiYXNlNjRE
ZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRh
KCkpLCBpbnB1dC5zaXplKCksIHsgfSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOwotfQotCi1zdGQ6
Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IHVpbnQ4X3Qq
IGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJu
YWwoZGF0YSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKLX0KLQotc3RkOjpv
cHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBjaGFyKiBkYXRh
LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBsZW5ndGgsIHsgfSwgQmFzZTY0
RGVjb2RlTWFwOjpVUkwpOworICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5w
dXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOworICAgIHJldHVybiBiYXNl
NjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBvcHRpb25zLCBt
YXApOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQv
QmFzZTY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuaAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNs
dWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCkBAIC01Niw1NCArNTcsMzUgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhp
bXVtQmFzZTY0TAogLy8gUmF0aGVyIHRoYW4gYmVpbmcgcGVyZmVjdGx5IHByZWNpc2UsIHRoaXMg
aXMgYSBiaXQgY29uc2VydmF0aXZlLgogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhpbXVt
QmFzZTY0RW5jb2RlcklucHV0QnVmZmVyU2l6ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQ+OjptYXgoKSAvIDc3ICogNzYgLyA0ICogMyAtIDI7CiAKLVdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQsIFVDaGFyKiwgdW5zaWduZWQs
IEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMs
IEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci1XVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVkLCBMQ2hhcios
IHVuc2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90
SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwor
V1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRl
PiwgVUNoYXIqIGRlc3RpbmF0aW9uQnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkJ1ZmZlclNp
emUsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRM
RnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+LCBMQ2hh
ciogZGVzdGluYXRpb25CdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uQnVmZmVyU2l6ZSwgQmFz
ZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFz
ZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKIAotV1RGX0VYUE9SVF9Q
UklWQVRFIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCB2b2lkKiwg
dW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJ
bnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci1W
ZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExG
cywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKLVZlY3Rvcjx1
aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8Y2hhcj4mLCBCYXNlNjRF
bmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRF
bmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwotVmVjdG9yPHVpbnQ4X3Q+IGJh
c2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IENTdHJpbmcmLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBC
YXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNl
NjRFbmNvZGVNYXA6OkRlZmF1bHQpOwotCi1XVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIGJhc2U2
NEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgQmFzZTY0RW5jb2RlUG9saWN5
ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0g
QmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKLVN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhj
b25zdCBWZWN0b3I8dWludDhfdD4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQ
b2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6
OkRlZmF1bHQpOwotU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3RvcjxjaGFy
PiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRM
RnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci1TdHJpbmcg
YmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgQ1N0cmluZyYsIEJhc2U2NEVuY29kZVBvbGljeSA9
IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJh
c2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgVmVjdG9yPHVpbnQ4
X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKFNwYW48Y29uc3Qgc3RkOjpieXRlPiwgQmFzZTY0RW5j
b2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5j
b2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihUJiYsIEJhc2U2NEVuY29kZVBv
bGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1h
cCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CiAKK1dURl9FWFBPUlRfUFJJVkFURSBTdHJp
bmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+LCBCYXNlNjRFbmNv
ZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNv
ZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
U3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKFQmJiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFz
ZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0
RW5jb2RlTWFwOjpEZWZhdWx0KTsKKworV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0aW9uYWw8
VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+LCBPcHRp
b25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2
NERlY29kZU1hcDo6RGVmYXVsdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxW
ZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBTdHJpbmcmLCBPcHRpb25TZXQ8QmFz
ZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1h
cDo6RGVmYXVsdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWlu
dDhfdD4+IGJhc2U2NERlY29kZShTdHJpbmdWaWV3LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0
aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7
Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2
NERlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0
aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7
Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2
NERlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9u
cz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7Ci1X
VEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERl
Y29kZShjb25zdCB1aW50OF90KiwgdW5zaWduZWQsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRp
b25zPiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsK
LVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0
RGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlv
bnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRlZmF1bHQpOwot
Ci1pbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29k
ZU1hcCBtYXApCi17Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlucHV0LmRhdGEo
KSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7Ci19Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
dGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6
cmVtb3ZlX3JlZmVyZW5jZV90PFQ+PiwgU3RyaW5nPiAmJiAhc3RkOjppc19zYW1lX3Y8c3RkOjpy
ZW1vdmVfY29uc3RfdDxzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxUPj4sIFN0cmluZ1ZpZXc+Piog
PSBudWxscHRyPgorc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShU
JiYsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFw
ID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKIAotaW5saW5lIFZlY3Rvcjx1aW50OF90PiBi
YXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBCYXNlNjRFbmNv
ZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordGVtcGxhdGU8dHlwZW5hbWUg
VD4gVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKFQmJiBpbnB1dCwgQmFzZTY0
RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4g
YmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSwg
bWFwKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoYXNCeXRlcyhTcGFuIHsgc3Rk
Ojpmb3J3YXJkPFQ+KGlucHV0KSB9KSwgcG9saWN5LCBtYXApOwogfQogCi1pbmxpbmUgVmVjdG9y
PHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IENTdHJpbmcmIGlucHV0LCBCYXNl
NjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKFQmJiBpbnB1dCwgQmFzZTY0RW5j
b2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gYmFz
ZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwgcG9saWN5LCBt
YXApOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhhc0J5dGVzKFNwYW4geyBzdGQ6
OmZvcndhcmQ8VD4oaW5wdXQpIH0pLCBwb2xpY3ksIG1hcCk7CiB9CiAKLWlubGluZSBTdHJpbmcg
YmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCwgQmFzZTY0
RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZV92PHN0ZDo6cmVtb3ZlX2NvbnN0
X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmc+ICYmICFzdGQ6OmlzX3NhbWVf
djxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+PiwgU3RyaW5n
Vmlldz4+Kj4KK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoVCYm
IGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVj
b2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5wdXQuZGF0
YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSwgbWFwKTsKLX0KLQotaW5saW5lIFN0cmluZyBiYXNl
NjRFbmNvZGVUb1N0cmluZyhjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBCYXNlNjRFbmNvZGVQ
b2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQotewotICAgIHJldHVybiBiYXNlNjRF
bmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5LCBtYXApOwot
fQotCi1pbmxpbmUgU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IENTdHJpbmcmIGlu
cHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQotewot
ICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0Lmxlbmd0
aCgpLCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZShhc0J5dGVzKFNwYW4g
eyBzdGQ6OmZvcndhcmQ8VD4oaW5wdXQpIH0pLCBvcHRpb25zLCBtYXApOwogfQogCiAKQEAgLTEx
Miw2MSArOTQsNTcgQEAgaW5saW5lIFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdAog
Ly8gVGhpcyBmb3JtYXQgdXNlcyAnLScgYW5kICdfJyBpbnN0ZWFkIG9mICcrJyBhbmQgJy8nIHJl
c3BlY3RpdmVseS4KIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVZlY3Rvcjx1
aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihjb25zdCB2b2lkKiwgdW5zaWduZWQpOwot
VmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKGNvbnN0IFZl
Y3RvcjxjaGFyPiYpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKGNv
bnN0IENTdHJpbmcmKTsKK1ZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3RvcihT
cGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVjdG9yPHVpbnQ4
X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKFQmJik7CiAKLVN0cmluZyBiYXNlNjRVUkxFbmNv
ZGVUb1N0cmluZyhjb25zdCB2b2lkKiwgdW5zaWduZWQpOwotU3RyaW5nIGJhc2U2NFVSTEVuY29k
ZVRvU3RyaW5nKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOwotU3RyaW5nIGJhc2U2NFVSTEVuY29k
ZVRvU3RyaW5nKGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRv
U3RyaW5nKGNvbnN0IENTdHJpbmcmKTsKK1N0cmluZyBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhT
cGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGJhc2U2
NFVSTEVuY29kZVRvU3RyaW5nKFQmJik7CiAKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlv
bmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFN0cmluZyYpOwotV1RG
X0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxE
ZWNvZGUoU3RyaW5nVmlldyk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0
b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mKTsKLVdU
Rl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJM
RGVjb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0
aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgdWludDhfdCosIHVu
c2lnbmVkKTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90
Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCk7CitzdGQ6Om9wdGlvbmFs
PFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7
CitzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFN0
cmluZyYpOworc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShT
dHJpbmdWaWV3KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6
aXNfc2FtZV92PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+
LCBTdHJpbmc+ICYmICFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVt
b3ZlX3JlZmVyZW5jZV90PFQ+PiwgU3RyaW5nVmlldz4+KiA9IG51bGxwdHI+CitzdGQ6Om9wdGlv
bmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFQmJik7CiAKLWlubGluZSBWZWN0
b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3Qgdm9pZCogaW5wdXQsIHVu
c2lnbmVkIGxlbmd0aCkKK2lubGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9W
ZWN0b3IoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRF
bmNvZGVUb1ZlY3RvcihpbnB1dCwgbGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFz
ZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1
dCwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKIH0KIAot
aW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0
b3I8dWludDhfdD4mIGlucHV0KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVjdG9yPHVpbnQ4X3Q+
IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKFQmJiBpbnB1dCkKIHsKLSAgICByZXR1cm4gYmFzZTY0
RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29k
ZVRvVmVjdG9yKHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCksIEJhc2U2NEVuY29kZVBvbGljeTo6VVJM
LCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBWZWN0b3I8dWludDhfdD4gYmFz
ZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCkKK2lubGluZSBT
dHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0
KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRhKCksIGlucHV0
LnNpemUoKSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsK
KyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5wdXQsIEJhc2U2NEVuY29kZVBvbGlj
eTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBWZWN0b3I8dWludDhf
dD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgQ1N0cmluZyYgaW5wdXQpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoVCYmIGlucHV0KQog
ewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRhKCksIGlucHV0Lmxl
bmd0aCgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwor
ICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhzdGQ6OmZvcndhcmQ8VD4oaW5wdXQpLCBC
YXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQogCi1pbmxp
bmUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqIGlucHV0LCB1bnNp
Z25lZCBsZW5ndGgpCitpbmxpbmUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2
NFVSTERlY29kZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJh
c2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LCBsZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeTo6VVJM
LCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZShpbnB1dCwg
eyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBTdHJpbmcgYmFzZTY0VVJM
RW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKK2lubGluZSBzdGQ6
Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFN0cmluZyYg
aW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LmRhdGEoKSwg
aW5wdXQuc2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpV
UkwpOworICAgIHJldHVybiBiYXNlNjREZWNvZGUoaW5wdXQsIHsgfSwgQmFzZTY0RGVjb2RlTWFw
OjpVUkwpOwogfQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0
IFZlY3RvcjxjaGFyPiYgaW5wdXQpCitpbmxpbmUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGJhc2U2NFVSTERlY29kZShTdHJpbmdWaWV3IGlucHV0KQogewotICAgIHJldHVybiBiYXNl
NjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgQmFzZTY0RW5jb2Rl
UG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKKyAgICByZXR1cm4gYmFzZTY0RGVj
b2RlKGlucHV0LCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKIH0KIAotaW5saW5lIFN0cmlu
ZyBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhjb25zdCBDU3RyaW5nJiBpbnB1dCkKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZV92PHN0ZDo6cmVtb3Zl
X2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmc+ICYmICFzdGQ6Omlz
X3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+Piwg
U3RyaW5nVmlldz4+Kj4KK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxE
ZWNvZGUoVCYmIGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1
dC5kYXRhKCksIGlucHV0Lmxlbmd0aCgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0
RW5jb2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjRVUkxEZWNvZGUoYXNCeXRlcyhTcGFu
IHsgc3RkOjpmb3J3YXJkPFQ+KGlucHV0KSB9KSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IHN0YXRpYyBpbmxpbmUgYm9vbCBpc0Jhc2U2NE9yQmFzZTY0VVJMQ2hhcmFj
dGVyKENoYXJhY3RlclR5cGUgYykKQEAgLTIwOCw1NyArMTg2LDM2IEBAIGlubGluZSB1bnNpZ25l
ZCBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2kKIH0KIAogc3RydWN0IEJhc2U2NFNwZWNpZmljYXRp
b24gewotICAgIGNvbnN0IHZvaWQqIGlucHV0RGF0YTsKLSAgICB1bnNpZ25lZCBpbnB1dExlbmd0
aDsKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXREYXRhOwogICAgIEJhc2U2NEVuY29k
ZVBvbGljeSBwb2xpY3k7CiAgICAgQmFzZTY0RW5jb2RlTWFwIG1hcDsKIH07CiAKLWlubGluZSBC
YXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NEVuY29kZWQoY29uc3Qgdm9pZCogaW5wdXREYXRhLCB1
bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9IEJhc2U2NEVu
Y29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCBtYXAgPSBCYXNlNjRF
bmNvZGVNYXA6OkRlZmF1bHQpCi17Ci0gICAgcmV0dXJuIHsgaW5wdXREYXRhLCBpbnB1dExlbmd0
aCwgcG9saWN5LCBtYXAgfTsKLX0KLQotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0
RW5jb2RlZChjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kg
cG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcykKLXsKLSAgICByZXR1
cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5KTsKLX0K
LQotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChjb25zdCBWZWN0b3I8
Y2hhcj4mIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0RW5jb2RlUG9s
aWN5OjpEb05vdEluc2VydExGcykKLXsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5k
YXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5KTsKLX0KLQotaW5saW5lIEJhc2U2NFNwZWNpZmlj
YXRpb24gYmFzZTY0RW5jb2RlZChjb25zdCBDU3RyaW5nJiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9s
aWN5IHBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMpCi17Ci0gICAg
cmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwgcG9saWN5
KTsKLX0KLQotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChjb25z
dCB2b2lkKiBpbnB1dERhdGEsIHVuc2lnbmVkIGlucHV0TGVuZ3RoKQoraW5saW5lIEJhc2U2NFNw
ZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQsIEJh
c2U2NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0
TEZzLCBCYXNlNjRFbmNvZGVNYXAgbWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KQogewot
ICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0RGF0YSwgaW5wdXRMZW5ndGgsIEJhc2U2NEVu
Y29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIHsgaW5w
dXQsIHBvbGljeSwgbWFwIH07CiB9CiAKLWlubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2
NFVSTEVuY29kZWQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChUJiYgaW5wdXQsIEJhc2U2
NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZz
LCBCYXNlNjRFbmNvZGVNYXAgbWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KQogewotICAg
IHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRF
bmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNl
NjRFbmNvZGVkKGFzQnl0ZXMoU3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCkgfSksIHBvbGlj
eSwgbWFwKTsKIH0KIAotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5jb2Rl
ZChjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0KQoraW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24g
YmFzZTY0VVJMRW5jb2RlZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCiB7Ci0gICAgcmV0
dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJhc2U2NEVuY29k
ZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NEVu
Y29kZWQoaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVS
TCk7CiB9CiAKLWlubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NFVSTEVuY29kZWQoY29u
c3QgQ1N0cmluZyYgaW5wdXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBCYXNlNjRTcGVjaWZpY2F0
aW9uIGJhc2U2NFVSTEVuY29kZWQoVCYmIGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNv
ZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIEJhc2U2NEVuY29kZVBvbGljeTo6VVJM
LCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoYXNCeXRl
cyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGlucHV0KSB9KSwgQmFzZTY0RW5jb2RlUG9saWN5OjpV
UkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKIH0KIAogdGVtcGxhdGU8PiBjbGFzcyBTdHJpbmdU
eXBlQWRhcHRlcjxCYXNlNjRTcGVjaWZpY2F0aW9uPiB7CiBwdWJsaWM6CiAgICAgU3RyaW5nVHlw
ZUFkYXB0ZXIoY29uc3QgQmFzZTY0U3BlY2lmaWNhdGlvbiYgYmFzZTY0KQogICAgICAgICA6IG1f
YmFzZTY0IHsgYmFzZTY0IH0KLSAgICAgICAgLCBtX2VuY29kZWRMZW5ndGggeyBjYWxjdWxhdGVC
YXNlNjRFbmNvZGVkU2l6ZShiYXNlNjQuaW5wdXRMZW5ndGgsIGJhc2U2NC5wb2xpY3kpIH0KKyAg
ICAgICAgLCBtX2VuY29kZWRMZW5ndGggeyBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShiYXNl
NjQuaW5wdXREYXRhLnNpemUoKSwgYmFzZTY0LnBvbGljeSkgfQogICAgIHsKICAgICB9CiAKQEAg
LTI2Nyw3ICsyMjQsNyBAQCBwdWJsaWM6CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPiB2b2lkIHdyaXRlVG8oQ2hhcmFjdGVyVHlwZSogZGVzdGluYXRpb24pIGNvbnN0CiAg
ICAgewotICAgICAgICBiYXNlNjRFbmNvZGUobV9iYXNlNjQuaW5wdXREYXRhLCBtX2Jhc2U2NC5p
bnB1dExlbmd0aCwgZGVzdGluYXRpb24sIG1fZW5jb2RlZExlbmd0aCwgbV9iYXNlNjQucG9saWN5
LCBtX2Jhc2U2NC5tYXApOworICAgICAgICBiYXNlNjRFbmNvZGUobV9iYXNlNjQuaW5wdXREYXRh
LCBkZXN0aW5hdGlvbiwgbV9lbmNvZGVkTGVuZ3RoLCBtX2Jhc2U2NC5wb2xpY3ksIG1fYmFzZTY0
Lm1hcCk7CiAgICAgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9DU3Ry
aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9DU3RyaW5nLmgJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KICNpbmNs
dWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvU3Bhbi5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtMzksOSArNDAsMTEgQEAgREVDTEFS
RV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoQwogY2xhc3MgQ1N0cmluZ0J1ZmZlciBm
aW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPENTdHJpbmdCdWZmZXI+IHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihDU3RyaW5nQnVmZmVyKTsKIHB1Ymxp
YzoKLSAgICBjb25zdCBjaGFyKiBkYXRhKCkgeyByZXR1cm4gbXV0YWJsZURhdGEoKTsgfQorICAg
IGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PENTdHJpbmdCdWZm
ZXIqPih0aGlzKS0+bXV0YWJsZURhdGEoKTsgfQogICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7
IHJldHVybiBtX2xlbmd0aDsgfQogCisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGJ5dGVzKCkg
Y29uc3QgeyByZXR1cm4gYXNCeXRlcyhTcGFuIHsgZGF0YSgpLCBsZW5ndGgoKSB9KTsgfQorCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDU3RyaW5nOwogCkBAIC02Niw2ICs2OSwyMCBAQCBw
dWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBDU3RyaW5nIG5ld1VuaW5pdGlh
bGl6ZWQoc2l6ZV90IGxlbmd0aCwgY2hhciomIGNoYXJhY3RlckJ1ZmZlcik7CiAgICAgQ1N0cmlu
ZyhIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IG1fYnVmZmVyKEhhc2hUYWJsZURlbGV0ZWRW
YWx1ZSkgeyB9CiAKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKG1fYnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIG1fYnVmZmVyLT5i
eXRlcygpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFNwYW48c3RkOjpieXRl
PiBtdXRhYmxlQnl0ZXMoKQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8gbXV0YWJsZURhdGEgPSB0
aGlzLT5tdXRhYmxlRGF0YSgpKQorICAgICAgICAgICAgcmV0dXJuIGFzV3JpdGFibGVCeXRlcyhT
cGFuIHsgbXV0YWJsZURhdGEsIG1fYnVmZmVyLT5sZW5ndGgoKSB9KTsKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICB9CisKICAgICBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIHJldHVybiBtX2J1ZmZlciA/IG1fYnVmZmVyLT5kYXRhKCkgOiBudWxscHRyOwpJbmRleDog
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdWaWV3LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYv
d3RmL3RleHQvU3RyaW5nVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5NCw4IEBAIHB1
YmxpYzoKICAgICBjb25zdCBMQ2hhciogY2hhcmFjdGVyczgoKSBjb25zdDsKICAgICBjb25zdCBV
Q2hhciogY2hhcmFjdGVyczE2KCkgY29uc3Q7CiAKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
Ynl0ZXMoKSBjb25zdDsKKwogICAgIGJvb2wgaXNBbGxBU0NJSSgpIGNvbnN0OwogCiAgICAgU3Ry
aW5nIHRvU3RyaW5nKCkgY29uc3Q7CkBAIC00MjQsNiArNDI2LDEzIEBAIGlubGluZSBjb25zdCBV
Q2hhciogU3RyaW5nVmlldzo6Y2hhcmFjdGUKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3Qg
VUNoYXIqPihtX2NoYXJhY3RlcnMpOwogfQogCitpbmxpbmUgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+
IFN0cmluZ1ZpZXc6OmJ5dGVzKCkgY29uc3QKK3sKKyAgICBpZiAoaXM4Qml0KCkpCisgICAgICAg
IHJldHVybiBhc0J5dGVzKFNwYW4geyBjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSB9KTsKKyAgICBy
ZXR1cm4gYXNCeXRlcyhTcGFuIHsgY2hhcmFjdGVyczE2KCksIGxlbmd0aCgpIH0pOworfQorCiBp
bmxpbmUgYm9vbCBTdHJpbmdWaWV3Ojppc0FsbEFTQ0lJKCkgY29uc3QKIHsKICAgICBpZiAoaXM4
Qml0KCkpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHJldmlzaW9uIDI3ODgwOSkKKysr
IFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYg
KzI2LDcgQEAKIAogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5o
PgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQVNDSUlMaXRlcmFs
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KQEAgLTEzNCw2ICsxMzUsNyBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiAhbV9pbXBsIHx8IG1faW1wbC0+aXM4
Qml0KCk7IH0KIAogICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9p
bXBsID8gbV9pbXBsLT5sZW5ndGgoKSAqIChpczhCaXQoKSA/IHNpemVvZihMQ2hhcikgOiBzaXpl
b2YoVUNoYXIpKSA6IDA7IH0KKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25z
dDsKIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBDU3RyaW5nIGFzY2lpKCkgY29uc3Q7CiAgICAg
V1RGX0VYUE9SVF9QUklWQVRFIENTdHJpbmcgbGF0aW4xKCkgY29uc3Q7CkBAIC00ODMsNiArNDg1
LDE2IEBAIHRlbXBsYXRlPD4gaW5saW5lIGNvbnN0IFVDaGFyKiBTdHJpbmc6OmMKICAgICByZXR1
cm4gY2hhcmFjdGVyczE2KCk7CiB9CiAKK2lubGluZSBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gU3Ry
aW5nOjpieXRlcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ltcGwpCisgICAgICAgIHJldHVybiB7
IH07CisKKyAgICBpZiAobV9pbXBsLT5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGFzQnl0ZXMo
U3BhbiB7IG1faW1wbC0+Y2hhcmFjdGVyczgoKSwgbV9pbXBsLT5sZW5ndGgoKSB9KTsKKyAgICBy
ZXR1cm4gYXNCeXRlcyhTcGFuIHsgbV9pbXBsLT5jaGFyYWN0ZXJzMTYoKSwgbV9pbXBsLT5sZW5n
dGgoKSB9KTsKK30KKwogaW5saW5lIFVDaGFyIFN0cmluZzo6Y2hhcmFjdGVyQXQodW5zaWduZWQg
aW5kZXgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ltcGwgfHwgaW5kZXggPj0gbV9pbXBsLT5sZW5n
dGgoKSkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAJKHJldmlzaW9uIDI3
ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzYzLDkgKzM2Myw5IEBAIFN0cmluZyBjcmVhdGVUZW1wb3JhcnlEaXJlY3Rvcnko
KQogICAgIH0pOwogfQogCi1ib29sIHVubWFwVmlld09mRmlsZSh2b2lkKiBidWZmZXIsIHNpemVf
dCkKK2Jvb2wgdW5tYXBWaWV3T2ZGaWxlKFNwYW48c3RkOjpieXRlPiBkYXRhKQogewotICAgIHJl
dHVybiBVbm1hcFZpZXdPZkZpbGUoYnVmZmVyKTsKKyAgICByZXR1cm4gVW5tYXBWaWV3T2ZGaWxl
KGRhdGEuZGF0YSgpKTsKIH0KIAogYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQ
bGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBGaWxlT3Blbk1vZGUgb3Blbk1vZGUsIE1hcHBlZEZp
bGVNb2RlKQpAQCAtMzc0LDcgKzM3NCw3IEBAIGJvb2wgTWFwcGVkRmlsZURhdGE6Om1hcEZpbGVI
YW5kbGUoUGxhdGYKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byBzaXplID0gZmls
ZVNpemUoaGFuZGxlKTsKLSAgICBpZiAoIXNpemUgfHwgKnNpemUgPiBzdGQ6Om51bWVyaWNfbGlt
aXRzPHNpemVfdD46Om1heCgpIHx8ICpzaXplID4gc3RkOjpudW1lcmljX2xpbWl0czxkZWNsdHlw
ZShtX2ZpbGVTaXplKT46Om1heCgpKSB7CisgICAgaWYgKCFzaXplIHx8ICpzaXplID4gc3RkOjpu
dW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSB8fCAqc2l6ZSA+IHN0ZDo6bnVtZXJpY19saW1p
dHM8ZGVjbHR5cGUobV9maWxlRGF0YS5zaXplKCkpPjo6bWF4KCkpIHsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIApAQCAtNDAzLDExICs0MDMsMTIgQEAgYm9vbCBNYXBwZWRGaWxlRGF0
YTo6bWFwRmlsZUhhbmRsZShQbGF0ZgogICAgIGlmICghbWFwcGluZykKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgbV9maWxlRGF0YSA9IE1hcFZpZXdPZkZpbGUobWFwcGluZywgZGVzaXJl
ZEFjY2VzcywgMCwgMCwgKnNpemUpOworICAgIGF1dG8gZGF0YSA9IE1hcFZpZXdPZkZpbGUobWFw
cGluZywgZGVzaXJlZEFjY2VzcywgMCwgMCwgKnNpemUpOwogICAgIENsb3NlSGFuZGxlKG1hcHBp
bmcpOwotICAgIGlmICghbV9maWxlRGF0YSkKKyAgICBpZiAoIWRhdGEpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBtX2ZpbGVTaXplID0gKnNpemU7CisKKyAgICBtX2ZpbGVEYXRhID0gU3Bh
biB7IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpieXRlKj4oZGF0YSksICpzaXplIH07CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBACisyMDIx
LTA2LTExICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBBZG9wdCBT
cGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBbV0lQXQorCisgICAgICAgICogTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxp
Z2h0Lmg6CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHQ6OmVuY29kZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHQ6OmRlY29kZSk6CisgICAgICAgICogTW9kdWxl
cy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6dG9TaGFyZWRCdWZmZXIgY29uc3QpOgorICAgICAgICAq
IE1vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvclJlc3BvbnNlRGF0YS5oOgorICAgICAgICAo
V2ViQ29yZTo6ZW5jb2RlQXJyYXlCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZGVjb2RlQXJy
YXlCdWZmZXIpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlh
bENyZWF0aW9uT3B0aW9ucy5oOgorICAgICAgICAoV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlh
bENyZWF0aW9uT3B0aW9uczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1
dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpQ
dWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKiBN
b2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRXZWJTb2NrZXRBY2NlcHQpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0J1ZmZlclNvdXJjZS5oOgorICAgICAgICAoV2ViQ29yZTo6QnVm
ZmVyU291cmNlOjpieXRlcyBjb25zdCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OmRlY29kZSk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvU2VyaWFsaXplZE5GQS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6U2VyaWFsaXplZE5GQTo6cG9p
bnRlckF0T2Zmc2V0SW5GaWxlIGNvbnN0KToKKyAgICAgICAgKiBjcnlwdG8vbWFjL1NlcmlhbGl6
ZWRDcnlwdG9LZXlXcmFwTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQW5kU3RvcmVN
YXN0ZXJLZXkpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omhh
c2hQb2ludGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRPTVBhdGNoU3VwcG9ydDo6Y3JlYXRlRGlnZXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OmFkZFN0cmluZ1RvU0hBMSk6IERlbGV0ZWQuCisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JG
cm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZpY2F0ZSk6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
TmV0d29ya0FnZW50OjpnZXRTZXJpYWxpemVkQ2VydGlmaWNhdGUpOgorICAgICAgICAqIHBsYXRm
b3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9h
cmRDdXN0b21EYXRhOjpjcmVhdGVTaGFyZWRCdWZmZXIgY29uc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OlNo
YXJlZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmFwcGVuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpkYXRhIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmJ5dGVzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6ZGVjb2RlciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpzaXplIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRp
by9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNB
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Nb2RlbC5oOgorICAgICAgICAoV2ViQ29yZTo6TW9kZWw6OmVuY29kZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpNb2RlbDo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9QaXhlbEJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6UGl4ZWxCdWZmZXI6OmVu
Y29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6ZGVjb2RlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0
aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpDYXBhYmlsaXR5VmFsdWVPclJhbmdlOjplbmNvZGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FwYWJpbGl0eVZhbHVlT3JSYW5nZTo6ZGVjb2Rl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2Vu
dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZFN0cmluZ1RvU0hBMSk6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHA6CisgICAgICAgIChX
VEY6OlBlcnNpc3RlbmNlOjplbmNvZGVDRkRhdGEpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5j
ZTo6ZGVjb2RlQ0ZEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IpOgorICAg
ICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaDoKKyAgICAgICAgKiB3b3JrZXJz
L3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzKToKKyAgICAgICAgKiB3b3Jr
ZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTV1NjcmlwdFN0b3JhZ2U6OnN0b3JlKToKKwogMjAyMS0wNi0xMSAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIExhemlseSBjb21wdXRlIFNlY3VyaXR5T3JpZ2lu
OjptX2lzUG90ZW50aWFsbHlUcnVzdHdvcnRoeSBmb3IgcGVyZm9ybWFuY2UKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvSW5pdERhdGFSZWdpc3RyeS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0
YVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA0LDcgKzEwNCw3IEBAIHN0YXRpYyBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzYW5pdGl6ZUtleWkK
ICAgICBhdXRvIG9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgYXV0byBraWRz
QXJyYXkgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgZm9yIChhdXRvJiBidWZmZXIgOiBr
ZXlJREJ1ZmZlci52YWx1ZSgpKQotICAgICAgICBraWRzQXJyYXktPnB1c2hTdHJpbmcoYmFzZTY0
VVJMRW5jb2RlVG9TdHJpbmcoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKSk7CisgICAg
ICAgIGtpZHNBcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhidWZmZXIt
PmJ5dGVzKCkpKTsKICAgICBvYmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92ZShraWRzQXJy
YXkpKTsKIAogICAgIENTdHJpbmcganNvbkRhdGEgPSBvYmplY3QtPnRvSlNPTlN0cmluZygpLnV0
ZjgoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdo
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhp
Z2hsaWdodC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hp
Z2hsaWdodC9BcHBIaWdobGlnaHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBBcHBIaWdobGlnaHQ6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8c2l6ZV90Piho
aWdobGlnaHQtPnNpemUoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoaGln
aGxpZ2h0LT5kYXRhKCksIGhpZ2hsaWdodC0+c2l6ZSgpLCAxKTsKKyAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YSgqaGlnaGxpZ2h0LCAxKTsKIAogICAgIGVuY29kZXIgPDwgdGV4dDsK
IApAQCAtNzUsNyArNzUsNyBAQCBzdGQ6Om9wdGlvbmFsPEFwcEhpZ2hsaWdodD4gQXBwSGlnaGxp
Z2h0CiAKICAgICBWZWN0b3I8dWludDhfdD4gaGlnaGxpZ2h0OwogICAgIGhpZ2hsaWdodC5ncm93
KCpsZW5ndGgpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoaGlnaGxp
Z2h0LmRhdGEoKSwgaGlnaGxpZ2h0LnNpemUoKSwgMSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZUZpeGVkTGVuZ3RoRGF0YShoaWdobGlnaHQsIDEpKQogICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwogCiAgICAgc3RkOjpvcHRpb25hbDxzdGQ6Om9wdGlvbmFsPFN0cmluZz4+IHRleHQ7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHRSYW5nZURh
dGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0Fw
cEhpZ2hsaWdodFJhbmdlRGF0YS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFJhbmdlRGF0YS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUzLDcgKzUzLDcgQEAgUmVmPFNoYXJlZEJ1ZmZlcj4gQXBwSGlnaGxpZ2h0UmFu
Z2VEYXRhOgogewogICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2RlcjsKICAgICBl
bmNvZGVyIDw8ICp0aGlzOwotICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShlbmNvZGVy
LmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCkpOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIEFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6Tm9kZVBhdGhDb21wb25lbnQ6OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIE5ldHdvcmtTZW5kUXVldWUgUlRDRGF0
YUNoYW5uZWw6OmNyZWF0ZU0KICAgICAgICAgaWYgKCFjaGFubmVsLm1faGFuZGxlci0+c2VuZFN0
cmluZ0RhdGEodXRmOCkpCiAgICAgICAgICAgICBjaGFubmVsLnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6
RXJyb3IsICJFcnJvciBzZW5kaW5nIHN0cmluZyB0aHJvdWdoIFJUQ0RhdGFDaGFubmVsLiJfcyk7
CiAgICAgfSwgWyZjaGFubmVsXShhdXRvJiBzcGFuKSB7Ci0gICAgICAgIGlmICghY2hhbm5lbC5t
X2hhbmRsZXItPnNlbmRSYXdEYXRhKHNwYW4uZGF0YSgpLCBzcGFuLnNpemUoKSkpCisgICAgICAg
IGlmICghY2hhbm5lbC5tX2hhbmRsZXItPnNlbmRSYXdEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDhfdCo+KHNwYW4uZGF0YSgpKSwgc3Bhbi5zaXplKCkpKQogICAgICAgICAgICAgY2hh
bm5lbC5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VT
b3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAiRXJyb3Igc2VuZGluZyBiaW5hcnkgZGF0
YSB0aHJvdWdoIFJUQ0RhdGFDaGFubmVsLiJfcyk7CiAgICAgfSwgWyZjaGFubmVsXShFeGNlcHRp
b25Db2RlIGVycm9yQ29kZSkgewogICAgICAgICBpZiAoYXV0byogY29udGV4dCA9IGNoYW5uZWwu
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1t
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVp
Y2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDcg
QEAKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0NhdGNoU2NvcGUuaD4KICNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CiAjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KKyNp
bXBvcnQgPHd0Zi9jb2NvYS9TcGFuQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L0Jhc2U2NC5o
PgogCiAjaW1wb3J0IDxwYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaD4KQEAgLTI0Niw5ICsyNDcs
OSBAQCBzdGF0aWMgSlNWYWx1ZSAqanNWYWx1ZVdpdGhEYXRhSW5Db250ZXh0CiAgICAgLy8gRklY
TUU6IEFkZCBtYWtlQ0ZTdHJpbmcvbWFrZU5TU3RyaW5nIHRvIGF2b2lkIHVubmVjZXNzYXJ5IFN0
cmluZyBhbGxvY2F0aW9uLgogICAgIFN0cmluZyBkYXRhNjQ7CiAgICAgaWYgKCFtaW1lVHlwZS5p
c0VtcHR5KCkpCi0gICAgICAgIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgbWltZVR5cGUs
ICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoW2RhdGEgYnl0ZXNdLCBbZGF0YSBsZW5ndGhdKSk7
CisgICAgICAgIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgbWltZVR5cGUsICI7YmFzZTY0
LCIsIGJhc2U2NEVuY29kZWQoYXNCeXRlcyhkYXRhKSk7CiAgICAgZWxzZQotICAgICAgICBkYXRh
NjQgPSBtYWtlU3RyaW5nKCJkYXRhOnRleHQvcGxhaW47YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQo
W2RhdGEgYnl0ZXNdLCBbZGF0YSBsZW5ndGhdKSk7CisgICAgICAgIGRhdGE2NCA9IG1ha2VTdHJp
bmcoImRhdGE6dGV4dC9wbGFpbjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChhc0J5dGVzKGRhdGEp
KSk7CiAKICAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoT2JqZWN0OihpZClkYXRhNjQuY3Jl
YXRlQ0ZTdHJpbmcoKS5nZXQoKSBpbkNvbnRleHQ6Y29udGV4dF07CiB9CkBAIC0zNDAsNyArMzQx
LDcgQEAgc3RhdGljIEpTVmFsdWUgKmpzVmFsdWVXaXRoQVZNZXRhZGF0YUl0ZQogICAgICAgICBp
ZCB2YWx1ZSA9IGl0ZW0udmFsdWU7CiAgICAgICAgIE5TU3RyaW5nICptaW1lVHlwZSA9IFtbaXRl
bSBleHRyYUF0dHJpYnV0ZXNdIG9iamVjdEZvcktleTpAIk1JTUV0eXBlIl07CiAgICAgICAgIGlm
IChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNEYXRhIGNsYXNzXV0gJiYgbWltZVR5cGUpIHsKLSAg
ICAgICAgICAgIGF1dG8gZGF0YTY0ID0gbWFrZVN0cmluZygiZGF0YToiLCBTdHJpbmcobWltZVR5
cGUpLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKFt2YWx1ZSBieXRlc10sIFt2YWx1ZSBsZW5n
dGhdKSk7CisgICAgICAgICAgICBhdXRvIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgU3Ry
aW5nKG1pbWVUeXBlKSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChhc0J5dGVzKChOU0RhdGEg
Kil2YWx1ZSkpKTsKICAgICAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDooX19icmlkZ2Ug
TlNTdHJpbmcgKilkYXRhNjQuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSBmb3JLZXk6QCJ2YWx1ZSJd
OwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDp2YWx1
ZSBmb3JLZXk6QCJ2YWx1ZSJdOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRo
bi9BdXRoZW50aWNhdG9yQ29vcmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcAkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNh
dG9yQ29vcmRpbmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHN0YXRp
YyBSZWY8QXJyYXlCdWZmZXI+IHByb2R1Y2VDbGllbnREYXQKICAgICAgICAgb2JqZWN0LT5zZXRT
dHJpbmcoInR5cGUiX3MsICJ3ZWJhdXRobi5nZXQiX3MpOwogICAgICAgICBicmVhazsKICAgICB9
Ci0gICAgb2JqZWN0LT5zZXRTdHJpbmcoImNoYWxsZW5nZSJfcywgYmFzZTY0VVJMRW5jb2RlVG9T
dHJpbmcoY2hhbGxlbmdlLmRhdGEoKSwgY2hhbGxlbmdlLmxlbmd0aCgpKSk7CisgICAgb2JqZWN0
LT5zZXRTdHJpbmcoImNoYWxsZW5nZSJfcywgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY2hhbGxl
bmdlLmJ5dGVzKCkpKTsKICAgICBvYmplY3QtPnNldFN0cmluZygib3JpZ2luIl9zLCBvcmlnaW4u
dG9SYXdTdHJpbmcoKSk7CiAKICAgICBhdXRvIHV0ZjhKU09OU3RyaW5nID0gb2JqZWN0LT50b0pT
T05TdHJpbmcoKS51dGY4KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhu
L0F1dGhlbnRpY2F0b3JSZXNwb25zZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRpY2F0b3JSZXNwb25zZURhdGEuaAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9y
UmVzcG9uc2VEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4KIHN0YXRpYyB2b2lkIGVuY29kZUFycmF5QnVmZmVyKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IEFycmF5QnVmZmVyJiBidWZmZXIpCiB7CiAgICAgZW5jb2RlciA8PCBzdGF0
aWNfY2FzdDx1aW50NjRfdD4oYnVmZmVyLmJ5dGVMZW5ndGgoKSk7Ci0gICAgZW5jb2Rlci5lbmNv
ZGVGaXhlZExlbmd0aERhdGEoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZlci5kYXRh
KCkpLCBidWZmZXIuYnl0ZUxlbmd0aCgpLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShidWZmZXIuYnl0ZXMoKSwgMSk7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
CkBAIC03NSw3ICs3NSw3IEBAIFJlZlB0cjxBcnJheUJ1ZmZlcj4gZGVjb2RlQXJyYXlCdWZmZXIo
RGUKICAgICBhdXRvIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjp0cnlDcmVhdGUobGVuZ3RoLnZhbHVl
KCksIHNpemVvZih1aW50OF90KSk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoc3RhdGljX2Nh
c3Q8dWludDhfdCo+KGJ1ZmZlci0+ZGF0YSgpKSwgbGVuZ3RoLnZhbHVlKCksIDEpKQorICAgIGlm
ICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLT53cml0YWJsZUJ5dGVzKCks
IDEpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gYnVmZmVyOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tl
eUNyZWRlbnRpYWwuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
NCw3ICs1NCw3IEBAIEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgUHUKIH0K
IAogUHVibGljS2V5Q3JlZGVudGlhbDo6UHVibGljS2V5Q3JlZGVudGlhbChSZWY8QXV0aGVudGlj
YXRvclJlc3BvbnNlPiYmIHJlc3BvbnNlKQotICAgIDogQmFzaWNDcmVkZW50aWFsKGJhc2U2NFVS
TEVuY29kZVRvU3RyaW5nKHJlc3BvbnNlLT5yYXdJZCgpLT5kYXRhKCksIHJlc3BvbnNlLT5yYXdJ
ZCgpLT5ieXRlTGVuZ3RoKCkpLCBUeXBlOjpQdWJsaWNLZXksIERpc2NvdmVyeTo6UmVtb3RlKQor
ICAgIDogQmFzaWNDcmVkZW50aWFsKGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKHJlc3BvbnNlLT5y
YXdJZCgpLT5ieXRlcygpKSwgVHlwZTo6UHVibGljS2V5LCBEaXNjb3Zlcnk6OlJlbW90ZSkKICAg
ICAsIG1fcmVzcG9uc2UoV1RGTW92ZShyZXNwb25zZSkpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tl
eUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw4ICsxNDEsOCBAQCB0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPgogdm9pZCBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IHJwLmlkIDw8IHJwLm5h
bWUgPDwgcnAuaWNvbjsKLSAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih1c2Vy
LmlkLmxlbmd0aCgpKTsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YSh1c2VyLmlk
LmRhdGEoKSwgdXNlci5pZC5sZW5ndGgoKSwgMSk7CisgICAgZW5jb2RlciA8PCBzdGF0aWNfY2Fz
dDx1aW50NjRfdD4odXNlci5pZC5ieXRlcygpLnNpemUoKSk7CisgICAgZW5jb2Rlci5lbmNvZGVG
aXhlZExlbmd0aERhdGEodXNlci5pZC5ieXRlcygpLCAxKTsKICAgICBlbmNvZGVyIDw8IHVzZXIu
ZGlzcGxheU5hbWUgPDwgdXNlci5uYW1lIDw8IHVzZXIuaWNvbiA8PCBwdWJLZXlDcmVkUGFyYW1z
IDw8IHRpbWVvdXQgPDwgZXhjbHVkZUNyZWRlbnRpYWxzIDw8IGF1dGhlbnRpY2F0b3JTZWxlY3Rp
b24gPDwgYXR0ZXN0YXRpb24gPDwgZXh0ZW5zaW9uczsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVu
dGlhbERlc2NyaXB0b3IuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw4ICs0Nyw4IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIFB1Ymxp
Y0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QK
IHsKICAgICBlbmNvZGVyIDw8IHR5cGU7Ci0gICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50
NjRfdD4oaWQubGVuZ3RoKCkpOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGlk
LmRhdGEoKSwgaWQubGVuZ3RoKCksIDEpOworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KGlkLmJ5dGVzKCkuc2l6ZSgpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3Ro
RGF0YShpZC5ieXRlcygpLCAxKTsKICAgICBlbmNvZGVyIDw8IHRyYW5zcG9ydHM7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJT
b2NrZXRIYW5kc2hha2UuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTcsMTkgKzk3LDIwIEBAIHN0YXRpYyBTdHJpbmcgZ2VuZXJhdGVTZWNXZWJTb2NrZXRLZXko
KQogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgbm9uY2VTaXplID0gMTY7CiAgICAgdW5zaWduZWQg
Y2hhciBrZXlbbm9uY2VTaXplXTsKICAgICBjcnlwdG9ncmFwaGljYWxseVJhbmRvbVZhbHVlcyhr
ZXksIG5vbmNlU2l6ZSk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGtleSwgbm9u
Y2VTaXplKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoa2V5KTsKIH0KIAogU3Ry
aW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRXZWJTb2NrZXRBY2NlcHQoY29uc3Qg
U3RyaW5nJiBzZWNXZWJTb2NrZXRLZXkpCiB7CiAgICAgY29uc3RleHByIHVpbnQ4X3Qgd2ViU29j
a2V0S2V5R1VJRFtdID0gIjI1OEVBRkE1LUU5MTQtNDdEQS05NUNBLUM1QUIwREM4NUIxMSI7CisK
ICAgICBTSEExIHNoYTE7Ci0gICAgQ1N0cmluZyBrZXlEYXRhID0gc2VjV2ViU29ja2V0S2V5LmFz
Y2lpKCk7Ci0gICAgc2hhMS5hZGRCeXRlcyhrZXlEYXRhLmRhdGFBc1VJbnQ4UHRyKCksIGtleURh
dGEubGVuZ3RoKCkpOwotICAgIHNoYTEuYWRkQnl0ZXMod2ViU29ja2V0S2V5R1VJRCwgc3RkOjpz
aXplKHdlYlNvY2tldEtleUdVSUQpIC0gMSk7CisgICAgc2hhMS5hZGRCeXRlcyhzZWNXZWJTb2Nr
ZXRLZXkuYXNjaWkoKS5ieXRlcygpKTsKKyAgICBzaGExLmFkZEJ5dGVzKHdlYlNvY2tldEtleUdV
SUQpOworCiAgICAgU0hBMTo6RGlnZXN0IGhhc2g7CiAgICAgc2hhMS5jb21wdXRlSGFzaChoYXNo
KTsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaGFzaC5kYXRhKCksIFNIQTE6Omhh
c2hTaXplKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaGFzaCk7CiB9CiAKIFdl
YlNvY2tldEhhbmRzaGFrZTo6V2ViU29ja2V0SGFuZHNoYWtlKGNvbnN0IFVSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIHByb3RvY29sLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5n
JiBjbGllbnRPcmlnaW4sIGJvb2wgYWxsb3dDb29raWVzKQpJbmRleDogU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2oveGNzaGFyZWRkYXRhL3hjc2NoZW1lcy9XZWJDb3JlLnhjc2NoZW1l
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3hjc2hhcmVk
ZGF0YS94Y3NjaGVtZXMvV2ViQ29yZS54Y3NjaGVtZQkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2oveGNzaGFyZWRkYXRhL3hjc2NoZW1lcy9XZWJD
b3JlLnhjc2NoZW1lCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw5IEBACiAgICAgICBpZ25v
cmVzUGVyc2lzdGVudFN0YXRlT25MYXVuY2ggPSAiTk8iCiAgICAgICBkZWJ1Z0RvY3VtZW50VmVy
c2lvbmluZyA9ICJZRVMiCiAgICAgICBkZWJ1Z1NlcnZpY2VFeHRlbnNpb24gPSAiaW50ZXJuYWwi
Ci0gICAgICBhbGxvd0xvY2F0aW9uU2ltdWxhdGlvbiA9ICJZRVMiPgorICAgICAgZW5hYmxlR1BV
RnJhbWVDYXB0dXJlTW9kZSA9ICIzIgorICAgICAgYWxsb3dMb2NhdGlvblNpbXVsYXRpb24gPSAi
WUVTIgorICAgICAgR1BVUHJvZmlsZXJFbmFibGVkID0gIk5vIj4KICAgIDwvTGF1bmNoQWN0aW9u
PgogICAgPFByb2ZpbGVBY3Rpb24KICAgICAgIGJ1aWxkQ29uZmlndXJhdGlvbiA9ICJSZWxlYXNl
IgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQnVmZmVyU291cmNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQnVmZmVyU291cmNlLmgJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0J1ZmZlclNvdXJjZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1NywxMyBAQCBwdWJsaWM6CiAgICAgICAgIH0sIG1f
dmFyaWFudCk7CiAgICAgfQogCisgICAgU3Bhbjxjb25zdCB1aW50OF90PiBieXRlcygpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjp2aXNpdChbXShhdXRvJiBidWZmZXIpIC0+IFNw
YW48Y29uc3QgdWludDhfdD4geworICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlciA/IFNwYW48Y29u
c3QgdWludDhfdD4geyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYnVmZmVyLT5kYXRhKCkp
LCBidWZmZXItPmJ5dGVMZW5ndGgoKSB9IDogU3Bhbjxjb25zdCB1aW50OF90PiB7IH07CisgICAg
ICAgIH0sIG1fdmFyaWFudCk7CisgICAgfQorCiBwcml2YXRlOgogICAgIFZhcmlhbnRUeXBlIG1f
dmFyaWFudDsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE2NCwxNSArMTY0LDE1IEBAIHZvaWQgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjplbmNvZGUoRW5j
b2QKIAogICAgIGlmIChoYXNBcnJheSkgewogICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0
PHVpbnQ2NF90PihtX2FycmF5QnVmZmVyQ29udGVudHNBcnJheS0+c2l6ZSgpKTsKLSAgICAgICAg
Zm9yIChjb25zdCBhdXRvICZhcnJheUJ1ZmZlckNvbnRlbnRzIDogKm1fYXJyYXlCdWZmZXJDb250
ZW50c0FycmF5KSB7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgYXJyYXlCdWZmZXJDb250ZW50
cyA6ICptX2FycmF5QnVmZmVyQ29udGVudHNBcnJheSkgewogICAgICAgICAgICAgZW5jb2RlciA8
PCBhcnJheUJ1ZmZlckNvbnRlbnRzLnNpemVJbkJ5dGVzKCk7Ci0gICAgICAgICAgICBlbmNvZGVy
LmVuY29kZUZpeGVkTGVuZ3RoRGF0YShzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYXJyYXlC
dWZmZXJDb250ZW50cy5kYXRhKCkpLCBhcnJheUJ1ZmZlckNvbnRlbnRzLnNpemVJbkJ5dGVzKCks
IDEpOworICAgICAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYXJyYXlCdWZm
ZXJDb250ZW50cy5ieXRlcygpLCAxKTsKICAgICAgICAgfQogICAgIH0KIAogI2lmIEVOQUJMRShX
RUJfUlRDKQogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1fZGV0YWNoZWRS
VENEYXRhQ2hhbm5lbHMuc2l6ZSgpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8gJmNoYW5uZWwgOiBt
X2RldGFjaGVkUlRDRGF0YUNoYW5uZWxzKQorICAgIGZvciAoY29uc3QgYXV0byYgY2hhbm5lbCA6
IG1fZGV0YWNoZWRSVENEYXRhQ2hhbm5lbHMpCiAgICAgICAgIGVuY29kZXIgPDwgKmNoYW5uZWw7
CiAjZW5kaWYKIH0KQEAgLTIwNiw3ICsyMDYsNyBAQCBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBTZXJpYWxpemVkCiAgICAgICAgICAgICBhdXRvIGJ1ZmZlciA9IEdpZ2FjYWdlOjp0cnlN
YWxsb2MoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgYnVmZmVyU2l6ZSk7CiAgICAgICAgICAgICBpZiAo
IWJ1ZmZlcikKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoc3RhdGljX2Nhc3Q8dWludDhfdCo+KGJ1
ZmZlciksIGJ1ZmZlclNpemUsIDEpKSB7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKFNwYW4geyBzdGF0aWNfY2FzdDxzdGQ6OmJ5dGUqPihidWZmZXIpLCBi
dWZmZXJTaXplIH0sIDEpKSB7CiAgICAgICAgICAgICAgICAgR2lnYWNhZ2U6OmZyZWUoR2lnYWNh
Z2U6OlByaW1pdGl2ZSwgYnVmZmVyKTsKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL1Nl
cmlhbGl6ZWRORkEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL1NlcmlhbGl6ZWRORkEuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9TZXJpYWxpemVkTkZBLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA3LDcgKzEwNyw3IEBAIFNlcmlhbGl6ZWRORkE6OlNlcmlhbGl6ZWRORkEoRmlsZVN5c3Rl
bToKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBjb25zdCBUKiBTZXJpYWxpemVkTkZBOjpwb2ludGVy
QXRPZmZzZXRJbkZpbGUoc2l6ZV90IG9mZnNldCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBUKj4oc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1fZmlsZS5k
YXRhKCkpICsgb2Zmc2V0KTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4o
bV9maWxlLmRhdGEoKS5kYXRhKCkgKyBvZmZzZXQpOwogfQogCiBhdXRvIFNlcmlhbGl6ZWRORkE6
Om5vZGVzKCkgY29uc3QgLT4gY29uc3QgUmFuZ2U8SW1tdXRhYmxlTkZBTm9kZT4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5RUNNYWMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5RUNNYWMuY3BwCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTk3LDEwICsxOTcsMTAgQEAgYm9vbCBDcnlwdG9LZXlFQzo6cGxh
dGZvcm1BZGRGaWVsZEVsZW1lbgogCiAgICAgaWYgKFVOTElLRUxZKChzaXplICE9IHB1YmxpY0tl
eVNpemUpICYmIChzaXplICE9IHByaXZhdGVLZXlTaXplKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBqd2sueCA9IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKHJlc3VsdC5kYXRhKCkgKyAx
LCBrZXlTaXplSW5CeXRlcyk7Ci0gICAgandrLnkgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhy
ZXN1bHQuZGF0YSgpICsga2V5U2l6ZUluQnl0ZXMgKyAxLCBrZXlTaXplSW5CeXRlcyk7CisgICAg
andrLnggPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhTcGFuIHsgcmVzdWx0IH0uc3Vic3Bhbigx
LCBrZXlTaXplSW5CeXRlcykpOworICAgIGp3ay55ID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmco
U3BhbiB7IHJlc3VsdCB9LnN1YnNwYW4oMSArIGtleVNpemVJbkJ5dGVzLCBrZXlTaXplSW5CeXRl
cykpOwogICAgIGlmIChzaXplID4gcHVibGljS2V5U2l6ZSkKLSAgICAgICAgandrLmQgPSBiYXNl
NjRVUkxFbmNvZGVUb1N0cmluZyhyZXN1bHQuZGF0YSgpICsgcHVibGljS2V5U2l6ZSwga2V5U2l6
ZUluQnl0ZXMpOworICAgICAgICBqd2suZCA9IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKFNwYW4g
eyByZXN1bHQgfS5zdWJzcGFuKHB1YmxpY0tleVNpemUsIGtleVNpemVJbkJ5dGVzKSk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvU2VyaWFs
aXplZENyeXB0b0tleVdyYXBNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5
cHRvL21hYy9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5tbQkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2ltcG9ydCA8d3RmL0NyeXB0b2dy
YXBoaWNVdGlsaXRpZXMuaD4KICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+CiAjaW1w
b3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvY2YvU3BhbkNGLmg+CiAjaW1wb3J0
IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi9zcGkvY29jb2EvU2VjdXJp
dHlTUEkuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L0Jhc2U2NC5oPgpAQCAtMTY3LDcgKzE2OCw3IEBA
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZmkKICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKICAgICB9CiAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4ga2V5RGF0YSA9
IGFkb3B0Q0Yoa2V5RGF0YVJlZik7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZShDRkRhdGFHZXRC
eXRlUHRyKGtleURhdGEuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgoa2V5RGF0YS5nZXQoKSkpOwor
ICAgIHJldHVybiBiYXNlNjREZWNvZGUoYXNCeXRlcyhrZXlEYXRhLmdldCgpKSk7CiB9CiAKIHN0
ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYwNiw3ICsxNjA2LDggQEAgRXhjZXB0
aW9uT3I8dm9pZD4gTm9kZTo6c2V0VGV4dENvbnRlbnQoYwogc3RhdGljIFNIQTE6OkRpZ2VzdCBo
YXNoUG9pbnRlcihjb25zdCB2b2lkKiBwb2ludGVyKQogewogICAgIFNIQTEgc2hhMTsKLSAgICBz
aGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZwb2ludGVyKSwg
c2l6ZW9mKHBvaW50ZXIpKTsKKyAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmcG9pbnRlciwgMSB9
KTsKKwogICAgIFNIQTE6OkRpZ2VzdCBkaWdlc3Q7CiAgICAgc2hhMS5jb21wdXRlSGFzaChkaWdl
c3QpOwogICAgIHJldHVybiBkaWdlc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Zp
bGVSZWFkZXJMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkv
RmlsZVJlYWRlckxvYWRlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzOCw3ICsz
MzgsNyBAQCB2b2lkIEZpbGVSZWFkZXJMb2FkZXI6OmNvbnZlcnRUb0RhdGFVUkwoCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBtX3N0cmluZ1Jlc3VsdCA9IG1ha2VTdHJpbmcoImRhdGE6
IiwgbV9kYXRhVHlwZS5pc0VtcHR5KCkgPyAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiA6IG1f
ZGF0YVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQobV9yYXdEYXRhLT5kYXRhKCksIG1f
Ynl0ZXNMb2FkZWQpKTsKKyAgICBtX3N0cmluZ1Jlc3VsdCA9IG1ha2VTdHJpbmcoImRhdGE6Iiwg
bV9kYXRhVHlwZS5pc0VtcHR5KCkgPyAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiA6IG1fZGF0
YVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQobV9yYXdEYXRhLT5ieXRlcygpKSk7CiB9
CiAKIGJvb2wgRmlsZVJlYWRlckxvYWRlcjo6aXNDb21wbGV0ZWQoKSBjb25zdApJbmRleDogU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9maWxlYXBpL05ldHdvcmtTZW5kUXVldWUuY3BwCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL05ldHdvcmtTZW5kUXVldWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MywxMSArNTMsMTAgQEAgdm9pZCBOZXR3b3JrU2VuZFF1ZXVlOjplbnF1
ZXVlKENTdHJpbmcmJgogdm9pZCBOZXR3b3JrU2VuZFF1ZXVlOjplbnF1ZXVlKGNvbnN0IEpTQzo6
QXJyYXlCdWZmZXImIGJpbmFyeURhdGEsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5
dGVMZW5ndGgpCiB7CiAgICAgaWYgKG1fcXVldWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGF1dG8q
IGRhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYmluYXJ5RGF0YS5kYXRhKCkpOwot
ICAgICAgICBtX3dyaXRlUmF3RGF0YShTcGFuIHsgZGF0YSArIGJ5dGVPZmZzZXQsIGJ5dGVMZW5n
dGggfSk7CisgICAgICAgIG1fd3JpdGVSYXdEYXRhKGJpbmFyeURhdGEuYnl0ZXMoKS5zdWJzcGFu
KGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBt
X3F1ZXVlLmFwcGVuZChTaGFyZWRCdWZmZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDxjb25zdCB1aW50
OF90Kj4oYmluYXJ5RGF0YS5kYXRhKCkpICsgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkpOworICAg
IG1fcXVldWUuYXBwZW5kKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGJpbmFyeURhdGEuYnl0ZXMoKS5z
dWJzcGFuKGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKSk7CiB9CiAKIHZvaWQgTmV0d29ya1NlbmRR
dWV1ZTo6ZW5xdWV1ZShXZWJDb3JlOjpCbG9iJiBibG9iKQpAQCAtOTMsNyArOTIsOSBAQCB2b2lk
IE5ldHdvcmtTZW5kUXVldWU6OnByb2Nlc3NNZXNzYWdlcygpCiAgICAgICAgIHN3aXRjaE9uKG1f
cXVldWUuZmlyc3QoKSwgW3RoaXNdKGNvbnN0IENTdHJpbmcmIHV0ZjgpIHsKICAgICAgICAgICAg
IG1fd3JpdGVTdHJpbmcodXRmOCk7CiAgICAgICAgIH0sIFt0aGlzXShSZWY8U2hhcmVkQnVmZmVy
PiYgZGF0YSkgewotICAgICAgICAgICAgZGF0YS0+Zm9yRWFjaFNlZ21lbnQobV93cml0ZVJhd0Rh
dGEpOworICAgICAgICAgICAgZGF0YS0+Zm9yRWFjaFNlZ21lbnQoW3RoaXNdKGF1dG8mIHNwYW4p
IHsKKyAgICAgICAgICAgICAgICBtX3dyaXRlUmF3RGF0YShhc0J5dGVzKHNwYW4pKTsKKyAgICAg
ICAgICAgIH0pOwogICAgICAgICB9LCBbdGhpcywgJnNob3VsZFN0b3BQcm9jZXNzaW5nXShVbmlx
dWVSZWY8QmxvYkxvYWRlcj4mIGxvYWRlcikgewogICAgICAgICAgICAgYXV0byBlcnJvckNvZGUg
PSBsb2FkZXItPmVycm9yQ29kZSgpOwogICAgICAgICAgICAgaWYgKGxvYWRlci0+aXNMb2FkaW5n
KCkgfHwgKGVycm9yQ29kZSAmJiBlcnJvckNvZGUudmFsdWUoKSA9PSBBYm9ydEVycm9yKSkgewpA
QCAtMTAyLDcgKzEwMyw3IEBAIHZvaWQgTmV0d29ya1NlbmRRdWV1ZTo6cHJvY2Vzc01lc3NhZ2Vz
KCkKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGNvbnN0IGF1dG8mIHJlc3VsdCA9
IGxvYWRlci0+YXJyYXlCdWZmZXJSZXN1bHQoKSkgewotICAgICAgICAgICAgICAgIG1fd3JpdGVS
YXdEYXRhKFNwYW4geyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4ocmVzdWx0LT5kYXRhKCkp
LCByZXN1bHQtPmJ5dGVMZW5ndGgoKSB9KTsKKyAgICAgICAgICAgICAgICBtX3dyaXRlUmF3RGF0
YShyZXN1bHQtPmJ5dGVzKCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIEFTU0VSVChlcnJvckNvZGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2ZpbGVhcGkvTmV0d29ya1NlbmRRdWV1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3
ICs0OCw3IEBAIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIE5ldHdv
cmtTZW5kUXVldWUgOiBwdWJsaWMgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIgewogcHVibGlj
OgogICAgIHVzaW5nIFdyaXRlU3RyaW5nID0gRnVuY3Rpb248dm9pZChjb25zdCBDU3RyaW5nJiB1
dGY4KT47Ci0gICAgdXNpbmcgV3JpdGVSYXdEYXRhID0gRnVuY3Rpb248dm9pZChjb25zdCBTcGFu
PGNvbnN0IHVpbnQ4X3Q+Jik+OworICAgIHVzaW5nIFdyaXRlUmF3RGF0YSA9IEZ1bmN0aW9uPHZv
aWQoY29uc3QgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+Jik+OwogICAgIGVudW0gY2xhc3MgQ29udGlu
dWUgeyBObywgWWVzIH07CiAgICAgdXNpbmcgUHJvY2Vzc0Vycm9yID0gRnVuY3Rpb248Q29udGlu
dWUoRXhjZXB0aW9uQ29kZSk+OwogICAgIE5ldHdvcmtTZW5kUXVldWUoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYsIFdyaXRlU3RyaW5nJiYsIFdyaXRlUmF3RGF0YSYmLCBQcm9jZXNzRXJyb3ImJik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3Vw
cG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5NCwyOCArMzk0LDIzIEBAIEV4Y2VwdGlvbk9y
PHZvaWQ+IERPTVBhdGNoU3VwcG9ydDo6aW5uZXIKICAgICByZXR1cm4geyB9OwogfQogCi1zdGF0
aWMgdm9pZCBhZGRTdHJpbmdUb1NIQTEoU0hBMSYgc2hhMSwgY29uc3QgU3RyaW5nJiBzdHJpbmcp
Ci17Ci0gICAgQ1N0cmluZyBjU3RyaW5nID0gc3RyaW5nLnV0ZjgoKTsKLSAgICBzaGExLmFkZEJ5
dGVzKGNTdHJpbmcuZGF0YUFzVUludDhQdHIoKSwgY1N0cmluZy5sZW5ndGgoKSk7Ci19Ci0KIHN0
ZDo6dW5pcXVlX3B0cjxET01QYXRjaFN1cHBvcnQ6OkRpZ2VzdD4gRE9NUGF0Y2hTdXBwb3J0Ojpj
cmVhdGVEaWdlc3QoTm9kZSYgbm9kZSwgVW51c2VkTm9kZXNNYXAqIHVudXNlZE5vZGVzTWFwKQog
ewogICAgIGF1dG8gZGlnZXN0ID0gbWFrZVVuaXF1ZTxEaWdlc3Q+KCk7CiAgICAgZGlnZXN0LT5u
b2RlID0gJm5vZGU7CisKICAgICBTSEExIHNoYTE7CiAKICAgICBhdXRvIG5vZGVUeXBlID0gbm9k
ZS5ub2RlVHlwZSgpOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50OF90Kj4oJm5vZGVUeXBlKSwgc2l6ZW9mKG5vZGVUeXBlKSk7Ci0gICAgYWRkU3RyaW5nVG9T
SEExKHNoYTEsIG5vZGUubm9kZU5hbWUoKSk7Ci0gICAgYWRkU3RyaW5nVG9TSEExKHNoYTEsIG5v
ZGUubm9kZVZhbHVlKCkpOworICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZub2RlVHlwZSwgMSB9
KTsKKyAgICBzaGExLmFkZEJ5dGVzKG5vZGUubm9kZU5hbWUoKS51dGY4KCkuYnl0ZXMoKSk7Cisg
ICAgc2hhMS5hZGRCeXRlcyhub2RlLm5vZGVWYWx1ZSgpLnV0ZjgoKS5ieXRlcygpKTsKIAogICAg
IGlmIChub2RlLm5vZGVUeXBlKCkgPT0gTm9kZTo6RUxFTUVOVF9OT0RFKSB7CiAgICAgICAgIE5v
ZGUqIGNoaWxkID0gbm9kZS5maXJzdENoaWxkKCk7CiAgICAgICAgIHdoaWxlIChjaGlsZCkgewog
ICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPERpZ2VzdD4gY2hpbGRJbmZvID0gY3JlYXRlRGln
ZXN0KCpjaGlsZCwgdW51c2VkTm9kZXNNYXApOwotICAgICAgICAgICAgYWRkU3RyaW5nVG9TSEEx
KHNoYTEsIGNoaWxkSW5mby0+c2hhMSk7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGNoaWxk
SW5mby0+c2hhMS51dGY4KCkuYnl0ZXMoKSk7CiAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT5u
ZXh0U2libGluZygpOwogICAgICAgICAgICAgZGlnZXN0LT5jaGlsZHJlbi5hcHBlbmQoV1RGTW92
ZShjaGlsZEluZm8pKTsKICAgICAgICAgfQpAQCAtNDI0LDE5ICs0MTksMTkgQEAgc3RkOjp1bmlx
dWVfcHRyPERPTVBhdGNoU3VwcG9ydDo6RGlnZXN0PgogICAgICAgICBpZiAoZWxlbWVudC5oYXNB
dHRyaWJ1dGVzV2l0aG91dFVwZGF0ZSgpKSB7CiAgICAgICAgICAgICBTSEExIGF0dHJzU0hBMTsK
ICAgICAgICAgICAgIGZvciAoYXV0byYgYXR0cmlidXRlIDogZWxlbWVudC5hdHRyaWJ1dGVzSXRl
cmF0b3IoKSkgewotICAgICAgICAgICAgICAgIGFkZFN0cmluZ1RvU0hBMShhdHRyc1NIQTEsIGF0
dHJpYnV0ZS5uYW1lKCkudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgYWRkU3RyaW5nVG9T
SEExKGF0dHJzU0hBMSwgYXR0cmlidXRlLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIGF0dHJz
U0hBMS5hZGRCeXRlcyhhdHRyaWJ1dGUubmFtZSgpLnRvU3RyaW5nKCkudXRmOCgpLmJ5dGVzKCkp
OworICAgICAgICAgICAgICAgIGF0dHJzU0hBMS5hZGRCeXRlcyhhdHRyaWJ1dGUudmFsdWUoKS5z
dHJpbmcoKS51dGY4KCkuYnl0ZXMoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTSEEx
OjpEaWdlc3QgYXR0cnNIYXNoOwogICAgICAgICAgICAgYXR0cnNTSEExLmNvbXB1dGVIYXNoKGF0
dHJzSGFzaCk7Ci0gICAgICAgICAgICBkaWdlc3QtPmF0dHJzU0hBMSA9IGJhc2U2NEVuY29kZVRv
U3RyaW5nKGF0dHJzSGFzaC5kYXRhKCksIDEwKTsKLSAgICAgICAgICAgIGFkZFN0cmluZ1RvU0hB
MShzaGExLCBkaWdlc3QtPmF0dHJzU0hBMSk7CisgICAgICAgICAgICBkaWdlc3QtPmF0dHJzU0hB
MSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGF0dHJzSGFzaCk7CisgICAgICAgICAgICBzaGExLmFk
ZEJ5dGVzKGRpZ2VzdC0+YXR0cnNTSEExLnV0ZjgoKS5ieXRlcygpKTsKICAgICAgICAgfQogICAg
IH0KIAogICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwogICAgIHNoYTEuY29tcHV0ZUhhc2goaGFzaCk7
Ci0gICAgZGlnZXN0LT5zaGExID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaGFzaC5kYXRhKCksIDEw
KTsKKyAgICBkaWdlc3QtPnNoYTEgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhoYXNoKTsKICAgICBp
ZiAodW51c2VkTm9kZXNNYXApCiAgICAgICAgIHVudXNlZE5vZGVzTWFwLT5hZGQoZGlnZXN0LT5z
aGExLCBkaWdlc3QuZ2V0KCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYwMiw3ICs2MDIsNyBAQCBib29sIEluc3BlY3RvckZyb250ZW5kSG9zdDo6c2hv
d0NlcnRpZmljCiAgICAgaWYgKCFkYXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBX
VEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXpl
KCkpOworICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlciB7ICpkYXRhIH07CiAg
ICAgc3RkOjpvcHRpb25hbDxDZXJ0aWZpY2F0ZUluZm8+IGNlcnRpZmljYXRlSW5mbzsKICAgICBk
ZWNvZGVyID4+IGNlcnRpZmljYXRlSW5mbzsKICAgICBpZiAoIWNlcnRpZmljYXRlSW5mbykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRh
LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdv
cmtSZXNvdXJjZXNEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBAIHVu
c2lnbmVkIE5ldHdvcmtSZXNvdXJjZXNEYXRhOjpSZXNvdXJjZUQKICAgICAgICAgbV9jb250ZW50
ID0gbV9kZWNvZGVyLT5kZWNvZGVBbmRGbHVzaChtX2RhdGFCdWZmZXItPmRhdGEoKSwgZGF0YUxl
bmd0aCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9iYXNlNjRFbmNvZGVkID0gdHJ1ZTsKLSAg
ICAgICAgbV9jb250ZW50ID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcobV9kYXRhQnVmZmVyLT5kYXRh
KCksIGRhdGFMZW5ndGgpOworICAgICAgICBtX2NvbnRlbnQgPSBiYXNlNjRFbmNvZGVUb1N0cmlu
ZyhtX2RhdGFCdWZmZXItPmJ5dGVzKCkpOwogICAgIH0KIAogICAgIG1fZGF0YUJ1ZmZlciA9IG51
bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRP
TUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRPTUFnZW50LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE2OTgsNyArMTY5OCw3IEBAIHN0YXRpYyBTdHJpbmcgY29tcHV0ZUNvbnRlbnRTZWN1cml0
eVBvbGkKICAgICBhdXRvIGNyeXB0b0RpZ2VzdCA9IFBBTDo6Q3J5cHRvRGlnZXN0OjpjcmVhdGUo
UEFMOjpDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzI1Nik7CiAgICAgY3J5cHRvRGlnZXN0
LT5hZGRCeXRlcyhjb250ZW50LmRhdGEoKSwgY29udGVudC5zaXplKCkpOwogICAgIGF1dG8gZGln
ZXN0ID0gY3J5cHRvRGlnZXN0LT5jb21wdXRlSGFzaCgpOwotICAgIHJldHVybiBtYWtlU3RyaW5n
KCJzaGEyNTYtIiwgYmFzZTY0RW5jb2RlZChkaWdlc3QuZGF0YSgpLCBkaWdlc3Quc2l6ZSgpKSk7
CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoInNoYTI1Ni0iLCBiYXNlNjRFbmNvZGVkKGRpZ2VzdCkp
OwogfQogCiBSZWY8UHJvdG9jb2w6OkRPTTo6Tm9kZT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxk
T2JqZWN0Rm9yTm9kZShOb2RlKiBub2RlLCBpbnQgZGVwdGgpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQu
Y3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NSw3ICsxNzUs
NyBAQCBSZWY8UHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldEZyYW1lPiBiCiAgICAgcmV0dXJu
IFByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRGcmFtZTo6Y3JlYXRlKCkKICAgICAgICAgLnNl
dE9wY29kZShmcmFtZS5vcENvZGUpCiAgICAgICAgIC5zZXRNYXNrKGZyYW1lLm1hc2tlZCkKLSAg
ICAgICAgLnNldFBheWxvYWREYXRhKGZyYW1lLm9wQ29kZSA9PSAxID8gU3RyaW5nOjpmcm9tVVRG
OFdpdGhMYXRpbjFGYWxsYmFjayhmcmFtZS5wYXlsb2FkLCBmcmFtZS5wYXlsb2FkTGVuZ3RoKSA6
IGJhc2U2NEVuY29kZVRvU3RyaW5nKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgp
KQorICAgICAgICAuc2V0UGF5bG9hZERhdGEoZnJhbWUub3BDb2RlID09IDEgPyBTdHJpbmc6OmZy
b21VVEY4V2l0aExhdGluMUZhbGxiYWNrKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5n
dGgpIDogYmFzZTY0RW5jb2RlVG9TdHJpbmcoU3BhbiB7IGZyYW1lLnBheWxvYWQsIGZyYW1lLnBh
eWxvYWRMZW5ndGggfSkpCiAgICAgICAgIC5zZXRQYXlsb2FkTGVuZ3RoKGZyYW1lLnBheWxvYWRM
ZW5ndGgpCiAgICAgICAgIC5yZWxlYXNlKCk7CiB9CkBAIC01ODksNyArNTg5LDcgQEAgdm9pZCBJ
bnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRpZFJlY2VpdmVEYQogICAgICAgICAvLyBPZnRlbiB0aGUg
ZGF0YSBpcyB0ZXh0IGFuZCB3ZSB3b3VsZCBoYXZlIGEgZGVjb2RlciwgYnV0IGZvciBub24tdGV4
dCB3ZSB3b24ndCBoYXZlIGEgZGVjb2Rlci4KICAgICAgICAgLy8gU3luYyBYSFJzIG1heSBub3Qg
aGF2ZSBhIGNhY2hlZCByZXNvdXJjZSwgd2hpbGUgbm9uLXN5bmMgWEhScyB1c3VhbGx5IHRyYW5z
ZmVyIGRhdGEgb3ZlciBvbiBjb21wbGV0aW9uLgogICAgICAgICBpZiAobV9sb2FkaW5nWEhSU3lu
Y2hyb25vdXNseSAmJiByZXNvdXJjZURhdGEgJiYgIXJlc291cmNlRGF0YS0+aGFzQnVmZmVyZWRE
YXRhKCkgJiYgIXJlc291cmNlRGF0YS0+Y2FjaGVkUmVzb3VyY2UoKSkKLSAgICAgICAgICAgIG1f
cmVzb3VyY2VzRGF0YS0+c2V0UmVzb3VyY2VDb250ZW50KHJlcXVlc3RJZCwgYmFzZTY0RW5jb2Rl
VG9TdHJpbmcoZGF0YSwgZGF0YUxlbmd0aCksIHRydWUpOworICAgICAgICAgICAgbV9yZXNvdXJj
ZXNEYXRhLT5zZXRSZXNvdXJjZUNvbnRlbnQocmVxdWVzdElkLCBiYXNlNjRFbmNvZGVUb1N0cmlu
ZyhTcGFuIHsgZGF0YSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRhdGFMZW5ndGgpIH0pLCB0cnVl
KTsKICAgICB9CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZGF0YVJlY2VpdmVkKHJlcXVl
c3RJZCwgdGltZXN0YW1wKCksIGRhdGFMZW5ndGgsIGVuY29kZWREYXRhTGVuZ3RoKTsKQEAgLTEw
MDUsNyArMTAwNSw3IEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG8K
IAogICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2RlcjsKICAgICBXVEY6OlBlcnNp
c3RlbmNlOjpDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUoZW5jb2Rlciwg
Y2VydGlmaWNhdGUudmFsdWUoKSk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGVu
Y29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICByZXR1cm4gYmFzZTY0
RW5jb2RlVG9TdHJpbmcoZW5jb2Rlci5idWZmZXIoKSk7CiB9CiAKIFdlYlNvY2tldCogSW5zcGVj
dG9yTmV0d29ya0FnZW50Ojp3ZWJTb2NrZXRGb3JSZXF1ZXN0SWQoY29uc3QgUHJvdG9jb2w6Ok5l
dHdvcms6OlJlcXVlc3RJZCYgcmVxdWVzdElkKQpAQCAtMTQxMCw3ICsxNDEwLDcgQEAgYm9vbCBJ
bnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmNhY2hlZFJlc291cgogICAgICAgICB9CiAKICAgICAgICAg
KmJhc2U2NEVuY29kZWQgPSB0cnVlOwotICAgICAgICAqcmVzdWx0ID0gYmFzZTY0RW5jb2RlVG9T
dHJpbmcoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKTsKKyAgICAgICAgKnJlc3VsdCA9
IGJhc2U2NEVuY29kZVRvU3RyaW5nKGJ1ZmZlci0+Ynl0ZXMoKSk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yUGFnZUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Jl
Z3VsYXJFeHByZXNzaW9uLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5jbHVk
ZSA8d3RmL1N0b3B3YXRjaC5oPgorI2luY2x1ZGUgPHd0Zi9jZi9TcGFuQ0YuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9CYXNlNjQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CiAKQEAgLTExMyw3ICsxMTQsNyBAQCBib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6c2hhcmVkQnVm
ZmVyQ29uCiBib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGF0YUNvbnRlbnQoY29uc3QgdWludDhf
dCogZGF0YSwgdW5zaWduZWQgc2l6ZSwgY29uc3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmdOYW1lLCBi
b29sIHdpdGhCYXNlNjRFbmNvZGUsIFN0cmluZyogcmVzdWx0KQogewogICAgIGlmICh3aXRoQmFz
ZTY0RW5jb2RlKSB7Ci0gICAgICAgICpyZXN1bHQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhkYXRh
LCBzaXplKTsKKyAgICAgICAgKnJlc3VsdCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKFNwYW4geyBk
YXRhLCBzaXplIH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTExMDIsNyAr
MTEwMyw3IEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG8KICAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgY3JlYXRlIHdlYiBhcmNoaXZlIGZv
ciBtYWluIGZyYW1lIl9zKTsKIAogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGJ1ZmZlciA9IGFy
Y2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigpOwotICAgIHJldHVybiBiYXNlNjRFbmNvZGVU
b1N0cmluZyhDRkRhdGFHZXRCeXRlUHRyKGJ1ZmZlci5nZXQoKSksIENGRGF0YUdldExlbmd0aChi
dWZmZXIuZ2V0KCkpKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoYXNCeXRlcyhi
dWZmZXIuZ2V0KCkpKTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
YXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5jcHAJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MSwxNiArMTgxLDE0IEBAIFJlZjxTaGFyZWRCdWZmZXI+
IE1IVE1MQXJjaGl2ZTo6Z2VuZXJhdGUKICAgICAgICAgbWh0bWxEYXRhLT5hcHBlbmQoYXNjaWlT
dHJpbmcuZGF0YSgpLCBhc2NpaVN0cmluZy5sZW5ndGgoKSk7CiAKICAgICAgICAgLy8gRklYTUU6
IGlkZWFsbHkgd2Ugd291bGQgZW5jb2RlIHRoZSBjb250ZW50IGFzIGEgc3RyZWFtIHdpdGhvdXQg
aGF2aW5nIHRvIGZldGNoIGl0IGFsbC4KLSAgICAgICAgYXV0byogZGF0YSA9IHJlc291cmNlLmRh
dGEtPmRhdGEoKTsKLSAgICAgICAgc2l6ZV90IGRhdGFMZW5ndGggPSByZXNvdXJjZS5kYXRhLT5z
aXplKCk7CiAgICAgICAgIGlmICghc3RyY21wKGNvbnRlbnRFbmNvZGluZywgcXVvdGVkUHJpbnRh
YmxlKSkgewotICAgICAgICAgICAgYXV0byBlbmNvZGVkRGF0YSA9IHF1b3RlZFByaW50YWJsZUVu
Y29kZShkYXRhLCBkYXRhTGVuZ3RoKTsKKyAgICAgICAgICAgIGF1dG8gZW5jb2RlZERhdGEgPSBx
dW90ZWRQcmludGFibGVFbmNvZGUocmVzb3VyY2UuZGF0YS0+Ynl0ZXMoKSk7CiAgICAgICAgICAg
ICBtaHRtbERhdGEtPmFwcGVuZChlbmNvZGVkRGF0YS5kYXRhKCksIGVuY29kZWREYXRhLnNpemUo
KSk7CiAgICAgICAgICAgICBtaHRtbERhdGEtPmFwcGVuZCgiXHJcbiIsIDIpOwogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKCFzdHJjbXAoY29udGVudEVuY29kaW5nLCBiYXNl
NjQpKTsKICAgICAgICAgICAgIC8vIFdlIGFyZSBub3Qgc3BlY2lmeWluZyBpbnNlcnRMRnMgPSB0
cnVlIGJlbG93IGFzIGl0IHdvdWxkIGN1dCB0aGUgbGluZXMgd2l0aCBMRnMgYW5kIE1IVE1MIHJl
cXVpcmVzIENSTEZzLgotICAgICAgICAgICAgYXV0byBlbmNvZGVkRGF0YSA9IGJhc2U2NEVuY29k
ZVRvVmVjdG9yKGRhdGEsIGRhdGFMZW5ndGgpOworICAgICAgICAgICAgYXV0byBlbmNvZGVkRGF0
YSA9IGJhc2U2NEVuY29kZVRvVmVjdG9yKHJlc291cmNlLmRhdGEtPmJ5dGVzKCkpOwogICAgICAg
ICAgICAgY29uc3Qgc2l6ZV90IG1heGltdW1MaW5lTGVuZ3RoID0gNzY7CiAgICAgICAgICAgICBz
aXplX3QgaW5kZXggPSAwOwogICAgICAgICAgICAgc2l6ZV90IGVuY29kZWREYXRhTGVuZ3RoID0g
ZW5jb2RlZERhdGEuc2l6ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUv
bWh0bWwvTUhUTUxQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9hcmNoaXZlL21odG1sL01IVE1MUGFyc2VyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxQYXJzZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTUsNyArMTk1LDcgQEAgUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gTUhUTUxQ
YXJzZXI6OnBhcgogICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAgIHN3aXRjaCAobWltZUhl
YWRlci5jb250ZW50VHJhbnNmZXJFbmNvZGluZygpKSB7CiAgICAgY2FzZSBNSU1FSGVhZGVyOjpC
YXNlNjQ6IHsKLSAgICAgICAgYXV0byBkZWNvZGVkRGF0YSA9IGJhc2U2NERlY29kZShjb250ZW50
LT5kYXRhKCksIGNvbnRlbnQtPnNpemUoKSk7CisgICAgICAgIGF1dG8gZGVjb2RlZERhdGEgPSBi
YXNlNjREZWNvZGUoY29udGVudC0+Ynl0ZXMoKSk7CiAgICAgICAgIGlmICghZGVjb2RlZERhdGEp
IHsKICAgICAgICAgICAgIExPR19FUlJPUigiSW52YWxpZCBiYXNlNjQgY29udGVudCBmb3IgTUhU
TUwgcGFydC4iKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMjA0LDcgKzIwNCw3
IEBAIFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IE1IVE1MUGFyc2VyOjpwYXIKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIGNhc2UgTUlNRUhlYWRlcjo6UXVvdGVkUHJpbnRhYmxlOgotICAgICAg
ICBkYXRhID0gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnRlbnQtPmRhdGEoKSwgY29udGVudC0+
c2l6ZSgpKTsKKyAgICAgICAgZGF0YSA9IHF1b3RlZFByaW50YWJsZURlY29kZShjb250ZW50LT5i
eXRlcygpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNSU1FSGVhZGVyOjpTZXZlbkJpdDoK
ICAgICBjYXNlIE1JTUVIZWFkZXI6OkJpbmFyeToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9pY29uL0ljb25Mb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9pY29uL0ljb25Mb2FkZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzEx
NSw3IEBAIHZvaWQgSWNvbkxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmUKICAgICAgICAg
ZGF0YSA9IG51bGxwdHI7CiAKICAgICBjb25zdGV4cHIgdWludDhfdCBwZGZNYWdpY051bWJlcltd
ID0geyAnJScsICdQJywgJ0QnLCAnRicgfTsKLSAgICBpZiAoZGF0YSAmJiBkYXRhLT5zdGFydHNX
aXRoKFNwYW4geyBwZGZNYWdpY051bWJlciwgc3RkOjpzaXplKHBkZk1hZ2ljTnVtYmVyKSB9KSkg
eworICAgIGlmIChkYXRhICYmIGRhdGEtPnN0YXJ0c1dpdGgocGRmTWFnaWNOdW1iZXIpKSB7CiAg
ICAgICAgIExPRyhJY29uRGF0YWJhc2UsICJJY29uTG9hZGVyOjpmaW5pc2hMb2FkaW5nKCkgLSBJ
Z25vcmluZyBpY29uIGF0ICVzIGJlY2F1c2UgaXQgYXBwZWFycyB0byBiZSBhIFBERiIsIG1fcmVz
b3VyY2UtPnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKICAgICAgICAgZGF0YSA9IG51
bGxwdHI7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9CYXNlNjRVdGlsaXRpZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNw
cAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9CYXNlNjRVdGlsaXRp
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIEV4Y2VwdGlvbk9yPFN0cmlu
Zz4gQmFzZTY0VXRpbGl0aWVzOjpidG8KICAgICBpZiAoIXN0cmluZ1RvRW5jb2RlLmlzQWxsTGF0
aW4xKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3Ig
fTsKIAotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhzdHJpbmdUb0VuY29kZS5sYXRp
bjEoKSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKHN0cmluZ1RvRW5jb2RlLmxh
dGluMSgpLmJ5dGVzKCkpOwogfQogCiBFeGNlcHRpb25PcjxTdHJpbmc+IEJhc2U2NFV0aWxpdGll
czo6YXRvYihjb25zdCBTdHJpbmcmIGVuY29kZWRTdHJpbmcpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEuY3BwCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgUmVmPFNoYXJlZEJ1ZmZlcj4gUGFzdGVi
b2FyZEN1c3RvbURhdGE6OgogICAgIGVuY29kZXIgPDwgbV9vcmlnaW47CiAgICAgZW5jb2RlciA8
PCBzYW1lT3JpZ2luQ3VzdG9tU3RyaW5nRGF0YSgpOwogICAgIGVuY29kZXIgPDwgb3JkZXJlZFR5
cGVzKCk7Ci0gICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCks
IGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUo
ZW5jb2Rlci5idWZmZXIoKSk7CiB9CiAKIFBhc3RlYm9hcmRDdXN0b21EYXRhIFBhc3RlYm9hcmRD
dXN0b21EYXRhOjpmcm9tUGVyc2lzdGVuY2VEZWNvZGVyKFdURjo6UGVyc2lzdGVuY2U6OkRlY29k
ZXImJiBkZWNvZGVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIu
Y3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRC
dWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwyNCArMzAsMjAgQEAKIAogI2luY2x1ZGUg
PGFsZ29yaXRobT4KICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CisjaW5jbHVkZSA8d3RmL2Nm
L1NwYW5DRi5oPgogI2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi91bmlj
b2RlL1VURjhDb252ZXJzaW9uLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU2hhcmVkQnVm
ZmVyOjpTaGFyZWRCdWZmZXIoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCitTaGFy
ZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKLSAg
ICBhcHBlbmQoZGF0YSwgc2l6ZSk7Ci19Ci0KLVNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKGNv
bnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKQotewotICAgIGFwcGVuZChyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgc2l6ZSk7CisgICAgYXBwZW5kKGRhdGEpOwogfQog
CiBTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYm
IGZpbGVEYXRhKQotICAgIDogbV9zaXplKGZpbGVEYXRhLnNpemUoKSkKKyAgICA6IG1fc2l6ZShm
aWxlRGF0YS5kYXRhKCkuc2l6ZSgpKQogewogICAgIG1fc2VnbWVudHMuYXBwZW5kKHswLCBEYXRh
U2VnbWVudDo6Y3JlYXRlKFdURk1vdmUoZmlsZURhdGEpKX0pOwogfQpAQCAtMTg4LDEzICsxODQs
MTMgQEAgdm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVuZChjb25zdCBTaGFyZWRCdQogICAgIEFTU0VS
VChpbnRlcm5hbGx5Q29uc2lzdGVudCgpKTsKIH0KIAotdm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVu
ZChjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoKQordm9pZCBTaGFyZWRCdWZmZXI6
OmFwcGVuZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKICAgICBBU1NFUlQoIW1faGFz
QmVlbkNvbWJpbmVkSW50b09uZVNlZ21lbnQpOwogICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3I7
Ci0gICAgdmVjdG9yLmFwcGVuZChkYXRhLCBsZW5ndGgpOwotICAgIG1fc2VnbWVudHMuYXBwZW5k
KHttX3NpemUsIERhdGFTZWdtZW50OjpjcmVhdGUoV1RGTW92ZSh2ZWN0b3IpKX0pOwotICAgIG1f
c2l6ZSArPSBsZW5ndGg7CisgICAgdmVjdG9yLmFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKTsKKyAgICBtX3NlZ21lbnRzLmFw
cGVuZCh7IG1fc2l6ZSwgRGF0YVNlZ21lbnQ6OmNyZWF0ZShXVEZNb3ZlKHZlY3RvcikpIH0pOwor
ICAgIG1fc2l6ZSArPSBkYXRhLnNpemUoKTsKICAgICBBU1NFUlQoaW50ZXJuYWxseUNvbnNpc3Rl
bnQoKSk7CiB9CiAKQEAgLTIzMiw3ICsyMjgsNyBAQCB2b2lkIFNoYXJlZEJ1ZmZlcjo6Zm9yRWFj
aFNlZ21lbnQoY29uc3QgCiAgICAgICAgIGFwcGx5KFNwYW4geyBzZWdtZW50LnNlZ21lbnQtPmRh
dGEoKSwgc2VnbWVudC5zZWdtZW50LT5zaXplKCkgfSk7CiB9CiAKLWJvb2wgU2hhcmVkQnVmZmVy
OjpzdGFydHNXaXRoKGNvbnN0IFNwYW48Y29uc3QgdWludDhfdD4mIHByZWZpeCkgY29uc3QKK2Jv
b2wgU2hhcmVkQnVmZmVyOjpzdGFydHNXaXRoKGNvbnN0IFNwYW48Y29uc3Qgc3RkOjpieXRlPiYg
cHJlZml4KSBjb25zdAogewogICAgIGlmIChwcmVmaXguZW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CkBAIC0yNDAsNyArMjM2LDcgQEAgYm9vbCBTaGFyZWRCdWZmZXI6OnN0YXJ0c1dpdGgo
Y29uc3QgU3BhbgogICAgIGlmIChzaXplKCkgPCBwcmVmaXguc2l6ZSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBjb25zdCB1aW50OF90KiBwcmVmaXhQdHIgPSBwcmVmaXguZGF0YSgp
OworICAgIGF1dG8qIHByZWZpeFB0ciA9IHByZWZpeC5kYXRhKCk7CiAgICAgc2l6ZV90IHJlbWFp
bmluZyA9IHByZWZpeC5zaXplKCk7CiAgICAgZm9yIChhdXRvJiBzZWdtZW50IDogbV9zZWdtZW50
cykgewogICAgICAgICBzaXplX3QgYW1vdW50VG9Db21wYXJlVGhpc1RpbWUgPSBzdGQ6Om1pbihy
ZW1haW5pbmcsIHNlZ21lbnQuc2VnbWVudC0+c2l6ZSgpKTsKQEAgLTMwMSwxMSArMjk3LDQwIEBA
IGNvbnN0IHVpbnQ4X3QqIFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQKICNpZiBVU0UoR1NUUkVB
TUVSKQogICAgICAgICBbXShjb25zdCBSZWZQdHI8R3N0TWFwcGVkT3duZWRCdWZmZXI+JiBkYXRh
KSB7IHJldHVybiBkYXRhLT5kYXRhKCk7IH0sCiAjZW5kaWYKLSAgICAgICAgW10oY29uc3QgRmls
ZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IHVpbnQ4X3QqPihkYXRhLmRhdGEoKSk7IH0KKyAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6
TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KGRhdGEuZGF0YSgpLmRhdGEoKSk7IH0KICAgICApOwogICAgIHJldHVybiBXVEY6OnZp
c2l0KHZpc2l0b3IsIG1faW1tdXRhYmxlRGF0YSk7CiB9CiAKK1NwYW48Y29uc3Qgc3RkOjpieXRl
PiBTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpieXRlcygpIGNvbnN0Cit7CisgICAgYXV0byB2
aXNpdG9yID0gV1RGOjptYWtlVmlzaXRvcigKKyAgICAgICAgW10oY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBkYXRhKSB7CisgICAgICAgICAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgZGF0YSB9KTsK
KyAgICAgICAgfSwKKyNpZiBVU0UoQ0YpCisgICAgICAgIFtdKGNvbnN0IFJldGFpblB0cjxDRkRh
dGFSZWY+JiBkYXRhKSB7CisgICAgICAgICAgICByZXR1cm4gYXNCeXRlcyhkYXRhLmdldCgpKTsK
KyAgICAgICAgfSwKKyNlbmRpZgorI2lmIFVTRShHTElCKQorICAgICAgICBbXShjb25zdCBHUmVm
UHRyPEdCeXRlcz4mIGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBz
dGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZ19ieXRlc19nZXRfZGF0YShkYXRhLmdldCgpLCBu
dWxscHRyKSksIGdfYnl0ZXNfZ2V0X3NpemUoZGF0YS5nZXQoKSkgfSk7CisgICAgICAgIH0sCisj
ZW5kaWYKKyNpZiBVU0UoR1NUUkVBTUVSKQorICAgICAgICBbXShjb25zdCBSZWZQdHI8R3N0TWFw
cGVkT3duZWRCdWZmZXI+JiBkYXRhKSB7CisgICAgICAgICAgICByZXR1cm4gYXNCeXRlcyhTcGFu
IHsgZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXplKCkgfSk7CisgICAgICAgIH0sCisjZW5kaWYKKyAg
ICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsKKyAgICAg
ICAgICAgIHJldHVybiBkYXRhLmRhdGEoKTsKKyAgICAgICAgfQorICAgICk7CisgICAgcmV0dXJu
IFdURjo6dmlzaXQodmlzaXRvciwgbV9pbW11dGFibGVEYXRhKTsKKworfQorCiBib29sIFNoYXJl
ZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmNvbnRhaW5zTWFwcGVkRmlsZURhdGEoKSBjb25zdAogewog
ICAgIHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVE
YXRhPihtX2ltbXV0YWJsZURhdGEpOwpAQCAtMzE5LDcgKzM0NCw3IEBAIHZvaWQgU2hhcmVkQnVm
ZmVyOjpoaW50TWVtb3J5Tm90TmVlZGVkU28KIAogV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBT
aGFyZWRCdWZmZXI6OmRlY29kZXIoKSBjb25zdAogewotICAgIHJldHVybiB7IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEoKSksIHNpemUoKSB9OworICAgIHJldHVybiB7IGJ5
dGVzKCkgfTsKIH0KIAogYm9vbCBTaGFyZWRCdWZmZXI6Om9wZXJhdG9yPT0oY29uc3QgU2hhcmVk
QnVmZmVyJiBvdGhlcikgY29uc3QKQEAgLTM4NCw3ICs0MDksNyBAQCBzaXplX3QgU2hhcmVkQnVm
ZmVyOjpEYXRhU2VnbWVudDo6c2l6ZSgpCiAjaWYgVVNFKEdTVFJFQU1FUikKICAgICAgICAgW10o
Y29uc3QgUmVmUHRyPEdzdE1hcHBlZE93bmVkQnVmZmVyPiYgZGF0YSkgeyByZXR1cm4gZGF0YS0+
c2l6ZSgpOyB9LAogI2VuZGlmCi0gICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZp
bGVEYXRhJiBkYXRhKSB7IHJldHVybiBkYXRhLnNpemUoKTsgfQorICAgICAgICBbXShjb25zdCBG
aWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeyByZXR1cm4gZGF0YS5kYXRhKCkuc2l6
ZSgpOyB9CiAgICAgKTsKICAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBtX2ltbXV0YWJs
ZURhdGEpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC02Nyw4ICs2NywxMiBAQCBjbGFzcyBTaGFyZWRCdWZmZXJEYXRh
VmlldzsKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIFNoYXJlZEJ1ZmZlciA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFNoYXJlZEJ1ZmZlcj4gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVy
PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcik7IH0KLSAgICBz
dGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVf
dCBzaXplKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihkYXRhLCBzaXplKSk7
IH0KLSAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IGNoYXIqIGRhdGEs
IHNpemVfdCBzaXplKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihkYXRhLCBz
aXplKSk7IH0KKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKFNwYW48Y29uc3Qg
c3RkOjpieXRlPiBkYXRhKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihkYXRh
KSk7IH0KKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKFNwYW48Y29uc3QgdWlu
dDhfdD4gZGF0YSkgeyByZXR1cm4gY3JlYXRlKGFzQnl0ZXMoZGF0YSkpOyB9CisgICAgc3RhdGlj
IFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShTcGFuPGNvbnN0IGNoYXI+IGRhdGEpIHsgcmV0dXJu
IGNyZWF0ZShhc0J5dGVzKGRhdGEpKTsgfQorICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBj
cmVhdGUoY29uc3Qgc3RkOjpieXRlKiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gY3JlYXRl
KFNwYW4geyBkYXRhLCBzaXplIH0pOyB9CisgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNy
ZWF0ZShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gY3JlYXRlKFNw
YW4geyBkYXRhLCBzaXplIH0pOyB9CisgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0
ZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gY3JlYXRlKFNwYW4geyBk
YXRhLCBzaXplIH0pOyB9CiAgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShGaWxl
U3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIG1hcHBlZEZpbGVEYXRhKSB7IHJldHVybiBhZG9wdFJl
ZigqbmV3IFNoYXJlZEJ1ZmZlcihXVEZNb3ZlKG1hcHBlZEZpbGVEYXRhKSkpOyB9CiAKICAgICBl
bnVtIGNsYXNzIE1heVVzZUZpbGVNYXBwaW5nIDogYm9vbCB7IE5vLCBZZXMgfTsKQEAgLTEwMSw2
ICsxMDUsOCBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IEF1ZGl0IHRoZSBjYWxsIHNpdGVzIG9m
IHRoaXMgZnVuY3Rpb24gYW5kIHJlcGxhY2UgdGhlbSB3aXRoIGl0ZXJhdGlvbiBpZiBwb3NzaWJs
ZS4KICAgICBjb25zdCB1aW50OF90KiBkYXRhKCkgY29uc3Q7CiAgICAgY29uc3QgY2hhciogZGF0
YUFzQ2hhclB0cigpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+
KGRhdGEoKSk7IH0KKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25zdCB7IHJl
dHVybiBhc0J5dGVzKFNwYW4geyBkYXRhKCksIHNpemUoKSB9KTsgfQorCiAgICAgVmVjdG9yPHVp
bnQ4X3Q+IGNvcHlEYXRhKCkgeyByZXR1cm4geyBkYXRhKCksIHNpemUoKSB9OyB9CiAKICAgICAv
LyBDb21iaW5lcyBhbGwgdGhlIHNlZ21lbnRzIGludG8gYSBWZWN0b3IgYW5kIHJldHVybnMgdGhh
dCB2ZWN0b3IgYWZ0ZXIgY2xlYXJpbmcgdGhlIFNoYXJlZEJ1ZmZlci4KQEAgLTExNSw4ICsxMjEs
MTIgQEAgcHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXplKCk7
IH0KIAogICAgIHZvaWQgYXBwZW5kKGNvbnN0IFNoYXJlZEJ1ZmZlciYpOwotICAgIHZvaWQgYXBw
ZW5kKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwotICAgIHZvaWQgYXBwZW5kKGNvbnN0IGNoYXIq
IGRhdGEsIHNpemVfdCBsZW5ndGgpIHsgYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KGRhdGEpLCBsZW5ndGgpOyB9CisgICAgdm9pZCBhcHBlbmQoU3Bhbjxjb25zdCBzdGQ6
OmJ5dGU+KTsKKyAgICB2b2lkIGFwcGVuZChTcGFuPGNvbnN0IHVpbnQ4X3Q+IGRhdGEpIHsgYXBw
ZW5kKGFzQnl0ZXMoZGF0YSkpOyB9CisgICAgdm9pZCBhcHBlbmQoU3Bhbjxjb25zdCBjaGFyPiBk
YXRhKSB7IGFwcGVuZChhc0J5dGVzKGRhdGEpKTsgfQorICAgIHZvaWQgYXBwZW5kKGNvbnN0IHN0
ZDo6Ynl0ZSogZGF0YSwgc2l6ZV90IGxlbmd0aCkgeyBhcHBlbmQoU3BhbiB7IGRhdGEsIGxlbmd0
aCB9KTsgfQorICAgIHZvaWQgYXBwZW5kKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5n
dGgpIHsgYXBwZW5kKFNwYW4geyBkYXRhLCBsZW5ndGggfSk7IH0KKyAgICB2b2lkIGFwcGVuZChj
b25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKSB7IGFwcGVuZChTcGFuIHsgZGF0YSwgbGVu
Z3RoIH0pOyB9CiAgICAgdm9pZCBhcHBlbmQoVmVjdG9yPHVpbnQ4X3Q+JiYpOwogCiAgICAgdm9p
ZCBjbGVhcigpOwpAQCAtMTMxLDYgKzE0MSw4IEBAIHB1YmxpYzoKICAgICAgICAgV0VCQ09SRV9F
WFBPUlQgY29uc3QgdWludDhfdCogZGF0YSgpIGNvbnN0OwogICAgICAgICBXRUJDT1JFX0VYUE9S
VCBzaXplX3Qgc2l6ZSgpIGNvbnN0OwogCisgICAgICAgIFdFQkNPUkVfRVhQT1JUIFNwYW48Y29u
c3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAgICAgICAgIHN0YXRpYyBSZWY8RGF0YVNl
Z21lbnQ+IGNyZWF0ZShWZWN0b3I8dWludDhfdD4mJiBkYXRhKQogICAgICAgICB7CiAgICAgICAg
ICAgICBkYXRhLnNocmlua1RvRml0KCk7CkBAIC0xODcsNyArMTk5LDkgQEAgcHVibGljOgogICAg
IH07CiAKICAgICB2b2lkIGZvckVhY2hTZWdtZW50KGNvbnN0IEZ1bmN0aW9uPHZvaWQoY29uc3Qg
U3Bhbjxjb25zdCB1aW50OF90PiYpPiYpIGNvbnN0OwotICAgIGJvb2wgc3RhcnRzV2l0aChjb25z
dCBTcGFuPGNvbnN0IHVpbnQ4X3Q+JiBwcmVmaXgpIGNvbnN0OworCisgICAgYm9vbCBzdGFydHNX
aXRoKGNvbnN0IFNwYW48Y29uc3Qgc3RkOjpieXRlPiYgcHJlZml4KSBjb25zdDsKKyAgICBib29s
IHN0YXJ0c1dpdGgoY29uc3QgU3Bhbjxjb25zdCB1aW50OF90PiYgcHJlZml4KSBjb25zdCB7IHJl
dHVybiBzdGFydHNXaXRoKGFzQnl0ZXMocHJlZml4KSk7IH0KIAogICAgIHN0cnVjdCBEYXRhU2Vn
bWVudFZlY3RvckVudHJ5IHsKICAgICAgICAgc2l6ZV90IGJlZ2luUG9zaXRpb247CkBAIC0yMTIs
OCArMjI2LDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFNoYXJlZEJ1ZmZl
cigpID0gZGVmYXVsdDsKLSAgICBleHBsaWNpdCBTaGFyZWRCdWZmZXIoY29uc3QgdWludDhfdCos
IHNpemVfdCk7Ci0gICAgZXhwbGljaXQgU2hhcmVkQnVmZmVyKGNvbnN0IGNoYXIqLCBzaXplX3Qp
OworICAgIGV4cGxpY2l0IFNoYXJlZEJ1ZmZlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwogICAg
IGV4cGxpY2l0IFNoYXJlZEJ1ZmZlcihWZWN0b3I8dWludDhfdD4mJik7CiAgICAgZXhwbGljaXQg
U2hhcmVkQnVmZmVyKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYpOwogI2lmIFVTRShDRikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0NBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L2NvY29hL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgPENvcmVBdWRpby9Db3JlQXVkaW9UeXBlcy5o
PgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtODAs
MTMgKzgxLDEzIEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBDQUF1
ZGlvU3RyZWFtRGVzY3JpcHRpb246OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewot
ICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KCZtX3N0cmVhbURlc2NyaXB0aW9uKSwgc2l6ZW9mKG1fc3RyZWFtRGVzY3JpcHRp
b24pLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJm1fc3Ry
ZWFtRGVzY3JpcHRpb24sIDEgfSwgMSk7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CiBi
b29sIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIENB
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7Ci0gICAgcmV0dXJuIGRlY29k
ZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZkZXNj
cmlwdGlvbi5tX3N0cmVhbURlc2NyaXB0aW9uKSwgc2l6ZW9mKGRlc2NyaXB0aW9uLm1fc3RyZWFt
RGVzY3JpcHRpb24pLCAxKTsKKyAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERh
dGEoU3BhbiB7ICZkZXNjcmlwdGlvbi5tX3N0cmVhbURlc2NyaXB0aW9uLCAxIH0sIDEpOwogfQog
CiBpbmxpbmUgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uIHRvQ0FBdWRpb1N0cmVhbURlc2NyaXB0
aW9uKGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlh
L2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTgsMTUgKzE5OCwxMyBAQCBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZl
cj4gZXh0cmFjdEtleWlkc0ZyCiB7CiAgICAgUmVmPFNoYXJlZEJ1ZmZlcj4ga2V5SWRzID0gU2hh
cmVkQnVmZmVyOjpjcmVhdGUoKTsKIAotICAgIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+
IGtleUlkc01hcCA9IGV4dHJhY3RLZXlpZHNMb2NhdGlvbkZyb21DZW5jSW5pdERhdGEoaW5pdERh
dGEpOwotICAgIHVuc2lnbmVkIGtleUlkQ291bnQgPSBrZXlJZHNNYXAuZmlyc3Q7Ci0gICAgdW5z
aWduZWQgaW5kZXggPSBrZXlJZHNNYXAuc2Vjb25kOworICAgIGF1dG8gW2tleUlkQ291bnQsIGlu
ZGV4XSA9IGV4dHJhY3RLZXlpZHNMb2NhdGlvbkZyb21DZW5jSW5pdERhdGEoaW5pdERhdGEpOwog
CiAgICAgLy8gQ2hlY2sgaWYgaW5pdERhdGEgaXMgYSB2YWxpZCBDRU5DIGluaXREYXRhLgogICAg
IGlmICgha2V5SWRDb3VudCB8fCAhaW5kZXgpCiAgICAgICAgIHJldHVybiBrZXlJZHM7CiAKLSAg
ICBhdXRvKiBkYXRhID0gaW5pdERhdGEuZGF0YSgpOworICAgIGF1dG8gZGF0YSA9IGluaXREYXRh
LmJ5dGVzKCk7CiAKICAgICBhdXRvIG9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAg
ICAgYXV0byBrZXlJZHNBcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKQEAgLTIxOCw3ICsy
MTYsNyBAQCBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gZXh0cmFjdEtleWlkc0ZyCiAgICAgLy8g
ImtpZHMiCiAgICAgLy8gQW4gYXJyYXkgb2Yga2V5IElEcy4gRWFjaCBlbGVtZW50IG9mIHRoZSBh
cnJheSBpcyB0aGUgYmFzZTY0dXJsIGVuY29kaW5nIG9mIHRoZSBvY3RldCBzZXF1ZW5jZSBjb250
YWluaW5nIHRoZSBrZXkgSUQgdmFsdWUuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtl
eUlkQ291bnQ7IGkrKykgewotICAgICAgICBrZXlJZHNBcnJheS0+cHVzaFN0cmluZyhiYXNlNjRV
UkxFbmNvZGVUb1N0cmluZygmZGF0YVtpbmRleF0sIENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVz
KSk7CisgICAgICAgIGtleUlkc0FycmF5LT5wdXNoU3RyaW5nKGJhc2U2NFVSTEVuY29kZVRvU3Ry
aW5nKGRhdGEuc3Vic3BhbihpbmRleCwgQ2xlYXJLZXk6OktleUlEU2l6ZUluQnl0ZXMpKSk7CiAg
ICAgICAgIGluZGV4ICs9IENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVzOwogICAgIH0KIApAQCAt
MjQ1LDcgKzI0Myw3IEBAIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBleHRyYWN0S2V5SWRGcm8K
ICAgICAvLyBUaGUgZm9ybWF0IGlzIGEgSlNPTiBvYmplY3QgY29udGFpbmluZyB0aGUgZm9sbG93
aW5nIG1lbWJlcnM6CiAgICAgLy8gImtpZHMiCiAgICAgLy8gQW4gYXJyYXkgb2Yga2V5IElEcy4g
RWFjaCBlbGVtZW50IG9mIHRoZSBhcnJheSBpcyB0aGUgYmFzZTY0dXJsIGVuY29kaW5nIG9mIHRo
ZSBvY3RldCBzZXF1ZW5jZSBjb250YWluaW5nIHRoZSBrZXkgSUQgdmFsdWUuCi0gICAga2V5SWRz
QXJyYXktPnB1c2hTdHJpbmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoaW5pdERhdGEuZGF0YSgp
LCBpbml0RGF0YS5zaXplKCkpKTsKKyAgICBrZXlJZHNBcnJheS0+cHVzaFN0cmluZyhiYXNlNjRV
UkxFbmNvZGVUb1N0cmluZyhpbml0RGF0YS5ieXRlcygpKSk7CiAKICAgICBvYmplY3QtPnNldEFy
cmF5KCJraWRzIiwgV1RGTW92ZShrZXlJZHNBcnJheSkpOwogICAgIENTdHJpbmcganNvbkRhdGEg
PSBvYmplY3QtPnRvSlNPTlN0cmluZygpLnV0ZjgoKTsKQEAgLTU3OCw5ICs1NzYsOCBAQCB2b2lk
IENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTCiAKICAgICAvLyBDb25zdHJ1Y3Qg
dGhlIEtleVN0YXR1c1ZlY3RvciBvYmplY3QsIHJlcHJlc2VudGluZyByZWxlYXNlZCBrZXlzLCBh
bmQgdGhlIG1lc3NhZ2UgaW4gdGhlCiAgICAgLy8gJ2xpY2Vuc2UgcmVsZWFzZScgZm9ybWF0Lgot
ICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3IgPSBtX2tleVN0b3JlLmFsbEtleXNB
cyhDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6UmVsZWFzZWQpOwotICAgIFJlZlB0cjxT
aGFyZWRCdWZmZXI+IG1lc3NhZ2U7Ci0gICAgeworICAgIGF1dG8ga2V5U3RhdHVzVmVjdG9yID0g
bV9rZXlTdG9yZS5hbGxLZXlzQXMoQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlJlbGVh
c2VkKTsKKyAgICBhdXRvIG1lc3NhZ2UgPSBbJl17CiAgICAgICAgIC8vIENvbnN0cnVjdCBKU09O
IHRoYXQgcmVwcmVzZW50cyB0aGUgJ2xpY2Vuc2UgcmVsZWFzZScgZm9ybWF0LCBjcmVhdGluZyBh
ICdraWRzJyBhcnJheQogICAgICAgICAvLyBvZiBiYXNlNjRVUkwtZW5jb2RlZCBrZXkgSURzIGZv
ciBhbGwga2V5cyB0aGF0IHdlcmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2Vzc2lvbi4KICAgICAg
ICAgYXV0byByb290T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKQEAgLTU4OCw3ICs1
ODUsNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTCiAgICAgICAg
ICAgICBhdXRvIGFycmF5ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICAgICAgZm9y
IChjb25zdCBhdXRvJiBrZXkgOiBtX2tleVN0b3JlKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJU
KGtleS0+aWQoKS5zaXplKCkgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
KTsKLSAgICAgICAgICAgICAgICBhcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVUb1N0
cmluZyhrZXktPmlkKCkuZGF0YSgpLCBrZXktPmlkKCkuc2l6ZSgpKSk7CisgICAgICAgICAgICAg
ICAgYXJyYXktPnB1c2hTdHJpbmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoa2V5LT5pZCgpKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByb290T2JqZWN0LT5zZXRBcnJheSgia2lkcyIs
IFdURk1vdmUoYXJyYXkpKTsKICAgICAgICAgfQpAQCAtNTk2LDExICs1OTMsMTEgQEAgdm9pZCBD
RE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlUwogICAgICAgICAvLyBDb3B5IHRoZSBK
U09OIGRhdGEgaW50byBhIFNoYXJlZEJ1ZmZlciBvYmplY3QuCiAgICAgICAgIFN0cmluZyBtZXNz
YWdlU3RyaW5nID0gcm9vdE9iamVjdC0+dG9KU09OU3RyaW5nKCk7CiAgICAgICAgIENTdHJpbmcg
bWVzc2FnZUNTdHJpbmcgPSBtZXNzYWdlU3RyaW5nLnV0ZjgoKTsKLSAgICAgICAgbWVzc2FnZSA9
IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKG1lc3NhZ2VDU3RyaW5nLmRhdGEoKSwgbWVzc2FnZUNTdHJp
bmcubGVuZ3RoKCkpOwotICAgIH0KKyAgICAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRl
KG1lc3NhZ2VDU3RyaW5nLmRhdGEoKSwgbWVzc2FnZUNTdHJpbmcubGVuZ3RoKCkpOworICAgIH0o
KTsKIAogICAgIG1fa2V5U3RvcmUucmVtb3ZlQWxsS2V5cygpOwotICAgIGRpc3BhdGNoQ2FsbGJh
Y2soV1RGTW92ZShrZXlTdGF0dXNWZWN0b3IpLCBSZWY8U2hhcmVkQnVmZmVyPigqbWVzc2FnZSks
IFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVkKTsKKyAgICBkaXNwYXRjaENhbGxiYWNrKFdURk1vdmUo
a2V5U3RhdHVzVmVjdG9yKSwgV1RGTW92ZShtZXNzYWdlKSwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVk
ZWQpOwogfQogCiB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpzdG9yZVJlY29yZE9m
S2V5VXNhZ2UoY29uc3QgU3RyaW5nJikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dl
bmVyaWMvS2V5ZWREZWNvZGVyR2VuZXJpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ2VuZXJpYy9LZXllZERlY29kZXJHZW5lcmljLmNwcAkocmV2aXNpb24gMjc4
ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9LZXllZERlY29kZXJHZW5l
cmljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBzdGF0aWMgc3RkOjpvcHRp
b25hbDxTdHJpbmc+IHJlYWRTdHJpbmcoCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwog
CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcihzaXplLnZhbHVlKCkpOwotICAgIGlmICghZGVj
b2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLmRhdGEoKSwgc2l6ZS52YWx1ZSgpKSkK
KyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBidWZmZXIgfSkp
CiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgYXV0byByZXN1bHQgPSBTdHJpbmc6
OmZyb21VVEY4KGJ1ZmZlci5kYXRhKCksIHNpemUudmFsdWUoKSk7CiAgICAgaWYgKHJlc3VsdC5p
c051bGwoKSkKQEAgLTExNyw3ICsxMTcsNyBAQCBLZXllZERlY29kZXJHZW5lcmljOjpLZXllZERl
Y29kZXJHZW5lcmljCiAgICAgICAgICAgICBpZiAoIW9rKQogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcigqc2l6ZSk7Ci0gICAgICAgICAg
ICBvayA9IGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ1ZmZlci5kYXRhKCksICpzaXpl
KTsKKyAgICAgICAgICAgIG9rID0gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7
IGJ1ZmZlciB9KTsKICAgICAgICAgICAgIGlmICghb2spCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCktPmFkZCgqa2V5LCBXVEZNb3Zl
KGJ1ZmZlcikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTW9kZWwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Nb2RlbC5o
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9N
b2RlbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+CiB2b2lkIE1vZGVsOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAg
ICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHNpemVfdD4obV9kYXRhLT5zaXplKCkpOwotICAgIGVu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUo
KSwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEobV9kYXRhLT5ieXRlcygp
LCAxKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KQEAgLTc0LDcgKzc0LDcgQEAgUmVm
UHRyPE1vZGVsPiBNb2RlbDo6ZGVjb2RlKERlY29kZXImIGRlYwogCiAgICAgVmVjdG9yPHVpbnQ4
X3Q+IGRhdGE7CiAgICAgZGF0YS5ncm93KCpsZW5ndGgpOwotICAgIGlmICghZGVjb2Rlci5kZWNv
ZGVGaXhlZExlbmd0aERhdGEoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAxKSkKKyAgICBpZiAo
IWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGRhdGEsIDEpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAogICAgIHJldHVybiBNb2RlbDo6Y3JlYXRlKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRl
KFdURk1vdmUoZGF0YSkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1BpeGVsQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUGl4ZWxCdWZmZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODIsNyAr
ODIsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIFBpeGVsQnVmZmVyCiAKICAgICBl
bmNvZGVyIDw8IG1fZm9ybWF0OwogICAgIGVuY29kZXIgPDwgbV9zaXplOwotICAgIGVuY29kZXIu
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPmJ5dGVMZW5ndGgo
KSwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEobV9kYXRhLT5ieXRlcygp
LCAxKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RkOjpvcHRpb25hbDxQaXhlbEJ1
ZmZlcj4gUGl4ZWxCdWZmZXI6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQpAQCAtMTEzLDcgKzEx
Myw3IEBAIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0ZDo6b3B0aW9uYWw8UGkKICAgICBpZiAo
IXJlc3VsdCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIGlmICghZGVjb2Rl
ci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVzdWx0LT5tX2RhdGEtPmRhdGEoKSwgcmVzdWx0LT5t
X2RhdGEtPmJ5dGVMZW5ndGgoKSwgMSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVu
Z3RoRGF0YShyZXN1bHQtPm1fZGF0YS0+d3JpdGFibGVCeXRlcygpLCAxKSkKICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQ
bGF5U3RyZWFtaW5nQVZGT2JqQy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFt
aW5nQVZGT2JqQy5tbQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWlu
Z0FWRk9iakMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAKICNpbXBvcnQgPHd0
Zi9GaWxlU3lzdGVtLmg+CiAjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgogI2ltcG9ydCA8d3Rm
L0xvZ2dlckhlbHBlci5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1NwYW5Db2NvYS5oPgogI2ltcG9y
dCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4K
ICNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KQEAgLTcxNSw3ICs3MTYsNyBAQCB2b2lk
IENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nCiAgICAgICAgIGlkZW50aWZpZXIg
PSBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTppbml0RGF0YS0+Y3JlYXRl
TlNEYXRhKCkuZ2V0KCkgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddKTsKICNpZiBIQVZF
KEZBSVJQTEFZU1RSRUFNSU5HX0NFTkNfSU5JVERBVEEpCiAgICAgZWxzZSBpZiAoaW5pdERhdGFU
eXBlID09IEluaXREYXRhUmVnaXN0cnk6OmNlbmNOYW1lKCkpIHsKLSAgICAgICAgYXV0byBwc3No
U3RyaW5nID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5pdERhdGEtPmRhdGEoKSwgaW5pdERhdGEt
PnNpemUoKSk7CisgICAgICAgIGF1dG8gcHNzaFN0cmluZyA9IGJhc2U2NEVuY29kZVRvU3RyaW5n
KGluaXREYXRhLT5ieXRlcygpKTsKICAgICAgICAgaW5pdGlhbGl6YXRpb25EYXRhID0gW05TSlNP
TlNlcmlhbGl6YXRpb24gZGF0YVdpdGhKU09OT2JqZWN0OkB7IEAicHNzaCI6IChOU1N0cmluZyop
cHNzaFN0cmluZyB9IG9wdGlvbnM6TlNKU09OV3JpdGluZ1ByZXR0eVByaW50ZWQgZXJyb3I6bmls
XTsKICAgICB9CiAjZW5kaWYKQEAgLTExOTEsMTIgKzExOTIsMTAgQEAgdm9pZCBDRE1JbnN0YW5j
ZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZwogICAgICAgICB9CiAKICAgICAgICAgYXV0byByZXF1
ZXN0SlNPTiA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKLSAgICAgICAgZm9yIChhdXRvJiByZXF1
ZXN0RGF0YSA6IHJlcXVlc3RzRGF0YSkgeworICAgICAgICBmb3IgKGF1dG8mIFtrZXlJRCwgcGF5
bG9hZF0gOiByZXF1ZXN0c0RhdGEpIHsKICAgICAgICAgICAgIGF1dG8gZW50cnkgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICAgICAgYXV0byYga2V5SUQgPSByZXF1ZXN0RGF0YS5m
aXJzdDsKLSAgICAgICAgICAgIGF1dG8mIHBheWxvYWQgPSByZXF1ZXN0RGF0YS5zZWNvbmQ7Ci0g
ICAgICAgICAgICBlbnRyeS0+c2V0U3RyaW5nKCJrZXlJRCIsIGJhc2U2NEVuY29kZVRvU3RyaW5n
KGtleUlELT5kYXRhKCksIGtleUlELT5zaXplKCkpKTsKLSAgICAgICAgICAgIGVudHJ5LT5zZXRT
dHJpbmcoInBheWxvYWQiLCBiYXNlNjRFbmNvZGVUb1N0cmluZyhwYXlsb2FkLmdldCgpLmJ5dGVz
LCBwYXlsb2FkLmdldCgpLmxlbmd0aCkpOworICAgICAgICAgICAgZW50cnktPnNldFN0cmluZygi
a2V5SUQiLCBiYXNlNjRFbmNvZGVUb1N0cmluZyhrZXlJRC0+Ynl0ZXMoKSkpOworICAgICAgICAg
ICAgZW50cnktPnNldFN0cmluZygicGF5bG9hZCIsIGJhc2U2NEVuY29kZVRvU3RyaW5nKGFzQnl0
ZXMocGF5bG9hZC5nZXQoKSkpKTsKICAgICAgICAgICAgIHJlcXVlc3RKU09OLT5wdXNoT2JqZWN0
KFdURk1vdmUoZW50cnkpKTsKICAgICAgICAgfQogICAgICAgICBhdXRvIHJlcXVlc3RCdWZmZXIg
PSB1dGY4QnVmZmVyKHJlcXVlc3RKU09OLT50b0pTT05TdHJpbmcoKSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRD
dXN0b21QbGF0Zm9ybURhdGEuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCBzdGF0aWMgU3RyaW5nIGNyZWF0ZVVuaXF1ZUZv
bnROYW1lKCkKICAgICBHVUlEIGZvbnRVdWlkOwogICAgIENvQ3JlYXRlR3VpZCgmZm9udFV1aWQp
OwogCi0gICAgYXV0byBmb250TmFtZSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KCZmb250VXVpZCksIHNpemVvZihmb250VXVpZCkpOworICAgIGF1dG8gZm9u
dE5hbWUgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgJmZvbnRVdWlkLCAxIH0pOwogICAg
IEFTU0VSVChmb250TmFtZS5sZW5ndGgoKSA8IExGX0ZBQ0VTSVpFKTsKICAgICByZXR1cm4gZm9u
dE5hbWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcAko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcg
KzgxLDcgQEAgc3RhdGljIFN0cmluZyBjcmVhdGVVbmlxdWVGb250TmFtZSgpCiAgICAgR1VJRCBm
b250VXVpZDsKICAgICBDb0NyZWF0ZUd1aWQoJmZvbnRVdWlkKTsKIAotICAgIGF1dG8gZm9udE5h
bWUgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhyZWludGVycHJldF9jYXN0PGNoYXIqPigmZm9udFV1
aWQpLCBzaXplb2YoZm9udFV1aWQpKTsKKyAgICBhdXRvIGZvbnROYW1lID0gYmFzZTY0RW5jb2Rl
VG9TdHJpbmcoU3BhbiB7ICZmb250VXVpZCwgMSB9KTsKICAgICBBU1NFUlQoZm9udE5hbWUubGVu
Z3RoKCkgPCBMRl9GQUNFU0laRSk7CiAgICAgcmV0dXJuIGZvbnROYW1lOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRvck1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU1NMS2V5R2VuZXJhdG9yTWFjLm1tCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU1NMS2V5R2Vu
ZXJhdG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksNyArMjE5LDcgQEAgc3RhdGljIFN0
cmluZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZwogICAgIGlmIChTZWNBc24xRW5jb2RlSXRl
bShjb2RlciwgJnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZSwgc2lnbmVkUHVibGljS2V5QW5k
Q2hhbGxlbmdlVGVtcGxhdGUsICZlbmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlKSAh
PSBub0VycikKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJuIGJhc2U2NEVu
Y29kZVRvU3RyaW5nKGVuY29kZWRTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2UuRGF0YSwgZW5j
b2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZS5MZW5ndGgpOworICAgIHJldHVybiBiYXNl
NjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgZW5jb2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5n
ZS5EYXRhLCBlbmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlLkxlbmd0aCB9KTsKIH0K
IAogQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRp
bWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcy5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0
aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCwxNiArMTE0LDE2IEBAIHByaXZhdGU6CiB0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBDYXBhYmlsaXR5VmFsdWVPclJhbmdlOjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3Ro
RGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmbV9taW5PclZhbHVlKSwgc2l6
ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZhbHVlVW5pb24pKTsKLSAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmbV9tYXgp
LCBzaXplb2YoVmFsdWVVbmlvbiksIGFsaWdub2YoVmFsdWVVbmlvbikpOworICAgIGVuY29kZXIu
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmbV9taW5PclZhbHVlLCAxIH0sIGFsaWdub2Yo
VmFsdWVVbmlvbikpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAm
bV9tYXgsIDEgfSwgYWxpZ25vZihWYWx1ZVVuaW9uKSk7CiAgICAgZW5jb2RlciA8PCBtX3R5cGU7
CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CiBib29sIENhcGFiaWxpdHlWYWx1ZU9yUmFu
Z2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBDYXBhYmlsaXR5VmFsdWVPclJhbmdlJiB2YWx1
ZU9yUmFuZ2UpCiB7Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2YWx1ZU9yUmFuZ2UubV9taW5PclZhbHVlKSwgc2l6
ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZhbHVlVW5pb24pKQotICAgICAgICAmJiBkZWNvZGVy
LmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWVP
clJhbmdlLm1fbWF4KSwgc2l6ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZhbHVlVW5pb24pKQor
ICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJnZhbHVlT3JS
YW5nZS5tX21pbk9yVmFsdWUsIDEgfSwgYWxpZ25vZihWYWx1ZVVuaW9uKSkKKyAgICAgICAgJiYg
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZ2YWx1ZU9yUmFuZ2UubV9tYXgs
IDEgfSwgYWxpZ25vZihWYWx1ZVVuaW9uKSkKICAgICAgICAgJiYgZGVjb2Rlci5kZWNvZGUodmFs
dWVPclJhbmdlLm1fdHlwZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50
ZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTM5LDEzICsxMzksMTMgQEAgc3RhdGljIHZvaWQgYWRkU3RyaW5nVG9TSEExKFNIQTEmIHNoYTEs
IAogCiAgICAgaWYgKHN0cmluZy5pczhCaXQoKSAmJiBzdHJpbmcuaXNBbGxBU0NJSSgpKSB7CiAg
ICAgICAgIGNvbnN0IHVpbnQ4X3QgbnVsbEJ5dGUgPSAwOwotICAgICAgICBzaGExLmFkZEJ5dGVz
KHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAgICAgICBzaGExLmFk
ZEJ5dGVzKCZudWxsQnl0ZSwgMSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IHN0cmlu
Zy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkgfSk7CisgICAgICAgIHNoYTEuYWRkQnl0
ZXMoU3BhbiB7ICZudWxsQnl0ZSwgMSB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGF1dG8gdXRmOCA9IHN0cmluZy51dGY4KCk7Ci0gICAgc2hhMS5hZGRCeXRlcyh1dGY4LmRhdGFB
c1VJbnQ4UHRyKCksIHV0ZjgubGVuZ3RoKCkgKyAxKTsgLy8gSW5jbHVkZSB0ZXJtaW5hdGluZyBu
dWxsIGJ5dGUuCisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgdXRmOC5kYXRhQXNVSW50OFB0cigp
LCB1dGY4Lmxlbmd0aCgpICsgMSB9KTsgLy8gSW5jbHVkZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUu
CiB9CiAKIFN0cmluZyBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpoYXNoU3RyaW5nV2l0aFNh
bHQoY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgU3RyaW5nJiBoYXNoU2FsdCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3BwCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRl
bnRpYWxCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsOCArOTcsOSBAQCBib29sIENyZWRl
bnRpYWxCYXNlOjpjb21wYXJlKGNvbnN0IENyZWRlCiAKIFN0cmluZyBDcmVkZW50aWFsQmFzZTo6
c2VyaWFsaXphdGlvbkZvckJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcigpIGNvbnN0CiB7CisgICAg
Ly8gRklYTUU6IEFkZCBtYWtlU3RyaW5nIHZhcmlhbnQgdGhhdCBjcmVhdGVzIGEgdXRmOCBidWZm
ZXIgZGlyZWN0bHkuCiAgICAgYXV0byBjcmVkZW50aWFsU3RyaW5nRGF0YSA9IG1ha2VTdHJpbmco
bV91c2VyLCAnOicsIG1fcGFzc3dvcmQpLnV0ZjgoKTsKLSAgICByZXR1cm4gbWFrZVN0cmluZygi
QmFzaWMgIiwgYmFzZTY0RW5jb2RlZChjcmVkZW50aWFsU3RyaW5nRGF0YSkpOworICAgIHJldHVy
biBtYWtlU3RyaW5nKCJCYXNpYyAiLCBiYXNlNjRFbmNvZGVkKGNyZWRlbnRpYWxTdHJpbmdEYXRh
LmJ5dGVzKCkpKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHAJKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ2VydGlmaWNh
dGVJbmZvQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNyArMjEwLDcgQEAgc3RhdGlj
IHZvaWQgZW5jb2RlQ0ZEYXRhKEVuY29kZXImIGVuY29kZQogICAgIGNvbnN0IHVpbnQ4X3QqIGJ5
dGVQdHIgPSBDRkRhdGFHZXRCeXRlUHRyKGRhdGEpOwogCiAgICAgZW5jb2RlciA8PCBsZW5ndGg7
Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYnl0ZVB0ciwgc3RhdGljX2Nhc3Q8
c2l6ZV90PihsZW5ndGgpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFu
IHsgYnl0ZVB0ciwgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpIH0pOwogfQogCiBzdGF0aWMg
c3RkOjpvcHRpb25hbDxSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4gZGVjb2RlQ0ZEYXRhKERlY29kZXIm
IGRlY29kZXIpCkBAIC0yMjUsNyArMjI1LDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0YWlu
UHRyPENGRGF0YVJlZgogICAgIGlmICghcG9pbnRlcikKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKIAotICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0ZShudWxscHRyLCBwb2ludGVy
LCAqc2l6ZSkpOworICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0ZShudWxscHRyLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwb2ludGVyKSwgKnNpemUpKTsKIH0KIAogI2lm
IEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvQ2VydGlmaWNhdGVJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0NlcnRpZmljYXRlSW5mby5oCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ2VydGlm
aWNhdGVJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgdGVtcGxhdGU8PiBz
dHJ1Y3QgQ29kZXI8R1JlZlB0cjxHQnl0ZUFycgogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNv
ZGVyICZlbmNvZGVyLCBjb25zdCBHUmVmUHRyPEdCeXRlQXJyYXk+JiBieXRlQXJyYXkpCiAgICAg
ewogICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90PihieXRlQXJyYXktPmxl
bik7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGJ5dGVBcnJheS0+ZGF0
YSwgYnl0ZUFycmF5LT5sZW4pOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0
YShTcGFuIHsgYnl0ZUFycmF5LT5kYXRhLCBieXRlQXJyYXktPmxlbiB9KTsKICAgICB9CiAKICAg
ICBzdGF0aWMgc3RkOjpvcHRpb25hbDxHUmVmUHRyPEdCeXRlQXJyYXk+PiBkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKQEAgLTg3LDcgKzg3LDcgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8R1Jl
ZlB0cjxHQnl0ZUFycgogCiAgICAgICAgIEdSZWZQdHI8R0J5dGVBcnJheT4gYnl0ZUFycmF5ID0g
YWRvcHRHUmVmKGdfYnl0ZV9hcnJheV9zaXplZF9uZXcoKnNpemUpKTsKICAgICAgICAgZ19ieXRl
X2FycmF5X3NldF9zaXplKGJ5dGVBcnJheS5nZXQoKSwgKnNpemUpOwotICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ5dGVBcnJheS0+ZGF0YSwgKnNpemUpKQorICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBieXRlQXJyYXkt
PmRhdGEsICpzaXplIH0pKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAg
ICAgcmV0dXJuIGJ5dGVBcnJheTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg1LDcgKzg1LDcgQEAgYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OmV4ZWN1dGVDb21tYW5k
KCkKICAgICByZXR1cm4gc3RlcCgpID09IFNRTElURV9ET05FOwogfQogCi1pbnQgU1FMaXRlU3Rh
dGVtZW50OjpiaW5kQmxvYihpbnQgaW5kZXgsIFNwYW48Y29uc3QgdWludDhfdD4gYmxvYikKK2lu
dCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGJsb2IpCiB7CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAgQVNTRVJUKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkpOwpAQCAtOTUsNiAr
OTUsMTEgQEAgaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IoaW50IGluZGV4LAogICAgIHJl
dHVybiBzcWxpdGUzX2JpbmRfYmxvYihtX3N0YXRlbWVudCwgaW5kZXgsIGJsb2IuZGF0YSgpLCBi
bG9iLnNpemUoKSwgU1FMSVRFX1RSQU5TSUVOVCk7CiB9CiAKK2ludCBTUUxpdGVTdGF0ZW1lbnQ6
OmJpbmRCbG9iKGludCBpbmRleCwgU3Bhbjxjb25zdCB1aW50OF90PiBibG9iKQoreworICAgIHJl
dHVybiBiaW5kQmxvYihpbmRleCwgYXNCeXRlcyhibG9iKSk7Cit9CisKIGludCBTUUxpdGVTdGF0
ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0KQogewogICAgIC8v
IFN0cmluZzo6Y2hhcmFjdGVycygpIHJldHVybnMgMCBmb3IgdGhlIGVtcHR5IHN0cmluZywgd2hp
Y2ggU1FMaXRlCkBAIC0xMDcsNyArMTEyLDcgQEAgaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEJs
b2IoaW50IGluZGV4LAogICAgIGVsc2UKICAgICAgICAgY2hhcmFjdGVycyA9IHVwY29udmVydGVk
Q2hhcmFjdGVyczsKIAotICAgIHJldHVybiBiaW5kQmxvYihpbmRleCwgU3BhbiB7IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGNoYXJhY3RlcnMpLCB0ZXh0Lmxlbmd0aCgpICogc2l6
ZW9mKFVDaGFyKSB9KTsKKyAgICByZXR1cm4gYmluZEJsb2IoaW5kZXgsIFNwYW4geyByZWludGVy
cHJldF9jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGNoYXJhY3RlcnMpLCB0ZXh0Lmxlbmd0aCgpICog
c2l6ZW9mKFVDaGFyKSB9KTsKIH0KIAogaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZFRleHQoaW50
IGluZGV4LCBTdHJpbmdWaWV3IHRleHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9z
cWwvU1FMaXRlU3RhdGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDYgKzM5LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIH5TUUxpdGVTdGF0ZW1lbnQo
KTsKICAgICBXRUJDT1JFX0VYUE9SVCBTUUxpdGVTdGF0ZW1lbnQoU1FMaXRlU3RhdGVtZW50JiYp
OwogICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIGludCBiaW5kQmxvYihpbnQgaW5kZXgsIFNwYW48
Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJpbmRCbG9iKGludCBp
bmRleCwgU3Bhbjxjb25zdCB1aW50OF90Pik7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJpbmRC
bG9iKGludCBpbmRleCwgY29uc3QgU3RyaW5nJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJp
bmRUZXh0KGludCBpbmRleCwgU3RyaW5nVmlldyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU1LDEyICs1NSw3IEBAIHN0YXRpYyBzaXplX3QgbGVuZ3RoT2ZMaW5lRW5k
aW5nQXRJbmRleCgKICAgICByZXR1cm4gMDsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFBy
aW50YWJsZUVuY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQotewotICAgIHJldHVy
biBxdW90ZWRQcmludGFibGVFbmNvZGUoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkpOwotfQot
Ci1WZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IHVpbnQ4X3QqIGlu
cHV0LCBzaXplX3QgaW5wdXRMZW5ndGgpCitzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFBy
aW50YWJsZUVuY29kZShjb25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGlucHV0TGVuZ3RoKQog
ewogICAgIFZlY3Rvcjx1aW50OF90PiBvdXQ7CiAgICAgb3V0LnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoaW5wdXRMZW5ndGgpOwpAQCAtMTE2LDEyICsxMTEsMTIgQEAgVmVjdG9yPHVpbnQ4X3Q+IHF1
b3RlZFByaW50YWJsZUVuY29kZShjbwogICAgIHJldHVybiBvdXQ7CiB9CiAKLVZlY3Rvcjx1aW50
OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkK
K1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGlucHV0KQogewotICAgIHJldHVybiBxdW90ZWRQcmludGFibGVEZWNvZGUoaW5wdXQuZGF0
YSgpLCBpbnB1dC5zaXplKCkpOworICAgIHJldHVybiBxdW90ZWRQcmludGFibGVFbmNvZGUocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgp
KTsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCB1aW50
OF90KiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCkKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4gcXVv
dGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3Ro
KQogewogICAgIFZlY3Rvcjx1aW50OF90PiBvdXQ7CiAgICAgaWYgKCFkYXRhTGVuZ3RoKQpAQCAt
MTU2LDQgKzE1MSw5IEBAIFZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY28K
ICAgICByZXR1cm4gb3V0OwogfQogCitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVj
b2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCkKK3sKKyAgICByZXR1cm4gcXVvdGVkUHJp
bnRhYmxlRGVjb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0LmRhdGEo
KSksIGlucHV0LnNpemUoKSk7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvUXVvdGVkUHJpbnRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzEsMTMgKzMxLDExIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1WZWN0
b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYp
OwotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCB1aW50OF90Kiwg
c2l6ZV90KTsKLQotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCBW
ZWN0b3I8dWludDhfdD4mKTsKLVZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUo
Y29uc3QgdWludDhfdCosIHNpemVfdCk7CitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxl
RW5jb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJp
bnRhYmxlRGVjb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdp
bi5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Q
YXN0ZWJvYXJkV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDcgKzI1MSw3IEBAIHN0ZDo6
b3B0aW9uYWw8UGFzdGVib2FyZEN1c3RvbURhdGE+IFBhc3QKICAgICAgICAgaWYgKEhBTkRMRSBj
YkRhdGEgPSA6OkdldENsaXBib2FyZERhdGEoQ3VzdG9tRGF0YUNsaXBib2FyZEZvcm1hdCkpIHsK
ICAgICAgICAgICAgIHNpemVfdCBzaXplID0gR2xvYmFsU2l6ZShjYkRhdGEpOwogICAgICAgICAg
ICAgYXV0byBkYXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KEdsb2JhbExvY2soY2JEYXRhKSk7
Ci0gICAgICAgICAgICBhdXRvIGN1c3RvbURhdGEgPSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6ZnJv
bVBlcnNpc3RlbmNlRGVjb2Rlcih7ZGF0YSwgc2l6ZX0pOworICAgICAgICAgICAgYXV0byBjdXN0
b21EYXRhID0gUGFzdGVib2FyZEN1c3RvbURhdGE6OmZyb21QZXJzaXN0ZW5jZURlY29kZXIoU3Bh
biB7IGRhdGEsIHNpemUgfSk7CiAKICAgICAgICAgICAgIEdsb2JhbFVubG9jayhjYkRhdGEpOwog
ICAgICAgICAgICAgOjpDbG9zZUNsaXBib2FyZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvd29y
a2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRh
YmFzZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2Vy
dmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NTksMTAgKzQ1OSwxMCBAQCBib29sIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2Vz
CiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDYsIHVwZGF0ZVZpYUNh
Y2hlVG9TdHJpbmcoZGF0YS5yZWdpc3RyYXRpb24udXBkYXRlVmlhQ2FjaGUpKSAhPSBTUUxJVEVf
T0sKICAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRleHQoNywgZGF0YS5zY3Jp
cHRVUkwuc3RyaW5nKCkpICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVt
ZW50LT5iaW5kVGV4dCg4LCB3b3JrZXJUeXBlVG9TdHJpbmcoZGF0YS53b3JrZXJUeXBlKSkgIT0g
U1FMSVRFX09LCi0gICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDksIFNw
YW4geyBjc3BFbmNvZGVyLmJ1ZmZlcigpLCBjc3BFbmNvZGVyLmJ1ZmZlclNpemUoKSB9KSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoOSwgY3Nw
RW5jb2Rlci5idWZmZXIoKSkgIT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0
ZW1lbnQtPmJpbmRUZXh0KDEwLCBkYXRhLnJlZmVycmVyUG9saWN5KSAhPSBTUUxJVEVfT0sKLSAg
ICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoMTEsIFNwYW4geyBzY3JpcHRS
ZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVyKCksIHNjcmlwdFJlc291cmNlTWFwRW5jb2Rlci5idWZm
ZXJTaXplKCkgfSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQt
PmJpbmRCbG9iKDEyLCBTcGFuIHsgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXIoKSwgY2Vy
dGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXJTaXplKCkgfSkgIT0gU1FMSVRFX09LCisgICAgICAg
ICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDExLCBzY3JpcHRSZXNvdXJjZU1hcEVu
Y29kZXIuYnVmZmVyKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVt
ZW50LT5iaW5kQmxvYigxMiwgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXIoKSkgIT0gU1FM
SVRFX09LCiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVf
RE9ORSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIkZh
aWxlZCB0byBzdG9yZSByZWdpc3RyYXRpb24gZGF0YSBpbnRvIHJlY29yZHMgdGFibGUgKCVpKSAt
ICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygp
KTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTUxNyw3ICs1MTcsNyBAQCBTdHJpbmcg
UmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yCiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8
Q29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzPiBjb250ZW50U2VjdXJpdHlQb2xp
Y3k7CiAgICAgICAgIGF1dG8gY29udGVudFNlY3VyaXR5UG9saWN5RGF0YVNwYW4gPSBzcWwtPmNv
bHVtbkJsb2JBc1NwYW4oOCk7CiAgICAgICAgIGlmIChjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRh
U3Bhbi5zaXplKCkpIHsKLSAgICAgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgY3Nw
RGVjb2Rlcihjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhU3Bhbi5kYXRhKCksIGNvbnRlbnRTZWN1
cml0eVBvbGljeURhdGFTcGFuLnNpemUoKSk7CisgICAgICAgICAgICBXVEY6OlBlcnNpc3RlbmNl
OjpEZWNvZGVyIGNzcERlY29kZXIgeyBjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhU3BhbiB9Owog
ICAgICAgICAgICAgY3NwRGVjb2RlciA+PiBjb250ZW50U2VjdXJpdHlQb2xpY3k7CiAgICAgICAg
ICAgICBpZiAoIWNvbnRlbnRTZWN1cml0eVBvbGljeSkgewogICAgICAgICAgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIsICJSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0
UmVjb3JkczogRmFpbGVkIHRvIGRlY29kZSBjb250ZW50U2VjdXJpdHlQb2xpY3kiKTsKQEAgLTUz
MCw3ICs1MzAsNyBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yCiAg
ICAgICAgIEhhc2hNYXA8VVJMLCBTZXJ2aWNlV29ya2VyQ29udGV4dERhdGE6OkltcG9ydGVkU2Ny
aXB0PiBzY3JpcHRSZXNvdXJjZU1hcDsKICAgICAgICAgYXV0byBzY3JpcHRSZXNvdXJjZU1hcERh
dGFTcGFuID0gc3FsLT5jb2x1bW5CbG9iQXNTcGFuKDEwKTsKICAgICAgICAgaWYgKHNjcmlwdFJl
c291cmNlTWFwRGF0YVNwYW4uc2l6ZSgpKSB7Ci0gICAgICAgICAgICBXVEY6OlBlcnNpc3RlbmNl
OjpEZWNvZGVyIHNjcmlwdFJlc291cmNlTWFwRGVjb2RlcihzY3JpcHRSZXNvdXJjZU1hcERhdGFT
cGFuLmRhdGEoKSwgc2NyaXB0UmVzb3VyY2VNYXBEYXRhU3Bhbi5zaXplKCkpOworICAgICAgICAg
ICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBzY3JpcHRSZXNvdXJjZU1hcERlY29kZXIgeyBz
Y3JpcHRSZXNvdXJjZU1hcERhdGFTcGFuIH07CiAgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPEhh
c2hNYXA8VVJMLCBJbXBvcnRlZFNjcmlwdEF0dHJpYnV0ZXM+PiBzY3JpcHRSZXNvdXJjZU1hcFdp
dGhvdXRTY3JpcHRzOwogICAgICAgICAgICAgc2NyaXB0UmVzb3VyY2VNYXBEZWNvZGVyID4+IHNj
cmlwdFJlc291cmNlTWFwV2l0aG91dFNjcmlwdHM7CiAgICAgICAgICAgICBpZiAoIXNjcmlwdFJl
c291cmNlTWFwV2l0aG91dFNjcmlwdHMpIHsKQEAgLTU0Myw3ICs1NDMsNyBAQCBTdHJpbmcgUmVn
aXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yCiAgICAgICAgIGF1dG8gY2VydGlmaWNhdGVJ
bmZvRGF0YVNwYW4gPSBzcWwtPmNvbHVtbkJsb2JBc1NwYW4oMTEpOwogICAgICAgICBzdGQ6Om9w
dGlvbmFsPENlcnRpZmljYXRlSW5mbz4gY2VydGlmaWNhdGVJbmZvOwogCi0gICAgICAgIFdURjo6
UGVyc2lzdGVuY2U6OkRlY29kZXIgY2VydGlmaWNhdGVJbmZvRGVjb2RlcihjZXJ0aWZpY2F0ZUlu
Zm9EYXRhU3Bhbi5kYXRhKCksIGNlcnRpZmljYXRlSW5mb0RhdGFTcGFuLnNpemUoKSk7CisgICAg
ICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgY2VydGlmaWNhdGVJbmZvRGVjb2RlciB7IGNl
cnRpZmljYXRlSW5mb0RhdGFTcGFuIH07CiAgICAgICAgIGNlcnRpZmljYXRlSW5mb0RlY29kZXIg
Pj4gY2VydGlmaWNhdGVJbmZvOwogICAgICAgICBpZiAoIWNlcnRpZmljYXRlSW5mbykgewogICAg
ICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIlJlZ2lzdHJhdGlvbkRh
dGFiYXNlOjppbXBvcnRSZWNvcmRzOiBGYWlsZWQgdG8gZGVjb2RlIGNlcnRpZmljYXRlSW5mbyIp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NjcmlwdFN0
b3JhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9z
ZXJ2ZXIvU1dTY3JpcHRTdG9yYWdlLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dl
YkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NjcmlwdFN0b3JhZ2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIFN0cmluZyBTV1NjcmlwdFN0b3JhZ2U6OnNoYTJIYXNo
KGNvbnN0IFMKICAgICBhdXRvIGlucHV0VXRmOCA9IGlucHV0LnV0ZjgoKTsKICAgICBjcnlwdG8t
PmFkZEJ5dGVzKGlucHV0VXRmOC5kYXRhKCksIGlucHV0VXRmOC5sZW5ndGgoKSk7CiAgICAgYXV0
byBoYXNoID0gY3J5cHRvLT5jb21wdXRlSGFzaCgpOwotICAgIHJldHVybiBiYXNlNjRVUkxFbmNv
ZGVUb1N0cmluZyhoYXNoLmRhdGEoKSwgaGFzaC5zaXplKCkpOworICAgIHJldHVybiBiYXNlNjRV
UkxFbmNvZGVUb1N0cmluZyhoYXNoKTsKIH0KIAogU3RyaW5nIFNXU2NyaXB0U3RvcmFnZTo6c2hh
Mkhhc2goY29uc3QgVVJMJiBpbnB1dCkgY29uc3QKQEAgLTg2LDkgKzg2LDkgQEAgU2NyaXB0QnVm
ZmVyIFNXU2NyaXB0U3RvcmFnZTo6c3RvcmUoY29ucwogICAgIGF1dG8gc2NyaXB0UGF0aCA9IHRo
aXMtPnNjcmlwdFBhdGgocmVnaXN0cmF0aW9uS2V5LCBzY3JpcHRVUkwpOwogICAgIEZpbGVTeXN0
ZW06Om1ha2VBbGxEaXJlY3RvcmllcyhGaWxlU3lzdGVtOjpwYXJlbnRQYXRoKHNjcmlwdFBhdGgp
KTsKIAotICAgIGF1dG8gaXRlcmF0ZU92ZXJCdWZmZXJBbmRXcml0ZURhdGEgPSBbJl0oY29uc3Qg
RnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIHdyaXRlRGF0YSkgewotICAg
ICAgICBmb3IgKGF1dG8gaXQgPSBzY3JpcHQuYnVmZmVyKCktPmJlZ2luKCk7IGl0ICE9IHNjcmlw
dC5idWZmZXIoKS0+ZW5kKCk7ICsraXQpCi0gICAgICAgICAgICB3cml0ZURhdGEoaXQtPnNlZ21l
bnQtPmRhdGEoKSwgaXQtPnNlZ21lbnQtPnNpemUoKSk7CisgICAgYXV0byBpdGVyYXRlT3ZlckJ1
ZmZlckFuZFdyaXRlRGF0YSA9IFsmXShjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3Rk
OjpieXRlPik+JiB3cml0ZURhdGEpIHsKKyAgICAgICAgZm9yIChhdXRvJiBzZWdtZW50RW50cnkg
OiAqc2NyaXB0LmJ1ZmZlcigpKQorICAgICAgICAgICAgd3JpdGVEYXRhKHNlZ21lbnRFbnRyeS5z
ZWdtZW50LT5ieXRlcygpKTsKICAgICB9OwogCiAgICAgaWYgKCFzaG91bGRVc2VGaWxlTWFwcGlu
ZyhzY3JpcHQuYnVmZmVyKCktPnNpemUoKSkpIHsKQEAgLTk3LDggKzk3LDggQEAgU2NyaXB0QnVm
ZmVyIFNXU2NyaXB0U3RvcmFnZTo6c3RvcmUoY29ucwogICAgICAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoU2VydmljZVdvcmtlciwgIlNXU2NyaXB0U3RvcmFnZTo6c3RvcmU6IEZhaWx1cmUgdG8g
c3RvcmUgJXMsIEZpbGVTeXN0ZW06Om9wZW5GaWxlKCkgZmFpbGVkIiwgc2NyaXB0UGF0aC51dGY4
KCkuZGF0YSgpKTsKICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIH0KLSAgICAgICAg
aXRlcmF0ZU92ZXJCdWZmZXJBbmRXcml0ZURhdGEoWyZdKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNp
emVfdCBzaXplKSB7Ci0gICAgICAgICAgICBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShoYW5kbGUs
IGRhdGEsIHNpemUpOworICAgICAgICBpdGVyYXRlT3ZlckJ1ZmZlckFuZFdyaXRlRGF0YShbJl0o
U3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpIHsKKyAgICAgICAgICAgIEZpbGVTeXN0ZW06Ondy
aXRlVG9GaWxlKGhhbmRsZSwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9KTsKICAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxl
KGhhbmRsZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw4MSBAQAorMjAyMS0wNi0xMSAg
U2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRvcHQgU3BhbiBpbiBt
b3JlIHBsYWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgW1dJUF0KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVu
Z2luZUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6ZW5j
b2RlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6ZGVjb2RlUmVjb3Jk
SGVhZGVyKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdp
bmVDYWNoZXMuY3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6c3Rv
cmVPcmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVhZE9y
aWdpbik6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6ZW5jb2RlQ2FjaGVOYW1lcyk6
CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6ZGVjb2RlQ2FjaGVzTmFtZXMpOgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6Om1hcFRvRmlsZSBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Y29tcHV0ZVNIQTEpOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhY2hlOjpEYXRhOjpEYXRhKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVEYXRhQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0
YTo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6OmFk
b3B0TWFwKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRy
eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6OmVuY29kZUFzU3Rv
cmFnZVJlY29yZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6
OmRlY29kZVN0b3JhZ2VSZWNvcmQpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZUtleS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6aGFzaFN0
cmluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6S2V5Ojpjb21wdXRlSGFzaCBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6S2V5Ojpjb21wdXRlUGFydGl0
aW9uSGFzaCBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6ZGVjb2RlUmVj
b3JkTWV0YURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmVuY29kZVJlY29y
ZE1ldGFEYXRhKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVT
dWJyZXNvdXJjZXNFbnRyeS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3Vi
cmVzb3VyY2VzRW50cnk6OmVuY29kZUFzU3RvcmFnZVJlY29yZCBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3VicmVzb3VyY2VzRW50cnk6OmRlY29kZVN0b3JhZ2VSZWNv
cmQpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVyLmg6CisgICAgICAgICog
UGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRD
b2RlcjxDU3RyaW5nPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxDU3Ry
aW5nPjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxTdHJpbmc+OjplbmNv
ZGUpOgorICAgICAgICAoSVBDOjpkZWNvZGVTdHJpbmdUZXh0KToKKyAgICAgICAgKElQQzo6QXJn
dW1lbnRDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVu
dENvZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29kZSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0Fy
Z3VtZW50Q29kZXJzLmg6CisgICAgICAgIChJUEM6OlNpbXBsZUFyZ3VtZW50Q29kZXI6OmVuY29k
ZSk6CisgICAgICAgIChJUEM6OlNpbXBsZUFyZ3VtZW50Q29kZXI6OmRlY29kZSk6CisgICAgICAg
ICogUGxhdGZvcm0vSVBDL0FycmF5UmVmZXJlbmNlLmg6CisgICAgICAgICogUGxhdGZvcm0vSVBD
L0RlY29kZXIuY3BwOgorICAgICAgICAoSVBDOjpEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERh
dGEpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9EZWNvZGVyLmg6CisgICAgICAgIChJUEM6OkRl
Y29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0Vu
Y29kZXIuY3BwOgorICAgICAgICAoSVBDOjpFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEp
OgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9FbmNvZGVyLmg6CisgICAgICAgICogUGxhdGZvcm0v
SVBDL1NoYXJlZEJ1ZmZlckNvcHkuY3BwOgorICAgICAgICAoSVBDOjpTaGFyZWRCdWZmZXJDb3B5
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9u
RW5jb2Rlci5oOgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgor
ICAgICAgICAoSVBDOjplbmNvZGVTaGFyZWRCdWZmZXIpOgorICAgICAgICAoSVBDOjpkZWNvZGVT
aGFyZWRCdWZmZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0
U3RvcmUuY3BwOgorICAgICAgICAoQVBJOjplbmNvZGVDb250ZW50UnVsZUxpc3RNZXRhRGF0YSk6
CisgICAgICAgIChBUEk6OmdldERhdGEpOgorICAgICAgICAoQVBJOjpkZWNvZGVDb250ZW50UnVs
ZUxpc3RNZXRhRGF0YSk6CisgICAgICAgIChBUEk6OndyaXRlRGF0YVRvRmlsZSk6CisgICAgICAg
ICogVUlQcm9jZXNzL21hYy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwOgorICAgICAgICAo
V2ViS2l0OjpIaXN0b3J5RW50cnlEYXRhRW5jb2Rlcjo6b3BlcmF0b3I8PCk6CisgICAgICAgIChX
ZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFFbmNvZGVyOjplbmNvZGVBcml0aG1ldGljVHlwZSk6Cisg
ICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0
aERhdGEpOgorICAgICAgICAoV2ViS2l0OjpIaXN0b3J5RW50cnlEYXRhRGVjb2Rlcjo6b3BlcmF0
b3I+Pik6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFEZWNvZGVyOjpkZWNvZGVB
cml0aG1ldGljVHlwZSk6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFEZWNvZGVy
OjpkZWNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9J
UENUZXN0aW5nQVBJLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6ZW5jb2Rl
VHlwZWRBcnJheSk6CisKIDIwMjEtMDYtMTEgIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBs
ZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyNzg3NTQuCkluZGV4OiBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Qcml2YXRl
Q2xpY2tNZWFzdXJlbWVudE1hbmFnZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyMyw3ICszMjMsNyBAQCB2b2lkIFByaXZhdGVDbGlja01lYXN1
cmVtZW50TWFuYWdlcjo6ZmlyCiAgICAgICAgIGNyeXB0by0+YWRkQnl0ZXMocHVibGljS2V5RGF0
YS0+ZGF0YSgpLCBwdWJsaWNLZXlEYXRhLT5zaXplKCkpOwogICAgICAgICBhdXRvIHB1YmxpY0tl
eURhdGFIYXNoID0gY3J5cHRvLT5jb21wdXRlSGFzaCgpOwogCi0gICAgICAgIGF1dG8ga2V5SUQg
PSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhwdWJsaWNLZXlEYXRhSGFzaC5kYXRhKCksIHB1Ymxp
Y0tleURhdGFIYXNoLnNpemUoKSk7CisgICAgICAgIGF1dG8ga2V5SUQgPSBiYXNlNjRVUkxFbmNv
ZGVUb1N0cmluZyhwdWJsaWNLZXlEYXRhSGFzaCk7CiAgICAgICAgIGlmIChrZXlJRCAhPSBhdHRy
aWJ1dGlvbi5zb3VyY2VVbmxpbmthYmxlVG9rZW4oKS0+a2V5SURCYXNlNjRVUkwpCiAgICAgICAg
ICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
Q2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3Rv
cmFnZUVuZ2luZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTY1LDcgKzU2NSw3IEBAIFN0
b3JhZ2U6OlJlY29yZCBDYWNoZTo6ZW5jb2RlKGNvbnN0IFJlY28KIAogICAgIGVuY29kZXIuZW5j
b2RlQ2hlY2tzdW0oKTsKIAotICAgIERhdGEgaGVhZGVyKGVuY29kZXIuYnVmZmVyKCksIGVuY29k
ZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICBEYXRhIGhlYWRlcihlbmNvZGVyLmJ1ZmZlcigpKTsKICAg
ICBEYXRhIGJvZHk7CiAgICAgV1RGOjpzd2l0Y2hPbihyZWNvcmQucmVzcG9uc2VCb2R5LCBbXShj
b25zdCBSZWY8V2ViQ29yZTo6Rm9ybURhdGE+JiBmb3JtRGF0YSkgewogICAgICAgICAvLyBGSVhN
RTogU3RvcmUgZm9ybSBkYXRhIGJvZHkuCkBAIC02MzAsNyArNjMwLDcgQEAgc3RhdGljIHN0ZDo6
b3B0aW9uYWw8V2ViQ29yZTo6RE9NQ2FjaGVFbgogCiBzdGQ6Om9wdGlvbmFsPENhY2hlOjpEZWNv
ZGVkUmVjb3JkPiBDYWNoZTo6ZGVjb2RlUmVjb3JkSGVhZGVyKGNvbnN0IFN0b3JhZ2U6OlJlY29y
ZCYgc3RvcmFnZSkKIHsKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoc3Rv
cmFnZS5oZWFkZXIuZGF0YSgpLCBzdG9yYWdlLmhlYWRlci5zaXplKCkpOworICAgIFdURjo6UGVy
c2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihTcGFuIHsgc3RvcmFnZS5oZWFkZXIuZGF0YSgpLCBz
dG9yYWdlLmhlYWRlci5zaXplKCkgfSk7CiAKICAgICBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gaW5z
ZXJ0aW9uVGltZTsKICAgICBkZWNvZGVyID4+IGluc2VydGlvblRpbWU7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0
b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwNSwxNCArMTA1LDE0IEBAIHZvaWQgQ2FjaGVzOjpzdG9yZU9yaWdpbihD
b21wbGV0aW9uQ2FsbGIKICAgICBlbmNvZGVyIDw8IG1fb3JpZ2luLmNsaWVudE9yaWdpbi5wcm90
b2NvbDsKICAgICBlbmNvZGVyIDw8IG1fb3JpZ2luLmNsaWVudE9yaWdpbi5ob3N0OwogICAgIGVu
Y29kZXIgPDwgbV9vcmlnaW4uY2xpZW50T3JpZ2luLnBvcnQ7Ci0gICAgbV9lbmdpbmUtPndyaXRl
RmlsZShjYWNoZXNPcmlnaW5GaWxlbmFtZShtX3Jvb3RQYXRoKSwgRGF0YSB7IGVuY29kZXIuYnVm
ZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpIH0sIFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChz
dGQ6Om9wdGlvbmFsPEVycm9yPiYmIGVycm9yKSBtdXRhYmxlIHsKKyAgICBtX2VuZ2luZS0+d3Jp
dGVGaWxlKGNhY2hlc09yaWdpbkZpbGVuYW1lKG1fcm9vdFBhdGgpLCBEYXRhIHsgZW5jb2Rlci5i
dWZmZXIoKSB9LCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoc3RkOjpvcHRpb25hbDxFcnJvcj4m
JiBlcnJvcikgbXV0YWJsZSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoZXJy
b3IpKTsKICAgICB9KTsKIH0KIAogc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+
IENhY2hlczo6cmVhZE9yaWdpbihjb25zdCBEYXRhJiBkYXRhKQogewotICAgIFdURjo6UGVyc2lz
dGVuY2U6OkRlY29kZXIgZGVjb2RlcihkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOworICAgIFdU
Rjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihTcGFuIHsgZGF0YS5kYXRhKCksIGRhdGEu
c2l6ZSgpIH0pOwogCiAgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRh
dGE+IHRvcE9yaWdpbjsKICAgICBkZWNvZGVyID4+IHRvcE9yaWdpbjsKQEAgLTQwNCwxMiArNDA0
LDEyIEBAIHN0YXRpYyBpbmxpbmUgRGF0YSBlbmNvZGVDYWNoZU5hbWVzKGNvbnMKICAgICAgICAg
ZW5jb2RlciA8PCBjYWNoZS51bmlxdWVOYW1lKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIERhdGEg
eyBlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSB9OworICAgIHJldHVybiBE
YXRhIHsgZW5jb2Rlci5idWZmZXIoKSB9OwogfQogCiBzdGF0aWMgaW5saW5lIEV4cGVjdGVkPFZl
Y3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiwgRXJyb3I+IGRlY29kZUNhY2hlc05hbWVz
KGNvbnN0IERhdGEmIGRhdGEpCiB7Ci0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNv
ZGVyKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVj
b2RlciBkZWNvZGVyKFNwYW4geyBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkgfSk7CiAgICAgc3Rk
OjpvcHRpb25hbDx1aW50NjRfdD4gY291bnQ7CiAgICAgZGVjb2RlciA+PiBjb3VudDsKICAgICBp
ZiAoIWNvdW50KQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogRGF0
YSBEYXRhOjptYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKSBjb25zdAogewogICAgIEZpbGVT
eXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGU7Ci0gICAgYXV0byBhcHBseURhdGEgPSBb
Jl0oY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIGFwcGxpZXIp
IHsgYXBwbHkoYXBwbGllcik7IH07CisgICAgYXV0byBhcHBseURhdGEgPSBbJl0oY29uc3QgRnVu
Y3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYgYXBwbGllcikgeyBhcHBseShhcHBs
aWVyKTsgfTsKICAgICBhdXRvIG1hcHBlZEZpbGUgPSBGaWxlU3lzdGVtOjptYXBUb0ZpbGUocGF0
aCwgc2l6ZSgpLCBXVEZNb3ZlKGFwcGx5RGF0YSksICZoYW5kbGUpOwogICAgIGlmICghbWFwcGVk
RmlsZSkKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTg2LDkgKzg2LDkgQEAgRGF0YSBhZG9wdEFu
ZE1hcEZpbGUoRmlsZVN5c3RlbTo6UGxhdGZvcgogU0hBMTo6RGlnZXN0IGNvbXB1dGVTSEExKGNv
bnN0IERhdGEmIGRhdGEsIGNvbnN0IFNhbHQmIHNhbHQpCiB7CiAgICAgU0hBMSBzaGExOwotICAg
IHNoYTEuYWRkQnl0ZXMoc2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKTsKLSAgICBkYXRhLmFwcGx5
KFsmc2hhMV0oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgc2hh
MS5hZGRCeXRlcyhkYXRhLCBzaXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKHNhbHQpOworICAgIGRh
dGEuYXBwbHkoWyZzaGExXShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkgeworICAgICAgICBz
aGExLmFkZEJ5dGVzKGRhdGEpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9KTsKIApJbmRl
eDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVEYXRhLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsy
OCw3IEBACiAjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rp
b25EaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8d3RmL1NIQTEuaD4KKyNpbmNsdWRlIDx3dGYvU3Bh
bi5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC01NCw2ICs1NSwxMCBAQCBjbGFzcyBEYXRhIHsKIHB1
YmxpYzoKICAgICBEYXRhKCkgeyB9CiAgICAgRGF0YShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsK
KyAgICBEYXRhKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhKQorICAgICAgICA6IERhdGEocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5kYXRhKCkpLCBkYXRhLnNpemUoKSkK
KyAgICB7CisgICAgfQogCiAgICAgfkRhdGEoKSB7IH0KIApAQCAtNzksNyArODQsNyBAQCBwdWJs
aWM6CiAKICAgICBEYXRhIHN1YnJhbmdlKHNpemVfdCBvZmZzZXQsIHNpemVfdCkgY29uc3Q7CiAK
LSAgICBib29sIGFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2wgKGNvbnN0IHVpbnQ4X3QqLCBzaXpl
X3QpPiYpIGNvbnN0OworICAgIGJvb2wgYXBwbHkoY29uc3QgRnVuY3Rpb248Ym9vbCAoU3Bhbjxj
b25zdCBzdGQ6OmJ5dGU+KT4mKSBjb25zdDsKIAogICAgIERhdGEgbWFwVG9GaWxlKGNvbnN0IFN0
cmluZyYgcGF0aCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1tCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZURhdGFDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjksMTIgKzY5LDEyIEBAIGJvb2wg
RGF0YTo6aXNOdWxsKCkgY29uc3QKICAgICByZXR1cm4gIW1fZGlzcGF0Y2hEYXRhOwogfQogCi1i
b29sIERhdGE6OmFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2wgKGNvbnN0IHVpbnQ4X3QqLCBzaXpl
X3QpPiYgYXBwbGllcikgY29uc3QKK2Jvb2wgRGF0YTo6YXBwbHkoY29uc3QgRnVuY3Rpb248Ym9v
bCAoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mIGFwcGxpZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFt
X3NpemUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gZGlzcGF0Y2hfZGF0YV9h
cHBseShtX2Rpc3BhdGNoRGF0YS5nZXQoKSwgWyZhcHBsaWVyXShkaXNwYXRjaF9kYXRhX3QsIHNp
emVfdCwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgcmV0dXJuIGFw
cGxpZXIoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBzaXplKTsKKyAgICAgICAg
cmV0dXJuIGFwcGxpZXIoU3BhbiB7IHN0YXRpY19jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGRhdGEp
LCBzaXplIH0pOwogICAgIH0pOwogfQogCkBAIC05NCwxNCArOTQsMTEgQEAgRGF0YSBjb25jYXRl
bmF0ZShjb25zdCBEYXRhJiBhLCBjb25zdCBEYQogCiBEYXRhIERhdGE6OmFkb3B0TWFwKEZpbGVT
eXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYgbWFwcGVkRmlsZSwgRmlsZVN5c3RlbTo6UGxhdGZvcm1G
aWxlSGFuZGxlIGZkKQogewotICAgIHNpemVfdCBzaXplID0gbWFwcGVkRmlsZS5zaXplKCk7Ci0g
ICAgdm9pZCogbWFwID0gbWFwcGVkRmlsZS5sZWFrSGFuZGxlKCk7Ci0gICAgQVNTRVJUKG1hcCk7
Ci0gICAgQVNTRVJUKG1hcCAhPSBNQVBfRkFJTEVEKTsKKyAgICBhdXRvIG1hcCA9IG1hcHBlZEZp
bGUubGVha0hhbmRsZSgpOworICAgIEFTU0VSVChtYXAuZGF0YSgpKTsKKyAgICBBU1NFUlQobWFw
LmRhdGEoKSAhPSBNQVBfRkFJTEVEKTsKICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmQpOwot
ICAgIGF1dG8gYm9keU1hcCA9IGFkb3B0T1NPYmplY3QoZGlzcGF0Y2hfZGF0YV9jcmVhdGUobWFw
LCBzaXplLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZ
X0RFRkFVTFQsIDApLCBbbWFwLCBzaXplXSB7Ci0gICAgICAgIG11bm1hcChtYXAsIHNpemUpOwot
ICAgIH0pKTsKKyAgICBhdXRvIGJvZHlNYXAgPSBhZG9wdE9TT2JqZWN0KGRpc3BhdGNoX2RhdGFf
Y3JlYXRlKG1hcC5kYXRhKCksIG1hcC5zaXplKCksIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUo
RElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIERJU1BBVENIX0RBVEFfREVTVFJV
Q1RPUl9NVU5NQVApKTsKICAgICByZXR1cm4geyBXVEZNb3ZlKGJvZHlNYXApLCBEYXRhOjpCYWNr
aW5nOjpNYXAgfTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSwxMCArOTksMTAgQEAgU3RvcmFnZTo6UmVjb3JkIEVu
dHJ5OjplbmNvZGVBc1N0b3JhZ2VSZQogICAgIAogICAgIGVuY29kZXIuZW5jb2RlQ2hlY2tzdW0o
KTsKIAotICAgIERhdGEgaGVhZGVyKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6
ZSgpKTsKKyAgICBEYXRhIGhlYWRlciB7IGVuY29kZXIuYnVmZmVyKCkgfTsKICAgICBEYXRhIGJv
ZHk7CiAgICAgaWYgKG1fYnVmZmVyKQotICAgICAgICBib2R5ID0geyBtX2J1ZmZlci0+ZGF0YSgp
LCBtX2J1ZmZlci0+c2l6ZSgpIH07CisgICAgICAgIGJvZHkgPSB7IG1fYnVmZmVyLT5ieXRlcygp
IH07CiAKICAgICByZXR1cm4geyBtX2tleSwgbV90aW1lU3RhbXAsIGhlYWRlciwgYm9keSwgeyB9
IH07CiB9CkBAIC0xMTEsNyArMTExLDcgQEAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBFbnRyeTo6
ZGVjb2RlU3RvcgogewogICAgIGF1dG8gZW50cnkgPSBtYWtlVW5pcXVlPEVudHJ5PihzdG9yYWdl
RW50cnkpOwogCi0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKHN0b3JhZ2VF
bnRyeS5oZWFkZXIuZGF0YSgpLCBzdG9yYWdlRW50cnkuaGVhZGVyLnNpemUoKSk7CisgICAgV1RG
OjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyIHsgU3BhbiB7IHN0b3JhZ2VFbnRyeS5oZWFk
ZXIuZGF0YSgpLCBzdG9yYWdlRW50cnkuaGVhZGVyLnNpemUoKSB9IH07CiAgICAgV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKICAgICBpZiAoIVdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2U6OmRlY29kZShkZWNvZGVyLCByZXNwb25zZSkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVL
ZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlS2V5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04OCwxMyArODgsMTMgQEAgc3RhdGljIHZvaWQgaGFzaFN0cmluZyhTSEExJiBzaGExLCBjb25z
dAogCiAgICAgaWYgKHN0cmluZy5pczhCaXQoKSAmJiBzdHJpbmcuaXNBbGxBU0NJSSgpKSB7CiAg
ICAgICAgIGNvbnN0IHVpbnQ4X3QgbnVsbEJ5dGUgPSAwOwotICAgICAgICBzaGExLmFkZEJ5dGVz
KHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAgICAgICBzaGExLmFk
ZEJ5dGVzKCZudWxsQnl0ZSwgMSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IHN0cmlu
Zy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkgfSk7CisgICAgICAgIHNoYTEuYWRkQnl0
ZXMoU3BhbiB7ICZudWxsQnl0ZSwgMSB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBh
dXRvIGNTdHJpbmcgPSBzdHJpbmcudXRmOCgpOwogICAgIC8vIEluY2x1ZGUgdGVybWluYXRpbmcg
bnVsbCBieXRlLgotICAgIHNoYTEuYWRkQnl0ZXMoY1N0cmluZy5kYXRhQXNVSW50OFB0cigpLCBj
U3RyaW5nLmxlbmd0aCgpICsgMSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgY1N0cmluZy5k
YXRhQXNVSW50OFB0cigpLCBjU3RyaW5nLmxlbmd0aCgpICsgMSB9KTsKIH0KIAogS2V5OjpIYXNo
VHlwZSBLZXk6OmNvbXB1dGVIYXNoKGNvbnN0IFNhbHQmIHNhbHQpIGNvbnN0CkBAIC0xMDIsNyAr
MTAyLDcgQEAgS2V5OjpIYXNoVHlwZSBLZXk6OmNvbXB1dGVIYXNoKGNvbnN0IFNhbAogICAgIC8v
IFdlIGRvbid0IHJlYWxseSBuZWVkIGEgY3J5cHRvZ3JhcGhpYyBoYXNoLiBUaGUga2V5IGlzIGFs
d2F5cyB2ZXJpZmllZCBhZ2FpbnN0IHRoZSBlbnRyeSBoZWFkZXIuCiAgICAgLy8gU0hBMSBqdXN0
IGhhcHBlbnMgdG8gYmUgc3VpdGFibHkgc2l6ZWQsIGZhc3QgYW5kIGF2YWlsYWJsZS4KICAgICBT
SEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhzYWx0LmRhdGEoKSwgc2FsdC5zaXplKCkpOwor
ICAgIHNoYTEuYWRkQnl0ZXMoc2FsdCk7CiAKICAgICBoYXNoU3RyaW5nKHNoYTEsIG1fcGFydGl0
aW9uKTsKICAgICBoYXNoU3RyaW5nKHNoYTEsIG1fdHlwZSk7CkBAIC0xMTcsNyArMTE3LDcgQEAg
S2V5OjpIYXNoVHlwZSBLZXk6OmNvbXB1dGVIYXNoKGNvbnN0IFNhbAogS2V5OjpIYXNoVHlwZSBL
ZXk6OmNvbXB1dGVQYXJ0aXRpb25IYXNoKGNvbnN0IFNhbHQmIHNhbHQpIGNvbnN0CiB7CiAgICAg
U0hBMSBzaGExOwotICAgIHNoYTEuYWRkQnl0ZXMoc2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKTsK
KyAgICBzaGExLmFkZEJ5dGVzKHNhbHQpOwogCiAgICAgaGFzaFN0cmluZyhzaGExLCBtX3BhcnRp
dGlvbik7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlU3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDU0LDggKzQ1NCw4IEBAIHN0cnVjdCBSZWNvcmRNZXRhRGF0
YSB7CiBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlUmVjb3JkTWV0YURhdGEo
UmVjb3JkTWV0YURhdGEmIG1ldGFEYXRhLCBjb25zdCBEYXRhJiBmaWxlRGF0YSkKIHsKICAgICBi
b29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBmaWxlRGF0YS5hcHBseShbJm1ldGFEYXRhLCAmc3Vj
Y2Vzc10oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgV1RGOjpQ
ZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOworICAgIGZpbGVEYXRhLmFw
cGx5KFsmbWV0YURhdGEsICZzdWNjZXNzXShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkgewor
ICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YSk7CiAgICAgICAg
IAogICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBjYWNoZVN0b3JhZ2VWZXJzaW9uOwog
ICAgICAgICBkZWNvZGVyID4+IGNhY2hlU3RvcmFnZVZlcnNpb247CkBAIC01ODYsNyArNTg2LDcg
QEAgc3RhdGljIERhdGEgZW5jb2RlUmVjb3JkTWV0YURhdGEoY29uc3QgUgogCiAgICAgZW5jb2Rl
ci5lbmNvZGVDaGVja3N1bSgpOwogCi0gICAgcmV0dXJuIERhdGEoZW5jb2Rlci5idWZmZXIoKSwg
ZW5jb2Rlci5idWZmZXJTaXplKCkpOworICAgIHJldHVybiB7IGVuY29kZXIuYnVmZmVyKCkgfTsK
IH0KIAogc3RkOjpvcHRpb25hbDxCbG9iU3RvcmFnZTo6QmxvYj4gU3RvcmFnZTo6c3RvcmVCb2R5
QXNCbG9iKFdyaXRlT3BlcmF0aW9uJiB3cml0ZU9wZXJhdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDE0ICsxMjMsMTQgQEAgU3RvcmFnZTo6UmVjb3Jk
IFN1YnJlc291cmNlc0VudHJ5OjplbmNvZAogCiAgICAgZW5jb2Rlci5lbmNvZGVDaGVja3N1bSgp
OwogCi0gICAgcmV0dXJuIHsgbV9rZXksIG1fdGltZVN0YW1wLCB7IGVuY29kZXIuYnVmZmVyKCks
IGVuY29kZXIuYnVmZmVyU2l6ZSgpIH0sIHsgfSwgeyB9fTsKKyAgICByZXR1cm4geyBtX2tleSwg
bV90aW1lU3RhbXAsIHsgZW5jb2Rlci5idWZmZXIoKSB9LCB7IH0sIHsgfX07CiB9CiAKIHN0ZDo6
dW5pcXVlX3B0cjxTdWJyZXNvdXJjZXNFbnRyeT4gU3VicmVzb3VyY2VzRW50cnk6OmRlY29kZVN0
b3JhZ2VSZWNvcmQoY29uc3QgU3RvcmFnZTo6UmVjb3JkJiBzdG9yYWdlRW50cnkpCiB7CiAgICAg
YXV0byBlbnRyeSA9IG1ha2VVbmlxdWU8U3VicmVzb3VyY2VzRW50cnk+KHN0b3JhZ2VFbnRyeSk7
CiAKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoc3RvcmFnZUVudHJ5Lmhl
YWRlci5kYXRhKCksIHN0b3JhZ2VFbnRyeS5oZWFkZXIuc2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNp
c3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyBTcGFuIHsgc3RvcmFnZUVudHJ5LmhlYWRlci5kYXRh
KCksIHN0b3JhZ2VFbnRyeS5oZWFkZXIuc2l6ZSgpIH0gfTsKICAgICBzdGQ6Om9wdGlvbmFsPFZl
Y3RvcjxTdWJyZXNvdXJjZUluZm8+PiBzdWJyZXNvdXJjZXM7CiAgICAgZGVjb2RlciA+PiBzdWJy
ZXNvdXJjZXM7CiAgICAgaWYgKCFzdWJyZXNvdXJjZXMpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0lQQy9Bcmd1bWVudENvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9JUEMvQXJndW1lbnRDb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5
LDEzICs3OSwxMyBAQCBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxULCB0eXBlbmFtZSBzdGQ6OmVuCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5j
b2RlciYgZW5jb2RlciwgVCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZ2YWx1ZSksIHNp
emVvZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKFNwYW4geyAmdmFsdWUsIDEgfSwgYWxpZ25vZihUKSk7CiAgICAgfQogCiAgICAgc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8VD4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewogICAgICAg
ICBUIHJlc3VsdDsKLSAgICAgICAgaWYgKGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZyZXN1bHQpLCBzaXplb2YoVCksIGFsaWdub2YoVCkp
KQorICAgICAgICBpZiAoZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZyZXN1
bHQsIDEgfSkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3Vt
ZW50Q29kZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9B
cmd1bWVudENvZGVycy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIs
NyBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8Q1N0cmluZz46OmVuY29kZShFbmNvCiAKICAgICB1aW50
MzJfdCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAgZW5jb2RlciA8PCBsZW5ndGg7Ci0g
ICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RyaW5nLmRhdGFBc1VJbnQ4UHRyKCks
IGxlbmd0aCwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RyaW5nLmJ5
dGVzKCksIDEpOwogfQogCiBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBBcmd1bWVudENvZGVyPENT
dHJpbmc+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgQ1N0cmluZyYgcmVzdWx0KQpAQCAtMTAz
LDcgKzEwMyw3IEBAIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIEFyZ3VtZW50Q29kZXI8Q1MKIAog
ICAgIGNoYXIqIGJ1ZmZlcjsKICAgICBDU3RyaW5nIHN0cmluZyA9IENTdHJpbmc6Om5ld1VuaW5p
dGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExl
bmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoLCAxKSkK
KyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBidWZmZXIsIGxl
bmd0aCB9LCAxKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmVzdWx0ID0gc3RyaW5n
OwpAQCAtMTIzLDExICsxMjMsNyBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8U3RyaW5nPjo6ZW5jb2Rl
KEVuY29kCiAgICAgYm9vbCBpczhCaXQgPSBzdHJpbmcuaXM4Qml0KCk7CiAKICAgICBlbmNvZGVy
IDw8IGxlbmd0aCA8PCBpczhCaXQ7Ci0KLSAgICBpZiAoaXM4Qml0KQotICAgICAgICBlbmNvZGVy
LmVuY29kZUZpeGVkTGVuZ3RoRGF0YShzdHJpbmcuY2hhcmFjdGVyczgoKSwgbGVuZ3RoICogc2l6
ZW9mKExDaGFyKSwgYWxpZ25vZihMQ2hhcikpOwotICAgIGVsc2UKLSAgICAgICAgZW5jb2Rlci5l
bmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3Ry
aW5nLmNoYXJhY3RlcnMxNigpKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSwgYWxpZ25vZihVQ2hh
cikpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0cmluZy5ieXRlcygpKTsK
IH0KIHRlbXBsYXRlCiB2b2lkIEFyZ3VtZW50Q29kZXI8U3RyaW5nPjo6ZW5jb2RlPEVuY29kZXI+
KEVuY29kZXImLCBjb25zdCBTdHJpbmcmKTsKQEAgLTE0Myw3ICsxMzksNyBAQCBzdGF0aWMgaW5s
aW5lIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBkZWNvCiAgICAgCiAgICAgQ2hhcmFjdGVyVHlwZSog
YnVmZmVyOwogICAgIFN0cmluZyBzdHJpbmcgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQo
bGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEo
cmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJh
Y3RlclR5cGUpLCBhbGlnbm9mKENoYXJhY3RlclR5cGUpKSkKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBidWZmZXIsIGxlbmd0aCB9KSkKICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAKICAgICByZXR1cm4gc3RyaW5nOwpAQCAtMTgxLDEyICsx
NzcsMTIgQEAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgQXJndW1lbnRDb2RlcjxTdAogCiB2b2lk
IEFyZ3VtZW50Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQogewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpLCAxKTsKKyAgICBlbmNvZGVyLmVu
Y29kZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3QsIDEpOwogfQogCiBXQVJOX1VOVVNFRF9SRVRVUk4g
Ym9vbCBBcmd1bWVudENvZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
LCBTSEExOjpEaWdlc3QmIGRpZ2VzdCkKIHsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhl
ZExlbmd0aERhdGEoZGlnZXN0LmRhdGEoKSwgc2l6ZW9mKGRpZ2VzdCksIDEpOworICAgIHJldHVy
biBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3QsIDEpOwogfQogCiAjaWYgSEFW
RShBVURJVF9UT0tFTikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50
Q29kZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1l
bnRDb2RlcnMuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9J
UEMvQXJndW1lbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTIgKzQ1LDEyIEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBTaW1wbGVBcmd1bWUKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBFbmNvZGVyPgogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBj
b25zdCBUJiB0KQogICAgIHsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oJnQpLCBzaXplb2YoVCksIGFsaWdub2Yo
VCkpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJnQsIDEg
fSk7CiAgICAgfQogCiAgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyLCBUJiB0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGRlY29kZXIuZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ0KSwgc2l6ZW9m
KFQpLCBhbGlnbm9mKFQpKTsKKyAgICAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5n
dGhEYXRhKFNwYW4geyAmdCwgMSB9KTsKICAgICB9CiB9OwogCkBAIC02MSwxMyArNjEsMTQgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IEV4dGVudD4gc3RydQogICAgIHsKICAgICAgICAg
aWYgKCFFeHRlbnQpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGVuY29kZXIuZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGFycmF5UmVm
ZXJlbmNlLmRhdGEoKSksIGFycmF5UmVmZXJlbmNlLnNpemUoKSAqIHNpemVvZihUKSwgYWxpZ25v
ZihUKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBhcnJh
eVJlZmVyZW5jZS5kYXRhKCksIGFycmF5UmVmZXJlbmNlLnNpemUoKSB9KTsKICAgICB9CiAgICAg
c3RhdGljIHN0ZDo6b3B0aW9uYWw8QXJyYXlSZWZlcmVuY2VUeXBlPiBkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKICAgICB7CiAgICAgICAgIGlmICghRXh0ZW50KQogICAgICAgICAgICAgcmV0dXJu
IEFycmF5UmVmZXJlbmNlVHlwZSgpOwotICAgICAgICBjb25zdCB1aW50OF90KiBkYXRhID0gZGVj
b2Rlci5kZWNvZGVGaXhlZExlbmd0aFJlZmVyZW5jZShFeHRlbnQgKiBzaXplb2YoVCksIGFsaWdu
b2YoVCkpOworCisgICAgICAgIGNvbnN0IGF1dG8qIGRhdGEgPSBkZWNvZGVyLmRlY29kZUZpeGVk
TGVuZ3RoUmVmZXJlbmNlKEV4dGVudCAqIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CiAgICAgICAg
IGlmICghZGF0YSkKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIHJl
dHVybiBBcnJheVJlZmVyZW5jZVR5cGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4oZGF0YSks
IEV4dGVudCk7CkBAIC04Miw3ICs4Myw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBB
cmd1bWVudENvZGUKICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYXJy
YXlSZWZlcmVuY2Uuc2l6ZSgpKTsKICAgICAgICAgaWYgKCFhcnJheVJlZmVyZW5jZS5zaXplKCkp
CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGFycmF5UmVmZXJlbmNlLmRhdGEo
KSksIGFycmF5UmVmZXJlbmNlLnNpemUoKSAqIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CisgICAg
ICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBhcnJheVJlZmVyZW5jZS5k
YXRhKCksIGFycmF5UmVmZXJlbmNlLnNpemUoKSB9KTsKICAgICB9CiAgICAgc3RhdGljIHN0ZDo6
b3B0aW9uYWw8QXJyYXlSZWZlcmVuY2VUeXBlPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAg
ICB7CkBAIC05Niw3ICs5Nyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBBcmd1bWVu
dENvZGUKICAgICAgICAgaWYgKFVOTElLRUxZKGRhdGFTaXplLmhhc092ZXJmbG93ZWQoKSkpCiAg
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgICAgIGNvbnN0IHVpbnQ4X3Qq
IGRhdGEgPSBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoUmVmZXJlbmNlKGRhdGFTaXplLCBhbGln
bm9mKFQpKTsKKyAgICAgICAgY29uc3QgYXV0byogZGF0YSA9IGRlY29kZXIuZGVjb2RlRml4ZWRM
ZW5ndGhSZWZlcmVuY2UoZGF0YVNpemUsIGFsaWdub2YoVCkpOwogICAgICAgICBpZiAoIWRhdGEp
CiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAgICByZXR1cm4gQXJyYXlS
ZWZlcmVuY2VUeXBlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KGRhdGEpLCBzdGF0aWNfY2Fz
dDxzaXplX3Q+KHNpemUpKTsKQEAgLTQyMyw3ICs0MjQsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpCiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBt
aW5DYXBhY2l0eT4mIHZlY3RvcikKICAgICB7CiAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KHZlY3Rvci5zaXplKCkpOwotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVk
TGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih2ZWN0b3IuZGF0YSgp
KSwgdmVjdG9yLnNpemUoKSAqIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHZlY3RvciwgYWxpZ25vZihUKSk7CiAgICAgfQogICAg
IAogICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVj
b2RlciwgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFj
aXR5PiYgdmVjdG9yKQpAQCAtNDQ2LDcgKzQ0Nyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNp
emVfdCBpbmxpbmVDYXBhY2kKICAgICAgICAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVy
Zmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiB0ZW1wOwogICAgICAgICB0ZW1wLmdyb3coc2l6ZSk7
CiAKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPih0ZW1wLmRhdGEoKSksIHNpemUgKiBzaXplb2YoVCksIGFsaWdub2Yo
VCkpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHRlbXApKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHZlY3Rvci5zd2FwKHRlbXApOwpA
QCAtNDczLDcgKzQ3NCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2kKICAgICAgICAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1p
bkNhcGFjaXR5PiB2ZWN0b3I7CiAgICAgICAgIHZlY3Rvci5ncm93KHNpemUpOwogCi0gICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4odmVjdG9yLmRhdGEoKSksIHNpemUgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpKQorICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHZlY3RvcikpCiAgICAgICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgICAgIHJldHVybiB2ZWN0b3I7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9BcnJheVJlZmVyZW5jZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FycmF5UmVmZXJlbmNlLmgJKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FycmF5UmVmZXJlbmNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDggQEAKIAogbmFtZXNwYWNlIElQQyB7CiAKKy8v
IEZJWE1FOiBSZXBsYWNlIHdpdGggPHd0Zi9TcGFuLmg+CisKIGlubGluZSBjb25zdGV4cHIgc2l6
ZV90IGFycmF5UmVmZXJlbmNlRHluYW1pY0V4dGVudCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6
ZV90Pjo6bWF4KCk7CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgRXh0ZW50ID0gYXJy
YXlSZWZlcmVuY2VEeW5hbWljRXh0ZW50PgpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9J
UEMvRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
RGVjb2Rlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0v
SVBDL0RlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsMTMgKzIwNiwxMyBAQCBib29s
IERlY29kZXI6OmJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhCiAgICAgcmV0dXJuIGFsaWduZWRC
dWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKHJvdW5kVXBUb0FsaWdubWVudChtX2J1ZmZlclBv
cywgYWxpZ25tZW50KSwgbV9idWZmZXIsIG1fYnVmZmVyRW5kLCBzaXplKTsKIH0KIAotYm9vbCBE
ZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUs
IHNpemVfdCBhbGlnbm1lbnQpCitib29sIERlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YShT
cGFuPHN0ZDo6Ynl0ZT4gZGF0YSwgc2l6ZV90IGFsaWdubWVudCkKIHsKLSAgICBpZiAoIWFsaWdu
QnVmZmVyUG9zaXRpb24oYWxpZ25tZW50LCBzaXplKSkKKyAgICBpZiAoIWFsaWduQnVmZmVyUG9z
aXRpb24oYWxpZ25tZW50LCBkYXRhLnNpemUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIG1lbWNweShkYXRhLCBtX2J1ZmZlclBvcywgc2l6ZSk7Ci0gICAgbV9idWZmZXJQb3MgKz0g
c2l6ZTsKKyAgICBtZW1jcHkoZGF0YS5kYXRhKCksIG1fYnVmZmVyUG9zLCBkYXRhLnNpemUoKSk7
CisgICAgbV9idWZmZXJQb3MgKz0gZGF0YS5zaXplKCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNzksNyArNzksMTMgQEAgcHVibGljOgogICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGlz
VmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlclBvcyAhPSBudWxscHRyOyB9CiAgICAgdm9p
ZCBtYXJrSW52YWxpZCgpIHsgbV9idWZmZXJQb3MgPSBudWxscHRyOyB9CiAKLSAgICBXQVJOX1VO
VVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCogZGF0YSwgc2l6
ZV90LCBzaXplX3QgYWxpZ25tZW50KTsKKyAgICBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNv
ZGVGaXhlZExlbmd0aERhdGEoU3BhbjxzdGQ6OmJ5dGU+LCBzaXplX3QgYWxpZ25tZW50KTsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCBzaXplX3QgYWxpZ25tZW50ID0gYWxpZ25vZih0
eXBlbmFtZSBkZWNsdHlwZShTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pOjp2YWx1ZV90
eXBlKSkKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVGaXhlZExlbmd0aERhdGEoYXNXcml0
YWJsZUJ5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSksIGFsaWdubWVudCk7Cisg
ICAgfQogCiAgICAgLy8gVGhlIGRhdGEgaW4gdGhlIHJldHVybmVkIHBvaW50ZXIgaGVyZSB3aWxs
IG9ubHkgYmUgdmFsaWQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgRGVjb2RlciBvYmplY3QuCiAg
ICAgLy8gUmV0dXJucyBudWxscHRyIG9uIGZhaWx1cmUuCkluZGV4OiBTb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0lQQy9FbmNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9FbmNvZGVyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9JUEMvRW5jb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiwxMiArMjAyLDEy
IEBAIHVpbnQ4X3QqIEVuY29kZXI6Omdyb3coc2l6ZV90IGFsaWdubWVudCwKICAgICByZXR1cm4g
bV9idWZmZXIgKyBhbGlnbmVkU2l6ZTsKIH0KIAotdm9pZCBFbmNvZGVyOjplbmNvZGVGaXhlZExl
bmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1l
bnQpCit2b2lkIEVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6
Ynl0ZT4gZGF0YSwgc2l6ZV90IGFsaWdubWVudCkKIHsKLSAgICBBU1NFUlQoIShyZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4oZGF0YSkgJSBhbGlnbm1lbnQpKTsKKyAgICBBU1NFUlQoIShyZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZGF0YS5kYXRhKCkpICUgYWxpZ25tZW50KSk7CiAKLSAg
ICB1aW50OF90KiBidWZmZXIgPSBncm93KGFsaWdubWVudCwgc2l6ZSk7Ci0gICAgbWVtY3B5KGJ1
ZmZlciwgZGF0YSwgc2l6ZSk7CisgICAgYXV0byogYnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQsIGRh
dGEuc2l6ZSgpKTsKKyAgICBtZW1jcHkoYnVmZmVyLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkp
OwogfQogCiB2b2lkIEVuY29kZXI6OmFkZEF0dGFjaG1lbnQoQXR0YWNobWVudCYmIGF0dGFjaG1l
bnQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5oCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorI2lu
Y2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2Ug
SVBDIHsKQEAgLTYwLDcgKzYxLDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgd3JhcEZvclRlc3Rp
bmcoVW5pcXVlUmVmPEVuY29kZXI+JiYpOwogCi0gICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERh
dGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90LCBzaXplX3QgYWxpZ25tZW50KTsKKyAgICB2
b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSwgc2l6
ZV90IGFsaWdubWVudCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgZW5j
b2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCBzaXplX3QgYWxpZ25tZW50ID0gYWxpZ25vZih0
eXBlbmFtZSBkZWNsdHlwZShTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pOjp2YWx1ZV90
eXBlKSkKKyAgICB7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShhc0J5dGVzKFNwYW4g
eyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSksIGFsaWdubWVudCk7CisgICAgfQogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KICAgICBFbmNvZGVyJiBvcGVyYXRvcjw8KFQmJiB0KQpJbmRleDog
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU2hhcmVkQnVmZmVyQ29weS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU2hhcmVkQnVmZmVyQ29weS5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1NoYXJlZEJ1ZmZl
ckNvcHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHZvaWQgU2hhcmVkQnVm
ZmVyQ29weTo6ZW5jb2RlKEVuY29kZXImIGUKICAgICBpZiAoIWJ1ZmZlclNpemUpCiAgICAgICAg
IHJldHVybjsKICAgICBmb3IgKGF1dG8mIHNlZ21lbnQgOiAqbV9idWZmZXIpCi0gICAgICAgIGVu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHNlZ21lbnQuc2VnbWVudC0+ZGF0YSgpLCBzZWdt
ZW50LnNlZ21lbnQtPnNpemUoKSwgMSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKHNlZ21lbnQuc2VnbWVudC0+Ynl0ZXMoKSwgMSk7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8
U2hhcmVkQnVmZmVyQ29weT4gU2hhcmVkQnVmZmVyQ29weTo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uRW5j
b2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNv
bm5lY3Rpb25FbmNvZGVyLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25FbmNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiTWVz
c2FnZU5hbWVzLmgiCisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBJUEMgewpAQCAtNTMsMjIgKzU0LDI4IEBAIHB1YmxpYzoK
IAogICAgIH5TdHJlYW1Db25uZWN0aW9uRW5jb2RlcigpID0gZGVmYXVsdDsKIAotICAgIGJvb2wg
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBz
aXplX3QgYWxpZ25tZW50KQorICAgIGJvb2wgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48Y29u
c3Qgc3RkOjpieXRlPiBkYXRhLCBzaXplX3QgYWxpZ25tZW50KQogICAgIHsKICAgICAgICAgc2l6
ZV90IGJ1ZmZlclBvaW50ZXIgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KG1fYnVmZmVyICsgbV9lbmNvZGVkU2l6ZSkpOwogICAgICAgICBzaXplX3QgbmV3
QnVmZmVyUG9pbnRlciA9IHJvdW5kVXBUb011bHRpcGxlT2YoYWxpZ25tZW50LCBidWZmZXJQb2lu
dGVyKTsKICAgICAgICAgaWYgKG5ld0J1ZmZlclBvaW50ZXIgPCBidWZmZXJQb2ludGVyKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpbnRwdHJfdCBhbGlnbmVkU2l6ZSA9IG1f
ZW5jb2RlZFNpemUgKyAobmV3QnVmZmVyUG9pbnRlciAtIGJ1ZmZlclBvaW50ZXIpOwotICAgICAg
ICBpZiAoIXJlc2VydmUoYWxpZ25lZFNpemUsIHNpemUpKQorICAgICAgICBpZiAoIXJlc2VydmUo
YWxpZ25lZFNpemUsIGRhdGEuc2l6ZSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgdWludDhfdCogYnVmZmVyID0gbV9idWZmZXIgKyBhbGlnbmVkU2l6ZTsKLSAgICAgICAg
bWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7Ci0gICAgICAgIG1fZW5jb2RlZFNpemUgPSBhbGln
bmVkU2l6ZSArIHNpemU7CisgICAgICAgIGF1dG8qIGJ1ZmZlciA9IG1fYnVmZmVyICsgYWxpZ25l
ZFNpemU7CisgICAgICAgIG1lbWNweShidWZmZXIsIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7
CisgICAgICAgIG1fZW5jb2RlZFNpemUgPSBhbGlnbmVkU2l6ZSArIGRhdGEuc2l6ZSgpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAg
IHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCBzaXplX3QgYWxpZ25tZW50ID0g
YWxpZ25vZihUKSkKKyAgICB7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShhc0J5dGVz
KFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSksIGFsaWdubWVudCk7CisgICAgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBTdHJlYW1Db25uZWN0aW9uRW5jb2RlciYgb3Bl
cmF0b3I8PChUJiYgdCkKICAgICB7CiAgICAgICAgIEFyZ3VtZW50Q29kZXI8c3RkOjpyZW1vdmVf
Y29uc3RfdDxzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxUPj4sIHZvaWQ+OjplbmNvZGUoKnRoaXMs
IHN0ZDo6Zm9yd2FyZDxUPih0KSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3Jl
QXJndW1lbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dl
YkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
NCw3ICsxNDQsNyBAQCBzdGF0aWMgdm9pZCBlbmNvZGVTaGFyZWRCdWZmZXIoRW5jb2RlciYgCiAg
ICAgLy8gb3ZlciB0aGUgSVBDLiBDb25uZWN0aW9uVW5peC5jcHAgYWxyZWFkeSB1c2VzIHNoYXJl
ZCBtZW1vcnkgdG8gc2VuZCBhbnkgSVBDIG1lc3NhZ2UgdGhhdCBpcwogICAgIC8vIHRvbyBsYXJn
ZS4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg1NzEuCiAg
ICAgZm9yIChjb25zdCBhdXRvJiBlbGVtZW50IDogKmJ1ZmZlcikKLSAgICAgICAgZW5jb2Rlci5l
bmNvZGVGaXhlZExlbmd0aERhdGEoZWxlbWVudC5zZWdtZW50LT5kYXRhKCksIGVsZW1lbnQuc2Vn
bWVudC0+c2l6ZSgpLCAxKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEo
ZWxlbWVudC5zZWdtZW50LT5ieXRlcygpLCAxKTsKICNlbHNlCiAgICAgU2hhcmVkTWVtb3J5OjpI
YW5kbGUgaGFuZGxlOwogICAgIGF1dG8gc2hhcmVkTWVtb3J5QnVmZmVyID0gU2hhcmVkTWVtb3J5
Ojpjb3B5QnVmZmVyKCpidWZmZXIpOwpAQCAtMTgwLDcgKzE4MCw3IEBAIHN0YXRpYyBXQVJOX1VO
VVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVTaGEKIAogICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwog
ICAgIGRhdGEuZ3JvdyhidWZmZXJTaXplKTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgMSkpCisgICAgaWYgKCFkZWNvZGVy
LmRlY29kZUZpeGVkTGVuZ3RoRGF0YShkYXRhLCAxKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgYnVmZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShkYXRhKSk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQXV4aWxpYXJ5UHJvY2Vzc01hYy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQXV4aWxpYXJ5UHJvY2Vzc01hYy5tbQko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL0F1eGlsaWFyeVBy
b2Nlc3NNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMyMSw3ICszMjEsNyBAQCBzdGF0aWMgU3Ry
aW5nIHNhbmRib3hGaWxlUGF0aChjb25zdCBTdHJpCiAgICAgY3J5cHRvLT5hZGRCeXRlcyhoZWFk
ZXIuZGF0YSgpLCBoZWFkZXIubGVuZ3RoKCkpOwogICAgIGF1dG8gaGFzaCA9IGNyeXB0by0+Y29t
cHV0ZUhhc2goKTsKIAotICAgIHJldHVybiBtYWtlU3RyaW5nKGRpcmVjdG9yeVBhdGgsICIvQ29t
cGlsZWRTYW5kYm94KyIsIGJhc2U2NFVSTEVuY29kZWQoaGFzaC5kYXRhKCksIGhhc2guc2l6ZSgp
KSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoZGlyZWN0b3J5UGF0aCwgIi9Db21waWxlZFNhbmRi
b3grIiwgYmFzZTY0VVJMRW5jb2RlZChoYXNoKSk7CiB9CiAKIHN0YXRpYyBib29sIGVuc3VyZVNh
bmRib3hDYWNoZURpcmVjdG9yeShjb25zdCBTYW5kYm94SW5mbyYgaW5mbykKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvU2hhcmVkL3dpbi9XZWJDb3JlQXJndW1lbnRDb2RlcnNXaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9XZWJDb3JlQXJndW1lbnRDb2RlcnNXaW4u
Y3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTIgKzUxLDEyIEBA
IHN0ZDo6b3B0aW9uYWw8Rm9udEF0dHJpYnV0ZXM+IEFyZ3VtZW50Q28KIHRlbXBsYXRlPD4gc3Ry
dWN0IEFyZ3VtZW50Q29kZXI8TE9HRk9OVD4gewogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyLCBjb25zdCBMT0dGT05UJiBsb2dGb250KQogICAgIHsKLSAgICAgICAgZW5j
b2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oJmxvZ0ZvbnQpLCBzaXplb2YgbG9nRm9udCwgMSk7CisgICAgICAgIGVuY29kZXIuZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmbG9nRm9udCwgMSB9LCAxKTsKICAgICB9CiAgICAgc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8TE9HRk9OVD4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAg
ewogICAgICAgICBMT0dGT05UIGxvZ0ZvbnQ7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVG
aXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJmxvZ0ZvbnQpLCBzaXpl
b2YobG9nRm9udCksIDEpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhE
YXRhKFNwYW4geyAmbG9nRm9udCwgMSB9LCAxKSkKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CiAgICAgICAgIHJldHVybiBsb2dGb250OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNw
cAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNv
bnRlbnRSdWxlTGlzdFN0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDE4ICsxMzEsMjAg
QEAgc3RhdGljIFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhIGVuY29kZQogICAgIGVuY29kZXIg
PDwgbWV0YURhdGEuY29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNvZGVTaXplOwogICAgIGVuY29kZXIg
PDwgbWV0YURhdGEuY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluOwogCi0gICAgQVNTRVJUKGVu
Y29kZXIuYnVmZmVyU2l6ZSgpID09IENvbnRlbnRSdWxlTGlzdEZpbGVIZWFkZXJTaXplKTsKLSAg
ICByZXR1cm4gV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGEoZW5jb2Rlci5idWZmZXIoKSwgZW5j
b2Rlci5idWZmZXJTaXplKCkpOworICAgIEFTU0VSVChlbmNvZGVyLmJ1ZmZlcigpLnNpemUoKSA9
PSBDb250ZW50UnVsZUxpc3RGaWxlSGVhZGVyU2l6ZSk7CisgICAgcmV0dXJuIFdlYktpdDo6TmV0
d29ya0NhY2hlOjpEYXRhIHsgZW5jb2Rlci5idWZmZXIoKSB9OwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiB2b2lkIGdldERhdGEoY29uc3QgVCYsIGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3Qg
dWludDhfdCosIHNpemVfdCk+Jik7Ci10ZW1wbGF0ZTw+IHZvaWQgZ2V0RGF0YShjb25zdCBXZWJL
aXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YSYgZGF0YSwgY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1
aW50OF90Kiwgc2l6ZV90KT4mIGZ1bmN0aW9uKQordGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBn
ZXREYXRhKGNvbnN0IFQmLCBjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRl
Pik+Jik7CisKK3RlbXBsYXRlPD4gdm9pZCBnZXREYXRhKGNvbnN0IFdlYktpdDo6TmV0d29ya0Nh
Y2hlOjpEYXRhJiBkYXRhLCBjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRl
Pik+JiBmdW5jdGlvbikKIHsKICAgICBkYXRhLmFwcGx5KGZ1bmN0aW9uKTsKIH0KLXRlbXBsYXRl
PD4gdm9pZCBnZXREYXRhKGNvbnN0IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlciYgZGF0YSwgY29uc3Qg
RnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIGZ1bmN0aW9uKQorCit0ZW1w
bGF0ZTw+IHZvaWQgZ2V0RGF0YShjb25zdCBXZWJDb3JlOjpTaGFyZWRCdWZmZXImIGRhdGEsIGNv
bnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mIGZ1bmN0aW9uKQogewot
ICAgIGZ1bmN0aW9uKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgZnVuY3Rpb24oZGF0
YS5ieXRlcygpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTE1MCwxMyArMTUyLDEz
IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPENvbnRlbnRSdWxlTGlzdE1ldGEKIHsKICAgICBib29s
IHN1Y2Nlc3MgPSBmYWxzZTsKICAgICBDb250ZW50UnVsZUxpc3RNZXRhRGF0YSBtZXRhRGF0YTsK
LSAgICBnZXREYXRhKGZpbGVEYXRhLCBbJm1ldGFEYXRhLCAmc3VjY2VzcywgJmZpbGVEYXRhXShj
b25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeworICAgIGdldERhdGEoZmlsZURhdGEs
IFsmbWV0YURhdGEsICZzdWNjZXNzLCAmZmlsZURhdGFdKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBk
YXRhKSB7CiAgICAgICAgIC8vIFRoZSBmaWxlIGRhdGEgc2hvdWxkIGJlIG1hcHBlZCBpbnRvIG9u
ZSBjb250aW51b3VzIG1lbW9yeSBzZWdtZW50IHNvIHRoZSBzaXplCiAgICAgICAgIC8vIHBhc3Nl
ZCB0byB0aGUgYXBwbGllciBzaG91bGQgYWx3YXlzIGVxdWFsIHRoZSBkYXRhIHNpemUuCi0gICAg
ICAgIGlmIChzaXplICE9IGZpbGVEYXRhLnNpemUoKSkKKyAgICAgICAgaWYgKGRhdGEuc2l6ZSgp
ICE9IGZpbGVEYXRhLnNpemUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAg
ICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YSwgc2l6ZSk7CisgICAgICAg
IFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlciB7IGRhdGEgfTsKICAgICAgICAgCiAg
ICAgICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IHZlcnNpb247CiAgICAgICAgIGRlY29kZXIg
Pj4gdmVyc2lvbjsKQEAgLTIyOCw4ICsyMzAsOCBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxNYXBw
ZWREYXRhPiBvcGVuQW5kCiBzdGF0aWMgYm9vbCB3cml0ZURhdGFUb0ZpbGUoY29uc3QgV2ViS2l0
OjpOZXR3b3JrQ2FjaGU6OkRhdGEmIGZpbGVEYXRhLCBQbGF0Zm9ybUZpbGVIYW5kbGUgZmQpCiB7
CiAgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKLSAgICBmaWxlRGF0YS5hcHBseShbZmQsICZzdWNj
ZXNzXShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgewotICAgICAgICBpZiAod3Jp
dGVUb0ZpbGUoZmQsIGRhdGEsIHNpemUpID09IC0xKSB7CisgICAgZmlsZURhdGEuYXBwbHkoW2Zk
LCAmc3VjY2Vzc10oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpIHsKKyAgICAgICAgaWYgKHdy
aXRlVG9GaWxlKGZkLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpID09IC0xKSB7CiAgICAgICAg
ICAgICBzdWNjZXNzID0gZmFsc2U7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50
aWNhdGlvblBhbmVsLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25Q
YW5lbC5tbQkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBAQAogI2ltcG9ydCA8cGFsL2Ny
eXB0by9DcnlwdG9EaWdlc3QuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogI2ltcG9ydCA8
d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1NwYW5Db2NvYS5oPgogI2ltcG9y
dCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4K
IApAQCAtNzAsNyArNzEsNyBAQCBzdGF0aWMgUmV0YWluUHRyPE5TRGF0YT4gcHJvZHVjZUNsaWVu
dERhCiAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpAIndlYmF1dGhuLmdldCIgZm9yS2V5
OkAidHlwZSJdOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgW2RpY3Rpb25hcnkgc2V0T2Jq
ZWN0OmJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNoYWxsZW5nZS5ieXRlcywgY2hhbGxlbmdlLmxl
bmd0aCkgZm9yS2V5OkAiY2hhbGxlbmdlIl07CisgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0OmJh
c2U2NFVSTEVuY29kZVRvU3RyaW5nKGFzQnl0ZXMoY2hhbGxlbmdlKSkgZm9yS2V5OkAiY2hhbGxl
bmdlIl07CiAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0Om9yaWdpbiBmb3JLZXk6QCJvcmlnaW4i
XTsKIAogICAgIHJldHVybiBbTlNKU09OU2VyaWFsaXphdGlvbiBkYXRhV2l0aEpTT05PYmplY3Q6
ZGljdGlvbmFyeS5nZXQoKSBvcHRpb25zOk5TSlNPTldyaXRpbmdTb3J0ZWRLZXlzIGVycm9yOm5p
bF07CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2Nv
YS9Mb2NhbEF1dGhlbnRpY2F0b3IubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tCShyZXZp
c2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlv
bi9Db2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3IubW0JKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1
LDcgQEAgc3RhdGljIGlubGluZSBIYXNoU2V0PFN0cmluZz4gcHJvZHVjZUhhcwogICAgIEhhc2hT
ZXQ8U3RyaW5nPiByZXN1bHQ7CiAgICAgZm9yIChhdXRvJiBjcmVkZW50aWFsRGVzY3JpcHRvciA6
IGNyZWRlbnRpYWxEZXNjcmlwdG9ycykgewogICAgICAgICBpZiAoZW1wdHlUcmFuc3BvcnRzT3JD
b250YWluKGNyZWRlbnRpYWxEZXNjcmlwdG9yLnRyYW5zcG9ydHMsIEF1dGhlbnRpY2F0b3JUcmFu
c3BvcnQ6OkludGVybmFsKSAmJiBjcmVkZW50aWFsRGVzY3JpcHRvci50eXBlID09IFB1YmxpY0tl
eUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkgJiYgY3JlZGVudGlhbERlc2NyaXB0b3IuaWRWZWN0
b3Iuc2l6ZSgpID09IGNyZWRlbnRpYWxJZExlbmd0aCkKLSAgICAgICAgICAgIHJlc3VsdC5hZGQo
YmFzZTY0RW5jb2RlVG9TdHJpbmcoY3JlZGVudGlhbERlc2NyaXB0b3IuaWRWZWN0b3IuZGF0YSgp
LCBjcmVkZW50aWFsRGVzY3JpcHRvci5pZFZlY3Rvci5zaXplKCkpKTsKKyAgICAgICAgICAgIHJl
c3VsdC5hZGQoYmFzZTY0RW5jb2RlVG9TdHJpbmcoY3JlZGVudGlhbERlc2NyaXB0b3IuaWRWZWN0
b3IpKTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTIzMyw3ICsyMzMsNyBAQCB2
b2lkIExvY2FsQXV0aGVudGljYXRvcjo6bWFrZUNyZWRlbnRpYWwoCiAgICAgICAgIGlmIChub3RG
b3VuZCAhPSBtX2V4aXN0aW5nQ3JlZGVudGlhbHMuZmluZE1hdGNoaW5nKFsmZXhjbHVkZUNyZWRl
bnRpYWxJZHNdIChhdXRvJiBjcmVkZW50aWFsKSB7CiAgICAgICAgICAgICBhdXRvKiByYXdJZCA9
IGNyZWRlbnRpYWwtPnJhd0lkKCk7CiAgICAgICAgICAgICBBU1NFUlQocmF3SWQpOwotICAgICAg
ICAgICAgcmV0dXJuIGV4Y2x1ZGVDcmVkZW50aWFsSWRzLmNvbnRhaW5zKGJhc2U2NEVuY29kZVRv
U3RyaW5nKHJhd0lkLT5kYXRhKCksIHJhd0lkLT5ieXRlTGVuZ3RoKCkpKTsKKyAgICAgICAgICAg
IHJldHVybiBleGNsdWRlQ3JlZGVudGlhbElkcy5jb250YWlucyhiYXNlNjRFbmNvZGVUb1N0cmlu
ZyhyYXdJZC0+Ynl0ZXMoKSkpOwogICAgICAgICB9KSkgewogICAgICAgICAgICAgcmVjZWl2ZUV4
Y2VwdGlvbih7IE5vdEFsbG93ZWRFcnJvciwgIkF0IGxlYXN0IG9uZSBjcmVkZW50aWFsIG1hdGNo
ZXMgYW4gZW50cnkgb2YgdGhlIGV4Y2x1ZGVDcmVkZW50aWFscyBsaXN0IGluIHRoZSBwbGF0Zm9y
bSBhdHRhY2hlZCBhdXRoZW50aWNhdG9yLiJfcyB9LCBXZWJBdXRoZW50aWNhdGlvblN0YXR1czo6
TEFFeGNsdWRlQ3JlZGVudGlhbHNNYXRjaGVkKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTUx
MCw3ICs1MTAsNyBAQCB2b2lkIExvY2FsQXV0aGVudGljYXRvcjo6Z2V0QXNzZXJ0aW9uKCkKICAg
ICAgICAgfQogCiAgICAgICAgIGF1dG8qIHJhd0lkID0gY3JlZGVudGlhbC0+cmF3SWQoKTsKLSAg
ICAgICAgaWYgKGFsbG93Q3JlZGVudGlhbElkcy5jb250YWlucyhiYXNlNjRFbmNvZGVUb1N0cmlu
ZyhyYXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgpKSkpCisgICAgICAgIGlmIChhbGxv
d0NyZWRlbnRpYWxJZHMuY29udGFpbnMoYmFzZTY0RW5jb2RlVG9TdHJpbmcocmF3SWQtPmJ5dGVz
KCkpKSkKICAgICAgICAgICAgIGFzc2VydGlvblJlc3BvbnNlcy51bmNoZWNrZWRBcHBlbmQoY3Jl
ZGVudGlhbC5jb3B5UmVmKCkpOwogICAgIH0KICAgICBpZiAoYXNzZXJ0aW9uUmVzcG9uc2VzLmlz
RW1wdHkoKSkgewpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRp
b24vTW9jay9Nb2NrTG9jYWxDb25uZWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0xvY2FsQ29ubmVjdGlvbi5t
bQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVu
dGljYXRpb24vTW9jay9Nb2NrTG9jYWxDb25uZWN0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjIsNyArMTYyLDcgQEAgdm9pZCBNb2NrTG9jYWxDb25uZWN0aW9uOjpmaWx0ZXJSZXNwb25zZQog
ICAgIGZvciAoOyBpdHIgIT0gcmVzcG9uc2VzLmVuZCgpOyArK2l0cikgewogICAgICAgICBhdXRv
KiByYXdJZCA9IGl0ci0+Z2V0KCkucmF3SWQoKTsKICAgICAgICAgQVNTRVJUKHJhd0lkKTsKLSAg
ICAgICAgYXV0byByYXdJZEJhc2U2NCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKHJhd0lkLT5kYXRh
KCksIHJhd0lkLT5ieXRlTGVuZ3RoKCkpOworICAgICAgICBhdXRvIHJhd0lkQmFzZTY0ID0gYmFz
ZTY0RW5jb2RlVG9TdHJpbmcocmF3SWQtPmJ5dGVzKCkpOwogICAgICAgICBpZiAocmF3SWRCYXNl
NjQgPT0gcHJlZmVycmVkQ3JlZGVudGlhbElkQmFzZTY0KQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL0xlZ2FjeVNlc3Npb25TdGF0
ZUNvZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL0xl
Z2FjeVNlc3Npb25TdGF0ZUNvZGluZy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL21hYy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjksNyArMTI5LDcgQEAgcHVibGljOgogICAgICAgICAqdGhpcyA8PCBsZW5n
dGg7CiAKICAgICAgICAgKnRoaXMgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGxlbmd0aCAqIHNp
emVvZihVQ2hhcikpOwotICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50OF90Kj4oU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0
ZXJzKCkuZ2V0KCkpLCBsZW5ndGggKiBzaXplb2YoVUNoYXIpLCBhbGlnbm9mKFVDaGFyKSk7Cisg
ICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgU3RyaW5nVmlldyh2YWx1ZSkudXBj
b252ZXJ0ZWRDaGFyYWN0ZXJzKCkuZ2V0KCksIGxlbmd0aCB9KTsKIAogICAgICAgICByZXR1cm4g
KnRoaXM7CiAgICAgfQpAQCAtMTM3LDcgKzEzNyw3IEBAIHB1YmxpYzoKICAgICBIaXN0b3J5RW50
cnlEYXRhRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhbHVlKQog
ICAgIHsKICAgICAgICAgKnRoaXMgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZhbHVlLnNpemUo
KSk7Ci0gICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YSh2YWx1ZS5kYXRhKCksIHZhbHVlLnNp
emUoKSwgMSk7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YSh2YWx1ZSwgMSk7CiAKICAg
ICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KQEAgLTE0NSw3ICsxNDUsNyBAQCBwdWJsaWM6CiAg
ICAgSGlzdG9yeUVudHJ5RGF0YUVuY29kZXImIG9wZXJhdG9yPDwoY29uc3QgVmVjdG9yPGNoYXI+
JiB2YWx1ZSkKICAgICB7CiAgICAgICAgICp0aGlzIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2
YWx1ZS5zaXplKCkpOwotICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50OF90Kj4odmFsdWUuZGF0YSgpKSwgdmFsdWUuc2l6ZSgpLCAxKTsKKyAg
ICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHZhbHVlLCAxKTsKIAogICAgICAgICByZXR1cm4g
KnRoaXM7CiAgICAgfQpAQCAtMjA2LDE3ICsyMDYsMjMgQEAgcHJpdmF0ZToKICAgICB7CiAgICAg
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19hcml0aG1ldGljPFR5cGU+Ojp2YWx1ZSwgIiIpOwog
Ci0gICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3Qq
PigmdmFsdWUpLCBzaXplb2YodmFsdWUpLCBzaXplb2YodmFsdWUpKTsKKyAgICAgICAgZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmdmFsdWUsIDEgfSwgc2l6ZW9mKHZhbHVlKSk7CiAgICAg
ICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKLSAgICB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0
YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgYWxpZ25tZW50KQor
ICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRh
LCB1bnNpZ25lZCBhbGlnbm1lbnQpCiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChkYXRh
IHx8ICFzaXplKTsKLSAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KGRhdGEpICUgYWxpZ25tZW50KSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRhdGEuZGF0YSgp
IHx8ICFkYXRhLnNpemUoKSk7CisgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90PihkYXRhLmRhdGEoKSkgJSBhbGlnbm1lbnQpKTsKIAotICAgICAgICB1aW50OF90KiBi
dWZmZXIgPSBncm93KGFsaWdubWVudCwgc2l6ZSk7Ci0gICAgICAgIG1lbWNweShidWZmZXIsIGRh
dGEsIHNpemUpOworICAgICAgICBhdXRvKiBidWZmZXIgPSBncm93KGFsaWdubWVudCwgZGF0YS5z
aXplKCkpOworICAgICAgICBtZW1jcHkoYnVmZmVyLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkp
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBlbmNvZGVGaXhl
ZExlbmd0aERhdGEoVCYmIGRhdGEsIHNpemVfdCBhbGlnbm1lbnQgPSBhbGlnbm9mKFQpKQorICAg
IHsKKyAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGFzQnl0ZXMoU3BhbiB7IHN0ZDo6Zm9y
d2FyZDxUPihkYXRhKSB9KSwgYWxpZ25tZW50KTsKICAgICB9CiAKICAgICB1aW50OF90KiBncm93
KHVuc2lnbmVkIGFsaWdubWVudCwgc2l6ZV90IHNpemUpCkBAIC02MDEsNyArNjA3LDcgQEAgcHVi
bGljOgogCiAgICAgICAgIFVDaGFyKiBidWZmZXI7CiAgICAgICAgIGF1dG8gc3RyaW5nID0gU3Ry
aW5nOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICAgICAgZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1ZmZlciksIGxlbmd0
aCAqIHNpemVvZihVQ2hhciksIGFsaWdub2YoVUNoYXIpKTsKKyAgICAgICAgZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKFNwYW4geyBidWZmZXIsIGxlbmd0aCB9LCBhbGlnbm9mKFVDaGFyKSk7CiAKICAg
ICAgICAgdmFsdWUgPSBzdHJpbmc7CiAgICAgICAgIHJldHVybiAqdGhpczsKQEAgLTczNywxNyAr
NzQzLDIzIEBAIHByaXZhdGU6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19hcml0aG1l
dGljPFR5cGU+Ojp2YWx1ZSwgIiIpOwogICAgICAgICB2YWx1ZSA9IFR5cGUoKTsKIAotICAgICAg
ICBkZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnZhbHVl
KSwgc2l6ZW9mKHZhbHVlKSwgc2l6ZW9mKHZhbHVlKSk7CisgICAgICAgIGRlY29kZUZpeGVkTGVu
Z3RoRGF0YShTcGFuIHsgJnZhbHVlLCAxIH0sIHNpemVvZih2YWx1ZSkpOwogICAgICAgICByZXR1
cm4gKnRoaXM7CiAgICAgfQogCi0gICAgdm9pZCBkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhf
dCogZGF0YSwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGFsaWdubWVudCkKKyAgICB2b2lkIGRlY29k
ZUZpeGVkTGVuZ3RoRGF0YShTcGFuPHN0ZDo6Ynl0ZT4gZGF0YSwgdW5zaWduZWQgYWxpZ25tZW50
KQogICAgIHsKLSAgICAgICAgaWYgKCFhbGlnbkJ1ZmZlclBvc2l0aW9uKGFsaWdubWVudCwgc2l6
ZSkpCisgICAgICAgIGlmICghYWxpZ25CdWZmZXJQb3NpdGlvbihhbGlnbm1lbnQsIGRhdGEuc2l6
ZSgpKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBtZW1jcHkoZGF0YSwgbV9idWZm
ZXIsIHNpemUpOwotICAgICAgICBtX2J1ZmZlciArPSBzaXplOworICAgICAgICBtZW1jcHkoZGF0
YS5kYXRhKCksIG1fYnVmZmVyLCBkYXRhLnNpemUoKSk7CisgICAgICAgIG1fYnVmZmVyICs9IGRh
dGEuc2l6ZSgpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBk
ZWNvZGVGaXhlZExlbmd0aERhdGEoVCYmIGRhdGEsIHNpemVfdCBhbGlnbm1lbnQpCisgICAgewor
ICAgICAgICBkZWNvZGVGaXhlZExlbmd0aERhdGEoYXNXcml0YWJsZUJ5dGVzKFNwYW4geyBzdGQ6
OmZvcndhcmQ8VD4oZGF0YSkgfSksIGFsaWdubWVudCk7CiAgICAgfQogCiAgICAgYm9vbCBhbGln
bkJ1ZmZlclBvc2l0aW9uKHVuc2lnbmVkIGFsaWdubWVudCwgc2l6ZV90IHNpemUpCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRDaGFubmVsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRDaGFu
bmVsLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05l
dHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDggKzU5LDgg
QEAgTmV0d29ya1NlbmRRdWV1ZSBXZWJTb2NrZXRDaGFubmVsOjpjcmVhdAogICAgICAgICBjaGFu
bmVsLm5vdGlmeVNlbmRGcmFtZShXZWJTb2NrZXRGcmFtZTo6T3BDb2RlOjpPcENvZGVUZXh0LCB1
dGY4U3RyaW5nLmRhdGFBc1VJbnQ4UHRyKCksIHV0ZjhTdHJpbmcubGVuZ3RoKCkpOwogICAgICAg
ICBjaGFubmVsLnNlbmRNZXNzYWdlKE1lc3NhZ2VzOjpOZXR3b3JrU29ja2V0Q2hhbm5lbDo6U2Vu
ZFN0cmluZyB7IElQQzo6RGF0YVJlZmVyZW5jZSB7IHV0ZjhTdHJpbmcuZGF0YUFzVUludDhQdHIo
KSwgdXRmOFN0cmluZy5sZW5ndGgoKSB9IH0sIHV0ZjhTdHJpbmcubGVuZ3RoKCkpOwogICAgIH0s
IFsmY2hhbm5lbF0oYXV0byYgc3BhbikgewotICAgICAgICBjaGFubmVsLm5vdGlmeVNlbmRGcmFt
ZShXZWJTb2NrZXRGcmFtZTo6T3BDb2RlOjpPcENvZGVCaW5hcnksIHNwYW4uZGF0YSgpLCBzcGFu
LnNpemUoKSk7Ci0gICAgICAgIGNoYW5uZWwuc2VuZE1lc3NhZ2UoTWVzc2FnZXM6Ok5ldHdvcmtT
b2NrZXRDaGFubmVsOjpTZW5kRGF0YSB7IElQQzo6RGF0YVJlZmVyZW5jZSB7IHNwYW4uZGF0YSgp
LCBzcGFuLnNpemUoKSB9IH0sIHNwYW4uc2l6ZSgpKTsKKyAgICAgICAgY2hhbm5lbC5ub3RpZnlT
ZW5kRnJhbWUoV2ViU29ja2V0RnJhbWU6Ok9wQ29kZTo6T3BDb2RlQmluYXJ5LCByZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzcGFuLmRhdGEoKSksIHNwYW4uc2l6ZSgpKTsKKyAgICAg
ICAgY2hhbm5lbC5zZW5kTWVzc2FnZShNZXNzYWdlczo6TmV0d29ya1NvY2tldENoYW5uZWw6OlNl
bmREYXRhIHsgSVBDOjpEYXRhUmVmZXJlbmNlIHsgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90Kj4oc3Bhbi5kYXRhKCkpLCBzcGFuLnNpemUoKSB9IH0sIHNwYW4uc2l6ZSgpKTsKICAgICB9
LCBbJmNoYW5uZWxdKEV4Y2VwdGlvbkNvZGUgZXhjZXB0aW9uQ29kZSkgewogICAgICAgICBhdXRv
IGNvZGUgPSBzdGF0aWNfY2FzdDxpbnQ+KGV4Y2VwdGlvbkNvZGUpOwogICAgICAgICBjaGFubmVs
LmZhaWwobWFrZVN0cmluZygiRmFpbGVkIHRvIGxvYWQgQmxvYjogZXhjZXB0aW9uIGNvZGUgPSAi
LCBjb2RlKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0
aW5nQVBJLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9JUENUZXN0aW5nQVBJLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5
MSw3ICs2OTEsNyBAQCBzdGF0aWMgYm9vbCBlbmNvZGVUeXBlZEFycmF5KElQQzo6RW5jb2RlCiAg
ICAgaWYgKCFkYXRhLmJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZW5jb2Rl
ci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4o
ZGF0YS5idWZmZXIpLCBkYXRhLmxlbmd0aCwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YS5i
dWZmZXIpLCBkYXRhLmxlbmd0aCB9LCAxKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDog
VG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24g
Mjc4ODA5KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcg
QEAKKzIwMjEtMDYtMTEgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAg
IEFkb3B0IFNwYW4gaW4gbW9yZSBwbGFjZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIyNjg4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtXSVBdCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jYWly
by9QaXhlbER1bXBTdXBwb3J0Q2Fpcm8uY3BwOgorICAgICAgICAoY29tcHV0ZVNIQTFIYXNoU3Ry
aW5nRm9yQml0bWFwQ29udGV4dCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxE
dW1wU3VwcG9ydENHLmNwcDoKKyAgICAgICAgKGNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckJpdG1h
cENvbnRleHQpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0Jsb29tRmlsdGVy
LmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmdlbmVyYXRlUmFuZG9tRGlnZXN0cyk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHA6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpURVNUX0YpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvY29jb2Ev
SFRUUFNlcnZlci5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkNvbm5lY3Rpb246OndlYlNv
Y2tldEhhbmRzaGFrZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9jYWlyby9UZXN0SW52
b2NhdGlvbkNhaXJvLmNwcDoKKyAgICAgICAgKFdUUjo6Y29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9y
Q2Fpcm9TdXJmYWNlKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0
aW9uQ0cuY3BwOgorICAgICAgICAoV1RSOjpjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JDb250ZXh0
KToKKwogMjAyMS0wNi0xMSAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNv
bT4KIAogICAgICAgICBbV2luXVtEdW1wUmVuZGVyVHJlZV0gLS1uby10aW1lb3V0IHN3aXRjaCBk
b2Vzbid0IHdvcmsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NhaXJvL1BpeGVsRHVtcFN1
cHBvcnRDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2Fpcm8v
UGl4ZWxEdW1wU3VwcG9ydENhaXJvLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2Fpcm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzUsNyArNzUsNyBAQCB2b2lkIGNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckJpdG1hcENv
bnRlCiAgICAgU0hBMSBzaGExOwogICAgIHVuc2lnbmVkIGNoYXIqIGJpdG1hcERhdGEgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJm
YWNlKSk7CiAgICAgZm9yICh1bnNpZ25lZCByb3cgPSAwOyByb3cgPCBwaXhlbHNIaWdoOyByb3cr
KykgewotICAgICAgICBzaGExLmFkZEJ5dGVzKGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlKTsK
KyAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgYml0bWFwRGF0YSwgNCAqIHBpeGVsc1dpZGUg
fSk7CiAgICAgICAgIGJpdG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7CiAgICAgfQogICAgIFNIQTE6
OkRpZ2VzdCBoYXNoOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1wU3Vw
cG9ydENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jZy9QaXhlbER1
bXBTdXBwb3J0Q0cuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9EdW1wUmVuZGVyVHJl
ZS9jZy9QaXhlbER1bXBTdXBwb3J0Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxNCArODgs
MTQgQEAgdm9pZCBjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JCaXRtYXBDb250ZQogICAgICAgICAg
ICAgdWludDMyX3QgYnVmZmVyW3BpeGVsc1dpZGVdOwogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBwaXhlbHNXaWRlOyBjb2x1bW4rKykKICAgICAgICAgICAg
ICAgICBidWZmZXJbY29sdW1uXSA9IE9TUmVhZExpdHRsZUludDMyKGJpdG1hcERhdGEsIDQgKiBj
b2x1bW4pOwotICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihidWZmZXIpLCA0ICogcGl4ZWxzV2lkZSk7CisgICAgICAgICAgICBzaGExLmFk
ZEJ5dGVzKFNwYW4geyBidWZmZXIsIHBpeGVsc1dpZGUgfSk7CiAgICAgICAgICAgICBiaXRtYXBE
YXRhICs9IGJ5dGVzUGVyUm93OwogICAgICAgICB9CiAgICAgfSBlbHNlCiAjZW5kaWYKICAgICB7
CiAgICAgICAgIGZvciAodW5zaWduZWQgcm93ID0gMDsgcm93IDwgcGl4ZWxzSGlnaDsgcm93Kysp
IHsKLSAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoYml0bWFwRGF0YSwgNCAqIHBpeGVsc1dpZGUp
OworICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgYml0bWFwRGF0YSwgNCAqIHBpeGVs
c1dpZGUgfSk7CiAgICAgICAgICAgICBiaXRtYXBEYXRhICs9IGJ5dGVzUGVyUm93OwogICAgICAg
ICB9CiAgICAgfQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQmxvb21GaWx0
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0Jsb29t
RmlsdGVyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvQmxvb21GaWx0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHN0
YXRpYyBWZWN0b3I8U0hBMTo6RGlnZXN0PiBnZW5lcmF0ZVJhbmQKICAgICBTSEExIHNoYTE7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGhhc2hDb3VudDsgKytpKSB7CiAgICAgICAgIGRv
dWJsZSByYW5kb20gPSByYW5kb21OdW1iZXIoKTsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhyZWlu
dGVycHJldF9jYXN0PHVpbnQ4X3QqPigmcmFuZG9tKSwgc2l6ZW9mKGRvdWJsZSkpOworICAgICAg
ICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmcmFuZG9tLCAxIH0pOwogICAgICAgICBTSEExOjpEaWdl
c3QgZGlnZXN0OwogICAgICAgICBzaGExLmNvbXB1dGVIYXNoKGRpZ2VzdCk7CiAgICAgICAgIGhh
c2hlcy5hcHBlbmQoZGlnZXN0KTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L0ZpbGVTeXN0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL0ZpbGVTeXN0ZW0uY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDggKzEz
Myw4IEBAIFRFU1RfRihGaWxlU3lzdGVtVGVzdCwgTWFwcGluZ0V4aXN0aW5nRmkKICAgICBGaWxl
U3lzdGVtOjpNYXBwZWRGaWxlRGF0YSBtYXBwZWRGaWxlRGF0YSh0ZW1wRmlsZVBhdGgoKSwgRmls
ZVN5c3RlbTo6TWFwcGVkRmlsZU1vZGU6OlNoYXJlZCwgc3VjY2Vzcyk7CiAgICAgRVhQRUNUX1RS
VUUoc3VjY2Vzcyk7CiAgICAgRVhQRUNUX1RSVUUoISFtYXBwZWRGaWxlRGF0YSk7Ci0gICAgRVhQ
RUNUX1RSVUUobWFwcGVkRmlsZURhdGEuc2l6ZSgpID09IHN0cmxlbihGaWxlU3lzdGVtVGVzdERh
dGEpKTsKLSAgICBFWFBFQ1RfVFJVRShzdHJuc3RyKEZpbGVTeXN0ZW1UZXN0RGF0YSwgc3RhdGlj
X2Nhc3Q8Y29uc3QgY2hhcio+KG1hcHBlZEZpbGVEYXRhLmRhdGEoKSksIG1hcHBlZEZpbGVEYXRh
LnNpemUoKSkpOworICAgIEVYUEVDVF9UUlVFKG1hcHBlZEZpbGVEYXRhLmRhdGEoKS5zaXplKCkg
PT0gc3RybGVuKEZpbGVTeXN0ZW1UZXN0RGF0YSkpOworICAgIEVYUEVDVF9UUlVFKHN0cm5zdHIo
RmlsZVN5c3RlbVRlc3REYXRhLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihtYXBwZWRG
aWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgbWFwcGVkRmlsZURhdGEuZGF0YSgpLnNpemUoKSkpOwog
fQogCiBURVNUX0YoRmlsZVN5c3RlbVRlc3QsIE1hcHBpbmdFeGlzdGluZ0VtcHR5RmlsZSkKSW5k
ZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1NIQTEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1NIQTEuY3BwCShyZXZpc2lvbiAyNzg4MDkp
CisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TSEExLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzgsNyArMzgsNyBAQCBzdGF0aWMgdm9pZCBleHBlY3RTSEExKENTdHJpbmcgaW5wdXQs
IGluCiB7CiAgICAgU0hBMSBzaGExOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVwZWF0OyAr
K2kpCi0gICAgICAgIHNoYTEuYWRkQnl0ZXMoaW5wdXQpOworICAgICAgICBzaGExLmFkZEJ5dGVz
KGlucHV0LmJ5dGVzKCkpOwogICAgIENTdHJpbmcgYWN0dWFsID0gc2hhMS5jb21wdXRlSGV4RGln
ZXN0KCk7CiAKICAgICBBU1NFUlRfRVEoZXhwZWN0ZWQubGVuZ3RoKCksIGFjdHVhbC5sZW5ndGgo
KSk7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCShyZXZpc2lv
biAyNzg4MDkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW0JKHdv
cmtpbmcgY29weSkKQEAgLTM0MCwxMSArMzQwLDExIEBAIHZvaWQgQ29ubmVjdGlvbjo6d2ViU29j
a2V0SGFuZHNoYWtlKENvbXAKIAogICAgICAgICAgICAgY29uc3RleHByIGF1dG8qIHdlYlNvY2tl
dEtleUdVSUQgPSAiMjU4RUFGQTUtRTkxNC00N0RBLTk1Q0EtQzVBQjBEQzg1QjExIjsKICAgICAg
ICAgICAgIFNIQTEgc2hhMTsKLSAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50OF90Kj4oa2V5QmVnaW4pLCBrZXlFbmQgLSBrZXlCZWdpbik7Ci0gICAg
ICAgICAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHdl
YlNvY2tldEtleUdVSUQpLCBzdHJsZW4od2ViU29ja2V0S2V5R1VJRCkpOworICAgICAgICAgICAg
c2hhMS5hZGRCeXRlcyhTcGFuIHsga2V5QmVnaW4sIGtleUVuZCB9KTsKKyAgICAgICAgICAgIHNo
YTEuYWRkQnl0ZXMoU3BhbiB7IHdlYlNvY2tldEtleUdVSUQsIHN0cmxlbih3ZWJTb2NrZXRLZXlH
VUlEKSB9KTsKICAgICAgICAgICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwogICAgICAgICAgICAgc2hh
MS5jb21wdXRlSGFzaChoYXNoKTsKLSAgICAgICAgICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0
cmluZyhoYXNoLmRhdGEoKSwgU0hBMTo6aGFzaFNpemUpOworICAgICAgICAgICAgcmV0dXJuIGJh
c2U2NEVuY29kZVRvU3RyaW5nKGhhc2gpOwogICAgICAgICB9OwogCiAgICAgICAgIGNvbm5lY3Rp
b24uc2VuZChIVFRQUmVzcG9uc2UoMTAxLCB7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVy
L2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvY2Fpcm8vVGVzdEludm9jYXRpb25DYWlyby5jcHAJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2Fpcm8vVGVzdEludm9jYXRpb25DYWlyby5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgc3RhdGljIHZvaWQgY29tcHV0ZVNI
QTFIYXNoU3RyaW5nRm9yQ2FpcgogICAgIFNIQTEgc2hhMTsKICAgICB1bnNpZ25lZCBjaGFyKiBi
aXRtYXBEYXRhID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X2RhdGEoc3VyZmFjZSkpOwogICAgIGZvciAoc2l6ZV90IHJvdyA9IDA7IHJvdyA8IHBp
eGVsc0hpZ2g7ICsrcm93KSB7Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMoYml0bWFwRGF0YSwgNCAq
IHBpeGVsc1dpZGUpOworICAgICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyBiaXRtYXBEYXRhLCA0
ICogcGl4ZWxzV2lkZSB9KTsKICAgICAgICAgYml0bWFwRGF0YSArPSBieXRlc1BlclJvdzsKICAg
ICB9CiAgICAgU0hBMTo6RGlnZXN0IGhhc2g7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVy
L2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvY2cvVGVzdEludm9jYXRpb25DRy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvY2cvVGVzdEludm9jYXRpb25DRy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JDb250ZXh0KENH
QwogI2VuZGlmCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIHJvdyA9IDA7IHJvdyA8IHBp
eGVsc0hpZ2g7IHJvdysrKSB7Ci0gICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGJpdG1hcERhdGEs
IDQgKiBwaXhlbHNXaWRlKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IGJpdG1h
cERhdGEsIDQgKiBwaXhlbHNXaWRlIH0pOwogICAgICAgICAgICAgYml0bWFwRGF0YSArPSBieXRl
c1BlclJvdzsKICAgICAgICAgfQogICAgIH0K
</data>
<flag name="commit-queue"
          id="453017"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431279</attachid>
            <date>2021-06-13 09:46:18 -0700</date>
            <delta_ts>2021-06-13 12:51:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226887-20210613094617.patch</filename>
            <type>text/plain</type>
            <size>193189</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBA
CisyMDIxLTA2LTEyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogQVBJL0pTU2NyaXB0Lm1tOgorICAg
ICAgICAoK1tKU1NjcmlwdCBzY3JpcHRPZlR5cGU6bWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTp3
aXRoU291cmNlVVJMOmFuZEJ5dGVjb2RlQ2FjaGU6aW5WaXJ0dWFsTWFjaGluZTplcnJvcjpdKToK
KyAgICAgICAgKC1bSlNTY3JpcHQgcmVhZENhY2hlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHdy
aXRlQ2FjaGU6XSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9ja0hhc2g6OkNvZGVCbG9ja0hhc2gpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHA6CisgICAgICAgIChJbnNw
ZWN0b3I6OmJhY2tlbmRDb21tYW5kc0hhc2gpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZm
ZXIuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJDb250ZW50czo6d3JpdGFibGVCeXRlcyk6
CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyQ29udGVudHM6OmJ5dGVzIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6QXJyYXlCdWZmZXI6OndyaXRhYmxlQnl0ZXMpOgorICAgICAgICAoSlNDOjpBcnJh
eUJ1ZmZlcjo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
Lmg6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6d3JpdGFibGVCeXRlcyk6CisgICAg
ICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRp
bWUvQ2FjaGVQYXlsb2FkLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVQYXlsb2FkOjptYWtlTWFw
cGVkUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6bWFrZU1hbGxvY1BheWxv
YWQpOgorICAgICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6Om1ha2VFbXB0eVBheWxvYWQpOgorICAg
ICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6OkNhY2hlUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNh
Y2hlUGF5bG9hZDo6ZnJlZURhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVQYXlsb2FkLmg6
CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6ZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlUGF5bG9hZDo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6
Q2FjaGVQYXlsb2FkKToKKyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKToKKwogMjAyMS0w
Ni0xMSAgUGF0cmljayBBbmdsZSAgPHBhbmdsZUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogQWRkIGluc3RydW1lbnRhdGlvbiB0byBub2RlIGRlc3RydWN0aW9uIGZvciBJbnNw
ZWN0b3JET01BZ2VudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMTMgKzEzNCwxMyBAQCArIChpbnN0YW5jZXR5cGUpc2Ny
aXB0T2ZUeXBlOihKU1NjcmlwdFR5CiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4g
Y3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJGaWxlIGF0IHBhdGggJUAg
Y291bGQgbm90IGJlIG1hcHBlZC4iLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihzeXN0ZW1QYXRo
KV0sIGVycm9yKTsKIAotICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCkpKQor
ICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmlsZURhdGEuZGF0YSgpLnNpemUoKSkpCiAg
ICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIk5v
dCBhbGwgY2hhcmFjdGVycyBpbiBmaWxlIGF0ICVAIGFyZSBBU0NJSS4iLCBzdGF0aWNfY2FzdDxO
U1N0cmluZyAqPihzeXN0ZW1QYXRoKV0sIGVycm9yKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gYWRv
cHROUyhbW0pTU2NyaXB0IGFsbG9jXSBpbml0XSk7CiAgICAgcmVzdWx0LT5tX3ZpcnR1YWxNYWNo
aW5lID0gdm07CiAgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOwotICAgIHJlc3VsdC0+bV9zb3Vy
Y2UgPSBTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcoYml0d2lzZV9jYXN0
PGNvbnN0IExDaGFyKj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpKSk7CisgICAg
cmVzdWx0LT5tX3NvdXJjZSA9IFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWlu
ZyhiaXR3aXNlX2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmls
ZURhdGEuZGF0YSgpLnNpemUoKSkpOwogICAgIHJlc3VsdC0+bV9tYXBwZWRTb3VyY2UgPSBXVEZN
b3ZlKGZpbGVEYXRhKTsKICAgICByZXN1bHQtPm1fc291cmNlVVJMID0gc291cmNlVVJMOwogICAg
IHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7CkBAIC0xNjgsMjQgKzE2OCwyMyBAQCAt
ICh2b2lkKXJlYWRDYWNoZQogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgY29uc3QgdWludDhfdCogZmlsZURhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihtYXBwZWRGaWxlLmRhdGEoKSk7Ci0gICAgdW5zaWduZWQgZmlsZVRvdGFsU2l6ZSA9IG1h
cHBlZEZpbGUuc2l6ZSgpOworICAgIGF1dG8gZmlsZURhdGEgPSBtYXBwZWRGaWxlLmRhdGEoKTsK
IAogICAgIC8vIEVuc3VyZSB3ZSBhdCBsZWFzdCBoYXZlIGEgU0hBMTo6RGlnZXN0IHRvIHJlYWQu
Ci0gICAgaWYgKGZpbGVUb3RhbFNpemUgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgeworICAgIGlm
IChmaWxlRGF0YS5zaXplKCkgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgewogICAgICAgICBGaWxl
U3lzdGVtOjpkZWxldGVGaWxlKGNhY2hlRmlsZW5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgdW5zaWduZWQgZmlsZURhdGFTaXplID0gZmlsZVRvdGFsU2l6ZSAtIHNpemVvZihT
SEExOjpEaWdlc3QpOworICAgIHVuc2lnbmVkIGZpbGVEYXRhU2l6ZSA9IGZpbGVEYXRhLnNpemUo
KSAtIHNpemVvZihTSEExOjpEaWdlc3QpOwogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFz
aDsKICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhmaWxlRGF0YSwgZmlsZURhdGFT
aXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKGZpbGVEYXRhLmZpcnN0KGZpbGVEYXRhU2l6ZSkpOwog
ICAgIHNoYTEuY29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2VzdCBm
aWxlSGFzaDsKLSAgICBtZW1jcHkoJmZpbGVIYXNoLCBmaWxlRGF0YSArIGZpbGVEYXRhU2l6ZSwg
c2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOworICAgIG1lbWNweSgmZmlsZUhhc2gsIGZpbGVEYXRhLmRh
dGEoKSArIGZpbGVEYXRhU2l6ZSwgc2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOwogCiAgICAgaWYgKGNv
bXB1dGVkSGFzaCAhPSBmaWxlSGFzaCkgewogICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxl
KGNhY2hlRmlsZW5hbWUpOwpAQCAtMzQzLDcgKzM0Miw3IEBAIC0gKEJPT0wpd3JpdGVDYWNoZToo
U3RyaW5nJillcnJvcgogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFzaDsKICAgICBTSEEx
IHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhtX2NhY2hlZEJ5dGVjb2RlLT5kYXRhKCksIG1fY2Fj
aGVkQnl0ZWNvZGUtPnNpemUoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgbV9jYWNoZWRC
eXRlY29kZS0+ZGF0YSgpLCBtX2NhY2hlZEJ5dGVjb2RlLT5zaXplKCkgfSk7CiAgICAgc2hhMS5j
b21wdXRlSGFzaChjb21wdXRlZEhhc2gpOwogICAgIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKHRl
bXBGRCwgY29tcHV0ZWRIYXNoLmRhdGEoKSwgc2l6ZW9mKGNvbXB1dGVkSGFzaCkpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0hhc2guY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgQ29kZUJsb2Nr
SGFzaDo6Q29kZUJsb2NrSGFzaChjb25zdCBTb3VyYwogICAgIEFTU0VSVChzb3VyY2VDb2RlLmxl
bmd0aCgpID49IDApOwogICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhTb3VyY2VDb2RlTGVuZ3Ro
VG9IYXNoID0gNTAwICogTUI7CiAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzb3VyY2VD
b2RlLmxlbmd0aCgpKSA8IG1heFNvdXJjZUNvZGVMZW5ndGhUb0hhc2gpCi0gICAgICAgIHNoYTEu
YWRkQnl0ZXMoc291cmNlQ29kZS50b1VURjgoKSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoc291
cmNlQ29kZS50b1VURjgoKS5ieXRlcygpKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gSnVzdCBo
YXNoIHdpdGggdGhlIGxlbmd0aCBhbmQgc2FtcGxlcyBvZiB0aGUgc291cmNlIHN0cmluZyBpbnN0
ZWFkLgogICAgICAgICBTdHJpbmdWaWV3IHN0ciA9IHNvdXJjZUNvZGUucHJvdmlkZXIoKS0+c291
cmNlKCk7CkBAIC02MiwxMCArNjIsMTAgQEAgQ29kZUJsb2NrSGFzaDo6Q29kZUJsb2NrSGFzaChj
b25zdCBTb3VyYwogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHIubGVuZ3RoKCk7CiAgICAg
ICAgIHVuc2lnbmVkIHN0ZXAgPSAobGVuZ3RoID4+IDEwKSArIDE7CiAKLSAgICAgICAgc2hhMS5h
ZGRCeXRlcyhiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KCZsZW5ndGgpLCBzaXplb2YobGVuZ3RoKSk7
CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZsZW5ndGgsIDEgfSk7CiAgICAgICAgIGRv
IHsKICAgICAgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IHN0cltpbmRleF07Ci0gICAgICAgICAg
ICBzaGExLmFkZEJ5dGVzKGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oJmNoYXJhY3RlciksIHNpemVv
ZihjaGFyYWN0ZXIpKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZjaGFyYWN0
ZXIsIDEgfSk7CiAgICAgICAgICAgICBvbGRJbmRleCA9IGluZGV4OwogICAgICAgICAgICAgaW5k
ZXggKz0gc3RlcDsKICAgICAgICAgfSB3aGlsZSAoaW5kZXggPiBvbGRJbmRleCAmJiBpbmRleCA8
IGxlbmd0aCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VIYXNo
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VI
YXNoLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BhcnNlSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiBQYXJzZUhhc2g6OlBhcnNlSGFzaChjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VD
b2RlKQogewogICAgIFNIQTEgc2hhMTsKLSAgICBzaGExLmFkZEJ5dGVzKHNvdXJjZUNvZGUudG9V
VEY4KCkpOworICAgIHNoYTEuYWRkQnl0ZXMoc291cmNlQ29kZS50b1VURjgoKS5ieXRlcygpKTsK
ICAgICBTSEExOjpEaWdlc3QgZGlnZXN0OwogICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsK
ICAgICB1bnNpZ25lZCBoYXNoID0gZGlnZXN0WzBdIHwgKGRpZ2VzdFsxXSA8PCA4KSB8IChkaWdl
c3RbMl0gPDwgMTYpIHwgKGRpZ2VzdFszXSA8PCAyNCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1JlbW90ZUluc3BlY3RvclV0aWxzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1Jl
bW90ZUluc3BlY3RvclV0aWxzLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgY29uc3QgQ1N0cmluZyYgYmFja2VuZENv
bW1hbmRzSGFzaCgpCiAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSA9IGdfYnl0ZXNfZ2V0X2Rh
dGEoYnl0ZXMuZ2V0KCksICZkYXRhU2l6ZSk7CiAgICAgICAgIEFTU0VSVChkYXRhU2l6ZSk7CiAg
ICAgICAgIFNIQTEgc2hhMTsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhzdGF0aWNfY2FzdDxjb25z
dCB1aW50OF90Kj4oZGF0YSksIGRhdGFTaXplKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFu
IHsgc3RhdGljX2Nhc3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSksIGRhdGFTaXplIH0pOwogICAg
ICAgICBoZXhEaWdlc3QgPSBzaGExLmNvbXB1dGVIZXhEaWdlc3QoKTsKICAgICB9CiAgICAgcmV0
dXJuIGhleERpZ2VzdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogI2luY2x1ZGUgPHd0Zi9QYWNrZWRSZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZl
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtODAsNyAr
ODEsMTAgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBt
X2RhdGEuZ2V0TWF5QmVOdWxsKHNpemVJbkJ5dGVzKCkpOyB9CiAgICAgdW5zaWduZWQgc2l6ZUlu
Qnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX3NpemVJbkJ5dGVzOyB9Ci0gICAgCisKKyAgICBTcGFu
PHN0ZDo6Ynl0ZT4gd3JpdGFibGVCeXRlcygpIHsgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8c3RkOjpi
eXRlKj4oZGF0YSgpKSwgc2l6ZUluQnl0ZXMoKSB9OyB9CisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4geyBzdGF0aWNfY2FzdDxjb25zdCBzdGQ6OmJ5dGUq
PihkYXRhKCkpLCBzaXplSW5CeXRlcygpIH07IH0KKwogICAgIGJvb2wgaXNTaGFyZWQoKSBjb25z
dCB7IHJldHVybiBtX3NoYXJlZDsgfQogICAgIAogcHJpdmF0ZToKQEAgLTEyNyw3ICsxMzEsOSBA
QCBwdWJsaWM6CiAgICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKICAgICBpbmxpbmUgY29uc3Qgdm9p
ZCogZGF0YSgpIGNvbnN0OwogICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7
Ci0gICAgCisgICAgaW5saW5lIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCk7CisgICAg
aW5saW5lIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAgICAgdm9pZCBt
YWtlU2hhcmVkKCk7CiAgICAgdm9pZCBzZXRTaGFyaW5nTW9kZShBcnJheUJ1ZmZlclNoYXJpbmdN
b2RlKTsKICAgICBpbmxpbmUgYm9vbCBpc1NoYXJlZCgpIGNvbnN0OwpAQCAtMTk3LDYgKzIwMywx
NiBAQCB1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJu
IG1fY29udGVudHMuc2l6ZUluQnl0ZXMoKTsKIH0KIAorU3BhbjxzdGQ6OmJ5dGU+IEFycmF5QnVm
ZmVyOjp3cml0YWJsZUJ5dGVzKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZW50cy53cml0YWJsZUJ5
dGVzKCk7Cit9CisKK1NwYW48Y29uc3Qgc3RkOjpieXRlPiBBcnJheUJ1ZmZlcjo6Ynl0ZXMoKSBj
b25zdAoreworICAgIHJldHVybiBtX2NvbnRlbnRzLmJ5dGVzKCk7Cit9CisKIGJvb2wgQXJyYXlC
dWZmZXI6OmlzU2hhcmVkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb250ZW50cy5pc1NoYXJl
ZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZm
ZXJWaWV3LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4Niw5IEBAIHB1
YmxpYzoKIAogICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVM
ZW5ndGg7IH0KIAorICAgIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCkgeyByZXR1cm4g
eyBzdGF0aWNfY2FzdDxzdGQ6OmJ5dGUqPihkYXRhKCkpLCBieXRlTGVuZ3RoKCkgfTsgfQorICAg
IFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0IHsgcmV0dXJuIHsgc3RhdGljX2Nh
c3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSgpKSwgYnl0ZUxlbmd0aCgpIH07IH0KKwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0RGV0YWNoYWJsZShib29sKTsKICAgICBib29sIGlzRGV0
YWNoYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNEZXRhY2hhYmxlOyB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlUGF5bG9hZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsMjcgKzMwLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogCiBD
YWNoZVBheWxvYWQgQ2FjaGVQYXlsb2FkOjptYWtlTWFwcGVkUGF5bG9hZChGaWxlU3lzdGVtOjpN
YXBwZWRGaWxlRGF0YSYmIGRhdGEpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZCh0cnVlLCBk
YXRhLmxlYWtIYW5kbGUoKSwgZGF0YS5zaXplKCkpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQo
dHJ1ZSwgZGF0YS5sZWFrSGFuZGxlKCkpOwogfQogCiBDYWNoZVBheWxvYWQgQ2FjaGVQYXlsb2Fk
OjptYWtlTWFsbG9jUGF5bG9hZChNYWxsb2NQdHI8dWludDhfdCwgVk1NYWxsb2M+JiYgZGF0YSwg
c2l6ZV90IHNpemUpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZChmYWxzZSwgZGF0YS5sZWFr
UHRyKCksIHNpemUpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQoZmFsc2UsIGFzV3JpdGFibGVC
eXRlcyhTcGFuIHsgZGF0YS5sZWFrUHRyKCksIHNpemUgfSkpOwogfQogCiBDYWNoZVBheWxvYWQg
Q2FjaGVQYXlsb2FkOjptYWtlRW1wdHlQYXlsb2FkKCkKIHsKLSAgICByZXR1cm4gQ2FjaGVQYXls
b2FkKHRydWUsIG51bGxwdHIsIDApOworICAgIHJldHVybiBDYWNoZVBheWxvYWQodHJ1ZSwgeyB9
KTsKIH0KIAogQ2FjaGVQYXlsb2FkOjpDYWNoZVBheWxvYWQoQ2FjaGVQYXlsb2FkJiYgb3RoZXIp
CiB7Ci0gICAgbV9tYXBwZWQgPSBvdGhlci5tX21hcHBlZDsKLSAgICBtX3NpemUgPSBvdGhlci5t
X3NpemU7Ci0gICAgbV9kYXRhID0gb3RoZXIubV9kYXRhOwotICAgIG90aGVyLm1fbWFwcGVkID0g
ZmFsc2U7Ci0gICAgb3RoZXIubV9kYXRhID0gbnVsbHB0cjsKLSAgICBvdGhlci5tX3NpemUgPSAw
OworICAgIG1fbWFwcGVkID0gc3RkOjpleGNoYW5nZShvdGhlci5tX21hcHBlZCwgZmFsc2UpOwor
ICAgIG1fZGF0YSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLCB7IH0pOwogfQogCiBDYWNo
ZVBheWxvYWQ6On5DYWNoZVBheWxvYWQoKQpAQCAtNjcsMTIgKzYzLDEzIEBAIENhY2hlUGF5bG9h
ZCYgQ2FjaGVQYXlsb2FkOjpvcGVyYXRvcj0oQ2EKIAogdm9pZCBDYWNoZVBheWxvYWQ6OmZyZWVE
YXRhKCkKIHsKLSAgICBpZiAoIW1fZGF0YSkKKyAgICBpZiAoIW1fZGF0YS5kYXRhKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBpZiAobV9tYXBwZWQpIHsKLSAgICAgICAgRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1fZGF0YSwgbV9zaXplKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZmFzdEZy
ZWUobV9kYXRhKTsKKworICAgIGlmIChtX21hcHBlZCkKKyAgICAgICAgRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1fZGF0YSk7CisgICAgZWxzZQorICAgICAgICBmYXN0RnJlZShtX2RhdGEu
ZGF0YSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHd0Zi9GaWxlU3lz
dGVtLmg+CiAjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MSwyMiArNDIsMjAgQEAgcHVibGljOgogICAgIEpT
X0VYUE9SVF9QUklWQVRFIH5DYWNoZVBheWxvYWQoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBD
YWNoZVBheWxvYWQmIG9wZXJhdG9yPShDYWNoZVBheWxvYWQmJiBvdGhlcik7CiAKLSAgICBjb25z
dCB1aW50OF90KiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBjb25zdCB1aW50OF90KiBkYXRhKCkg
Y29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9kYXRhLmRhdGEoKSk7
IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5zaXplKCk7IH0KIAog
cHJpdmF0ZToKLSAgICBDYWNoZVBheWxvYWQoYm9vbCBtYXBwZWQsIHZvaWQqIGRhdGEsIHNpemVf
dCBzaXplKQorICAgIENhY2hlUGF5bG9hZChib29sIG1hcHBlZCwgU3BhbjxzdGQ6OmJ5dGU+IGRh
dGEpCiAgICAgICAgIDogbV9tYXBwZWQobWFwcGVkKQotICAgICAgICAsIG1fc2l6ZShzaXplKQot
ICAgICAgICAsIG1fZGF0YShzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGF0YSkpCisgICAgICAgICwg
bV9kYXRhKGRhdGEpCiAgICAgewogICAgIH0KIAogICAgIHZvaWQgZnJlZURhdGEoKTsKIAogICAg
IGJvb2wgbV9tYXBwZWQ7Ci0gICAgc2l6ZV90IG1fc2l6ZTsKLSAgICB1aW50OF90KiBtX2RhdGE7
CisgICAgU3BhbjxzdGQ6OmJ5dGU+IG1fZGF0YTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1Bh
cnNlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNyArMjYxLDcg
QEAgYXV0byBTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKGNvbnN0IHVpbgogICAgIH0KIAogICAg
IGlmIChVTkxJS0VMWShPcHRpb25zOjp1c2VFYWdlcldlYkFzc2VtYmx5TW9kdWxlSGFzaGluZygp
KSkKLSAgICAgICAgbV9oYXNoZXIuYWRkQnl0ZXMoYnl0ZXMsIGJ5dGVzU2l6ZSk7CisgICAgICAg
IG1faGFzaGVyLmFkZEJ5dGVzKFNwYW4geyBieXRlcywgYnl0ZXNTaXplIH0pOwogCiAgICAgc2l6
ZV90IG9mZnNldEluQnl0ZXMgPSAwOwogICAgIHdoaWxlICh0cnVlKSB7CkluZGV4OiBTb3VyY2Uv
V1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw2OCBAQAorMjAyMS0wNi0xMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgQWRvcHQgU3BhbiBpbiBtb3JlIHBsYWNlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIFdURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmNwcDoKKyAgICAg
ICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjp+TWFwcGVkRmlsZURhdGEp
OgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6TWFwcGVkRmlsZURhdGE6Om1hcEZpbGVI
YW5kbGUpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6dW5tYXBWaWV3T2ZGaWxlKToK
KyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Om1hcFRvRmlsZSk6CisgICAgICAgICogd3Rm
L0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVE
YXRhOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6
Ok1hcHBlZEZpbGVEYXRhOjpkYXRhIGNvbnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUlt
cGw6Ok1hcHBlZEZpbGVEYXRhOjpsZWFrSGFuZGxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3Rl
bUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YSk6CisgICAgICAgIChXVEY6OkZp
bGVTeXN0ZW1JbXBsOjpNYXBwZWRGaWxlRGF0YTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6
RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpzaXplIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1NIQTEuY3BwOgorICAgICAgICAoV1RG
OjpTSEExOjphZGRCeXRlcyk6CisgICAgICAgIChXVEY6OlNIQTE6OmZpbmFsaXplKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6U0hBMTo6cHJvY2Vzc0Jsb2NrKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6U0hBMTo6cmVzZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTSEExOjpoZXhEaWdl
c3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTSEExOjpjb21wdXRlSGV4RGlnZXN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3dGYvU0hBMS5oOgorICAgICAgICAoV1RGOjpTSEExOjphZGRCeXRl
cyk6CisgICAgICAgICogd3RmL1ZlY3Rvci5oOgorICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZS9Q
ZXJzaXN0ZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPENT
dHJpbmc+OjplbmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8Q1N0cmlu
Zz46OmRlY29kZSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTdHJpbmc+Ojpl
bmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVjb2RlU3RyaW5nVGV4dCk6Cisg
ICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUpOgor
ICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKToK
KyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oOgorICAgICAgICAq
IHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5jcHA6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyOjpEZWNvZGVyKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6
OkRlY29kZXI6OmJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFkKToKKyAgICAgICAgKFdURjo6UGVy
c2lzdGVuY2U6OkRlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjp2ZXJpZnlDaGVja3N1bSk6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyOjp+RGVjb2Rlcik6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3Bl
cnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmg6CisgICAgICAgICogd3RmL3BlcnNpc3RlbmNl
L1BlcnNpc3RlbnRFbmNvZGVyLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29k
ZXI6Omdyb3cpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6dXBkYXRlQ2hl
Y2tzdW1Gb3JEYXRhKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6OmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjpl
bmNvZGVOdW1iZXIpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6ZW5jb2Rl
Q2hlY2tzdW0pOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6RW5jb2Rlcik6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjp+RW5jb2Rlcik6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmg6
CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjpidWZmZXIgY29uc3QpOgorICAg
ICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIp
OgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6YnVmZmVyU2l6ZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL3RleHQvQmFzZTY0Lmg6CisgICAgICAgIChXVEY6OmJh
c2U2NEVuY29kZVRvVmVjdG9yKToKKyAgICAgICAgKFdURjo6YmFzZTY0RW5jb2RlVG9TdHJpbmcp
OgorICAgICAgICAqIHd0Zi90ZXh0L0NTdHJpbmcuaDoKKwogMjAyMS0wNi0xMSAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgV2Vha0hhc2hNYXAKSW5kZXg6
IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtNjkyLDYgKzY5Miw4IEBACiAJCUFEODlCNkI5MUU2NDE1MEYwMDkwNzA3RiAvKiBN
ZW1vcnlQcmVzc3VyZUhhbmRsZXJDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IE1lbW9yeVByZXNzdXJlSGFuZGxlckNvY29hLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBREYyQ0U2NDFFMzlGMTA2MDA2ODg5REIgLyogTWVtb3J5Rm9vdHBy
aW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lbW9yeUZvb3RwcmludC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREYyQ0U2NTFFMzlGMTA2MDA2ODg5REIg
LyogTWVtb3J5Rm9vdHByaW50Q29jb2EuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTWVtb3J5Rm9vdHByaW50Q29jb2EuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlCQzcwMEI0NDI2NzY2ODM0MDA0OUVERjIgLyogU3BhbkNvY29hLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNwYW5Db2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzcwMEI0
NTI2NzY2OUMxMDA0OUVERjIgLyogU3BhbkNGLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwYW5DRi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0EzMEM3RjI2NkQzMDM0MDAwRDIzMEMgLyog
U3Bhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTcGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyQkNGQzNFMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5ndWFnZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYW5ndWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyQkNGQzNGMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5ndWFnZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYW5ndWFnZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtODQwLDYgKzg0Miw3IEBACiAJCQkJQzJCQ0ZDNDExRjYxRDYxNjAwQzky
MjJDIC8qIExhbmd1YWdlQ0YuY3BwICovLAogCQkJCTJDREVEMEVFMTgxMTVDMzgwMDREQkE3MCAv
KiBSdW5Mb29wQ0YuY3BwICovLAogCQkJCUEzRUU1QzNCMjFGRkFDN0MwMEZBQkQ2MSAvKiBTY2hl
ZHVsZVBhaXJDRi5jcHAgKi8sCisJCQkJQkM3MDBCNDUyNjc2NjlDMTAwNDlFREYyIC8qIFNwYW5D
Ri5oICovLAogCQkJCTFBRkRFNjQ3MTk1MjAxQzMwMEM0OEZGQSAvKiBUeXBlQ2FzdHNDRi5oICov
LAogCQkJCTVDMUYwNTk0MjE2NDM3QjMwMDM5MzAyQyAvKiBVUkxDRi5jcHAgKi8sCiAJCQkpOwpA
QCAtMTU4MSw2ICsxNTg0LDcgQEAKIAkJCQkxQ0E4NUNBODI0MUIwQjI2MDA3MUMyRjUgLyogUnVu
dGltZUFwcGxpY2F0aW9uQ2hlY2tzQ29jb2EuY3BwICovLAogCQkJCTFDQTg1Q0E3MjQxQjBCMTEw
MDcxQzJGNSAvKiBSdW50aW1lQXBwbGljYXRpb25DaGVja3NDb2NvYS5oICovLAogCQkJCUEzMEQ0
MTJDMUYwREUwQkEwMEI3MTk1NCAvKiBTb2Z0TGlua2luZy5oICovLAorCQkJCUJDNzAwQjQ0MjY3
NjY4MzQwMDQ5RURGMiAvKiBTcGFuQ29jb2EuaCAqLywKIAkJCQlFQjYxRURDNjI0MDlDQ0MwMDAx
RUZFMzYgLyogU3lzdGVtVHJhY2luZ0NvY29hLmNwcCAqLywKIAkJCQk1Q0MwRUU4NjIxNjJCQzIy
MDBBMUE4NDIgLyogVVJMQ29jb2EubW0gKi8sCiAJCQkJOTMyNDE2NTcyNDNCQzJFNTAwMzJGQUFF
IC8qIFZlY3RvckNvY29hLmggKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxOSw5ICszMTksOSBAQCBib29sIGV4Y2x1ZGVGcm9tQmFja3VwKGNvbnN0IFN0cmluZyYp
CiAKIE1hcHBlZEZpbGVEYXRhOjp+TWFwcGVkRmlsZURhdGEoKQogewotICAgIGlmICghbV9maWxl
RGF0YSkKKyAgICBpZiAoIW1fZmlsZURhdGEuZGF0YSgpKQogICAgICAgICByZXR1cm47Ci0gICAg
dW5tYXBWaWV3T2ZGaWxlKG1fZmlsZURhdGEsIG1fZmlsZVNpemUpOworICAgIHVubWFwVmlld09m
RmlsZShtX2ZpbGVEYXRhKTsKIH0KIAogTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKGNv
bnN0IFN0cmluZyYgZmlsZVBhdGgsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUsIGJvb2wmIHN1Y2Nl
c3MpCkBAIC0zODMsMTQgKzM4MywxMyBAQCBib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFu
ZGxlKFBsYXRmCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBtX2ZpbGVEYXRh
ID0gZGF0YTsKLSAgICBtX2ZpbGVTaXplID0gc2l6ZTsKKyAgICBtX2ZpbGVEYXRhID0gU3BhbiB7
IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpieXRlKj4oZGF0YSksIHNpemUgfTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCB1bm1hcFZpZXdPZkZpbGUodm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6
ZSkKK2Jvb2wgdW5tYXBWaWV3T2ZGaWxlKFNwYW48c3RkOjpieXRlPiBkYXRhKQogewotICAgIHJl
dHVybiAhbXVubWFwKGJ1ZmZlciwgc2l6ZSk7CisgICAgcmV0dXJuICFtdW5tYXAoZGF0YS5kYXRh
KCksIGRhdGEuc2l6ZSgpKTsKIH0KIAogI2VuZGlmCkBAIC00MzgsNyArNDM3LDcgQEAgU3RyaW5n
IGNyZWF0ZVRlbXBvcmFyeVppcEFyY2hpdmUoY29uc3QgUwogfQogI2VuZGlmCiAKLU1hcHBlZEZp
bGVEYXRhIG1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIHNpemVfdCBieXRlc1NpemUsIEZ1
bmN0aW9uPHZvaWQoY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4m
KT4mJiBhcHBseSwgUGxhdGZvcm1GaWxlSGFuZGxlKiBvdXRwdXRIYW5kbGUpCitNYXBwZWRGaWxl
RGF0YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBzaXplX3QgYnl0ZXNTaXplLCBGdW5j
dGlvbjx2b2lkKGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mKT4m
JiBhcHBseSwgUGxhdGZvcm1GaWxlSGFuZGxlKiBvdXRwdXRIYW5kbGUpCiB7CiAgICAgY29uc3Rl
eHByIGJvb2wgZmFpbElmRmlsZUV4aXN0cyA9IHRydWU7CiAgICAgYXV0byBoYW5kbGUgPSBGaWxl
U3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWRXcml0
ZSwgRmlsZVN5c3RlbTo6RmlsZUFjY2Vzc1Blcm1pc3Npb246OlVzZXIsIGZhaWxJZkZpbGVFeGlz
dHMpOwpAQCAtNDU1LDEyICs0NTQsMTIgQEAgTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxlKGNvbnN0
IFN0cmluZyYgcAogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIHZvaWQqIG1hcCA9
IGNvbnN0X2Nhc3Q8dm9pZCo+KG1hcHBlZEZpbGUuZGF0YSgpKTsKLSAgICB1aW50OF90KiBtYXBE
YXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1hcCk7CisgICAgYXV0byBtYXAgPSBtYXBwZWRG
aWxlLmRhdGEoKS5kYXRhKCk7CisgICAgYXV0byBtYXBEYXRhID0gbWFwOwogCi0gICAgYXBwbHko
WyZtYXBEYXRhXShjb25zdCB1aW50OF90KiBjaHVuaywgc2l6ZV90IGNodW5rU2l6ZSkgewotICAg
ICAgICBtZW1jcHkobWFwRGF0YSwgY2h1bmssIGNodW5rU2l6ZSk7Ci0gICAgICAgIG1hcERhdGEg
Kz0gY2h1bmtTaXplOworICAgIGFwcGx5KFsmbWFwRGF0YV0oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+
IGNodW5rKSB7CisgICAgICAgIG1lbWNweShtYXBEYXRhLCBjaHVuay5kYXRhKCksIGNodW5rLnNp
emUoKSk7CisgICAgICAgIG1hcERhdGEgKz0gY2h1bmsuc2l6ZSgpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9KTsKIApJbmRleDogU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICsz
NCw3IEBACiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KQEAgLTIxMCw3ICsyMTEsNyBAQCBXVEZfRVhQT1JUX1BSSVZBVEUg
U3RyaW5nIHJlYWxQYXRoKGNvbnN0CiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc1NhZmVUb1Vz
ZU1lbW9yeU1hcEZvclBhdGgoY29uc3QgU3RyaW5nJik7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBtYWtlU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChjb25zdCBTdHJpbmcmKTsKIAotV1RGX0VY
UE9SVF9QUklWQVRFIGJvb2wgdW5tYXBWaWV3T2ZGaWxlKHZvaWQqIGJ1ZmZlciwgc2l6ZV90KTsK
K1dURl9FWFBPUlRfUFJJVkFURSBib29sIHVubWFwVmlld09mRmlsZShTcGFuPHN0ZDo6Ynl0ZT4p
OwogCiBjbGFzcyBNYXBwZWRGaWxlRGF0YSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CkBAIC0yMjMsMTcgKzIyNCwxNSBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5N
YXBwZWRGaWxlRGF0YSgpOwogICAgIE1hcHBlZEZpbGVEYXRhJiBvcGVyYXRvcj0oTWFwcGVkRmls
ZURhdGEmJik7CiAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
ISFtX2ZpbGVEYXRhOyB9Ci0gICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZmlsZURhdGE7IH0KLSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9maWxlU2l6
ZTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fZmls
ZURhdGEuZGF0YSgpOyB9CisgICAgU3BhbjxzdGQ6OmJ5dGU+IGRhdGEoKSBjb25zdCB7IHJldHVy
biBtX2ZpbGVEYXRhOyB9CiAKLSAgICB2b2lkKiBsZWFrSGFuZGxlKCkgeyByZXR1cm4gc3RkOjpl
eGNoYW5nZShtX2ZpbGVEYXRhLCBudWxscHRyKTsgfQorICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBT
cGFuPHN0ZDo6Ynl0ZT4gbGVha0hhbmRsZSgpIHsgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9maWxl
RGF0YSwgeyB9KTsgfQogCiBwcml2YXRlOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIG1h
cEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBGaWxlT3Blbk1vZGUsIE1hcHBlZEZpbGVN
b2RlKTsKIAotICAgIHZvaWQqIG1fZmlsZURhdGEgeyBudWxscHRyIH07Ci0gICAgdW5zaWduZWQg
bV9maWxlU2l6ZSB7IDAgfTsKKyAgICBTcGFuPHN0ZDo6Ynl0ZT4gbV9maWxlRGF0YTsKIH07CiAK
IGlubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGxhdGZvcm1GaWxlSGFuZGxl
IGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUgbWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKQEAgLTI0Nywy
MSArMjQ2LDE5IEBAIGlubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGwKIH0K
IAogaW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShNYXBwZWRGaWxlRGF0YSYm
IG90aGVyKQotICAgIDogbV9maWxlRGF0YShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEs
IG51bGxwdHIpKQotICAgICwgbV9maWxlU2l6ZShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZVNp
emUsIDApKQorICAgIDogbV9maWxlRGF0YShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEs
IHsgfSkpCiB7CiB9CiAKIGlubGluZSBNYXBwZWRGaWxlRGF0YSYgTWFwcGVkRmlsZURhdGE6Om9w
ZXJhdG9yPShNYXBwZWRGaWxlRGF0YSYmIG90aGVyKQogewotICAgIG1fZmlsZURhdGEgPSBzdGQ6
OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEsIG51bGxwdHIpOwotICAgIG1fZmlsZVNpemUgPSBz
dGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZVNpemUsIDApOworICAgIG1fZmlsZURhdGEgPSBzdGQ6
OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEsIHsgfSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQog
CiAvLyBUaGlzIGNyZWF0ZXMgdGhlIGRlc3RpbmF0aW9uIGZpbGUsIG1hcHMgaXQsIHdyaXRlIHRo
ZSBwcm92aWRlZCBkYXRhIHRvIGl0IGFuZCByZXR1cm5zIHRoZSBtYXBwZWQgZmlsZS4KIC8vIFRo
aXMgZnVuY3Rpb24gZmFpbHMgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIGZpbGUgYXQgdGhlIGRlc3Rp
bmF0aW9uIHBhdGguCi1XVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVuY3Rpb248dm9pZChjb25z
dCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYpPiYmIGFwcGx5LCBQbGF0
Zm9ybUZpbGVIYW5kbGUqID0gbnVsbHB0cik7CitXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmls
ZURhdGEgbWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVu
Y3Rpb248dm9pZChjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+Jik+
JiYgYXBwbHksIFBsYXRmb3JtRmlsZUhhbmRsZSogPSBudWxscHRyKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgRmlsZVN5c3RlbUltcGwKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93
dGYvU0hBMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU0hBMS5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL1NIQTEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NiwxMCArNDYsMTAgQEAgU0hBMTo6U0hBMSgpCiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNM
QVJBVElPTlNfRU5ECiB9CiAKLXZvaWQgU0hBMTo6YWRkQnl0ZXMoY29uc3QgdWludDhfdCogaW5w
dXQsIHNpemVfdCBsZW5ndGgpCit2b2lkIFNIQTE6OmFkZEJ5dGVzKFNwYW48Y29uc3Qgc3RkOjpi
eXRlPiBpbnB1dCkKIHsKICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgot
ICAgIENDX1NIQTFfVXBkYXRlKCZtX2NvbnRleHQsIGlucHV0LCBsZW5ndGgpOworICAgIENDX1NI
QTFfVXBkYXRlKCZtX2NvbnRleHQsIGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpKTsKICAgICBB
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIH0KIApAQCAtMTAxLDExICsxMDEsMTEg
QEAgU0hBMTo6U0hBMSgpCiAgICAgcmVzZXQoKTsKIH0KIAotdm9pZCBTSEExOjphZGRCeXRlcyhj
b25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGxlbmd0aCkKK3ZvaWQgU0hBMTo6YWRkQnl0ZXMo
U3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQogewotICAgIHdoaWxlIChsZW5ndGgtLSkgewor
ICAgIGZvciAoYXV0byBieXRlIDogaW5wdXQpIHsKICAgICAgICAgQVNTRVJUKG1fY3Vyc29yIDwg
NjQpOwotICAgICAgICBtX2J1ZmZlclttX2N1cnNvcisrXSA9ICppbnB1dCsrOworICAgICAgICBt
X2J1ZmZlclttX2N1cnNvcisrXSA9IHN0ZDo6dG9faW50ZWdlcjx1aW50OF90PihieXRlKTsKICAg
ICAgICAgKyttX3RvdGFsQnl0ZXM7CiAgICAgICAgIGlmIChtX2N1cnNvciA9PSA2NCkKICAgICAg
ICAgICAgIHByb2Nlc3NCbG9jaygpOwpJbmRleDogU291cmNlL1dURi93dGYvU0hBMS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NIQTEuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dURi93dGYvU0hBMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgPGFycmF5PgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAt
NDUsMTUgKzQ2LDExIEBAIGNsYXNzIFNIQTEgewogcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBTSEExKCk7CiAKLSAgICB2b2lkIGFkZEJ5dGVzKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
aW5wdXQpCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkQnl0ZXMoU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkZEJ5dGVzKFQmJiBk
YXRhKQogICAgIHsKLSAgICAgICAgYWRkQnl0ZXMoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkp
OworICAgICAgICByZXR1cm4gYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+
KGRhdGEpIH0pKTsKICAgICB9Ci0gICAgdm9pZCBhZGRCeXRlcyhjb25zdCBDU3RyaW5nJiBpbnB1
dCkKLSAgICB7Ci0gICAgICAgIGFkZEJ5dGVzKGlucHV0LmRhdGFBc1VJbnQ4UHRyKCksIGlucHV0
Lmxlbmd0aCgpKTsKLSAgICB9Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkQnl0ZXMo
Y29uc3QgdWludDhfdCogaW5wdXQsIHNpemVfdCBsZW5ndGgpOwogCiAgICAgLy8gU2l6ZSBvZiB0
aGUgU0hBMSBoYXNoCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBjb25zdGV4cHIgc2l6
ZV90IGhhc2hTaXplID0gMjA7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dURi93dGYvVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxMyw2ICs2MTMsNyBAQCBw
cml2YXRlOgogCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBUIFZhbHVlVHlwZTsKKyAgICB0eXBlZGVm
IFQgdmFsdWVfdHlwZTsKIAogICAgIHR5cGVkZWYgVCogaXRlcmF0b3I7CiAgICAgdHlwZWRlZiBj
b25zdCBUKiBjb25zdF9pdGVyYXRvcjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNl
L1BlcnNpc3RlbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNp
c3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTcsNyArNTcsNyBAQCB2b2lkIENvZGVyPENTdHJpbmc+OjplbmNvZGUoRW5jb2RlciYgZW5j
CiAKICAgICB1aW50MzJfdCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAgZW5jb2RlciA8
PCBsZW5ndGg7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RyaW5nLmRhdGFB
c1VJbnQ4UHRyKCksIGxlbmd0aCk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEo
c3RyaW5nLmJ5dGVzKCkpOwogfQogCiBzdGQ6Om9wdGlvbmFsPENTdHJpbmc+IENvZGVyPENTdHJp
bmc+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKQEAgLTc4LDcgKzc4LDcgQEAgc3RkOjpvcHRp
b25hbDxDU3RyaW5nPiBDb2RlcjxDU3RyaW5nPjo6ZAogCiAgICAgY2hhciogYnVmZmVyOwogICAg
IENTdHJpbmcgc3RyaW5nID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZCgqbGVuZ3RoLCBidWZm
ZXIpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgKmxlbmd0aCkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgcmVpbnRlcnByZXRfY2FzdDxzdGQ6OmJ5dGUqPihidWZm
ZXIpLCAqbGVuZ3RoIH0pKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgcmV0
dXJuIHN0cmluZzsKQEAgLTk2LDExICs5Niw3IEBAIHZvaWQgQ29kZXI8U3RyaW5nPjo6ZW5jb2Rl
KEVuY29kZXImIGVuY28KICAgICBib29sIGlzOEJpdCA9IHN0cmluZy5pczhCaXQoKTsKIAogICAg
IGVuY29kZXIgPDwgbGVuZ3RoIDw8IGlzOEJpdDsKLQotICAgIGlmIChpczhCaXQpCi0gICAgICAg
IGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBsZW5n
dGgpOwotICAgIGVsc2UKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnMxNigpKSwgbGVu
Z3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEo
c3RyaW5nLmJ5dGVzKCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4K
QEAgLTExMiw3ICsxMDgsNyBAQCBzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBk
ZWNvCiAKICAgICBDaGFyYWN0ZXJUeXBlKiBidWZmZXI7CiAgICAgU3RyaW5nIHN0cmluZyA9IFN0
cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZm
ZXIpLCBsZW5ndGggKiBzaXplb2YoQ2hhcmFjdGVyVHlwZSkpKQorICAgIGlmICghZGVjb2Rlci5k
ZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpieXRlKj4o
YnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJhY3RlclR5cGUpIH0pKQogICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwogICAgIAogICAgIHJldHVybiBzdHJpbmc7CkBAIC0xNDIsMTMgKzEz
OCwxMyBAQCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gQ29kZXI8U3RyaW5nPjo6ZGVjCiAKIHZvaWQg
Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNIQTE6
OkRpZ2VzdCYgZGlnZXN0KQogewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGRp
Z2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShkaWdlc3QpOwogfQogCiBzdGQ6Om9wdGlvbmFsPFNIQTE6OkRpZ2VzdD4gQ29kZXI8
U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgU0hBMTo6RGln
ZXN0IHRtcDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHRtcC5kYXRh
KCksIHNpemVvZih0bXApKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHRtcCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgcmV0dXJuIHRtcDsKIH0K
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmgJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3Rl
bnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw3IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5j
b2RlciYgZW5jb2RlciwgY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQog
ICAgIHsKICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odmVjdG9yLnNp
emUoKSk7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6ZSgpICogc2l6
ZW9mKFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEodmVjdG9yKTsK
ICAgICB9CiAgICAgCiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5Pj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCkBAIC0xNzMsNyArMTczLDcgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAgICAgICBWZWN0b3I8VCwg
aW5saW5lQ2FwYWNpdHk+IHRlbXA7CiAgICAgICAgIHRlbXAuZ3JvdyhzaXplKTsKIAotICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDhfdCo+KHRlbXAuZGF0YSgpKSwgc2l6ZSAqIHNpemVvZihUKSkpCisgICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEodGVtcCkpCiAgICAgICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogCiAgICAgICAgIHJldHVybiB0ZW1wOwpJbmRleDogU291cmNlL1dURi93dGYv
cGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmNwcAkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSwyMyArMzEsMjEgQEAKIG5hbWVzcGFjZSBXVEYgewogbmFtZXNw
YWNlIFBlcnNpc3RlbmNlIHsKIAotRGVjb2Rlcjo6RGVjb2Rlcihjb25zdCB1aW50OF90KiBidWZm
ZXIsIHNpemVfdCBidWZmZXJTaXplKQotICAgIDogbV9idWZmZXIoYnVmZmVyKQotICAgICwgbV9i
dWZmZXJQb3NpdGlvbihidWZmZXIpCi0gICAgLCBtX2J1ZmZlckVuZChidWZmZXIgKyBidWZmZXJT
aXplKQorRGVjb2Rlcjo6RGVjb2RlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnVmZmVyKQorICAg
IDogbV9idWZmZXIoYnVmZmVyLmRhdGEoKSkKKyAgICAsIG1fYnVmZmVyUG9zaXRpb24oYnVmZmVy
LmRhdGEoKSkKKyAgICAsIG1fYnVmZmVyRW5kKGJ1ZmZlci5kYXRhKCkgKyBidWZmZXIuc2l6ZSgp
KQogewogfQogCi1EZWNvZGVyOjp+RGVjb2RlcigpCi17Ci19CitEZWNvZGVyOjp+RGVjb2Rlcigp
ID0gZGVmYXVsdDsKIAogYm9vbCBEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWlu
KHNpemVfdCBzaXplKSBjb25zdAogewogICAgIHJldHVybiBzaXplIDw9IHN0YXRpY19jYXN0PHNp
emVfdD4obV9idWZmZXJFbmQgLSBtX2J1ZmZlclBvc2l0aW9uKTsKIH0KIAotY29uc3QgdWludDhf
dCogRGVjb2Rlcjo6YnVmZmVyUG9pbnRlckZvckRpcmVjdFJlYWQoc2l6ZV90IHNpemUpCitjb25z
dCBzdGQ6OmJ5dGUqIERlY29kZXI6OmJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFkKHNpemVfdCBz
aXplKQogewogICAgIGlmICghYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihzaXplKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC01NSwxNiArNTMsMTYgQEAgY29uc3QgdWludDhfdCog
RGVjb2Rlcjo6YnVmZmVyUG9pbnRlckZvcgogICAgIGF1dG8gZGF0YSA9IG1fYnVmZmVyUG9zaXRp
b247CiAgICAgbV9idWZmZXJQb3NpdGlvbiArPSBzaXplOwogCi0gICAgRW5jb2Rlcjo6dXBkYXRl
Q2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgZGF0YSwgc2l6ZSk7CisgICAgRW5jb2Rlcjo6dXBkYXRl
Q2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgU3BhbiB7IGRhdGEsIHNpemUgfSk7CiAgICAgcmV0dXJu
IGRhdGE7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3Qq
IGRhdGEsIHNpemVfdCBzaXplKQorYm9vbCBEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEo
U3BhbjxzdGQ6OmJ5dGU+IGRhdGEpCiB7Ci0gICAgYXV0byBidWZmZXIgPSBidWZmZXJQb2ludGVy
Rm9yRGlyZWN0UmVhZChzaXplKTsKKyAgICBhdXRvIGJ1ZmZlciA9IGJ1ZmZlclBvaW50ZXJGb3JE
aXJlY3RSZWFkKGRhdGEuc2l6ZSgpKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIG1lbWNweShkYXRhLCBidWZmZXIsIHNpemUpOworICAgIG1lbWNweShkYXRh
LmRhdGEoKSwgYnVmZmVyLCBkYXRhLnNpemUoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTEzOSw3ICsxMzcsNyBAQCBib29sIERlY29kZXI6OnZlcmlmeUNoZWNrc3VtKCkKICAgICBtX3No
YTEuY29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2VzdCBzYXZlZEhh
c2g7Ci0gICAgaWYgKCFkZWNvZGVGaXhlZExlbmd0aERhdGEoc2F2ZWRIYXNoLmRhdGEoKSwgc2l6
ZW9mKHNhdmVkSGFzaCkpKQorICAgIGlmICghZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHNhdmVkSGFz
aCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBjb21wdXRlZEhhc2ggPT0g
c2F2ZWRIYXNoOwpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERl
Y29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0
ZW50RGVjb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0
ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBA
CiAKICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9TSEExLmg+Cisj
aW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVu
dENvZGVyLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMzUsNyArMzYsMTIgQEAgbmFtZXNwYWNl
IFBlcnNpc3RlbmNlIHsKIGNsYXNzIERlY29kZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgotICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyKGNvbnN0IHVpbnQ4
X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IERlY29kZXIoVCYmIGRhdGEpCisgICAgICAgIDogRGVjb2RlciB7IGFzQnl0ZXMoU3BhbiB7IHN0
ZDo6Zm9yd2FyZDxUPihkYXRhKSB9KSB9CisgICAgeworICAgIH0KKworICAgIFdURl9FWFBPUlRf
UFJJVkFURSBEZWNvZGVyKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIH5EZWNvZGVyKCk7CiAKICAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4g
bV9idWZmZXJFbmQgLSBtX2J1ZmZlcjsgfQpAQCAtNDMsNyArNDksMTEgQEAgcHVibGljOgogCiAg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIHZlcmlmeUNoZWNr
c3VtKCk7CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wg
ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqLCBzaXplX3QpOworICAgIFdURl9FWFBPUlRf
UFJJVkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVGaXhlZExlbmd0aERhdGEoU3Bh
bjxzdGQ6OmJ5dGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIGRlY29kZUZpeGVk
TGVuZ3RoRGF0YShUJiYgZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVGaXhlZExl
bmd0aERhdGEoYXNXcml0YWJsZUJ5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSkp
OworICAgIH0KIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVyYXRvcj4+KHN0
ZDo6b3B0aW9uYWw8Ym9vbD4mKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVjb2RlciYgb3Bl
cmF0b3I+PihzdGQ6Om9wdGlvbmFsPHVpbnQ4X3Q+Jik7CkBAIC04NCw3ICs5NCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIG51bUVsZW1lbnRzIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6
ZV90Pjo6bWF4KCkgLyBzaXplb2YoVCkgJiYgYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihu
dW1FbGVtZW50cyAqIHNpemVvZihUKSk7CiAgICAgfQogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRF
IFdBUk5fVU5VU0VEX1JFVFVSTiBjb25zdCB1aW50OF90KiBidWZmZXJQb2ludGVyRm9yRGlyZWN0
UmVhZChzaXplX3QgbnVtQnl0ZXMpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBXQVJOX1VOVVNF
RF9SRVRVUk4gY29uc3Qgc3RkOjpieXRlKiBidWZmZXJQb2ludGVyRm9yRGlyZWN0UmVhZChzaXpl
X3QgbnVtQnl0ZXMpOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSVBDRGVjb2RlciA9
IGZhbHNlOwogCkBAIC05Miw5ICsxMDIsOSBAQCBwcml2YXRlOgogICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWlu
KHNpemVfdCkgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4gRGVjb2RlciYgZGVj
b2RlTnVtYmVyKHN0ZDo6b3B0aW9uYWw8VHlwZT4mKTsKIAotICAgIGNvbnN0IHVpbnQ4X3QqIG1f
YnVmZmVyOwotICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyUG9zaXRpb247Ci0gICAgY29uc3Qg
dWludDhfdCogbV9idWZmZXJFbmQ7CisgICAgY29uc3Qgc3RkOjpieXRlKiBtX2J1ZmZlcjsKKyAg
ICBjb25zdCBzdGQ6OmJ5dGUqIG1fYnVmZmVyUG9zaXRpb247CisgICAgY29uc3Qgc3RkOjpieXRl
KiBtX2J1ZmZlckVuZDsKIAogICAgIFNIQTEgbV9zaGExOwogfTsKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5jcHAJKHJldmlzaW9uIDI3
ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzEsMzQgKzMxLDM0IEBACiBuYW1lc3BhY2UgV1RGIHsKIG5h
bWVzcGFjZSBQZXJzaXN0ZW5jZSB7CiAKLUVuY29kZXI6OkVuY29kZXIoKQotewotfQotCi1FbmNv
ZGVyOjp+RW5jb2RlcigpCi17Ci19CitFbmNvZGVyOjpFbmNvZGVyKCkgPSBkZWZhdWx0OworRW5j
b2Rlcjo6fkVuY29kZXIoKSA9IGRlZmF1bHQ7CiAKLXVpbnQ4X3QqIEVuY29kZXI6Omdyb3coc2l6
ZV90IHNpemUpCitzdGQ6OmJ5dGUqIEVuY29kZXI6Omdyb3coc2l6ZV90IHNpemUpCiB7CiAgICAg
c2l6ZV90IG5ld1Bvc2l0aW9uID0gbV9idWZmZXIuc2l6ZSgpOwogICAgIG1fYnVmZmVyLmdyb3co
bV9idWZmZXIuc2l6ZSgpICsgc2l6ZSk7CiAgICAgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKSArIG5l
d1Bvc2l0aW9uOwogfQogCi12b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yRGF0YShTSEEx
JiBzaGExLCBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3ZvaWQgRW5jb2Rlcjo6
dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmIHNoYTEsIFNwYW48Y29uc3QgdWludDhfdD4gZGF0
YSkKK3sKKyAgICByZXR1cm4gdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKHNoYTEsIGFzQnl0ZXMoZGF0
YSkpOworfQorCit2b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yRGF0YShTSEExJiBzaGEx
LCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKICAgICBhdXRvIHR5cGVTYWx0ID0gU2Fs
dDx1aW50OF90Kj46OnZhbHVlOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7Ci0gICAgc2hhMS5hZGRCeXRl
cyhkYXRhLCBzaXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmdHlwZVNhbHQsIDEgfSk7
CisgICAgc2hhMS5hZGRCeXRlcyhkYXRhKTsKIH0KIAotdm9pZCBFbmNvZGVyOjplbmNvZGVGaXhl
ZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCit2b2lkIEVuY29k
ZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsK
LSAgICB1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhLCBzaXplKTsKKyAgICB1cGRh
dGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhKTsKIAotICAgIHVpbnQ4X3QqIGJ1ZmZlciA9
IGdyb3coc2l6ZSk7Ci0gICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7CisgICAgYXV0byog
YnVmZmVyID0gZ3JvdyhkYXRhLnNpemUoKSk7CisgICAgbWVtY3B5KGJ1ZmZlciwgZGF0YS5kYXRh
KCksIGRhdGEuc2l6ZSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KQEAgLTY2LDcg
KzY2LDcgQEAgRW5jb2RlciYgRW5jb2Rlcjo6ZW5jb2RlTnVtYmVyKFR5cGUgdmFsdQogewogICAg
IEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKG1fc2hhMSwgdmFsdWUpOwogCi0gICAg
dWludDhfdCogYnVmZmVyID0gZ3JvdyhzaXplb2YoVHlwZSkpOworICAgIGF1dG8qIGJ1ZmZlciA9
IGdyb3coc2l6ZW9mKFR5cGUpKTsKICAgICBtZW1jcHkoYnVmZmVyLCAmdmFsdWUsIHNpemVvZihU
eXBlKSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQpAQCAtMTI1LDcgKzEyNSw3IEBAIHZvaWQgRW5j
b2Rlcjo6ZW5jb2RlQ2hlY2tzdW0oKQogewogICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwogICAgIG1f
c2hhMS5jb21wdXRlSGFzaChoYXNoKTsKLSAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEoaGFzaC5k
YXRhKCksIGhhc2guc2l6ZSgpKTsKKyAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEoaGFzaCk7CiB9
CiAKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVu
Y29kZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2Uv
UGVyc2lzdGVudEVuY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAj
aW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvU0hBMS5oPgorI2luY2x1
ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9w
ZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaD4KIApAQCAtNDMsNyArNDQsMTEgQEAgcHVibGlj
OgogICAgIFdURl9FWFBPUlRfUFJJVkFURSB+RW5jb2RlcigpOwogCiAgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZW5jb2RlQ2hlY2tzdW0oKTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCosIHNpemVfdCk7CisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48Y29uc3Qgc3Rk
OjpieXRlPik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBlbmNvZGVGaXhlZExlbmd0
aERhdGEoVCYmIGRhdGEpCisgICAgeworICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEoYXNC
eXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pKTsKKyAgICB9CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZW51bTxUPjo6dmFsdWU+
KiA9IG51bGxwdHI+CiAgICAgRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBUJiB0KQpAQCAtNzAs
MjMgKzc1LDIyIEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRW5jb2RlciYgb3Bl
cmF0b3I8PChmbG9hdCk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIEVuY29kZXImIG9wZXJhdG9y
PDwoZG91YmxlKTsKIAotICAgIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJu
IG1fYnVmZmVyLmRhdGEoKTsgfQotICAgIHNpemVfdCBidWZmZXJTaXplKCkgY29uc3QgeyByZXR1
cm4gbV9idWZmZXIuc2l6ZSgpOyB9Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsK
KyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9idWZm
ZXI7IH0KKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdXBkYXRlQ2hl
Y2tzdW1Gb3JEYXRhKFNIQTEmLCBTcGFuPGNvbnN0IHVpbnQ4X3Q+KTsKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBTcGFuPGNv
bnN0IHN0ZDo6Ynl0ZT4pOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPiBzdGF0aWMgdm9p
ZCB1cGRhdGVDaGVja3N1bUZvck51bWJlcihTSEExJiwgVHlwZSk7CiAKICAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNJUENFbmNvZGVyID0gZmFsc2U7CiAKIHByaXZhdGU6Ci0KICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUeXBlPiBFbmNvZGVyJiBlbmNvZGVOdW1iZXIoVHlwZSk7CiAKLSAgICB1
aW50OF90KiBncm93KHNpemVfdCk7CisgICAgc3RkOjpieXRlKiBncm93KHNpemVfdCk7CiAKICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4gc3RydWN0IFNhbHQ7CiAKLSAgICBWZWN0b3I8dWlu
dDhfdCwgNDA5Nj4gbV9idWZmZXI7CisgICAgVmVjdG9yPHN0ZDo6Ynl0ZSwgNDA5Nj4gbV9idWZm
ZXI7CiAgICAgU0hBMSBtX3NoYTE7CiB9OwogCkBAIC0xMDYsOCArMTEwLDggQEAgdGVtcGxhdGUg
PHR5cGVuYW1lIFR5cGU+CiB2b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKFNI
QTEmIHNoYTEsIFR5cGUgdmFsdWUpCiB7CiAgICAgYXV0byB0eXBlU2FsdCA9IFNhbHQ8VHlwZT46
OnZhbHVlOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnR5
cGVTYWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7Ci0gICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPigmdmFsdWUpLCBzaXplb2YodmFsdWUpKTsKKyAgICBzaGExLmFkZEJ5
dGVzKFNwYW4geyAmdHlwZVNhbHQsIDEgfSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgJnZh
bHVlLCAxIH0pOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE0MCwzOSArMTQwLDM5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0
YXRpYyAKICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSAnPSc7CiB9CiAK
LXN0YXRpYyBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoY29uc3QgdWludDhf
dCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9s
aWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4g
YmFzZTY0RW5jb2RlSW50ZXJuYWwoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0LCBCYXNlNjRF
bmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewotICAgIGF1dG8gZGVz
dGluYXRpb25MZW5ndGggPSBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShpbnB1dExlbmd0aCwg
cG9saWN5KTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uTGVuZ3RoID0gY2FsY3VsYXRlQmFzZTY0RW5j
b2RlZFNpemUoaW5wdXQuc2l6ZSgpLCBwb2xpY3kpOwogICAgIGlmICghZGVzdGluYXRpb25MZW5n
dGgpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBWZWN0b3I8dWludDhfdD4gZGVzdGluYXRp
b25WZWN0b3IoZGVzdGluYXRpb25MZW5ndGgpOwotICAgIGJhc2U2NEVuY29kZUludGVybmFsKGlu
cHV0RGF0YUJ1ZmZlciwgaW5wdXRMZW5ndGgsIGRlc3RpbmF0aW9uVmVjdG9yLmRhdGEoKSwgZGVz
dGluYXRpb25MZW5ndGgsIHBvbGljeSwgbWFwKTsKKyAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXpl
KCksIGRlc3RpbmF0aW9uVmVjdG9yLmRhdGEoKSwgZGVzdGluYXRpb25MZW5ndGgsIHBvbGljeSwg
bWFwKTsKICAgICByZXR1cm4gZGVzdGluYXRpb25WZWN0b3I7CiB9CiAKLXZvaWQgYmFzZTY0RW5j
b2RlKGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIFVD
aGFyKiBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uTGVuZ3RoLCBC
YXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordm9pZCBiYXNl
NjRFbmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0LCBVQ2hhciogZGVzdGluYXRpb25E
YXRhQnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkxlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5
IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKICAgICBpZiAoIWRlc3RpbmF0aW9uTGVu
Z3RoKQogICAgICAgICByZXR1cm47Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nh
c3Q8Y29uc3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBkZXN0aW5h
dGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7CisgICAgYmFz
ZTY0RW5jb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXQu
ZGF0YSgpKSwgaW5wdXQuc2l6ZSgpLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0aW9u
TGVuZ3RoLCBwb2xpY3ksIG1hcCk7CiB9CiAKLXZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQq
IGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIExDaGFyKiBkZXN0aW5hdGlv
bkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uTGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xp
Y3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordm9pZCBiYXNlNjRFbmNvZGUoU3Bhbjxj
b25zdCBzdGQ6OmJ5dGU+IGlucHV0LCBMQ2hhciogZGVzdGluYXRpb25EYXRhQnVmZmVyLCB1bnNp
Z25lZCBkZXN0aW5hdGlvbkxlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0
RW5jb2RlTWFwIG1hcCkKIHsKICAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQogICAgICAgICBy
ZXR1cm47Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGlucHV0RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIs
IGRlc3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7CisgICAgYmFzZTY0RW5jb2RlSW50ZXJu
YWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQu
c2l6ZSgpLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ks
IG1hcCk7CiB9CiAKLVZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCB2
b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNlNjRFbmNvZGVQ
b2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQorVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2
NEVuY29kZVRvVmVjdG9yKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwgQmFzZTY0RW5jb2Rl
UG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gYmFzZTY0
RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZl
ciksIGlucHV0TGVuZ3RoLCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZUlu
dGVybmFsKGlucHV0LCBwb2xpY3ksIG1hcCk7CiB9CiAKLVN0cmluZyBiYXNlNjRFbmNvZGVUb1N0
cmluZyhjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBC
YXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQorU3RyaW5nIGJh
c2U2NEVuY29kZVRvU3RyaW5nKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwgQmFzZTY0RW5j
b2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gbWFr
ZVN0cmluZyhiYXNlNjRFbmNvZGVkKGlucHV0RGF0YUJ1ZmZlciwgaW5wdXRMZW5ndGgsIHBvbGlj
eSwgbWFwKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChpbnB1dCwgcG9s
aWN5LCBtYXApKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIHN0ZDo6b3B0aW9u
YWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGVJbnRlcm5hbChjb25zdCBUKiBpbnB1dERh
dGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0
aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKQEAgLTI1NCw4NCArMjU0LDI3IEBA
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBzdGQ6Om9wdGlvbmEKICAgICByZXR1cm4gZGVz
dGluYXRpb247CiB9CiAKLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNv
ZGUoY29uc3QgU3RyaW5nJiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9w
dGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW5w
dXQubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGggfHwgaW5wdXQuaXM4Qml0KCkpCi0gICAgICAg
IHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgs
IG9wdGlvbnMsIG1hcCk7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNo
YXJhY3RlcnMxNigpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8
VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3RyaW5nVmlldyBpbnB1dCwgT3B0aW9uU2V0
PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0g
ICAgdW5zaWduZWQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGggfHwg
aW5wdXQuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1
dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7Ci0gICAgcmV0dXJuIGJhc2U2
NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIG9wdGlvbnMsIG1h
cCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+
IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgaWYgKGlucHV0LnNpemUoKSA+
IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKLSAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuZGF0YSgp
LCBpbnB1dC5zaXplKCksIG9wdGlvbnMsIG1hcCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVjdG9y
PHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCwgT3B0aW9u
U2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCitz
dGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKFNwYW48Y29uc3Qgc3Rk
OjpieXRlPiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJh
c2U2NERlY29kZU1hcCBtYXApCiB7CiAgICAgaWYgKGlucHV0LnNpemUoKSA+IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
ICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50OF90Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpLCBvcHRpb25zLCBtYXApOwogfQog
Ci1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IHVpbnQ4
X3QqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+
IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgcmV0dXJuIGJhc2U2NERlY29k
ZUludGVybmFsKGRhdGEsIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKLX0KLQotc3RkOjpvcHRpb25h
bDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25l
ZCBsZW5ndGgsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRpb25zLCBCYXNlNjRE
ZWNvZGVNYXAgbWFwKQotewotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oZGF0YSksIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKLX0K
LQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBT
dHJpbmcmIGlucHV0KQorc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29k
ZShjb25zdCBTdHJpbmcmIGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0
aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBpbnB1
dC5sZW5ndGgoKTsKICAgICBpZiAoIWxlbmd0aCB8fCBpbnB1dC5pczhCaXQoKSkKLSAgICAgICAg
cmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnM4KCksIGxlbmd0aCwg
eyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVy
bmFsKGlucHV0LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIHsgfSwgQmFzZTY0RGVjb2RlTWFwOjpV
UkwpOworICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVy
czgoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRl
cm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOwogfQogCi1z
dGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFN0cmluZ1ZpZXcg
aW5wdXQpCitzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKFN0cmlu
Z1ZpZXcgaW5wdXQsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRpb25zLCBCYXNl
NjREZWNvZGVNYXAgbWFwKQogewogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgp
OwogICAgIGlmICghbGVuZ3RoIHx8IGlucHV0LmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gYmFz
ZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCB7IH0sIEJhc2U2
NERlY29kZU1hcDo6VVJMKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQu
Y2hhcmFjdGVyczE2KCksIGxlbmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7Ci19Ci0K
LXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBpbnB1dCkKLXsKLSAgICBpZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5kYXRhKCksIGlucHV0LnNp
emUoKSwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVj
dG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCkK
LXsKLSAgICBpZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46
Om1heCgpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHJldHVybiBiYXNlNjRE
ZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRh
KCkpLCBpbnB1dC5zaXplKCksIHsgfSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOwotfQotCi1zdGQ6
Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IHVpbnQ4X3Qq
IGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJu
YWwoZGF0YSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKLX0KLQotc3RkOjpv
cHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBjaGFyKiBkYXRh
LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBsZW5ndGgsIHsgfSwgQmFzZTY0
RGVjb2RlTWFwOjpVUkwpOworICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5w
dXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOworICAgIHJldHVybiBiYXNl
NjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBvcHRpb25zLCBt
YXApOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQv
QmFzZTY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuaAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNs
dWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCkBAIC01Niw1NCArNTcsMzUgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhp
bXVtQmFzZTY0TAogLy8gUmF0aGVyIHRoYW4gYmVpbmcgcGVyZmVjdGx5IHByZWNpc2UsIHRoaXMg
aXMgYSBiaXQgY29uc2VydmF0aXZlLgogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhpbXVt
QmFzZTY0RW5jb2RlcklucHV0QnVmZmVyU2l6ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQ+OjptYXgoKSAvIDc3ICogNzYgLyA0ICogMyAtIDI7CiAKLVdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQsIFVDaGFyKiwgdW5zaWduZWQs
IEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMs
IEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci1XVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVkLCBMQ2hhcios
IHVuc2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90
SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwor
V1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRl
PiwgVUNoYXIqIGRlc3RpbmF0aW9uQnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkJ1ZmZlclNp
emUsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRM
RnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+LCBMQ2hh
ciogZGVzdGluYXRpb25CdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uQnVmZmVyU2l6ZSwgQmFz
ZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFz
ZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKIAotV1RGX0VYUE9SVF9Q
UklWQVRFIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCB2b2lkKiwg
dW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJ
bnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci1W
ZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExG
cywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKLVZlY3Rvcjx1
aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8Y2hhcj4mLCBCYXNlNjRF
bmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRF
bmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwotVmVjdG9yPHVpbnQ4X3Q+IGJh
c2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IENTdHJpbmcmLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBC
YXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNl
NjRFbmNvZGVNYXA6OkRlZmF1bHQpOwotCi1XVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIGJhc2U2
NEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgQmFzZTY0RW5jb2RlUG9saWN5
ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0g
QmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKLVN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhj
b25zdCBWZWN0b3I8dWludDhfdD4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQ
b2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6
OkRlZmF1bHQpOwotU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3RvcjxjaGFy
PiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRM
RnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci1TdHJpbmcg
YmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgQ1N0cmluZyYsIEJhc2U2NEVuY29kZVBvbGljeSA9
IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJh
c2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgVmVjdG9yPHVpbnQ4
X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKFNwYW48Y29uc3Qgc3RkOjpieXRlPiwgQmFzZTY0RW5j
b2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5j
b2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihUJiYsIEJhc2U2NEVuY29kZVBv
bGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1h
cCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CiAKK1dURl9FWFBPUlRfUFJJVkFURSBTdHJp
bmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+LCBCYXNlNjRFbmNv
ZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNv
ZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
U3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKFQmJiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFz
ZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0
RW5jb2RlTWFwOjpEZWZhdWx0KTsKKworV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0aW9uYWw8
VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+LCBPcHRp
b25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2
NERlY29kZU1hcDo6RGVmYXVsdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxW
ZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBTdHJpbmcmLCBPcHRpb25TZXQ8QmFz
ZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1h
cDo6RGVmYXVsdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWlu
dDhfdD4+IGJhc2U2NERlY29kZShTdHJpbmdWaWV3LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0
aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7
Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2
NERlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0
aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7
Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2
NERlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9u
cz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7Ci1X
VEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERl
Y29kZShjb25zdCB1aW50OF90KiwgdW5zaWduZWQsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRp
b25zPiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsK
LVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0
RGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlv
bnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRlZmF1bHQpOwot
Ci1pbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29k
ZU1hcCBtYXApCi17Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlucHV0LmRhdGEo
KSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7Ci19Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
dGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6
cmVtb3ZlX3JlZmVyZW5jZV90PFQ+PiwgU3RyaW5nPiAmJiAhc3RkOjppc19zYW1lX3Y8c3RkOjpy
ZW1vdmVfY29uc3RfdDxzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxUPj4sIFN0cmluZ1ZpZXc+Piog
PSBudWxscHRyPgorc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShU
JiYsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFw
ID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKIAotaW5saW5lIFZlY3Rvcjx1aW50OF90PiBi
YXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBCYXNlNjRFbmNv
ZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordGVtcGxhdGU8dHlwZW5hbWUg
VD4gVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKFQmJiBpbnB1dCwgQmFzZTY0
RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4g
YmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSwg
bWFwKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoYXNCeXRlcyhTcGFuIHsgc3Rk
Ojpmb3J3YXJkPFQ+KGlucHV0KSB9KSwgcG9saWN5LCBtYXApOwogfQogCi1pbmxpbmUgVmVjdG9y
PHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IENTdHJpbmcmIGlucHV0LCBCYXNl
NjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKFQmJiBpbnB1dCwgQmFzZTY0RW5j
b2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gYmFz
ZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwgcG9saWN5LCBt
YXApOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhhc0J5dGVzKFNwYW4geyBzdGQ6
OmZvcndhcmQ8VD4oaW5wdXQpIH0pLCBwb2xpY3ksIG1hcCk7CiB9CiAKLWlubGluZSBTdHJpbmcg
YmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCwgQmFzZTY0
RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZV92PHN0ZDo6cmVtb3ZlX2NvbnN0
X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmc+ICYmICFzdGQ6OmlzX3NhbWVf
djxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+PiwgU3RyaW5n
Vmlldz4+Kj4KK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoVCYm
IGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVj
b2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5wdXQuZGF0
YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSwgbWFwKTsKLX0KLQotaW5saW5lIFN0cmluZyBiYXNl
NjRFbmNvZGVUb1N0cmluZyhjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBCYXNlNjRFbmNvZGVQ
b2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQotewotICAgIHJldHVybiBiYXNlNjRF
bmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5LCBtYXApOwot
fQotCi1pbmxpbmUgU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IENTdHJpbmcmIGlu
cHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQotewot
ICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0Lmxlbmd0
aCgpLCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZShhc0J5dGVzKFNwYW4g
eyBzdGQ6OmZvcndhcmQ8VD4oaW5wdXQpIH0pLCBvcHRpb25zLCBtYXApOwogfQogCiAKQEAgLTEx
Miw2MSArOTQsNTcgQEAgaW5saW5lIFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdAog
Ly8gVGhpcyBmb3JtYXQgdXNlcyAnLScgYW5kICdfJyBpbnN0ZWFkIG9mICcrJyBhbmQgJy8nIHJl
c3BlY3RpdmVseS4KIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVZlY3Rvcjx1
aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihjb25zdCB2b2lkKiwgdW5zaWduZWQpOwot
VmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKGNvbnN0IFZl
Y3RvcjxjaGFyPiYpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKGNv
bnN0IENTdHJpbmcmKTsKK1ZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3RvcihT
cGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVjdG9yPHVpbnQ4
X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKFQmJik7CiAKLVN0cmluZyBiYXNlNjRVUkxFbmNv
ZGVUb1N0cmluZyhjb25zdCB2b2lkKiwgdW5zaWduZWQpOwotU3RyaW5nIGJhc2U2NFVSTEVuY29k
ZVRvU3RyaW5nKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOwotU3RyaW5nIGJhc2U2NFVSTEVuY29k
ZVRvU3RyaW5nKGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRv
U3RyaW5nKGNvbnN0IENTdHJpbmcmKTsKK1N0cmluZyBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhT
cGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGJhc2U2
NFVSTEVuY29kZVRvU3RyaW5nKFQmJik7CiAKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlv
bmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFN0cmluZyYpOwotV1RG
X0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxE
ZWNvZGUoU3RyaW5nVmlldyk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0
b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mKTsKLVdU
Rl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJM
RGVjb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0
aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgdWludDhfdCosIHVu
c2lnbmVkKTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90
Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCk7CitzdGQ6Om9wdGlvbmFs
PFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7
CitzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFN0
cmluZyYpOworc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShT
dHJpbmdWaWV3KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6
aXNfc2FtZV92PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+
LCBTdHJpbmc+ICYmICFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVt
b3ZlX3JlZmVyZW5jZV90PFQ+PiwgU3RyaW5nVmlldz4+KiA9IG51bGxwdHI+CitzdGQ6Om9wdGlv
bmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFQmJik7CiAKLWlubGluZSBWZWN0
b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3Qgdm9pZCogaW5wdXQsIHVu
c2lnbmVkIGxlbmd0aCkKK2lubGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9W
ZWN0b3IoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRF
bmNvZGVUb1ZlY3RvcihpbnB1dCwgbGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFz
ZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1
dCwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKIH0KIAot
aW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0
b3I8dWludDhfdD4mIGlucHV0KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVjdG9yPHVpbnQ4X3Q+
IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKFQmJiBpbnB1dCkKIHsKLSAgICByZXR1cm4gYmFzZTY0
RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29k
ZVRvVmVjdG9yKHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCksIEJhc2U2NEVuY29kZVBvbGljeTo6VVJM
LCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBWZWN0b3I8dWludDhfdD4gYmFz
ZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCkKK2lubGluZSBT
dHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0
KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRhKCksIGlucHV0
LnNpemUoKSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsK
KyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5wdXQsIEJhc2U2NEVuY29kZVBvbGlj
eTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBWZWN0b3I8dWludDhf
dD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgQ1N0cmluZyYgaW5wdXQpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoVCYmIGlucHV0KQog
ewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRhKCksIGlucHV0Lmxl
bmd0aCgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwor
ICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhzdGQ6OmZvcndhcmQ8VD4oaW5wdXQpLCBC
YXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQogCi1pbmxp
bmUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqIGlucHV0LCB1bnNp
Z25lZCBsZW5ndGgpCitpbmxpbmUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2
NFVSTERlY29kZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJh
c2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LCBsZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeTo6VVJM
LCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZShpbnB1dCwg
eyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBTdHJpbmcgYmFzZTY0VVJM
RW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKK2lubGluZSBzdGQ6
Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFN0cmluZyYg
aW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LmRhdGEoKSwg
aW5wdXQuc2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpV
UkwpOworICAgIHJldHVybiBiYXNlNjREZWNvZGUoaW5wdXQsIHsgfSwgQmFzZTY0RGVjb2RlTWFw
OjpVUkwpOwogfQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0
IFZlY3RvcjxjaGFyPiYgaW5wdXQpCitpbmxpbmUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGJhc2U2NFVSTERlY29kZShTdHJpbmdWaWV3IGlucHV0KQogewotICAgIHJldHVybiBiYXNl
NjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgQmFzZTY0RW5jb2Rl
UG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKKyAgICByZXR1cm4gYmFzZTY0RGVj
b2RlKGlucHV0LCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKIH0KIAotaW5saW5lIFN0cmlu
ZyBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhjb25zdCBDU3RyaW5nJiBpbnB1dCkKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZV92PHN0ZDo6cmVtb3Zl
X2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmc+ICYmICFzdGQ6Omlz
X3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+Piwg
U3RyaW5nVmlldz4+Kj4KK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxE
ZWNvZGUoVCYmIGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1
dC5kYXRhKCksIGlucHV0Lmxlbmd0aCgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0
RW5jb2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjRVUkxEZWNvZGUoYXNCeXRlcyhTcGFu
IHsgc3RkOjpmb3J3YXJkPFQ+KGlucHV0KSB9KSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IHN0YXRpYyBpbmxpbmUgYm9vbCBpc0Jhc2U2NE9yQmFzZTY0VVJMQ2hhcmFj
dGVyKENoYXJhY3RlclR5cGUgYykKQEAgLTIwOCw1NyArMTg2LDM2IEBAIGlubGluZSB1bnNpZ25l
ZCBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2kKIH0KIAogc3RydWN0IEJhc2U2NFNwZWNpZmljYXRp
b24gewotICAgIGNvbnN0IHZvaWQqIGlucHV0RGF0YTsKLSAgICB1bnNpZ25lZCBpbnB1dExlbmd0
aDsKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXREYXRhOwogICAgIEJhc2U2NEVuY29k
ZVBvbGljeSBwb2xpY3k7CiAgICAgQmFzZTY0RW5jb2RlTWFwIG1hcDsKIH07CiAKLWlubGluZSBC
YXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NEVuY29kZWQoY29uc3Qgdm9pZCogaW5wdXREYXRhLCB1
bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9IEJhc2U2NEVu
Y29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCBtYXAgPSBCYXNlNjRF
bmNvZGVNYXA6OkRlZmF1bHQpCi17Ci0gICAgcmV0dXJuIHsgaW5wdXREYXRhLCBpbnB1dExlbmd0
aCwgcG9saWN5LCBtYXAgfTsKLX0KLQotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0
RW5jb2RlZChjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kg
cG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcykKLXsKLSAgICByZXR1
cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5KTsKLX0K
LQotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChjb25zdCBWZWN0b3I8
Y2hhcj4mIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0RW5jb2RlUG9s
aWN5OjpEb05vdEluc2VydExGcykKLXsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5k
YXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5KTsKLX0KLQotaW5saW5lIEJhc2U2NFNwZWNpZmlj
YXRpb24gYmFzZTY0RW5jb2RlZChjb25zdCBDU3RyaW5nJiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9s
aWN5IHBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMpCi17Ci0gICAg
cmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwgcG9saWN5
KTsKLX0KLQotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChjb25z
dCB2b2lkKiBpbnB1dERhdGEsIHVuc2lnbmVkIGlucHV0TGVuZ3RoKQoraW5saW5lIEJhc2U2NFNw
ZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQsIEJh
c2U2NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0
TEZzLCBCYXNlNjRFbmNvZGVNYXAgbWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KQogewot
ICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0RGF0YSwgaW5wdXRMZW5ndGgsIEJhc2U2NEVu
Y29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIHsgaW5w
dXQsIHBvbGljeSwgbWFwIH07CiB9CiAKLWlubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2
NFVSTEVuY29kZWQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChUJiYgaW5wdXQsIEJhc2U2
NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZz
LCBCYXNlNjRFbmNvZGVNYXAgbWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KQogewotICAg
IHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRF
bmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNl
NjRFbmNvZGVkKGFzQnl0ZXMoU3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCkgfSksIHBvbGlj
eSwgbWFwKTsKIH0KIAotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5jb2Rl
ZChjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0KQoraW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24g
YmFzZTY0VVJMRW5jb2RlZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCiB7Ci0gICAgcmV0
dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJhc2U2NEVuY29k
ZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NEVu
Y29kZWQoaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVS
TCk7CiB9CiAKLWlubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NFVSTEVuY29kZWQoY29u
c3QgQ1N0cmluZyYgaW5wdXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBCYXNlNjRTcGVjaWZpY2F0
aW9uIGJhc2U2NFVSTEVuY29kZWQoVCYmIGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNv
ZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIEJhc2U2NEVuY29kZVBvbGljeTo6VVJM
LCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoYXNCeXRl
cyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGlucHV0KSB9KSwgQmFzZTY0RW5jb2RlUG9saWN5OjpV
UkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKIH0KIAogdGVtcGxhdGU8PiBjbGFzcyBTdHJpbmdU
eXBlQWRhcHRlcjxCYXNlNjRTcGVjaWZpY2F0aW9uPiB7CiBwdWJsaWM6CiAgICAgU3RyaW5nVHlw
ZUFkYXB0ZXIoY29uc3QgQmFzZTY0U3BlY2lmaWNhdGlvbiYgYmFzZTY0KQogICAgICAgICA6IG1f
YmFzZTY0IHsgYmFzZTY0IH0KLSAgICAgICAgLCBtX2VuY29kZWRMZW5ndGggeyBjYWxjdWxhdGVC
YXNlNjRFbmNvZGVkU2l6ZShiYXNlNjQuaW5wdXRMZW5ndGgsIGJhc2U2NC5wb2xpY3kpIH0KKyAg
ICAgICAgLCBtX2VuY29kZWRMZW5ndGggeyBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShiYXNl
NjQuaW5wdXREYXRhLnNpemUoKSwgYmFzZTY0LnBvbGljeSkgfQogICAgIHsKICAgICB9CiAKQEAg
LTI2Nyw3ICsyMjQsNyBAQCBwdWJsaWM6CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPiB2b2lkIHdyaXRlVG8oQ2hhcmFjdGVyVHlwZSogZGVzdGluYXRpb24pIGNvbnN0CiAg
ICAgewotICAgICAgICBiYXNlNjRFbmNvZGUobV9iYXNlNjQuaW5wdXREYXRhLCBtX2Jhc2U2NC5p
bnB1dExlbmd0aCwgZGVzdGluYXRpb24sIG1fZW5jb2RlZExlbmd0aCwgbV9iYXNlNjQucG9saWN5
LCBtX2Jhc2U2NC5tYXApOworICAgICAgICBiYXNlNjRFbmNvZGUobV9iYXNlNjQuaW5wdXREYXRh
LCBkZXN0aW5hdGlvbiwgbV9lbmNvZGVkTGVuZ3RoLCBtX2Jhc2U2NC5wb2xpY3ksIG1fYmFzZTY0
Lm1hcCk7CiAgICAgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9DU3Ry
aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9DU3RyaW5nLmgJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KICNpbmNs
dWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvU3Bhbi5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtMzksOSArNDAsMTEgQEAgREVDTEFS
RV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoQwogY2xhc3MgQ1N0cmluZ0J1ZmZlciBm
aW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPENTdHJpbmdCdWZmZXI+IHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihDU3RyaW5nQnVmZmVyKTsKIHB1Ymxp
YzoKLSAgICBjb25zdCBjaGFyKiBkYXRhKCkgeyByZXR1cm4gbXV0YWJsZURhdGEoKTsgfQorICAg
IGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PENTdHJpbmdCdWZm
ZXIqPih0aGlzKS0+bXV0YWJsZURhdGEoKTsgfQogICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7
IHJldHVybiBtX2xlbmd0aDsgfQogCisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGJ5dGVzKCkg
Y29uc3QgeyByZXR1cm4gYXNCeXRlcyhTcGFuIHsgZGF0YSgpLCBsZW5ndGgoKSB9KTsgfQorCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDU3RyaW5nOwogCkBAIC02Niw2ICs2OSwyMCBAQCBw
dWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBDU3RyaW5nIG5ld1VuaW5pdGlh
bGl6ZWQoc2l6ZV90IGxlbmd0aCwgY2hhciomIGNoYXJhY3RlckJ1ZmZlcik7CiAgICAgQ1N0cmlu
ZyhIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IG1fYnVmZmVyKEhhc2hUYWJsZURlbGV0ZWRW
YWx1ZSkgeyB9CiAKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKG1fYnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIG1fYnVmZmVyLT5i
eXRlcygpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFNwYW48c3RkOjpieXRl
PiBtdXRhYmxlQnl0ZXMoKQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8gbXV0YWJsZURhdGEgPSB0
aGlzLT5tdXRhYmxlRGF0YSgpKQorICAgICAgICAgICAgcmV0dXJuIGFzV3JpdGFibGVCeXRlcyhT
cGFuIHsgbXV0YWJsZURhdGEsIG1fYnVmZmVyLT5sZW5ndGgoKSB9KTsKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICB9CisKICAgICBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIHJldHVybiBtX2J1ZmZlciA/IG1fYnVmZmVyLT5kYXRhKCkgOiBudWxscHRyOwpJbmRleDog
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdWaWV3LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYv
d3RmL3RleHQvU3RyaW5nVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5NCw4IEBAIHB1
YmxpYzoKICAgICBjb25zdCBMQ2hhciogY2hhcmFjdGVyczgoKSBjb25zdDsKICAgICBjb25zdCBV
Q2hhciogY2hhcmFjdGVyczE2KCkgY29uc3Q7CiAKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
Ynl0ZXMoKSBjb25zdDsKKwogICAgIGJvb2wgaXNBbGxBU0NJSSgpIGNvbnN0OwogCiAgICAgU3Ry
aW5nIHRvU3RyaW5nKCkgY29uc3Q7CkBAIC00MjQsNiArNDI2LDEzIEBAIGlubGluZSBjb25zdCBV
Q2hhciogU3RyaW5nVmlldzo6Y2hhcmFjdGUKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3Qg
VUNoYXIqPihtX2NoYXJhY3RlcnMpOwogfQogCitpbmxpbmUgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+
IFN0cmluZ1ZpZXc6OmJ5dGVzKCkgY29uc3QKK3sKKyAgICBpZiAoaXM4Qml0KCkpCisgICAgICAg
IHJldHVybiBhc0J5dGVzKFNwYW4geyBjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSB9KTsKKyAgICBy
ZXR1cm4gYXNCeXRlcyhTcGFuIHsgY2hhcmFjdGVyczE2KCksIGxlbmd0aCgpIH0pOworfQorCiBp
bmxpbmUgYm9vbCBTdHJpbmdWaWV3Ojppc0FsbEFTQ0lJKCkgY29uc3QKIHsKICAgICBpZiAoaXM4
Qml0KCkpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHJldmlzaW9uIDI3ODgwOSkKKysr
IFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYg
KzI2LDcgQEAKIAogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5o
PgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQVNDSUlMaXRlcmFs
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KQEAgLTEzNCw2ICsxMzUsNyBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiAhbV9pbXBsIHx8IG1faW1wbC0+aXM4
Qml0KCk7IH0KIAogICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9p
bXBsID8gbV9pbXBsLT5sZW5ndGgoKSAqIChpczhCaXQoKSA/IHNpemVvZihMQ2hhcikgOiBzaXpl
b2YoVUNoYXIpKSA6IDA7IH0KKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25z
dDsKIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBDU3RyaW5nIGFzY2lpKCkgY29uc3Q7CiAgICAg
V1RGX0VYUE9SVF9QUklWQVRFIENTdHJpbmcgbGF0aW4xKCkgY29uc3Q7CkBAIC00ODMsNiArNDg1
LDE2IEBAIHRlbXBsYXRlPD4gaW5saW5lIGNvbnN0IFVDaGFyKiBTdHJpbmc6OmMKICAgICByZXR1
cm4gY2hhcmFjdGVyczE2KCk7CiB9CiAKK2lubGluZSBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gU3Ry
aW5nOjpieXRlcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ltcGwpCisgICAgICAgIHJldHVybiB7
IH07CisKKyAgICBpZiAobV9pbXBsLT5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGFzQnl0ZXMo
U3BhbiB7IG1faW1wbC0+Y2hhcmFjdGVyczgoKSwgbV9pbXBsLT5sZW5ndGgoKSB9KTsKKyAgICBy
ZXR1cm4gYXNCeXRlcyhTcGFuIHsgbV9pbXBsLT5jaGFyYWN0ZXJzMTYoKSwgbV9pbXBsLT5sZW5n
dGgoKSB9KTsKK30KKwogaW5saW5lIFVDaGFyIFN0cmluZzo6Y2hhcmFjdGVyQXQodW5zaWduZWQg
aW5kZXgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ltcGwgfHwgaW5kZXggPj0gbV9pbXBsLT5sZW5n
dGgoKSkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAJKHJldmlzaW9uIDI3
ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzYzLDkgKzM2Myw5IEBAIFN0cmluZyBjcmVhdGVUZW1wb3JhcnlEaXJlY3Rvcnko
KQogICAgIH0pOwogfQogCi1ib29sIHVubWFwVmlld09mRmlsZSh2b2lkKiBidWZmZXIsIHNpemVf
dCkKK2Jvb2wgdW5tYXBWaWV3T2ZGaWxlKFNwYW48c3RkOjpieXRlPiBkYXRhKQogewotICAgIHJl
dHVybiBVbm1hcFZpZXdPZkZpbGUoYnVmZmVyKTsKKyAgICByZXR1cm4gVW5tYXBWaWV3T2ZGaWxl
KGRhdGEuZGF0YSgpKTsKIH0KIAogYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQ
bGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBGaWxlT3Blbk1vZGUgb3Blbk1vZGUsIE1hcHBlZEZp
bGVNb2RlKQpAQCAtMzc0LDcgKzM3NCw3IEBAIGJvb2wgTWFwcGVkRmlsZURhdGE6Om1hcEZpbGVI
YW5kbGUoUGxhdGYKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byBzaXplID0gZmls
ZVNpemUoaGFuZGxlKTsKLSAgICBpZiAoIXNpemUgfHwgKnNpemUgPiBzdGQ6Om51bWVyaWNfbGlt
aXRzPHNpemVfdD46Om1heCgpIHx8ICpzaXplID4gc3RkOjpudW1lcmljX2xpbWl0czxkZWNsdHlw
ZShtX2ZpbGVTaXplKT46Om1heCgpKSB7CisgICAgaWYgKCFzaXplIHx8ICpzaXplID4gc3RkOjpu
dW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSB8fCAqc2l6ZSA+IHN0ZDo6bnVtZXJpY19saW1p
dHM8ZGVjbHR5cGUobV9maWxlRGF0YS5zaXplKCkpPjo6bWF4KCkpIHsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIApAQCAtNDAzLDExICs0MDMsMTIgQEAgYm9vbCBNYXBwZWRGaWxlRGF0
YTo6bWFwRmlsZUhhbmRsZShQbGF0ZgogICAgIGlmICghbWFwcGluZykKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgbV9maWxlRGF0YSA9IE1hcFZpZXdPZkZpbGUobWFwcGluZywgZGVzaXJl
ZEFjY2VzcywgMCwgMCwgKnNpemUpOworICAgIGF1dG8gZGF0YSA9IE1hcFZpZXdPZkZpbGUobWFw
cGluZywgZGVzaXJlZEFjY2VzcywgMCwgMCwgKnNpemUpOwogICAgIENsb3NlSGFuZGxlKG1hcHBp
bmcpOwotICAgIGlmICghbV9maWxlRGF0YSkKKyAgICBpZiAoIWRhdGEpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBtX2ZpbGVTaXplID0gKnNpemU7CisKKyAgICBtX2ZpbGVEYXRhID0gU3Bh
biB7IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpieXRlKj4oZGF0YSksICpzaXplIH07CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBACisyMDIx
LTA2LTExICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBBZG9wdCBT
cGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBbV0lQXQorCisgICAgICAgICogTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxp
Z2h0Lmg6CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHQ6OmVuY29kZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHQ6OmRlY29kZSk6CisgICAgICAgICogTW9kdWxl
cy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6dG9TaGFyZWRCdWZmZXIgY29uc3QpOgorICAgICAgICAq
IE1vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvclJlc3BvbnNlRGF0YS5oOgorICAgICAgICAo
V2ViQ29yZTo6ZW5jb2RlQXJyYXlCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZGVjb2RlQXJy
YXlCdWZmZXIpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlh
bENyZWF0aW9uT3B0aW9ucy5oOgorICAgICAgICAoV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlh
bENyZWF0aW9uT3B0aW9uczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1
dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpQ
dWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKiBN
b2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRXZWJTb2NrZXRBY2NlcHQpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0J1ZmZlclNvdXJjZS5oOgorICAgICAgICAoV2ViQ29yZTo6QnVm
ZmVyU291cmNlOjpieXRlcyBjb25zdCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OmRlY29kZSk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvU2VyaWFsaXplZE5GQS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6U2VyaWFsaXplZE5GQTo6cG9p
bnRlckF0T2Zmc2V0SW5GaWxlIGNvbnN0KToKKyAgICAgICAgKiBjcnlwdG8vbWFjL1NlcmlhbGl6
ZWRDcnlwdG9LZXlXcmFwTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQW5kU3RvcmVN
YXN0ZXJLZXkpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omhh
c2hQb2ludGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRPTVBhdGNoU3VwcG9ydDo6Y3JlYXRlRGlnZXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OmFkZFN0cmluZ1RvU0hBMSk6IERlbGV0ZWQuCisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JG
cm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZpY2F0ZSk6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
TmV0d29ya0FnZW50OjpnZXRTZXJpYWxpemVkQ2VydGlmaWNhdGUpOgorICAgICAgICAqIHBsYXRm
b3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9h
cmRDdXN0b21EYXRhOjpjcmVhdGVTaGFyZWRCdWZmZXIgY29uc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OlNo
YXJlZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmFwcGVuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpkYXRhIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmJ5dGVzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6ZGVjb2RlciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpzaXplIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRp
by9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNB
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Nb2RlbC5oOgorICAgICAgICAoV2ViQ29yZTo6TW9kZWw6OmVuY29kZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpNb2RlbDo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9QaXhlbEJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6UGl4ZWxCdWZmZXI6OmVu
Y29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6ZGVjb2RlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0
aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpDYXBhYmlsaXR5VmFsdWVPclJhbmdlOjplbmNvZGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FwYWJpbGl0eVZhbHVlT3JSYW5nZTo6ZGVjb2Rl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2Vu
dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZFN0cmluZ1RvU0hBMSk6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHA6CisgICAgICAgIChX
VEY6OlBlcnNpc3RlbmNlOjplbmNvZGVDRkRhdGEpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5j
ZTo6ZGVjb2RlQ0ZEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IpOgorICAg
ICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaDoKKyAgICAgICAgKiB3b3JrZXJz
L3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzKToKKyAgICAgICAgKiB3b3Jr
ZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTV1NjcmlwdFN0b3JhZ2U6OnN0b3JlKToKKwogMjAyMS0wNi0xMSAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIExhemlseSBjb21wdXRlIFNlY3VyaXR5T3JpZ2lu
OjptX2lzUG90ZW50aWFsbHlUcnVzdHdvcnRoeSBmb3IgcGVyZm9ybWFuY2UKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvSW5pdERhdGFSZWdpc3RyeS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0
YVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA0LDcgKzEwNCw3IEBAIHN0YXRpYyBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzYW5pdGl6ZUtleWkK
ICAgICBhdXRvIG9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgYXV0byBraWRz
QXJyYXkgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgZm9yIChhdXRvJiBidWZmZXIgOiBr
ZXlJREJ1ZmZlci52YWx1ZSgpKQotICAgICAgICBraWRzQXJyYXktPnB1c2hTdHJpbmcoYmFzZTY0
VVJMRW5jb2RlVG9TdHJpbmcoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKSk7CisgICAg
ICAgIGtpZHNBcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhidWZmZXIt
PmJ5dGVzKCkpKTsKICAgICBvYmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92ZShraWRzQXJy
YXkpKTsKIAogICAgIENTdHJpbmcganNvbkRhdGEgPSBvYmplY3QtPnRvSlNPTlN0cmluZygpLnV0
ZjgoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdo
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhp
Z2hsaWdodC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hp
Z2hsaWdodC9BcHBIaWdobGlnaHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBBcHBIaWdobGlnaHQ6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8c2l6ZV90Piho
aWdobGlnaHQtPnNpemUoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoaGln
aGxpZ2h0LT5kYXRhKCksIGhpZ2hsaWdodC0+c2l6ZSgpLCAxKTsKKyAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YSgqaGlnaGxpZ2h0LCAxKTsKIAogICAgIGVuY29kZXIgPDwgdGV4dDsK
IApAQCAtNzUsNyArNzUsNyBAQCBzdGQ6Om9wdGlvbmFsPEFwcEhpZ2hsaWdodD4gQXBwSGlnaGxp
Z2h0CiAKICAgICBWZWN0b3I8dWludDhfdD4gaGlnaGxpZ2h0OwogICAgIGhpZ2hsaWdodC5ncm93
KCpsZW5ndGgpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoaGlnaGxp
Z2h0LmRhdGEoKSwgaGlnaGxpZ2h0LnNpemUoKSwgMSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZUZpeGVkTGVuZ3RoRGF0YShoaWdobGlnaHQsIDEpKQogICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwogCiAgICAgc3RkOjpvcHRpb25hbDxzdGQ6Om9wdGlvbmFsPFN0cmluZz4+IHRleHQ7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHRSYW5nZURh
dGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0Fw
cEhpZ2hsaWdodFJhbmdlRGF0YS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFJhbmdlRGF0YS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUzLDcgKzUzLDcgQEAgUmVmPFNoYXJlZEJ1ZmZlcj4gQXBwSGlnaGxpZ2h0UmFu
Z2VEYXRhOgogewogICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2RlcjsKICAgICBl
bmNvZGVyIDw8ICp0aGlzOwotICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShlbmNvZGVy
LmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCkpOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIEFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6Tm9kZVBhdGhDb21wb25lbnQ6OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIE5ldHdvcmtTZW5kUXVldWUgUlRDRGF0
YUNoYW5uZWw6OmNyZWF0ZU0KICAgICAgICAgaWYgKCFjaGFubmVsLm1faGFuZGxlci0+c2VuZFN0
cmluZ0RhdGEodXRmOCkpCiAgICAgICAgICAgICBjaGFubmVsLnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6
RXJyb3IsICJFcnJvciBzZW5kaW5nIHN0cmluZyB0aHJvdWdoIFJUQ0RhdGFDaGFubmVsLiJfcyk7
CiAgICAgfSwgWyZjaGFubmVsXShhdXRvJiBzcGFuKSB7Ci0gICAgICAgIGlmICghY2hhbm5lbC5t
X2hhbmRsZXItPnNlbmRSYXdEYXRhKHNwYW4uZGF0YSgpLCBzcGFuLnNpemUoKSkpCisgICAgICAg
IGlmICghY2hhbm5lbC5tX2hhbmRsZXItPnNlbmRSYXdEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDhfdCo+KHNwYW4uZGF0YSgpKSwgc3Bhbi5zaXplKCkpKQogICAgICAgICAgICAgY2hh
bm5lbC5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VT
b3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAiRXJyb3Igc2VuZGluZyBiaW5hcnkgZGF0
YSB0aHJvdWdoIFJUQ0RhdGFDaGFubmVsLiJfcyk7CiAgICAgfSwgWyZjaGFubmVsXShFeGNlcHRp
b25Db2RlIGVycm9yQ29kZSkgewogICAgICAgICBpZiAoYXV0byogY29udGV4dCA9IGNoYW5uZWwu
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1t
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVp
Y2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDcg
QEAKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0NhdGNoU2NvcGUuaD4KICNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CiAjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KKyNp
bXBvcnQgPHd0Zi9jb2NvYS9TcGFuQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L0Jhc2U2NC5o
PgogCiAjaW1wb3J0IDxwYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaD4KQEAgLTI0Niw5ICsyNDcs
OSBAQCBzdGF0aWMgSlNWYWx1ZSAqanNWYWx1ZVdpdGhEYXRhSW5Db250ZXh0CiAgICAgLy8gRklY
TUU6IEFkZCBtYWtlQ0ZTdHJpbmcvbWFrZU5TU3RyaW5nIHRvIGF2b2lkIHVubmVjZXNzYXJ5IFN0
cmluZyBhbGxvY2F0aW9uLgogICAgIFN0cmluZyBkYXRhNjQ7CiAgICAgaWYgKCFtaW1lVHlwZS5p
c0VtcHR5KCkpCi0gICAgICAgIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgbWltZVR5cGUs
ICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoW2RhdGEgYnl0ZXNdLCBbZGF0YSBsZW5ndGhdKSk7
CisgICAgICAgIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgbWltZVR5cGUsICI7YmFzZTY0
LCIsIGJhc2U2NEVuY29kZWQoYXNCeXRlcyhkYXRhKSk7CiAgICAgZWxzZQotICAgICAgICBkYXRh
NjQgPSBtYWtlU3RyaW5nKCJkYXRhOnRleHQvcGxhaW47YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQo
W2RhdGEgYnl0ZXNdLCBbZGF0YSBsZW5ndGhdKSk7CisgICAgICAgIGRhdGE2NCA9IG1ha2VTdHJp
bmcoImRhdGE6dGV4dC9wbGFpbjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChhc0J5dGVzKGRhdGEp
KSk7CiAKICAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoT2JqZWN0OihpZClkYXRhNjQuY3Jl
YXRlQ0ZTdHJpbmcoKS5nZXQoKSBpbkNvbnRleHQ6Y29udGV4dF07CiB9CkBAIC0zNDAsNyArMzQx
LDcgQEAgc3RhdGljIEpTVmFsdWUgKmpzVmFsdWVXaXRoQVZNZXRhZGF0YUl0ZQogICAgICAgICBp
ZCB2YWx1ZSA9IGl0ZW0udmFsdWU7CiAgICAgICAgIE5TU3RyaW5nICptaW1lVHlwZSA9IFtbaXRl
bSBleHRyYUF0dHJpYnV0ZXNdIG9iamVjdEZvcktleTpAIk1JTUV0eXBlIl07CiAgICAgICAgIGlm
IChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNEYXRhIGNsYXNzXV0gJiYgbWltZVR5cGUpIHsKLSAg
ICAgICAgICAgIGF1dG8gZGF0YTY0ID0gbWFrZVN0cmluZygiZGF0YToiLCBTdHJpbmcobWltZVR5
cGUpLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKFt2YWx1ZSBieXRlc10sIFt2YWx1ZSBsZW5n
dGhdKSk7CisgICAgICAgICAgICBhdXRvIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgU3Ry
aW5nKG1pbWVUeXBlKSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChhc0J5dGVzKChOU0RhdGEg
Kil2YWx1ZSkpKTsKICAgICAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDooX19icmlkZ2Ug
TlNTdHJpbmcgKilkYXRhNjQuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSBmb3JLZXk6QCJ2YWx1ZSJd
OwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDp2YWx1
ZSBmb3JLZXk6QCJ2YWx1ZSJdOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRo
bi9BdXRoZW50aWNhdG9yQ29vcmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcAkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNh
dG9yQ29vcmRpbmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHN0YXRp
YyBSZWY8QXJyYXlCdWZmZXI+IHByb2R1Y2VDbGllbnREYXQKICAgICAgICAgb2JqZWN0LT5zZXRT
dHJpbmcoInR5cGUiX3MsICJ3ZWJhdXRobi5nZXQiX3MpOwogICAgICAgICBicmVhazsKICAgICB9
Ci0gICAgb2JqZWN0LT5zZXRTdHJpbmcoImNoYWxsZW5nZSJfcywgYmFzZTY0VVJMRW5jb2RlVG9T
dHJpbmcoY2hhbGxlbmdlLmRhdGEoKSwgY2hhbGxlbmdlLmxlbmd0aCgpKSk7CisgICAgb2JqZWN0
LT5zZXRTdHJpbmcoImNoYWxsZW5nZSJfcywgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY2hhbGxl
bmdlLmJ5dGVzKCkpKTsKICAgICBvYmplY3QtPnNldFN0cmluZygib3JpZ2luIl9zLCBvcmlnaW4u
dG9SYXdTdHJpbmcoKSk7CiAKICAgICBhdXRvIHV0ZjhKU09OU3RyaW5nID0gb2JqZWN0LT50b0pT
T05TdHJpbmcoKS51dGY4KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhu
L0F1dGhlbnRpY2F0b3JSZXNwb25zZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRpY2F0b3JSZXNwb25zZURhdGEuaAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9y
UmVzcG9uc2VEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4KIHN0YXRpYyB2b2lkIGVuY29kZUFycmF5QnVmZmVyKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IEFycmF5QnVmZmVyJiBidWZmZXIpCiB7CiAgICAgZW5jb2RlciA8PCBzdGF0
aWNfY2FzdDx1aW50NjRfdD4oYnVmZmVyLmJ5dGVMZW5ndGgoKSk7Ci0gICAgZW5jb2Rlci5lbmNv
ZGVGaXhlZExlbmd0aERhdGEoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZlci5kYXRh
KCkpLCBidWZmZXIuYnl0ZUxlbmd0aCgpLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShidWZmZXIuYnl0ZXMoKSwgMSk7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
CkBAIC03NSw3ICs3NSw3IEBAIFJlZlB0cjxBcnJheUJ1ZmZlcj4gZGVjb2RlQXJyYXlCdWZmZXIo
RGUKICAgICBhdXRvIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjp0cnlDcmVhdGUobGVuZ3RoLnZhbHVl
KCksIHNpemVvZih1aW50OF90KSk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoc3RhdGljX2Nh
c3Q8dWludDhfdCo+KGJ1ZmZlci0+ZGF0YSgpKSwgbGVuZ3RoLnZhbHVlKCksIDEpKQorICAgIGlm
ICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLT53cml0YWJsZUJ5dGVzKCks
IDEpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gYnVmZmVyOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tl
eUNyZWRlbnRpYWwuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
NCw3ICs1NCw3IEBAIEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgUHUKIH0K
IAogUHVibGljS2V5Q3JlZGVudGlhbDo6UHVibGljS2V5Q3JlZGVudGlhbChSZWY8QXV0aGVudGlj
YXRvclJlc3BvbnNlPiYmIHJlc3BvbnNlKQotICAgIDogQmFzaWNDcmVkZW50aWFsKGJhc2U2NFVS
TEVuY29kZVRvU3RyaW5nKHJlc3BvbnNlLT5yYXdJZCgpLT5kYXRhKCksIHJlc3BvbnNlLT5yYXdJ
ZCgpLT5ieXRlTGVuZ3RoKCkpLCBUeXBlOjpQdWJsaWNLZXksIERpc2NvdmVyeTo6UmVtb3RlKQor
ICAgIDogQmFzaWNDcmVkZW50aWFsKGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKHJlc3BvbnNlLT5y
YXdJZCgpLT5ieXRlcygpKSwgVHlwZTo6UHVibGljS2V5LCBEaXNjb3Zlcnk6OlJlbW90ZSkKICAg
ICAsIG1fcmVzcG9uc2UoV1RGTW92ZShyZXNwb25zZSkpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tl
eUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw4ICsxNDEsOCBAQCB0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPgogdm9pZCBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IHJwLmlkIDw8IHJwLm5h
bWUgPDwgcnAuaWNvbjsKLSAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih1c2Vy
LmlkLmxlbmd0aCgpKTsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YSh1c2VyLmlk
LmRhdGEoKSwgdXNlci5pZC5sZW5ndGgoKSwgMSk7CisgICAgZW5jb2RlciA8PCBzdGF0aWNfY2Fz
dDx1aW50NjRfdD4odXNlci5pZC5ieXRlcygpLnNpemUoKSk7CisgICAgZW5jb2Rlci5lbmNvZGVG
aXhlZExlbmd0aERhdGEodXNlci5pZC5ieXRlcygpLCAxKTsKICAgICBlbmNvZGVyIDw8IHVzZXIu
ZGlzcGxheU5hbWUgPDwgdXNlci5uYW1lIDw8IHVzZXIuaWNvbiA8PCBwdWJLZXlDcmVkUGFyYW1z
IDw8IHRpbWVvdXQgPDwgZXhjbHVkZUNyZWRlbnRpYWxzIDw8IGF1dGhlbnRpY2F0b3JTZWxlY3Rp
b24gPDwgYXR0ZXN0YXRpb24gPDwgZXh0ZW5zaW9uczsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVu
dGlhbERlc2NyaXB0b3IuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw4ICs0Nyw4IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIFB1Ymxp
Y0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QK
IHsKICAgICBlbmNvZGVyIDw8IHR5cGU7Ci0gICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50
NjRfdD4oaWQubGVuZ3RoKCkpOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGlk
LmRhdGEoKSwgaWQubGVuZ3RoKCksIDEpOworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KGlkLmJ5dGVzKCkuc2l6ZSgpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3Ro
RGF0YShpZC5ieXRlcygpLCAxKTsKICAgICBlbmNvZGVyIDw8IHRyYW5zcG9ydHM7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJT
b2NrZXRIYW5kc2hha2UuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTcsMTkgKzk3LDIwIEBAIHN0YXRpYyBTdHJpbmcgZ2VuZXJhdGVTZWNXZWJTb2NrZXRLZXko
KQogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgbm9uY2VTaXplID0gMTY7CiAgICAgdW5zaWduZWQg
Y2hhciBrZXlbbm9uY2VTaXplXTsKICAgICBjcnlwdG9ncmFwaGljYWxseVJhbmRvbVZhbHVlcyhr
ZXksIG5vbmNlU2l6ZSk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGtleSwgbm9u
Y2VTaXplKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoa2V5KTsKIH0KIAogU3Ry
aW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRXZWJTb2NrZXRBY2NlcHQoY29uc3Qg
U3RyaW5nJiBzZWNXZWJTb2NrZXRLZXkpCiB7CiAgICAgY29uc3RleHByIHVpbnQ4X3Qgd2ViU29j
a2V0S2V5R1VJRFtdID0gIjI1OEVBRkE1LUU5MTQtNDdEQS05NUNBLUM1QUIwREM4NUIxMSI7CisK
ICAgICBTSEExIHNoYTE7Ci0gICAgQ1N0cmluZyBrZXlEYXRhID0gc2VjV2ViU29ja2V0S2V5LmFz
Y2lpKCk7Ci0gICAgc2hhMS5hZGRCeXRlcyhrZXlEYXRhLmRhdGFBc1VJbnQ4UHRyKCksIGtleURh
dGEubGVuZ3RoKCkpOwotICAgIHNoYTEuYWRkQnl0ZXMod2ViU29ja2V0S2V5R1VJRCwgc3RkOjpz
aXplKHdlYlNvY2tldEtleUdVSUQpIC0gMSk7CisgICAgc2hhMS5hZGRCeXRlcyhzZWNXZWJTb2Nr
ZXRLZXkuYXNjaWkoKS5ieXRlcygpKTsKKyAgICBzaGExLmFkZEJ5dGVzKHdlYlNvY2tldEtleUdV
SUQpOworCiAgICAgU0hBMTo6RGlnZXN0IGhhc2g7CiAgICAgc2hhMS5jb21wdXRlSGFzaChoYXNo
KTsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaGFzaC5kYXRhKCksIFNIQTE6Omhh
c2hTaXplKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaGFzaCk7CiB9CiAKIFdl
YlNvY2tldEhhbmRzaGFrZTo6V2ViU29ja2V0SGFuZHNoYWtlKGNvbnN0IFVSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIHByb3RvY29sLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5n
JiBjbGllbnRPcmlnaW4sIGJvb2wgYWxsb3dDb29raWVzKQpJbmRleDogU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2oveGNzaGFyZWRkYXRhL3hjc2NoZW1lcy9XZWJDb3JlLnhjc2NoZW1l
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3hjc2hhcmVk
ZGF0YS94Y3NjaGVtZXMvV2ViQ29yZS54Y3NjaGVtZQkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2oveGNzaGFyZWRkYXRhL3hjc2NoZW1lcy9XZWJD
b3JlLnhjc2NoZW1lCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw5IEBACiAgICAgICBpZ25v
cmVzUGVyc2lzdGVudFN0YXRlT25MYXVuY2ggPSAiTk8iCiAgICAgICBkZWJ1Z0RvY3VtZW50VmVy
c2lvbmluZyA9ICJZRVMiCiAgICAgICBkZWJ1Z1NlcnZpY2VFeHRlbnNpb24gPSAiaW50ZXJuYWwi
Ci0gICAgICBhbGxvd0xvY2F0aW9uU2ltdWxhdGlvbiA9ICJZRVMiPgorICAgICAgZW5hYmxlR1BV
RnJhbWVDYXB0dXJlTW9kZSA9ICIzIgorICAgICAgYWxsb3dMb2NhdGlvblNpbXVsYXRpb24gPSAi
WUVTIgorICAgICAgR1BVUHJvZmlsZXJFbmFibGVkID0gIk5vIj4KICAgIDwvTGF1bmNoQWN0aW9u
PgogICAgPFByb2ZpbGVBY3Rpb24KICAgICAgIGJ1aWxkQ29uZmlndXJhdGlvbiA9ICJSZWxlYXNl
IgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQnVmZmVyU291cmNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQnVmZmVyU291cmNlLmgJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0J1ZmZlclNvdXJjZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1NywxMyBAQCBwdWJsaWM6CiAgICAgICAgIH0sIG1f
dmFyaWFudCk7CiAgICAgfQogCisgICAgU3Bhbjxjb25zdCB1aW50OF90PiBieXRlcygpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjp2aXNpdChbXShhdXRvJiBidWZmZXIpIC0+IFNw
YW48Y29uc3QgdWludDhfdD4geworICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlciA/IFNwYW48Y29u
c3QgdWludDhfdD4geyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYnVmZmVyLT5kYXRhKCkp
LCBidWZmZXItPmJ5dGVMZW5ndGgoKSB9IDogU3Bhbjxjb25zdCB1aW50OF90PiB7IH07CisgICAg
ICAgIH0sIG1fdmFyaWFudCk7CisgICAgfQorCiBwcml2YXRlOgogICAgIFZhcmlhbnRUeXBlIG1f
dmFyaWFudDsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE2NCwxNSArMTY0LDE1IEBAIHZvaWQgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjplbmNvZGUoRW5j
b2QKIAogICAgIGlmIChoYXNBcnJheSkgewogICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0
PHVpbnQ2NF90PihtX2FycmF5QnVmZmVyQ29udGVudHNBcnJheS0+c2l6ZSgpKTsKLSAgICAgICAg
Zm9yIChjb25zdCBhdXRvICZhcnJheUJ1ZmZlckNvbnRlbnRzIDogKm1fYXJyYXlCdWZmZXJDb250
ZW50c0FycmF5KSB7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgYXJyYXlCdWZmZXJDb250ZW50
cyA6ICptX2FycmF5QnVmZmVyQ29udGVudHNBcnJheSkgewogICAgICAgICAgICAgZW5jb2RlciA8
PCBhcnJheUJ1ZmZlckNvbnRlbnRzLnNpemVJbkJ5dGVzKCk7Ci0gICAgICAgICAgICBlbmNvZGVy
LmVuY29kZUZpeGVkTGVuZ3RoRGF0YShzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYXJyYXlC
dWZmZXJDb250ZW50cy5kYXRhKCkpLCBhcnJheUJ1ZmZlckNvbnRlbnRzLnNpemVJbkJ5dGVzKCks
IDEpOworICAgICAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYXJyYXlCdWZm
ZXJDb250ZW50cy5ieXRlcygpLCAxKTsKICAgICAgICAgfQogICAgIH0KIAogI2lmIEVOQUJMRShX
RUJfUlRDKQogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1fZGV0YWNoZWRS
VENEYXRhQ2hhbm5lbHMuc2l6ZSgpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8gJmNoYW5uZWwgOiBt
X2RldGFjaGVkUlRDRGF0YUNoYW5uZWxzKQorICAgIGZvciAoY29uc3QgYXV0byYgY2hhbm5lbCA6
IG1fZGV0YWNoZWRSVENEYXRhQ2hhbm5lbHMpCiAgICAgICAgIGVuY29kZXIgPDwgKmNoYW5uZWw7
CiAjZW5kaWYKIH0KQEAgLTIwNiw3ICsyMDYsNyBAQCBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBTZXJpYWxpemVkCiAgICAgICAgICAgICBhdXRvIGJ1ZmZlciA9IEdpZ2FjYWdlOjp0cnlN
YWxsb2MoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgYnVmZmVyU2l6ZSk7CiAgICAgICAgICAgICBpZiAo
IWJ1ZmZlcikKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoc3RhdGljX2Nhc3Q8dWludDhfdCo+KGJ1
ZmZlciksIGJ1ZmZlclNpemUsIDEpKSB7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKFNwYW4geyBzdGF0aWNfY2FzdDxzdGQ6OmJ5dGUqPihidWZmZXIpLCBi
dWZmZXJTaXplIH0sIDEpKSB7CiAgICAgICAgICAgICAgICAgR2lnYWNhZ2U6OmZyZWUoR2lnYWNh
Z2U6OlByaW1pdGl2ZSwgYnVmZmVyKTsKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL1Nl
cmlhbGl6ZWRORkEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL1NlcmlhbGl6ZWRORkEuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9TZXJpYWxpemVkTkZBLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA3LDcgKzEwNyw3IEBAIFNlcmlhbGl6ZWRORkE6OlNlcmlhbGl6ZWRORkEoRmlsZVN5c3Rl
bToKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBjb25zdCBUKiBTZXJpYWxpemVkTkZBOjpwb2ludGVy
QXRPZmZzZXRJbkZpbGUoc2l6ZV90IG9mZnNldCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBUKj4oc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1fZmlsZS5k
YXRhKCkpICsgb2Zmc2V0KTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4o
bV9maWxlLmRhdGEoKS5kYXRhKCkgKyBvZmZzZXQpOwogfQogCiBhdXRvIFNlcmlhbGl6ZWRORkE6
Om5vZGVzKCkgY29uc3QgLT4gY29uc3QgUmFuZ2U8SW1tdXRhYmxlTkZBTm9kZT4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5RUNNYWMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5RUNNYWMuY3BwCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTk3LDEwICsxOTcsMTAgQEAgYm9vbCBDcnlwdG9LZXlFQzo6cGxh
dGZvcm1BZGRGaWVsZEVsZW1lbgogCiAgICAgaWYgKFVOTElLRUxZKChzaXplICE9IHB1YmxpY0tl
eVNpemUpICYmIChzaXplICE9IHByaXZhdGVLZXlTaXplKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBqd2sueCA9IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKHJlc3VsdC5kYXRhKCkgKyAx
LCBrZXlTaXplSW5CeXRlcyk7Ci0gICAgandrLnkgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhy
ZXN1bHQuZGF0YSgpICsga2V5U2l6ZUluQnl0ZXMgKyAxLCBrZXlTaXplSW5CeXRlcyk7CisgICAg
andrLnggPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhTcGFuIHsgcmVzdWx0IH0uc3Vic3Bhbigx
LCBrZXlTaXplSW5CeXRlcykpOworICAgIGp3ay55ID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmco
U3BhbiB7IHJlc3VsdCB9LnN1YnNwYW4oMSArIGtleVNpemVJbkJ5dGVzLCBrZXlTaXplSW5CeXRl
cykpOwogICAgIGlmIChzaXplID4gcHVibGljS2V5U2l6ZSkKLSAgICAgICAgandrLmQgPSBiYXNl
NjRVUkxFbmNvZGVUb1N0cmluZyhyZXN1bHQuZGF0YSgpICsgcHVibGljS2V5U2l6ZSwga2V5U2l6
ZUluQnl0ZXMpOworICAgICAgICBqd2suZCA9IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKFNwYW4g
eyByZXN1bHQgfS5zdWJzcGFuKHB1YmxpY0tleVNpemUsIGtleVNpemVJbkJ5dGVzKSk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvU2VyaWFs
aXplZENyeXB0b0tleVdyYXBNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5
cHRvL21hYy9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5tbQkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2ltcG9ydCA8d3RmL0NyeXB0b2dy
YXBoaWNVdGlsaXRpZXMuaD4KICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+CiAjaW1w
b3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvY2YvU3BhbkNGLmg+CiAjaW1wb3J0
IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi9zcGkvY29jb2EvU2VjdXJp
dHlTUEkuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L0Jhc2U2NC5oPgpAQCAtMTY3LDcgKzE2OCw3IEBA
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZmkKICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKICAgICB9CiAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4ga2V5RGF0YSA9
IGFkb3B0Q0Yoa2V5RGF0YVJlZik7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZShDRkRhdGFHZXRC
eXRlUHRyKGtleURhdGEuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgoa2V5RGF0YS5nZXQoKSkpOwor
ICAgIHJldHVybiBiYXNlNjREZWNvZGUoYXNCeXRlcyhrZXlEYXRhLmdldCgpKSk7CiB9CiAKIHN0
ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYwNiw3ICsxNjA2LDggQEAgRXhjZXB0
aW9uT3I8dm9pZD4gTm9kZTo6c2V0VGV4dENvbnRlbnQoYwogc3RhdGljIFNIQTE6OkRpZ2VzdCBo
YXNoUG9pbnRlcihjb25zdCB2b2lkKiBwb2ludGVyKQogewogICAgIFNIQTEgc2hhMTsKLSAgICBz
aGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZwb2ludGVyKSwg
c2l6ZW9mKHBvaW50ZXIpKTsKKyAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmcG9pbnRlciwgMSB9
KTsKKwogICAgIFNIQTE6OkRpZ2VzdCBkaWdlc3Q7CiAgICAgc2hhMS5jb21wdXRlSGFzaChkaWdl
c3QpOwogICAgIHJldHVybiBkaWdlc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Zp
bGVSZWFkZXJMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkv
RmlsZVJlYWRlckxvYWRlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzOCw3ICsz
MzgsNyBAQCB2b2lkIEZpbGVSZWFkZXJMb2FkZXI6OmNvbnZlcnRUb0RhdGFVUkwoCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBtX3N0cmluZ1Jlc3VsdCA9IG1ha2VTdHJpbmcoImRhdGE6
IiwgbV9kYXRhVHlwZS5pc0VtcHR5KCkgPyAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiA6IG1f
ZGF0YVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQobV9yYXdEYXRhLT5kYXRhKCksIG1f
Ynl0ZXNMb2FkZWQpKTsKKyAgICBtX3N0cmluZ1Jlc3VsdCA9IG1ha2VTdHJpbmcoImRhdGE6Iiwg
bV9kYXRhVHlwZS5pc0VtcHR5KCkgPyAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiA6IG1fZGF0
YVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQobV9yYXdEYXRhLT5ieXRlcygpKSk7CiB9
CiAKIGJvb2wgRmlsZVJlYWRlckxvYWRlcjo6aXNDb21wbGV0ZWQoKSBjb25zdApJbmRleDogU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9maWxlYXBpL05ldHdvcmtTZW5kUXVldWUuY3BwCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL05ldHdvcmtTZW5kUXVldWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MywxMSArNTMsMTAgQEAgdm9pZCBOZXR3b3JrU2VuZFF1ZXVlOjplbnF1
ZXVlKENTdHJpbmcmJgogdm9pZCBOZXR3b3JrU2VuZFF1ZXVlOjplbnF1ZXVlKGNvbnN0IEpTQzo6
QXJyYXlCdWZmZXImIGJpbmFyeURhdGEsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5
dGVMZW5ndGgpCiB7CiAgICAgaWYgKG1fcXVldWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGF1dG8q
IGRhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYmluYXJ5RGF0YS5kYXRhKCkpOwot
ICAgICAgICBtX3dyaXRlUmF3RGF0YShTcGFuIHsgZGF0YSArIGJ5dGVPZmZzZXQsIGJ5dGVMZW5n
dGggfSk7CisgICAgICAgIG1fd3JpdGVSYXdEYXRhKGJpbmFyeURhdGEuYnl0ZXMoKS5zdWJzcGFu
KGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBt
X3F1ZXVlLmFwcGVuZChTaGFyZWRCdWZmZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDxjb25zdCB1aW50
OF90Kj4oYmluYXJ5RGF0YS5kYXRhKCkpICsgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkpOworICAg
IG1fcXVldWUuYXBwZW5kKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGJpbmFyeURhdGEuYnl0ZXMoKS5z
dWJzcGFuKGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKSk7CiB9CiAKIHZvaWQgTmV0d29ya1NlbmRR
dWV1ZTo6ZW5xdWV1ZShXZWJDb3JlOjpCbG9iJiBibG9iKQpAQCAtOTMsNyArOTIsOSBAQCB2b2lk
IE5ldHdvcmtTZW5kUXVldWU6OnByb2Nlc3NNZXNzYWdlcygpCiAgICAgICAgIHN3aXRjaE9uKG1f
cXVldWUuZmlyc3QoKSwgW3RoaXNdKGNvbnN0IENTdHJpbmcmIHV0ZjgpIHsKICAgICAgICAgICAg
IG1fd3JpdGVTdHJpbmcodXRmOCk7CiAgICAgICAgIH0sIFt0aGlzXShSZWY8U2hhcmVkQnVmZmVy
PiYgZGF0YSkgewotICAgICAgICAgICAgZGF0YS0+Zm9yRWFjaFNlZ21lbnQobV93cml0ZVJhd0Rh
dGEpOworICAgICAgICAgICAgZGF0YS0+Zm9yRWFjaFNlZ21lbnQoW3RoaXNdKGF1dG8mIHNwYW4p
IHsKKyAgICAgICAgICAgICAgICBtX3dyaXRlUmF3RGF0YShhc0J5dGVzKHNwYW4pKTsKKyAgICAg
ICAgICAgIH0pOwogICAgICAgICB9LCBbdGhpcywgJnNob3VsZFN0b3BQcm9jZXNzaW5nXShVbmlx
dWVSZWY8QmxvYkxvYWRlcj4mIGxvYWRlcikgewogICAgICAgICAgICAgYXV0byBlcnJvckNvZGUg
PSBsb2FkZXItPmVycm9yQ29kZSgpOwogICAgICAgICAgICAgaWYgKGxvYWRlci0+aXNMb2FkaW5n
KCkgfHwgKGVycm9yQ29kZSAmJiBlcnJvckNvZGUudmFsdWUoKSA9PSBBYm9ydEVycm9yKSkgewpA
QCAtMTAyLDcgKzEwMyw3IEBAIHZvaWQgTmV0d29ya1NlbmRRdWV1ZTo6cHJvY2Vzc01lc3NhZ2Vz
KCkKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGNvbnN0IGF1dG8mIHJlc3VsdCA9
IGxvYWRlci0+YXJyYXlCdWZmZXJSZXN1bHQoKSkgewotICAgICAgICAgICAgICAgIG1fd3JpdGVS
YXdEYXRhKFNwYW4geyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4ocmVzdWx0LT5kYXRhKCkp
LCByZXN1bHQtPmJ5dGVMZW5ndGgoKSB9KTsKKyAgICAgICAgICAgICAgICBtX3dyaXRlUmF3RGF0
YShyZXN1bHQtPmJ5dGVzKCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIEFTU0VSVChlcnJvckNvZGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2ZpbGVhcGkvTmV0d29ya1NlbmRRdWV1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3
ICs0OCw3IEBAIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIE5ldHdv
cmtTZW5kUXVldWUgOiBwdWJsaWMgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIgewogcHVibGlj
OgogICAgIHVzaW5nIFdyaXRlU3RyaW5nID0gRnVuY3Rpb248dm9pZChjb25zdCBDU3RyaW5nJiB1
dGY4KT47Ci0gICAgdXNpbmcgV3JpdGVSYXdEYXRhID0gRnVuY3Rpb248dm9pZChjb25zdCBTcGFu
PGNvbnN0IHVpbnQ4X3Q+Jik+OworICAgIHVzaW5nIFdyaXRlUmF3RGF0YSA9IEZ1bmN0aW9uPHZv
aWQoY29uc3QgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+Jik+OwogICAgIGVudW0gY2xhc3MgQ29udGlu
dWUgeyBObywgWWVzIH07CiAgICAgdXNpbmcgUHJvY2Vzc0Vycm9yID0gRnVuY3Rpb248Q29udGlu
dWUoRXhjZXB0aW9uQ29kZSk+OwogICAgIE5ldHdvcmtTZW5kUXVldWUoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYsIFdyaXRlU3RyaW5nJiYsIFdyaXRlUmF3RGF0YSYmLCBQcm9jZXNzRXJyb3ImJik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3Vw
cG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5NCwyOCArMzk0LDIzIEBAIEV4Y2VwdGlvbk9y
PHZvaWQ+IERPTVBhdGNoU3VwcG9ydDo6aW5uZXIKICAgICByZXR1cm4geyB9OwogfQogCi1zdGF0
aWMgdm9pZCBhZGRTdHJpbmdUb1NIQTEoU0hBMSYgc2hhMSwgY29uc3QgU3RyaW5nJiBzdHJpbmcp
Ci17Ci0gICAgQ1N0cmluZyBjU3RyaW5nID0gc3RyaW5nLnV0ZjgoKTsKLSAgICBzaGExLmFkZEJ5
dGVzKGNTdHJpbmcuZGF0YUFzVUludDhQdHIoKSwgY1N0cmluZy5sZW5ndGgoKSk7Ci19Ci0KIHN0
ZDo6dW5pcXVlX3B0cjxET01QYXRjaFN1cHBvcnQ6OkRpZ2VzdD4gRE9NUGF0Y2hTdXBwb3J0Ojpj
cmVhdGVEaWdlc3QoTm9kZSYgbm9kZSwgVW51c2VkTm9kZXNNYXAqIHVudXNlZE5vZGVzTWFwKQog
ewogICAgIGF1dG8gZGlnZXN0ID0gbWFrZVVuaXF1ZTxEaWdlc3Q+KCk7CiAgICAgZGlnZXN0LT5u
b2RlID0gJm5vZGU7CisKICAgICBTSEExIHNoYTE7CiAKICAgICBhdXRvIG5vZGVUeXBlID0gbm9k
ZS5ub2RlVHlwZSgpOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50OF90Kj4oJm5vZGVUeXBlKSwgc2l6ZW9mKG5vZGVUeXBlKSk7Ci0gICAgYWRkU3RyaW5nVG9T
SEExKHNoYTEsIG5vZGUubm9kZU5hbWUoKSk7Ci0gICAgYWRkU3RyaW5nVG9TSEExKHNoYTEsIG5v
ZGUubm9kZVZhbHVlKCkpOworICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZub2RlVHlwZSwgMSB9
KTsKKyAgICBzaGExLmFkZEJ5dGVzKG5vZGUubm9kZU5hbWUoKS51dGY4KCkuYnl0ZXMoKSk7Cisg
ICAgc2hhMS5hZGRCeXRlcyhub2RlLm5vZGVWYWx1ZSgpLnV0ZjgoKS5ieXRlcygpKTsKIAogICAg
IGlmIChub2RlLm5vZGVUeXBlKCkgPT0gTm9kZTo6RUxFTUVOVF9OT0RFKSB7CiAgICAgICAgIE5v
ZGUqIGNoaWxkID0gbm9kZS5maXJzdENoaWxkKCk7CiAgICAgICAgIHdoaWxlIChjaGlsZCkgewog
ICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPERpZ2VzdD4gY2hpbGRJbmZvID0gY3JlYXRlRGln
ZXN0KCpjaGlsZCwgdW51c2VkTm9kZXNNYXApOwotICAgICAgICAgICAgYWRkU3RyaW5nVG9TSEEx
KHNoYTEsIGNoaWxkSW5mby0+c2hhMSk7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGNoaWxk
SW5mby0+c2hhMS51dGY4KCkuYnl0ZXMoKSk7CiAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT5u
ZXh0U2libGluZygpOwogICAgICAgICAgICAgZGlnZXN0LT5jaGlsZHJlbi5hcHBlbmQoV1RGTW92
ZShjaGlsZEluZm8pKTsKICAgICAgICAgfQpAQCAtNDI0LDE5ICs0MTksMTkgQEAgc3RkOjp1bmlx
dWVfcHRyPERPTVBhdGNoU3VwcG9ydDo6RGlnZXN0PgogICAgICAgICBpZiAoZWxlbWVudC5oYXNB
dHRyaWJ1dGVzV2l0aG91dFVwZGF0ZSgpKSB7CiAgICAgICAgICAgICBTSEExIGF0dHJzU0hBMTsK
ICAgICAgICAgICAgIGZvciAoYXV0byYgYXR0cmlidXRlIDogZWxlbWVudC5hdHRyaWJ1dGVzSXRl
cmF0b3IoKSkgewotICAgICAgICAgICAgICAgIGFkZFN0cmluZ1RvU0hBMShhdHRyc1NIQTEsIGF0
dHJpYnV0ZS5uYW1lKCkudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgYWRkU3RyaW5nVG9T
SEExKGF0dHJzU0hBMSwgYXR0cmlidXRlLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIGF0dHJz
U0hBMS5hZGRCeXRlcyhhdHRyaWJ1dGUubmFtZSgpLnRvU3RyaW5nKCkudXRmOCgpLmJ5dGVzKCkp
OworICAgICAgICAgICAgICAgIGF0dHJzU0hBMS5hZGRCeXRlcyhhdHRyaWJ1dGUudmFsdWUoKS5z
dHJpbmcoKS51dGY4KCkuYnl0ZXMoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTSEEx
OjpEaWdlc3QgYXR0cnNIYXNoOwogICAgICAgICAgICAgYXR0cnNTSEExLmNvbXB1dGVIYXNoKGF0
dHJzSGFzaCk7Ci0gICAgICAgICAgICBkaWdlc3QtPmF0dHJzU0hBMSA9IGJhc2U2NEVuY29kZVRv
U3RyaW5nKGF0dHJzSGFzaC5kYXRhKCksIDEwKTsKLSAgICAgICAgICAgIGFkZFN0cmluZ1RvU0hB
MShzaGExLCBkaWdlc3QtPmF0dHJzU0hBMSk7CisgICAgICAgICAgICBkaWdlc3QtPmF0dHJzU0hB
MSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGF0dHJzSGFzaCk7CisgICAgICAgICAgICBzaGExLmFk
ZEJ5dGVzKGRpZ2VzdC0+YXR0cnNTSEExLnV0ZjgoKS5ieXRlcygpKTsKICAgICAgICAgfQogICAg
IH0KIAogICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwogICAgIHNoYTEuY29tcHV0ZUhhc2goaGFzaCk7
Ci0gICAgZGlnZXN0LT5zaGExID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaGFzaC5kYXRhKCksIDEw
KTsKKyAgICBkaWdlc3QtPnNoYTEgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhoYXNoKTsKICAgICBp
ZiAodW51c2VkTm9kZXNNYXApCiAgICAgICAgIHVudXNlZE5vZGVzTWFwLT5hZGQoZGlnZXN0LT5z
aGExLCBkaWdlc3QuZ2V0KCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYwMiw3ICs2MDIsNyBAQCBib29sIEluc3BlY3RvckZyb250ZW5kSG9zdDo6c2hv
d0NlcnRpZmljCiAgICAgaWYgKCFkYXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBX
VEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXpl
KCkpOworICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlciB7ICpkYXRhIH07CiAg
ICAgc3RkOjpvcHRpb25hbDxDZXJ0aWZpY2F0ZUluZm8+IGNlcnRpZmljYXRlSW5mbzsKICAgICBk
ZWNvZGVyID4+IGNlcnRpZmljYXRlSW5mbzsKICAgICBpZiAoIWNlcnRpZmljYXRlSW5mbykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRh
LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdv
cmtSZXNvdXJjZXNEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBAIHVu
c2lnbmVkIE5ldHdvcmtSZXNvdXJjZXNEYXRhOjpSZXNvdXJjZUQKICAgICAgICAgbV9jb250ZW50
ID0gbV9kZWNvZGVyLT5kZWNvZGVBbmRGbHVzaChtX2RhdGFCdWZmZXItPmRhdGEoKSwgZGF0YUxl
bmd0aCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9iYXNlNjRFbmNvZGVkID0gdHJ1ZTsKLSAg
ICAgICAgbV9jb250ZW50ID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcobV9kYXRhQnVmZmVyLT5kYXRh
KCksIGRhdGFMZW5ndGgpOworICAgICAgICBtX2NvbnRlbnQgPSBiYXNlNjRFbmNvZGVUb1N0cmlu
ZyhtX2RhdGFCdWZmZXItPmJ5dGVzKCkpOwogICAgIH0KIAogICAgIG1fZGF0YUJ1ZmZlciA9IG51
bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRP
TUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRPTUFnZW50LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE2OTgsNyArMTY5OCw3IEBAIHN0YXRpYyBTdHJpbmcgY29tcHV0ZUNvbnRlbnRTZWN1cml0
eVBvbGkKICAgICBhdXRvIGNyeXB0b0RpZ2VzdCA9IFBBTDo6Q3J5cHRvRGlnZXN0OjpjcmVhdGUo
UEFMOjpDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzI1Nik7CiAgICAgY3J5cHRvRGlnZXN0
LT5hZGRCeXRlcyhjb250ZW50LmRhdGEoKSwgY29udGVudC5zaXplKCkpOwogICAgIGF1dG8gZGln
ZXN0ID0gY3J5cHRvRGlnZXN0LT5jb21wdXRlSGFzaCgpOwotICAgIHJldHVybiBtYWtlU3RyaW5n
KCJzaGEyNTYtIiwgYmFzZTY0RW5jb2RlZChkaWdlc3QuZGF0YSgpLCBkaWdlc3Quc2l6ZSgpKSk7
CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoInNoYTI1Ni0iLCBiYXNlNjRFbmNvZGVkKGRpZ2VzdCkp
OwogfQogCiBSZWY8UHJvdG9jb2w6OkRPTTo6Tm9kZT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxk
T2JqZWN0Rm9yTm9kZShOb2RlKiBub2RlLCBpbnQgZGVwdGgpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQu
Y3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NSw3ICsxNzUs
NyBAQCBSZWY8UHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldEZyYW1lPiBiCiAgICAgcmV0dXJu
IFByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRGcmFtZTo6Y3JlYXRlKCkKICAgICAgICAgLnNl
dE9wY29kZShmcmFtZS5vcENvZGUpCiAgICAgICAgIC5zZXRNYXNrKGZyYW1lLm1hc2tlZCkKLSAg
ICAgICAgLnNldFBheWxvYWREYXRhKGZyYW1lLm9wQ29kZSA9PSAxID8gU3RyaW5nOjpmcm9tVVRG
OFdpdGhMYXRpbjFGYWxsYmFjayhmcmFtZS5wYXlsb2FkLCBmcmFtZS5wYXlsb2FkTGVuZ3RoKSA6
IGJhc2U2NEVuY29kZVRvU3RyaW5nKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgp
KQorICAgICAgICAuc2V0UGF5bG9hZERhdGEoZnJhbWUub3BDb2RlID09IDEgPyBTdHJpbmc6OmZy
b21VVEY4V2l0aExhdGluMUZhbGxiYWNrKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5n
dGgpIDogYmFzZTY0RW5jb2RlVG9TdHJpbmcoU3BhbiB7IGZyYW1lLnBheWxvYWQsIGZyYW1lLnBh
eWxvYWRMZW5ndGggfSkpCiAgICAgICAgIC5zZXRQYXlsb2FkTGVuZ3RoKGZyYW1lLnBheWxvYWRM
ZW5ndGgpCiAgICAgICAgIC5yZWxlYXNlKCk7CiB9CkBAIC01ODksNyArNTg5LDcgQEAgdm9pZCBJ
bnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRpZFJlY2VpdmVEYQogICAgICAgICAvLyBPZnRlbiB0aGUg
ZGF0YSBpcyB0ZXh0IGFuZCB3ZSB3b3VsZCBoYXZlIGEgZGVjb2RlciwgYnV0IGZvciBub24tdGV4
dCB3ZSB3b24ndCBoYXZlIGEgZGVjb2Rlci4KICAgICAgICAgLy8gU3luYyBYSFJzIG1heSBub3Qg
aGF2ZSBhIGNhY2hlZCByZXNvdXJjZSwgd2hpbGUgbm9uLXN5bmMgWEhScyB1c3VhbGx5IHRyYW5z
ZmVyIGRhdGEgb3ZlciBvbiBjb21wbGV0aW9uLgogICAgICAgICBpZiAobV9sb2FkaW5nWEhSU3lu
Y2hyb25vdXNseSAmJiByZXNvdXJjZURhdGEgJiYgIXJlc291cmNlRGF0YS0+aGFzQnVmZmVyZWRE
YXRhKCkgJiYgIXJlc291cmNlRGF0YS0+Y2FjaGVkUmVzb3VyY2UoKSkKLSAgICAgICAgICAgIG1f
cmVzb3VyY2VzRGF0YS0+c2V0UmVzb3VyY2VDb250ZW50KHJlcXVlc3RJZCwgYmFzZTY0RW5jb2Rl
VG9TdHJpbmcoZGF0YSwgZGF0YUxlbmd0aCksIHRydWUpOworICAgICAgICAgICAgbV9yZXNvdXJj
ZXNEYXRhLT5zZXRSZXNvdXJjZUNvbnRlbnQocmVxdWVzdElkLCBiYXNlNjRFbmNvZGVUb1N0cmlu
ZyhTcGFuIHsgZGF0YSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRhdGFMZW5ndGgpIH0pLCB0cnVl
KTsKICAgICB9CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZGF0YVJlY2VpdmVkKHJlcXVl
c3RJZCwgdGltZXN0YW1wKCksIGRhdGFMZW5ndGgsIGVuY29kZWREYXRhTGVuZ3RoKTsKQEAgLTEw
MDUsNyArMTAwNSw3IEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG8K
IAogICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2RlcjsKICAgICBXVEY6OlBlcnNp
c3RlbmNlOjpDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUoZW5jb2Rlciwg
Y2VydGlmaWNhdGUudmFsdWUoKSk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGVu
Y29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICByZXR1cm4gYmFzZTY0
RW5jb2RlVG9TdHJpbmcoZW5jb2Rlci5idWZmZXIoKSk7CiB9CiAKIFdlYlNvY2tldCogSW5zcGVj
dG9yTmV0d29ya0FnZW50Ojp3ZWJTb2NrZXRGb3JSZXF1ZXN0SWQoY29uc3QgUHJvdG9jb2w6Ok5l
dHdvcms6OlJlcXVlc3RJZCYgcmVxdWVzdElkKQpAQCAtMTQxMCw3ICsxNDEwLDcgQEAgYm9vbCBJ
bnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmNhY2hlZFJlc291cgogICAgICAgICB9CiAKICAgICAgICAg
KmJhc2U2NEVuY29kZWQgPSB0cnVlOwotICAgICAgICAqcmVzdWx0ID0gYmFzZTY0RW5jb2RlVG9T
dHJpbmcoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKTsKKyAgICAgICAgKnJlc3VsdCA9
IGJhc2U2NEVuY29kZVRvU3RyaW5nKGJ1ZmZlci0+Ynl0ZXMoKSk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yUGFnZUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Jl
Z3VsYXJFeHByZXNzaW9uLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5jbHVk
ZSA8d3RmL1N0b3B3YXRjaC5oPgorI2luY2x1ZGUgPHd0Zi9jZi9TcGFuQ0YuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9CYXNlNjQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CiAKQEAgLTExMyw3ICsxMTQsNyBAQCBib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6c2hhcmVkQnVm
ZmVyQ29uCiBib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGF0YUNvbnRlbnQoY29uc3QgdWludDhf
dCogZGF0YSwgdW5zaWduZWQgc2l6ZSwgY29uc3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmdOYW1lLCBi
b29sIHdpdGhCYXNlNjRFbmNvZGUsIFN0cmluZyogcmVzdWx0KQogewogICAgIGlmICh3aXRoQmFz
ZTY0RW5jb2RlKSB7Ci0gICAgICAgICpyZXN1bHQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhkYXRh
LCBzaXplKTsKKyAgICAgICAgKnJlc3VsdCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKFNwYW4geyBk
YXRhLCBzaXplIH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTExMDIsNyAr
MTEwMyw3IEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG8KICAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgY3JlYXRlIHdlYiBhcmNoaXZlIGZv
ciBtYWluIGZyYW1lIl9zKTsKIAogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGJ1ZmZlciA9IGFy
Y2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigpOwotICAgIHJldHVybiBiYXNlNjRFbmNvZGVU
b1N0cmluZyhDRkRhdGFHZXRCeXRlUHRyKGJ1ZmZlci5nZXQoKSksIENGRGF0YUdldExlbmd0aChi
dWZmZXIuZ2V0KCkpKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoYXNCeXRlcyhi
dWZmZXIuZ2V0KCkpKTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
YXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5jcHAJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MSwxNiArMTgxLDE0IEBAIFJlZjxTaGFyZWRCdWZmZXI+
IE1IVE1MQXJjaGl2ZTo6Z2VuZXJhdGUKICAgICAgICAgbWh0bWxEYXRhLT5hcHBlbmQoYXNjaWlT
dHJpbmcuZGF0YSgpLCBhc2NpaVN0cmluZy5sZW5ndGgoKSk7CiAKICAgICAgICAgLy8gRklYTUU6
IGlkZWFsbHkgd2Ugd291bGQgZW5jb2RlIHRoZSBjb250ZW50IGFzIGEgc3RyZWFtIHdpdGhvdXQg
aGF2aW5nIHRvIGZldGNoIGl0IGFsbC4KLSAgICAgICAgYXV0byogZGF0YSA9IHJlc291cmNlLmRh
dGEtPmRhdGEoKTsKLSAgICAgICAgc2l6ZV90IGRhdGFMZW5ndGggPSByZXNvdXJjZS5kYXRhLT5z
aXplKCk7CiAgICAgICAgIGlmICghc3RyY21wKGNvbnRlbnRFbmNvZGluZywgcXVvdGVkUHJpbnRh
YmxlKSkgewotICAgICAgICAgICAgYXV0byBlbmNvZGVkRGF0YSA9IHF1b3RlZFByaW50YWJsZUVu
Y29kZShkYXRhLCBkYXRhTGVuZ3RoKTsKKyAgICAgICAgICAgIGF1dG8gZW5jb2RlZERhdGEgPSBx
dW90ZWRQcmludGFibGVFbmNvZGUocmVzb3VyY2UuZGF0YS0+Ynl0ZXMoKSk7CiAgICAgICAgICAg
ICBtaHRtbERhdGEtPmFwcGVuZChlbmNvZGVkRGF0YS5kYXRhKCksIGVuY29kZWREYXRhLnNpemUo
KSk7CiAgICAgICAgICAgICBtaHRtbERhdGEtPmFwcGVuZCgiXHJcbiIsIDIpOwogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKCFzdHJjbXAoY29udGVudEVuY29kaW5nLCBiYXNl
NjQpKTsKICAgICAgICAgICAgIC8vIFdlIGFyZSBub3Qgc3BlY2lmeWluZyBpbnNlcnRMRnMgPSB0
cnVlIGJlbG93IGFzIGl0IHdvdWxkIGN1dCB0aGUgbGluZXMgd2l0aCBMRnMgYW5kIE1IVE1MIHJl
cXVpcmVzIENSTEZzLgotICAgICAgICAgICAgYXV0byBlbmNvZGVkRGF0YSA9IGJhc2U2NEVuY29k
ZVRvVmVjdG9yKGRhdGEsIGRhdGFMZW5ndGgpOworICAgICAgICAgICAgYXV0byBlbmNvZGVkRGF0
YSA9IGJhc2U2NEVuY29kZVRvVmVjdG9yKHJlc291cmNlLmRhdGEtPmJ5dGVzKCkpOwogICAgICAg
ICAgICAgY29uc3Qgc2l6ZV90IG1heGltdW1MaW5lTGVuZ3RoID0gNzY7CiAgICAgICAgICAgICBz
aXplX3QgaW5kZXggPSAwOwogICAgICAgICAgICAgc2l6ZV90IGVuY29kZWREYXRhTGVuZ3RoID0g
ZW5jb2RlZERhdGEuc2l6ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUv
bWh0bWwvTUhUTUxQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9hcmNoaXZlL21odG1sL01IVE1MUGFyc2VyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxQYXJzZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTUsNyArMTk1LDcgQEAgUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gTUhUTUxQ
YXJzZXI6OnBhcgogICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAgIHN3aXRjaCAobWltZUhl
YWRlci5jb250ZW50VHJhbnNmZXJFbmNvZGluZygpKSB7CiAgICAgY2FzZSBNSU1FSGVhZGVyOjpC
YXNlNjQ6IHsKLSAgICAgICAgYXV0byBkZWNvZGVkRGF0YSA9IGJhc2U2NERlY29kZShjb250ZW50
LT5kYXRhKCksIGNvbnRlbnQtPnNpemUoKSk7CisgICAgICAgIGF1dG8gZGVjb2RlZERhdGEgPSBi
YXNlNjREZWNvZGUoY29udGVudC0+Ynl0ZXMoKSk7CiAgICAgICAgIGlmICghZGVjb2RlZERhdGEp
IHsKICAgICAgICAgICAgIExPR19FUlJPUigiSW52YWxpZCBiYXNlNjQgY29udGVudCBmb3IgTUhU
TUwgcGFydC4iKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMjA0LDcgKzIwNCw3
IEBAIFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IE1IVE1MUGFyc2VyOjpwYXIKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIGNhc2UgTUlNRUhlYWRlcjo6UXVvdGVkUHJpbnRhYmxlOgotICAgICAg
ICBkYXRhID0gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnRlbnQtPmRhdGEoKSwgY29udGVudC0+
c2l6ZSgpKTsKKyAgICAgICAgZGF0YSA9IHF1b3RlZFByaW50YWJsZURlY29kZShjb250ZW50LT5i
eXRlcygpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNSU1FSGVhZGVyOjpTZXZlbkJpdDoK
ICAgICBjYXNlIE1JTUVIZWFkZXI6OkJpbmFyeToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9pY29uL0ljb25Mb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9pY29uL0ljb25Mb2FkZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzEx
NSw3IEBAIHZvaWQgSWNvbkxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmUKICAgICAgICAg
ZGF0YSA9IG51bGxwdHI7CiAKICAgICBjb25zdGV4cHIgdWludDhfdCBwZGZNYWdpY051bWJlcltd
ID0geyAnJScsICdQJywgJ0QnLCAnRicgfTsKLSAgICBpZiAoZGF0YSAmJiBkYXRhLT5zdGFydHNX
aXRoKFNwYW4geyBwZGZNYWdpY051bWJlciwgc3RkOjpzaXplKHBkZk1hZ2ljTnVtYmVyKSB9KSkg
eworICAgIGlmIChkYXRhICYmIGRhdGEtPnN0YXJ0c1dpdGgocGRmTWFnaWNOdW1iZXIpKSB7CiAg
ICAgICAgIExPRyhJY29uRGF0YWJhc2UsICJJY29uTG9hZGVyOjpmaW5pc2hMb2FkaW5nKCkgLSBJ
Z25vcmluZyBpY29uIGF0ICVzIGJlY2F1c2UgaXQgYXBwZWFycyB0byBiZSBhIFBERiIsIG1fcmVz
b3VyY2UtPnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKICAgICAgICAgZGF0YSA9IG51
bGxwdHI7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9CYXNlNjRVdGlsaXRpZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNw
cAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9CYXNlNjRVdGlsaXRp
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIEV4Y2VwdGlvbk9yPFN0cmlu
Zz4gQmFzZTY0VXRpbGl0aWVzOjpidG8KICAgICBpZiAoIXN0cmluZ1RvRW5jb2RlLmlzQWxsTGF0
aW4xKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3Ig
fTsKIAotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhzdHJpbmdUb0VuY29kZS5sYXRp
bjEoKSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKHN0cmluZ1RvRW5jb2RlLmxh
dGluMSgpLmJ5dGVzKCkpOwogfQogCiBFeGNlcHRpb25PcjxTdHJpbmc+IEJhc2U2NFV0aWxpdGll
czo6YXRvYihjb25zdCBTdHJpbmcmIGVuY29kZWRTdHJpbmcpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEuY3BwCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgUmVmPFNoYXJlZEJ1ZmZlcj4gUGFzdGVi
b2FyZEN1c3RvbURhdGE6OgogICAgIGVuY29kZXIgPDwgbV9vcmlnaW47CiAgICAgZW5jb2RlciA8
PCBzYW1lT3JpZ2luQ3VzdG9tU3RyaW5nRGF0YSgpOwogICAgIGVuY29kZXIgPDwgb3JkZXJlZFR5
cGVzKCk7Ci0gICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCks
IGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUo
ZW5jb2Rlci5idWZmZXIoKSk7CiB9CiAKIFBhc3RlYm9hcmRDdXN0b21EYXRhIFBhc3RlYm9hcmRD
dXN0b21EYXRhOjpmcm9tUGVyc2lzdGVuY2VEZWNvZGVyKFdURjo6UGVyc2lzdGVuY2U6OkRlY29k
ZXImJiBkZWNvZGVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIu
Y3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRC
dWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwyNCArMzAsMjAgQEAKIAogI2luY2x1ZGUg
PGFsZ29yaXRobT4KICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CisjaW5jbHVkZSA8d3RmL2Nm
L1NwYW5DRi5oPgogI2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi91bmlj
b2RlL1VURjhDb252ZXJzaW9uLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU2hhcmVkQnVm
ZmVyOjpTaGFyZWRCdWZmZXIoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCitTaGFy
ZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKLSAg
ICBhcHBlbmQoZGF0YSwgc2l6ZSk7Ci19Ci0KLVNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKGNv
bnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKQotewotICAgIGFwcGVuZChyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgc2l6ZSk7CisgICAgYXBwZW5kKGRhdGEpOwogfQog
CiBTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYm
IGZpbGVEYXRhKQotICAgIDogbV9zaXplKGZpbGVEYXRhLnNpemUoKSkKKyAgICA6IG1fc2l6ZShm
aWxlRGF0YS5kYXRhKCkuc2l6ZSgpKQogewogICAgIG1fc2VnbWVudHMuYXBwZW5kKHswLCBEYXRh
U2VnbWVudDo6Y3JlYXRlKFdURk1vdmUoZmlsZURhdGEpKX0pOwogfQpAQCAtMTg4LDEzICsxODQs
MTMgQEAgdm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVuZChjb25zdCBTaGFyZWRCdQogICAgIEFTU0VS
VChpbnRlcm5hbGx5Q29uc2lzdGVudCgpKTsKIH0KIAotdm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVu
ZChjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoKQordm9pZCBTaGFyZWRCdWZmZXI6
OmFwcGVuZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKICAgICBBU1NFUlQoIW1faGFz
QmVlbkNvbWJpbmVkSW50b09uZVNlZ21lbnQpOwogICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3I7
Ci0gICAgdmVjdG9yLmFwcGVuZChkYXRhLCBsZW5ndGgpOwotICAgIG1fc2VnbWVudHMuYXBwZW5k
KHttX3NpemUsIERhdGFTZWdtZW50OjpjcmVhdGUoV1RGTW92ZSh2ZWN0b3IpKX0pOwotICAgIG1f
c2l6ZSArPSBsZW5ndGg7CisgICAgdmVjdG9yLmFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKTsKKyAgICBtX3NlZ21lbnRzLmFw
cGVuZCh7IG1fc2l6ZSwgRGF0YVNlZ21lbnQ6OmNyZWF0ZShXVEZNb3ZlKHZlY3RvcikpIH0pOwor
ICAgIG1fc2l6ZSArPSBkYXRhLnNpemUoKTsKICAgICBBU1NFUlQoaW50ZXJuYWxseUNvbnNpc3Rl
bnQoKSk7CiB9CiAKQEAgLTIzMiw3ICsyMjgsNyBAQCB2b2lkIFNoYXJlZEJ1ZmZlcjo6Zm9yRWFj
aFNlZ21lbnQoY29uc3QgCiAgICAgICAgIGFwcGx5KFNwYW4geyBzZWdtZW50LnNlZ21lbnQtPmRh
dGEoKSwgc2VnbWVudC5zZWdtZW50LT5zaXplKCkgfSk7CiB9CiAKLWJvb2wgU2hhcmVkQnVmZmVy
OjpzdGFydHNXaXRoKGNvbnN0IFNwYW48Y29uc3QgdWludDhfdD4mIHByZWZpeCkgY29uc3QKK2Jv
b2wgU2hhcmVkQnVmZmVyOjpzdGFydHNXaXRoKGNvbnN0IFNwYW48Y29uc3Qgc3RkOjpieXRlPiYg
cHJlZml4KSBjb25zdAogewogICAgIGlmIChwcmVmaXguZW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CkBAIC0yNDAsNyArMjM2LDcgQEAgYm9vbCBTaGFyZWRCdWZmZXI6OnN0YXJ0c1dpdGgo
Y29uc3QgU3BhbgogICAgIGlmIChzaXplKCkgPCBwcmVmaXguc2l6ZSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBjb25zdCB1aW50OF90KiBwcmVmaXhQdHIgPSBwcmVmaXguZGF0YSgp
OworICAgIGF1dG8qIHByZWZpeFB0ciA9IHByZWZpeC5kYXRhKCk7CiAgICAgc2l6ZV90IHJlbWFp
bmluZyA9IHByZWZpeC5zaXplKCk7CiAgICAgZm9yIChhdXRvJiBzZWdtZW50IDogbV9zZWdtZW50
cykgewogICAgICAgICBzaXplX3QgYW1vdW50VG9Db21wYXJlVGhpc1RpbWUgPSBzdGQ6Om1pbihy
ZW1haW5pbmcsIHNlZ21lbnQuc2VnbWVudC0+c2l6ZSgpKTsKQEAgLTMwMSwxMSArMjk3LDQwIEBA
IGNvbnN0IHVpbnQ4X3QqIFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQKICNpZiBVU0UoR1NUUkVB
TUVSKQogICAgICAgICBbXShjb25zdCBSZWZQdHI8R3N0TWFwcGVkT3duZWRCdWZmZXI+JiBkYXRh
KSB7IHJldHVybiBkYXRhLT5kYXRhKCk7IH0sCiAjZW5kaWYKLSAgICAgICAgW10oY29uc3QgRmls
ZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IHVpbnQ4X3QqPihkYXRhLmRhdGEoKSk7IH0KKyAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6
TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KGRhdGEuZGF0YSgpLmRhdGEoKSk7IH0KICAgICApOwogICAgIHJldHVybiBXVEY6OnZp
c2l0KHZpc2l0b3IsIG1faW1tdXRhYmxlRGF0YSk7CiB9CiAKK1NwYW48Y29uc3Qgc3RkOjpieXRl
PiBTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpieXRlcygpIGNvbnN0Cit7CisgICAgYXV0byB2
aXNpdG9yID0gV1RGOjptYWtlVmlzaXRvcigKKyAgICAgICAgW10oY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBkYXRhKSB7CisgICAgICAgICAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgZGF0YSB9KTsK
KyAgICAgICAgfSwKKyNpZiBVU0UoQ0YpCisgICAgICAgIFtdKGNvbnN0IFJldGFpblB0cjxDRkRh
dGFSZWY+JiBkYXRhKSB7CisgICAgICAgICAgICByZXR1cm4gYXNCeXRlcyhkYXRhLmdldCgpKTsK
KyAgICAgICAgfSwKKyNlbmRpZgorI2lmIFVTRShHTElCKQorICAgICAgICBbXShjb25zdCBHUmVm
UHRyPEdCeXRlcz4mIGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBz
dGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZ19ieXRlc19nZXRfZGF0YShkYXRhLmdldCgpLCBu
dWxscHRyKSksIGdfYnl0ZXNfZ2V0X3NpemUoZGF0YS5nZXQoKSkgfSk7CisgICAgICAgIH0sCisj
ZW5kaWYKKyNpZiBVU0UoR1NUUkVBTUVSKQorICAgICAgICBbXShjb25zdCBSZWZQdHI8R3N0TWFw
cGVkT3duZWRCdWZmZXI+JiBkYXRhKSB7CisgICAgICAgICAgICByZXR1cm4gYXNCeXRlcyhTcGFu
IHsgZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXplKCkgfSk7CisgICAgICAgIH0sCisjZW5kaWYKKyAg
ICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsKKyAgICAg
ICAgICAgIHJldHVybiBkYXRhLmRhdGEoKTsKKyAgICAgICAgfQorICAgICk7CisgICAgcmV0dXJu
IFdURjo6dmlzaXQodmlzaXRvciwgbV9pbW11dGFibGVEYXRhKTsKKworfQorCiBib29sIFNoYXJl
ZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmNvbnRhaW5zTWFwcGVkRmlsZURhdGEoKSBjb25zdAogewog
ICAgIHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVE
YXRhPihtX2ltbXV0YWJsZURhdGEpOwpAQCAtMzE5LDcgKzM0NCw3IEBAIHZvaWQgU2hhcmVkQnVm
ZmVyOjpoaW50TWVtb3J5Tm90TmVlZGVkU28KIAogV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBT
aGFyZWRCdWZmZXI6OmRlY29kZXIoKSBjb25zdAogewotICAgIHJldHVybiB7IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEoKSksIHNpemUoKSB9OworICAgIHJldHVybiB7IGJ5
dGVzKCkgfTsKIH0KIAogYm9vbCBTaGFyZWRCdWZmZXI6Om9wZXJhdG9yPT0oY29uc3QgU2hhcmVk
QnVmZmVyJiBvdGhlcikgY29uc3QKQEAgLTM4NCw3ICs0MDksNyBAQCBzaXplX3QgU2hhcmVkQnVm
ZmVyOjpEYXRhU2VnbWVudDo6c2l6ZSgpCiAjaWYgVVNFKEdTVFJFQU1FUikKICAgICAgICAgW10o
Y29uc3QgUmVmUHRyPEdzdE1hcHBlZE93bmVkQnVmZmVyPiYgZGF0YSkgeyByZXR1cm4gZGF0YS0+
c2l6ZSgpOyB9LAogI2VuZGlmCi0gICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZp
bGVEYXRhJiBkYXRhKSB7IHJldHVybiBkYXRhLnNpemUoKTsgfQorICAgICAgICBbXShjb25zdCBG
aWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeyByZXR1cm4gZGF0YS5kYXRhKCkuc2l6
ZSgpOyB9CiAgICAgKTsKICAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBtX2ltbXV0YWJs
ZURhdGEpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC02Nyw4ICs2NywxMiBAQCBjbGFzcyBTaGFyZWRCdWZmZXJEYXRh
VmlldzsKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIFNoYXJlZEJ1ZmZlciA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFNoYXJlZEJ1ZmZlcj4gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVy
PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcik7IH0KLSAgICBz
dGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVf
dCBzaXplKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihkYXRhLCBzaXplKSk7
IH0KLSAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IGNoYXIqIGRhdGEs
IHNpemVfdCBzaXplKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihkYXRhLCBz
aXplKSk7IH0KKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKFNwYW48Y29uc3Qg
c3RkOjpieXRlPiBkYXRhKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihkYXRh
KSk7IH0KKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKFNwYW48Y29uc3QgdWlu
dDhfdD4gZGF0YSkgeyByZXR1cm4gY3JlYXRlKGFzQnl0ZXMoZGF0YSkpOyB9CisgICAgc3RhdGlj
IFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShTcGFuPGNvbnN0IGNoYXI+IGRhdGEpIHsgcmV0dXJu
IGNyZWF0ZShhc0J5dGVzKGRhdGEpKTsgfQorICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBj
cmVhdGUoY29uc3Qgc3RkOjpieXRlKiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gY3JlYXRl
KFNwYW4geyBkYXRhLCBzaXplIH0pOyB9CisgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNy
ZWF0ZShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gY3JlYXRlKFNw
YW4geyBkYXRhLCBzaXplIH0pOyB9CisgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0
ZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gY3JlYXRlKFNwYW4geyBk
YXRhLCBzaXplIH0pOyB9CiAgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShGaWxl
U3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIG1hcHBlZEZpbGVEYXRhKSB7IHJldHVybiBhZG9wdFJl
ZigqbmV3IFNoYXJlZEJ1ZmZlcihXVEZNb3ZlKG1hcHBlZEZpbGVEYXRhKSkpOyB9CiAKICAgICBl
bnVtIGNsYXNzIE1heVVzZUZpbGVNYXBwaW5nIDogYm9vbCB7IE5vLCBZZXMgfTsKQEAgLTEwMSw2
ICsxMDUsOCBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IEF1ZGl0IHRoZSBjYWxsIHNpdGVzIG9m
IHRoaXMgZnVuY3Rpb24gYW5kIHJlcGxhY2UgdGhlbSB3aXRoIGl0ZXJhdGlvbiBpZiBwb3NzaWJs
ZS4KICAgICBjb25zdCB1aW50OF90KiBkYXRhKCkgY29uc3Q7CiAgICAgY29uc3QgY2hhciogZGF0
YUFzQ2hhclB0cigpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+
KGRhdGEoKSk7IH0KKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25zdCB7IHJl
dHVybiBhc0J5dGVzKFNwYW4geyBkYXRhKCksIHNpemUoKSB9KTsgfQorCiAgICAgVmVjdG9yPHVp
bnQ4X3Q+IGNvcHlEYXRhKCkgeyByZXR1cm4geyBkYXRhKCksIHNpemUoKSB9OyB9CiAKICAgICAv
LyBDb21iaW5lcyBhbGwgdGhlIHNlZ21lbnRzIGludG8gYSBWZWN0b3IgYW5kIHJldHVybnMgdGhh
dCB2ZWN0b3IgYWZ0ZXIgY2xlYXJpbmcgdGhlIFNoYXJlZEJ1ZmZlci4KQEAgLTExNSw4ICsxMjEs
MTIgQEAgcHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXplKCk7
IH0KIAogICAgIHZvaWQgYXBwZW5kKGNvbnN0IFNoYXJlZEJ1ZmZlciYpOwotICAgIHZvaWQgYXBw
ZW5kKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwotICAgIHZvaWQgYXBwZW5kKGNvbnN0IGNoYXIq
IGRhdGEsIHNpemVfdCBsZW5ndGgpIHsgYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KGRhdGEpLCBsZW5ndGgpOyB9CisgICAgdm9pZCBhcHBlbmQoU3Bhbjxjb25zdCBzdGQ6
OmJ5dGU+KTsKKyAgICB2b2lkIGFwcGVuZChTcGFuPGNvbnN0IHVpbnQ4X3Q+IGRhdGEpIHsgYXBw
ZW5kKGFzQnl0ZXMoZGF0YSkpOyB9CisgICAgdm9pZCBhcHBlbmQoU3Bhbjxjb25zdCBjaGFyPiBk
YXRhKSB7IGFwcGVuZChhc0J5dGVzKGRhdGEpKTsgfQorICAgIHZvaWQgYXBwZW5kKGNvbnN0IHN0
ZDo6Ynl0ZSogZGF0YSwgc2l6ZV90IGxlbmd0aCkgeyBhcHBlbmQoU3BhbiB7IGRhdGEsIGxlbmd0
aCB9KTsgfQorICAgIHZvaWQgYXBwZW5kKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5n
dGgpIHsgYXBwZW5kKFNwYW4geyBkYXRhLCBsZW5ndGggfSk7IH0KKyAgICB2b2lkIGFwcGVuZChj
b25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKSB7IGFwcGVuZChTcGFuIHsgZGF0YSwgbGVu
Z3RoIH0pOyB9CiAgICAgdm9pZCBhcHBlbmQoVmVjdG9yPHVpbnQ4X3Q+JiYpOwogCiAgICAgdm9p
ZCBjbGVhcigpOwpAQCAtMTMxLDYgKzE0MSw4IEBAIHB1YmxpYzoKICAgICAgICAgV0VCQ09SRV9F
WFBPUlQgY29uc3QgdWludDhfdCogZGF0YSgpIGNvbnN0OwogICAgICAgICBXRUJDT1JFX0VYUE9S
VCBzaXplX3Qgc2l6ZSgpIGNvbnN0OwogCisgICAgICAgIFdFQkNPUkVfRVhQT1JUIFNwYW48Y29u
c3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAgICAgICAgIHN0YXRpYyBSZWY8RGF0YVNl
Z21lbnQ+IGNyZWF0ZShWZWN0b3I8dWludDhfdD4mJiBkYXRhKQogICAgICAgICB7CiAgICAgICAg
ICAgICBkYXRhLnNocmlua1RvRml0KCk7CkBAIC0xODcsNyArMTk5LDkgQEAgcHVibGljOgogICAg
IH07CiAKICAgICB2b2lkIGZvckVhY2hTZWdtZW50KGNvbnN0IEZ1bmN0aW9uPHZvaWQoY29uc3Qg
U3Bhbjxjb25zdCB1aW50OF90PiYpPiYpIGNvbnN0OwotICAgIGJvb2wgc3RhcnRzV2l0aChjb25z
dCBTcGFuPGNvbnN0IHVpbnQ4X3Q+JiBwcmVmaXgpIGNvbnN0OworCisgICAgYm9vbCBzdGFydHNX
aXRoKGNvbnN0IFNwYW48Y29uc3Qgc3RkOjpieXRlPiYgcHJlZml4KSBjb25zdDsKKyAgICBib29s
IHN0YXJ0c1dpdGgoY29uc3QgU3Bhbjxjb25zdCB1aW50OF90PiYgcHJlZml4KSBjb25zdCB7IHJl
dHVybiBzdGFydHNXaXRoKGFzQnl0ZXMocHJlZml4KSk7IH0KIAogICAgIHN0cnVjdCBEYXRhU2Vn
bWVudFZlY3RvckVudHJ5IHsKICAgICAgICAgc2l6ZV90IGJlZ2luUG9zaXRpb247CkBAIC0yMTIs
OCArMjI2LDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFNoYXJlZEJ1ZmZl
cigpID0gZGVmYXVsdDsKLSAgICBleHBsaWNpdCBTaGFyZWRCdWZmZXIoY29uc3QgdWludDhfdCos
IHNpemVfdCk7Ci0gICAgZXhwbGljaXQgU2hhcmVkQnVmZmVyKGNvbnN0IGNoYXIqLCBzaXplX3Qp
OworICAgIGV4cGxpY2l0IFNoYXJlZEJ1ZmZlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwogICAg
IGV4cGxpY2l0IFNoYXJlZEJ1ZmZlcihWZWN0b3I8dWludDhfdD4mJik7CiAgICAgZXhwbGljaXQg
U2hhcmVkQnVmZmVyKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYpOwogI2lmIFVTRShDRikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0NBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L2NvY29hL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgPENvcmVBdWRpby9Db3JlQXVkaW9UeXBlcy5o
PgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtODAs
MTMgKzgxLDEzIEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBDQUF1
ZGlvU3RyZWFtRGVzY3JpcHRpb246OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewot
ICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KCZtX3N0cmVhbURlc2NyaXB0aW9uKSwgc2l6ZW9mKG1fc3RyZWFtRGVzY3JpcHRp
b24pLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJm1fc3Ry
ZWFtRGVzY3JpcHRpb24sIDEgfSwgMSk7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CiBi
b29sIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIENB
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7Ci0gICAgcmV0dXJuIGRlY29k
ZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZkZXNj
cmlwdGlvbi5tX3N0cmVhbURlc2NyaXB0aW9uKSwgc2l6ZW9mKGRlc2NyaXB0aW9uLm1fc3RyZWFt
RGVzY3JpcHRpb24pLCAxKTsKKyAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERh
dGEoU3BhbiB7ICZkZXNjcmlwdGlvbi5tX3N0cmVhbURlc2NyaXB0aW9uLCAxIH0sIDEpOwogfQog
CiBpbmxpbmUgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uIHRvQ0FBdWRpb1N0cmVhbURlc2NyaXB0
aW9uKGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlh
L2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTgsMTUgKzE5OCwxMyBAQCBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZl
cj4gZXh0cmFjdEtleWlkc0ZyCiB7CiAgICAgUmVmPFNoYXJlZEJ1ZmZlcj4ga2V5SWRzID0gU2hh
cmVkQnVmZmVyOjpjcmVhdGUoKTsKIAotICAgIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+
IGtleUlkc01hcCA9IGV4dHJhY3RLZXlpZHNMb2NhdGlvbkZyb21DZW5jSW5pdERhdGEoaW5pdERh
dGEpOwotICAgIHVuc2lnbmVkIGtleUlkQ291bnQgPSBrZXlJZHNNYXAuZmlyc3Q7Ci0gICAgdW5z
aWduZWQgaW5kZXggPSBrZXlJZHNNYXAuc2Vjb25kOworICAgIGF1dG8gW2tleUlkQ291bnQsIGlu
ZGV4XSA9IGV4dHJhY3RLZXlpZHNMb2NhdGlvbkZyb21DZW5jSW5pdERhdGEoaW5pdERhdGEpOwog
CiAgICAgLy8gQ2hlY2sgaWYgaW5pdERhdGEgaXMgYSB2YWxpZCBDRU5DIGluaXREYXRhLgogICAg
IGlmICgha2V5SWRDb3VudCB8fCAhaW5kZXgpCiAgICAgICAgIHJldHVybiBrZXlJZHM7CiAKLSAg
ICBhdXRvKiBkYXRhID0gaW5pdERhdGEuZGF0YSgpOworICAgIGF1dG8gZGF0YSA9IGluaXREYXRh
LmJ5dGVzKCk7CiAKICAgICBhdXRvIG9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAg
ICAgYXV0byBrZXlJZHNBcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKQEAgLTIxOCw3ICsy
MTYsNyBAQCBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gZXh0cmFjdEtleWlkc0ZyCiAgICAgLy8g
ImtpZHMiCiAgICAgLy8gQW4gYXJyYXkgb2Yga2V5IElEcy4gRWFjaCBlbGVtZW50IG9mIHRoZSBh
cnJheSBpcyB0aGUgYmFzZTY0dXJsIGVuY29kaW5nIG9mIHRoZSBvY3RldCBzZXF1ZW5jZSBjb250
YWluaW5nIHRoZSBrZXkgSUQgdmFsdWUuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtl
eUlkQ291bnQ7IGkrKykgewotICAgICAgICBrZXlJZHNBcnJheS0+cHVzaFN0cmluZyhiYXNlNjRV
UkxFbmNvZGVUb1N0cmluZygmZGF0YVtpbmRleF0sIENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVz
KSk7CisgICAgICAgIGtleUlkc0FycmF5LT5wdXNoU3RyaW5nKGJhc2U2NFVSTEVuY29kZVRvU3Ry
aW5nKGRhdGEuc3Vic3BhbihpbmRleCwgQ2xlYXJLZXk6OktleUlEU2l6ZUluQnl0ZXMpKSk7CiAg
ICAgICAgIGluZGV4ICs9IENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVzOwogICAgIH0KIApAQCAt
MjQ1LDcgKzI0Myw3IEBAIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBleHRyYWN0S2V5SWRGcm8K
ICAgICAvLyBUaGUgZm9ybWF0IGlzIGEgSlNPTiBvYmplY3QgY29udGFpbmluZyB0aGUgZm9sbG93
aW5nIG1lbWJlcnM6CiAgICAgLy8gImtpZHMiCiAgICAgLy8gQW4gYXJyYXkgb2Yga2V5IElEcy4g
RWFjaCBlbGVtZW50IG9mIHRoZSBhcnJheSBpcyB0aGUgYmFzZTY0dXJsIGVuY29kaW5nIG9mIHRo
ZSBvY3RldCBzZXF1ZW5jZSBjb250YWluaW5nIHRoZSBrZXkgSUQgdmFsdWUuCi0gICAga2V5SWRz
QXJyYXktPnB1c2hTdHJpbmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoaW5pdERhdGEuZGF0YSgp
LCBpbml0RGF0YS5zaXplKCkpKTsKKyAgICBrZXlJZHNBcnJheS0+cHVzaFN0cmluZyhiYXNlNjRV
UkxFbmNvZGVUb1N0cmluZyhpbml0RGF0YS5ieXRlcygpKSk7CiAKICAgICBvYmplY3QtPnNldEFy
cmF5KCJraWRzIiwgV1RGTW92ZShrZXlJZHNBcnJheSkpOwogICAgIENTdHJpbmcganNvbkRhdGEg
PSBvYmplY3QtPnRvSlNPTlN0cmluZygpLnV0ZjgoKTsKQEAgLTU3OCw5ICs1NzYsOCBAQCB2b2lk
IENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTCiAKICAgICAvLyBDb25zdHJ1Y3Qg
dGhlIEtleVN0YXR1c1ZlY3RvciBvYmplY3QsIHJlcHJlc2VudGluZyByZWxlYXNlZCBrZXlzLCBh
bmQgdGhlIG1lc3NhZ2UgaW4gdGhlCiAgICAgLy8gJ2xpY2Vuc2UgcmVsZWFzZScgZm9ybWF0Lgot
ICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3IgPSBtX2tleVN0b3JlLmFsbEtleXNB
cyhDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6UmVsZWFzZWQpOwotICAgIFJlZlB0cjxT
aGFyZWRCdWZmZXI+IG1lc3NhZ2U7Ci0gICAgeworICAgIGF1dG8ga2V5U3RhdHVzVmVjdG9yID0g
bV9rZXlTdG9yZS5hbGxLZXlzQXMoQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlJlbGVh
c2VkKTsKKyAgICBhdXRvIG1lc3NhZ2UgPSBbJl17CiAgICAgICAgIC8vIENvbnN0cnVjdCBKU09O
IHRoYXQgcmVwcmVzZW50cyB0aGUgJ2xpY2Vuc2UgcmVsZWFzZScgZm9ybWF0LCBjcmVhdGluZyBh
ICdraWRzJyBhcnJheQogICAgICAgICAvLyBvZiBiYXNlNjRVUkwtZW5jb2RlZCBrZXkgSURzIGZv
ciBhbGwga2V5cyB0aGF0IHdlcmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2Vzc2lvbi4KICAgICAg
ICAgYXV0byByb290T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKQEAgLTU4OCw3ICs1
ODUsNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTCiAgICAgICAg
ICAgICBhdXRvIGFycmF5ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICAgICAgZm9y
IChjb25zdCBhdXRvJiBrZXkgOiBtX2tleVN0b3JlKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJU
KGtleS0+aWQoKS5zaXplKCkgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
KTsKLSAgICAgICAgICAgICAgICBhcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVUb1N0
cmluZyhrZXktPmlkKCkuZGF0YSgpLCBrZXktPmlkKCkuc2l6ZSgpKSk7CisgICAgICAgICAgICAg
ICAgYXJyYXktPnB1c2hTdHJpbmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoa2V5LT5pZCgpKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByb290T2JqZWN0LT5zZXRBcnJheSgia2lkcyIs
IFdURk1vdmUoYXJyYXkpKTsKICAgICAgICAgfQpAQCAtNTk2LDExICs1OTMsMTEgQEAgdm9pZCBD
RE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlUwogICAgICAgICAvLyBDb3B5IHRoZSBK
U09OIGRhdGEgaW50byBhIFNoYXJlZEJ1ZmZlciBvYmplY3QuCiAgICAgICAgIFN0cmluZyBtZXNz
YWdlU3RyaW5nID0gcm9vdE9iamVjdC0+dG9KU09OU3RyaW5nKCk7CiAgICAgICAgIENTdHJpbmcg
bWVzc2FnZUNTdHJpbmcgPSBtZXNzYWdlU3RyaW5nLnV0ZjgoKTsKLSAgICAgICAgbWVzc2FnZSA9
IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKG1lc3NhZ2VDU3RyaW5nLmRhdGEoKSwgbWVzc2FnZUNTdHJp
bmcubGVuZ3RoKCkpOwotICAgIH0KKyAgICAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRl
KG1lc3NhZ2VDU3RyaW5nLmRhdGEoKSwgbWVzc2FnZUNTdHJpbmcubGVuZ3RoKCkpOworICAgIH0o
KTsKIAogICAgIG1fa2V5U3RvcmUucmVtb3ZlQWxsS2V5cygpOwotICAgIGRpc3BhdGNoQ2FsbGJh
Y2soV1RGTW92ZShrZXlTdGF0dXNWZWN0b3IpLCBSZWY8U2hhcmVkQnVmZmVyPigqbWVzc2FnZSks
IFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVkKTsKKyAgICBkaXNwYXRjaENhbGxiYWNrKFdURk1vdmUo
a2V5U3RhdHVzVmVjdG9yKSwgV1RGTW92ZShtZXNzYWdlKSwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVk
ZWQpOwogfQogCiB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpzdG9yZVJlY29yZE9m
S2V5VXNhZ2UoY29uc3QgU3RyaW5nJikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dl
bmVyaWMvS2V5ZWREZWNvZGVyR2VuZXJpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ2VuZXJpYy9LZXllZERlY29kZXJHZW5lcmljLmNwcAkocmV2aXNpb24gMjc4
ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9LZXllZERlY29kZXJHZW5l
cmljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBzdGF0aWMgc3RkOjpvcHRp
b25hbDxTdHJpbmc+IHJlYWRTdHJpbmcoCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwog
CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcihzaXplLnZhbHVlKCkpOwotICAgIGlmICghZGVj
b2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLmRhdGEoKSwgc2l6ZS52YWx1ZSgpKSkK
KyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBidWZmZXIgfSkp
CiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgYXV0byByZXN1bHQgPSBTdHJpbmc6
OmZyb21VVEY4KGJ1ZmZlci5kYXRhKCksIHNpemUudmFsdWUoKSk7CiAgICAgaWYgKHJlc3VsdC5p
c051bGwoKSkKQEAgLTExNyw3ICsxMTcsNyBAQCBLZXllZERlY29kZXJHZW5lcmljOjpLZXllZERl
Y29kZXJHZW5lcmljCiAgICAgICAgICAgICBpZiAoIW9rKQogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcigqc2l6ZSk7Ci0gICAgICAgICAg
ICBvayA9IGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ1ZmZlci5kYXRhKCksICpzaXpl
KTsKKyAgICAgICAgICAgIG9rID0gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7
IGJ1ZmZlciB9KTsKICAgICAgICAgICAgIGlmICghb2spCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCktPmFkZCgqa2V5LCBXVEZNb3Zl
KGJ1ZmZlcikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTW9kZWwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Nb2RlbC5o
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9N
b2RlbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+CiB2b2lkIE1vZGVsOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAg
ICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHNpemVfdD4obV9kYXRhLT5zaXplKCkpOwotICAgIGVu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUo
KSwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEobV9kYXRhLT5ieXRlcygp
LCAxKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KQEAgLTc0LDcgKzc0LDcgQEAgUmVm
UHRyPE1vZGVsPiBNb2RlbDo6ZGVjb2RlKERlY29kZXImIGRlYwogCiAgICAgVmVjdG9yPHVpbnQ4
X3Q+IGRhdGE7CiAgICAgZGF0YS5ncm93KCpsZW5ndGgpOwotICAgIGlmICghZGVjb2Rlci5kZWNv
ZGVGaXhlZExlbmd0aERhdGEoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAxKSkKKyAgICBpZiAo
IWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGRhdGEsIDEpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAogICAgIHJldHVybiBNb2RlbDo6Y3JlYXRlKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRl
KFdURk1vdmUoZGF0YSkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1BpeGVsQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUGl4ZWxCdWZmZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODIsNyAr
ODIsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIFBpeGVsQnVmZmVyCiAKICAgICBl
bmNvZGVyIDw8IG1fZm9ybWF0OwogICAgIGVuY29kZXIgPDwgbV9zaXplOwotICAgIGVuY29kZXIu
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPmJ5dGVMZW5ndGgo
KSwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEobV9kYXRhLT5ieXRlcygp
LCAxKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RkOjpvcHRpb25hbDxQaXhlbEJ1
ZmZlcj4gUGl4ZWxCdWZmZXI6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQpAQCAtMTEzLDcgKzEx
Myw3IEBAIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0ZDo6b3B0aW9uYWw8UGkKICAgICBpZiAo
IXJlc3VsdCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIGlmICghZGVjb2Rl
ci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVzdWx0LT5tX2RhdGEtPmRhdGEoKSwgcmVzdWx0LT5t
X2RhdGEtPmJ5dGVMZW5ndGgoKSwgMSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVu
Z3RoRGF0YShyZXN1bHQtPm1fZGF0YS0+d3JpdGFibGVCeXRlcygpLCAxKSkKICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQ
bGF5U3RyZWFtaW5nQVZGT2JqQy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFt
aW5nQVZGT2JqQy5tbQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWlu
Z0FWRk9iakMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAKICNpbXBvcnQgPHd0
Zi9GaWxlU3lzdGVtLmg+CiAjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgogI2ltcG9ydCA8d3Rm
L0xvZ2dlckhlbHBlci5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1NwYW5Db2NvYS5oPgogI2ltcG9y
dCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4K
ICNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KQEAgLTcxNSw3ICs3MTYsNyBAQCB2b2lk
IENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nCiAgICAgICAgIGlkZW50aWZpZXIg
PSBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTppbml0RGF0YS0+Y3JlYXRl
TlNEYXRhKCkuZ2V0KCkgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddKTsKICNpZiBIQVZF
KEZBSVJQTEFZU1RSRUFNSU5HX0NFTkNfSU5JVERBVEEpCiAgICAgZWxzZSBpZiAoaW5pdERhdGFU
eXBlID09IEluaXREYXRhUmVnaXN0cnk6OmNlbmNOYW1lKCkpIHsKLSAgICAgICAgYXV0byBwc3No
U3RyaW5nID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5pdERhdGEtPmRhdGEoKSwgaW5pdERhdGEt
PnNpemUoKSk7CisgICAgICAgIGF1dG8gcHNzaFN0cmluZyA9IGJhc2U2NEVuY29kZVRvU3RyaW5n
KGluaXREYXRhLT5ieXRlcygpKTsKICAgICAgICAgaW5pdGlhbGl6YXRpb25EYXRhID0gW05TSlNP
TlNlcmlhbGl6YXRpb24gZGF0YVdpdGhKU09OT2JqZWN0OkB7IEAicHNzaCI6IChOU1N0cmluZyop
cHNzaFN0cmluZyB9IG9wdGlvbnM6TlNKU09OV3JpdGluZ1ByZXR0eVByaW50ZWQgZXJyb3I6bmls
XTsKICAgICB9CiAjZW5kaWYKQEAgLTExOTEsMTIgKzExOTIsMTAgQEAgdm9pZCBDRE1JbnN0YW5j
ZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZwogICAgICAgICB9CiAKICAgICAgICAgYXV0byByZXF1
ZXN0SlNPTiA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKLSAgICAgICAgZm9yIChhdXRvJiByZXF1
ZXN0RGF0YSA6IHJlcXVlc3RzRGF0YSkgeworICAgICAgICBmb3IgKGF1dG8mIFtrZXlJRCwgcGF5
bG9hZF0gOiByZXF1ZXN0c0RhdGEpIHsKICAgICAgICAgICAgIGF1dG8gZW50cnkgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICAgICAgYXV0byYga2V5SUQgPSByZXF1ZXN0RGF0YS5m
aXJzdDsKLSAgICAgICAgICAgIGF1dG8mIHBheWxvYWQgPSByZXF1ZXN0RGF0YS5zZWNvbmQ7Ci0g
ICAgICAgICAgICBlbnRyeS0+c2V0U3RyaW5nKCJrZXlJRCIsIGJhc2U2NEVuY29kZVRvU3RyaW5n
KGtleUlELT5kYXRhKCksIGtleUlELT5zaXplKCkpKTsKLSAgICAgICAgICAgIGVudHJ5LT5zZXRT
dHJpbmcoInBheWxvYWQiLCBiYXNlNjRFbmNvZGVUb1N0cmluZyhwYXlsb2FkLmdldCgpLmJ5dGVz
LCBwYXlsb2FkLmdldCgpLmxlbmd0aCkpOworICAgICAgICAgICAgZW50cnktPnNldFN0cmluZygi
a2V5SUQiLCBiYXNlNjRFbmNvZGVUb1N0cmluZyhrZXlJRC0+Ynl0ZXMoKSkpOworICAgICAgICAg
ICAgZW50cnktPnNldFN0cmluZygicGF5bG9hZCIsIGJhc2U2NEVuY29kZVRvU3RyaW5nKGFzQnl0
ZXMocGF5bG9hZC5nZXQoKSkpKTsKICAgICAgICAgICAgIHJlcXVlc3RKU09OLT5wdXNoT2JqZWN0
KFdURk1vdmUoZW50cnkpKTsKICAgICAgICAgfQogICAgICAgICBhdXRvIHJlcXVlc3RCdWZmZXIg
PSB1dGY4QnVmZmVyKHJlcXVlc3RKU09OLT50b0pTT05TdHJpbmcoKSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRD
dXN0b21QbGF0Zm9ybURhdGEuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCBzdGF0aWMgU3RyaW5nIGNyZWF0ZVVuaXF1ZUZv
bnROYW1lKCkKICAgICBHVUlEIGZvbnRVdWlkOwogICAgIENvQ3JlYXRlR3VpZCgmZm9udFV1aWQp
OwogCi0gICAgYXV0byBmb250TmFtZSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KCZmb250VXVpZCksIHNpemVvZihmb250VXVpZCkpOworICAgIGF1dG8gZm9u
dE5hbWUgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgJmZvbnRVdWlkLCAxIH0pOwogICAg
IEFTU0VSVChmb250TmFtZS5sZW5ndGgoKSA8IExGX0ZBQ0VTSVpFKTsKICAgICByZXR1cm4gZm9u
dE5hbWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcAko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcg
KzgxLDcgQEAgc3RhdGljIFN0cmluZyBjcmVhdGVVbmlxdWVGb250TmFtZSgpCiAgICAgR1VJRCBm
b250VXVpZDsKICAgICBDb0NyZWF0ZUd1aWQoJmZvbnRVdWlkKTsKIAotICAgIGF1dG8gZm9udE5h
bWUgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhyZWludGVycHJldF9jYXN0PGNoYXIqPigmZm9udFV1
aWQpLCBzaXplb2YoZm9udFV1aWQpKTsKKyAgICBhdXRvIGZvbnROYW1lID0gYmFzZTY0RW5jb2Rl
VG9TdHJpbmcoU3BhbiB7ICZmb250VXVpZCwgMSB9KTsKICAgICBBU1NFUlQoZm9udE5hbWUubGVu
Z3RoKCkgPCBMRl9GQUNFU0laRSk7CiAgICAgcmV0dXJuIGZvbnROYW1lOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRvck1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU1NMS2V5R2VuZXJhdG9yTWFjLm1tCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU1NMS2V5R2Vu
ZXJhdG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksNyArMjE5LDcgQEAgc3RhdGljIFN0
cmluZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZwogICAgIGlmIChTZWNBc24xRW5jb2RlSXRl
bShjb2RlciwgJnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZSwgc2lnbmVkUHVibGljS2V5QW5k
Q2hhbGxlbmdlVGVtcGxhdGUsICZlbmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlKSAh
PSBub0VycikKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJuIGJhc2U2NEVu
Y29kZVRvU3RyaW5nKGVuY29kZWRTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2UuRGF0YSwgZW5j
b2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZS5MZW5ndGgpOworICAgIHJldHVybiBiYXNl
NjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgZW5jb2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5n
ZS5EYXRhLCBlbmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlLkxlbmd0aCB9KTsKIH0K
IAogQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRp
bWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcy5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0
aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCwxNiArMTE0LDE2IEBAIHByaXZhdGU6CiB0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBDYXBhYmlsaXR5VmFsdWVPclJhbmdlOjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3Ro
RGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmbV9taW5PclZhbHVlKSwgc2l6
ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZhbHVlVW5pb24pKTsKLSAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmbV9tYXgp
LCBzaXplb2YoVmFsdWVVbmlvbiksIGFsaWdub2YoVmFsdWVVbmlvbikpOworICAgIGVuY29kZXIu
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmbV9taW5PclZhbHVlLCAxIH0sIGFsaWdub2Yo
VmFsdWVVbmlvbikpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAm
bV9tYXgsIDEgfSwgYWxpZ25vZihWYWx1ZVVuaW9uKSk7CiAgICAgZW5jb2RlciA8PCBtX3R5cGU7
CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CiBib29sIENhcGFiaWxpdHlWYWx1ZU9yUmFu
Z2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBDYXBhYmlsaXR5VmFsdWVPclJhbmdlJiB2YWx1
ZU9yUmFuZ2UpCiB7Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2YWx1ZU9yUmFuZ2UubV9taW5PclZhbHVlKSwgc2l6
ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZhbHVlVW5pb24pKQotICAgICAgICAmJiBkZWNvZGVy
LmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWVP
clJhbmdlLm1fbWF4KSwgc2l6ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZhbHVlVW5pb24pKQor
ICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJnZhbHVlT3JS
YW5nZS5tX21pbk9yVmFsdWUsIDEgfSwgYWxpZ25vZihWYWx1ZVVuaW9uKSkKKyAgICAgICAgJiYg
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZ2YWx1ZU9yUmFuZ2UubV9tYXgs
IDEgfSwgYWxpZ25vZihWYWx1ZVVuaW9uKSkKICAgICAgICAgJiYgZGVjb2Rlci5kZWNvZGUodmFs
dWVPclJhbmdlLm1fdHlwZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50
ZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTM5LDEzICsxMzksMTMgQEAgc3RhdGljIHZvaWQgYWRkU3RyaW5nVG9TSEExKFNIQTEmIHNoYTEs
IAogCiAgICAgaWYgKHN0cmluZy5pczhCaXQoKSAmJiBzdHJpbmcuaXNBbGxBU0NJSSgpKSB7CiAg
ICAgICAgIGNvbnN0IHVpbnQ4X3QgbnVsbEJ5dGUgPSAwOwotICAgICAgICBzaGExLmFkZEJ5dGVz
KHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAgICAgICBzaGExLmFk
ZEJ5dGVzKCZudWxsQnl0ZSwgMSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IHN0cmlu
Zy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkgfSk7CisgICAgICAgIHNoYTEuYWRkQnl0
ZXMoU3BhbiB7ICZudWxsQnl0ZSwgMSB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGF1dG8gdXRmOCA9IHN0cmluZy51dGY4KCk7Ci0gICAgc2hhMS5hZGRCeXRlcyh1dGY4LmRhdGFB
c1VJbnQ4UHRyKCksIHV0ZjgubGVuZ3RoKCkgKyAxKTsgLy8gSW5jbHVkZSB0ZXJtaW5hdGluZyBu
dWxsIGJ5dGUuCisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgdXRmOC5kYXRhQXNVSW50OFB0cigp
LCB1dGY4Lmxlbmd0aCgpICsgMSB9KTsgLy8gSW5jbHVkZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUu
CiB9CiAKIFN0cmluZyBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpoYXNoU3RyaW5nV2l0aFNh
bHQoY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgU3RyaW5nJiBoYXNoU2FsdCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3BwCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRl
bnRpYWxCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsOCArOTcsOSBAQCBib29sIENyZWRl
bnRpYWxCYXNlOjpjb21wYXJlKGNvbnN0IENyZWRlCiAKIFN0cmluZyBDcmVkZW50aWFsQmFzZTo6
c2VyaWFsaXphdGlvbkZvckJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcigpIGNvbnN0CiB7CisgICAg
Ly8gRklYTUU6IEFkZCBtYWtlU3RyaW5nIHZhcmlhbnQgdGhhdCBjcmVhdGVzIGEgdXRmOCBidWZm
ZXIgZGlyZWN0bHkuCiAgICAgYXV0byBjcmVkZW50aWFsU3RyaW5nRGF0YSA9IG1ha2VTdHJpbmco
bV91c2VyLCAnOicsIG1fcGFzc3dvcmQpLnV0ZjgoKTsKLSAgICByZXR1cm4gbWFrZVN0cmluZygi
QmFzaWMgIiwgYmFzZTY0RW5jb2RlZChjcmVkZW50aWFsU3RyaW5nRGF0YSkpOworICAgIHJldHVy
biBtYWtlU3RyaW5nKCJCYXNpYyAiLCBiYXNlNjRFbmNvZGVkKGNyZWRlbnRpYWxTdHJpbmdEYXRh
LmJ5dGVzKCkpKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHAJKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ2VydGlmaWNh
dGVJbmZvQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNyArMjEwLDcgQEAgc3RhdGlj
IHZvaWQgZW5jb2RlQ0ZEYXRhKEVuY29kZXImIGVuY29kZQogICAgIGNvbnN0IHVpbnQ4X3QqIGJ5
dGVQdHIgPSBDRkRhdGFHZXRCeXRlUHRyKGRhdGEpOwogCiAgICAgZW5jb2RlciA8PCBsZW5ndGg7
Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYnl0ZVB0ciwgc3RhdGljX2Nhc3Q8
c2l6ZV90PihsZW5ndGgpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFu
IHsgYnl0ZVB0ciwgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpIH0pOwogfQogCiBzdGF0aWMg
c3RkOjpvcHRpb25hbDxSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4gZGVjb2RlQ0ZEYXRhKERlY29kZXIm
IGRlY29kZXIpCkBAIC0yMjUsNyArMjI1LDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0YWlu
UHRyPENGRGF0YVJlZgogICAgIGlmICghcG9pbnRlcikKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKIAotICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0ZShudWxscHRyLCBwb2ludGVy
LCAqc2l6ZSkpOworICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0ZShudWxscHRyLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwb2ludGVyKSwgKnNpemUpKTsKIH0KIAogI2lm
IEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvQ2VydGlmaWNhdGVJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0NlcnRpZmljYXRlSW5mby5oCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ2VydGlm
aWNhdGVJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgdGVtcGxhdGU8PiBz
dHJ1Y3QgQ29kZXI8R1JlZlB0cjxHQnl0ZUFycgogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNv
ZGVyICZlbmNvZGVyLCBjb25zdCBHUmVmUHRyPEdCeXRlQXJyYXk+JiBieXRlQXJyYXkpCiAgICAg
ewogICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90PihieXRlQXJyYXktPmxl
bik7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGJ5dGVBcnJheS0+ZGF0
YSwgYnl0ZUFycmF5LT5sZW4pOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0
YShTcGFuIHsgYnl0ZUFycmF5LT5kYXRhLCBieXRlQXJyYXktPmxlbiB9KTsKICAgICB9CiAKICAg
ICBzdGF0aWMgc3RkOjpvcHRpb25hbDxHUmVmUHRyPEdCeXRlQXJyYXk+PiBkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKQEAgLTg3LDcgKzg3LDcgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8R1Jl
ZlB0cjxHQnl0ZUFycgogCiAgICAgICAgIEdSZWZQdHI8R0J5dGVBcnJheT4gYnl0ZUFycmF5ID0g
YWRvcHRHUmVmKGdfYnl0ZV9hcnJheV9zaXplZF9uZXcoKnNpemUpKTsKICAgICAgICAgZ19ieXRl
X2FycmF5X3NldF9zaXplKGJ5dGVBcnJheS5nZXQoKSwgKnNpemUpOwotICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ5dGVBcnJheS0+ZGF0YSwgKnNpemUpKQorICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBieXRlQXJyYXkt
PmRhdGEsICpzaXplIH0pKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAg
ICAgcmV0dXJuIGJ5dGVBcnJheTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg1LDcgKzg1LDcgQEAgYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OmV4ZWN1dGVDb21tYW5k
KCkKICAgICByZXR1cm4gc3RlcCgpID09IFNRTElURV9ET05FOwogfQogCi1pbnQgU1FMaXRlU3Rh
dGVtZW50OjpiaW5kQmxvYihpbnQgaW5kZXgsIFNwYW48Y29uc3QgdWludDhfdD4gYmxvYikKK2lu
dCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGJsb2IpCiB7CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAgQVNTRVJUKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkpOwpAQCAtOTUsNiAr
OTUsMTEgQEAgaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IoaW50IGluZGV4LAogICAgIHJl
dHVybiBzcWxpdGUzX2JpbmRfYmxvYihtX3N0YXRlbWVudCwgaW5kZXgsIGJsb2IuZGF0YSgpLCBi
bG9iLnNpemUoKSwgU1FMSVRFX1RSQU5TSUVOVCk7CiB9CiAKK2ludCBTUUxpdGVTdGF0ZW1lbnQ6
OmJpbmRCbG9iKGludCBpbmRleCwgU3Bhbjxjb25zdCB1aW50OF90PiBibG9iKQoreworICAgIHJl
dHVybiBiaW5kQmxvYihpbmRleCwgYXNCeXRlcyhibG9iKSk7Cit9CisKIGludCBTUUxpdGVTdGF0
ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0KQogewogICAgIC8v
IFN0cmluZzo6Y2hhcmFjdGVycygpIHJldHVybnMgMCBmb3IgdGhlIGVtcHR5IHN0cmluZywgd2hp
Y2ggU1FMaXRlCkBAIC0xMDcsNyArMTEyLDcgQEAgaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEJs
b2IoaW50IGluZGV4LAogICAgIGVsc2UKICAgICAgICAgY2hhcmFjdGVycyA9IHVwY29udmVydGVk
Q2hhcmFjdGVyczsKIAotICAgIHJldHVybiBiaW5kQmxvYihpbmRleCwgU3BhbiB7IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGNoYXJhY3RlcnMpLCB0ZXh0Lmxlbmd0aCgpICogc2l6
ZW9mKFVDaGFyKSB9KTsKKyAgICByZXR1cm4gYmluZEJsb2IoaW5kZXgsIFNwYW4geyByZWludGVy
cHJldF9jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGNoYXJhY3RlcnMpLCB0ZXh0Lmxlbmd0aCgpICog
c2l6ZW9mKFVDaGFyKSB9KTsKIH0KIAogaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZFRleHQoaW50
IGluZGV4LCBTdHJpbmdWaWV3IHRleHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9z
cWwvU1FMaXRlU3RhdGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDYgKzM5LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIH5TUUxpdGVTdGF0ZW1lbnQo
KTsKICAgICBXRUJDT1JFX0VYUE9SVCBTUUxpdGVTdGF0ZW1lbnQoU1FMaXRlU3RhdGVtZW50JiYp
OwogICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIGludCBiaW5kQmxvYihpbnQgaW5kZXgsIFNwYW48
Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJpbmRCbG9iKGludCBp
bmRleCwgU3Bhbjxjb25zdCB1aW50OF90Pik7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJpbmRC
bG9iKGludCBpbmRleCwgY29uc3QgU3RyaW5nJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJp
bmRUZXh0KGludCBpbmRleCwgU3RyaW5nVmlldyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU1LDEyICs1NSw3IEBAIHN0YXRpYyBzaXplX3QgbGVuZ3RoT2ZMaW5lRW5k
aW5nQXRJbmRleCgKICAgICByZXR1cm4gMDsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFBy
aW50YWJsZUVuY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQotewotICAgIHJldHVy
biBxdW90ZWRQcmludGFibGVFbmNvZGUoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkpOwotfQot
Ci1WZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IHVpbnQ4X3QqIGlu
cHV0LCBzaXplX3QgaW5wdXRMZW5ndGgpCitzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFBy
aW50YWJsZUVuY29kZShjb25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGlucHV0TGVuZ3RoKQog
ewogICAgIFZlY3Rvcjx1aW50OF90PiBvdXQ7CiAgICAgb3V0LnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoaW5wdXRMZW5ndGgpOwpAQCAtMTE2LDEyICsxMTEsMTIgQEAgVmVjdG9yPHVpbnQ4X3Q+IHF1
b3RlZFByaW50YWJsZUVuY29kZShjbwogICAgIHJldHVybiBvdXQ7CiB9CiAKLVZlY3Rvcjx1aW50
OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkK
K1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGlucHV0KQogewotICAgIHJldHVybiBxdW90ZWRQcmludGFibGVEZWNvZGUoaW5wdXQuZGF0
YSgpLCBpbnB1dC5zaXplKCkpOworICAgIHJldHVybiBxdW90ZWRQcmludGFibGVFbmNvZGUocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgp
KTsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCB1aW50
OF90KiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCkKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4gcXVv
dGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3Ro
KQogewogICAgIFZlY3Rvcjx1aW50OF90PiBvdXQ7CiAgICAgaWYgKCFkYXRhTGVuZ3RoKQpAQCAt
MTU2LDQgKzE1MSw5IEBAIFZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY28K
ICAgICByZXR1cm4gb3V0OwogfQogCitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVj
b2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCkKK3sKKyAgICByZXR1cm4gcXVvdGVkUHJp
bnRhYmxlRGVjb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0LmRhdGEo
KSksIGlucHV0LnNpemUoKSk7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvUXVvdGVkUHJpbnRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzEsMTMgKzMxLDExIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1WZWN0
b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYp
OwotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCB1aW50OF90Kiwg
c2l6ZV90KTsKLQotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCBW
ZWN0b3I8dWludDhfdD4mKTsKLVZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUo
Y29uc3QgdWludDhfdCosIHNpemVfdCk7CitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxl
RW5jb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJp
bnRhYmxlRGVjb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdp
bi5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Q
YXN0ZWJvYXJkV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDcgKzI1MSw3IEBAIHN0ZDo6
b3B0aW9uYWw8UGFzdGVib2FyZEN1c3RvbURhdGE+IFBhc3QKICAgICAgICAgaWYgKEhBTkRMRSBj
YkRhdGEgPSA6OkdldENsaXBib2FyZERhdGEoQ3VzdG9tRGF0YUNsaXBib2FyZEZvcm1hdCkpIHsK
ICAgICAgICAgICAgIHNpemVfdCBzaXplID0gR2xvYmFsU2l6ZShjYkRhdGEpOwogICAgICAgICAg
ICAgYXV0byBkYXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KEdsb2JhbExvY2soY2JEYXRhKSk7
Ci0gICAgICAgICAgICBhdXRvIGN1c3RvbURhdGEgPSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6ZnJv
bVBlcnNpc3RlbmNlRGVjb2Rlcih7ZGF0YSwgc2l6ZX0pOworICAgICAgICAgICAgYXV0byBjdXN0
b21EYXRhID0gUGFzdGVib2FyZEN1c3RvbURhdGE6OmZyb21QZXJzaXN0ZW5jZURlY29kZXIoU3Bh
biB7IGRhdGEsIHNpemUgfSk7CiAKICAgICAgICAgICAgIEdsb2JhbFVubG9jayhjYkRhdGEpOwog
ICAgICAgICAgICAgOjpDbG9zZUNsaXBib2FyZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvd29y
a2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRh
YmFzZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2Vy
dmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NTksMTAgKzQ1OSwxMCBAQCBib29sIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2Vz
CiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDYsIHVwZGF0ZVZpYUNh
Y2hlVG9TdHJpbmcoZGF0YS5yZWdpc3RyYXRpb24udXBkYXRlVmlhQ2FjaGUpKSAhPSBTUUxJVEVf
T0sKICAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRleHQoNywgZGF0YS5zY3Jp
cHRVUkwuc3RyaW5nKCkpICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVt
ZW50LT5iaW5kVGV4dCg4LCB3b3JrZXJUeXBlVG9TdHJpbmcoZGF0YS53b3JrZXJUeXBlKSkgIT0g
U1FMSVRFX09LCi0gICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDksIFNw
YW4geyBjc3BFbmNvZGVyLmJ1ZmZlcigpLCBjc3BFbmNvZGVyLmJ1ZmZlclNpemUoKSB9KSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoOSwgY3Nw
RW5jb2Rlci5idWZmZXIoKSkgIT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0
ZW1lbnQtPmJpbmRUZXh0KDEwLCBkYXRhLnJlZmVycmVyUG9saWN5KSAhPSBTUUxJVEVfT0sKLSAg
ICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoMTEsIFNwYW4geyBzY3JpcHRS
ZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVyKCksIHNjcmlwdFJlc291cmNlTWFwRW5jb2Rlci5idWZm
ZXJTaXplKCkgfSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQt
PmJpbmRCbG9iKDEyLCBTcGFuIHsgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXIoKSwgY2Vy
dGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXJTaXplKCkgfSkgIT0gU1FMSVRFX09LCisgICAgICAg
ICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDExLCBzY3JpcHRSZXNvdXJjZU1hcEVu
Y29kZXIuYnVmZmVyKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVt
ZW50LT5iaW5kQmxvYigxMiwgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXIoKSkgIT0gU1FM
SVRFX09LCiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVf
RE9ORSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIkZh
aWxlZCB0byBzdG9yZSByZWdpc3RyYXRpb24gZGF0YSBpbnRvIHJlY29yZHMgdGFibGUgKCVpKSAt
ICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygp
KTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTUxNyw3ICs1MTcsNyBAQCBTdHJpbmcg
UmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yCiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8
Q29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzPiBjb250ZW50U2VjdXJpdHlQb2xp
Y3k7CiAgICAgICAgIGF1dG8gY29udGVudFNlY3VyaXR5UG9saWN5RGF0YVNwYW4gPSBzcWwtPmNv
bHVtbkJsb2JBc1NwYW4oOCk7CiAgICAgICAgIGlmIChjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRh
U3Bhbi5zaXplKCkpIHsKLSAgICAgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgY3Nw
RGVjb2Rlcihjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhU3Bhbi5kYXRhKCksIGNvbnRlbnRTZWN1
cml0eVBvbGljeURhdGFTcGFuLnNpemUoKSk7CisgICAgICAgICAgICBXVEY6OlBlcnNpc3RlbmNl
OjpEZWNvZGVyIGNzcERlY29kZXIgeyBjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhU3BhbiB9Owog
ICAgICAgICAgICAgY3NwRGVjb2RlciA+PiBjb250ZW50U2VjdXJpdHlQb2xpY3k7CiAgICAgICAg
ICAgICBpZiAoIWNvbnRlbnRTZWN1cml0eVBvbGljeSkgewogICAgICAgICAgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIsICJSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0
UmVjb3JkczogRmFpbGVkIHRvIGRlY29kZSBjb250ZW50U2VjdXJpdHlQb2xpY3kiKTsKQEAgLTUz
MCw3ICs1MzAsNyBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yCiAg
ICAgICAgIEhhc2hNYXA8VVJMLCBTZXJ2aWNlV29ya2VyQ29udGV4dERhdGE6OkltcG9ydGVkU2Ny
aXB0PiBzY3JpcHRSZXNvdXJjZU1hcDsKICAgICAgICAgYXV0byBzY3JpcHRSZXNvdXJjZU1hcERh
dGFTcGFuID0gc3FsLT5jb2x1bW5CbG9iQXNTcGFuKDEwKTsKICAgICAgICAgaWYgKHNjcmlwdFJl
c291cmNlTWFwRGF0YVNwYW4uc2l6ZSgpKSB7Ci0gICAgICAgICAgICBXVEY6OlBlcnNpc3RlbmNl
OjpEZWNvZGVyIHNjcmlwdFJlc291cmNlTWFwRGVjb2RlcihzY3JpcHRSZXNvdXJjZU1hcERhdGFT
cGFuLmRhdGEoKSwgc2NyaXB0UmVzb3VyY2VNYXBEYXRhU3Bhbi5zaXplKCkpOworICAgICAgICAg
ICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBzY3JpcHRSZXNvdXJjZU1hcERlY29kZXIgeyBz
Y3JpcHRSZXNvdXJjZU1hcERhdGFTcGFuIH07CiAgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPEhh
c2hNYXA8VVJMLCBJbXBvcnRlZFNjcmlwdEF0dHJpYnV0ZXM+PiBzY3JpcHRSZXNvdXJjZU1hcFdp
dGhvdXRTY3JpcHRzOwogICAgICAgICAgICAgc2NyaXB0UmVzb3VyY2VNYXBEZWNvZGVyID4+IHNj
cmlwdFJlc291cmNlTWFwV2l0aG91dFNjcmlwdHM7CiAgICAgICAgICAgICBpZiAoIXNjcmlwdFJl
c291cmNlTWFwV2l0aG91dFNjcmlwdHMpIHsKQEAgLTU0Myw3ICs1NDMsNyBAQCBTdHJpbmcgUmVn
aXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yCiAgICAgICAgIGF1dG8gY2VydGlmaWNhdGVJ
bmZvRGF0YVNwYW4gPSBzcWwtPmNvbHVtbkJsb2JBc1NwYW4oMTEpOwogICAgICAgICBzdGQ6Om9w
dGlvbmFsPENlcnRpZmljYXRlSW5mbz4gY2VydGlmaWNhdGVJbmZvOwogCi0gICAgICAgIFdURjo6
UGVyc2lzdGVuY2U6OkRlY29kZXIgY2VydGlmaWNhdGVJbmZvRGVjb2RlcihjZXJ0aWZpY2F0ZUlu
Zm9EYXRhU3Bhbi5kYXRhKCksIGNlcnRpZmljYXRlSW5mb0RhdGFTcGFuLnNpemUoKSk7CisgICAg
ICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgY2VydGlmaWNhdGVJbmZvRGVjb2RlciB7IGNl
cnRpZmljYXRlSW5mb0RhdGFTcGFuIH07CiAgICAgICAgIGNlcnRpZmljYXRlSW5mb0RlY29kZXIg
Pj4gY2VydGlmaWNhdGVJbmZvOwogICAgICAgICBpZiAoIWNlcnRpZmljYXRlSW5mbykgewogICAg
ICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIlJlZ2lzdHJhdGlvbkRh
dGFiYXNlOjppbXBvcnRSZWNvcmRzOiBGYWlsZWQgdG8gZGVjb2RlIGNlcnRpZmljYXRlSW5mbyIp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NjcmlwdFN0
b3JhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9z
ZXJ2ZXIvU1dTY3JpcHRTdG9yYWdlLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dl
YkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NjcmlwdFN0b3JhZ2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIFN0cmluZyBTV1NjcmlwdFN0b3JhZ2U6OnNoYTJIYXNo
KGNvbnN0IFMKICAgICBhdXRvIGlucHV0VXRmOCA9IGlucHV0LnV0ZjgoKTsKICAgICBjcnlwdG8t
PmFkZEJ5dGVzKGlucHV0VXRmOC5kYXRhKCksIGlucHV0VXRmOC5sZW5ndGgoKSk7CiAgICAgYXV0
byBoYXNoID0gY3J5cHRvLT5jb21wdXRlSGFzaCgpOwotICAgIHJldHVybiBiYXNlNjRVUkxFbmNv
ZGVUb1N0cmluZyhoYXNoLmRhdGEoKSwgaGFzaC5zaXplKCkpOworICAgIHJldHVybiBiYXNlNjRV
UkxFbmNvZGVUb1N0cmluZyhoYXNoKTsKIH0KIAogU3RyaW5nIFNXU2NyaXB0U3RvcmFnZTo6c2hh
Mkhhc2goY29uc3QgVVJMJiBpbnB1dCkgY29uc3QKQEAgLTg2LDkgKzg2LDkgQEAgU2NyaXB0QnVm
ZmVyIFNXU2NyaXB0U3RvcmFnZTo6c3RvcmUoY29ucwogICAgIGF1dG8gc2NyaXB0UGF0aCA9IHRo
aXMtPnNjcmlwdFBhdGgocmVnaXN0cmF0aW9uS2V5LCBzY3JpcHRVUkwpOwogICAgIEZpbGVTeXN0
ZW06Om1ha2VBbGxEaXJlY3RvcmllcyhGaWxlU3lzdGVtOjpwYXJlbnRQYXRoKHNjcmlwdFBhdGgp
KTsKIAotICAgIGF1dG8gaXRlcmF0ZU92ZXJCdWZmZXJBbmRXcml0ZURhdGEgPSBbJl0oY29uc3Qg
RnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIHdyaXRlRGF0YSkgewotICAg
ICAgICBmb3IgKGF1dG8gaXQgPSBzY3JpcHQuYnVmZmVyKCktPmJlZ2luKCk7IGl0ICE9IHNjcmlw
dC5idWZmZXIoKS0+ZW5kKCk7ICsraXQpCi0gICAgICAgICAgICB3cml0ZURhdGEoaXQtPnNlZ21l
bnQtPmRhdGEoKSwgaXQtPnNlZ21lbnQtPnNpemUoKSk7CisgICAgYXV0byBpdGVyYXRlT3ZlckJ1
ZmZlckFuZFdyaXRlRGF0YSA9IFsmXShjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3Rk
OjpieXRlPik+JiB3cml0ZURhdGEpIHsKKyAgICAgICAgZm9yIChhdXRvJiBzZWdtZW50RW50cnkg
OiAqc2NyaXB0LmJ1ZmZlcigpKQorICAgICAgICAgICAgd3JpdGVEYXRhKHNlZ21lbnRFbnRyeS5z
ZWdtZW50LT5ieXRlcygpKTsKICAgICB9OwogCiAgICAgaWYgKCFzaG91bGRVc2VGaWxlTWFwcGlu
ZyhzY3JpcHQuYnVmZmVyKCktPnNpemUoKSkpIHsKQEAgLTk3LDggKzk3LDggQEAgU2NyaXB0QnVm
ZmVyIFNXU2NyaXB0U3RvcmFnZTo6c3RvcmUoY29ucwogICAgICAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoU2VydmljZVdvcmtlciwgIlNXU2NyaXB0U3RvcmFnZTo6c3RvcmU6IEZhaWx1cmUgdG8g
c3RvcmUgJXMsIEZpbGVTeXN0ZW06Om9wZW5GaWxlKCkgZmFpbGVkIiwgc2NyaXB0UGF0aC51dGY4
KCkuZGF0YSgpKTsKICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIH0KLSAgICAgICAg
aXRlcmF0ZU92ZXJCdWZmZXJBbmRXcml0ZURhdGEoWyZdKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNp
emVfdCBzaXplKSB7Ci0gICAgICAgICAgICBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShoYW5kbGUs
IGRhdGEsIHNpemUpOworICAgICAgICBpdGVyYXRlT3ZlckJ1ZmZlckFuZFdyaXRlRGF0YShbJl0o
U3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpIHsKKyAgICAgICAgICAgIEZpbGVTeXN0ZW06Ondy
aXRlVG9GaWxlKGhhbmRsZSwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9KTsKICAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxl
KGhhbmRsZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw4MSBAQAorMjAyMS0wNi0xMSAg
U2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRvcHQgU3BhbiBpbiBt
b3JlIHBsYWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgW1dJUF0KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVu
Z2luZUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6ZW5j
b2RlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6ZGVjb2RlUmVjb3Jk
SGVhZGVyKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdp
bmVDYWNoZXMuY3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6c3Rv
cmVPcmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVhZE9y
aWdpbik6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6ZW5jb2RlQ2FjaGVOYW1lcyk6
CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6ZGVjb2RlQ2FjaGVzTmFtZXMpOgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6Om1hcFRvRmlsZSBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Y29tcHV0ZVNIQTEpOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhY2hlOjpEYXRhOjpEYXRhKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVEYXRhQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0
YTo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6OmFk
b3B0TWFwKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRy
eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6OmVuY29kZUFzU3Rv
cmFnZVJlY29yZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6
OmRlY29kZVN0b3JhZ2VSZWNvcmQpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZUtleS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6aGFzaFN0
cmluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6S2V5Ojpjb21wdXRlSGFzaCBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6S2V5Ojpjb21wdXRlUGFydGl0
aW9uSGFzaCBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6ZGVjb2RlUmVj
b3JkTWV0YURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmVuY29kZVJlY29y
ZE1ldGFEYXRhKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVT
dWJyZXNvdXJjZXNFbnRyeS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3Vi
cmVzb3VyY2VzRW50cnk6OmVuY29kZUFzU3RvcmFnZVJlY29yZCBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3VicmVzb3VyY2VzRW50cnk6OmRlY29kZVN0b3JhZ2VSZWNv
cmQpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVyLmg6CisgICAgICAgICog
UGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRD
b2RlcjxDU3RyaW5nPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxDU3Ry
aW5nPjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxTdHJpbmc+OjplbmNv
ZGUpOgorICAgICAgICAoSVBDOjpkZWNvZGVTdHJpbmdUZXh0KToKKyAgICAgICAgKElQQzo6QXJn
dW1lbnRDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVu
dENvZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29kZSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0Fy
Z3VtZW50Q29kZXJzLmg6CisgICAgICAgIChJUEM6OlNpbXBsZUFyZ3VtZW50Q29kZXI6OmVuY29k
ZSk6CisgICAgICAgIChJUEM6OlNpbXBsZUFyZ3VtZW50Q29kZXI6OmRlY29kZSk6CisgICAgICAg
ICogUGxhdGZvcm0vSVBDL0FycmF5UmVmZXJlbmNlLmg6CisgICAgICAgICogUGxhdGZvcm0vSVBD
L0RlY29kZXIuY3BwOgorICAgICAgICAoSVBDOjpEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERh
dGEpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9EZWNvZGVyLmg6CisgICAgICAgIChJUEM6OkRl
Y29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0Vu
Y29kZXIuY3BwOgorICAgICAgICAoSVBDOjpFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEp
OgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9FbmNvZGVyLmg6CisgICAgICAgICogUGxhdGZvcm0v
SVBDL1NoYXJlZEJ1ZmZlckNvcHkuY3BwOgorICAgICAgICAoSVBDOjpTaGFyZWRCdWZmZXJDb3B5
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9u
RW5jb2Rlci5oOgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgor
ICAgICAgICAoSVBDOjplbmNvZGVTaGFyZWRCdWZmZXIpOgorICAgICAgICAoSVBDOjpkZWNvZGVT
aGFyZWRCdWZmZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0
U3RvcmUuY3BwOgorICAgICAgICAoQVBJOjplbmNvZGVDb250ZW50UnVsZUxpc3RNZXRhRGF0YSk6
CisgICAgICAgIChBUEk6OmdldERhdGEpOgorICAgICAgICAoQVBJOjpkZWNvZGVDb250ZW50UnVs
ZUxpc3RNZXRhRGF0YSk6CisgICAgICAgIChBUEk6OndyaXRlRGF0YVRvRmlsZSk6CisgICAgICAg
ICogVUlQcm9jZXNzL21hYy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwOgorICAgICAgICAo
V2ViS2l0OjpIaXN0b3J5RW50cnlEYXRhRW5jb2Rlcjo6b3BlcmF0b3I8PCk6CisgICAgICAgIChX
ZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFFbmNvZGVyOjplbmNvZGVBcml0aG1ldGljVHlwZSk6Cisg
ICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0
aERhdGEpOgorICAgICAgICAoV2ViS2l0OjpIaXN0b3J5RW50cnlEYXRhRGVjb2Rlcjo6b3BlcmF0
b3I+Pik6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFEZWNvZGVyOjpkZWNvZGVB
cml0aG1ldGljVHlwZSk6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFEZWNvZGVy
OjpkZWNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9J
UENUZXN0aW5nQVBJLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6ZW5jb2Rl
VHlwZWRBcnJheSk6CisKIDIwMjEtMDYtMTEgIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBs
ZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyNzg3NTQuCkluZGV4OiBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Qcml2YXRl
Q2xpY2tNZWFzdXJlbWVudE1hbmFnZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyMyw3ICszMjMsNyBAQCB2b2lkIFByaXZhdGVDbGlja01lYXN1
cmVtZW50TWFuYWdlcjo6ZmlyCiAgICAgICAgIGNyeXB0by0+YWRkQnl0ZXMocHVibGljS2V5RGF0
YS0+ZGF0YSgpLCBwdWJsaWNLZXlEYXRhLT5zaXplKCkpOwogICAgICAgICBhdXRvIHB1YmxpY0tl
eURhdGFIYXNoID0gY3J5cHRvLT5jb21wdXRlSGFzaCgpOwogCi0gICAgICAgIGF1dG8ga2V5SUQg
PSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhwdWJsaWNLZXlEYXRhSGFzaC5kYXRhKCksIHB1Ymxp
Y0tleURhdGFIYXNoLnNpemUoKSk7CisgICAgICAgIGF1dG8ga2V5SUQgPSBiYXNlNjRVUkxFbmNv
ZGVUb1N0cmluZyhwdWJsaWNLZXlEYXRhSGFzaCk7CiAgICAgICAgIGlmIChrZXlJRCAhPSBhdHRy
aWJ1dGlvbi5zb3VyY2VVbmxpbmthYmxlVG9rZW4oKS0+a2V5SURCYXNlNjRVUkwpCiAgICAgICAg
ICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
Q2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3Rv
cmFnZUVuZ2luZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTY1LDcgKzU2NSw3IEBAIFN0
b3JhZ2U6OlJlY29yZCBDYWNoZTo6ZW5jb2RlKGNvbnN0IFJlY28KIAogICAgIGVuY29kZXIuZW5j
b2RlQ2hlY2tzdW0oKTsKIAotICAgIERhdGEgaGVhZGVyKGVuY29kZXIuYnVmZmVyKCksIGVuY29k
ZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICBEYXRhIGhlYWRlcihlbmNvZGVyLmJ1ZmZlcigpKTsKICAg
ICBEYXRhIGJvZHk7CiAgICAgV1RGOjpzd2l0Y2hPbihyZWNvcmQucmVzcG9uc2VCb2R5LCBbXShj
b25zdCBSZWY8V2ViQ29yZTo6Rm9ybURhdGE+JiBmb3JtRGF0YSkgewogICAgICAgICAvLyBGSVhN
RTogU3RvcmUgZm9ybSBkYXRhIGJvZHkuCkBAIC02MzAsNyArNjMwLDcgQEAgc3RhdGljIHN0ZDo6
b3B0aW9uYWw8V2ViQ29yZTo6RE9NQ2FjaGVFbgogCiBzdGQ6Om9wdGlvbmFsPENhY2hlOjpEZWNv
ZGVkUmVjb3JkPiBDYWNoZTo6ZGVjb2RlUmVjb3JkSGVhZGVyKGNvbnN0IFN0b3JhZ2U6OlJlY29y
ZCYgc3RvcmFnZSkKIHsKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoc3Rv
cmFnZS5oZWFkZXIuZGF0YSgpLCBzdG9yYWdlLmhlYWRlci5zaXplKCkpOworICAgIFdURjo6UGVy
c2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihTcGFuIHsgc3RvcmFnZS5oZWFkZXIuZGF0YSgpLCBz
dG9yYWdlLmhlYWRlci5zaXplKCkgfSk7CiAKICAgICBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gaW5z
ZXJ0aW9uVGltZTsKICAgICBkZWNvZGVyID4+IGluc2VydGlvblRpbWU7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0
b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwNSwxNCArMTA1LDE0IEBAIHZvaWQgQ2FjaGVzOjpzdG9yZU9yaWdpbihD
b21wbGV0aW9uQ2FsbGIKICAgICBlbmNvZGVyIDw8IG1fb3JpZ2luLmNsaWVudE9yaWdpbi5wcm90
b2NvbDsKICAgICBlbmNvZGVyIDw8IG1fb3JpZ2luLmNsaWVudE9yaWdpbi5ob3N0OwogICAgIGVu
Y29kZXIgPDwgbV9vcmlnaW4uY2xpZW50T3JpZ2luLnBvcnQ7Ci0gICAgbV9lbmdpbmUtPndyaXRl
RmlsZShjYWNoZXNPcmlnaW5GaWxlbmFtZShtX3Jvb3RQYXRoKSwgRGF0YSB7IGVuY29kZXIuYnVm
ZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpIH0sIFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChz
dGQ6Om9wdGlvbmFsPEVycm9yPiYmIGVycm9yKSBtdXRhYmxlIHsKKyAgICBtX2VuZ2luZS0+d3Jp
dGVGaWxlKGNhY2hlc09yaWdpbkZpbGVuYW1lKG1fcm9vdFBhdGgpLCBEYXRhIHsgZW5jb2Rlci5i
dWZmZXIoKSB9LCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoc3RkOjpvcHRpb25hbDxFcnJvcj4m
JiBlcnJvcikgbXV0YWJsZSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoZXJy
b3IpKTsKICAgICB9KTsKIH0KIAogc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+
IENhY2hlczo6cmVhZE9yaWdpbihjb25zdCBEYXRhJiBkYXRhKQogewotICAgIFdURjo6UGVyc2lz
dGVuY2U6OkRlY29kZXIgZGVjb2RlcihkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOworICAgIFdU
Rjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihTcGFuIHsgZGF0YS5kYXRhKCksIGRhdGEu
c2l6ZSgpIH0pOwogCiAgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRh
dGE+IHRvcE9yaWdpbjsKICAgICBkZWNvZGVyID4+IHRvcE9yaWdpbjsKQEAgLTQwNCwxMiArNDA0
LDEyIEBAIHN0YXRpYyBpbmxpbmUgRGF0YSBlbmNvZGVDYWNoZU5hbWVzKGNvbnMKICAgICAgICAg
ZW5jb2RlciA8PCBjYWNoZS51bmlxdWVOYW1lKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIERhdGEg
eyBlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSB9OworICAgIHJldHVybiBE
YXRhIHsgZW5jb2Rlci5idWZmZXIoKSB9OwogfQogCiBzdGF0aWMgaW5saW5lIEV4cGVjdGVkPFZl
Y3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiwgRXJyb3I+IGRlY29kZUNhY2hlc05hbWVz
KGNvbnN0IERhdGEmIGRhdGEpCiB7Ci0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNv
ZGVyKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVj
b2RlciBkZWNvZGVyKFNwYW4geyBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkgfSk7CiAgICAgc3Rk
OjpvcHRpb25hbDx1aW50NjRfdD4gY291bnQ7CiAgICAgZGVjb2RlciA+PiBjb3VudDsKICAgICBp
ZiAoIWNvdW50KQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogRGF0
YSBEYXRhOjptYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKSBjb25zdAogewogICAgIEZpbGVT
eXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGU7Ci0gICAgYXV0byBhcHBseURhdGEgPSBb
Jl0oY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIGFwcGxpZXIp
IHsgYXBwbHkoYXBwbGllcik7IH07CisgICAgYXV0byBhcHBseURhdGEgPSBbJl0oY29uc3QgRnVu
Y3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYgYXBwbGllcikgeyBhcHBseShhcHBs
aWVyKTsgfTsKICAgICBhdXRvIG1hcHBlZEZpbGUgPSBGaWxlU3lzdGVtOjptYXBUb0ZpbGUocGF0
aCwgc2l6ZSgpLCBXVEZNb3ZlKGFwcGx5RGF0YSksICZoYW5kbGUpOwogICAgIGlmICghbWFwcGVk
RmlsZSkKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTg2LDkgKzg2LDkgQEAgRGF0YSBhZG9wdEFu
ZE1hcEZpbGUoRmlsZVN5c3RlbTo6UGxhdGZvcgogU0hBMTo6RGlnZXN0IGNvbXB1dGVTSEExKGNv
bnN0IERhdGEmIGRhdGEsIGNvbnN0IFNhbHQmIHNhbHQpCiB7CiAgICAgU0hBMSBzaGExOwotICAg
IHNoYTEuYWRkQnl0ZXMoc2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKTsKLSAgICBkYXRhLmFwcGx5
KFsmc2hhMV0oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgc2hh
MS5hZGRCeXRlcyhkYXRhLCBzaXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKHNhbHQpOworICAgIGRh
dGEuYXBwbHkoWyZzaGExXShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkgeworICAgICAgICBz
aGExLmFkZEJ5dGVzKGRhdGEpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9KTsKIApJbmRl
eDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVEYXRhLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsy
OCw3IEBACiAjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rp
b25EaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8d3RmL1NIQTEuaD4KKyNpbmNsdWRlIDx3dGYvU3Bh
bi5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC01NCw2ICs1NSwxMCBAQCBjbGFzcyBEYXRhIHsKIHB1
YmxpYzoKICAgICBEYXRhKCkgeyB9CiAgICAgRGF0YShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsK
KyAgICBEYXRhKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhKQorICAgICAgICA6IERhdGEocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5kYXRhKCkpLCBkYXRhLnNpemUoKSkK
KyAgICB7CisgICAgfQogCiAgICAgfkRhdGEoKSB7IH0KIApAQCAtNzksNyArODQsNyBAQCBwdWJs
aWM6CiAKICAgICBEYXRhIHN1YnJhbmdlKHNpemVfdCBvZmZzZXQsIHNpemVfdCkgY29uc3Q7CiAK
LSAgICBib29sIGFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2wgKGNvbnN0IHVpbnQ4X3QqLCBzaXpl
X3QpPiYpIGNvbnN0OworICAgIGJvb2wgYXBwbHkoY29uc3QgRnVuY3Rpb248Ym9vbCAoU3Bhbjxj
b25zdCBzdGQ6OmJ5dGU+KT4mKSBjb25zdDsKIAogICAgIERhdGEgbWFwVG9GaWxlKGNvbnN0IFN0
cmluZyYgcGF0aCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1tCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZURhdGFDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjksMTIgKzY5LDEyIEBAIGJvb2wg
RGF0YTo6aXNOdWxsKCkgY29uc3QKICAgICByZXR1cm4gIW1fZGlzcGF0Y2hEYXRhOwogfQogCi1i
b29sIERhdGE6OmFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2wgKGNvbnN0IHVpbnQ4X3QqLCBzaXpl
X3QpPiYgYXBwbGllcikgY29uc3QKK2Jvb2wgRGF0YTo6YXBwbHkoY29uc3QgRnVuY3Rpb248Ym9v
bCAoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mIGFwcGxpZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFt
X3NpemUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gZGlzcGF0Y2hfZGF0YV9h
cHBseShtX2Rpc3BhdGNoRGF0YS5nZXQoKSwgWyZhcHBsaWVyXShkaXNwYXRjaF9kYXRhX3QsIHNp
emVfdCwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgcmV0dXJuIGFw
cGxpZXIoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBzaXplKTsKKyAgICAgICAg
cmV0dXJuIGFwcGxpZXIoU3BhbiB7IHN0YXRpY19jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGRhdGEp
LCBzaXplIH0pOwogICAgIH0pOwogfQogCkBAIC05NCwxNCArOTQsMTEgQEAgRGF0YSBjb25jYXRl
bmF0ZShjb25zdCBEYXRhJiBhLCBjb25zdCBEYQogCiBEYXRhIERhdGE6OmFkb3B0TWFwKEZpbGVT
eXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYgbWFwcGVkRmlsZSwgRmlsZVN5c3RlbTo6UGxhdGZvcm1G
aWxlSGFuZGxlIGZkKQogewotICAgIHNpemVfdCBzaXplID0gbWFwcGVkRmlsZS5zaXplKCk7Ci0g
ICAgdm9pZCogbWFwID0gbWFwcGVkRmlsZS5sZWFrSGFuZGxlKCk7Ci0gICAgQVNTRVJUKG1hcCk7
Ci0gICAgQVNTRVJUKG1hcCAhPSBNQVBfRkFJTEVEKTsKKyAgICBhdXRvIG1hcCA9IG1hcHBlZEZp
bGUubGVha0hhbmRsZSgpOworICAgIEFTU0VSVChtYXAuZGF0YSgpKTsKKyAgICBBU1NFUlQobWFw
LmRhdGEoKSAhPSBNQVBfRkFJTEVEKTsKICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmQpOwot
ICAgIGF1dG8gYm9keU1hcCA9IGFkb3B0T1NPYmplY3QoZGlzcGF0Y2hfZGF0YV9jcmVhdGUobWFw
LCBzaXplLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZ
X0RFRkFVTFQsIDApLCBbbWFwLCBzaXplXSB7Ci0gICAgICAgIG11bm1hcChtYXAsIHNpemUpOwot
ICAgIH0pKTsKKyAgICBhdXRvIGJvZHlNYXAgPSBhZG9wdE9TT2JqZWN0KGRpc3BhdGNoX2RhdGFf
Y3JlYXRlKG1hcC5kYXRhKCksIG1hcC5zaXplKCksIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUo
RElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIERJU1BBVENIX0RBVEFfREVTVFJV
Q1RPUl9NVU5NQVApKTsKICAgICByZXR1cm4geyBXVEZNb3ZlKGJvZHlNYXApLCBEYXRhOjpCYWNr
aW5nOjpNYXAgfTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSwxMCArOTksMTAgQEAgU3RvcmFnZTo6UmVjb3JkIEVu
dHJ5OjplbmNvZGVBc1N0b3JhZ2VSZQogICAgIAogICAgIGVuY29kZXIuZW5jb2RlQ2hlY2tzdW0o
KTsKIAotICAgIERhdGEgaGVhZGVyKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6
ZSgpKTsKKyAgICBEYXRhIGhlYWRlciB7IGVuY29kZXIuYnVmZmVyKCkgfTsKICAgICBEYXRhIGJv
ZHk7CiAgICAgaWYgKG1fYnVmZmVyKQotICAgICAgICBib2R5ID0geyBtX2J1ZmZlci0+ZGF0YSgp
LCBtX2J1ZmZlci0+c2l6ZSgpIH07CisgICAgICAgIGJvZHkgPSB7IG1fYnVmZmVyLT5ieXRlcygp
IH07CiAKICAgICByZXR1cm4geyBtX2tleSwgbV90aW1lU3RhbXAsIGhlYWRlciwgYm9keSwgeyB9
IH07CiB9CkBAIC0xMTEsNyArMTExLDcgQEAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBFbnRyeTo6
ZGVjb2RlU3RvcgogewogICAgIGF1dG8gZW50cnkgPSBtYWtlVW5pcXVlPEVudHJ5PihzdG9yYWdl
RW50cnkpOwogCi0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKHN0b3JhZ2VF
bnRyeS5oZWFkZXIuZGF0YSgpLCBzdG9yYWdlRW50cnkuaGVhZGVyLnNpemUoKSk7CisgICAgV1RG
OjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyIHsgU3BhbiB7IHN0b3JhZ2VFbnRyeS5oZWFk
ZXIuZGF0YSgpLCBzdG9yYWdlRW50cnkuaGVhZGVyLnNpemUoKSB9IH07CiAgICAgV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKICAgICBpZiAoIVdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2U6OmRlY29kZShkZWNvZGVyLCByZXNwb25zZSkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVL
ZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlS2V5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04OCwxMyArODgsMTMgQEAgc3RhdGljIHZvaWQgaGFzaFN0cmluZyhTSEExJiBzaGExLCBjb25z
dAogCiAgICAgaWYgKHN0cmluZy5pczhCaXQoKSAmJiBzdHJpbmcuaXNBbGxBU0NJSSgpKSB7CiAg
ICAgICAgIGNvbnN0IHVpbnQ4X3QgbnVsbEJ5dGUgPSAwOwotICAgICAgICBzaGExLmFkZEJ5dGVz
KHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAgICAgICBzaGExLmFk
ZEJ5dGVzKCZudWxsQnl0ZSwgMSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IHN0cmlu
Zy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkgfSk7CisgICAgICAgIHNoYTEuYWRkQnl0
ZXMoU3BhbiB7ICZudWxsQnl0ZSwgMSB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBh
dXRvIGNTdHJpbmcgPSBzdHJpbmcudXRmOCgpOwogICAgIC8vIEluY2x1ZGUgdGVybWluYXRpbmcg
bnVsbCBieXRlLgotICAgIHNoYTEuYWRkQnl0ZXMoY1N0cmluZy5kYXRhQXNVSW50OFB0cigpLCBj
U3RyaW5nLmxlbmd0aCgpICsgMSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgY1N0cmluZy5k
YXRhQXNVSW50OFB0cigpLCBjU3RyaW5nLmxlbmd0aCgpICsgMSB9KTsKIH0KIAogS2V5OjpIYXNo
VHlwZSBLZXk6OmNvbXB1dGVIYXNoKGNvbnN0IFNhbHQmIHNhbHQpIGNvbnN0CkBAIC0xMDIsNyAr
MTAyLDcgQEAgS2V5OjpIYXNoVHlwZSBLZXk6OmNvbXB1dGVIYXNoKGNvbnN0IFNhbAogICAgIC8v
IFdlIGRvbid0IHJlYWxseSBuZWVkIGEgY3J5cHRvZ3JhcGhpYyBoYXNoLiBUaGUga2V5IGlzIGFs
d2F5cyB2ZXJpZmllZCBhZ2FpbnN0IHRoZSBlbnRyeSBoZWFkZXIuCiAgICAgLy8gU0hBMSBqdXN0
IGhhcHBlbnMgdG8gYmUgc3VpdGFibHkgc2l6ZWQsIGZhc3QgYW5kIGF2YWlsYWJsZS4KICAgICBT
SEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhzYWx0LmRhdGEoKSwgc2FsdC5zaXplKCkpOwor
ICAgIHNoYTEuYWRkQnl0ZXMoc2FsdCk7CiAKICAgICBoYXNoU3RyaW5nKHNoYTEsIG1fcGFydGl0
aW9uKTsKICAgICBoYXNoU3RyaW5nKHNoYTEsIG1fdHlwZSk7CkBAIC0xMTcsNyArMTE3LDcgQEAg
S2V5OjpIYXNoVHlwZSBLZXk6OmNvbXB1dGVIYXNoKGNvbnN0IFNhbAogS2V5OjpIYXNoVHlwZSBL
ZXk6OmNvbXB1dGVQYXJ0aXRpb25IYXNoKGNvbnN0IFNhbHQmIHNhbHQpIGNvbnN0CiB7CiAgICAg
U0hBMSBzaGExOwotICAgIHNoYTEuYWRkQnl0ZXMoc2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKTsK
KyAgICBzaGExLmFkZEJ5dGVzKHNhbHQpOwogCiAgICAgaGFzaFN0cmluZyhzaGExLCBtX3BhcnRp
dGlvbik7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlU3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDU0LDggKzQ1NCw4IEBAIHN0cnVjdCBSZWNvcmRNZXRhRGF0
YSB7CiBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlUmVjb3JkTWV0YURhdGEo
UmVjb3JkTWV0YURhdGEmIG1ldGFEYXRhLCBjb25zdCBEYXRhJiBmaWxlRGF0YSkKIHsKICAgICBi
b29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBmaWxlRGF0YS5hcHBseShbJm1ldGFEYXRhLCAmc3Vj
Y2Vzc10oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgV1RGOjpQ
ZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOworICAgIGZpbGVEYXRhLmFw
cGx5KFsmbWV0YURhdGEsICZzdWNjZXNzXShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkgewor
ICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YSk7CiAgICAgICAg
IAogICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBjYWNoZVN0b3JhZ2VWZXJzaW9uOwog
ICAgICAgICBkZWNvZGVyID4+IGNhY2hlU3RvcmFnZVZlcnNpb247CkBAIC01ODYsNyArNTg2LDcg
QEAgc3RhdGljIERhdGEgZW5jb2RlUmVjb3JkTWV0YURhdGEoY29uc3QgUgogCiAgICAgZW5jb2Rl
ci5lbmNvZGVDaGVja3N1bSgpOwogCi0gICAgcmV0dXJuIERhdGEoZW5jb2Rlci5idWZmZXIoKSwg
ZW5jb2Rlci5idWZmZXJTaXplKCkpOworICAgIHJldHVybiB7IGVuY29kZXIuYnVmZmVyKCkgfTsK
IH0KIAogc3RkOjpvcHRpb25hbDxCbG9iU3RvcmFnZTo6QmxvYj4gU3RvcmFnZTo6c3RvcmVCb2R5
QXNCbG9iKFdyaXRlT3BlcmF0aW9uJiB3cml0ZU9wZXJhdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDE0ICsxMjMsMTQgQEAgU3RvcmFnZTo6UmVjb3Jk
IFN1YnJlc291cmNlc0VudHJ5OjplbmNvZAogCiAgICAgZW5jb2Rlci5lbmNvZGVDaGVja3N1bSgp
OwogCi0gICAgcmV0dXJuIHsgbV9rZXksIG1fdGltZVN0YW1wLCB7IGVuY29kZXIuYnVmZmVyKCks
IGVuY29kZXIuYnVmZmVyU2l6ZSgpIH0sIHsgfSwgeyB9fTsKKyAgICByZXR1cm4geyBtX2tleSwg
bV90aW1lU3RhbXAsIHsgZW5jb2Rlci5idWZmZXIoKSB9LCB7IH0sIHsgfX07CiB9CiAKIHN0ZDo6
dW5pcXVlX3B0cjxTdWJyZXNvdXJjZXNFbnRyeT4gU3VicmVzb3VyY2VzRW50cnk6OmRlY29kZVN0
b3JhZ2VSZWNvcmQoY29uc3QgU3RvcmFnZTo6UmVjb3JkJiBzdG9yYWdlRW50cnkpCiB7CiAgICAg
YXV0byBlbnRyeSA9IG1ha2VVbmlxdWU8U3VicmVzb3VyY2VzRW50cnk+KHN0b3JhZ2VFbnRyeSk7
CiAKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoc3RvcmFnZUVudHJ5Lmhl
YWRlci5kYXRhKCksIHN0b3JhZ2VFbnRyeS5oZWFkZXIuc2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNp
c3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyBTcGFuIHsgc3RvcmFnZUVudHJ5LmhlYWRlci5kYXRh
KCksIHN0b3JhZ2VFbnRyeS5oZWFkZXIuc2l6ZSgpIH0gfTsKICAgICBzdGQ6Om9wdGlvbmFsPFZl
Y3RvcjxTdWJyZXNvdXJjZUluZm8+PiBzdWJyZXNvdXJjZXM7CiAgICAgZGVjb2RlciA+PiBzdWJy
ZXNvdXJjZXM7CiAgICAgaWYgKCFzdWJyZXNvdXJjZXMpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0lQQy9Bcmd1bWVudENvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9JUEMvQXJndW1lbnRDb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5
LDEzICs3OSwxMyBAQCBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxULCB0eXBlbmFtZSBzdGQ6OmVuCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5j
b2RlciYgZW5jb2RlciwgVCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZ2YWx1ZSksIHNp
emVvZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKFNwYW4geyAmdmFsdWUsIDEgfSwgYWxpZ25vZihUKSk7CiAgICAgfQogCiAgICAgc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8VD4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewogICAgICAg
ICBUIHJlc3VsdDsKLSAgICAgICAgaWYgKGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZyZXN1bHQpLCBzaXplb2YoVCksIGFsaWdub2YoVCkp
KQorICAgICAgICBpZiAoZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZyZXN1
bHQsIDEgfSkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3Vt
ZW50Q29kZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9B
cmd1bWVudENvZGVycy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIs
NyBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8Q1N0cmluZz46OmVuY29kZShFbmNvCiAKICAgICB1aW50
MzJfdCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAgZW5jb2RlciA8PCBsZW5ndGg7Ci0g
ICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RyaW5nLmRhdGFBc1VJbnQ4UHRyKCks
IGxlbmd0aCwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RyaW5nLmJ5
dGVzKCksIDEpOwogfQogCiBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBBcmd1bWVudENvZGVyPENT
dHJpbmc+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgQ1N0cmluZyYgcmVzdWx0KQpAQCAtMTAz
LDcgKzEwMyw3IEBAIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIEFyZ3VtZW50Q29kZXI8Q1MKIAog
ICAgIGNoYXIqIGJ1ZmZlcjsKICAgICBDU3RyaW5nIHN0cmluZyA9IENTdHJpbmc6Om5ld1VuaW5p
dGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExl
bmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoLCAxKSkK
KyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBidWZmZXIsIGxl
bmd0aCB9LCAxKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmVzdWx0ID0gc3RyaW5n
OwpAQCAtMTIzLDExICsxMjMsNyBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8U3RyaW5nPjo6ZW5jb2Rl
KEVuY29kCiAgICAgYm9vbCBpczhCaXQgPSBzdHJpbmcuaXM4Qml0KCk7CiAKICAgICBlbmNvZGVy
IDw8IGxlbmd0aCA8PCBpczhCaXQ7Ci0KLSAgICBpZiAoaXM4Qml0KQotICAgICAgICBlbmNvZGVy
LmVuY29kZUZpeGVkTGVuZ3RoRGF0YShzdHJpbmcuY2hhcmFjdGVyczgoKSwgbGVuZ3RoICogc2l6
ZW9mKExDaGFyKSwgYWxpZ25vZihMQ2hhcikpOwotICAgIGVsc2UKLSAgICAgICAgZW5jb2Rlci5l
bmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3Ry
aW5nLmNoYXJhY3RlcnMxNigpKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSwgYWxpZ25vZihVQ2hh
cikpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0cmluZy5ieXRlcygpKTsK
IH0KIHRlbXBsYXRlCiB2b2lkIEFyZ3VtZW50Q29kZXI8U3RyaW5nPjo6ZW5jb2RlPEVuY29kZXI+
KEVuY29kZXImLCBjb25zdCBTdHJpbmcmKTsKQEAgLTE0Myw3ICsxMzksNyBAQCBzdGF0aWMgaW5s
aW5lIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBkZWNvCiAgICAgCiAgICAgQ2hhcmFjdGVyVHlwZSog
YnVmZmVyOwogICAgIFN0cmluZyBzdHJpbmcgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQo
bGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEo
cmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJh
Y3RlclR5cGUpLCBhbGlnbm9mKENoYXJhY3RlclR5cGUpKSkKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBidWZmZXIsIGxlbmd0aCB9KSkKICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAKICAgICByZXR1cm4gc3RyaW5nOwpAQCAtMTgxLDEyICsx
NzcsMTIgQEAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgQXJndW1lbnRDb2RlcjxTdAogCiB2b2lk
IEFyZ3VtZW50Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQogewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpLCAxKTsKKyAgICBlbmNvZGVyLmVu
Y29kZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3QsIDEpOwogfQogCiBXQVJOX1VOVVNFRF9SRVRVUk4g
Ym9vbCBBcmd1bWVudENvZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
LCBTSEExOjpEaWdlc3QmIGRpZ2VzdCkKIHsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhl
ZExlbmd0aERhdGEoZGlnZXN0LmRhdGEoKSwgc2l6ZW9mKGRpZ2VzdCksIDEpOworICAgIHJldHVy
biBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3QsIDEpOwogfQogCiAjaWYgSEFW
RShBVURJVF9UT0tFTikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50
Q29kZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1l
bnRDb2RlcnMuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9J
UEMvQXJndW1lbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTIgKzQ1LDEyIEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBTaW1wbGVBcmd1bWUKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBFbmNvZGVyPgogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBj
b25zdCBUJiB0KQogICAgIHsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oJnQpLCBzaXplb2YoVCksIGFsaWdub2Yo
VCkpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJnQsIDEg
fSk7CiAgICAgfQogCiAgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyLCBUJiB0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGRlY29kZXIuZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ0KSwgc2l6ZW9m
KFQpLCBhbGlnbm9mKFQpKTsKKyAgICAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5n
dGhEYXRhKFNwYW4geyAmdCwgMSB9KTsKICAgICB9CiB9OwogCkBAIC02MSwxMyArNjEsMTQgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IEV4dGVudD4gc3RydQogICAgIHsKICAgICAgICAg
aWYgKCFFeHRlbnQpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGVuY29kZXIuZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGFycmF5UmVm
ZXJlbmNlLmRhdGEoKSksIGFycmF5UmVmZXJlbmNlLnNpemUoKSAqIHNpemVvZihUKSwgYWxpZ25v
ZihUKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBhcnJh
eVJlZmVyZW5jZS5kYXRhKCksIGFycmF5UmVmZXJlbmNlLnNpemUoKSB9KTsKICAgICB9CiAgICAg
c3RhdGljIHN0ZDo6b3B0aW9uYWw8QXJyYXlSZWZlcmVuY2VUeXBlPiBkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKICAgICB7CiAgICAgICAgIGlmICghRXh0ZW50KQogICAgICAgICAgICAgcmV0dXJu
IEFycmF5UmVmZXJlbmNlVHlwZSgpOwotICAgICAgICBjb25zdCB1aW50OF90KiBkYXRhID0gZGVj
b2Rlci5kZWNvZGVGaXhlZExlbmd0aFJlZmVyZW5jZShFeHRlbnQgKiBzaXplb2YoVCksIGFsaWdu
b2YoVCkpOworCisgICAgICAgIGNvbnN0IGF1dG8qIGRhdGEgPSBkZWNvZGVyLmRlY29kZUZpeGVk
TGVuZ3RoUmVmZXJlbmNlKEV4dGVudCAqIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CiAgICAgICAg
IGlmICghZGF0YSkKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIHJl
dHVybiBBcnJheVJlZmVyZW5jZVR5cGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4oZGF0YSks
IEV4dGVudCk7CkBAIC04Miw3ICs4Myw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBB
cmd1bWVudENvZGUKICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYXJy
YXlSZWZlcmVuY2Uuc2l6ZSgpKTsKICAgICAgICAgaWYgKCFhcnJheVJlZmVyZW5jZS5zaXplKCkp
CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGFycmF5UmVmZXJlbmNlLmRhdGEo
KSksIGFycmF5UmVmZXJlbmNlLnNpemUoKSAqIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CisgICAg
ICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBhcnJheVJlZmVyZW5jZS5k
YXRhKCksIGFycmF5UmVmZXJlbmNlLnNpemUoKSB9KTsKICAgICB9CiAgICAgc3RhdGljIHN0ZDo6
b3B0aW9uYWw8QXJyYXlSZWZlcmVuY2VUeXBlPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAg
ICB7CkBAIC05Niw3ICs5Nyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBBcmd1bWVu
dENvZGUKICAgICAgICAgaWYgKFVOTElLRUxZKGRhdGFTaXplLmhhc092ZXJmbG93ZWQoKSkpCiAg
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgICAgIGNvbnN0IHVpbnQ4X3Qq
IGRhdGEgPSBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoUmVmZXJlbmNlKGRhdGFTaXplLCBhbGln
bm9mKFQpKTsKKyAgICAgICAgY29uc3QgYXV0byogZGF0YSA9IGRlY29kZXIuZGVjb2RlRml4ZWRM
ZW5ndGhSZWZlcmVuY2UoZGF0YVNpemUsIGFsaWdub2YoVCkpOwogICAgICAgICBpZiAoIWRhdGEp
CiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAgICByZXR1cm4gQXJyYXlS
ZWZlcmVuY2VUeXBlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KGRhdGEpLCBzdGF0aWNfY2Fz
dDxzaXplX3Q+KHNpemUpKTsKQEAgLTQyMyw3ICs0MjQsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpCiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBt
aW5DYXBhY2l0eT4mIHZlY3RvcikKICAgICB7CiAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KHZlY3Rvci5zaXplKCkpOwotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVk
TGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih2ZWN0b3IuZGF0YSgp
KSwgdmVjdG9yLnNpemUoKSAqIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHZlY3RvciwgYWxpZ25vZihUKSk7CiAgICAgfQogICAg
IAogICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVj
b2RlciwgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFj
aXR5PiYgdmVjdG9yKQpAQCAtNDQ2LDcgKzQ0Nyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNp
emVfdCBpbmxpbmVDYXBhY2kKICAgICAgICAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVy
Zmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiB0ZW1wOwogICAgICAgICB0ZW1wLmdyb3coc2l6ZSk7
CiAKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPih0ZW1wLmRhdGEoKSksIHNpemUgKiBzaXplb2YoVCksIGFsaWdub2Yo
VCkpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHRlbXApKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHZlY3Rvci5zd2FwKHRlbXApOwpA
QCAtNDczLDcgKzQ3NCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2kKICAgICAgICAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1p
bkNhcGFjaXR5PiB2ZWN0b3I7CiAgICAgICAgIHZlY3Rvci5ncm93KHNpemUpOwogCi0gICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4odmVjdG9yLmRhdGEoKSksIHNpemUgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpKQorICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHZlY3RvcikpCiAgICAgICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgICAgIHJldHVybiB2ZWN0b3I7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9BcnJheVJlZmVyZW5jZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FycmF5UmVmZXJlbmNlLmgJKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FycmF5UmVmZXJlbmNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDggQEAKIAogbmFtZXNwYWNlIElQQyB7CiAKKy8v
IEZJWE1FOiBSZXBsYWNlIHdpdGggPHd0Zi9TcGFuLmg+CisKIGlubGluZSBjb25zdGV4cHIgc2l6
ZV90IGFycmF5UmVmZXJlbmNlRHluYW1pY0V4dGVudCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6
ZV90Pjo6bWF4KCk7CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgRXh0ZW50ID0gYXJy
YXlSZWZlcmVuY2VEeW5hbWljRXh0ZW50PgpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9J
UEMvRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
RGVjb2Rlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0v
SVBDL0RlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsMTMgKzIwNiwxMyBAQCBib29s
IERlY29kZXI6OmJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhCiAgICAgcmV0dXJuIGFsaWduZWRC
dWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKHJvdW5kVXBUb0FsaWdubWVudChtX2J1ZmZlclBv
cywgYWxpZ25tZW50KSwgbV9idWZmZXIsIG1fYnVmZmVyRW5kLCBzaXplKTsKIH0KIAotYm9vbCBE
ZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUs
IHNpemVfdCBhbGlnbm1lbnQpCitib29sIERlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YShT
cGFuPHN0ZDo6Ynl0ZT4gZGF0YSwgc2l6ZV90IGFsaWdubWVudCkKIHsKLSAgICBpZiAoIWFsaWdu
QnVmZmVyUG9zaXRpb24oYWxpZ25tZW50LCBzaXplKSkKKyAgICBpZiAoIWFsaWduQnVmZmVyUG9z
aXRpb24oYWxpZ25tZW50LCBkYXRhLnNpemUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIG1lbWNweShkYXRhLCBtX2J1ZmZlclBvcywgc2l6ZSk7Ci0gICAgbV9idWZmZXJQb3MgKz0g
c2l6ZTsKKyAgICBtZW1jcHkoZGF0YS5kYXRhKCksIG1fYnVmZmVyUG9zLCBkYXRhLnNpemUoKSk7
CisgICAgbV9idWZmZXJQb3MgKz0gZGF0YS5zaXplKCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNzksNyArNzksMTMgQEAgcHVibGljOgogICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGlz
VmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlclBvcyAhPSBudWxscHRyOyB9CiAgICAgdm9p
ZCBtYXJrSW52YWxpZCgpIHsgbV9idWZmZXJQb3MgPSBudWxscHRyOyB9CiAKLSAgICBXQVJOX1VO
VVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCogZGF0YSwgc2l6
ZV90LCBzaXplX3QgYWxpZ25tZW50KTsKKyAgICBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNv
ZGVGaXhlZExlbmd0aERhdGEoU3BhbjxzdGQ6OmJ5dGU+LCBzaXplX3QgYWxpZ25tZW50KTsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCBzaXplX3QgYWxpZ25tZW50ID0gYWxpZ25vZih0
eXBlbmFtZSBkZWNsdHlwZShTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pOjp2YWx1ZV90
eXBlKSkKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVGaXhlZExlbmd0aERhdGEoYXNXcml0
YWJsZUJ5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSksIGFsaWdubWVudCk7Cisg
ICAgfQogCiAgICAgLy8gVGhlIGRhdGEgaW4gdGhlIHJldHVybmVkIHBvaW50ZXIgaGVyZSB3aWxs
IG9ubHkgYmUgdmFsaWQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgRGVjb2RlciBvYmplY3QuCiAg
ICAgLy8gUmV0dXJucyBudWxscHRyIG9uIGZhaWx1cmUuCkluZGV4OiBTb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0lQQy9FbmNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9FbmNvZGVyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9JUEMvRW5jb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiwxMiArMjAyLDEy
IEBAIHVpbnQ4X3QqIEVuY29kZXI6Omdyb3coc2l6ZV90IGFsaWdubWVudCwKICAgICByZXR1cm4g
bV9idWZmZXIgKyBhbGlnbmVkU2l6ZTsKIH0KIAotdm9pZCBFbmNvZGVyOjplbmNvZGVGaXhlZExl
bmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1l
bnQpCit2b2lkIEVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6
Ynl0ZT4gZGF0YSwgc2l6ZV90IGFsaWdubWVudCkKIHsKLSAgICBBU1NFUlQoIShyZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4oZGF0YSkgJSBhbGlnbm1lbnQpKTsKKyAgICBBU1NFUlQoIShyZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZGF0YS5kYXRhKCkpICUgYWxpZ25tZW50KSk7CiAKLSAg
ICB1aW50OF90KiBidWZmZXIgPSBncm93KGFsaWdubWVudCwgc2l6ZSk7Ci0gICAgbWVtY3B5KGJ1
ZmZlciwgZGF0YSwgc2l6ZSk7CisgICAgYXV0byogYnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQsIGRh
dGEuc2l6ZSgpKTsKKyAgICBtZW1jcHkoYnVmZmVyLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkp
OwogfQogCiB2b2lkIEVuY29kZXI6OmFkZEF0dGFjaG1lbnQoQXR0YWNobWVudCYmIGF0dGFjaG1l
bnQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5oCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorI2lu
Y2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2Ug
SVBDIHsKQEAgLTYwLDcgKzYxLDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgd3JhcEZvclRlc3Rp
bmcoVW5pcXVlUmVmPEVuY29kZXI+JiYpOwogCi0gICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERh
dGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90LCBzaXplX3QgYWxpZ25tZW50KTsKKyAgICB2
b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSwgc2l6
ZV90IGFsaWdubWVudCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgZW5j
b2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCBzaXplX3QgYWxpZ25tZW50ID0gYWxpZ25vZih0
eXBlbmFtZSBkZWNsdHlwZShTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pOjp2YWx1ZV90
eXBlKSkKKyAgICB7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShhc0J5dGVzKFNwYW4g
eyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSksIGFsaWdubWVudCk7CisgICAgfQogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KICAgICBFbmNvZGVyJiBvcGVyYXRvcjw8KFQmJiB0KQpJbmRleDog
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU2hhcmVkQnVmZmVyQ29weS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU2hhcmVkQnVmZmVyQ29weS5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1NoYXJlZEJ1ZmZl
ckNvcHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHZvaWQgU2hhcmVkQnVm
ZmVyQ29weTo6ZW5jb2RlKEVuY29kZXImIGUKICAgICBpZiAoIWJ1ZmZlclNpemUpCiAgICAgICAg
IHJldHVybjsKICAgICBmb3IgKGF1dG8mIHNlZ21lbnQgOiAqbV9idWZmZXIpCi0gICAgICAgIGVu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHNlZ21lbnQuc2VnbWVudC0+ZGF0YSgpLCBzZWdt
ZW50LnNlZ21lbnQtPnNpemUoKSwgMSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKHNlZ21lbnQuc2VnbWVudC0+Ynl0ZXMoKSwgMSk7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8
U2hhcmVkQnVmZmVyQ29weT4gU2hhcmVkQnVmZmVyQ29weTo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uRW5j
b2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNv
bm5lY3Rpb25FbmNvZGVyLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25FbmNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiTWVz
c2FnZU5hbWVzLmgiCisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBJUEMgewpAQCAtNTMsMjIgKzU0LDI4IEBAIHB1YmxpYzoK
IAogICAgIH5TdHJlYW1Db25uZWN0aW9uRW5jb2RlcigpID0gZGVmYXVsdDsKIAotICAgIGJvb2wg
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBz
aXplX3QgYWxpZ25tZW50KQorICAgIGJvb2wgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48Y29u
c3Qgc3RkOjpieXRlPiBkYXRhLCBzaXplX3QgYWxpZ25tZW50KQogICAgIHsKICAgICAgICAgc2l6
ZV90IGJ1ZmZlclBvaW50ZXIgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KG1fYnVmZmVyICsgbV9lbmNvZGVkU2l6ZSkpOwogICAgICAgICBzaXplX3QgbmV3
QnVmZmVyUG9pbnRlciA9IHJvdW5kVXBUb011bHRpcGxlT2YoYWxpZ25tZW50LCBidWZmZXJQb2lu
dGVyKTsKICAgICAgICAgaWYgKG5ld0J1ZmZlclBvaW50ZXIgPCBidWZmZXJQb2ludGVyKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpbnRwdHJfdCBhbGlnbmVkU2l6ZSA9IG1f
ZW5jb2RlZFNpemUgKyAobmV3QnVmZmVyUG9pbnRlciAtIGJ1ZmZlclBvaW50ZXIpOwotICAgICAg
ICBpZiAoIXJlc2VydmUoYWxpZ25lZFNpemUsIHNpemUpKQorICAgICAgICBpZiAoIXJlc2VydmUo
YWxpZ25lZFNpemUsIGRhdGEuc2l6ZSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgdWludDhfdCogYnVmZmVyID0gbV9idWZmZXIgKyBhbGlnbmVkU2l6ZTsKLSAgICAgICAg
bWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7Ci0gICAgICAgIG1fZW5jb2RlZFNpemUgPSBhbGln
bmVkU2l6ZSArIHNpemU7CisgICAgICAgIGF1dG8qIGJ1ZmZlciA9IG1fYnVmZmVyICsgYWxpZ25l
ZFNpemU7CisgICAgICAgIG1lbWNweShidWZmZXIsIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7
CisgICAgICAgIG1fZW5jb2RlZFNpemUgPSBhbGlnbmVkU2l6ZSArIGRhdGEuc2l6ZSgpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAg
IHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCBzaXplX3QgYWxpZ25tZW50ID0g
YWxpZ25vZihUKSkKKyAgICB7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShhc0J5dGVz
KFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSksIGFsaWdubWVudCk7CisgICAgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBTdHJlYW1Db25uZWN0aW9uRW5jb2RlciYgb3Bl
cmF0b3I8PChUJiYgdCkKICAgICB7CiAgICAgICAgIEFyZ3VtZW50Q29kZXI8c3RkOjpyZW1vdmVf
Y29uc3RfdDxzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxUPj4sIHZvaWQ+OjplbmNvZGUoKnRoaXMs
IHN0ZDo6Zm9yd2FyZDxUPih0KSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3Jl
QXJndW1lbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dl
YkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
NCw3ICsxNDQsNyBAQCBzdGF0aWMgdm9pZCBlbmNvZGVTaGFyZWRCdWZmZXIoRW5jb2RlciYgCiAg
ICAgLy8gb3ZlciB0aGUgSVBDLiBDb25uZWN0aW9uVW5peC5jcHAgYWxyZWFkeSB1c2VzIHNoYXJl
ZCBtZW1vcnkgdG8gc2VuZCBhbnkgSVBDIG1lc3NhZ2UgdGhhdCBpcwogICAgIC8vIHRvbyBsYXJn
ZS4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg1NzEuCiAg
ICAgZm9yIChjb25zdCBhdXRvJiBlbGVtZW50IDogKmJ1ZmZlcikKLSAgICAgICAgZW5jb2Rlci5l
bmNvZGVGaXhlZExlbmd0aERhdGEoZWxlbWVudC5zZWdtZW50LT5kYXRhKCksIGVsZW1lbnQuc2Vn
bWVudC0+c2l6ZSgpLCAxKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEo
ZWxlbWVudC5zZWdtZW50LT5ieXRlcygpLCAxKTsKICNlbHNlCiAgICAgU2hhcmVkTWVtb3J5OjpI
YW5kbGUgaGFuZGxlOwogICAgIGF1dG8gc2hhcmVkTWVtb3J5QnVmZmVyID0gU2hhcmVkTWVtb3J5
Ojpjb3B5QnVmZmVyKCpidWZmZXIpOwpAQCAtMTgwLDcgKzE4MCw3IEBAIHN0YXRpYyBXQVJOX1VO
VVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVTaGEKIAogICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwog
ICAgIGRhdGEuZ3JvdyhidWZmZXJTaXplKTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgMSkpCisgICAgaWYgKCFkZWNvZGVy
LmRlY29kZUZpeGVkTGVuZ3RoRGF0YShkYXRhLCAxKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgYnVmZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShkYXRhKSk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQXV4aWxpYXJ5UHJvY2Vzc01hYy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQXV4aWxpYXJ5UHJvY2Vzc01hYy5tbQko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL0F1eGlsaWFyeVBy
b2Nlc3NNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMyMSw3ICszMjEsNyBAQCBzdGF0aWMgU3Ry
aW5nIHNhbmRib3hGaWxlUGF0aChjb25zdCBTdHJpCiAgICAgY3J5cHRvLT5hZGRCeXRlcyhoZWFk
ZXIuZGF0YSgpLCBoZWFkZXIubGVuZ3RoKCkpOwogICAgIGF1dG8gaGFzaCA9IGNyeXB0by0+Y29t
cHV0ZUhhc2goKTsKIAotICAgIHJldHVybiBtYWtlU3RyaW5nKGRpcmVjdG9yeVBhdGgsICIvQ29t
cGlsZWRTYW5kYm94KyIsIGJhc2U2NFVSTEVuY29kZWQoaGFzaC5kYXRhKCksIGhhc2guc2l6ZSgp
KSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoZGlyZWN0b3J5UGF0aCwgIi9Db21waWxlZFNhbmRi
b3grIiwgYmFzZTY0VVJMRW5jb2RlZChoYXNoKSk7CiB9CiAKIHN0YXRpYyBib29sIGVuc3VyZVNh
bmRib3hDYWNoZURpcmVjdG9yeShjb25zdCBTYW5kYm94SW5mbyYgaW5mbykKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvU2hhcmVkL3dpbi9XZWJDb3JlQXJndW1lbnRDb2RlcnNXaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9XZWJDb3JlQXJndW1lbnRDb2RlcnNXaW4u
Y3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTIgKzUxLDEyIEBA
IHN0ZDo6b3B0aW9uYWw8Rm9udEF0dHJpYnV0ZXM+IEFyZ3VtZW50Q28KIHRlbXBsYXRlPD4gc3Ry
dWN0IEFyZ3VtZW50Q29kZXI8TE9HRk9OVD4gewogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyLCBjb25zdCBMT0dGT05UJiBsb2dGb250KQogICAgIHsKLSAgICAgICAgZW5j
b2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oJmxvZ0ZvbnQpLCBzaXplb2YgbG9nRm9udCwgMSk7CisgICAgICAgIGVuY29kZXIuZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmbG9nRm9udCwgMSB9LCAxKTsKICAgICB9CiAgICAgc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8TE9HRk9OVD4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAg
ewogICAgICAgICBMT0dGT05UIGxvZ0ZvbnQ7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVG
aXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJmxvZ0ZvbnQpLCBzaXpl
b2YobG9nRm9udCksIDEpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhE
YXRhKFNwYW4geyAmbG9nRm9udCwgMSB9LCAxKSkKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CiAgICAgICAgIHJldHVybiBsb2dGb250OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNw
cAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNv
bnRlbnRSdWxlTGlzdFN0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDE4ICsxMzEsMjAg
QEAgc3RhdGljIFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhIGVuY29kZQogICAgIGVuY29kZXIg
PDwgbWV0YURhdGEuY29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNvZGVTaXplOwogICAgIGVuY29kZXIg
PDwgbWV0YURhdGEuY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluOwogCi0gICAgQVNTRVJUKGVu
Y29kZXIuYnVmZmVyU2l6ZSgpID09IENvbnRlbnRSdWxlTGlzdEZpbGVIZWFkZXJTaXplKTsKLSAg
ICByZXR1cm4gV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGEoZW5jb2Rlci5idWZmZXIoKSwgZW5j
b2Rlci5idWZmZXJTaXplKCkpOworICAgIEFTU0VSVChlbmNvZGVyLmJ1ZmZlcigpLnNpemUoKSA9
PSBDb250ZW50UnVsZUxpc3RGaWxlSGVhZGVyU2l6ZSk7CisgICAgcmV0dXJuIFdlYktpdDo6TmV0
d29ya0NhY2hlOjpEYXRhIHsgZW5jb2Rlci5idWZmZXIoKSB9OwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiB2b2lkIGdldERhdGEoY29uc3QgVCYsIGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3Qg
dWludDhfdCosIHNpemVfdCk+Jik7Ci10ZW1wbGF0ZTw+IHZvaWQgZ2V0RGF0YShjb25zdCBXZWJL
aXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YSYgZGF0YSwgY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1
aW50OF90Kiwgc2l6ZV90KT4mIGZ1bmN0aW9uKQordGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBn
ZXREYXRhKGNvbnN0IFQmLCBjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRl
Pik+Jik7CisKK3RlbXBsYXRlPD4gdm9pZCBnZXREYXRhKGNvbnN0IFdlYktpdDo6TmV0d29ya0Nh
Y2hlOjpEYXRhJiBkYXRhLCBjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRl
Pik+JiBmdW5jdGlvbikKIHsKICAgICBkYXRhLmFwcGx5KGZ1bmN0aW9uKTsKIH0KLXRlbXBsYXRl
PD4gdm9pZCBnZXREYXRhKGNvbnN0IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlciYgZGF0YSwgY29uc3Qg
RnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIGZ1bmN0aW9uKQorCit0ZW1w
bGF0ZTw+IHZvaWQgZ2V0RGF0YShjb25zdCBXZWJDb3JlOjpTaGFyZWRCdWZmZXImIGRhdGEsIGNv
bnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mIGZ1bmN0aW9uKQogewot
ICAgIGZ1bmN0aW9uKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgZnVuY3Rpb24oZGF0
YS5ieXRlcygpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTE1MCwxMyArMTUyLDEz
IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPENvbnRlbnRSdWxlTGlzdE1ldGEKIHsKICAgICBib29s
IHN1Y2Nlc3MgPSBmYWxzZTsKICAgICBDb250ZW50UnVsZUxpc3RNZXRhRGF0YSBtZXRhRGF0YTsK
LSAgICBnZXREYXRhKGZpbGVEYXRhLCBbJm1ldGFEYXRhLCAmc3VjY2VzcywgJmZpbGVEYXRhXShj
b25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeworICAgIGdldERhdGEoZmlsZURhdGEs
IFsmbWV0YURhdGEsICZzdWNjZXNzLCAmZmlsZURhdGFdKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBk
YXRhKSB7CiAgICAgICAgIC8vIFRoZSBmaWxlIGRhdGEgc2hvdWxkIGJlIG1hcHBlZCBpbnRvIG9u
ZSBjb250aW51b3VzIG1lbW9yeSBzZWdtZW50IHNvIHRoZSBzaXplCiAgICAgICAgIC8vIHBhc3Nl
ZCB0byB0aGUgYXBwbGllciBzaG91bGQgYWx3YXlzIGVxdWFsIHRoZSBkYXRhIHNpemUuCi0gICAg
ICAgIGlmIChzaXplICE9IGZpbGVEYXRhLnNpemUoKSkKKyAgICAgICAgaWYgKGRhdGEuc2l6ZSgp
ICE9IGZpbGVEYXRhLnNpemUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAg
ICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YSwgc2l6ZSk7CisgICAgICAg
IFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlciB7IGRhdGEgfTsKICAgICAgICAgCiAg
ICAgICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IHZlcnNpb247CiAgICAgICAgIGRlY29kZXIg
Pj4gdmVyc2lvbjsKQEAgLTIyOCw4ICsyMzAsOCBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxNYXBw
ZWREYXRhPiBvcGVuQW5kCiBzdGF0aWMgYm9vbCB3cml0ZURhdGFUb0ZpbGUoY29uc3QgV2ViS2l0
OjpOZXR3b3JrQ2FjaGU6OkRhdGEmIGZpbGVEYXRhLCBQbGF0Zm9ybUZpbGVIYW5kbGUgZmQpCiB7
CiAgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKLSAgICBmaWxlRGF0YS5hcHBseShbZmQsICZzdWNj
ZXNzXShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgewotICAgICAgICBpZiAod3Jp
dGVUb0ZpbGUoZmQsIGRhdGEsIHNpemUpID09IC0xKSB7CisgICAgZmlsZURhdGEuYXBwbHkoW2Zk
LCAmc3VjY2Vzc10oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpIHsKKyAgICAgICAgaWYgKHdy
aXRlVG9GaWxlKGZkLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpID09IC0xKSB7CiAgICAgICAg
ICAgICBzdWNjZXNzID0gZmFsc2U7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50
aWNhdGlvblBhbmVsLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25Q
YW5lbC5tbQkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBAQAogI2ltcG9ydCA8cGFsL2Ny
eXB0by9DcnlwdG9EaWdlc3QuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogI2ltcG9ydCA8
d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1NwYW5Db2NvYS5oPgogI2ltcG9y
dCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4K
IApAQCAtNzAsNyArNzEsNyBAQCBzdGF0aWMgUmV0YWluUHRyPE5TRGF0YT4gcHJvZHVjZUNsaWVu
dERhCiAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpAIndlYmF1dGhuLmdldCIgZm9yS2V5
OkAidHlwZSJdOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgW2RpY3Rpb25hcnkgc2V0T2Jq
ZWN0OmJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNoYWxsZW5nZS5ieXRlcywgY2hhbGxlbmdlLmxl
bmd0aCkgZm9yS2V5OkAiY2hhbGxlbmdlIl07CisgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0OmJh
c2U2NFVSTEVuY29kZVRvU3RyaW5nKGFzQnl0ZXMoY2hhbGxlbmdlKSkgZm9yS2V5OkAiY2hhbGxl
bmdlIl07CiAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0Om9yaWdpbiBmb3JLZXk6QCJvcmlnaW4i
XTsKIAogICAgIHJldHVybiBbTlNKU09OU2VyaWFsaXphdGlvbiBkYXRhV2l0aEpTT05PYmplY3Q6
ZGljdGlvbmFyeS5nZXQoKSBvcHRpb25zOk5TSlNPTldyaXRpbmdTb3J0ZWRLZXlzIGVycm9yOm5p
bF07CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2Nv
YS9Mb2NhbEF1dGhlbnRpY2F0b3IubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tCShyZXZp
c2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlv
bi9Db2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3IubW0JKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1
LDcgQEAgc3RhdGljIGlubGluZSBIYXNoU2V0PFN0cmluZz4gcHJvZHVjZUhhcwogICAgIEhhc2hT
ZXQ8U3RyaW5nPiByZXN1bHQ7CiAgICAgZm9yIChhdXRvJiBjcmVkZW50aWFsRGVzY3JpcHRvciA6
IGNyZWRlbnRpYWxEZXNjcmlwdG9ycykgewogICAgICAgICBpZiAoZW1wdHlUcmFuc3BvcnRzT3JD
b250YWluKGNyZWRlbnRpYWxEZXNjcmlwdG9yLnRyYW5zcG9ydHMsIEF1dGhlbnRpY2F0b3JUcmFu
c3BvcnQ6OkludGVybmFsKSAmJiBjcmVkZW50aWFsRGVzY3JpcHRvci50eXBlID09IFB1YmxpY0tl
eUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkgJiYgY3JlZGVudGlhbERlc2NyaXB0b3IuaWRWZWN0
b3Iuc2l6ZSgpID09IGNyZWRlbnRpYWxJZExlbmd0aCkKLSAgICAgICAgICAgIHJlc3VsdC5hZGQo
YmFzZTY0RW5jb2RlVG9TdHJpbmcoY3JlZGVudGlhbERlc2NyaXB0b3IuaWRWZWN0b3IuZGF0YSgp
LCBjcmVkZW50aWFsRGVzY3JpcHRvci5pZFZlY3Rvci5zaXplKCkpKTsKKyAgICAgICAgICAgIHJl
c3VsdC5hZGQoYmFzZTY0RW5jb2RlVG9TdHJpbmcoY3JlZGVudGlhbERlc2NyaXB0b3IuaWRWZWN0
b3IpKTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTIzMyw3ICsyMzMsNyBAQCB2
b2lkIExvY2FsQXV0aGVudGljYXRvcjo6bWFrZUNyZWRlbnRpYWwoCiAgICAgICAgIGlmIChub3RG
b3VuZCAhPSBtX2V4aXN0aW5nQ3JlZGVudGlhbHMuZmluZE1hdGNoaW5nKFsmZXhjbHVkZUNyZWRl
bnRpYWxJZHNdIChhdXRvJiBjcmVkZW50aWFsKSB7CiAgICAgICAgICAgICBhdXRvKiByYXdJZCA9
IGNyZWRlbnRpYWwtPnJhd0lkKCk7CiAgICAgICAgICAgICBBU1NFUlQocmF3SWQpOwotICAgICAg
ICAgICAgcmV0dXJuIGV4Y2x1ZGVDcmVkZW50aWFsSWRzLmNvbnRhaW5zKGJhc2U2NEVuY29kZVRv
U3RyaW5nKHJhd0lkLT5kYXRhKCksIHJhd0lkLT5ieXRlTGVuZ3RoKCkpKTsKKyAgICAgICAgICAg
IHJldHVybiBleGNsdWRlQ3JlZGVudGlhbElkcy5jb250YWlucyhiYXNlNjRFbmNvZGVUb1N0cmlu
ZyhyYXdJZC0+Ynl0ZXMoKSkpOwogICAgICAgICB9KSkgewogICAgICAgICAgICAgcmVjZWl2ZUV4
Y2VwdGlvbih7IE5vdEFsbG93ZWRFcnJvciwgIkF0IGxlYXN0IG9uZSBjcmVkZW50aWFsIG1hdGNo
ZXMgYW4gZW50cnkgb2YgdGhlIGV4Y2x1ZGVDcmVkZW50aWFscyBsaXN0IGluIHRoZSBwbGF0Zm9y
bSBhdHRhY2hlZCBhdXRoZW50aWNhdG9yLiJfcyB9LCBXZWJBdXRoZW50aWNhdGlvblN0YXR1czo6
TEFFeGNsdWRlQ3JlZGVudGlhbHNNYXRjaGVkKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTUx
MCw3ICs1MTAsNyBAQCB2b2lkIExvY2FsQXV0aGVudGljYXRvcjo6Z2V0QXNzZXJ0aW9uKCkKICAg
ICAgICAgfQogCiAgICAgICAgIGF1dG8qIHJhd0lkID0gY3JlZGVudGlhbC0+cmF3SWQoKTsKLSAg
ICAgICAgaWYgKGFsbG93Q3JlZGVudGlhbElkcy5jb250YWlucyhiYXNlNjRFbmNvZGVUb1N0cmlu
ZyhyYXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgpKSkpCisgICAgICAgIGlmIChhbGxv
d0NyZWRlbnRpYWxJZHMuY29udGFpbnMoYmFzZTY0RW5jb2RlVG9TdHJpbmcocmF3SWQtPmJ5dGVz
KCkpKSkKICAgICAgICAgICAgIGFzc2VydGlvblJlc3BvbnNlcy51bmNoZWNrZWRBcHBlbmQoY3Jl
ZGVudGlhbC5jb3B5UmVmKCkpOwogICAgIH0KICAgICBpZiAoYXNzZXJ0aW9uUmVzcG9uc2VzLmlz
RW1wdHkoKSkgewpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRp
b24vTW9jay9Nb2NrTG9jYWxDb25uZWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0xvY2FsQ29ubmVjdGlvbi5t
bQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVu
dGljYXRpb24vTW9jay9Nb2NrTG9jYWxDb25uZWN0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjIsNyArMTYyLDcgQEAgdm9pZCBNb2NrTG9jYWxDb25uZWN0aW9uOjpmaWx0ZXJSZXNwb25zZQog
ICAgIGZvciAoOyBpdHIgIT0gcmVzcG9uc2VzLmVuZCgpOyArK2l0cikgewogICAgICAgICBhdXRv
KiByYXdJZCA9IGl0ci0+Z2V0KCkucmF3SWQoKTsKICAgICAgICAgQVNTRVJUKHJhd0lkKTsKLSAg
ICAgICAgYXV0byByYXdJZEJhc2U2NCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKHJhd0lkLT5kYXRh
KCksIHJhd0lkLT5ieXRlTGVuZ3RoKCkpOworICAgICAgICBhdXRvIHJhd0lkQmFzZTY0ID0gYmFz
ZTY0RW5jb2RlVG9TdHJpbmcocmF3SWQtPmJ5dGVzKCkpOwogICAgICAgICBpZiAocmF3SWRCYXNl
NjQgPT0gcHJlZmVycmVkQ3JlZGVudGlhbElkQmFzZTY0KQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL0xlZ2FjeVNlc3Npb25TdGF0
ZUNvZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL0xl
Z2FjeVNlc3Npb25TdGF0ZUNvZGluZy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL21hYy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjksNyArMTI5LDcgQEAgcHVibGljOgogICAgICAgICAqdGhpcyA8PCBsZW5n
dGg7CiAKICAgICAgICAgKnRoaXMgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGxlbmd0aCAqIHNp
emVvZihVQ2hhcikpOwotICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50OF90Kj4oU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0
ZXJzKCkuZ2V0KCkpLCBsZW5ndGggKiBzaXplb2YoVUNoYXIpLCBhbGlnbm9mKFVDaGFyKSk7Cisg
ICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgU3RyaW5nVmlldyh2YWx1ZSkudXBj
b252ZXJ0ZWRDaGFyYWN0ZXJzKCkuZ2V0KCksIGxlbmd0aCB9KTsKIAogICAgICAgICByZXR1cm4g
KnRoaXM7CiAgICAgfQpAQCAtMTM3LDcgKzEzNyw3IEBAIHB1YmxpYzoKICAgICBIaXN0b3J5RW50
cnlEYXRhRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhbHVlKQog
ICAgIHsKICAgICAgICAgKnRoaXMgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZhbHVlLnNpemUo
KSk7Ci0gICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YSh2YWx1ZS5kYXRhKCksIHZhbHVlLnNp
emUoKSwgMSk7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YSh2YWx1ZSwgMSk7CiAKICAg
ICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KQEAgLTE0NSw3ICsxNDUsNyBAQCBwdWJsaWM6CiAg
ICAgSGlzdG9yeUVudHJ5RGF0YUVuY29kZXImIG9wZXJhdG9yPDwoY29uc3QgVmVjdG9yPGNoYXI+
JiB2YWx1ZSkKICAgICB7CiAgICAgICAgICp0aGlzIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2
YWx1ZS5zaXplKCkpOwotICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50OF90Kj4odmFsdWUuZGF0YSgpKSwgdmFsdWUuc2l6ZSgpLCAxKTsKKyAg
ICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHZhbHVlLCAxKTsKIAogICAgICAgICByZXR1cm4g
KnRoaXM7CiAgICAgfQpAQCAtMjA2LDE3ICsyMDYsMjMgQEAgcHJpdmF0ZToKICAgICB7CiAgICAg
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19hcml0aG1ldGljPFR5cGU+Ojp2YWx1ZSwgIiIpOwog
Ci0gICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3Qq
PigmdmFsdWUpLCBzaXplb2YodmFsdWUpLCBzaXplb2YodmFsdWUpKTsKKyAgICAgICAgZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmdmFsdWUsIDEgfSwgc2l6ZW9mKHZhbHVlKSk7CiAgICAg
ICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKLSAgICB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0
YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgYWxpZ25tZW50KQor
ICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRh
LCB1bnNpZ25lZCBhbGlnbm1lbnQpCiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChkYXRh
IHx8ICFzaXplKTsKLSAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KGRhdGEpICUgYWxpZ25tZW50KSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRhdGEuZGF0YSgp
IHx8ICFkYXRhLnNpemUoKSk7CisgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90PihkYXRhLmRhdGEoKSkgJSBhbGlnbm1lbnQpKTsKIAotICAgICAgICB1aW50OF90KiBi
dWZmZXIgPSBncm93KGFsaWdubWVudCwgc2l6ZSk7Ci0gICAgICAgIG1lbWNweShidWZmZXIsIGRh
dGEsIHNpemUpOworICAgICAgICBhdXRvKiBidWZmZXIgPSBncm93KGFsaWdubWVudCwgZGF0YS5z
aXplKCkpOworICAgICAgICBtZW1jcHkoYnVmZmVyLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkp
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBlbmNvZGVGaXhl
ZExlbmd0aERhdGEoVCYmIGRhdGEsIHNpemVfdCBhbGlnbm1lbnQgPSBhbGlnbm9mKFQpKQorICAg
IHsKKyAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGFzQnl0ZXMoU3BhbiB7IHN0ZDo6Zm9y
d2FyZDxUPihkYXRhKSB9KSwgYWxpZ25tZW50KTsKICAgICB9CiAKICAgICB1aW50OF90KiBncm93
KHVuc2lnbmVkIGFsaWdubWVudCwgc2l6ZV90IHNpemUpCkBAIC02MDEsNyArNjA3LDcgQEAgcHVi
bGljOgogCiAgICAgICAgIFVDaGFyKiBidWZmZXI7CiAgICAgICAgIGF1dG8gc3RyaW5nID0gU3Ry
aW5nOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICAgICAgZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1ZmZlciksIGxlbmd0
aCAqIHNpemVvZihVQ2hhciksIGFsaWdub2YoVUNoYXIpKTsKKyAgICAgICAgZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKFNwYW4geyBidWZmZXIsIGxlbmd0aCB9LCBhbGlnbm9mKFVDaGFyKSk7CiAKICAg
ICAgICAgdmFsdWUgPSBzdHJpbmc7CiAgICAgICAgIHJldHVybiAqdGhpczsKQEAgLTczNywxNyAr
NzQzLDIzIEBAIHByaXZhdGU6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19hcml0aG1l
dGljPFR5cGU+Ojp2YWx1ZSwgIiIpOwogICAgICAgICB2YWx1ZSA9IFR5cGUoKTsKIAotICAgICAg
ICBkZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnZhbHVl
KSwgc2l6ZW9mKHZhbHVlKSwgc2l6ZW9mKHZhbHVlKSk7CisgICAgICAgIGRlY29kZUZpeGVkTGVu
Z3RoRGF0YShTcGFuIHsgJnZhbHVlLCAxIH0sIHNpemVvZih2YWx1ZSkpOwogICAgICAgICByZXR1
cm4gKnRoaXM7CiAgICAgfQogCi0gICAgdm9pZCBkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhf
dCogZGF0YSwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGFsaWdubWVudCkKKyAgICB2b2lkIGRlY29k
ZUZpeGVkTGVuZ3RoRGF0YShTcGFuPHN0ZDo6Ynl0ZT4gZGF0YSwgdW5zaWduZWQgYWxpZ25tZW50
KQogICAgIHsKLSAgICAgICAgaWYgKCFhbGlnbkJ1ZmZlclBvc2l0aW9uKGFsaWdubWVudCwgc2l6
ZSkpCisgICAgICAgIGlmICghYWxpZ25CdWZmZXJQb3NpdGlvbihhbGlnbm1lbnQsIGRhdGEuc2l6
ZSgpKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBtZW1jcHkoZGF0YSwgbV9idWZm
ZXIsIHNpemUpOwotICAgICAgICBtX2J1ZmZlciArPSBzaXplOworICAgICAgICBtZW1jcHkoZGF0
YS5kYXRhKCksIG1fYnVmZmVyLCBkYXRhLnNpemUoKSk7CisgICAgICAgIG1fYnVmZmVyICs9IGRh
dGEuc2l6ZSgpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBk
ZWNvZGVGaXhlZExlbmd0aERhdGEoVCYmIGRhdGEsIHNpemVfdCBhbGlnbm1lbnQpCisgICAgewor
ICAgICAgICBkZWNvZGVGaXhlZExlbmd0aERhdGEoYXNXcml0YWJsZUJ5dGVzKFNwYW4geyBzdGQ6
OmZvcndhcmQ8VD4oZGF0YSkgfSksIGFsaWdubWVudCk7CiAgICAgfQogCiAgICAgYm9vbCBhbGln
bkJ1ZmZlclBvc2l0aW9uKHVuc2lnbmVkIGFsaWdubWVudCwgc2l6ZV90IHNpemUpCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRDaGFubmVsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRDaGFu
bmVsLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05l
dHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDggKzU5LDgg
QEAgTmV0d29ya1NlbmRRdWV1ZSBXZWJTb2NrZXRDaGFubmVsOjpjcmVhdAogICAgICAgICBjaGFu
bmVsLm5vdGlmeVNlbmRGcmFtZShXZWJTb2NrZXRGcmFtZTo6T3BDb2RlOjpPcENvZGVUZXh0LCB1
dGY4U3RyaW5nLmRhdGFBc1VJbnQ4UHRyKCksIHV0ZjhTdHJpbmcubGVuZ3RoKCkpOwogICAgICAg
ICBjaGFubmVsLnNlbmRNZXNzYWdlKE1lc3NhZ2VzOjpOZXR3b3JrU29ja2V0Q2hhbm5lbDo6U2Vu
ZFN0cmluZyB7IElQQzo6RGF0YVJlZmVyZW5jZSB7IHV0ZjhTdHJpbmcuZGF0YUFzVUludDhQdHIo
KSwgdXRmOFN0cmluZy5sZW5ndGgoKSB9IH0sIHV0ZjhTdHJpbmcubGVuZ3RoKCkpOwogICAgIH0s
IFsmY2hhbm5lbF0oYXV0byYgc3BhbikgewotICAgICAgICBjaGFubmVsLm5vdGlmeVNlbmRGcmFt
ZShXZWJTb2NrZXRGcmFtZTo6T3BDb2RlOjpPcENvZGVCaW5hcnksIHNwYW4uZGF0YSgpLCBzcGFu
LnNpemUoKSk7Ci0gICAgICAgIGNoYW5uZWwuc2VuZE1lc3NhZ2UoTWVzc2FnZXM6Ok5ldHdvcmtT
b2NrZXRDaGFubmVsOjpTZW5kRGF0YSB7IElQQzo6RGF0YVJlZmVyZW5jZSB7IHNwYW4uZGF0YSgp
LCBzcGFuLnNpemUoKSB9IH0sIHNwYW4uc2l6ZSgpKTsKKyAgICAgICAgY2hhbm5lbC5ub3RpZnlT
ZW5kRnJhbWUoV2ViU29ja2V0RnJhbWU6Ok9wQ29kZTo6T3BDb2RlQmluYXJ5LCByZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzcGFuLmRhdGEoKSksIHNwYW4uc2l6ZSgpKTsKKyAgICAg
ICAgY2hhbm5lbC5zZW5kTWVzc2FnZShNZXNzYWdlczo6TmV0d29ya1NvY2tldENoYW5uZWw6OlNl
bmREYXRhIHsgSVBDOjpEYXRhUmVmZXJlbmNlIHsgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90Kj4oc3Bhbi5kYXRhKCkpLCBzcGFuLnNpemUoKSB9IH0sIHNwYW4uc2l6ZSgpKTsKICAgICB9
LCBbJmNoYW5uZWxdKEV4Y2VwdGlvbkNvZGUgZXhjZXB0aW9uQ29kZSkgewogICAgICAgICBhdXRv
IGNvZGUgPSBzdGF0aWNfY2FzdDxpbnQ+KGV4Y2VwdGlvbkNvZGUpOwogICAgICAgICBjaGFubmVs
LmZhaWwobWFrZVN0cmluZygiRmFpbGVkIHRvIGxvYWQgQmxvYjogZXhjZXB0aW9uIGNvZGUgPSAi
LCBjb2RlKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0
aW5nQVBJLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9JUENUZXN0aW5nQVBJLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5
MSw3ICs2OTEsNyBAQCBzdGF0aWMgYm9vbCBlbmNvZGVUeXBlZEFycmF5KElQQzo6RW5jb2RlCiAg
ICAgaWYgKCFkYXRhLmJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZW5jb2Rl
ci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4o
ZGF0YS5idWZmZXIpLCBkYXRhLmxlbmd0aCwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YS5i
dWZmZXIpLCBkYXRhLmxlbmd0aCB9LCAxKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDog
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9FbnZpcm9ubWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9FbnZpcm9ubWVudC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysr
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRW52aXJvbm1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTYsNyArMTU2LDcgQEAgYm9vbCBFbnZpcm9ubWVudDo6Y29tcHV0ZUlzRGVidWdIZWFwRW5h
YgogICAgIHJldHVybiB0cnVlOwogI2VuZGlmCiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIHRydWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKSW5kZXg6IFRvb2xzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODgwOSkKKysr
IFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDIxLTA2
LTExICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBBZG9wdCBTcGFu
IGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBbV0lQXQorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2Fpcm8vUGl4ZWxEdW1w
U3VwcG9ydENhaXJvLmNwcDoKKyAgICAgICAgKGNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckJpdG1h
cENvbnRleHQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRD
Ry5jcHA6CisgICAgICAgIChjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JCaXRtYXBDb250ZXh0KToK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9CbG9vbUZpbHRlci5jcHA6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpnZW5lcmF0ZVJhbmRvbURpZ2VzdHMpOgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6VEVTVF9GKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIu
bW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9uOjp3ZWJTb2NrZXRIYW5kc2hh
a2UpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvY2Fpcm8vVGVzdEludm9jYXRpb25DYWly
by5jcHA6CisgICAgICAgIChXVFI6OmNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckNhaXJvU3VyZmFj
ZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcDoK
KyAgICAgICAgKFdUUjo6Y29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQ29udGV4dCk6CisKIDIwMjEt
MDYtMTEgIEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAg
ICAgW1dpbl1bRHVtcFJlbmRlclRyZWVdIC0tbm8tdGltZW91dCBzd2l0Y2ggZG9lc24ndCB3b3Jr
CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fpcm8u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NhaXJvL1BpeGVsRHVtcFN1
cHBvcnRDYWlyby5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2NhaXJvL1BpeGVsRHVtcFN1cHBvcnRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcg
Kzc1LDcgQEAgdm9pZCBjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JCaXRtYXBDb250ZQogICAgIFNI
QTEgc2hhMTsKICAgICB1bnNpZ25lZCBjaGFyKiBiaXRtYXBEYXRhID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZSkpOwogICAg
IGZvciAodW5zaWduZWQgcm93ID0gMDsgcm93IDwgcGl4ZWxzSGlnaDsgcm93KyspIHsKLSAgICAg
ICAgc2hhMS5hZGRCeXRlcyhiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lkZSk7CisgICAgICAgIHNo
YTEuYWRkQnl0ZXMoU3BhbiB7IGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlIH0pOwogICAgICAg
ICBiaXRtYXBEYXRhICs9IGJ5dGVzUGVyUm93OwogICAgIH0KICAgICBTSEExOjpEaWdlc3QgaGFz
aDsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRDRy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1wU3VwcG9ydENH
LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxE
dW1wU3VwcG9ydENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTQgKzg4LDE0IEBAIHZvaWQg
Y29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQml0bWFwQ29udGUKICAgICAgICAgICAgIHVpbnQzMl90
IGJ1ZmZlcltwaXhlbHNXaWRlXTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY29sdW1uID0g
MDsgY29sdW1uIDwgcGl4ZWxzV2lkZTsgY29sdW1uKyspCiAgICAgICAgICAgICAgICAgYnVmZmVy
W2NvbHVtbl0gPSBPU1JlYWRMaXR0bGVJbnQzMihiaXRtYXBEYXRhLCA0ICogY29sdW1uKTsKLSAg
ICAgICAgICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4o
YnVmZmVyKSwgNCAqIHBpeGVsc1dpZGUpOworICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFu
IHsgYnVmZmVyLCBwaXhlbHNXaWRlIH0pOwogICAgICAgICAgICAgYml0bWFwRGF0YSArPSBieXRl
c1BlclJvdzsKICAgICAgICAgfQogICAgIH0gZWxzZQogI2VuZGlmCiAgICAgewogICAgICAgICBm
b3IgKHVuc2lnbmVkIHJvdyA9IDA7IHJvdyA8IHBpeGVsc0hpZ2g7IHJvdysrKSB7Ci0gICAgICAg
ICAgICBzaGExLmFkZEJ5dGVzKGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlKTsKKyAgICAgICAg
ICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlIH0pOwog
ICAgICAgICAgICAgYml0bWFwRGF0YSArPSBieXRlc1BlclJvdzsKICAgICAgICAgfQogICAgIH0K
SW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0Jsb29tRmlsdGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9CbG9vbUZpbHRlci5jcHAJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0Jsb29t
RmlsdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBzdGF0aWMgVmVjdG9y
PFNIQTE6OkRpZ2VzdD4gZ2VuZXJhdGVSYW5kCiAgICAgU0hBMSBzaGExOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBoYXNoQ291bnQ7ICsraSkgewogICAgICAgICBkb3VibGUgcmFuZG9t
ID0gcmFuZG9tTnVtYmVyKCk7Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2Fz
dDx1aW50OF90Kj4oJnJhbmRvbSksIHNpemVvZihkb3VibGUpKTsKKyAgICAgICAgc2hhMS5hZGRC
eXRlcyhTcGFuIHsgJnJhbmRvbSwgMSB9KTsKICAgICAgICAgU0hBMTo6RGlnZXN0IGRpZ2VzdDsK
ICAgICAgICAgc2hhMS5jb21wdXRlSGFzaChkaWdlc3QpOwogICAgICAgICBoYXNoZXMuYXBwZW5k
KGRpZ2VzdCk7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lz
dGVtLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvRmlsZVN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw4ICsxMzMsOCBAQCBURVNU
X0YoRmlsZVN5c3RlbVRlc3QsIE1hcHBpbmdFeGlzdGluZ0ZpCiAgICAgRmlsZVN5c3RlbTo6TWFw
cGVkRmlsZURhdGEgbWFwcGVkRmlsZURhdGEodGVtcEZpbGVQYXRoKCksIEZpbGVTeXN0ZW06Ok1h
cHBlZEZpbGVNb2RlOjpTaGFyZWQsIHN1Y2Nlc3MpOwogICAgIEVYUEVDVF9UUlVFKHN1Y2Nlc3Mp
OwogICAgIEVYUEVDVF9UUlVFKCEhbWFwcGVkRmlsZURhdGEpOwotICAgIEVYUEVDVF9UUlVFKG1h
cHBlZEZpbGVEYXRhLnNpemUoKSA9PSBzdHJsZW4oRmlsZVN5c3RlbVRlc3REYXRhKSk7Ci0gICAg
RVhQRUNUX1RSVUUoc3RybnN0cihGaWxlU3lzdGVtVGVzdERhdGEsIHN0YXRpY19jYXN0PGNvbnN0
IGNoYXIqPihtYXBwZWRGaWxlRGF0YS5kYXRhKCkpLCBtYXBwZWRGaWxlRGF0YS5zaXplKCkpKTsK
KyAgICBFWFBFQ1RfVFJVRShtYXBwZWRGaWxlRGF0YS5kYXRhKCkuc2l6ZSgpID09IHN0cmxlbihG
aWxlU3lzdGVtVGVzdERhdGEpKTsKKyAgICBFWFBFQ1RfVFJVRShzdHJuc3RyKEZpbGVTeXN0ZW1U
ZXN0RGF0YSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4obWFwcGVkRmlsZURhdGEuZGF0
YSgpLmRhdGEoKSksIG1hcHBlZEZpbGVEYXRhLmRhdGEoKS5zaXplKCkpKTsKIH0KIAogVEVTVF9G
KEZpbGVTeXN0ZW1UZXN0LCBNYXBwaW5nRXhpc3RpbmdFbXB0eUZpbGUpCkluZGV4OiBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TSEExLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9TSEExLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU0hBMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcg
KzM4LDcgQEAgc3RhdGljIHZvaWQgZXhwZWN0U0hBMShDU3RyaW5nIGlucHV0LCBpbgogewogICAg
IFNIQTEgc2hhMTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcGVhdDsgKytpKQotICAgICAg
ICBzaGExLmFkZEJ5dGVzKGlucHV0KTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhpbnB1dC5ieXRl
cygpKTsKICAgICBDU3RyaW5nIGFjdHVhbCA9IHNoYTEuY29tcHV0ZUhleERpZ2VzdCgpOwogCiAg
ICAgQVNTRVJUX0VRKGV4cGVjdGVkLmxlbmd0aCgpLCBhY3R1YWwubGVuZ3RoKCkpOwpJbmRleDog
VG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbQkocmV2aXNpb24gMjc4ODA5KQor
KysgVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0zNDAsMTEgKzM0MCwxMSBAQCB2b2lkIENvbm5lY3Rpb246OndlYlNvY2tldEhhbmRzaGFr
ZShDb21wCiAKICAgICAgICAgICAgIGNvbnN0ZXhwciBhdXRvKiB3ZWJTb2NrZXRLZXlHVUlEID0g
IjI1OEVBRkE1LUU5MTQtNDdEQS05NUNBLUM1QUIwREM4NUIxMSI7CiAgICAgICAgICAgICBTSEEx
IHNoYTE7Ci0gICAgICAgICAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KGtleUJlZ2luKSwga2V5RW5kIC0ga2V5QmVnaW4pOwotICAgICAgICAgICAgc2hh
MS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih3ZWJTb2NrZXRLZXlH
VUlEKSwgc3RybGVuKHdlYlNvY2tldEtleUdVSUQpKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0
ZXMoU3BhbiB7IGtleUJlZ2luLCBrZXlFbmQgfSk7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVz
KFNwYW4geyB3ZWJTb2NrZXRLZXlHVUlELCBzdHJsZW4od2ViU29ja2V0S2V5R1VJRCkgfSk7CiAg
ICAgICAgICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAgICAgICAgICAgIHNoYTEuY29tcHV0ZUhh
c2goaGFzaCk7Ci0gICAgICAgICAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaGFzaC5k
YXRhKCksIFNIQTE6Omhhc2hTaXplKTsKKyAgICAgICAgICAgIHJldHVybiBiYXNlNjRFbmNvZGVU
b1N0cmluZyhoYXNoKTsKICAgICAgICAgfTsKIAogICAgICAgICBjb25uZWN0aW9uLnNlbmQoSFRU
UFJlc3BvbnNlKDEwMSwgewpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jYWlyby9UZXN0
SW52b2NhdGlvbkNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVy
L2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVTSEExSGFzaFN0cmlu
Z0ZvckNhaXIKICAgICBTSEExIHNoYTE7CiAgICAgdW5zaWduZWQgY2hhciogYml0bWFwRGF0YSA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRh
KHN1cmZhY2UpKTsKICAgICBmb3IgKHNpemVfdCByb3cgPSAwOyByb3cgPCBwaXhlbHNIaWdoOyAr
K3JvdykgewotICAgICAgICBzaGExLmFkZEJ5dGVzKGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRl
KTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgYml0bWFwRGF0YSwgNCAqIHBpeGVsc1dp
ZGUgfSk7CiAgICAgICAgIGJpdG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7CiAgICAgfQogICAgIFNI
QTE6OkRpZ2VzdCBoYXNoOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52
b2NhdGlvbkNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rl
c3RJbnZvY2F0aW9uQ0cuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9XZWJLaXRUZXN0
UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5
NCw3IEBAIHZvaWQgY29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQ29udGV4dChDR0MKICNlbmRpZgog
ICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCByb3cgPSAwOyByb3cgPCBwaXhlbHNIaWdoOyBy
b3crKykgewotICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhiaXRtYXBEYXRhLCA0ICogcGl4ZWxz
V2lkZSk7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyBiaXRtYXBEYXRhLCA0ICog
cGl4ZWxzV2lkZSB9KTsKICAgICAgICAgICAgIGJpdG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7CiAg
ICAgICAgIH0KICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431286</attachid>
            <date>2021-06-13 12:51:23 -0700</date>
            <delta_ts>2021-06-13 15:24:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226887-20210613125121.patch</filename>
            <type>text/plain</type>
            <size>196960</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBA
CisyMDIxLTA2LTEyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogQVBJL0pTU2NyaXB0Lm1tOgorICAg
ICAgICAoK1tKU1NjcmlwdCBzY3JpcHRPZlR5cGU6bWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTp3
aXRoU291cmNlVVJMOmFuZEJ5dGVjb2RlQ2FjaGU6aW5WaXJ0dWFsTWFjaGluZTplcnJvcjpdKToK
KyAgICAgICAgKC1bSlNTY3JpcHQgcmVhZENhY2hlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHdy
aXRlQ2FjaGU6XSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9ja0hhc2g6OkNvZGVCbG9ja0hhc2gpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHA6CisgICAgICAgIChJbnNw
ZWN0b3I6OmJhY2tlbmRDb21tYW5kc0hhc2gpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZm
ZXIuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJDb250ZW50czo6d3JpdGFibGVCeXRlcyk6
CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyQ29udGVudHM6OmJ5dGVzIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6QXJyYXlCdWZmZXI6OndyaXRhYmxlQnl0ZXMpOgorICAgICAgICAoSlNDOjpBcnJh
eUJ1ZmZlcjo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
Lmg6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6d3JpdGFibGVCeXRlcyk6CisgICAg
ICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRp
bWUvQ2FjaGVQYXlsb2FkLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVQYXlsb2FkOjptYWtlTWFw
cGVkUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6bWFrZU1hbGxvY1BheWxv
YWQpOgorICAgICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6Om1ha2VFbXB0eVBheWxvYWQpOgorICAg
ICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6OkNhY2hlUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNh
Y2hlUGF5bG9hZDo6ZnJlZURhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVQYXlsb2FkLmg6
CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6ZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlUGF5bG9hZDo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6
Q2FjaGVQYXlsb2FkKToKKyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKToKKwogMjAyMS0w
Ni0xMSAgUGF0cmljayBBbmdsZSAgPHBhbmdsZUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogQWRkIGluc3RydW1lbnRhdGlvbiB0byBub2RlIGRlc3RydWN0aW9uIGZvciBJbnNw
ZWN0b3JET01BZ2VudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMTMgKzEzNCwxMyBAQCArIChpbnN0YW5jZXR5cGUpc2Ny
aXB0T2ZUeXBlOihKU1NjcmlwdFR5CiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4g
Y3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJGaWxlIGF0IHBhdGggJUAg
Y291bGQgbm90IGJlIG1hcHBlZC4iLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihzeXN0ZW1QYXRo
KV0sIGVycm9yKTsKIAotICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCkpKQor
ICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmlsZURhdGEuZGF0YSgpLnNpemUoKSkpCiAg
ICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIk5v
dCBhbGwgY2hhcmFjdGVycyBpbiBmaWxlIGF0ICVAIGFyZSBBU0NJSS4iLCBzdGF0aWNfY2FzdDxO
U1N0cmluZyAqPihzeXN0ZW1QYXRoKV0sIGVycm9yKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gYWRv
cHROUyhbW0pTU2NyaXB0IGFsbG9jXSBpbml0XSk7CiAgICAgcmVzdWx0LT5tX3ZpcnR1YWxNYWNo
aW5lID0gdm07CiAgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOwotICAgIHJlc3VsdC0+bV9zb3Vy
Y2UgPSBTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcoYml0d2lzZV9jYXN0
PGNvbnN0IExDaGFyKj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpKSk7CisgICAg
cmVzdWx0LT5tX3NvdXJjZSA9IFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWlu
ZyhiaXR3aXNlX2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmls
ZURhdGEuZGF0YSgpLnNpemUoKSkpOwogICAgIHJlc3VsdC0+bV9tYXBwZWRTb3VyY2UgPSBXVEZN
b3ZlKGZpbGVEYXRhKTsKICAgICByZXN1bHQtPm1fc291cmNlVVJMID0gc291cmNlVVJMOwogICAg
IHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7CkBAIC0xNjgsMjQgKzE2OCwyMyBAQCAt
ICh2b2lkKXJlYWRDYWNoZQogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgY29uc3QgdWludDhfdCogZmlsZURhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihtYXBwZWRGaWxlLmRhdGEoKSk7Ci0gICAgdW5zaWduZWQgZmlsZVRvdGFsU2l6ZSA9IG1h
cHBlZEZpbGUuc2l6ZSgpOworICAgIGF1dG8gZmlsZURhdGEgPSBtYXBwZWRGaWxlLmRhdGEoKTsK
IAogICAgIC8vIEVuc3VyZSB3ZSBhdCBsZWFzdCBoYXZlIGEgU0hBMTo6RGlnZXN0IHRvIHJlYWQu
Ci0gICAgaWYgKGZpbGVUb3RhbFNpemUgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgeworICAgIGlm
IChmaWxlRGF0YS5zaXplKCkgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgewogICAgICAgICBGaWxl
U3lzdGVtOjpkZWxldGVGaWxlKGNhY2hlRmlsZW5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgdW5zaWduZWQgZmlsZURhdGFTaXplID0gZmlsZVRvdGFsU2l6ZSAtIHNpemVvZihT
SEExOjpEaWdlc3QpOworICAgIHVuc2lnbmVkIGZpbGVEYXRhU2l6ZSA9IGZpbGVEYXRhLnNpemUo
KSAtIHNpemVvZihTSEExOjpEaWdlc3QpOwogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFz
aDsKICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhmaWxlRGF0YSwgZmlsZURhdGFT
aXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKGZpbGVEYXRhLmZpcnN0KGZpbGVEYXRhU2l6ZSkpOwog
ICAgIHNoYTEuY29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2VzdCBm
aWxlSGFzaDsKLSAgICBtZW1jcHkoJmZpbGVIYXNoLCBmaWxlRGF0YSArIGZpbGVEYXRhU2l6ZSwg
c2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOworICAgIG1lbWNweSgmZmlsZUhhc2gsIGZpbGVEYXRhLmRh
dGEoKSArIGZpbGVEYXRhU2l6ZSwgc2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOwogCiAgICAgaWYgKGNv
bXB1dGVkSGFzaCAhPSBmaWxlSGFzaCkgewogICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxl
KGNhY2hlRmlsZW5hbWUpOwpAQCAtMzQzLDcgKzM0Miw3IEBAIC0gKEJPT0wpd3JpdGVDYWNoZToo
U3RyaW5nJillcnJvcgogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFzaDsKICAgICBTSEEx
IHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhtX2NhY2hlZEJ5dGVjb2RlLT5kYXRhKCksIG1fY2Fj
aGVkQnl0ZWNvZGUtPnNpemUoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgbV9jYWNoZWRC
eXRlY29kZS0+ZGF0YSgpLCBtX2NhY2hlZEJ5dGVjb2RlLT5zaXplKCkgfSk7CiAgICAgc2hhMS5j
b21wdXRlSGFzaChjb21wdXRlZEhhc2gpOwogICAgIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKHRl
bXBGRCwgY29tcHV0ZWRIYXNoLmRhdGEoKSwgc2l6ZW9mKGNvbXB1dGVkSGFzaCkpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0hhc2guY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgQ29kZUJsb2Nr
SGFzaDo6Q29kZUJsb2NrSGFzaChjb25zdCBTb3VyYwogICAgIEFTU0VSVChzb3VyY2VDb2RlLmxl
bmd0aCgpID49IDApOwogICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhTb3VyY2VDb2RlTGVuZ3Ro
VG9IYXNoID0gNTAwICogTUI7CiAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzb3VyY2VD
b2RlLmxlbmd0aCgpKSA8IG1heFNvdXJjZUNvZGVMZW5ndGhUb0hhc2gpCi0gICAgICAgIHNoYTEu
YWRkQnl0ZXMoc291cmNlQ29kZS50b1VURjgoKSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoc291
cmNlQ29kZS50b1VURjgoKS5ieXRlcygpKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gSnVzdCBo
YXNoIHdpdGggdGhlIGxlbmd0aCBhbmQgc2FtcGxlcyBvZiB0aGUgc291cmNlIHN0cmluZyBpbnN0
ZWFkLgogICAgICAgICBTdHJpbmdWaWV3IHN0ciA9IHNvdXJjZUNvZGUucHJvdmlkZXIoKS0+c291
cmNlKCk7CkBAIC02MiwxMCArNjIsMTAgQEAgQ29kZUJsb2NrSGFzaDo6Q29kZUJsb2NrSGFzaChj
b25zdCBTb3VyYwogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHIubGVuZ3RoKCk7CiAgICAg
ICAgIHVuc2lnbmVkIHN0ZXAgPSAobGVuZ3RoID4+IDEwKSArIDE7CiAKLSAgICAgICAgc2hhMS5h
ZGRCeXRlcyhiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KCZsZW5ndGgpLCBzaXplb2YobGVuZ3RoKSk7
CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZsZW5ndGgsIDEgfSk7CiAgICAgICAgIGRv
IHsKICAgICAgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IHN0cltpbmRleF07Ci0gICAgICAgICAg
ICBzaGExLmFkZEJ5dGVzKGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oJmNoYXJhY3RlciksIHNpemVv
ZihjaGFyYWN0ZXIpKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZjaGFyYWN0
ZXIsIDEgfSk7CiAgICAgICAgICAgICBvbGRJbmRleCA9IGluZGV4OwogICAgICAgICAgICAgaW5k
ZXggKz0gc3RlcDsKICAgICAgICAgfSB3aGlsZSAoaW5kZXggPiBvbGRJbmRleCAmJiBpbmRleCA8
IGxlbmd0aCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VIYXNo
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VI
YXNoLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BhcnNlSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiBQYXJzZUhhc2g6OlBhcnNlSGFzaChjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VD
b2RlKQogewogICAgIFNIQTEgc2hhMTsKLSAgICBzaGExLmFkZEJ5dGVzKHNvdXJjZUNvZGUudG9V
VEY4KCkpOworICAgIHNoYTEuYWRkQnl0ZXMoc291cmNlQ29kZS50b1VURjgoKS5ieXRlcygpKTsK
ICAgICBTSEExOjpEaWdlc3QgZGlnZXN0OwogICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsK
ICAgICB1bnNpZ25lZCBoYXNoID0gZGlnZXN0WzBdIHwgKGRpZ2VzdFsxXSA8PCA4KSB8IChkaWdl
c3RbMl0gPDwgMTYpIHwgKGRpZ2VzdFszXSA8PCAyNCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1JlbW90ZUluc3BlY3RvclV0aWxzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1Jl
bW90ZUluc3BlY3RvclV0aWxzLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgY29uc3QgQ1N0cmluZyYgYmFja2VuZENv
bW1hbmRzSGFzaCgpCiAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSA9IGdfYnl0ZXNfZ2V0X2Rh
dGEoYnl0ZXMuZ2V0KCksICZkYXRhU2l6ZSk7CiAgICAgICAgIEFTU0VSVChkYXRhU2l6ZSk7CiAg
ICAgICAgIFNIQTEgc2hhMTsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhzdGF0aWNfY2FzdDxjb25z
dCB1aW50OF90Kj4oZGF0YSksIGRhdGFTaXplKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFu
IHsgc3RhdGljX2Nhc3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSksIGRhdGFTaXplIH0pOwogICAg
ICAgICBoZXhEaWdlc3QgPSBzaGExLmNvbXB1dGVIZXhEaWdlc3QoKTsKICAgICB9CiAgICAgcmV0
dXJuIGhleERpZ2VzdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogI2luY2x1ZGUgPHd0Zi9QYWNrZWRSZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZl
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtODAsNyAr
ODEsMTAgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBt
X2RhdGEuZ2V0TWF5QmVOdWxsKHNpemVJbkJ5dGVzKCkpOyB9CiAgICAgdW5zaWduZWQgc2l6ZUlu
Qnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX3NpemVJbkJ5dGVzOyB9Ci0gICAgCisKKyAgICBTcGFu
PHN0ZDo6Ynl0ZT4gd3JpdGFibGVCeXRlcygpIHsgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8c3RkOjpi
eXRlKj4oZGF0YSgpKSwgc2l6ZUluQnl0ZXMoKSB9OyB9CisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4geyBzdGF0aWNfY2FzdDxjb25zdCBzdGQ6OmJ5dGUq
PihkYXRhKCkpLCBzaXplSW5CeXRlcygpIH07IH0KKwogICAgIGJvb2wgaXNTaGFyZWQoKSBjb25z
dCB7IHJldHVybiBtX3NoYXJlZDsgfQogICAgIAogcHJpdmF0ZToKQEAgLTEyNyw3ICsxMzEsOSBA
QCBwdWJsaWM6CiAgICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKICAgICBpbmxpbmUgY29uc3Qgdm9p
ZCogZGF0YSgpIGNvbnN0OwogICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7
Ci0gICAgCisgICAgaW5saW5lIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCk7CisgICAg
aW5saW5lIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAgICAgdm9pZCBt
YWtlU2hhcmVkKCk7CiAgICAgdm9pZCBzZXRTaGFyaW5nTW9kZShBcnJheUJ1ZmZlclNoYXJpbmdN
b2RlKTsKICAgICBpbmxpbmUgYm9vbCBpc1NoYXJlZCgpIGNvbnN0OwpAQCAtMTk3LDYgKzIwMywx
NiBAQCB1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJu
IG1fY29udGVudHMuc2l6ZUluQnl0ZXMoKTsKIH0KIAorU3BhbjxzdGQ6OmJ5dGU+IEFycmF5QnVm
ZmVyOjp3cml0YWJsZUJ5dGVzKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZW50cy53cml0YWJsZUJ5
dGVzKCk7Cit9CisKK1NwYW48Y29uc3Qgc3RkOjpieXRlPiBBcnJheUJ1ZmZlcjo6Ynl0ZXMoKSBj
b25zdAoreworICAgIHJldHVybiBtX2NvbnRlbnRzLmJ5dGVzKCk7Cit9CisKIGJvb2wgQXJyYXlC
dWZmZXI6OmlzU2hhcmVkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb250ZW50cy5pc1NoYXJl
ZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZm
ZXJWaWV3LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4Niw5IEBAIHB1
YmxpYzoKIAogICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVM
ZW5ndGg7IH0KIAorICAgIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCkgeyByZXR1cm4g
eyBzdGF0aWNfY2FzdDxzdGQ6OmJ5dGUqPihkYXRhKCkpLCBieXRlTGVuZ3RoKCkgfTsgfQorICAg
IFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0IHsgcmV0dXJuIHsgc3RhdGljX2Nh
c3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSgpKSwgYnl0ZUxlbmd0aCgpIH07IH0KKwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0RGV0YWNoYWJsZShib29sKTsKICAgICBib29sIGlzRGV0
YWNoYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNEZXRhY2hhYmxlOyB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlUGF5bG9hZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsMjcgKzMwLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogCiBD
YWNoZVBheWxvYWQgQ2FjaGVQYXlsb2FkOjptYWtlTWFwcGVkUGF5bG9hZChGaWxlU3lzdGVtOjpN
YXBwZWRGaWxlRGF0YSYmIGRhdGEpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZCh0cnVlLCBk
YXRhLmxlYWtIYW5kbGUoKSwgZGF0YS5zaXplKCkpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQo
dHJ1ZSwgZGF0YS5sZWFrSGFuZGxlKCkpOwogfQogCiBDYWNoZVBheWxvYWQgQ2FjaGVQYXlsb2Fk
OjptYWtlTWFsbG9jUGF5bG9hZChNYWxsb2NQdHI8dWludDhfdCwgVk1NYWxsb2M+JiYgZGF0YSwg
c2l6ZV90IHNpemUpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZChmYWxzZSwgZGF0YS5sZWFr
UHRyKCksIHNpemUpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQoZmFsc2UsIGFzV3JpdGFibGVC
eXRlcyhTcGFuIHsgZGF0YS5sZWFrUHRyKCksIHNpemUgfSkpOwogfQogCiBDYWNoZVBheWxvYWQg
Q2FjaGVQYXlsb2FkOjptYWtlRW1wdHlQYXlsb2FkKCkKIHsKLSAgICByZXR1cm4gQ2FjaGVQYXls
b2FkKHRydWUsIG51bGxwdHIsIDApOworICAgIHJldHVybiBDYWNoZVBheWxvYWQodHJ1ZSwgeyB9
KTsKIH0KIAogQ2FjaGVQYXlsb2FkOjpDYWNoZVBheWxvYWQoQ2FjaGVQYXlsb2FkJiYgb3RoZXIp
CiB7Ci0gICAgbV9tYXBwZWQgPSBvdGhlci5tX21hcHBlZDsKLSAgICBtX3NpemUgPSBvdGhlci5t
X3NpemU7Ci0gICAgbV9kYXRhID0gb3RoZXIubV9kYXRhOwotICAgIG90aGVyLm1fbWFwcGVkID0g
ZmFsc2U7Ci0gICAgb3RoZXIubV9kYXRhID0gbnVsbHB0cjsKLSAgICBvdGhlci5tX3NpemUgPSAw
OworICAgIG1fbWFwcGVkID0gc3RkOjpleGNoYW5nZShvdGhlci5tX21hcHBlZCwgZmFsc2UpOwor
ICAgIG1fZGF0YSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLCB7IH0pOwogfQogCiBDYWNo
ZVBheWxvYWQ6On5DYWNoZVBheWxvYWQoKQpAQCAtNjcsMTIgKzYzLDEzIEBAIENhY2hlUGF5bG9h
ZCYgQ2FjaGVQYXlsb2FkOjpvcGVyYXRvcj0oQ2EKIAogdm9pZCBDYWNoZVBheWxvYWQ6OmZyZWVE
YXRhKCkKIHsKLSAgICBpZiAoIW1fZGF0YSkKKyAgICBpZiAoIW1fZGF0YS5kYXRhKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBpZiAobV9tYXBwZWQpIHsKLSAgICAgICAgRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1fZGF0YSwgbV9zaXplKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZmFzdEZy
ZWUobV9kYXRhKTsKKworICAgIGlmIChtX21hcHBlZCkKKyAgICAgICAgRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1fZGF0YSk7CisgICAgZWxzZQorICAgICAgICBmYXN0RnJlZShtX2RhdGEu
ZGF0YSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHd0Zi9GaWxlU3lz
dGVtLmg+CiAjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MSwyMiArNDIsMjAgQEAgcHVibGljOgogICAgIEpT
X0VYUE9SVF9QUklWQVRFIH5DYWNoZVBheWxvYWQoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBD
YWNoZVBheWxvYWQmIG9wZXJhdG9yPShDYWNoZVBheWxvYWQmJiBvdGhlcik7CiAKLSAgICBjb25z
dCB1aW50OF90KiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBjb25zdCB1aW50OF90KiBkYXRhKCkg
Y29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9kYXRhLmRhdGEoKSk7
IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5zaXplKCk7IH0KIAog
cHJpdmF0ZToKLSAgICBDYWNoZVBheWxvYWQoYm9vbCBtYXBwZWQsIHZvaWQqIGRhdGEsIHNpemVf
dCBzaXplKQorICAgIENhY2hlUGF5bG9hZChib29sIG1hcHBlZCwgU3BhbjxzdGQ6OmJ5dGU+IGRh
dGEpCiAgICAgICAgIDogbV9tYXBwZWQobWFwcGVkKQotICAgICAgICAsIG1fc2l6ZShzaXplKQot
ICAgICAgICAsIG1fZGF0YShzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGF0YSkpCisgICAgICAgICwg
bV9kYXRhKGRhdGEpCiAgICAgewogICAgIH0KIAogICAgIHZvaWQgZnJlZURhdGEoKTsKIAogICAg
IGJvb2wgbV9tYXBwZWQ7Ci0gICAgc2l6ZV90IG1fc2l6ZTsKLSAgICB1aW50OF90KiBtX2RhdGE7
CisgICAgU3BhbjxzdGQ6OmJ5dGU+IG1fZGF0YTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1Bh
cnNlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNyArMjYxLDcg
QEAgYXV0byBTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKGNvbnN0IHVpbgogICAgIH0KIAogICAg
IGlmIChVTkxJS0VMWShPcHRpb25zOjp1c2VFYWdlcldlYkFzc2VtYmx5TW9kdWxlSGFzaGluZygp
KSkKLSAgICAgICAgbV9oYXNoZXIuYWRkQnl0ZXMoYnl0ZXMsIGJ5dGVzU2l6ZSk7CisgICAgICAg
IG1faGFzaGVyLmFkZEJ5dGVzKFNwYW4geyBieXRlcywgYnl0ZXNTaXplIH0pOwogCiAgICAgc2l6
ZV90IG9mZnNldEluQnl0ZXMgPSAwOwogICAgIHdoaWxlICh0cnVlKSB7CkluZGV4OiBTb3VyY2Uv
V1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw2OCBAQAorMjAyMS0wNi0xMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgQWRvcHQgU3BhbiBpbiBtb3JlIHBsYWNlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIFdURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmNwcDoKKyAgICAg
ICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjp+TWFwcGVkRmlsZURhdGEp
OgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6TWFwcGVkRmlsZURhdGE6Om1hcEZpbGVI
YW5kbGUpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6dW5tYXBWaWV3T2ZGaWxlKToK
KyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Om1hcFRvRmlsZSk6CisgICAgICAgICogd3Rm
L0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVE
YXRhOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6
Ok1hcHBlZEZpbGVEYXRhOjpkYXRhIGNvbnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUlt
cGw6Ok1hcHBlZEZpbGVEYXRhOjpsZWFrSGFuZGxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3Rl
bUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YSk6CisgICAgICAgIChXVEY6OkZp
bGVTeXN0ZW1JbXBsOjpNYXBwZWRGaWxlRGF0YTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6
RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpzaXplIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1NIQTEuY3BwOgorICAgICAgICAoV1RG
OjpTSEExOjphZGRCeXRlcyk6CisgICAgICAgIChXVEY6OlNIQTE6OmZpbmFsaXplKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6U0hBMTo6cHJvY2Vzc0Jsb2NrKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6U0hBMTo6cmVzZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTSEExOjpoZXhEaWdl
c3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTSEExOjpjb21wdXRlSGV4RGlnZXN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3dGYvU0hBMS5oOgorICAgICAgICAoV1RGOjpTSEExOjphZGRCeXRl
cyk6CisgICAgICAgICogd3RmL1ZlY3Rvci5oOgorICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZS9Q
ZXJzaXN0ZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPENT
dHJpbmc+OjplbmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8Q1N0cmlu
Zz46OmRlY29kZSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTdHJpbmc+Ojpl
bmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVjb2RlU3RyaW5nVGV4dCk6Cisg
ICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUpOgor
ICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKToK
KyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oOgorICAgICAgICAq
IHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5jcHA6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyOjpEZWNvZGVyKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6
OkRlY29kZXI6OmJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFkKToKKyAgICAgICAgKFdURjo6UGVy
c2lzdGVuY2U6OkRlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjp2ZXJpZnlDaGVja3N1bSk6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyOjp+RGVjb2Rlcik6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3Bl
cnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmg6CisgICAgICAgICogd3RmL3BlcnNpc3RlbmNl
L1BlcnNpc3RlbnRFbmNvZGVyLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29k
ZXI6Omdyb3cpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6dXBkYXRlQ2hl
Y2tzdW1Gb3JEYXRhKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6OmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjpl
bmNvZGVOdW1iZXIpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6ZW5jb2Rl
Q2hlY2tzdW0pOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6RW5jb2Rlcik6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjp+RW5jb2Rlcik6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmg6
CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjpidWZmZXIgY29uc3QpOgorICAg
ICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIp
OgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6YnVmZmVyU2l6ZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL3RleHQvQmFzZTY0Lmg6CisgICAgICAgIChXVEY6OmJh
c2U2NEVuY29kZVRvVmVjdG9yKToKKyAgICAgICAgKFdURjo6YmFzZTY0RW5jb2RlVG9TdHJpbmcp
OgorICAgICAgICAqIHd0Zi90ZXh0L0NTdHJpbmcuaDoKKwogMjAyMS0wNi0xMSAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgV2Vha0hhc2hNYXAKSW5kZXg6
IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtNjkyLDYgKzY5Miw4IEBACiAJCUFEODlCNkI5MUU2NDE1MEYwMDkwNzA3RiAvKiBN
ZW1vcnlQcmVzc3VyZUhhbmRsZXJDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IE1lbW9yeVByZXNzdXJlSGFuZGxlckNvY29hLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBREYyQ0U2NDFFMzlGMTA2MDA2ODg5REIgLyogTWVtb3J5Rm9vdHBy
aW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lbW9yeUZvb3RwcmludC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREYyQ0U2NTFFMzlGMTA2MDA2ODg5REIg
LyogTWVtb3J5Rm9vdHByaW50Q29jb2EuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTWVtb3J5Rm9vdHByaW50Q29jb2EuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlCQzcwMEI0NDI2NzY2ODM0MDA0OUVERjIgLyogU3BhbkNvY29hLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNwYW5Db2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzcwMEI0
NTI2NzY2OUMxMDA0OUVERjIgLyogU3BhbkNGLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwYW5DRi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0EzMEM3RjI2NkQzMDM0MDAwRDIzMEMgLyog
U3Bhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTcGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyQkNGQzNFMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5ndWFnZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYW5ndWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyQkNGQzNGMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5ndWFnZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYW5ndWFnZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtODQwLDYgKzg0Miw3IEBACiAJCQkJQzJCQ0ZDNDExRjYxRDYxNjAwQzky
MjJDIC8qIExhbmd1YWdlQ0YuY3BwICovLAogCQkJCTJDREVEMEVFMTgxMTVDMzgwMDREQkE3MCAv
KiBSdW5Mb29wQ0YuY3BwICovLAogCQkJCUEzRUU1QzNCMjFGRkFDN0MwMEZBQkQ2MSAvKiBTY2hl
ZHVsZVBhaXJDRi5jcHAgKi8sCisJCQkJQkM3MDBCNDUyNjc2NjlDMTAwNDlFREYyIC8qIFNwYW5D
Ri5oICovLAogCQkJCTFBRkRFNjQ3MTk1MjAxQzMwMEM0OEZGQSAvKiBUeXBlQ2FzdHNDRi5oICov
LAogCQkJCTVDMUYwNTk0MjE2NDM3QjMwMDM5MzAyQyAvKiBVUkxDRi5jcHAgKi8sCiAJCQkpOwpA
QCAtMTU4MSw2ICsxNTg0LDcgQEAKIAkJCQkxQ0E4NUNBODI0MUIwQjI2MDA3MUMyRjUgLyogUnVu
dGltZUFwcGxpY2F0aW9uQ2hlY2tzQ29jb2EuY3BwICovLAogCQkJCTFDQTg1Q0E3MjQxQjBCMTEw
MDcxQzJGNSAvKiBSdW50aW1lQXBwbGljYXRpb25DaGVja3NDb2NvYS5oICovLAogCQkJCUEzMEQ0
MTJDMUYwREUwQkEwMEI3MTk1NCAvKiBTb2Z0TGlua2luZy5oICovLAorCQkJCUJDNzAwQjQ0MjY3
NjY4MzQwMDQ5RURGMiAvKiBTcGFuQ29jb2EuaCAqLywKIAkJCQlFQjYxRURDNjI0MDlDQ0MwMDAx
RUZFMzYgLyogU3lzdGVtVHJhY2luZ0NvY29hLmNwcCAqLywKIAkJCQk1Q0MwRUU4NjIxNjJCQzIy
MDBBMUE4NDIgLyogVVJMQ29jb2EubW0gKi8sCiAJCQkJOTMyNDE2NTcyNDNCQzJFNTAwMzJGQUFF
IC8qIFZlY3RvckNvY29hLmggKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxOSw5ICszMTksOSBAQCBib29sIGV4Y2x1ZGVGcm9tQmFja3VwKGNvbnN0IFN0cmluZyYp
CiAKIE1hcHBlZEZpbGVEYXRhOjp+TWFwcGVkRmlsZURhdGEoKQogewotICAgIGlmICghbV9maWxl
RGF0YSkKKyAgICBpZiAoIW1fZmlsZURhdGEuZGF0YSgpKQogICAgICAgICByZXR1cm47Ci0gICAg
dW5tYXBWaWV3T2ZGaWxlKG1fZmlsZURhdGEsIG1fZmlsZVNpemUpOworICAgIHVubWFwVmlld09m
RmlsZShtX2ZpbGVEYXRhKTsKIH0KIAogTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKGNv
bnN0IFN0cmluZyYgZmlsZVBhdGgsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUsIGJvb2wmIHN1Y2Nl
c3MpCkBAIC0zODMsMTQgKzM4MywxMyBAQCBib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFu
ZGxlKFBsYXRmCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBtX2ZpbGVEYXRh
ID0gZGF0YTsKLSAgICBtX2ZpbGVTaXplID0gc2l6ZTsKKyAgICBtX2ZpbGVEYXRhID0gU3BhbiB7
IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpieXRlKj4oZGF0YSksIHNpemUgfTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCB1bm1hcFZpZXdPZkZpbGUodm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6
ZSkKK2Jvb2wgdW5tYXBWaWV3T2ZGaWxlKFNwYW48c3RkOjpieXRlPiBkYXRhKQogewotICAgIHJl
dHVybiAhbXVubWFwKGJ1ZmZlciwgc2l6ZSk7CisgICAgcmV0dXJuICFtdW5tYXAoZGF0YS5kYXRh
KCksIGRhdGEuc2l6ZSgpKTsKIH0KIAogI2VuZGlmCkBAIC00MzgsNyArNDM3LDcgQEAgU3RyaW5n
IGNyZWF0ZVRlbXBvcmFyeVppcEFyY2hpdmUoY29uc3QgUwogfQogI2VuZGlmCiAKLU1hcHBlZEZp
bGVEYXRhIG1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIHNpemVfdCBieXRlc1NpemUsIEZ1
bmN0aW9uPHZvaWQoY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4m
KT4mJiBhcHBseSwgUGxhdGZvcm1GaWxlSGFuZGxlKiBvdXRwdXRIYW5kbGUpCitNYXBwZWRGaWxl
RGF0YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBzaXplX3QgYnl0ZXNTaXplLCBGdW5j
dGlvbjx2b2lkKGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mKT4m
JiBhcHBseSwgUGxhdGZvcm1GaWxlSGFuZGxlKiBvdXRwdXRIYW5kbGUpCiB7CiAgICAgY29uc3Rl
eHByIGJvb2wgZmFpbElmRmlsZUV4aXN0cyA9IHRydWU7CiAgICAgYXV0byBoYW5kbGUgPSBGaWxl
U3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWRXcml0
ZSwgRmlsZVN5c3RlbTo6RmlsZUFjY2Vzc1Blcm1pc3Npb246OlVzZXIsIGZhaWxJZkZpbGVFeGlz
dHMpOwpAQCAtNDU1LDEyICs0NTQsMTIgQEAgTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxlKGNvbnN0
IFN0cmluZyYgcAogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIHZvaWQqIG1hcCA9
IGNvbnN0X2Nhc3Q8dm9pZCo+KG1hcHBlZEZpbGUuZGF0YSgpKTsKLSAgICB1aW50OF90KiBtYXBE
YXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1hcCk7CisgICAgYXV0byBtYXAgPSBtYXBwZWRG
aWxlLmRhdGEoKS5kYXRhKCk7CisgICAgYXV0byBtYXBEYXRhID0gbWFwOwogCi0gICAgYXBwbHko
WyZtYXBEYXRhXShjb25zdCB1aW50OF90KiBjaHVuaywgc2l6ZV90IGNodW5rU2l6ZSkgewotICAg
ICAgICBtZW1jcHkobWFwRGF0YSwgY2h1bmssIGNodW5rU2l6ZSk7Ci0gICAgICAgIG1hcERhdGEg
Kz0gY2h1bmtTaXplOworICAgIGFwcGx5KFsmbWFwRGF0YV0oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+
IGNodW5rKSB7CisgICAgICAgIG1lbWNweShtYXBEYXRhLCBjaHVuay5kYXRhKCksIGNodW5rLnNp
emUoKSk7CisgICAgICAgIG1hcERhdGEgKz0gY2h1bmsuc2l6ZSgpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9KTsKIApJbmRleDogU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICsz
NCw3IEBACiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KQEAgLTIxMCw3ICsyMTEsNyBAQCBXVEZfRVhQT1JUX1BSSVZBVEUg
U3RyaW5nIHJlYWxQYXRoKGNvbnN0CiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc1NhZmVUb1Vz
ZU1lbW9yeU1hcEZvclBhdGgoY29uc3QgU3RyaW5nJik7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBtYWtlU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChjb25zdCBTdHJpbmcmKTsKIAotV1RGX0VY
UE9SVF9QUklWQVRFIGJvb2wgdW5tYXBWaWV3T2ZGaWxlKHZvaWQqIGJ1ZmZlciwgc2l6ZV90KTsK
K1dURl9FWFBPUlRfUFJJVkFURSBib29sIHVubWFwVmlld09mRmlsZShTcGFuPHN0ZDo6Ynl0ZT4p
OwogCiBjbGFzcyBNYXBwZWRGaWxlRGF0YSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CkBAIC0yMjMsMTcgKzIyNCwxNSBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5N
YXBwZWRGaWxlRGF0YSgpOwogICAgIE1hcHBlZEZpbGVEYXRhJiBvcGVyYXRvcj0oTWFwcGVkRmls
ZURhdGEmJik7CiAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
ISFtX2ZpbGVEYXRhOyB9Ci0gICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZmlsZURhdGE7IH0KLSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9maWxlU2l6
ZTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fZmls
ZURhdGEuZGF0YSgpOyB9CisgICAgU3BhbjxzdGQ6OmJ5dGU+IGRhdGEoKSBjb25zdCB7IHJldHVy
biBtX2ZpbGVEYXRhOyB9CiAKLSAgICB2b2lkKiBsZWFrSGFuZGxlKCkgeyByZXR1cm4gc3RkOjpl
eGNoYW5nZShtX2ZpbGVEYXRhLCBudWxscHRyKTsgfQorICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBT
cGFuPHN0ZDo6Ynl0ZT4gbGVha0hhbmRsZSgpIHsgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9maWxl
RGF0YSwgeyB9KTsgfQogCiBwcml2YXRlOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIG1h
cEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBGaWxlT3Blbk1vZGUsIE1hcHBlZEZpbGVN
b2RlKTsKIAotICAgIHZvaWQqIG1fZmlsZURhdGEgeyBudWxscHRyIH07Ci0gICAgdW5zaWduZWQg
bV9maWxlU2l6ZSB7IDAgfTsKKyAgICBTcGFuPHN0ZDo6Ynl0ZT4gbV9maWxlRGF0YTsKIH07CiAK
IGlubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGxhdGZvcm1GaWxlSGFuZGxl
IGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUgbWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKQEAgLTI0Nywy
MSArMjQ2LDE5IEBAIGlubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGwKIH0K
IAogaW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShNYXBwZWRGaWxlRGF0YSYm
IG90aGVyKQotICAgIDogbV9maWxlRGF0YShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEs
IG51bGxwdHIpKQotICAgICwgbV9maWxlU2l6ZShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZVNp
emUsIDApKQorICAgIDogbV9maWxlRGF0YShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEs
IHsgfSkpCiB7CiB9CiAKIGlubGluZSBNYXBwZWRGaWxlRGF0YSYgTWFwcGVkRmlsZURhdGE6Om9w
ZXJhdG9yPShNYXBwZWRGaWxlRGF0YSYmIG90aGVyKQogewotICAgIG1fZmlsZURhdGEgPSBzdGQ6
OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEsIG51bGxwdHIpOwotICAgIG1fZmlsZVNpemUgPSBz
dGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZVNpemUsIDApOworICAgIG1fZmlsZURhdGEgPSBzdGQ6
OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEsIHsgfSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQog
CiAvLyBUaGlzIGNyZWF0ZXMgdGhlIGRlc3RpbmF0aW9uIGZpbGUsIG1hcHMgaXQsIHdyaXRlIHRo
ZSBwcm92aWRlZCBkYXRhIHRvIGl0IGFuZCByZXR1cm5zIHRoZSBtYXBwZWQgZmlsZS4KIC8vIFRo
aXMgZnVuY3Rpb24gZmFpbHMgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIGZpbGUgYXQgdGhlIGRlc3Rp
bmF0aW9uIHBhdGguCi1XVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVuY3Rpb248dm9pZChjb25z
dCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYpPiYmIGFwcGx5LCBQbGF0
Zm9ybUZpbGVIYW5kbGUqID0gbnVsbHB0cik7CitXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmls
ZURhdGEgbWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVu
Y3Rpb248dm9pZChjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+Jik+
JiYgYXBwbHksIFBsYXRmb3JtRmlsZUhhbmRsZSogPSBudWxscHRyKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgRmlsZVN5c3RlbUltcGwKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93
dGYvU0hBMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU0hBMS5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL1NIQTEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NiwxMCArNDYsMTAgQEAgU0hBMTo6U0hBMSgpCiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNM
QVJBVElPTlNfRU5ECiB9CiAKLXZvaWQgU0hBMTo6YWRkQnl0ZXMoY29uc3QgdWludDhfdCogaW5w
dXQsIHNpemVfdCBsZW5ndGgpCit2b2lkIFNIQTE6OmFkZEJ5dGVzKFNwYW48Y29uc3Qgc3RkOjpi
eXRlPiBpbnB1dCkKIHsKICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgot
ICAgIENDX1NIQTFfVXBkYXRlKCZtX2NvbnRleHQsIGlucHV0LCBsZW5ndGgpOworICAgIENDX1NI
QTFfVXBkYXRlKCZtX2NvbnRleHQsIGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpKTsKICAgICBB
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIH0KIApAQCAtMTAxLDExICsxMDEsMTEg
QEAgU0hBMTo6U0hBMSgpCiAgICAgcmVzZXQoKTsKIH0KIAotdm9pZCBTSEExOjphZGRCeXRlcyhj
b25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGxlbmd0aCkKK3ZvaWQgU0hBMTo6YWRkQnl0ZXMo
U3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQogewotICAgIHdoaWxlIChsZW5ndGgtLSkgewor
ICAgIGZvciAoYXV0byBieXRlIDogaW5wdXQpIHsKICAgICAgICAgQVNTRVJUKG1fY3Vyc29yIDwg
NjQpOwotICAgICAgICBtX2J1ZmZlclttX2N1cnNvcisrXSA9ICppbnB1dCsrOworICAgICAgICBt
X2J1ZmZlclttX2N1cnNvcisrXSA9IHN0ZDo6dG9faW50ZWdlcjx1aW50OF90PihieXRlKTsKICAg
ICAgICAgKyttX3RvdGFsQnl0ZXM7CiAgICAgICAgIGlmIChtX2N1cnNvciA9PSA2NCkKICAgICAg
ICAgICAgIHByb2Nlc3NCbG9jaygpOwpJbmRleDogU291cmNlL1dURi93dGYvU0hBMS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NIQTEuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dURi93dGYvU0hBMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgPGFycmF5PgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAt
NDUsMTUgKzQ2LDExIEBAIGNsYXNzIFNIQTEgewogcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBTSEExKCk7CiAKLSAgICB2b2lkIGFkZEJ5dGVzKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
aW5wdXQpCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkQnl0ZXMoU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkZEJ5dGVzKFQmJiBk
YXRhKQogICAgIHsKLSAgICAgICAgYWRkQnl0ZXMoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkp
OworICAgICAgICByZXR1cm4gYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+
KGRhdGEpIH0pKTsKICAgICB9Ci0gICAgdm9pZCBhZGRCeXRlcyhjb25zdCBDU3RyaW5nJiBpbnB1
dCkKLSAgICB7Ci0gICAgICAgIGFkZEJ5dGVzKGlucHV0LmRhdGFBc1VJbnQ4UHRyKCksIGlucHV0
Lmxlbmd0aCgpKTsKLSAgICB9Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkQnl0ZXMo
Y29uc3QgdWludDhfdCogaW5wdXQsIHNpemVfdCBsZW5ndGgpOwogCiAgICAgLy8gU2l6ZSBvZiB0
aGUgU0hBMSBoYXNoCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBjb25zdGV4cHIgc2l6
ZV90IGhhc2hTaXplID0gMjA7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dURi93dGYvVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxMyw2ICs2MTMsNyBAQCBw
cml2YXRlOgogCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBUIFZhbHVlVHlwZTsKKyAgICB0eXBlZGVm
IFQgdmFsdWVfdHlwZTsKIAogICAgIHR5cGVkZWYgVCogaXRlcmF0b3I7CiAgICAgdHlwZWRlZiBj
b25zdCBUKiBjb25zdF9pdGVyYXRvcjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL2NmL1NwYW5DRi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL2NmL1NwYW5DRi5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XVEYvd3RmL2NmL1NwYW5DRi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPENvcmVGb3VuZGF0
aW9uL0NvcmVGb3VuZGF0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KKworbmFtZXNwYWNl
IFdURiB7CisKK2lubGluZSBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYXNCeXRlcyhDRkRhdGFSZWYg
ZGF0YSkKK3sKKyAgICByZXR1cm4geyByZWludGVycHJldF9jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+
KENGRGF0YUdldEJ5dGVQdHIoZGF0YSkpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KENGRGF0YUdldExl
bmd0aChkYXRhKSkgfTsKK30KKworfQorCit1c2luZyBXVEY6OmFzQnl0ZXM7CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9jb2NvYS9TcGFuQ29jb2EuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9jb2NvYS9TcGFuQ29jb2EuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9jb2Nv
YS9TcGFuQ29jb2EuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNp
bmNsdWRlIDx3dGYvU3Bhbi5oPgorCituYW1lc3BhY2UgV1RGIHsKKworaW5saW5lIFNwYW48Y29u
c3Qgc3RkOjpieXRlPiBhc0J5dGVzKE5TRGF0YSAqZGF0YSkKK3sKKyAgICByZXR1cm4geyByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxlbmd0aCB9
OworfQorCit9CisKK3VzaW5nIFdURjo6YXNCeXRlczsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3Bl
cnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIENvZGVyPENTdHJpbmc+OjplbmNvZGUoRW5j
b2RlciYgZW5jCiAKICAgICB1aW50MzJfdCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAg
ZW5jb2RlciA8PCBsZW5ndGg7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3Ry
aW5nLmRhdGFBc1VJbnQ4UHRyKCksIGxlbmd0aCk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoc3RyaW5nLmJ5dGVzKCkpOwogfQogCiBzdGQ6Om9wdGlvbmFsPENTdHJpbmc+IENv
ZGVyPENTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKQEAgLTc4LDcgKzc4LDcgQEAg
c3RkOjpvcHRpb25hbDxDU3RyaW5nPiBDb2RlcjxDU3RyaW5nPjo6ZAogCiAgICAgY2hhciogYnVm
ZmVyOwogICAgIENTdHJpbmcgc3RyaW5nID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZCgqbGVu
Z3RoLCBidWZmZXIpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgKmxlbmd0aCkpCisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgcmVpbnRlcnByZXRfY2FzdDxzdGQ6OmJ5
dGUqPihidWZmZXIpLCAqbGVuZ3RoIH0pKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owog
CiAgICAgcmV0dXJuIHN0cmluZzsKQEAgLTk2LDExICs5Niw3IEBAIHZvaWQgQ29kZXI8U3RyaW5n
Pjo6ZW5jb2RlKEVuY29kZXImIGVuY28KICAgICBib29sIGlzOEJpdCA9IHN0cmluZy5pczhCaXQo
KTsKIAogICAgIGVuY29kZXIgPDwgbGVuZ3RoIDw8IGlzOEJpdDsKLQotICAgIGlmIChpczhCaXQp
Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0cmluZy5jaGFyYWN0ZXJz
OCgpLCBsZW5ndGgpOwotICAgIGVsc2UKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnMx
NigpKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoc3RyaW5nLmJ5dGVzKCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KQEAgLTExMiw3ICsxMDgsNyBAQCBzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8
U3RyaW5nPiBkZWNvCiAKICAgICBDaGFyYWN0ZXJUeXBlKiBidWZmZXI7CiAgICAgU3RyaW5nIHN0
cmluZyA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihidWZmZXIpLCBsZW5ndGggKiBzaXplb2YoQ2hhcmFjdGVyVHlwZSkpKQorICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8c3Rk
OjpieXRlKj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJhY3RlclR5cGUpIH0pKQogICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIAogICAgIHJldHVybiBzdHJpbmc7CkBAIC0x
NDIsMTMgKzEzOCwxMyBAQCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gQ29kZXI8U3RyaW5nPjo6ZGVj
CiAKIHZvaWQgQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQogewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpKTsKKyAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3QpOwogfQogCiBzdGQ6Om9wdGlvbmFsPFNIQTE6OkRpZ2Vz
dD4gQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAg
U0hBMTo6RGlnZXN0IHRtcDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHRtcC5kYXRhKCksIHNpemVvZih0bXApKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKHRtcCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgcmV0dXJu
IHRtcDsKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2Rl
cnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50
Q29kZXJzLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNl
L1BlcnNpc3RlbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYg
dmVjdG9yKQogICAgIHsKICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
dmVjdG9yLnNpemUoKSk7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6
ZSgpICogc2l6ZW9mKFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEo
dmVjdG9yKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5Pj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCkBAIC0xNzMsNyArMTcz
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAgICAgICBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IHRlbXA7CiAgICAgICAgIHRlbXAuZ3JvdyhzaXplKTsK
IAotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KHRlbXAuZGF0YSgpKSwgc2l6ZSAqIHNpemVvZihUKSkpCisgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEodGVtcCkpCiAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgICAgIHJldHVybiB0ZW1wOwpJbmRleDogU291cmNl
L1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmNwcAkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29k
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyMyArMzEsMjEgQEAKIG5hbWVzcGFjZSBXVEYg
ewogbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAotRGVjb2Rlcjo6RGVjb2Rlcihjb25zdCB1aW50
OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKQotICAgIDogbV9idWZmZXIoYnVmZmVyKQot
ICAgICwgbV9idWZmZXJQb3NpdGlvbihidWZmZXIpCi0gICAgLCBtX2J1ZmZlckVuZChidWZmZXIg
KyBidWZmZXJTaXplKQorRGVjb2Rlcjo6RGVjb2RlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnVm
ZmVyKQorICAgIDogbV9idWZmZXIoYnVmZmVyLmRhdGEoKSkKKyAgICAsIG1fYnVmZmVyUG9zaXRp
b24oYnVmZmVyLmRhdGEoKSkKKyAgICAsIG1fYnVmZmVyRW5kKGJ1ZmZlci5kYXRhKCkgKyBidWZm
ZXIuc2l6ZSgpKQogewogfQogCi1EZWNvZGVyOjp+RGVjb2RlcigpCi17Ci19CitEZWNvZGVyOjp+
RGVjb2RlcigpID0gZGVmYXVsdDsKIAogYm9vbCBEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdo
VG9Db250YWluKHNpemVfdCBzaXplKSBjb25zdAogewogICAgIHJldHVybiBzaXplIDw9IHN0YXRp
Y19jYXN0PHNpemVfdD4obV9idWZmZXJFbmQgLSBtX2J1ZmZlclBvc2l0aW9uKTsKIH0KIAotY29u
c3QgdWludDhfdCogRGVjb2Rlcjo6YnVmZmVyUG9pbnRlckZvckRpcmVjdFJlYWQoc2l6ZV90IHNp
emUpCitjb25zdCBzdGQ6OmJ5dGUqIERlY29kZXI6OmJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFk
KHNpemVfdCBzaXplKQogewogICAgIGlmICghYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihz
aXplKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC01NSwxNiArNTMsMTYgQEAgY29uc3Qg
dWludDhfdCogRGVjb2Rlcjo6YnVmZmVyUG9pbnRlckZvcgogICAgIGF1dG8gZGF0YSA9IG1fYnVm
ZmVyUG9zaXRpb247CiAgICAgbV9idWZmZXJQb3NpdGlvbiArPSBzaXplOwogCi0gICAgRW5jb2Rl
cjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgZGF0YSwgc2l6ZSk7CisgICAgRW5jb2Rl
cjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgU3BhbiB7IGRhdGEsIHNpemUgfSk7CiAg
ICAgcmV0dXJuIGRhdGE7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQorYm9vbCBEZWNvZGVyOjpkZWNvZGVGaXhlZExl
bmd0aERhdGEoU3BhbjxzdGQ6OmJ5dGU+IGRhdGEpCiB7Ci0gICAgYXV0byBidWZmZXIgPSBidWZm
ZXJQb2ludGVyRm9yRGlyZWN0UmVhZChzaXplKTsKKyAgICBhdXRvIGJ1ZmZlciA9IGJ1ZmZlclBv
aW50ZXJGb3JEaXJlY3RSZWFkKGRhdGEuc2l6ZSgpKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIG1lbWNweShkYXRhLCBidWZmZXIsIHNpemUpOworICAgIG1l
bWNweShkYXRhLmRhdGEoKSwgYnVmZmVyLCBkYXRhLnNpemUoKSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTEzOSw3ICsxMzcsNyBAQCBib29sIERlY29kZXI6OnZlcmlmeUNoZWNrc3VtKCkK
ICAgICBtX3NoYTEuY29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2Vz
dCBzYXZlZEhhc2g7Ci0gICAgaWYgKCFkZWNvZGVGaXhlZExlbmd0aERhdGEoc2F2ZWRIYXNoLmRh
dGEoKSwgc2l6ZW9mKHNhdmVkSGFzaCkpKQorICAgIGlmICghZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHNhdmVkSGFzaCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBjb21wdXRl
ZEhhc2ggPT0gc2F2ZWRIYXNoOwpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVy
c2lzdGVudERlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5j
ZS9QZXJzaXN0ZW50RGVjb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0
Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw3IEBACiAKICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9T
SEExLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2Uv
UGVyc2lzdGVudENvZGVyLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMzUsNyArMzYsMTIgQEAg
bmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIGNsYXNzIERlY29kZXIgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyKGNv
bnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IERlY29kZXIoVCYmIGRhdGEpCisgICAgICAgIDogRGVjb2RlciB7IGFzQnl0ZXMo
U3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihkYXRhKSB9KSB9CisgICAgeworICAgIH0KKworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIH5EZWNvZGVyKCk7CiAKICAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3Qg
eyByZXR1cm4gbV9idWZmZXJFbmQgLSBtX2J1ZmZlcjsgfQpAQCAtNDMsNyArNDksMTEgQEAgcHVi
bGljOgogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIHZl
cmlmeUNoZWNrc3VtKCk7CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgV0FSTl9VTlVTRURfUkVU
VVJOIGJvb2wgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqLCBzaXplX3QpOworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVGaXhlZExlbmd0
aERhdGEoU3BhbjxzdGQ6OmJ5dGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIGRl
Y29kZUZpeGVkTGVuZ3RoRGF0YShUJiYgZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNv
ZGVGaXhlZExlbmd0aERhdGEoYXNXcml0YWJsZUJ5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4o
ZGF0YSkgfSkpOworICAgIH0KIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVy
YXRvcj4+KHN0ZDo6b3B0aW9uYWw8Ym9vbD4mKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVj
b2RlciYgb3BlcmF0b3I+PihzdGQ6Om9wdGlvbmFsPHVpbnQ4X3Q+Jik7CkBAIC04NCw3ICs5NCw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG51bUVsZW1lbnRzIDw9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8c2l6ZV90Pjo6bWF4KCkgLyBzaXplb2YoVCkgJiYgYnVmZmVySXNMYXJnZUVub3VnaFRv
Q29udGFpbihudW1FbGVtZW50cyAqIHNpemVvZihUKSk7CiAgICAgfQogCi0gICAgV1RGX0VYUE9S
VF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBjb25zdCB1aW50OF90KiBidWZmZXJQb2ludGVy
Rm9yRGlyZWN0UmVhZChzaXplX3QgbnVtQnl0ZXMpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBX
QVJOX1VOVVNFRF9SRVRVUk4gY29uc3Qgc3RkOjpieXRlKiBidWZmZXJQb2ludGVyRm9yRGlyZWN0
UmVhZChzaXplX3QgbnVtQnl0ZXMpOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSVBD
RGVjb2RlciA9IGZhbHNlOwogCkBAIC05Miw5ICsxMDIsOSBAQCBwcml2YXRlOgogICAgIFdURl9F
WFBPUlRfUFJJVkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBidWZmZXJJc0xhcmdlRW5vdWdo
VG9Db250YWluKHNpemVfdCkgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4gRGVj
b2RlciYgZGVjb2RlTnVtYmVyKHN0ZDo6b3B0aW9uYWw8VHlwZT4mKTsKIAotICAgIGNvbnN0IHVp
bnQ4X3QqIG1fYnVmZmVyOwotICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyUG9zaXRpb247Ci0g
ICAgY29uc3QgdWludDhfdCogbV9idWZmZXJFbmQ7CisgICAgY29uc3Qgc3RkOjpieXRlKiBtX2J1
ZmZlcjsKKyAgICBjb25zdCBzdGQ6OmJ5dGUqIG1fYnVmZmVyUG9zaXRpb247CisgICAgY29uc3Qg
c3RkOjpieXRlKiBtX2J1ZmZlckVuZDsKIAogICAgIFNIQTEgbV9zaGExOwogfTsKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRF
bmNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMzQgKzMxLDM0IEBACiBuYW1lc3BhY2Ug
V1RGIHsKIG5hbWVzcGFjZSBQZXJzaXN0ZW5jZSB7CiAKLUVuY29kZXI6OkVuY29kZXIoKQotewot
fQotCi1FbmNvZGVyOjp+RW5jb2RlcigpCi17Ci19CitFbmNvZGVyOjpFbmNvZGVyKCkgPSBkZWZh
dWx0OworRW5jb2Rlcjo6fkVuY29kZXIoKSA9IGRlZmF1bHQ7CiAKLXVpbnQ4X3QqIEVuY29kZXI6
Omdyb3coc2l6ZV90IHNpemUpCitzdGQ6OmJ5dGUqIEVuY29kZXI6Omdyb3coc2l6ZV90IHNpemUp
CiB7CiAgICAgc2l6ZV90IG5ld1Bvc2l0aW9uID0gbV9idWZmZXIuc2l6ZSgpOwogICAgIG1fYnVm
ZmVyLmdyb3cobV9idWZmZXIuc2l6ZSgpICsgc2l6ZSk7CiAgICAgcmV0dXJuIG1fYnVmZmVyLmRh
dGEoKSArIG5ld1Bvc2l0aW9uOwogfQogCi12b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9y
RGF0YShTSEExJiBzaGExLCBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3ZvaWQg
RW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmIHNoYTEsIFNwYW48Y29uc3QgdWlu
dDhfdD4gZGF0YSkKK3sKKyAgICByZXR1cm4gdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKHNoYTEsIGFz
Qnl0ZXMoZGF0YSkpOworfQorCit2b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yRGF0YShT
SEExJiBzaGExLCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKICAgICBhdXRvIHR5cGVT
YWx0ID0gU2FsdDx1aW50OF90Kj46OnZhbHVlOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7Ci0gICAgc2hh
MS5hZGRCeXRlcyhkYXRhLCBzaXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmdHlwZVNh
bHQsIDEgfSk7CisgICAgc2hhMS5hZGRCeXRlcyhkYXRhKTsKIH0KIAotdm9pZCBFbmNvZGVyOjpl
bmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCit2
b2lkIEVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
ZGF0YSkKIHsKLSAgICB1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhLCBzaXplKTsK
KyAgICB1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhKTsKIAotICAgIHVpbnQ4X3Qq
IGJ1ZmZlciA9IGdyb3coc2l6ZSk7Ci0gICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7Cisg
ICAgYXV0byogYnVmZmVyID0gZ3JvdyhkYXRhLnNpemUoKSk7CisgICAgbWVtY3B5KGJ1ZmZlciwg
ZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4K
QEAgLTY2LDcgKzY2LDcgQEAgRW5jb2RlciYgRW5jb2Rlcjo6ZW5jb2RlTnVtYmVyKFR5cGUgdmFs
dQogewogICAgIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKG1fc2hhMSwgdmFsdWUp
OwogCi0gICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhzaXplb2YoVHlwZSkpOworICAgIGF1dG8q
IGJ1ZmZlciA9IGdyb3coc2l6ZW9mKFR5cGUpKTsKICAgICBtZW1jcHkoYnVmZmVyLCAmdmFsdWUs
IHNpemVvZihUeXBlKSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQpAQCAtMTI1LDcgKzEyNSw3IEBA
IHZvaWQgRW5jb2Rlcjo6ZW5jb2RlQ2hlY2tzdW0oKQogewogICAgIFNIQTE6OkRpZ2VzdCBoYXNo
OwogICAgIG1fc2hhMS5jb21wdXRlSGFzaChoYXNoKTsKLSAgICBlbmNvZGVGaXhlZExlbmd0aERh
dGEoaGFzaC5kYXRhKCksIGhhc2guc2l6ZSgpKTsKKyAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEo
aGFzaCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3Rl
bnRFbmNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVy
c2lzdGVudEVuY29kZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvcGVy
c2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcs
NyBAQAogCiAjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvU0hBMS5o
PgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1
ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaD4KIApAQCAtNDMsNyArNDQsMTEg
QEAgcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSB+RW5jb2RlcigpOwogCiAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlQ2hlY2tzdW0oKTsKLSAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCosIHNpemVfdCk7
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48
Y29uc3Qgc3RkOjpieXRlPik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBlbmNvZGVG
aXhlZExlbmd0aERhdGEoVCYmIGRhdGEpCisgICAgeworICAgICAgICBlbmNvZGVGaXhlZExlbmd0
aERhdGEoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pKTsKKyAgICB9CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZW51bTxU
Pjo6dmFsdWU+KiA9IG51bGxwdHI+CiAgICAgRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBUJiB0
KQpAQCAtNzAsMjMgKzc1LDIyIEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRW5j
b2RlciYgb3BlcmF0b3I8PChmbG9hdCk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIEVuY29kZXIm
IG9wZXJhdG9yPDwoZG91YmxlKTsKIAotICAgIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlcigpIGNvbnN0
IHsgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKTsgfQotICAgIHNpemVfdCBidWZmZXJTaXplKCkgY29u
c3QgeyByZXR1cm4gbV9idWZmZXIuc2l6ZSgpOyB9Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBjb25zdCB1aW50OF90Kiwg
c2l6ZV90KTsKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnVmZmVyKCkgY29uc3QgeyByZXR1
cm4gbV9idWZmZXI7IH0KKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQg
dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBTcGFuPGNvbnN0IHVpbnQ4X3Q+KTsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEm
LCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPiBz
dGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZvck51bWJlcihTSEExJiwgVHlwZSk7CiAKICAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNJUENFbmNvZGVyID0gZmFsc2U7CiAKIHByaXZhdGU6Ci0K
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiBFbmNvZGVyJiBlbmNvZGVOdW1iZXIoVHlwZSk7
CiAKLSAgICB1aW50OF90KiBncm93KHNpemVfdCk7CisgICAgc3RkOjpieXRlKiBncm93KHNpemVf
dCk7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4gc3RydWN0IFNhbHQ7CiAKLSAgICBW
ZWN0b3I8dWludDhfdCwgNDA5Nj4gbV9idWZmZXI7CisgICAgVmVjdG9yPHN0ZDo6Ynl0ZSwgNDA5
Nj4gbV9idWZmZXI7CiAgICAgU0hBMSBtX3NoYTE7CiB9OwogCkBAIC0xMDYsOCArMTEwLDggQEAg
dGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+CiB2b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9y
TnVtYmVyKFNIQTEmIHNoYTEsIFR5cGUgdmFsdWUpCiB7CiAgICAgYXV0byB0eXBlU2FsdCA9IFNh
bHQ8VHlwZT46OnZhbHVlOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7Ci0gICAgc2hhMS5hZGRCeXRlcyhy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWUpLCBzaXplb2YodmFsdWUpKTsKKyAgICBz
aGExLmFkZEJ5dGVzKFNwYW4geyAmdHlwZVNhbHQsIDEgfSk7CisgICAgc2hhMS5hZGRCeXRlcyhT
cGFuIHsgJnZhbHVlLCAxIH0pOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jh
c2U2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0MCwzOSArMTQwLDM5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IHN0YXRpYyAKICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSAn
PSc7CiB9CiAKLXN0YXRpYyBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoY29u
c3QgdWludDhfdCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0
RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKK3N0YXRpYyBWZWN0b3I8
dWludDhfdD4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0
LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewotICAg
IGF1dG8gZGVzdGluYXRpb25MZW5ndGggPSBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShpbnB1
dExlbmd0aCwgcG9saWN5KTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uTGVuZ3RoID0gY2FsY3VsYXRl
QmFzZTY0RW5jb2RlZFNpemUoaW5wdXQuc2l6ZSgpLCBwb2xpY3kpOwogICAgIGlmICghZGVzdGlu
YXRpb25MZW5ndGgpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBWZWN0b3I8dWludDhfdD4g
ZGVzdGluYXRpb25WZWN0b3IoZGVzdGluYXRpb25MZW5ndGgpOwotICAgIGJhc2U2NEVuY29kZUlu
dGVybmFsKGlucHV0RGF0YUJ1ZmZlciwgaW5wdXRMZW5ndGgsIGRlc3RpbmF0aW9uVmVjdG9yLmRh
dGEoKSwgZGVzdGluYXRpb25MZW5ndGgsIHBvbGljeSwgbWFwKTsKKyAgICBiYXNlNjRFbmNvZGVJ
bnRlcm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBp
bnB1dC5zaXplKCksIGRlc3RpbmF0aW9uVmVjdG9yLmRhdGEoKSwgZGVzdGluYXRpb25MZW5ndGgs
IHBvbGljeSwgbWFwKTsKICAgICByZXR1cm4gZGVzdGluYXRpb25WZWN0b3I7CiB9CiAKLXZvaWQg
YmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRM
ZW5ndGgsIFVDaGFyKiBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9u
TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQor
dm9pZCBiYXNlNjRFbmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0LCBVQ2hhciogZGVz
dGluYXRpb25EYXRhQnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkxlbmd0aCwgQmFzZTY0RW5j
b2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKICAgICBpZiAoIWRlc3Rp
bmF0aW9uTGVuZ3RoKQogICAgICAgICByZXR1cm47Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwo
c3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3Ro
LCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7
CisgICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRl
c3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7CiB9CiAKLXZvaWQgYmFzZTY0RW5jb2RlKGNv
bnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIExDaGFyKiBk
ZXN0aW5hdGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uTGVuZ3RoLCBCYXNlNjRF
bmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordm9pZCBiYXNlNjRFbmNv
ZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0LCBMQ2hhciogZGVzdGluYXRpb25EYXRhQnVm
ZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkxlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGlj
eSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKICAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQog
ICAgICAgICByZXR1cm47Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29u
c3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvbkRh
dGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7CisgICAgYmFzZTY0RW5j
b2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0YSgp
KSwgaW5wdXQuc2l6ZSgpLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3Ro
LCBwb2xpY3ksIG1hcCk7CiB9CiAKLVZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rv
cihjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNl
NjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQorVmVjdG9yPHVpbnQ4
X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwgQmFz
ZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1
cm4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0
RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2
NEVuY29kZUludGVybmFsKGlucHV0LCBwb2xpY3ksIG1hcCk7CiB9CiAKLVN0cmluZyBiYXNlNjRF
bmNvZGVUb1N0cmluZyhjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0
TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQor
U3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwg
QmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBy
ZXR1cm4gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKGlucHV0RGF0YUJ1ZmZlciwgaW5wdXRMZW5n
dGgsIHBvbGljeSwgbWFwKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChp
bnB1dCwgcG9saWN5LCBtYXApKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIHN0
ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGVJbnRlcm5hbChjb25zdCBU
KiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBPcHRpb25TZXQ8QmFzZTY0
RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKQEAgLTI1NCw4NCAr
MjU0LDI3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBzdGQ6Om9wdGlvbmEKICAgICBy
ZXR1cm4gZGVzdGluYXRpb247CiB9CiAKLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjREZWNvZGUoY29uc3QgU3RyaW5nJiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9w
dGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgdW5zaWduZWQgbGVu
Z3RoID0gaW5wdXQubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGggfHwgaW5wdXQuaXM4Qml0KCkp
Ci0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgp
LCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFs
KGlucHV0LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7Ci19Ci0KLXN0ZDo6
b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3RyaW5nVmlldyBpbnB1dCwg
T3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBt
YXApCi17Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7Ci0gICAgaWYgKCFs
ZW5ndGggfHwgaW5wdXQuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRl
cm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7Ci0gICAgcmV0
dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIG9w
dGlvbnMsIG1hcCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRE
ZWNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29k
ZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgaWYgKGlucHV0
LnNpemUoKSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKLSAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5w
dXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIG9wdGlvbnMsIG1hcCk7Ci19Ci0KLXN0ZDo6b3B0aW9u
YWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1
dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1h
cCBtYXApCitzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKFNwYW48
Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9w
dGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7CiAgICAgaWYgKGlucHV0LnNpemUoKSA+IHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpLCBvcHRpb25zLCBt
YXApOwogfQogCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNv
bnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgT3B0aW9uU2V0PEJhc2U2NERlY29k
ZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgcmV0dXJuIGJh
c2U2NERlY29kZUludGVybmFsKGRhdGEsIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKLX0KLQotc3Rk
OjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBjaGFyKiBkYXRh
LCB1bnNpZ25lZCBsZW5ndGgsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRpb25z
LCBCYXNlNjREZWNvZGVNYXAgbWFwKQotewotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5h
bChyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oZGF0YSksIGxlbmd0aCwgb3B0aW9ucywg
bWFwKTsKLX0KLQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29k
ZShjb25zdCBTdHJpbmcmIGlucHV0KQorc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJh
c2U2NERlY29kZShjb25zdCBTdHJpbmcmIGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0
aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKICAgICB1bnNpZ25lZCBsZW5n
dGggPSBpbnB1dC5sZW5ndGgoKTsKICAgICBpZiAoIWxlbmd0aCB8fCBpbnB1dC5pczhCaXQoKSkK
LSAgICAgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnM4KCks
IGxlbmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7Ci0gICAgcmV0dXJuIGJhc2U2NERl
Y29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIHsgfSwgQmFzZTY0RGVj
b2RlTWFwOjpVUkwpOworICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQu
Y2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOworICAgIHJldHVybiBiYXNlNjRE
ZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXAp
OwogfQogCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFN0
cmluZ1ZpZXcgaW5wdXQpCitzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVj
b2RlKFN0cmluZ1ZpZXcgaW5wdXQsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRp
b25zLCBCYXNlNjREZWNvZGVNYXAgbWFwKQogewogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0
Lmxlbmd0aCgpOwogICAgIGlmICghbGVuZ3RoIHx8IGlucHV0LmlzOEJpdCgpKQotICAgICAgICBy
ZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCB7
IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJu
YWwoaW5wdXQuY2hhcmFjdGVyczE2KCksIGxlbmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVS
TCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUo
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKLXsKLSAgICBpZiAoaW5wdXQuc2l6ZSgpID4g
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQotICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5kYXRhKCks
IGlucHV0LnNpemUoKSwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7Ci19Ci0KLXN0ZDo6b3B0
aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+
JiBpbnB1dCkKLXsKLSAgICBpZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHJldHVy
biBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihp
bnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCksIHsgfSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOwot
fQotCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0
IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gYmFzZTY0RGVj
b2RlSW50ZXJuYWwoZGF0YSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKLX0K
LQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBj
aGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUlu
dGVybmFsKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBsZW5ndGgsIHsg
fSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOworICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50
ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOworICAgIHJl
dHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBv
cHRpb25zLCBtYXApOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL3RleHQvQmFzZTY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9CYXNl
NjQuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCkBAIC01Niw1NCArNTcsMzUgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBtYXhpbXVtQmFzZTY0TAogLy8gUmF0aGVyIHRoYW4gYmVpbmcgcGVyZmVjdGx5IHByZWNp
c2UsIHRoaXMgaXMgYSBiaXQgY29uc2VydmF0aXZlLgogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBtYXhpbXVtQmFzZTY0RW5jb2RlcklucHV0QnVmZmVyU2l6ZSA9IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSAvIDc3ICogNzYgLyA0ICogMyAtIDI7CiAKLVdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQsIFVDaGFyKiwg
dW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJ
bnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci1X
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVk
LCBMQ2hhciosIHVuc2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xp
Y3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRl
ZmF1bHQpOworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2RlKFNwYW48Y29uc3Qg
c3RkOjpieXRlPiwgVUNoYXIqIGRlc3RpbmF0aW9uQnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlv
bkJ1ZmZlclNpemUsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9O
b3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7
CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+LCBMQ2hhciogZGVzdGluYXRpb25CdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uQnVmZmVy
U2l6ZSwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2Vy
dExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKIAotV1RG
X0VYUE9SVF9QUklWQVRFIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25z
dCB2b2lkKiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGlj
eTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVm
YXVsdCk7Ci1WZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05v
dEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsK
LVZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8Y2hhcj4m
LCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZz
LCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwotVmVjdG9yPHVp
bnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IENTdHJpbmcmLCBCYXNlNjRFbmNvZGVQ
b2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVN
YXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwotCi1XVEZfRVhQT1JUX1BSSVZBVEUgU3Ry
aW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgQmFzZTY0RW5j
b2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5j
b2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKLVN0cmluZyBiYXNlNjRFbmNvZGVU
b1N0cmluZyhjb25zdCBWZWN0b3I8dWludDhfdD4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNl
NjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRF
bmNvZGVNYXA6OkRlZmF1bHQpOwotU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IFZl
Y3RvcjxjaGFyPiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9O
b3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7
Ci1TdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgQ1N0cmluZyYsIEJhc2U2NEVuY29k
ZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29k
ZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgVmVj
dG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKFNwYW48Y29uc3Qgc3RkOjpieXRlPiwg
QmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywg
QmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihUJiYsIEJhc2U2
NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2
NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CiAKK1dURl9FWFBPUlRfUFJJ
VkFURSBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+LCBC
YXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBC
YXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKFQmJiwgQmFzZTY0RW5jb2RlUG9s
aWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFw
ID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKKworV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6
b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1h
cCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpv
cHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBTdHJpbmcmLCBPcHRp
b25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2
NERlY29kZU1hcDo6RGVmYXVsdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxW
ZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShTdHJpbmdWaWV3LCBPcHRpb25TZXQ8QmFzZTY0
RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6
RGVmYXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGJhc2U2NERlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mLCBPcHRpb25TZXQ8QmFzZTY0
RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6
RGVmYXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGJhc2U2NERlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mLCBPcHRpb25TZXQ8QmFzZTY0RGVj
b2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVm
YXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+
IGJhc2U2NERlY29kZShjb25zdCB1aW50OF90KiwgdW5zaWduZWQsIE9wdGlvblNldDxCYXNlNjRE
ZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpE
ZWZhdWx0KTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90
Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCwgT3B0aW9uU2V0PEJhc2U2NERl
Y29kZU9wdGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRl
ZmF1bHQpOwotCi1pbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJh
c2U2NEVuY29kZU1hcCBtYXApCi17Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlu
cHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7Ci19Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25z
dF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+PiwgU3RyaW5nPiAmJiAhc3RkOjppc19zYW1l
X3Y8c3RkOjpyZW1vdmVfY29uc3RfdDxzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxUPj4sIFN0cmlu
Z1ZpZXc+PiogPSBudWxscHRyPgorc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2
NERlY29kZShUJiYsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0
RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKIAotaW5saW5lIFZlY3Rvcjx1
aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBC
YXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordGVtcGxhdGU8
dHlwZW5hbWUgVD4gVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKFQmJiBpbnB1
dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAg
ICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCks
IHBvbGljeSwgbWFwKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoYXNCeXRlcyhT
cGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGlucHV0KSB9KSwgcG9saWN5LCBtYXApOwogfQogCi1pbmxp
bmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IENTdHJpbmcmIGlu
cHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordGVt
cGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKFQmJiBpbnB1dCwg
QmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBy
ZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwg
cG9saWN5LCBtYXApOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhhc0J5dGVzKFNw
YW4geyBzdGQ6OmZvcndhcmQ8VD4oaW5wdXQpIH0pLCBwb2xpY3ksIG1hcCk7CiB9CiAKLWlubGlu
ZSBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1
dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZV92PHN0ZDo6cmVt
b3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmc+ICYmICFzdGQ6
OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+
PiwgU3RyaW5nVmlldz4+Kj4KK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRE
ZWNvZGUoVCYmIGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywg
QmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmco
aW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSwgbWFwKTsKLX0KLQotaW5saW5lIFN0
cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBCYXNl
NjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQotewotICAgIHJldHVy
biBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5
LCBtYXApOwotfQotCi1pbmxpbmUgU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IENT
dHJpbmcmIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAg
bWFwKQotewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlu
cHV0Lmxlbmd0aCgpLCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZShhc0J5
dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oaW5wdXQpIH0pLCBvcHRpb25zLCBtYXApOwogfQog
CiAKQEAgLTExMiw2MSArOTQsNTcgQEAgaW5saW5lIFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmlu
Zyhjb25zdAogLy8gVGhpcyBmb3JtYXQgdXNlcyAnLScgYW5kICdfJyBpbnN0ZWFkIG9mICcrJyBh
bmQgJy8nIHJlc3BlY3RpdmVseS4KIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAK
LVZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihjb25zdCB2b2lkKiwgdW5z
aWduZWQpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9y
KGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRv
VmVjdG9yKGNvbnN0IENTdHJpbmcmKTsKK1ZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVU
b1ZlY3RvcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVj
dG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKFQmJik7CiAKLVN0cmluZyBiYXNl
NjRVUkxFbmNvZGVUb1N0cmluZyhjb25zdCB2b2lkKiwgdW5zaWduZWQpOwotU3RyaW5nIGJhc2U2
NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOwotU3RyaW5nIGJhc2U2
NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotU3RyaW5nIGJhc2U2NFVS
TEVuY29kZVRvU3RyaW5nKGNvbnN0IENTdHJpbmcmKTsKK1N0cmluZyBiYXNlNjRVUkxFbmNvZGVU
b1N0cmluZyhTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3Ry
aW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKFQmJik7CiAKLVdURl9FWFBPUlRfUFJJVkFURSBz
dGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFN0cmlu
ZyYpOwotV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjRVUkxEZWNvZGUoU3RyaW5nVmlldyk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRp
b25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBWZWN0b3I8dWludDhf
dD4mKTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4g
YmFzZTY0VVJMRGVjb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotV1RGX0VYUE9SVF9QUklWQVRF
IHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgdWlu
dDhfdCosIHVuc2lnbmVkKTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rv
cjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCk7CitzdGQ6
Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFNwYW48Y29uc3Qgc3Rk
OjpieXRlPik7CitzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2Rl
KGNvbnN0IFN0cmluZyYpOworc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVS
TERlY29kZShTdHJpbmdWaWV3KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lm
X3Q8IXN0ZDo6aXNfc2FtZV92PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJl
bmNlX3Q8VD4+LCBTdHJpbmc+ICYmICFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90
PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+PiwgU3RyaW5nVmlldz4+KiA9IG51bGxwdHI+Citz
dGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFQmJik7CiAKLWlu
bGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3Qgdm9pZCog
aW5wdXQsIHVuc2lnbmVkIGxlbmd0aCkKK2lubGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJM
RW5jb2RlVG9WZWN0b3IoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQogewotICAgIHJldHVy
biBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dCwgbGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3k6
OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1Zl
Y3RvcihpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJM
KTsKIH0KIAotaW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihj
b25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVjdG9y
PHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKFQmJiBpbnB1dCkKIHsKLSAgICByZXR1
cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJhc2U2
NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJh
c2U2NEVuY29kZVRvVmVjdG9yKHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCksIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBWZWN0b3I8dWlu
dDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCkK
K2lubGluZSBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRh
KCksIGlucHV0LnNpemUoKSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1h
cDo6VVJMKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5wdXQsIEJhc2U2NEVu
Y29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBWZWN0
b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgQ1N0cmluZyYgaW5wdXQp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoVCYm
IGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRhKCks
IGlucHV0Lmxlbmd0aCgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFw
OjpVUkwpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhzdGQ6OmZvcndhcmQ8VD4o
aW5wdXQpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwog
fQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqIGlu
cHV0LCB1bnNpZ25lZCBsZW5ndGgpCitpbmxpbmUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGJhc2U2NFVSTERlY29kZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCiB7Ci0gICAg
cmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LCBsZW5ndGgsIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29k
ZShpbnB1dCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBTdHJpbmcg
YmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKK2lu
bGluZSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0
IFN0cmluZyYgaW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0
LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5j
b2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjREZWNvZGUoaW5wdXQsIHsgfSwgQmFzZTY0
RGVjb2RlTWFwOjpVUkwpOwogfQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3Ry
aW5nKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW5wdXQpCitpbmxpbmUgc3RkOjpvcHRpb25hbDxWZWN0
b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShTdHJpbmdWaWV3IGlucHV0KQogewotICAgIHJl
dHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgQmFz
ZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKKyAgICByZXR1cm4g
YmFzZTY0RGVjb2RlKGlucHV0LCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKIH0KIAotaW5s
aW5lIFN0cmluZyBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhjb25zdCBDU3RyaW5nJiBpbnB1dCkK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZV92PHN0
ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmc+ICYm
ICFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5j
ZV90PFQ+PiwgU3RyaW5nVmlldz4+Kj4KK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjRVUkxEZWNvZGUoVCYmIGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0
cmluZyhpbnB1dC5kYXRhKCksIGlucHV0Lmxlbmd0aCgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVS
TCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjRVUkxEZWNvZGUoYXNC
eXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGlucHV0KSB9KSk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBpbmxpbmUgYm9vbCBpc0Jhc2U2NE9yQmFzZTY0
VVJMQ2hhcmFjdGVyKENoYXJhY3RlclR5cGUgYykKQEAgLTIwOCw1NyArMTg2LDM2IEBAIGlubGlu
ZSB1bnNpZ25lZCBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2kKIH0KIAogc3RydWN0IEJhc2U2NFNw
ZWNpZmljYXRpb24gewotICAgIGNvbnN0IHZvaWQqIGlucHV0RGF0YTsKLSAgICB1bnNpZ25lZCBp
bnB1dExlbmd0aDsKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXREYXRhOwogICAgIEJh
c2U2NEVuY29kZVBvbGljeSBwb2xpY3k7CiAgICAgQmFzZTY0RW5jb2RlTWFwIG1hcDsKIH07CiAK
LWlubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NEVuY29kZWQoY29uc3Qgdm9pZCogaW5w
dXREYXRhLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9
IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCBtYXAg
PSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpCi17Ci0gICAgcmV0dXJuIHsgaW5wdXREYXRhLCBp
bnB1dExlbmd0aCwgcG9saWN5LCBtYXAgfTsKLX0KLQotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRp
b24gYmFzZTY0RW5jb2RlZChjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0LCBCYXNlNjRFbmNv
ZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcykKLXsK
LSAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9s
aWN5KTsKLX0KLQotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChjb25z
dCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0
RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcykKLXsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2Rl
ZChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5KTsKLX0KLQotaW5saW5lIEJhc2U2
NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChjb25zdCBDU3RyaW5nJiBpbnB1dCwgQmFzZTY0
RW5jb2RlUG9saWN5IHBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMp
Ci17Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgo
KSwgcG9saWN5KTsKLX0KLQotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5j
b2RlZChjb25zdCB2b2lkKiBpbnB1dERhdGEsIHVuc2lnbmVkIGlucHV0TGVuZ3RoKQoraW5saW5l
IEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
aW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRv
Tm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgbWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZh
dWx0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0RGF0YSwgaW5wdXRMZW5ndGgs
IEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0
dXJuIHsgaW5wdXQsIHBvbGljeSwgbWFwIH07CiB9CiAKLWlubGluZSBCYXNlNjRTcGVjaWZpY2F0
aW9uIGJhc2U2NFVSTEVuY29kZWQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChUJiYgaW5w
dXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90
SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgbWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0
KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgp
LCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJl
dHVybiBiYXNlNjRFbmNvZGVkKGFzQnl0ZXMoU3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCkg
fSksIHBvbGljeSwgbWFwKTsKIH0KIAotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0
VVJMRW5jb2RlZChjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0KQoraW5saW5lIEJhc2U2NFNwZWNp
ZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCiB7
Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJh
c2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJu
IGJhc2U2NEVuY29kZWQoaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNv
ZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NFVSTEVu
Y29kZWQoY29uc3QgQ1N0cmluZyYgaW5wdXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBCYXNlNjRT
cGVjaWZpY2F0aW9uIGJhc2U2NFVSTEVuY29kZWQoVCYmIGlucHV0KQogewotICAgIHJldHVybiBi
YXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29k
ZWQoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGlucHV0KSB9KSwgQmFzZTY0RW5jb2Rl
UG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKIH0KIAogdGVtcGxhdGU8PiBjbGFz
cyBTdHJpbmdUeXBlQWRhcHRlcjxCYXNlNjRTcGVjaWZpY2F0aW9uPiB7CiBwdWJsaWM6CiAgICAg
U3RyaW5nVHlwZUFkYXB0ZXIoY29uc3QgQmFzZTY0U3BlY2lmaWNhdGlvbiYgYmFzZTY0KQogICAg
ICAgICA6IG1fYmFzZTY0IHsgYmFzZTY0IH0KLSAgICAgICAgLCBtX2VuY29kZWRMZW5ndGggeyBj
YWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShiYXNlNjQuaW5wdXRMZW5ndGgsIGJhc2U2NC5wb2xp
Y3kpIH0KKyAgICAgICAgLCBtX2VuY29kZWRMZW5ndGggeyBjYWxjdWxhdGVCYXNlNjRFbmNvZGVk
U2l6ZShiYXNlNjQuaW5wdXREYXRhLnNpemUoKSwgYmFzZTY0LnBvbGljeSkgfQogICAgIHsKICAg
ICB9CiAKQEAgLTI2Nyw3ICsyMjQsNyBAQCBwdWJsaWM6CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiB2b2lkIHdyaXRlVG8oQ2hhcmFjdGVyVHlwZSogZGVzdGluYXRpb24p
IGNvbnN0CiAgICAgewotICAgICAgICBiYXNlNjRFbmNvZGUobV9iYXNlNjQuaW5wdXREYXRhLCBt
X2Jhc2U2NC5pbnB1dExlbmd0aCwgZGVzdGluYXRpb24sIG1fZW5jb2RlZExlbmd0aCwgbV9iYXNl
NjQucG9saWN5LCBtX2Jhc2U2NC5tYXApOworICAgICAgICBiYXNlNjRFbmNvZGUobV9iYXNlNjQu
aW5wdXREYXRhLCBkZXN0aW5hdGlvbiwgbV9lbmNvZGVkTGVuZ3RoLCBtX2Jhc2U2NC5wb2xpY3ks
IG1fYmFzZTY0Lm1hcCk7CiAgICAgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dURi93dGYv
dGV4dC9DU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9DU3RyaW5n
LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMu
aD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvU3Bhbi5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtMzksOSArNDAsMTEg
QEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoQwogY2xhc3MgQ1N0cmlu
Z0J1ZmZlciBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPENTdHJpbmdCdWZmZXI+IHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihDU3RyaW5nQnVmZmVy
KTsKIHB1YmxpYzoKLSAgICBjb25zdCBjaGFyKiBkYXRhKCkgeyByZXR1cm4gbXV0YWJsZURhdGEo
KTsgfQorICAgIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PENT
dHJpbmdCdWZmZXIqPih0aGlzKS0+bXV0YWJsZURhdGEoKTsgfQogICAgIHNpemVfdCBsZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQogCisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+
IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4gYXNCeXRlcyhTcGFuIHsgZGF0YSgpLCBsZW5ndGgoKSB9
KTsgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDU3RyaW5nOwogCkBAIC02Niw2ICs2
OSwyMCBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBDU3RyaW5nIG5l
d1VuaW5pdGlhbGl6ZWQoc2l6ZV90IGxlbmd0aCwgY2hhciomIGNoYXJhY3RlckJ1ZmZlcik7CiAg
ICAgQ1N0cmluZyhIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IG1fYnVmZmVyKEhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSkgeyB9CiAKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fYnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIG1f
YnVmZmVyLT5ieXRlcygpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFNwYW48
c3RkOjpieXRlPiBtdXRhYmxlQnl0ZXMoKQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8gbXV0YWJs
ZURhdGEgPSB0aGlzLT5tdXRhYmxlRGF0YSgpKQorICAgICAgICAgICAgcmV0dXJuIGFzV3JpdGFi
bGVCeXRlcyhTcGFuIHsgbXV0YWJsZURhdGEsIG1fYnVmZmVyLT5sZW5ndGgoKSB9KTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICB9CisKICAgICBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3QKICAg
ICB7CiAgICAgICAgIHJldHVybiBtX2J1ZmZlciA/IG1fYnVmZmVyLT5kYXRhKCkgOiBudWxscHRy
OwpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5
NCw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBMQ2hhciogY2hhcmFjdGVyczgoKSBjb25zdDsKICAg
ICBjb25zdCBVQ2hhciogY2hhcmFjdGVyczE2KCkgY29uc3Q7CiAKKyAgICBTcGFuPGNvbnN0IHN0
ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25zdDsKKwogICAgIGJvb2wgaXNBbGxBU0NJSSgpIGNvbnN0Owog
CiAgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CkBAIC00MjQsNiArNDI2LDEzIEBAIGlubGlu
ZSBjb25zdCBVQ2hhciogU3RyaW5nVmlldzo6Y2hhcmFjdGUKICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgVUNoYXIqPihtX2NoYXJhY3RlcnMpOwogfQogCitpbmxpbmUgU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+IFN0cmluZ1ZpZXc6OmJ5dGVzKCkgY29uc3QKK3sKKyAgICBpZiAoaXM4Qml0KCkp
CisgICAgICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSB9
KTsKKyAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgY2hhcmFjdGVyczE2KCksIGxlbmd0aCgpIH0p
OworfQorCiBpbmxpbmUgYm9vbCBTdHJpbmdWaWV3Ojppc0FsbEFTQ0lJKCkgY29uc3QKIHsKICAg
ICBpZiAoaXM4Qml0KCkpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHJldmlzaW9uIDI3
ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPHd0Zi9G
dW5jdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQVND
SUlMaXRlcmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvSW50ZWdlclRvU3RyaW5nQ29udmVyc2lv
bi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KQEAgLTEzNCw2ICsxMzUsNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiAhbV9pbXBsIHx8IG1f
aW1wbC0+aXM4Qml0KCk7IH0KIAogICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5sZW5ndGgoKSAqIChpczhCaXQoKSA/IHNpemVvZihMQ2hh
cikgOiBzaXplb2YoVUNoYXIpKSA6IDA7IH0KKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0
ZXMoKSBjb25zdDsKIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBDU3RyaW5nIGFzY2lpKCkgY29u
c3Q7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIENTdHJpbmcgbGF0aW4xKCkgY29uc3Q7CkBAIC00
ODMsNiArNDg1LDE2IEBAIHRlbXBsYXRlPD4gaW5saW5lIGNvbnN0IFVDaGFyKiBTdHJpbmc6OmMK
ICAgICByZXR1cm4gY2hhcmFjdGVyczE2KCk7CiB9CiAKK2lubGluZSBTcGFuPGNvbnN0IHN0ZDo6
Ynl0ZT4gU3RyaW5nOjpieXRlcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ltcGwpCisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICBpZiAobV9pbXBsLT5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJu
IGFzQnl0ZXMoU3BhbiB7IG1faW1wbC0+Y2hhcmFjdGVyczgoKSwgbV9pbXBsLT5sZW5ndGgoKSB9
KTsKKyAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgbV9pbXBsLT5jaGFyYWN0ZXJzMTYoKSwgbV9p
bXBsLT5sZW5ndGgoKSB9KTsKK30KKwogaW5saW5lIFVDaGFyIFN0cmluZzo6Y2hhcmFjdGVyQXQo
dW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ltcGwgfHwgaW5kZXggPj0gbV9p
bXBsLT5sZW5ndGgoKSkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzYzLDkgKzM2Myw5IEBAIFN0cmluZyBjcmVhdGVUZW1wb3JhcnlE
aXJlY3RvcnkoKQogICAgIH0pOwogfQogCi1ib29sIHVubWFwVmlld09mRmlsZSh2b2lkKiBidWZm
ZXIsIHNpemVfdCkKK2Jvb2wgdW5tYXBWaWV3T2ZGaWxlKFNwYW48c3RkOjpieXRlPiBkYXRhKQog
ewotICAgIHJldHVybiBVbm1hcFZpZXdPZkZpbGUoYnVmZmVyKTsKKyAgICByZXR1cm4gVW5tYXBW
aWV3T2ZGaWxlKGRhdGEuZGF0YSgpKTsKIH0KIAogYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmls
ZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBGaWxlT3Blbk1vZGUgb3Blbk1vZGUs
IE1hcHBlZEZpbGVNb2RlKQpAQCAtMzc0LDcgKzM3NCw3IEBAIGJvb2wgTWFwcGVkRmlsZURhdGE6
Om1hcEZpbGVIYW5kbGUoUGxhdGYKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byBz
aXplID0gZmlsZVNpemUoaGFuZGxlKTsKLSAgICBpZiAoIXNpemUgfHwgKnNpemUgPiBzdGQ6Om51
bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIHx8ICpzaXplID4gc3RkOjpudW1lcmljX2xpbWl0
czxkZWNsdHlwZShtX2ZpbGVTaXplKT46Om1heCgpKSB7CisgICAgaWYgKCFzaXplIHx8ICpzaXpl
ID4gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSB8fCAqc2l6ZSA+IHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZGVjbHR5cGUobV9maWxlRGF0YS5zaXplKCkpPjo6bWF4KCkpIHsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNDAzLDExICs0MDMsMTIgQEAgYm9vbCBNYXBw
ZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0ZgogICAgIGlmICghbWFwcGluZykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9maWxlRGF0YSA9IE1hcFZpZXdPZkZpbGUobWFwcGlu
ZywgZGVzaXJlZEFjY2VzcywgMCwgMCwgKnNpemUpOworICAgIGF1dG8gZGF0YSA9IE1hcFZpZXdP
ZkZpbGUobWFwcGluZywgZGVzaXJlZEFjY2VzcywgMCwgMCwgKnNpemUpOwogICAgIENsb3NlSGFu
ZGxlKG1hcHBpbmcpOwotICAgIGlmICghbV9maWxlRGF0YSkKKyAgICBpZiAoIWRhdGEpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2ZpbGVTaXplID0gKnNpemU7CisKKyAgICBtX2ZpbGVE
YXRhID0gU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpieXRlKj4oZGF0YSksICpzaXplIH07
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgw
IEBACisyMDIxLTA2LTExICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAg
ICBBZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogTW9kdWxlcy9oaWdobGlnaHQv
QXBwSGlnaGxpZ2h0Lmg6CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHQ6OmVuY29kZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHQ6OmRlY29kZSk6CisgICAgICAg
ICogTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6dG9TaGFyZWRCdWZmZXIgY29uc3QpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvclJlc3BvbnNlRGF0YS5oOgor
ICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlQXJyYXlCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
ZGVjb2RlQXJyYXlCdWZmZXIpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oOgorICAgICAgICAoV2ViQ29yZTo6UHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmg6CisgICAgICAgIChX
ZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcjo6ZW5jb2RlIGNvbnN0KToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRXZWJTb2NrZXRBY2Nl
cHQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0J1ZmZlclNvdXJjZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6QnVmZmVyU291cmNlOjpieXRlcyBjb25zdCk6CisgICAgICAgICogYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmRlY29kZSk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvU2VyaWFsaXpl
ZE5GQS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6U2VyaWFsaXpl
ZE5GQTo6cG9pbnRlckF0T2Zmc2V0SW5GaWxlIGNvbnN0KToKKyAgICAgICAgKiBjcnlwdG8vbWFj
L1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
QW5kU3RvcmVNYXN0ZXJLZXkpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Omhhc2hQb2ludGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBhdGNoU3VwcG9ydDo6Y3JlYXRlRGlnZXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OmFkZFN0cmluZ1RvU0hBMSk6IERlbGV0ZWQuCisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZpY2F0ZSk6CisgICAgICAgICogaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yTmV0d29ya0FnZW50OjpnZXRTZXJpYWxpemVkQ2VydGlmaWNhdGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpjcmVhdGVTaGFyZWRCdWZmZXIgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRC
dWZmZXI6OlNoYXJlZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmFw
cGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpkYXRh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmJ5
dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6ZGVjb2RlciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpzaXplIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZGVjb2RlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Nb2RlbC5oOgorICAgICAgICAoV2ViQ29yZTo6TW9kZWw6OmVuY29k
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNb2RlbDo6ZGVjb2RlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6UGl4ZWxC
dWZmZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6ZGVj
b2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNl
Q2FwYWJpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpDYXBhYmlsaXR5VmFsdWVPclJhbmdl
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FwYWJpbGl0eVZhbHVlT3JSYW5n
ZTo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlh
U291cmNlQ2VudGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZFN0cmluZ1RvU0hBMSk6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHA6Cisg
ICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjplbmNvZGVDRkRhdGEpOgorICAgICAgICAoV1RGOjpQ
ZXJzaXN0ZW5jZTo6ZGVjb2RlQ0ZEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRl
U3RhdGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6YmluZEJs
b2IpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaDoKKyAgICAgICAg
KiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzKToKKyAgICAg
ICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTV1NjcmlwdFN0b3JhZ2U6OnN0b3JlKToKKwogMjAyMS0wNi0xMSAgQ2hyaXMg
RHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIExhemlseSBjb21wdXRlIFNlY3Vy
aXR5T3JpZ2luOjptX2lzUG90ZW50aWFsbHlUcnVzdHdvcnRoeSBmb3IgcGVyZm9ybWFuY2UKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvSW5pdERhdGFSZWdpc3Ry
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRp
YS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIHN0YXRpYyBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzYW5p
dGl6ZUtleWkKICAgICBhdXRvIG9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAg
YXV0byBraWRzQXJyYXkgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgZm9yIChhdXRvJiBi
dWZmZXIgOiBrZXlJREJ1ZmZlci52YWx1ZSgpKQotICAgICAgICBraWRzQXJyYXktPnB1c2hTdHJp
bmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgp
KSk7CisgICAgICAgIGtpZHNBcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVUb1N0cmlu
ZyhidWZmZXItPmJ5dGVzKCkpKTsKICAgICBvYmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92
ZShraWRzQXJyYXkpKTsKIAogICAgIENTdHJpbmcganNvbkRhdGEgPSBvYmplY3QtPnRvSlNPTlN0
cmluZygpLnV0ZjgoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0Fw
cEhpZ2hsaWdodC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxp
Z2h0L0FwcEhpZ2hsaWdodC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyAr
NTIsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBBcHBIaWdobGlnaHQ6OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
c2l6ZV90PihoaWdobGlnaHQtPnNpemUoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEoaGlnaGxpZ2h0LT5kYXRhKCksIGhpZ2hsaWdodC0+c2l6ZSgpLCAxKTsKKyAgICBlbmNv
ZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YSgqaGlnaGxpZ2h0LCAxKTsKIAogICAgIGVuY29kZXIg
PDwgdGV4dDsKIApAQCAtNzUsNyArNzUsNyBAQCBzdGQ6Om9wdGlvbmFsPEFwcEhpZ2hsaWdodD4g
QXBwSGlnaGxpZ2h0CiAKICAgICBWZWN0b3I8dWludDhfdD4gaGlnaGxpZ2h0OwogICAgIGhpZ2hs
aWdodC5ncm93KCpsZW5ndGgpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERh
dGEoaGlnaGxpZ2h0LmRhdGEoKSwgaGlnaGxpZ2h0LnNpemUoKSwgMSkpCisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShoaWdobGlnaHQsIDEpKQogICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwogCiAgICAgc3RkOjpvcHRpb25hbDxzdGQ6Om9wdGlvbmFsPFN0cmluZz4+
IHRleHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGln
aHRSYW5nZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGln
aGxpZ2h0L0FwcEhpZ2hsaWdodFJhbmdlRGF0YS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFJhbmdlRGF0YS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgUmVmPFNoYXJlZEJ1ZmZlcj4gQXBwSGln
aGxpZ2h0UmFuZ2VEYXRhOgogewogICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2Rl
cjsKICAgICBlbmNvZGVyIDw8ICp0aGlzOwotICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0
ZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgcmV0dXJuIFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCkpOwogfQogCiB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPiB2b2lkIEFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6Tm9kZVBhdGhDb21wb25lbnQ6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAJKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNo
YW5uZWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIE5ldHdvcmtTZW5kUXVl
dWUgUlRDRGF0YUNoYW5uZWw6OmNyZWF0ZU0KICAgICAgICAgaWYgKCFjaGFubmVsLm1faGFuZGxl
ci0+c2VuZFN0cmluZ0RhdGEodXRmOCkpCiAgICAgICAgICAgICBjaGFubmVsLnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3Nh
Z2VMZXZlbDo6RXJyb3IsICJFcnJvciBzZW5kaW5nIHN0cmluZyB0aHJvdWdoIFJUQ0RhdGFDaGFu
bmVsLiJfcyk7CiAgICAgfSwgWyZjaGFubmVsXShhdXRvJiBzcGFuKSB7Ci0gICAgICAgIGlmICgh
Y2hhbm5lbC5tX2hhbmRsZXItPnNlbmRSYXdEYXRhKHNwYW4uZGF0YSgpLCBzcGFuLnNpemUoKSkp
CisgICAgICAgIGlmICghY2hhbm5lbC5tX2hhbmRsZXItPnNlbmRSYXdEYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNwYW4uZGF0YSgpKSwgc3Bhbi5zaXplKCkpKQogICAgICAg
ICAgICAgY2hhbm5lbC5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFkZENvbnNvbGVNZXNzYWdl
KE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAiRXJyb3Igc2VuZGluZyBi
aW5hcnkgZGF0YSB0aHJvdWdoIFJUQ0RhdGFDaGFubmVsLiJfcyk7CiAgICAgfSwgWyZjaGFubmVs
XShFeGNlcHRpb25Db2RlIGVycm9yQ29kZSkgewogICAgICAgICBpZiAoYXV0byogY29udGV4dCA9
IGNoYW5uZWwuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxh
Y2VtZW50Lm1tCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Bs
dWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTUy
LDYgKzUyLDcgQEAKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0NhdGNoU2NvcGUuaD4KICNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CiAjaW1wb3J0IDxvYmpjL3J1bnRp
bWUuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9TcGFuQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi90ZXh0
L0Jhc2U2NC5oPgogCiAjaW1wb3J0IDxwYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaD4KQEAgLTI0
Niw5ICsyNDcsOSBAQCBzdGF0aWMgSlNWYWx1ZSAqanNWYWx1ZVdpdGhEYXRhSW5Db250ZXh0CiAg
ICAgLy8gRklYTUU6IEFkZCBtYWtlQ0ZTdHJpbmcvbWFrZU5TU3RyaW5nIHRvIGF2b2lkIHVubmVj
ZXNzYXJ5IFN0cmluZyBhbGxvY2F0aW9uLgogICAgIFN0cmluZyBkYXRhNjQ7CiAgICAgaWYgKCFt
aW1lVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6Iiwg
bWltZVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoW2RhdGEgYnl0ZXNdLCBbZGF0YSBs
ZW5ndGhdKSk7CisgICAgICAgIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgbWltZVR5cGUs
ICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoYXNCeXRlcyhkYXRhKSk7CiAgICAgZWxzZQotICAg
ICAgICBkYXRhNjQgPSBtYWtlU3RyaW5nKCJkYXRhOnRleHQvcGxhaW47YmFzZTY0LCIsIGJhc2U2
NEVuY29kZWQoW2RhdGEgYnl0ZXNdLCBbZGF0YSBsZW5ndGhdKSk7CisgICAgICAgIGRhdGE2NCA9
IG1ha2VTdHJpbmcoImRhdGE6dGV4dC9wbGFpbjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChhc0J5
dGVzKGRhdGEpKSk7CiAKICAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoT2JqZWN0OihpZClk
YXRhNjQuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSBpbkNvbnRleHQ6Y29udGV4dF07CiB9CkBAIC0z
NDAsNyArMzQxLDcgQEAgc3RhdGljIEpTVmFsdWUgKmpzVmFsdWVXaXRoQVZNZXRhZGF0YUl0ZQog
ICAgICAgICBpZCB2YWx1ZSA9IGl0ZW0udmFsdWU7CiAgICAgICAgIE5TU3RyaW5nICptaW1lVHlw
ZSA9IFtbaXRlbSBleHRyYUF0dHJpYnV0ZXNdIG9iamVjdEZvcktleTpAIk1JTUV0eXBlIl07CiAg
ICAgICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNEYXRhIGNsYXNzXV0gJiYgbWltZVR5
cGUpIHsKLSAgICAgICAgICAgIGF1dG8gZGF0YTY0ID0gbWFrZVN0cmluZygiZGF0YToiLCBTdHJp
bmcobWltZVR5cGUpLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKFt2YWx1ZSBieXRlc10sIFt2
YWx1ZSBsZW5ndGhdKSk7CisgICAgICAgICAgICBhdXRvIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRh
dGE6IiwgU3RyaW5nKG1pbWVUeXBlKSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChhc0J5dGVz
KChOU0RhdGEgKil2YWx1ZSkpKTsKICAgICAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDoo
X19icmlkZ2UgTlNTdHJpbmcgKilkYXRhNjQuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSBmb3JLZXk6
QCJ2YWx1ZSJdOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9i
amVjdDp2YWx1ZSBmb3JLZXk6QCJ2YWx1ZSJdOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdXRobi9BdXRoZW50aWNhdG9yQ29vcmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNw
cAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9B
dXRoZW50aWNhdG9yQ29vcmRpbmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3
IEBAIHN0YXRpYyBSZWY8QXJyYXlCdWZmZXI+IHByb2R1Y2VDbGllbnREYXQKICAgICAgICAgb2Jq
ZWN0LT5zZXRTdHJpbmcoInR5cGUiX3MsICJ3ZWJhdXRobi5nZXQiX3MpOwogICAgICAgICBicmVh
azsKICAgICB9Ci0gICAgb2JqZWN0LT5zZXRTdHJpbmcoImNoYWxsZW5nZSJfcywgYmFzZTY0VVJM
RW5jb2RlVG9TdHJpbmcoY2hhbGxlbmdlLmRhdGEoKSwgY2hhbGxlbmdlLmxlbmd0aCgpKSk7Cisg
ICAgb2JqZWN0LT5zZXRTdHJpbmcoImNoYWxsZW5nZSJfcywgYmFzZTY0VVJMRW5jb2RlVG9TdHJp
bmcoY2hhbGxlbmdlLmJ5dGVzKCkpKTsKICAgICBvYmplY3QtPnNldFN0cmluZygib3JpZ2luIl9z
LCBvcmlnaW4udG9SYXdTdHJpbmcoKSk7CiAKICAgICBhdXRvIHV0ZjhKU09OU3RyaW5nID0gb2Jq
ZWN0LT50b0pTT05TdHJpbmcoKS51dGY4KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1dGhuL0F1dGhlbnRpY2F0b3JSZXNwb25zZURhdGEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRpY2F0b3JSZXNwb25zZURhdGEuaAko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9BdXRo
ZW50aWNhdG9yUmVzcG9uc2VEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAg
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHN0YXRpYyB2b2lkIGVuY29kZUFycmF5QnVmZmVyKEVu
Y29kZXImIGVuY29kZXIsIGNvbnN0IEFycmF5QnVmZmVyJiBidWZmZXIpCiB7CiAgICAgZW5jb2Rl
ciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYnVmZmVyLmJ5dGVMZW5ndGgoKSk7Ci0gICAgZW5j
b2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1
ZmZlci5kYXRhKCkpLCBidWZmZXIuYnl0ZUxlbmd0aCgpLCAxKTsKKyAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShidWZmZXIuYnl0ZXMoKSwgMSk7CiB9CiAKIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+CkBAIC03NSw3ICs3NSw3IEBAIFJlZlB0cjxBcnJheUJ1ZmZlcj4gZGVjb2RlQXJy
YXlCdWZmZXIoRGUKICAgICBhdXRvIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjp0cnlDcmVhdGUobGVu
Z3RoLnZhbHVlKCksIHNpemVvZih1aW50OF90KSk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEo
c3RhdGljX2Nhc3Q8dWludDhfdCo+KGJ1ZmZlci0+ZGF0YSgpKSwgbGVuZ3RoLnZhbHVlKCksIDEp
KQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLT53cml0YWJs
ZUJ5dGVzKCksIDEpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gYnVmZmVy
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVk
ZW50aWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhu
L1B1YmxpY0tleUNyZWRlbnRpYWwuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NCw3ICs1NCw3IEBAIEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1
dHMgUHUKIH0KIAogUHVibGljS2V5Q3JlZGVudGlhbDo6UHVibGljS2V5Q3JlZGVudGlhbChSZWY8
QXV0aGVudGljYXRvclJlc3BvbnNlPiYmIHJlc3BvbnNlKQotICAgIDogQmFzaWNDcmVkZW50aWFs
KGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKHJlc3BvbnNlLT5yYXdJZCgpLT5kYXRhKCksIHJlc3Bv
bnNlLT5yYXdJZCgpLT5ieXRlTGVuZ3RoKCkpLCBUeXBlOjpQdWJsaWNLZXksIERpc2NvdmVyeTo6
UmVtb3RlKQorICAgIDogQmFzaWNDcmVkZW50aWFsKGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKHJl
c3BvbnNlLT5yYXdJZCgpLT5ieXRlcygpKSwgVHlwZTo6UHVibGljS2V5LCBEaXNjb3Zlcnk6OlJl
bW90ZSkKICAgICAsIG1fcmVzcG9uc2UoV1RGTW92ZShyZXNwb25zZSkpCiB7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlv
bk9wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhu
L1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3Jl
YXRpb25PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw4ICsxNDEsOCBAQCB0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25z
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IHJwLmlk
IDw8IHJwLm5hbWUgPDwgcnAuaWNvbjsKLSAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2
NF90Pih1c2VyLmlkLmxlbmd0aCgpKTsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0
YSh1c2VyLmlkLmRhdGEoKSwgdXNlci5pZC5sZW5ndGgoKSwgMSk7CisgICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDx1aW50NjRfdD4odXNlci5pZC5ieXRlcygpLnNpemUoKSk7CisgICAgZW5jb2Rl
ci5lbmNvZGVGaXhlZExlbmd0aERhdGEodXNlci5pZC5ieXRlcygpLCAxKTsKICAgICBlbmNvZGVy
IDw8IHVzZXIuZGlzcGxheU5hbWUgPDwgdXNlci5uYW1lIDw8IHVzZXIuaWNvbiA8PCBwdWJLZXlD
cmVkUGFyYW1zIDw8IHRpbWVvdXQgPDwgZXhjbHVkZUNyZWRlbnRpYWxzIDw8IGF1dGhlbnRpY2F0
b3JTZWxlY3Rpb24gPDwgYXR0ZXN0YXRpb24gPDwgZXh0ZW5zaW9uczsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGlj
S2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Nyw4ICs0Nyw4IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2
b2lkIFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IHR5cGU7Ci0gICAgZW5jb2RlciA8PCBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oaWQubGVuZ3RoKCkpOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKGlkLmRhdGEoKSwgaWQubGVuZ3RoKCksIDEpOworICAgIGVuY29kZXIgPDwgc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KGlkLmJ5dGVzKCkuc2l6ZSgpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZp
eGVkTGVuZ3RoRGF0YShpZC5ieXRlcygpLCAxKTsKICAgICBlbmNvZGVyIDw8IHRyYW5zcG9ydHM7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRI
YW5kc2hha2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTcsMTkgKzk3LDIwIEBAIHN0YXRpYyBTdHJpbmcgZ2VuZXJhdGVTZWNXZWJT
b2NrZXRLZXkoKQogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgbm9uY2VTaXplID0gMTY7CiAgICAg
dW5zaWduZWQgY2hhciBrZXlbbm9uY2VTaXplXTsKICAgICBjcnlwdG9ncmFwaGljYWxseVJhbmRv
bVZhbHVlcyhrZXksIG5vbmNlU2l6ZSk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5n
KGtleSwgbm9uY2VTaXplKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoa2V5KTsK
IH0KIAogU3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRXZWJTb2NrZXRBY2Nl
cHQoY29uc3QgU3RyaW5nJiBzZWNXZWJTb2NrZXRLZXkpCiB7CiAgICAgY29uc3RleHByIHVpbnQ4
X3Qgd2ViU29ja2V0S2V5R1VJRFtdID0gIjI1OEVBRkE1LUU5MTQtNDdEQS05NUNBLUM1QUIwREM4
NUIxMSI7CisKICAgICBTSEExIHNoYTE7Ci0gICAgQ1N0cmluZyBrZXlEYXRhID0gc2VjV2ViU29j
a2V0S2V5LmFzY2lpKCk7Ci0gICAgc2hhMS5hZGRCeXRlcyhrZXlEYXRhLmRhdGFBc1VJbnQ4UHRy
KCksIGtleURhdGEubGVuZ3RoKCkpOwotICAgIHNoYTEuYWRkQnl0ZXMod2ViU29ja2V0S2V5R1VJ
RCwgc3RkOjpzaXplKHdlYlNvY2tldEtleUdVSUQpIC0gMSk7CisgICAgc2hhMS5hZGRCeXRlcyhz
ZWNXZWJTb2NrZXRLZXkuYXNjaWkoKS5ieXRlcygpKTsKKyAgICBzaGExLmFkZEJ5dGVzKHdlYlNv
Y2tldEtleUdVSUQpOworCiAgICAgU0hBMTo6RGlnZXN0IGhhc2g7CiAgICAgc2hhMS5jb21wdXRl
SGFzaChoYXNoKTsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaGFzaC5kYXRhKCks
IFNIQTE6Omhhc2hTaXplKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaGFzaCk7
CiB9CiAKIFdlYlNvY2tldEhhbmRzaGFrZTo6V2ViU29ja2V0SGFuZHNoYWtlKGNvbnN0IFVSTCYg
dXJsLCBjb25zdCBTdHJpbmcmIHByb3RvY29sLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29u
c3QgU3RyaW5nJiBjbGllbnRPcmlnaW4sIGJvb2wgYWxsb3dDb29raWVzKQpJbmRleDogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2oveGNzaGFyZWRkYXRhL3hjc2NoZW1lcy9XZWJDb3Jl
Lnhjc2NoZW1lCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvV2ViQ29yZS54Y3NjaGVtZQkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2oveGNzaGFyZWRkYXRhL3hjc2No
ZW1lcy9XZWJDb3JlLnhjc2NoZW1lCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw5IEBACiAg
ICAgICBpZ25vcmVzUGVyc2lzdGVudFN0YXRlT25MYXVuY2ggPSAiTk8iCiAgICAgICBkZWJ1Z0Rv
Y3VtZW50VmVyc2lvbmluZyA9ICJZRVMiCiAgICAgICBkZWJ1Z1NlcnZpY2VFeHRlbnNpb24gPSAi
aW50ZXJuYWwiCi0gICAgICBhbGxvd0xvY2F0aW9uU2ltdWxhdGlvbiA9ICJZRVMiPgorICAgICAg
ZW5hYmxlR1BVRnJhbWVDYXB0dXJlTW9kZSA9ICIzIgorICAgICAgYWxsb3dMb2NhdGlvblNpbXVs
YXRpb24gPSAiWUVTIgorICAgICAgR1BVUHJvZmlsZXJFbmFibGVkID0gIk5vIj4KICAgIDwvTGF1
bmNoQWN0aW9uPgogICAgPFByb2ZpbGVBY3Rpb24KICAgICAgIGJ1aWxkQ29uZmlndXJhdGlvbiA9
ICJSZWxlYXNlIgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQnVmZmVyU291cmNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQnVmZmVyU291cmNl
LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0J1ZmZl
clNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1NywxMyBAQCBwdWJsaWM6CiAgICAg
ICAgIH0sIG1fdmFyaWFudCk7CiAgICAgfQogCisgICAgU3Bhbjxjb25zdCB1aW50OF90PiBieXRl
cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjp2aXNpdChbXShhdXRvJiBidWZm
ZXIpIC0+IFNwYW48Y29uc3QgdWludDhfdD4geworICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlciA/
IFNwYW48Y29uc3QgdWludDhfdD4geyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYnVmZmVy
LT5kYXRhKCkpLCBidWZmZXItPmJ5dGVMZW5ndGgoKSB9IDogU3Bhbjxjb25zdCB1aW50OF90PiB7
IH07CisgICAgICAgIH0sIG1fdmFyaWFudCk7CisgICAgfQorCiBwcml2YXRlOgogICAgIFZhcmlh
bnRUeXBlIG1fdmFyaWFudDsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE2NCwxNSArMTY0LDE1IEBAIHZvaWQgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpl
bmNvZGUoRW5jb2QKIAogICAgIGlmIChoYXNBcnJheSkgewogICAgICAgICBlbmNvZGVyIDw8IHN0
YXRpY19jYXN0PHVpbnQ2NF90PihtX2FycmF5QnVmZmVyQ29udGVudHNBcnJheS0+c2l6ZSgpKTsK
LSAgICAgICAgZm9yIChjb25zdCBhdXRvICZhcnJheUJ1ZmZlckNvbnRlbnRzIDogKm1fYXJyYXlC
dWZmZXJDb250ZW50c0FycmF5KSB7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgYXJyYXlCdWZm
ZXJDb250ZW50cyA6ICptX2FycmF5QnVmZmVyQ29udGVudHNBcnJheSkgewogICAgICAgICAgICAg
ZW5jb2RlciA8PCBhcnJheUJ1ZmZlckNvbnRlbnRzLnNpemVJbkJ5dGVzKCk7Ci0gICAgICAgICAg
ICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90
Kj4oYXJyYXlCdWZmZXJDb250ZW50cy5kYXRhKCkpLCBhcnJheUJ1ZmZlckNvbnRlbnRzLnNpemVJ
bkJ5dGVzKCksIDEpOworICAgICAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEo
YXJyYXlCdWZmZXJDb250ZW50cy5ieXRlcygpLCAxKTsKICAgICAgICAgfQogICAgIH0KIAogI2lm
IEVOQUJMRShXRUJfUlRDKQogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1f
ZGV0YWNoZWRSVENEYXRhQ2hhbm5lbHMuc2l6ZSgpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8gJmNo
YW5uZWwgOiBtX2RldGFjaGVkUlRDRGF0YUNoYW5uZWxzKQorICAgIGZvciAoY29uc3QgYXV0byYg
Y2hhbm5lbCA6IG1fZGV0YWNoZWRSVENEYXRhQ2hhbm5lbHMpCiAgICAgICAgIGVuY29kZXIgPDwg
KmNoYW5uZWw7CiAjZW5kaWYKIH0KQEAgLTIwNiw3ICsyMDYsNyBAQCBSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkCiAgICAgICAgICAgICBhdXRvIGJ1ZmZlciA9IEdpZ2Fj
YWdlOjp0cnlNYWxsb2MoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgYnVmZmVyU2l6ZSk7CiAgICAgICAg
ICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAg
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoc3RhdGljX2Nhc3Q8dWlu
dDhfdCo+KGJ1ZmZlciksIGJ1ZmZlclNpemUsIDEpKSB7CisgICAgICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBzdGF0aWNfY2FzdDxzdGQ6OmJ5dGUqPihi
dWZmZXIpLCBidWZmZXJTaXplIH0sIDEpKSB7CiAgICAgICAgICAgICAgICAgR2lnYWNhZ2U6OmZy
ZWUoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgYnVmZmVyKTsKICAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL1NlcmlhbGl6ZWRORkEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL1NlcmlhbGl6ZWRORkEuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9TZXJpYWxpemVkTkZBLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3IEBAIFNlcmlhbGl6ZWRORkE6OlNlcmlhbGl6ZWRORkEo
RmlsZVN5c3RlbToKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBjb25zdCBUKiBTZXJpYWxpemVkTkZB
Ojpwb2ludGVyQXRPZmZzZXRJbkZpbGUoc2l6ZV90IG9mZnNldCkgY29uc3QKIHsKLSAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4oc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+
KG1fZmlsZS5kYXRhKCkpICsgb2Zmc2V0KTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBUKj4obV9maWxlLmRhdGEoKS5kYXRhKCkgKyBvZmZzZXQpOwogfQogCiBhdXRvIFNlcmlh
bGl6ZWRORkE6Om5vZGVzKCkgY29uc3QgLT4gY29uc3QgUmFuZ2U8SW1tdXRhYmxlTkZBTm9kZT4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5RUNNYWMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5RUNNYWMuY3BwCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleUVD
TWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDEwICsxOTcsMTAgQEAgYm9vbCBDcnlwdG9L
ZXlFQzo6cGxhdGZvcm1BZGRGaWVsZEVsZW1lbgogCiAgICAgaWYgKFVOTElLRUxZKChzaXplICE9
IHB1YmxpY0tleVNpemUpICYmIChzaXplICE9IHByaXZhdGVLZXlTaXplKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBqd2sueCA9IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKHJlc3VsdC5k
YXRhKCkgKyAxLCBrZXlTaXplSW5CeXRlcyk7Ci0gICAgandrLnkgPSBiYXNlNjRVUkxFbmNvZGVU
b1N0cmluZyhyZXN1bHQuZGF0YSgpICsga2V5U2l6ZUluQnl0ZXMgKyAxLCBrZXlTaXplSW5CeXRl
cyk7CisgICAgandrLnggPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhTcGFuIHsgcmVzdWx0IH0u
c3Vic3BhbigxLCBrZXlTaXplSW5CeXRlcykpOworICAgIGp3ay55ID0gYmFzZTY0VVJMRW5jb2Rl
VG9TdHJpbmcoU3BhbiB7IHJlc3VsdCB9LnN1YnNwYW4oMSArIGtleVNpemVJbkJ5dGVzLCBrZXlT
aXplSW5CeXRlcykpOwogICAgIGlmIChzaXplID4gcHVibGljS2V5U2l6ZSkKLSAgICAgICAgandr
LmQgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhyZXN1bHQuZGF0YSgpICsgcHVibGljS2V5U2l6
ZSwga2V5U2l6ZUluQnl0ZXMpOworICAgICAgICBqd2suZCA9IGJhc2U2NFVSTEVuY29kZVRvU3Ry
aW5nKFNwYW4geyByZXN1bHQgfS5zdWJzcGFuKHB1YmxpY0tleVNpemUsIGtleVNpemVJbkJ5dGVz
KSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9t
YWMvU2VyaWFsaXplZENyeXB0b0tleVdyYXBNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3J5cHRvL21hYy9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5tbQkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9TZXJpYWxpemVkQ3J5cHRvS2V5
V3JhcE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2ltcG9ydCA8d3Rm
L0NyeXB0b2dyYXBoaWNVdGlsaXRpZXMuaD4KICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdl
Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvY2YvU3BhbkNGLmg+
CiAjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi9zcGkvY29j
b2EvU2VjdXJpdHlTUEkuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L0Jhc2U2NC5oPgpAQCAtMTY3LDcg
KzE2OCw3IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZmkKICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9CiAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4g
a2V5RGF0YSA9IGFkb3B0Q0Yoa2V5RGF0YVJlZik7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZShD
RkRhdGFHZXRCeXRlUHRyKGtleURhdGEuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgoa2V5RGF0YS5n
ZXQoKSkpOworICAgIHJldHVybiBiYXNlNjREZWNvZGUoYXNCeXRlcyhrZXlEYXRhLmdldCgpKSk7
CiB9CiAKIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBkZWZhdWx0V2ViQ3J5cHRvTWFz
dGVyS2V5KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYwNiw3ICsxNjA2LDgg
QEAgRXhjZXB0aW9uT3I8dm9pZD4gTm9kZTo6c2V0VGV4dENvbnRlbnQoYwogc3RhdGljIFNIQTE6
OkRpZ2VzdCBoYXNoUG9pbnRlcihjb25zdCB2b2lkKiBwb2ludGVyKQogewogICAgIFNIQTEgc2hh
MTsKLSAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZw
b2ludGVyKSwgc2l6ZW9mKHBvaW50ZXIpKTsKKyAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmcG9p
bnRlciwgMSB9KTsKKwogICAgIFNIQTE6OkRpZ2VzdCBkaWdlc3Q7CiAgICAgc2hhMS5jb21wdXRl
SGFzaChkaWdlc3QpOwogICAgIHJldHVybiBkaWdlc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9m
aWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzOCw3ICszMzgsNyBAQCB2b2lkIEZpbGVSZWFkZXJMb2FkZXI6OmNvbnZlcnRUb0RhdGFVUkwo
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX3N0cmluZ1Jlc3VsdCA9IG1ha2VTdHJp
bmcoImRhdGE6IiwgbV9kYXRhVHlwZS5pc0VtcHR5KCkgPyAiYXBwbGljYXRpb24vb2N0ZXQtc3Ry
ZWFtIiA6IG1fZGF0YVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQobV9yYXdEYXRhLT5k
YXRhKCksIG1fYnl0ZXNMb2FkZWQpKTsKKyAgICBtX3N0cmluZ1Jlc3VsdCA9IG1ha2VTdHJpbmco
ImRhdGE6IiwgbV9kYXRhVHlwZS5pc0VtcHR5KCkgPyAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFt
IiA6IG1fZGF0YVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQobV9yYXdEYXRhLT5ieXRl
cygpKSk7CiB9CiAKIGJvb2wgRmlsZVJlYWRlckxvYWRlcjo6aXNDb21wbGV0ZWQoKSBjb25zdApJ
bmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL05ldHdvcmtTZW5kUXVldWUuY3BwCShyZXZp
c2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL05ldHdvcmtTZW5kUXVldWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MywxMSArNTMsMTAgQEAgdm9pZCBOZXR3b3JrU2VuZFF1
ZXVlOjplbnF1ZXVlKENTdHJpbmcmJgogdm9pZCBOZXR3b3JrU2VuZFF1ZXVlOjplbnF1ZXVlKGNv
bnN0IEpTQzo6QXJyYXlCdWZmZXImIGJpbmFyeURhdGEsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVu
c2lnbmVkIGJ5dGVMZW5ndGgpCiB7CiAgICAgaWYgKG1fcXVldWUuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIGF1dG8qIGRhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYmluYXJ5RGF0YS5k
YXRhKCkpOwotICAgICAgICBtX3dyaXRlUmF3RGF0YShTcGFuIHsgZGF0YSArIGJ5dGVPZmZzZXQs
IGJ5dGVMZW5ndGggfSk7CisgICAgICAgIG1fd3JpdGVSYXdEYXRhKGJpbmFyeURhdGEuYnl0ZXMo
KS5zdWJzcGFuKGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBtX3F1ZXVlLmFwcGVuZChTaGFyZWRCdWZmZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDxj
b25zdCB1aW50OF90Kj4oYmluYXJ5RGF0YS5kYXRhKCkpICsgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0
aCkpOworICAgIG1fcXVldWUuYXBwZW5kKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGJpbmFyeURhdGEu
Ynl0ZXMoKS5zdWJzcGFuKGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKSk7CiB9CiAKIHZvaWQgTmV0
d29ya1NlbmRRdWV1ZTo6ZW5xdWV1ZShXZWJDb3JlOjpCbG9iJiBibG9iKQpAQCAtOTMsNyArOTIs
OSBAQCB2b2lkIE5ldHdvcmtTZW5kUXVldWU6OnByb2Nlc3NNZXNzYWdlcygpCiAgICAgICAgIHN3
aXRjaE9uKG1fcXVldWUuZmlyc3QoKSwgW3RoaXNdKGNvbnN0IENTdHJpbmcmIHV0ZjgpIHsKICAg
ICAgICAgICAgIG1fd3JpdGVTdHJpbmcodXRmOCk7CiAgICAgICAgIH0sIFt0aGlzXShSZWY8U2hh
cmVkQnVmZmVyPiYgZGF0YSkgewotICAgICAgICAgICAgZGF0YS0+Zm9yRWFjaFNlZ21lbnQobV93
cml0ZVJhd0RhdGEpOworICAgICAgICAgICAgZGF0YS0+Zm9yRWFjaFNlZ21lbnQoW3RoaXNdKGF1
dG8mIHNwYW4pIHsKKyAgICAgICAgICAgICAgICBtX3dyaXRlUmF3RGF0YShhc0J5dGVzKHNwYW4p
KTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICB9LCBbdGhpcywgJnNob3VsZFN0b3BQcm9jZXNz
aW5nXShVbmlxdWVSZWY8QmxvYkxvYWRlcj4mIGxvYWRlcikgewogICAgICAgICAgICAgYXV0byBl
cnJvckNvZGUgPSBsb2FkZXItPmVycm9yQ29kZSgpOwogICAgICAgICAgICAgaWYgKGxvYWRlci0+
aXNMb2FkaW5nKCkgfHwgKGVycm9yQ29kZSAmJiBlcnJvckNvZGUudmFsdWUoKSA9PSBBYm9ydEVy
cm9yKSkgewpAQCAtMTAyLDcgKzEwMyw3IEBAIHZvaWQgTmV0d29ya1NlbmRRdWV1ZTo6cHJvY2Vz
c01lc3NhZ2VzKCkKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGNvbnN0IGF1dG8m
IHJlc3VsdCA9IGxvYWRlci0+YXJyYXlCdWZmZXJSZXN1bHQoKSkgewotICAgICAgICAgICAgICAg
IG1fd3JpdGVSYXdEYXRhKFNwYW4geyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4ocmVzdWx0
LT5kYXRhKCkpLCByZXN1bHQtPmJ5dGVMZW5ndGgoKSB9KTsKKyAgICAgICAgICAgICAgICBtX3dy
aXRlUmF3RGF0YShyZXN1bHQtPmJ5dGVzKCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIEFTU0VSVChlcnJvckNvZGUpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmgJKHJldmlzaW9uIDI3ODgwOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTmV0d29ya1NlbmRRdWV1ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OCw3ICs0OCw3IEBAIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIGNsYXNzIFdFQkNPUkVfRVhQ
T1JUIE5ldHdvcmtTZW5kUXVldWUgOiBwdWJsaWMgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIg
ewogcHVibGljOgogICAgIHVzaW5nIFdyaXRlU3RyaW5nID0gRnVuY3Rpb248dm9pZChjb25zdCBD
U3RyaW5nJiB1dGY4KT47Ci0gICAgdXNpbmcgV3JpdGVSYXdEYXRhID0gRnVuY3Rpb248dm9pZChj
b25zdCBTcGFuPGNvbnN0IHVpbnQ4X3Q+Jik+OworICAgIHVzaW5nIFdyaXRlUmF3RGF0YSA9IEZ1
bmN0aW9uPHZvaWQoY29uc3QgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+Jik+OwogICAgIGVudW0gY2xh
c3MgQ29udGludWUgeyBObywgWWVzIH07CiAgICAgdXNpbmcgUHJvY2Vzc0Vycm9yID0gRnVuY3Rp
b248Q29udGludWUoRXhjZXB0aW9uQ29kZSk+OwogICAgIE5ldHdvcmtTZW5kUXVldWUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYsIFdyaXRlU3RyaW5nJiYsIFdyaXRlUmF3RGF0YSYmLCBQcm9jZXNz
RXJyb3ImJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBw
b3J0LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RP
TVBhdGNoU3VwcG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5NCwyOCArMzk0LDIzIEBAIEV4
Y2VwdGlvbk9yPHZvaWQ+IERPTVBhdGNoU3VwcG9ydDo6aW5uZXIKICAgICByZXR1cm4geyB9Owog
fQogCi1zdGF0aWMgdm9pZCBhZGRTdHJpbmdUb1NIQTEoU0hBMSYgc2hhMSwgY29uc3QgU3RyaW5n
JiBzdHJpbmcpCi17Ci0gICAgQ1N0cmluZyBjU3RyaW5nID0gc3RyaW5nLnV0ZjgoKTsKLSAgICBz
aGExLmFkZEJ5dGVzKGNTdHJpbmcuZGF0YUFzVUludDhQdHIoKSwgY1N0cmluZy5sZW5ndGgoKSk7
Ci19Ci0KIHN0ZDo6dW5pcXVlX3B0cjxET01QYXRjaFN1cHBvcnQ6OkRpZ2VzdD4gRE9NUGF0Y2hT
dXBwb3J0OjpjcmVhdGVEaWdlc3QoTm9kZSYgbm9kZSwgVW51c2VkTm9kZXNNYXAqIHVudXNlZE5v
ZGVzTWFwKQogewogICAgIGF1dG8gZGlnZXN0ID0gbWFrZVVuaXF1ZTxEaWdlc3Q+KCk7CiAgICAg
ZGlnZXN0LT5ub2RlID0gJm5vZGU7CisKICAgICBTSEExIHNoYTE7CiAKICAgICBhdXRvIG5vZGVU
eXBlID0gbm9kZS5ub2RlVHlwZSgpOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4oJm5vZGVUeXBlKSwgc2l6ZW9mKG5vZGVUeXBlKSk7Ci0gICAgYWRk
U3RyaW5nVG9TSEExKHNoYTEsIG5vZGUubm9kZU5hbWUoKSk7Ci0gICAgYWRkU3RyaW5nVG9TSEEx
KHNoYTEsIG5vZGUubm9kZVZhbHVlKCkpOworICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZub2Rl
VHlwZSwgMSB9KTsKKyAgICBzaGExLmFkZEJ5dGVzKG5vZGUubm9kZU5hbWUoKS51dGY4KCkuYnl0
ZXMoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhub2RlLm5vZGVWYWx1ZSgpLnV0ZjgoKS5ieXRlcygp
KTsKIAogICAgIGlmIChub2RlLm5vZGVUeXBlKCkgPT0gTm9kZTo6RUxFTUVOVF9OT0RFKSB7CiAg
ICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS5maXJzdENoaWxkKCk7CiAgICAgICAgIHdoaWxlIChj
aGlsZCkgewogICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPERpZ2VzdD4gY2hpbGRJbmZvID0g
Y3JlYXRlRGlnZXN0KCpjaGlsZCwgdW51c2VkTm9kZXNNYXApOwotICAgICAgICAgICAgYWRkU3Ry
aW5nVG9TSEExKHNoYTEsIGNoaWxkSW5mby0+c2hhMSk7CisgICAgICAgICAgICBzaGExLmFkZEJ5
dGVzKGNoaWxkSW5mby0+c2hhMS51dGY4KCkuYnl0ZXMoKSk7CiAgICAgICAgICAgICBjaGlsZCA9
IGNoaWxkLT5uZXh0U2libGluZygpOwogICAgICAgICAgICAgZGlnZXN0LT5jaGlsZHJlbi5hcHBl
bmQoV1RGTW92ZShjaGlsZEluZm8pKTsKICAgICAgICAgfQpAQCAtNDI0LDE5ICs0MTksMTkgQEAg
c3RkOjp1bmlxdWVfcHRyPERPTVBhdGNoU3VwcG9ydDo6RGlnZXN0PgogICAgICAgICBpZiAoZWxl
bWVudC5oYXNBdHRyaWJ1dGVzV2l0aG91dFVwZGF0ZSgpKSB7CiAgICAgICAgICAgICBTSEExIGF0
dHJzU0hBMTsKICAgICAgICAgICAgIGZvciAoYXV0byYgYXR0cmlidXRlIDogZWxlbWVudC5hdHRy
aWJ1dGVzSXRlcmF0b3IoKSkgewotICAgICAgICAgICAgICAgIGFkZFN0cmluZ1RvU0hBMShhdHRy
c1NIQTEsIGF0dHJpYnV0ZS5uYW1lKCkudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgYWRk
U3RyaW5nVG9TSEExKGF0dHJzU0hBMSwgYXR0cmlidXRlLnZhbHVlKCkpOworICAgICAgICAgICAg
ICAgIGF0dHJzU0hBMS5hZGRCeXRlcyhhdHRyaWJ1dGUubmFtZSgpLnRvU3RyaW5nKCkudXRmOCgp
LmJ5dGVzKCkpOworICAgICAgICAgICAgICAgIGF0dHJzU0hBMS5hZGRCeXRlcyhhdHRyaWJ1dGUu
dmFsdWUoKS5zdHJpbmcoKS51dGY4KCkuYnl0ZXMoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBTSEExOjpEaWdlc3QgYXR0cnNIYXNoOwogICAgICAgICAgICAgYXR0cnNTSEExLmNvbXB1
dGVIYXNoKGF0dHJzSGFzaCk7Ci0gICAgICAgICAgICBkaWdlc3QtPmF0dHJzU0hBMSA9IGJhc2U2
NEVuY29kZVRvU3RyaW5nKGF0dHJzSGFzaC5kYXRhKCksIDEwKTsKLSAgICAgICAgICAgIGFkZFN0
cmluZ1RvU0hBMShzaGExLCBkaWdlc3QtPmF0dHJzU0hBMSk7CisgICAgICAgICAgICBkaWdlc3Qt
PmF0dHJzU0hBMSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGF0dHJzSGFzaCk7CisgICAgICAgICAg
ICBzaGExLmFkZEJ5dGVzKGRpZ2VzdC0+YXR0cnNTSEExLnV0ZjgoKS5ieXRlcygpKTsKICAgICAg
ICAgfQogICAgIH0KIAogICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwogICAgIHNoYTEuY29tcHV0ZUhh
c2goaGFzaCk7Ci0gICAgZGlnZXN0LT5zaGExID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaGFzaC5k
YXRhKCksIDEwKTsKKyAgICBkaWdlc3QtPnNoYTEgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhoYXNo
KTsKICAgICBpZiAodW51c2VkTm9kZXNNYXApCiAgICAgICAgIHVudXNlZE5vZGVzTWFwLT5hZGQo
ZGlnZXN0LT5zaGExLCBkaWdlc3QuZ2V0KCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYwMiw3ICs2MDIsNyBAQCBib29sIEluc3BlY3RvckZyb250ZW5k
SG9zdDo6c2hvd0NlcnRpZmljCiAgICAgaWYgKCFkYXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YS0+ZGF0YSgpLCBk
YXRhLT5zaXplKCkpOworICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlciB7ICpk
YXRhIH07CiAgICAgc3RkOjpvcHRpb25hbDxDZXJ0aWZpY2F0ZUluZm8+IGNlcnRpZmljYXRlSW5m
bzsKICAgICBkZWNvZGVyID4+IGNlcnRpZmljYXRlSW5mbzsKICAgICBpZiAoIWNlcnRpZmljYXRl
SW5mbykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0
YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNv
dXJjZXNEYXRhLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEw
Niw3IEBAIHVuc2lnbmVkIE5ldHdvcmtSZXNvdXJjZXNEYXRhOjpSZXNvdXJjZUQKICAgICAgICAg
bV9jb250ZW50ID0gbV9kZWNvZGVyLT5kZWNvZGVBbmRGbHVzaChtX2RhdGFCdWZmZXItPmRhdGEo
KSwgZGF0YUxlbmd0aCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9iYXNlNjRFbmNvZGVkID0g
dHJ1ZTsKLSAgICAgICAgbV9jb250ZW50ID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcobV9kYXRhQnVm
ZmVyLT5kYXRhKCksIGRhdGFMZW5ndGgpOworICAgICAgICBtX2NvbnRlbnQgPSBiYXNlNjRFbmNv
ZGVUb1N0cmluZyhtX2RhdGFCdWZmZXItPmJ5dGVzKCkpOwogICAgIH0KIAogICAgIG1fZGF0YUJ1
ZmZlciA9IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckRPTUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2OTgsNyArMTY5OCw3IEBAIHN0YXRpYyBTdHJpbmcgY29tcHV0ZUNvbnRl
bnRTZWN1cml0eVBvbGkKICAgICBhdXRvIGNyeXB0b0RpZ2VzdCA9IFBBTDo6Q3J5cHRvRGlnZXN0
OjpjcmVhdGUoUEFMOjpDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzI1Nik7CiAgICAgY3J5
cHRvRGlnZXN0LT5hZGRCeXRlcyhjb250ZW50LmRhdGEoKSwgY29udGVudC5zaXplKCkpOwogICAg
IGF1dG8gZGlnZXN0ID0gY3J5cHRvRGlnZXN0LT5jb21wdXRlSGFzaCgpOwotICAgIHJldHVybiBt
YWtlU3RyaW5nKCJzaGEyNTYtIiwgYmFzZTY0RW5jb2RlZChkaWdlc3QuZGF0YSgpLCBkaWdlc3Qu
c2l6ZSgpKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoInNoYTI1Ni0iLCBiYXNlNjRFbmNvZGVk
KGRpZ2VzdCkpOwogfQogCiBSZWY8UHJvdG9jb2w6OkRPTTo6Tm9kZT4gSW5zcGVjdG9yRE9NQWdl
bnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZShOb2RlKiBub2RlLCBpbnQgZGVwdGgpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3
b3JrQWdlbnQuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3
NSw3ICsxNzUsNyBAQCBSZWY8UHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldEZyYW1lPiBiCiAg
ICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRGcmFtZTo6Y3JlYXRlKCkKICAg
ICAgICAgLnNldE9wY29kZShmcmFtZS5vcENvZGUpCiAgICAgICAgIC5zZXRNYXNrKGZyYW1lLm1h
c2tlZCkKLSAgICAgICAgLnNldFBheWxvYWREYXRhKGZyYW1lLm9wQ29kZSA9PSAxID8gU3RyaW5n
Ojpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhmcmFtZS5wYXlsb2FkLCBmcmFtZS5wYXlsb2Fk
TGVuZ3RoKSA6IGJhc2U2NEVuY29kZVRvU3RyaW5nKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxv
YWRMZW5ndGgpKQorICAgICAgICAuc2V0UGF5bG9hZERhdGEoZnJhbWUub3BDb2RlID09IDEgPyBT
dHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBh
eWxvYWRMZW5ndGgpIDogYmFzZTY0RW5jb2RlVG9TdHJpbmcoU3BhbiB7IGZyYW1lLnBheWxvYWQs
IGZyYW1lLnBheWxvYWRMZW5ndGggfSkpCiAgICAgICAgIC5zZXRQYXlsb2FkTGVuZ3RoKGZyYW1l
LnBheWxvYWRMZW5ndGgpCiAgICAgICAgIC5yZWxlYXNlKCk7CiB9CkBAIC01ODksNyArNTg5LDcg
QEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRpZFJlY2VpdmVEYQogICAgICAgICAvLyBP
ZnRlbiB0aGUgZGF0YSBpcyB0ZXh0IGFuZCB3ZSB3b3VsZCBoYXZlIGEgZGVjb2RlciwgYnV0IGZv
ciBub24tdGV4dCB3ZSB3b24ndCBoYXZlIGEgZGVjb2Rlci4KICAgICAgICAgLy8gU3luYyBYSFJz
IG1heSBub3QgaGF2ZSBhIGNhY2hlZCByZXNvdXJjZSwgd2hpbGUgbm9uLXN5bmMgWEhScyB1c3Vh
bGx5IHRyYW5zZmVyIGRhdGEgb3ZlciBvbiBjb21wbGV0aW9uLgogICAgICAgICBpZiAobV9sb2Fk
aW5nWEhSU3luY2hyb25vdXNseSAmJiByZXNvdXJjZURhdGEgJiYgIXJlc291cmNlRGF0YS0+aGFz
QnVmZmVyZWREYXRhKCkgJiYgIXJlc291cmNlRGF0YS0+Y2FjaGVkUmVzb3VyY2UoKSkKLSAgICAg
ICAgICAgIG1fcmVzb3VyY2VzRGF0YS0+c2V0UmVzb3VyY2VDb250ZW50KHJlcXVlc3RJZCwgYmFz
ZTY0RW5jb2RlVG9TdHJpbmcoZGF0YSwgZGF0YUxlbmd0aCksIHRydWUpOworICAgICAgICAgICAg
bV9yZXNvdXJjZXNEYXRhLT5zZXRSZXNvdXJjZUNvbnRlbnQocmVxdWVzdElkLCBiYXNlNjRFbmNv
ZGVUb1N0cmluZyhTcGFuIHsgZGF0YSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRhdGFMZW5ndGgp
IH0pLCB0cnVlKTsKICAgICB9CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZGF0YVJlY2Vp
dmVkKHJlcXVlc3RJZCwgdGltZXN0YW1wKCksIGRhdGFMZW5ndGgsIGVuY29kZWREYXRhTGVuZ3Ro
KTsKQEAgLTEwMDUsNyArMTAwNSw3IEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4g
SW5zcGVjdG8KIAogICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2RlcjsKICAgICBX
VEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUo
ZW5jb2RlciwgY2VydGlmaWNhdGUudmFsdWUoKSk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRv
U3RyaW5nKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICByZXR1
cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoZW5jb2Rlci5idWZmZXIoKSk7CiB9CiAKIFdlYlNvY2tl
dCogSW5zcGVjdG9yTmV0d29ya0FnZW50Ojp3ZWJTb2NrZXRGb3JSZXF1ZXN0SWQoY29uc3QgUHJv
dG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYgcmVxdWVzdElkKQpAQCAtMTQxMCw3ICsxNDEwLDcg
QEAgYm9vbCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmNhY2hlZFJlc291cgogICAgICAgICB9CiAK
ICAgICAgICAgKmJhc2U2NEVuY29kZWQgPSB0cnVlOwotICAgICAgICAqcmVzdWx0ID0gYmFzZTY0
RW5jb2RlVG9TdHJpbmcoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKTsKKyAgICAgICAg
KnJlc3VsdCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGJ1ZmZlci0+Ynl0ZXMoKSk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQAogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL1JlZ3VsYXJFeHByZXNzaW9uLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+
CiAjaW5jbHVkZSA8d3RmL1N0b3B3YXRjaC5oPgorI2luY2x1ZGUgPHd0Zi9jZi9TcGFuQ0YuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdC
dWlsZGVyLmg+CiAKQEAgLTExMyw3ICsxMTQsNyBAQCBib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6
c2hhcmVkQnVmZmVyQ29uCiBib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGF0YUNvbnRlbnQoY29u
c3QgdWludDhfdCogZGF0YSwgdW5zaWduZWQgc2l6ZSwgY29uc3QgU3RyaW5nJiB0ZXh0RW5jb2Rp
bmdOYW1lLCBib29sIHdpdGhCYXNlNjRFbmNvZGUsIFN0cmluZyogcmVzdWx0KQogewogICAgIGlm
ICh3aXRoQmFzZTY0RW5jb2RlKSB7Ci0gICAgICAgICpyZXN1bHQgPSBiYXNlNjRFbmNvZGVUb1N0
cmluZyhkYXRhLCBzaXplKTsKKyAgICAgICAgKnJlc3VsdCA9IGJhc2U2NEVuY29kZVRvU3RyaW5n
KFNwYW4geyBkYXRhLCBzaXplIH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAg
LTExMDIsNyArMTEwMyw3IEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVj
dG8KICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgY3JlYXRlIHdlYiBh
cmNoaXZlIGZvciBtYWluIGZyYW1lIl9zKTsKIAogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGJ1
ZmZlciA9IGFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigpOwotICAgIHJldHVybiBiYXNl
NjRFbmNvZGVUb1N0cmluZyhDRkRhdGFHZXRCeXRlUHRyKGJ1ZmZlci5nZXQoKSksIENGRGF0YUdl
dExlbmd0aChidWZmZXIuZ2V0KCkpKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmco
YXNCeXRlcyhidWZmZXIuZ2V0KCkpKTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1M
QXJjaGl2ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MSwxNiArMTgxLDE0IEBAIFJlZjxTaGFy
ZWRCdWZmZXI+IE1IVE1MQXJjaGl2ZTo6Z2VuZXJhdGUKICAgICAgICAgbWh0bWxEYXRhLT5hcHBl
bmQoYXNjaWlTdHJpbmcuZGF0YSgpLCBhc2NpaVN0cmluZy5sZW5ndGgoKSk7CiAKICAgICAgICAg
Ly8gRklYTUU6IGlkZWFsbHkgd2Ugd291bGQgZW5jb2RlIHRoZSBjb250ZW50IGFzIGEgc3RyZWFt
IHdpdGhvdXQgaGF2aW5nIHRvIGZldGNoIGl0IGFsbC4KLSAgICAgICAgYXV0byogZGF0YSA9IHJl
c291cmNlLmRhdGEtPmRhdGEoKTsKLSAgICAgICAgc2l6ZV90IGRhdGFMZW5ndGggPSByZXNvdXJj
ZS5kYXRhLT5zaXplKCk7CiAgICAgICAgIGlmICghc3RyY21wKGNvbnRlbnRFbmNvZGluZywgcXVv
dGVkUHJpbnRhYmxlKSkgewotICAgICAgICAgICAgYXV0byBlbmNvZGVkRGF0YSA9IHF1b3RlZFBy
aW50YWJsZUVuY29kZShkYXRhLCBkYXRhTGVuZ3RoKTsKKyAgICAgICAgICAgIGF1dG8gZW5jb2Rl
ZERhdGEgPSBxdW90ZWRQcmludGFibGVFbmNvZGUocmVzb3VyY2UuZGF0YS0+Ynl0ZXMoKSk7CiAg
ICAgICAgICAgICBtaHRtbERhdGEtPmFwcGVuZChlbmNvZGVkRGF0YS5kYXRhKCksIGVuY29kZWRE
YXRhLnNpemUoKSk7CiAgICAgICAgICAgICBtaHRtbERhdGEtPmFwcGVuZCgiXHJcbiIsIDIpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKCFzdHJjbXAoY29udGVudEVuY29k
aW5nLCBiYXNlNjQpKTsKICAgICAgICAgICAgIC8vIFdlIGFyZSBub3Qgc3BlY2lmeWluZyBpbnNl
cnRMRnMgPSB0cnVlIGJlbG93IGFzIGl0IHdvdWxkIGN1dCB0aGUgbGluZXMgd2l0aCBMRnMgYW5k
IE1IVE1MIHJlcXVpcmVzIENSTEZzLgotICAgICAgICAgICAgYXV0byBlbmNvZGVkRGF0YSA9IGJh
c2U2NEVuY29kZVRvVmVjdG9yKGRhdGEsIGRhdGFMZW5ndGgpOworICAgICAgICAgICAgYXV0byBl
bmNvZGVkRGF0YSA9IGJhc2U2NEVuY29kZVRvVmVjdG9yKHJlc291cmNlLmRhdGEtPmJ5dGVzKCkp
OwogICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG1heGltdW1MaW5lTGVuZ3RoID0gNzY7CiAgICAg
ICAgICAgICBzaXplX3QgaW5kZXggPSAwOwogICAgICAgICAgICAgc2l6ZV90IGVuY29kZWREYXRh
TGVuZ3RoID0gZW5jb2RlZERhdGEuc2l6ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVy
L2FyY2hpdmUvbWh0bWwvTUhUTUxQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MUGFyc2VyLmNwcAkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxQYXJzZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTUsNyArMTk1LDcgQEAgUmVmUHRyPEFyY2hpdmVSZXNvdXJj
ZT4gTUhUTUxQYXJzZXI6OnBhcgogICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAgIHN3aXRj
aCAobWltZUhlYWRlci5jb250ZW50VHJhbnNmZXJFbmNvZGluZygpKSB7CiAgICAgY2FzZSBNSU1F
SGVhZGVyOjpCYXNlNjQ6IHsKLSAgICAgICAgYXV0byBkZWNvZGVkRGF0YSA9IGJhc2U2NERlY29k
ZShjb250ZW50LT5kYXRhKCksIGNvbnRlbnQtPnNpemUoKSk7CisgICAgICAgIGF1dG8gZGVjb2Rl
ZERhdGEgPSBiYXNlNjREZWNvZGUoY29udGVudC0+Ynl0ZXMoKSk7CiAgICAgICAgIGlmICghZGVj
b2RlZERhdGEpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiSW52YWxpZCBiYXNlNjQgY29udGVu
dCBmb3IgTUhUTUwgcGFydC4iKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMjA0
LDcgKzIwNCw3IEBAIFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IE1IVE1MUGFyc2VyOjpwYXIKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgTUlNRUhlYWRlcjo6UXVvdGVkUHJpbnRhYmxl
OgotICAgICAgICBkYXRhID0gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnRlbnQtPmRhdGEoKSwg
Y29udGVudC0+c2l6ZSgpKTsKKyAgICAgICAgZGF0YSA9IHF1b3RlZFByaW50YWJsZURlY29kZShj
b250ZW50LT5ieXRlcygpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNSU1FSGVhZGVyOjpT
ZXZlbkJpdDoKICAgICBjYXNlIE1JTUVIZWFkZXI6OkJpbmFyeToKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9pY29uL0ljb25Mb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9pY29uL0ljb25Mb2FkZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTE1LDcgKzExNSw3IEBAIHZvaWQgSWNvbkxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmUK
ICAgICAgICAgZGF0YSA9IG51bGxwdHI7CiAKICAgICBjb25zdGV4cHIgdWludDhfdCBwZGZNYWdp
Y051bWJlcltdID0geyAnJScsICdQJywgJ0QnLCAnRicgfTsKLSAgICBpZiAoZGF0YSAmJiBkYXRh
LT5zdGFydHNXaXRoKFNwYW4geyBwZGZNYWdpY051bWJlciwgc3RkOjpzaXplKHBkZk1hZ2ljTnVt
YmVyKSB9KSkgeworICAgIGlmIChkYXRhICYmIGRhdGEtPnN0YXJ0c1dpdGgocGRmTWFnaWNOdW1i
ZXIpKSB7CiAgICAgICAgIExPRyhJY29uRGF0YWJhc2UsICJJY29uTG9hZGVyOjpmaW5pc2hMb2Fk
aW5nKCkgLSBJZ25vcmluZyBpY29uIGF0ICVzIGJlY2F1c2UgaXQgYXBwZWFycyB0byBiZSBhIFBE
RiIsIG1fcmVzb3VyY2UtPnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKICAgICAgICAg
ZGF0YSA9IG51bGxwdHI7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9CYXNlNjRV
dGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQmFzZTY0VXRp
bGl0aWVzLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9CYXNl
NjRVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIEV4Y2VwdGlv
bk9yPFN0cmluZz4gQmFzZTY0VXRpbGl0aWVzOjpidG8KICAgICBpZiAoIXN0cmluZ1RvRW5jb2Rl
LmlzQWxsTGF0aW4xKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQ2hhcmFj
dGVyRXJyb3IgfTsKIAotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhzdHJpbmdUb0Vu
Y29kZS5sYXRpbjEoKSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKHN0cmluZ1Rv
RW5jb2RlLmxhdGluMSgpLmJ5dGVzKCkpOwogfQogCiBFeGNlcHRpb25PcjxTdHJpbmc+IEJhc2U2
NFV0aWxpdGllczo6YXRvYihjb25zdCBTdHJpbmcmIGVuY29kZWRTdHJpbmcpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEuY3BwCShyZXZp
c2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9t
RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgUmVmPFNoYXJlZEJ1ZmZl
cj4gUGFzdGVib2FyZEN1c3RvbURhdGE6OgogICAgIGVuY29kZXIgPDwgbV9vcmlnaW47CiAgICAg
ZW5jb2RlciA8PCBzYW1lT3JpZ2luQ3VzdG9tU3RyaW5nRGF0YSgpOwogICAgIGVuY29kZXIgPDwg
b3JkZXJlZFR5cGVzKCk7Ci0gICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIu
YnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICByZXR1cm4gU2hhcmVkQnVmZmVy
OjpjcmVhdGUoZW5jb2Rlci5idWZmZXIoKSk7CiB9CiAKIFBhc3RlYm9hcmRDdXN0b21EYXRhIFBh
c3RlYm9hcmRDdXN0b21EYXRhOjpmcm9tUGVyc2lzdGVuY2VEZWNvZGVyKFdURjo6UGVyc2lzdGVu
Y2U6OkRlY29kZXImJiBkZWNvZGVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hh
cmVkQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFy
ZWRCdWZmZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TaGFyZWRCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwyNCArMzAsMjAgQEAKIAog
I2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CisjaW5jbHVk
ZSA8d3RmL2NmL1NwYW5DRi5oPgogI2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50
Q29kZXJzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUg
PHd0Zi91bmljb2RlL1VURjhDb252ZXJzaW9uLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
U2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNp
emUpCitTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0
YSkKIHsKLSAgICBhcHBlbmQoZGF0YSwgc2l6ZSk7Ci19Ci0KLVNoYXJlZEJ1ZmZlcjo6U2hhcmVk
QnVmZmVyKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKQotewotICAgIGFwcGVuZChyZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgc2l6ZSk7CisgICAgYXBwZW5kKGRh
dGEpOwogfQogCiBTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihGaWxlU3lzdGVtOjpNYXBwZWRG
aWxlRGF0YSYmIGZpbGVEYXRhKQotICAgIDogbV9zaXplKGZpbGVEYXRhLnNpemUoKSkKKyAgICA6
IG1fc2l6ZShmaWxlRGF0YS5kYXRhKCkuc2l6ZSgpKQogewogICAgIG1fc2VnbWVudHMuYXBwZW5k
KHswLCBEYXRhU2VnbWVudDo6Y3JlYXRlKFdURk1vdmUoZmlsZURhdGEpKX0pOwogfQpAQCAtMTg4
LDEzICsxODQsMTMgQEAgdm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVuZChjb25zdCBTaGFyZWRCdQog
ICAgIEFTU0VSVChpbnRlcm5hbGx5Q29uc2lzdGVudCgpKTsKIH0KIAotdm9pZCBTaGFyZWRCdWZm
ZXI6OmFwcGVuZChjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoKQordm9pZCBTaGFy
ZWRCdWZmZXI6OmFwcGVuZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKICAgICBBU1NF
UlQoIW1faGFzQmVlbkNvbWJpbmVkSW50b09uZVNlZ21lbnQpOwogICAgIFZlY3Rvcjx1aW50OF90
PiB2ZWN0b3I7Ci0gICAgdmVjdG9yLmFwcGVuZChkYXRhLCBsZW5ndGgpOwotICAgIG1fc2VnbWVu
dHMuYXBwZW5kKHttX3NpemUsIERhdGFTZWdtZW50OjpjcmVhdGUoV1RGTW92ZSh2ZWN0b3IpKX0p
OwotICAgIG1fc2l6ZSArPSBsZW5ndGg7CisgICAgdmVjdG9yLmFwcGVuZChyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKTsKKyAgICBtX3Nl
Z21lbnRzLmFwcGVuZCh7IG1fc2l6ZSwgRGF0YVNlZ21lbnQ6OmNyZWF0ZShXVEZNb3ZlKHZlY3Rv
cikpIH0pOworICAgIG1fc2l6ZSArPSBkYXRhLnNpemUoKTsKICAgICBBU1NFUlQoaW50ZXJuYWxs
eUNvbnNpc3RlbnQoKSk7CiB9CiAKQEAgLTIzMiw3ICsyMjgsNyBAQCB2b2lkIFNoYXJlZEJ1ZmZl
cjo6Zm9yRWFjaFNlZ21lbnQoY29uc3QgCiAgICAgICAgIGFwcGx5KFNwYW4geyBzZWdtZW50LnNl
Z21lbnQtPmRhdGEoKSwgc2VnbWVudC5zZWdtZW50LT5zaXplKCkgfSk7CiB9CiAKLWJvb2wgU2hh
cmVkQnVmZmVyOjpzdGFydHNXaXRoKGNvbnN0IFNwYW48Y29uc3QgdWludDhfdD4mIHByZWZpeCkg
Y29uc3QKK2Jvb2wgU2hhcmVkQnVmZmVyOjpzdGFydHNXaXRoKGNvbnN0IFNwYW48Y29uc3Qgc3Rk
OjpieXRlPiYgcHJlZml4KSBjb25zdAogewogICAgIGlmIChwcmVmaXguZW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CkBAIC0yNDAsNyArMjM2LDcgQEAgYm9vbCBTaGFyZWRCdWZmZXI6OnN0
YXJ0c1dpdGgoY29uc3QgU3BhbgogICAgIGlmIChzaXplKCkgPCBwcmVmaXguc2l6ZSgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBjb25zdCB1aW50OF90KiBwcmVmaXhQdHIgPSBwcmVm
aXguZGF0YSgpOworICAgIGF1dG8qIHByZWZpeFB0ciA9IHByZWZpeC5kYXRhKCk7CiAgICAgc2l6
ZV90IHJlbWFpbmluZyA9IHByZWZpeC5zaXplKCk7CiAgICAgZm9yIChhdXRvJiBzZWdtZW50IDog
bV9zZWdtZW50cykgewogICAgICAgICBzaXplX3QgYW1vdW50VG9Db21wYXJlVGhpc1RpbWUgPSBz
dGQ6Om1pbihyZW1haW5pbmcsIHNlZ21lbnQuc2VnbWVudC0+c2l6ZSgpKTsKQEAgLTMwMSwxMSAr
Mjk3LDQwIEBAIGNvbnN0IHVpbnQ4X3QqIFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQKICNpZiBV
U0UoR1NUUkVBTUVSKQogICAgICAgICBbXShjb25zdCBSZWZQdHI8R3N0TWFwcGVkT3duZWRCdWZm
ZXI+JiBkYXRhKSB7IHJldHVybiBkYXRhLT5kYXRhKCk7IH0sCiAjZW5kaWYKLSAgICAgICAgW10o
Y29uc3QgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsgcmV0dXJuIHN0YXRpY19j
YXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmRhdGEoKSk7IH0KKyAgICAgICAgW10oY29uc3QgRmls
ZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDhfdCo+KGRhdGEuZGF0YSgpLmRhdGEoKSk7IH0KICAgICApOwogICAgIHJldHVy
biBXVEY6OnZpc2l0KHZpc2l0b3IsIG1faW1tdXRhYmxlRGF0YSk7CiB9CiAKK1NwYW48Y29uc3Qg
c3RkOjpieXRlPiBTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpieXRlcygpIGNvbnN0Cit7Cisg
ICAgYXV0byB2aXNpdG9yID0gV1RGOjptYWtlVmlzaXRvcigKKyAgICAgICAgW10oY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBkYXRhKSB7CisgICAgICAgICAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsg
ZGF0YSB9KTsKKyAgICAgICAgfSwKKyNpZiBVU0UoQ0YpCisgICAgICAgIFtdKGNvbnN0IFJldGFp
blB0cjxDRkRhdGFSZWY+JiBkYXRhKSB7CisgICAgICAgICAgICByZXR1cm4gYXNCeXRlcyhkYXRh
LmdldCgpKTsKKyAgICAgICAgfSwKKyNlbmRpZgorI2lmIFVTRShHTElCKQorICAgICAgICBbXShj
b25zdCBHUmVmUHRyPEdCeXRlcz4mIGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBhc0J5dGVz
KFNwYW4geyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZ19ieXRlc19nZXRfZGF0YShkYXRh
LmdldCgpLCBudWxscHRyKSksIGdfYnl0ZXNfZ2V0X3NpemUoZGF0YS5nZXQoKSkgfSk7CisgICAg
ICAgIH0sCisjZW5kaWYKKyNpZiBVU0UoR1NUUkVBTUVSKQorICAgICAgICBbXShjb25zdCBSZWZQ
dHI8R3N0TWFwcGVkT3duZWRCdWZmZXI+JiBkYXRhKSB7CisgICAgICAgICAgICByZXR1cm4gYXNC
eXRlcyhTcGFuIHsgZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXplKCkgfSk7CisgICAgICAgIH0sCisj
ZW5kaWYKKyAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRhdGEp
IHsKKyAgICAgICAgICAgIHJldHVybiBkYXRhLmRhdGEoKTsKKyAgICAgICAgfQorICAgICk7Cisg
ICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwgbV9pbW11dGFibGVEYXRhKTsKKworfQorCiBi
b29sIFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmNvbnRhaW5zTWFwcGVkRmlsZURhdGEoKSBj
b25zdAogewogICAgIHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEZpbGVTeXN0ZW06Ok1h
cHBlZEZpbGVEYXRhPihtX2ltbXV0YWJsZURhdGEpOwpAQCAtMzE5LDcgKzM0NCw3IEBAIHZvaWQg
U2hhcmVkQnVmZmVyOjpoaW50TWVtb3J5Tm90TmVlZGVkU28KIAogV1RGOjpQZXJzaXN0ZW5jZTo6
RGVjb2RlciBTaGFyZWRCdWZmZXI6OmRlY29kZXIoKSBjb25zdAogewotICAgIHJldHVybiB7IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEoKSksIHNpemUoKSB9OworICAgIHJl
dHVybiB7IGJ5dGVzKCkgfTsKIH0KIAogYm9vbCBTaGFyZWRCdWZmZXI6Om9wZXJhdG9yPT0oY29u
c3QgU2hhcmVkQnVmZmVyJiBvdGhlcikgY29uc3QKQEAgLTM4NCw3ICs0MDksNyBAQCBzaXplX3Qg
U2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVudDo6c2l6ZSgpCiAjaWYgVVNFKEdTVFJFQU1FUikKICAg
ICAgICAgW10oY29uc3QgUmVmUHRyPEdzdE1hcHBlZE93bmVkQnVmZmVyPiYgZGF0YSkgeyByZXR1
cm4gZGF0YS0+c2l6ZSgpOyB9LAogI2VuZGlmCi0gICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06
Ok1hcHBlZEZpbGVEYXRhJiBkYXRhKSB7IHJldHVybiBkYXRhLnNpemUoKTsgfQorICAgICAgICBb
XShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeyByZXR1cm4gZGF0YS5k
YXRhKCkuc2l6ZSgpOyB9CiAgICAgKTsKICAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBt
X2ltbXV0YWJsZURhdGEpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVk
QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVm
ZmVyLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJl
ZEJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw4ICs2NywxMiBAQCBjbGFzcyBTaGFyZWRC
dWZmZXJEYXRhVmlldzsKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIFNoYXJlZEJ1ZmZlciA6IHB1Ymxp
YyBSZWZDb3VudGVkPFNoYXJlZEJ1ZmZlcj4gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8U2hh
cmVkQnVmZmVyPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcik7
IH0KLSAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGRh
dGEsIHNpemVfdCBzaXplKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihkYXRh
LCBzaXplKSk7IH0KLSAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IGNo
YXIqIGRhdGEsIHNpemVfdCBzaXplKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZl
cihkYXRhLCBzaXplKSk7IH0KKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKFNw
YW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1
ZmZlcihkYXRhKSk7IH0KKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKFNwYW48
Y29uc3QgdWludDhfdD4gZGF0YSkgeyByZXR1cm4gY3JlYXRlKGFzQnl0ZXMoZGF0YSkpOyB9Cisg
ICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShTcGFuPGNvbnN0IGNoYXI+IGRhdGEp
IHsgcmV0dXJuIGNyZWF0ZShhc0J5dGVzKGRhdGEpKTsgfQorICAgIHN0YXRpYyBSZWY8U2hhcmVk
QnVmZmVyPiBjcmVhdGUoY29uc3Qgc3RkOjpieXRlKiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1
cm4gY3JlYXRlKFNwYW4geyBkYXRhLCBzaXplIH0pOyB9CisgICAgc3RhdGljIFJlZjxTaGFyZWRC
dWZmZXI+IGNyZWF0ZShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4g
Y3JlYXRlKFNwYW4geyBkYXRhLCBzaXplIH0pOyB9CisgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZm
ZXI+IGNyZWF0ZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gY3JlYXRl
KFNwYW4geyBkYXRhLCBzaXplIH0pOyB9CiAgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNy
ZWF0ZShGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIG1hcHBlZEZpbGVEYXRhKSB7IHJldHVy
biBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihXVEZNb3ZlKG1hcHBlZEZpbGVEYXRhKSkpOyB9
CiAKICAgICBlbnVtIGNsYXNzIE1heVVzZUZpbGVNYXBwaW5nIDogYm9vbCB7IE5vLCBZZXMgfTsK
QEAgLTEwMSw2ICsxMDUsOCBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IEF1ZGl0IHRoZSBjYWxs
IHNpdGVzIG9mIHRoaXMgZnVuY3Rpb24gYW5kIHJlcGxhY2UgdGhlbSB3aXRoIGl0ZXJhdGlvbiBp
ZiBwb3NzaWJsZS4KICAgICBjb25zdCB1aW50OF90KiBkYXRhKCkgY29uc3Q7CiAgICAgY29uc3Qg
Y2hhciogZGF0YUFzQ2hhclB0cigpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgY2hhcio+KGRhdGEoKSk7IH0KKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBj
b25zdCB7IHJldHVybiBhc0J5dGVzKFNwYW4geyBkYXRhKCksIHNpemUoKSB9KTsgfQorCiAgICAg
VmVjdG9yPHVpbnQ4X3Q+IGNvcHlEYXRhKCkgeyByZXR1cm4geyBkYXRhKCksIHNpemUoKSB9OyB9
CiAKICAgICAvLyBDb21iaW5lcyBhbGwgdGhlIHNlZ21lbnRzIGludG8gYSBWZWN0b3IgYW5kIHJl
dHVybnMgdGhhdCB2ZWN0b3IgYWZ0ZXIgY2xlYXJpbmcgdGhlIFNoYXJlZEJ1ZmZlci4KQEAgLTEx
NSw4ICsxMjEsMTIgQEAgcHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJu
ICFzaXplKCk7IH0KIAogICAgIHZvaWQgYXBwZW5kKGNvbnN0IFNoYXJlZEJ1ZmZlciYpOwotICAg
IHZvaWQgYXBwZW5kKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwotICAgIHZvaWQgYXBwZW5kKGNv
bnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpIHsgYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDhfdCo+KGRhdGEpLCBsZW5ndGgpOyB9CisgICAgdm9pZCBhcHBlbmQoU3Bhbjxj
b25zdCBzdGQ6OmJ5dGU+KTsKKyAgICB2b2lkIGFwcGVuZChTcGFuPGNvbnN0IHVpbnQ4X3Q+IGRh
dGEpIHsgYXBwZW5kKGFzQnl0ZXMoZGF0YSkpOyB9CisgICAgdm9pZCBhcHBlbmQoU3Bhbjxjb25z
dCBjaGFyPiBkYXRhKSB7IGFwcGVuZChhc0J5dGVzKGRhdGEpKTsgfQorICAgIHZvaWQgYXBwZW5k
KGNvbnN0IHN0ZDo6Ynl0ZSogZGF0YSwgc2l6ZV90IGxlbmd0aCkgeyBhcHBlbmQoU3BhbiB7IGRh
dGEsIGxlbmd0aCB9KTsgfQorICAgIHZvaWQgYXBwZW5kKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNp
emVfdCBsZW5ndGgpIHsgYXBwZW5kKFNwYW4geyBkYXRhLCBsZW5ndGggfSk7IH0KKyAgICB2b2lk
IGFwcGVuZChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKSB7IGFwcGVuZChTcGFuIHsg
ZGF0YSwgbGVuZ3RoIH0pOyB9CiAgICAgdm9pZCBhcHBlbmQoVmVjdG9yPHVpbnQ4X3Q+JiYpOwog
CiAgICAgdm9pZCBjbGVhcigpOwpAQCAtMTMxLDYgKzE0MSw4IEBAIHB1YmxpYzoKICAgICAgICAg
V0VCQ09SRV9FWFBPUlQgY29uc3QgdWludDhfdCogZGF0YSgpIGNvbnN0OwogICAgICAgICBXRUJD
T1JFX0VYUE9SVCBzaXplX3Qgc2l6ZSgpIGNvbnN0OwogCisgICAgICAgIFdFQkNPUkVfRVhQT1JU
IFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAgICAgICAgIHN0YXRpYyBS
ZWY8RGF0YVNlZ21lbnQ+IGNyZWF0ZShWZWN0b3I8dWludDhfdD4mJiBkYXRhKQogICAgICAgICB7
CiAgICAgICAgICAgICBkYXRhLnNocmlua1RvRml0KCk7CkBAIC0xODcsNyArMTk5LDkgQEAgcHVi
bGljOgogICAgIH07CiAKICAgICB2b2lkIGZvckVhY2hTZWdtZW50KGNvbnN0IEZ1bmN0aW9uPHZv
aWQoY29uc3QgU3Bhbjxjb25zdCB1aW50OF90PiYpPiYpIGNvbnN0OwotICAgIGJvb2wgc3RhcnRz
V2l0aChjb25zdCBTcGFuPGNvbnN0IHVpbnQ4X3Q+JiBwcmVmaXgpIGNvbnN0OworCisgICAgYm9v
bCBzdGFydHNXaXRoKGNvbnN0IFNwYW48Y29uc3Qgc3RkOjpieXRlPiYgcHJlZml4KSBjb25zdDsK
KyAgICBib29sIHN0YXJ0c1dpdGgoY29uc3QgU3Bhbjxjb25zdCB1aW50OF90PiYgcHJlZml4KSBj
b25zdCB7IHJldHVybiBzdGFydHNXaXRoKGFzQnl0ZXMocHJlZml4KSk7IH0KIAogICAgIHN0cnVj
dCBEYXRhU2VnbWVudFZlY3RvckVudHJ5IHsKICAgICAgICAgc2l6ZV90IGJlZ2luUG9zaXRpb247
CkBAIC0yMTIsOCArMjI2LDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFNo
YXJlZEJ1ZmZlcigpID0gZGVmYXVsdDsKLSAgICBleHBsaWNpdCBTaGFyZWRCdWZmZXIoY29uc3Qg
dWludDhfdCosIHNpemVfdCk7Ci0gICAgZXhwbGljaXQgU2hhcmVkQnVmZmVyKGNvbnN0IGNoYXIq
LCBzaXplX3QpOworICAgIGV4cGxpY2l0IFNoYXJlZEJ1ZmZlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0
ZT4pOwogICAgIGV4cGxpY2l0IFNoYXJlZEJ1ZmZlcihWZWN0b3I8dWludDhfdD4mJik7CiAgICAg
ZXhwbGljaXQgU2hhcmVkQnVmZmVyKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYpOwogI2lm
IFVTRShDRikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0NBQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL2NvY29hL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVk
ZSAiQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgPENvcmVBdWRpby9Db3JlQXVk
aW9UeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtODAsMTMgKzgxLDEzIEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgog
dm9pZCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAogewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KCZtX3N0cmVhbURlc2NyaXB0aW9uKSwgc2l6ZW9mKG1fc3RyZWFt
RGVzY3JpcHRpb24pLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFu
IHsgJm1fc3RyZWFtRGVzY3JpcHRpb24sIDEgfSwgMSk7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+CiBib29sIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIsIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7Ci0gICAgcmV0
dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KCZkZXNjcmlwdGlvbi5tX3N0cmVhbURlc2NyaXB0aW9uKSwgc2l6ZW9mKGRlc2NyaXB0aW9u
Lm1fc3RyZWFtRGVzY3JpcHRpb24pLCAxKTsKKyAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhl
ZExlbmd0aERhdGEoU3BhbiB7ICZkZXNjcmlwdGlvbi5tX3N0cmVhbURlc2NyaXB0aW9uLCAxIH0s
IDEpOwogfQogCiBpbmxpbmUgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uIHRvQ0FBdWRpb1N0cmVh
bURlc2NyaXB0aW9uKGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RN
Q2xlYXJLZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5
cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJL
ZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgsMTUgKzE5OCwxMyBAQCBzdGF0aWMgUmVmPFNo
YXJlZEJ1ZmZlcj4gZXh0cmFjdEtleWlkc0ZyCiB7CiAgICAgUmVmPFNoYXJlZEJ1ZmZlcj4ga2V5
SWRzID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoKTsKIAotICAgIHN0ZDo6cGFpcjx1bnNpZ25lZCwg
dW5zaWduZWQ+IGtleUlkc01hcCA9IGV4dHJhY3RLZXlpZHNMb2NhdGlvbkZyb21DZW5jSW5pdERh
dGEoaW5pdERhdGEpOwotICAgIHVuc2lnbmVkIGtleUlkQ291bnQgPSBrZXlJZHNNYXAuZmlyc3Q7
Ci0gICAgdW5zaWduZWQgaW5kZXggPSBrZXlJZHNNYXAuc2Vjb25kOworICAgIGF1dG8gW2tleUlk
Q291bnQsIGluZGV4XSA9IGV4dHJhY3RLZXlpZHNMb2NhdGlvbkZyb21DZW5jSW5pdERhdGEoaW5p
dERhdGEpOwogCiAgICAgLy8gQ2hlY2sgaWYgaW5pdERhdGEgaXMgYSB2YWxpZCBDRU5DIGluaXRE
YXRhLgogICAgIGlmICgha2V5SWRDb3VudCB8fCAhaW5kZXgpCiAgICAgICAgIHJldHVybiBrZXlJ
ZHM7CiAKLSAgICBhdXRvKiBkYXRhID0gaW5pdERhdGEuZGF0YSgpOworICAgIGF1dG8gZGF0YSA9
IGluaXREYXRhLmJ5dGVzKCk7CiAKICAgICBhdXRvIG9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CiAgICAgYXV0byBrZXlJZHNBcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKQEAg
LTIxOCw3ICsyMTYsNyBAQCBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gZXh0cmFjdEtleWlkc0Zy
CiAgICAgLy8gImtpZHMiCiAgICAgLy8gQW4gYXJyYXkgb2Yga2V5IElEcy4gRWFjaCBlbGVtZW50
IG9mIHRoZSBhcnJheSBpcyB0aGUgYmFzZTY0dXJsIGVuY29kaW5nIG9mIHRoZSBvY3RldCBzZXF1
ZW5jZSBjb250YWluaW5nIHRoZSBrZXkgSUQgdmFsdWUuCiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGtleUlkQ291bnQ7IGkrKykgewotICAgICAgICBrZXlJZHNBcnJheS0+cHVzaFN0cmlu
ZyhiYXNlNjRVUkxFbmNvZGVUb1N0cmluZygmZGF0YVtpbmRleF0sIENsZWFyS2V5OjpLZXlJRFNp
emVJbkJ5dGVzKSk7CisgICAgICAgIGtleUlkc0FycmF5LT5wdXNoU3RyaW5nKGJhc2U2NFVSTEVu
Y29kZVRvU3RyaW5nKGRhdGEuc3Vic3BhbihpbmRleCwgQ2xlYXJLZXk6OktleUlEU2l6ZUluQnl0
ZXMpKSk7CiAgICAgICAgIGluZGV4ICs9IENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVzOwogICAg
IH0KIApAQCAtMjQ1LDcgKzI0Myw3IEBAIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBleHRyYWN0
S2V5SWRGcm8KICAgICAvLyBUaGUgZm9ybWF0IGlzIGEgSlNPTiBvYmplY3QgY29udGFpbmluZyB0
aGUgZm9sbG93aW5nIG1lbWJlcnM6CiAgICAgLy8gImtpZHMiCiAgICAgLy8gQW4gYXJyYXkgb2Yg
a2V5IElEcy4gRWFjaCBlbGVtZW50IG9mIHRoZSBhcnJheSBpcyB0aGUgYmFzZTY0dXJsIGVuY29k
aW5nIG9mIHRoZSBvY3RldCBzZXF1ZW5jZSBjb250YWluaW5nIHRoZSBrZXkgSUQgdmFsdWUuCi0g
ICAga2V5SWRzQXJyYXktPnB1c2hTdHJpbmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoaW5pdERh
dGEuZGF0YSgpLCBpbml0RGF0YS5zaXplKCkpKTsKKyAgICBrZXlJZHNBcnJheS0+cHVzaFN0cmlu
ZyhiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhpbml0RGF0YS5ieXRlcygpKSk7CiAKICAgICBvYmpl
Y3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92ZShrZXlJZHNBcnJheSkpOwogICAgIENTdHJpbmcg
anNvbkRhdGEgPSBvYmplY3QtPnRvSlNPTlN0cmluZygpLnV0ZjgoKTsKQEAgLTU3OCw5ICs1NzYs
OCBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTCiAKICAgICAvLyBD
b25zdHJ1Y3QgdGhlIEtleVN0YXR1c1ZlY3RvciBvYmplY3QsIHJlcHJlc2VudGluZyByZWxlYXNl
ZCBrZXlzLCBhbmQgdGhlIG1lc3NhZ2UgaW4gdGhlCiAgICAgLy8gJ2xpY2Vuc2UgcmVsZWFzZScg
Zm9ybWF0LgotICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3IgPSBtX2tleVN0b3Jl
LmFsbEtleXNBcyhDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6UmVsZWFzZWQpOwotICAg
IFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1lc3NhZ2U7Ci0gICAgeworICAgIGF1dG8ga2V5U3RhdHVz
VmVjdG9yID0gbV9rZXlTdG9yZS5hbGxLZXlzQXMoQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0
dXM6OlJlbGVhc2VkKTsKKyAgICBhdXRvIG1lc3NhZ2UgPSBbJl17CiAgICAgICAgIC8vIENvbnN0
cnVjdCBKU09OIHRoYXQgcmVwcmVzZW50cyB0aGUgJ2xpY2Vuc2UgcmVsZWFzZScgZm9ybWF0LCBj
cmVhdGluZyBhICdraWRzJyBhcnJheQogICAgICAgICAvLyBvZiBiYXNlNjRVUkwtZW5jb2RlZCBr
ZXkgSURzIGZvciBhbGwga2V5cyB0aGF0IHdlcmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2Vzc2lv
bi4KICAgICAgICAgYXV0byByb290T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKQEAg
LTU4OCw3ICs1ODUsNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVT
CiAgICAgICAgICAgICBhdXRvIGFycmF5ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAg
ICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXkgOiBtX2tleVN0b3JlKSB7CiAgICAgICAgICAgICAg
ICAgQVNTRVJUKGtleS0+aWQoKS5zaXplKCkgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpKTsKLSAgICAgICAgICAgICAgICBhcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxF
bmNvZGVUb1N0cmluZyhrZXktPmlkKCkuZGF0YSgpLCBrZXktPmlkKCkuc2l6ZSgpKSk7CisgICAg
ICAgICAgICAgICAgYXJyYXktPnB1c2hTdHJpbmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoa2V5
LT5pZCgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByb290T2JqZWN0LT5zZXRBcnJh
eSgia2lkcyIsIFdURk1vdmUoYXJyYXkpKTsKICAgICAgICAgfQpAQCAtNTk2LDExICs1OTMsMTEg
QEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlUwogICAgICAgICAvLyBD
b3B5IHRoZSBKU09OIGRhdGEgaW50byBhIFNoYXJlZEJ1ZmZlciBvYmplY3QuCiAgICAgICAgIFN0
cmluZyBtZXNzYWdlU3RyaW5nID0gcm9vdE9iamVjdC0+dG9KU09OU3RyaW5nKCk7CiAgICAgICAg
IENTdHJpbmcgbWVzc2FnZUNTdHJpbmcgPSBtZXNzYWdlU3RyaW5nLnV0ZjgoKTsKLSAgICAgICAg
bWVzc2FnZSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKG1lc3NhZ2VDU3RyaW5nLmRhdGEoKSwgbWVz
c2FnZUNTdHJpbmcubGVuZ3RoKCkpOwotICAgIH0KKyAgICAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKG1lc3NhZ2VDU3RyaW5nLmRhdGEoKSwgbWVzc2FnZUNTdHJpbmcubGVuZ3RoKCkp
OworICAgIH0oKTsKIAogICAgIG1fa2V5U3RvcmUucmVtb3ZlQWxsS2V5cygpOwotICAgIGRpc3Bh
dGNoQ2FsbGJhY2soV1RGTW92ZShrZXlTdGF0dXNWZWN0b3IpLCBSZWY8U2hhcmVkQnVmZmVyPigq
bWVzc2FnZSksIFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVkKTsKKyAgICBkaXNwYXRjaENhbGxiYWNr
KFdURk1vdmUoa2V5U3RhdHVzVmVjdG9yKSwgV1RGTW92ZShtZXNzYWdlKSwgU3VjY2Vzc1ZhbHVl
OjpTdWNjZWVkZWQpOwogfQogCiB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpzdG9y
ZVJlY29yZE9mS2V5VXNhZ2UoY29uc3QgU3RyaW5nJikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dlbmVyaWMvS2V5ZWREZWNvZGVyR2VuZXJpYy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9LZXllZERlY29kZXJHZW5lcmljLmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9LZXllZERl
Y29kZXJHZW5lcmljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBzdGF0aWMg
c3RkOjpvcHRpb25hbDxTdHJpbmc+IHJlYWRTdHJpbmcoCiAgICAgICAgIHJldHVybiBlbXB0eVN0
cmluZygpOwogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcihzaXplLnZhbHVlKCkpOwotICAg
IGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLmRhdGEoKSwgc2l6ZS52
YWx1ZSgpKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBi
dWZmZXIgfSkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgYXV0byByZXN1bHQg
PSBTdHJpbmc6OmZyb21VVEY4KGJ1ZmZlci5kYXRhKCksIHNpemUudmFsdWUoKSk7CiAgICAgaWYg
KHJlc3VsdC5pc051bGwoKSkKQEAgLTExNyw3ICsxMTcsNyBAQCBLZXllZERlY29kZXJHZW5lcmlj
OjpLZXllZERlY29kZXJHZW5lcmljCiAgICAgICAgICAgICBpZiAoIW9rKQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcigqc2l6ZSk7Ci0g
ICAgICAgICAgICBvayA9IGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ1ZmZlci5kYXRh
KCksICpzaXplKTsKKyAgICAgICAgICAgIG9rID0gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERh
dGEoU3BhbiB7IGJ1ZmZlciB9KTsKICAgICAgICAgICAgIGlmICghb2spCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCktPmFkZCgqa2V5
LCBXVEZNb3ZlKGJ1ZmZlcikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvTW9kZWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Nb2RlbC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Nb2RlbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+CiB2b2lkIE1vZGVsOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKIHsKICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHNpemVfdD4obV9kYXRhLT5zaXplKCkp
OwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKG1fZGF0YS0+ZGF0YSgpLCBtX2Rh
dGEtPnNpemUoKSwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEobV9kYXRh
LT5ieXRlcygpLCAxKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KQEAgLTc0LDcgKzc0
LDcgQEAgUmVmUHRyPE1vZGVsPiBNb2RlbDo6ZGVjb2RlKERlY29kZXImIGRlYwogCiAgICAgVmVj
dG9yPHVpbnQ4X3Q+IGRhdGE7CiAgICAgZGF0YS5ncm93KCpsZW5ndGgpOwotICAgIGlmICghZGVj
b2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAxKSkK
KyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGRhdGEsIDEpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBNb2RlbDo6Y3JlYXRlKFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKFdURk1vdmUoZGF0YSkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BpeGVsQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtODIsNyArODIsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIFBpeGVsQnVmZmVy
CiAKICAgICBlbmNvZGVyIDw8IG1fZm9ybWF0OwogICAgIGVuY29kZXIgPDwgbV9zaXplOwotICAg
IGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPmJ5
dGVMZW5ndGgoKSwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEobV9kYXRh
LT5ieXRlcygpLCAxKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RkOjpvcHRpb25h
bDxQaXhlbEJ1ZmZlcj4gUGl4ZWxCdWZmZXI6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQpAQCAt
MTEzLDcgKzExMyw3IEBAIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0ZDo6b3B0aW9uYWw8UGkK
ICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIGlm
ICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVzdWx0LT5tX2RhdGEtPmRhdGEoKSwg
cmVzdWx0LT5tX2RhdGEtPmJ5dGVMZW5ndGgoKSwgMSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZUZpeGVkTGVuZ3RoRGF0YShyZXN1bHQtPm1fZGF0YS0+d3JpdGFibGVCeXRlcygpLCAxKSkKICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0
YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQ
bGF5U3RyZWFtaW5nQVZGT2JqQy5tbQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxh
eVN0cmVhbWluZ0FWRk9iakMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAKICNp
bXBvcnQgPHd0Zi9GaWxlU3lzdGVtLmg+CiAjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgogI2lt
cG9ydCA8d3RmL0xvZ2dlckhlbHBlci5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1NwYW5Db2NvYS5o
PgogI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9C
YXNlNjQuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KQEAgLTcxNSw3ICs3MTYs
NyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nCiAgICAgICAgIGlk
ZW50aWZpZXIgPSBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTppbml0RGF0
YS0+Y3JlYXRlTlNEYXRhKCkuZ2V0KCkgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddKTsK
ICNpZiBIQVZFKEZBSVJQTEFZU1RSRUFNSU5HX0NFTkNfSU5JVERBVEEpCiAgICAgZWxzZSBpZiAo
aW5pdERhdGFUeXBlID09IEluaXREYXRhUmVnaXN0cnk6OmNlbmNOYW1lKCkpIHsKLSAgICAgICAg
YXV0byBwc3NoU3RyaW5nID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5pdERhdGEtPmRhdGEoKSwg
aW5pdERhdGEtPnNpemUoKSk7CisgICAgICAgIGF1dG8gcHNzaFN0cmluZyA9IGJhc2U2NEVuY29k
ZVRvU3RyaW5nKGluaXREYXRhLT5ieXRlcygpKTsKICAgICAgICAgaW5pdGlhbGl6YXRpb25EYXRh
ID0gW05TSlNPTlNlcmlhbGl6YXRpb24gZGF0YVdpdGhKU09OT2JqZWN0OkB7IEAicHNzaCI6IChO
U1N0cmluZyopcHNzaFN0cmluZyB9IG9wdGlvbnM6TlNKU09OV3JpdGluZ1ByZXR0eVByaW50ZWQg
ZXJyb3I6bmlsXTsKICAgICB9CiAjZW5kaWYKQEAgLTExOTEsMTIgKzExOTIsMTAgQEAgdm9pZCBD
RE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZwogICAgICAgICB9CiAKICAgICAgICAg
YXV0byByZXF1ZXN0SlNPTiA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKLSAgICAgICAgZm9yIChh
dXRvJiByZXF1ZXN0RGF0YSA6IHJlcXVlc3RzRGF0YSkgeworICAgICAgICBmb3IgKGF1dG8mIFtr
ZXlJRCwgcGF5bG9hZF0gOiByZXF1ZXN0c0RhdGEpIHsKICAgICAgICAgICAgIGF1dG8gZW50cnkg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICAgICAgYXV0byYga2V5SUQgPSByZXF1
ZXN0RGF0YS5maXJzdDsKLSAgICAgICAgICAgIGF1dG8mIHBheWxvYWQgPSByZXF1ZXN0RGF0YS5z
ZWNvbmQ7Ci0gICAgICAgICAgICBlbnRyeS0+c2V0U3RyaW5nKCJrZXlJRCIsIGJhc2U2NEVuY29k
ZVRvU3RyaW5nKGtleUlELT5kYXRhKCksIGtleUlELT5zaXplKCkpKTsKLSAgICAgICAgICAgIGVu
dHJ5LT5zZXRTdHJpbmcoInBheWxvYWQiLCBiYXNlNjRFbmNvZGVUb1N0cmluZyhwYXlsb2FkLmdl
dCgpLmJ5dGVzLCBwYXlsb2FkLmdldCgpLmxlbmd0aCkpOworICAgICAgICAgICAgZW50cnktPnNl
dFN0cmluZygia2V5SUQiLCBiYXNlNjRFbmNvZGVUb1N0cmluZyhrZXlJRC0+Ynl0ZXMoKSkpOwor
ICAgICAgICAgICAgZW50cnktPnNldFN0cmluZygicGF5bG9hZCIsIGJhc2U2NEVuY29kZVRvU3Ry
aW5nKGFzQnl0ZXMocGF5bG9hZC5nZXQoKSkpKTsKICAgICAgICAgICAgIHJlcXVlc3RKU09OLT5w
dXNoT2JqZWN0KFdURk1vdmUoZW50cnkpKTsKICAgICAgICAgfQogICAgICAgICBhdXRvIHJlcXVl
c3RCdWZmZXIgPSB1dGY4QnVmZmVyKHJlcXVlc3RKU09OLT50b0pTT05TdHJpbmcoKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCBzdGF0aWMgU3RyaW5nIGNyZWF0
ZVVuaXF1ZUZvbnROYW1lKCkKICAgICBHVUlEIGZvbnRVdWlkOwogICAgIENvQ3JlYXRlR3VpZCgm
Zm9udFV1aWQpOwogCi0gICAgYXV0byBmb250TmFtZSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZmb250VXVpZCksIHNpemVvZihmb250VXVpZCkpOworICAg
IGF1dG8gZm9udE5hbWUgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgJmZvbnRVdWlkLCAx
IH0pOwogICAgIEFTU0VSVChmb250TmFtZS5sZW5ndGgoKSA8IExGX0ZBQ0VTSVpFKTsKICAgICBy
ZXR1cm4gZm9udE5hbWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNh
aXJvLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIFN0cmluZyBjcmVhdGVVbmlxdWVGb250TmFtZSgpCiAg
ICAgR1VJRCBmb250VXVpZDsKICAgICBDb0NyZWF0ZUd1aWQoJmZvbnRVdWlkKTsKIAotICAgIGF1
dG8gZm9udE5hbWUgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhyZWludGVycHJldF9jYXN0PGNoYXIq
PigmZm9udFV1aWQpLCBzaXplb2YoZm9udFV1aWQpKTsKKyAgICBhdXRvIGZvbnROYW1lID0gYmFz
ZTY0RW5jb2RlVG9TdHJpbmcoU3BhbiB7ICZmb250VXVpZCwgMSB9KTsKICAgICBBU1NFUlQoZm9u
dE5hbWUubGVuZ3RoKCkgPCBMRl9GQUNFU0laRSk7CiAgICAgcmV0dXJuIGZvbnROYW1lOwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRvck1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU1NMS2V5R2VuZXJhdG9y
TWFjLm1tCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
U1NMS2V5R2VuZXJhdG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksNyArMjE5LDcgQEAg
c3RhdGljIFN0cmluZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZwogICAgIGlmIChTZWNBc24x
RW5jb2RlSXRlbShjb2RlciwgJnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZSwgc2lnbmVkUHVi
bGljS2V5QW5kQ2hhbGxlbmdlVGVtcGxhdGUsICZlbmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hh
bGxlbmdlKSAhPSBub0VycikKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJu
IGJhc2U2NEVuY29kZVRvU3RyaW5nKGVuY29kZWRTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2Uu
RGF0YSwgZW5jb2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZS5MZW5ndGgpOworICAgIHJl
dHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgZW5jb2RlZFNpZ25lZFB1YmxpY0tleUFu
ZENoYWxsZW5nZS5EYXRhLCBlbmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlLkxlbmd0
aCB9KTsKIH0KIAogQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2FwYWJp
bGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcy5oCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNl
Q2FwYWJpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCwxNiArMTE0LDE2IEBAIHByaXZh
dGU6CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBDYXBhYmlsaXR5VmFsdWVPclJhbmdl
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKLSAgICBlbmNvZGVyLmVuY29kZUZp
eGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmbV9taW5PclZh
bHVlKSwgc2l6ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZhbHVlVW5pb24pKTsKLSAgICBlbmNv
ZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3Qq
PigmbV9tYXgpLCBzaXplb2YoVmFsdWVVbmlvbiksIGFsaWdub2YoVmFsdWVVbmlvbikpOworICAg
IGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmbV9taW5PclZhbHVlLCAxIH0s
IGFsaWdub2YoVmFsdWVVbmlvbikpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KFNwYW4geyAmbV9tYXgsIDEgfSwgYWxpZ25vZihWYWx1ZVVuaW9uKSk7CiAgICAgZW5jb2RlciA8
PCBtX3R5cGU7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CiBib29sIENhcGFiaWxpdHlW
YWx1ZU9yUmFuZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBDYXBhYmlsaXR5VmFsdWVPclJh
bmdlJiB2YWx1ZU9yUmFuZ2UpCiB7Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5n
dGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2YWx1ZU9yUmFuZ2UubV9taW5PclZh
bHVlKSwgc2l6ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZhbHVlVW5pb24pKQotICAgICAgICAm
JiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3Qq
PigmdmFsdWVPclJhbmdlLm1fbWF4KSwgc2l6ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZhbHVl
VW5pb24pKQorICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsg
JnZhbHVlT3JSYW5nZS5tX21pbk9yVmFsdWUsIDEgfSwgYWxpZ25vZihWYWx1ZVVuaW9uKSkKKyAg
ICAgICAgJiYgZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZ2YWx1ZU9yUmFu
Z2UubV9tYXgsIDEgfSwgYWxpZ25vZihWYWx1ZVVuaW9uKSkKICAgICAgICAgJiYgZGVjb2Rlci5k
ZWNvZGUodmFsdWVPclJhbmdlLm1fdHlwZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFT
b3VyY2VDZW50ZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTM5LDEzICsxMzksMTMgQEAgc3RhdGljIHZvaWQgYWRkU3RyaW5nVG9TSEExKFNI
QTEmIHNoYTEsIAogCiAgICAgaWYgKHN0cmluZy5pczhCaXQoKSAmJiBzdHJpbmcuaXNBbGxBU0NJ
SSgpKSB7CiAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbnVsbEJ5dGUgPSAwOwotICAgICAgICBzaGEx
LmFkZEJ5dGVzKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAgICAg
ICBzaGExLmFkZEJ5dGVzKCZudWxsQnl0ZSwgMSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3Bh
biB7IHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkgfSk7CisgICAgICAgIHNo
YTEuYWRkQnl0ZXMoU3BhbiB7ICZudWxsQnl0ZSwgMSB9KTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIGF1dG8gdXRmOCA9IHN0cmluZy51dGY4KCk7Ci0gICAgc2hhMS5hZGRCeXRlcyh1
dGY4LmRhdGFBc1VJbnQ4UHRyKCksIHV0ZjgubGVuZ3RoKCkgKyAxKTsgLy8gSW5jbHVkZSB0ZXJt
aW5hdGluZyBudWxsIGJ5dGUuCisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgdXRmOC5kYXRhQXNV
SW50OFB0cigpLCB1dGY4Lmxlbmd0aCgpICsgMSB9KTsgLy8gSW5jbHVkZSB0ZXJtaW5hdGluZyBu
dWxsIGJ5dGUuCiB9CiAKIFN0cmluZyBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpoYXNoU3Ry
aW5nV2l0aFNhbHQoY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgU3RyaW5nJiBoYXNoU2FsdCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJh
c2UuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0NyZWRlbnRpYWxCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsOCArOTcsOSBAQCBi
b29sIENyZWRlbnRpYWxCYXNlOjpjb21wYXJlKGNvbnN0IENyZWRlCiAKIFN0cmluZyBDcmVkZW50
aWFsQmFzZTo6c2VyaWFsaXphdGlvbkZvckJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcigpIGNvbnN0
CiB7CisgICAgLy8gRklYTUU6IEFkZCBtYWtlU3RyaW5nIHZhcmlhbnQgdGhhdCBjcmVhdGVzIGEg
dXRmOCBidWZmZXIgZGlyZWN0bHkuCiAgICAgYXV0byBjcmVkZW50aWFsU3RyaW5nRGF0YSA9IG1h
a2VTdHJpbmcobV91c2VyLCAnOicsIG1fcGFzc3dvcmQpLnV0ZjgoKTsKLSAgICByZXR1cm4gbWFr
ZVN0cmluZygiQmFzaWMgIiwgYmFzZTY0RW5jb2RlZChjcmVkZW50aWFsU3RyaW5nRGF0YSkpOwor
ICAgIHJldHVybiBtYWtlU3RyaW5nKCJCYXNpYyAiLCBiYXNlNjRFbmNvZGVkKGNyZWRlbnRpYWxT
dHJpbmdEYXRhLmJ5dGVzKCkpKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHAJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2Yv
Q2VydGlmaWNhdGVJbmZvQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNyArMjEwLDcg
QEAgc3RhdGljIHZvaWQgZW5jb2RlQ0ZEYXRhKEVuY29kZXImIGVuY29kZQogICAgIGNvbnN0IHVp
bnQ4X3QqIGJ5dGVQdHIgPSBDRkRhdGFHZXRCeXRlUHRyKGRhdGEpOwogCiAgICAgZW5jb2RlciA8
PCBsZW5ndGg7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYnl0ZVB0ciwgc3Rh
dGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3Ro
RGF0YShTcGFuIHsgYnl0ZVB0ciwgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpIH0pOwogfQog
CiBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4gZGVjb2RlQ0ZEYXRh
KERlY29kZXImIGRlY29kZXIpCkBAIC0yMjUsNyArMjI1LDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9u
YWw8UmV0YWluUHRyPENGRGF0YVJlZgogICAgIGlmICghcG9pbnRlcikKICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKIAotICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0ZShudWxscHRy
LCBwb2ludGVyLCAqc2l6ZSkpOworICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0ZShudWxs
cHRyLCByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwb2ludGVyKSwgKnNpemUpKTsK
IH0KIAogI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ2VydGlmaWNhdGVJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0NlcnRpZmljYXRlSW5mby5o
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvQ2VydGlmaWNhdGVJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgdGVt
cGxhdGU8PiBzdHJ1Y3QgQ29kZXI8R1JlZlB0cjxHQnl0ZUFycgogICAgIHN0YXRpYyB2b2lkIGVu
Y29kZShFbmNvZGVyICZlbmNvZGVyLCBjb25zdCBHUmVmUHRyPEdCeXRlQXJyYXk+JiBieXRlQXJy
YXkpCiAgICAgewogICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90PihieXRl
QXJyYXktPmxlbik7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGJ5dGVB
cnJheS0+ZGF0YSwgYnl0ZUFycmF5LT5sZW4pOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVk
TGVuZ3RoRGF0YShTcGFuIHsgYnl0ZUFycmF5LT5kYXRhLCBieXRlQXJyYXktPmxlbiB9KTsKICAg
ICB9CiAKICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxHUmVmUHRyPEdCeXRlQXJyYXk+PiBkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKQEAgLTg3LDcgKzg3LDcgQEAgdGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29kZXI8R1JlZlB0cjxHQnl0ZUFycgogCiAgICAgICAgIEdSZWZQdHI8R0J5dGVBcnJheT4gYnl0
ZUFycmF5ID0gYWRvcHRHUmVmKGdfYnl0ZV9hcnJheV9zaXplZF9uZXcoKnNpemUpKTsKICAgICAg
ICAgZ19ieXRlX2FycmF5X3NldF9zaXplKGJ5dGVBcnJheS5nZXQoKSwgKnNpemUpOwotICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ5dGVBcnJheS0+ZGF0YSwgKnNp
emUpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBi
eXRlQXJyYXktPmRhdGEsICpzaXplIH0pKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKICAgICAgICAgcmV0dXJuIGJ5dGVBcnJheTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OmV4ZWN1
dGVDb21tYW5kKCkKICAgICByZXR1cm4gc3RlcCgpID09IFNRTElURV9ET05FOwogfQogCi1pbnQg
U1FMaXRlU3RhdGVtZW50OjpiaW5kQmxvYihpbnQgaW5kZXgsIFNwYW48Y29uc3QgdWludDhfdD4g
YmxvYikKK2ludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgU3Bhbjxjb25z
dCBzdGQ6OmJ5dGU+IGJsb2IpCiB7CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAgQVNTRVJU
KHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkpOwpA
QCAtOTUsNiArOTUsMTEgQEAgaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IoaW50IGluZGV4
LAogICAgIHJldHVybiBzcWxpdGUzX2JpbmRfYmxvYihtX3N0YXRlbWVudCwgaW5kZXgsIGJsb2Iu
ZGF0YSgpLCBibG9iLnNpemUoKSwgU1FMSVRFX1RSQU5TSUVOVCk7CiB9CiAKK2ludCBTUUxpdGVT
dGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgU3Bhbjxjb25zdCB1aW50OF90PiBibG9iKQor
eworICAgIHJldHVybiBiaW5kQmxvYihpbmRleCwgYXNCeXRlcyhibG9iKSk7Cit9CisKIGludCBT
UUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0KQog
ewogICAgIC8vIFN0cmluZzo6Y2hhcmFjdGVycygpIHJldHVybnMgMCBmb3IgdGhlIGVtcHR5IHN0
cmluZywgd2hpY2ggU1FMaXRlCkBAIC0xMDcsNyArMTEyLDcgQEAgaW50IFNRTGl0ZVN0YXRlbWVu
dDo6YmluZEJsb2IoaW50IGluZGV4LAogICAgIGVsc2UKICAgICAgICAgY2hhcmFjdGVycyA9IHVw
Y29udmVydGVkQ2hhcmFjdGVyczsKIAotICAgIHJldHVybiBiaW5kQmxvYihpbmRleCwgU3BhbiB7
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGNoYXJhY3RlcnMpLCB0ZXh0Lmxlbmd0
aCgpICogc2l6ZW9mKFVDaGFyKSB9KTsKKyAgICByZXR1cm4gYmluZEJsb2IoaW5kZXgsIFNwYW4g
eyByZWludGVycHJldF9jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGNoYXJhY3RlcnMpLCB0ZXh0Lmxl
bmd0aCgpICogc2l6ZW9mKFVDaGFyKSB9KTsKIH0KIAogaW50IFNRTGl0ZVN0YXRlbWVudDo6Ymlu
ZFRleHQoaW50IGluZGV4LCBTdHJpbmdWaWV3IHRleHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM5LDYgKzM5LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIH5TUUxpdGVT
dGF0ZW1lbnQoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBTUUxpdGVTdGF0ZW1lbnQoU1FMaXRlU3Rh
dGVtZW50JiYpOwogICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIGludCBiaW5kQmxvYihpbnQgaW5k
ZXgsIFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJpbmRC
bG9iKGludCBpbmRleCwgU3Bhbjxjb25zdCB1aW50OF90Pik7CiAgICAgV0VCQ09SRV9FWFBPUlQg
aW50IGJpbmRCbG9iKGludCBpbmRleCwgY29uc3QgU3RyaW5nJik7CiAgICAgV0VCQ09SRV9FWFBP
UlQgaW50IGJpbmRUZXh0KGludCBpbmRleCwgU3RyaW5nVmlldyk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuY3BwCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDEyICs1NSw3IEBAIHN0YXRpYyBzaXplX3QgbGVuZ3Ro
T2ZMaW5lRW5kaW5nQXRJbmRleCgKICAgICByZXR1cm4gMDsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+
IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQotewot
ICAgIHJldHVybiBxdW90ZWRQcmludGFibGVFbmNvZGUoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXpl
KCkpOwotfQotCi1WZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IHVp
bnQ4X3QqIGlucHV0LCBzaXplX3QgaW5wdXRMZW5ndGgpCitzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+
IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGlucHV0
TGVuZ3RoKQogewogICAgIFZlY3Rvcjx1aW50OF90PiBvdXQ7CiAgICAgb3V0LnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoaW5wdXRMZW5ndGgpOwpAQCAtMTE2LDEyICsxMTEsMTIgQEAgVmVjdG9yPHVp
bnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjbwogICAgIHJldHVybiBvdXQ7CiB9CiAKLVZl
Y3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiBpbnB1dCkKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNvZGUoU3Bhbjxjb25z
dCBzdGQ6OmJ5dGU+IGlucHV0KQogewotICAgIHJldHVybiBxdW90ZWRQcmludGFibGVEZWNvZGUo
aW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkpOworICAgIHJldHVybiBxdW90ZWRQcmludGFibGVF
bmNvZGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0YSgpKSwgaW5w
dXQuc2l6ZSgpKTsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShj
b25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCkKK3N0YXRpYyBWZWN0b3I8dWlu
dDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBk
YXRhTGVuZ3RoKQogewogICAgIFZlY3Rvcjx1aW50OF90PiBvdXQ7CiAgICAgaWYgKCFkYXRhTGVu
Z3RoKQpAQCAtMTU2LDQgKzE1MSw5IEBAIFZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVE
ZWNvZGUoY28KICAgICByZXR1cm4gb3V0OwogfQogCitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJp
bnRhYmxlRGVjb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCkKK3sKKyAgICByZXR1cm4g
cXVvdGVkUHJpbnRhYmxlRGVjb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlu
cHV0LmRhdGEoKSksIGlucHV0LnNpemUoKSk7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvUXVvdGVkUHJpbnRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuaAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsMTMgKzMxLDExIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1WZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYpOwotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCB1
aW50OF90Kiwgc2l6ZV90KTsKLQotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29k
ZShjb25zdCBWZWN0b3I8dWludDhfdD4mKTsKLVZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFi
bGVEZWNvZGUoY29uc3QgdWludDhfdCosIHNpemVfdCk7CitWZWN0b3I8dWludDhfdD4gcXVvdGVk
UHJpbnRhYmxlRW5jb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CitWZWN0b3I8dWludDhfdD4g
cXVvdGVkUHJpbnRhYmxlRGVjb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJv
YXJkV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFz
dGVib2FyZFdpbi5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDcgKzI1MSw3
IEBAIHN0ZDo6b3B0aW9uYWw8UGFzdGVib2FyZEN1c3RvbURhdGE+IFBhc3QKICAgICAgICAgaWYg
KEhBTkRMRSBjYkRhdGEgPSA6OkdldENsaXBib2FyZERhdGEoQ3VzdG9tRGF0YUNsaXBib2FyZEZv
cm1hdCkpIHsKICAgICAgICAgICAgIHNpemVfdCBzaXplID0gR2xvYmFsU2l6ZShjYkRhdGEpOwog
ICAgICAgICAgICAgYXV0byBkYXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KEdsb2JhbExvY2so
Y2JEYXRhKSk7Ci0gICAgICAgICAgICBhdXRvIGN1c3RvbURhdGEgPSBQYXN0ZWJvYXJkQ3VzdG9t
RGF0YTo6ZnJvbVBlcnNpc3RlbmNlRGVjb2Rlcih7ZGF0YSwgc2l6ZX0pOworICAgICAgICAgICAg
YXV0byBjdXN0b21EYXRhID0gUGFzdGVib2FyZEN1c3RvbURhdGE6OmZyb21QZXJzaXN0ZW5jZURl
Y29kZXIoU3BhbiB7IGRhdGEsIHNpemUgfSk7CiAKICAgICAgICAgICAgIEdsb2JhbFVubG9jayhj
YkRhdGEpOwogICAgICAgICAgICAgOjpDbG9zZUNsaXBib2FyZCgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3Ry
YXRpb25EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NTksMTAgKzQ1OSwxMCBAQCBib29sIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1
c2hDaGFuZ2VzCiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDYsIHVw
ZGF0ZVZpYUNhY2hlVG9TdHJpbmcoZGF0YS5yZWdpc3RyYXRpb24udXBkYXRlVmlhQ2FjaGUpKSAh
PSBTUUxJVEVfT0sKICAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRleHQoNywg
ZGF0YS5zY3JpcHRVUkwuc3RyaW5nKCkpICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwgaW5z
ZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCg4LCB3b3JrZXJUeXBlVG9TdHJpbmcoZGF0YS53b3JrZXJU
eXBlKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRC
bG9iKDksIFNwYW4geyBjc3BFbmNvZGVyLmJ1ZmZlcigpLCBjc3BFbmNvZGVyLmJ1ZmZlclNpemUo
KSB9KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJs
b2IoOSwgY3NwRW5jb2Rlci5idWZmZXIoKSkgIT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8fCBp
bnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDEwLCBkYXRhLnJlZmVycmVyUG9saWN5KSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoMTEsIFNwYW4g
eyBzY3JpcHRSZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVyKCksIHNjcmlwdFJlc291cmNlTWFwRW5j
b2Rlci5idWZmZXJTaXplKCkgfSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBpbnNlcnRT
dGF0ZW1lbnQtPmJpbmRCbG9iKDEyLCBTcGFuIHsgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZm
ZXIoKSwgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXJTaXplKCkgfSkgIT0gU1FMSVRFX09L
CisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDExLCBzY3JpcHRSZXNv
dXJjZU1hcEVuY29kZXIuYnVmZmVyKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5z
ZXJ0U3RhdGVtZW50LT5iaW5kQmxvYigxMiwgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXIo
KSkgIT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPnN0ZXAoKSAh
PSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU2VydmljZVdv
cmtlciwgIkZhaWxlZCB0byBzdG9yZSByZWdpc3RyYXRpb24gZGF0YSBpbnRvIHJlY29yZHMgdGFi
bGUgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RF
cnJvck1zZygpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTUxNyw3ICs1MTcsNyBA
QCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yCiAgICAgICAgIHN0ZDo6
b3B0aW9uYWw8Q29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzPiBjb250ZW50U2Vj
dXJpdHlQb2xpY3k7CiAgICAgICAgIGF1dG8gY29udGVudFNlY3VyaXR5UG9saWN5RGF0YVNwYW4g
PSBzcWwtPmNvbHVtbkJsb2JBc1NwYW4oOCk7CiAgICAgICAgIGlmIChjb250ZW50U2VjdXJpdHlQ
b2xpY3lEYXRhU3Bhbi5zaXplKCkpIHsKLSAgICAgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRl
Y29kZXIgY3NwRGVjb2Rlcihjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhU3Bhbi5kYXRhKCksIGNv
bnRlbnRTZWN1cml0eVBvbGljeURhdGFTcGFuLnNpemUoKSk7CisgICAgICAgICAgICBXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyIGNzcERlY29kZXIgeyBjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRh
U3BhbiB9OwogICAgICAgICAgICAgY3NwRGVjb2RlciA+PiBjb250ZW50U2VjdXJpdHlQb2xpY3k7
CiAgICAgICAgICAgICBpZiAoIWNvbnRlbnRTZWN1cml0eVBvbGljeSkgewogICAgICAgICAgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIsICJSZWdpc3RyYXRpb25EYXRhYmFz
ZTo6aW1wb3J0UmVjb3JkczogRmFpbGVkIHRvIGRlY29kZSBjb250ZW50U2VjdXJpdHlQb2xpY3ki
KTsKQEAgLTUzMCw3ICs1MzAsNyBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9y
dFJlY29yCiAgICAgICAgIEhhc2hNYXA8VVJMLCBTZXJ2aWNlV29ya2VyQ29udGV4dERhdGE6Oklt
cG9ydGVkU2NyaXB0PiBzY3JpcHRSZXNvdXJjZU1hcDsKICAgICAgICAgYXV0byBzY3JpcHRSZXNv
dXJjZU1hcERhdGFTcGFuID0gc3FsLT5jb2x1bW5CbG9iQXNTcGFuKDEwKTsKICAgICAgICAgaWYg
KHNjcmlwdFJlc291cmNlTWFwRGF0YVNwYW4uc2l6ZSgpKSB7Ci0gICAgICAgICAgICBXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyIHNjcmlwdFJlc291cmNlTWFwRGVjb2RlcihzY3JpcHRSZXNvdXJj
ZU1hcERhdGFTcGFuLmRhdGEoKSwgc2NyaXB0UmVzb3VyY2VNYXBEYXRhU3Bhbi5zaXplKCkpOwor
ICAgICAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBzY3JpcHRSZXNvdXJjZU1hcERl
Y29kZXIgeyBzY3JpcHRSZXNvdXJjZU1hcERhdGFTcGFuIH07CiAgICAgICAgICAgICBzdGQ6Om9w
dGlvbmFsPEhhc2hNYXA8VVJMLCBJbXBvcnRlZFNjcmlwdEF0dHJpYnV0ZXM+PiBzY3JpcHRSZXNv
dXJjZU1hcFdpdGhvdXRTY3JpcHRzOwogICAgICAgICAgICAgc2NyaXB0UmVzb3VyY2VNYXBEZWNv
ZGVyID4+IHNjcmlwdFJlc291cmNlTWFwV2l0aG91dFNjcmlwdHM7CiAgICAgICAgICAgICBpZiAo
IXNjcmlwdFJlc291cmNlTWFwV2l0aG91dFNjcmlwdHMpIHsKQEAgLTU0Myw3ICs1NDMsNyBAQCBT
dHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yCiAgICAgICAgIGF1dG8gY2Vy
dGlmaWNhdGVJbmZvRGF0YVNwYW4gPSBzcWwtPmNvbHVtbkJsb2JBc1NwYW4oMTEpOwogICAgICAg
ICBzdGQ6Om9wdGlvbmFsPENlcnRpZmljYXRlSW5mbz4gY2VydGlmaWNhdGVJbmZvOwogCi0gICAg
ICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgY2VydGlmaWNhdGVJbmZvRGVjb2RlcihjZXJ0
aWZpY2F0ZUluZm9EYXRhU3Bhbi5kYXRhKCksIGNlcnRpZmljYXRlSW5mb0RhdGFTcGFuLnNpemUo
KSk7CisgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgY2VydGlmaWNhdGVJbmZvRGVj
b2RlciB7IGNlcnRpZmljYXRlSW5mb0RhdGFTcGFuIH07CiAgICAgICAgIGNlcnRpZmljYXRlSW5m
b0RlY29kZXIgPj4gY2VydGlmaWNhdGVJbmZvOwogICAgICAgICBpZiAoIWNlcnRpZmljYXRlSW5m
bykgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIlJlZ2lz
dHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzOiBGYWlsZWQgdG8gZGVjb2RlIGNlcnRpZmlj
YXRlSW5mbyIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9T
V1NjcmlwdFN0b3JhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
c2VydmljZS9zZXJ2ZXIvU1dTY3JpcHRTdG9yYWdlLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NjcmlwdFN0b3JhZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIFN0cmluZyBTV1NjcmlwdFN0b3JhZ2U6
OnNoYTJIYXNoKGNvbnN0IFMKICAgICBhdXRvIGlucHV0VXRmOCA9IGlucHV0LnV0ZjgoKTsKICAg
ICBjcnlwdG8tPmFkZEJ5dGVzKGlucHV0VXRmOC5kYXRhKCksIGlucHV0VXRmOC5sZW5ndGgoKSk7
CiAgICAgYXV0byBoYXNoID0gY3J5cHRvLT5jb21wdXRlSGFzaCgpOwotICAgIHJldHVybiBiYXNl
NjRVUkxFbmNvZGVUb1N0cmluZyhoYXNoLmRhdGEoKSwgaGFzaC5zaXplKCkpOworICAgIHJldHVy
biBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhoYXNoKTsKIH0KIAogU3RyaW5nIFNXU2NyaXB0U3Rv
cmFnZTo6c2hhMkhhc2goY29uc3QgVVJMJiBpbnB1dCkgY29uc3QKQEAgLTg2LDkgKzg2LDkgQEAg
U2NyaXB0QnVmZmVyIFNXU2NyaXB0U3RvcmFnZTo6c3RvcmUoY29ucwogICAgIGF1dG8gc2NyaXB0
UGF0aCA9IHRoaXMtPnNjcmlwdFBhdGgocmVnaXN0cmF0aW9uS2V5LCBzY3JpcHRVUkwpOwogICAg
IEZpbGVTeXN0ZW06Om1ha2VBbGxEaXJlY3RvcmllcyhGaWxlU3lzdGVtOjpwYXJlbnRQYXRoKHNj
cmlwdFBhdGgpKTsKIAotICAgIGF1dG8gaXRlcmF0ZU92ZXJCdWZmZXJBbmRXcml0ZURhdGEgPSBb
Jl0oY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIHdyaXRlRGF0
YSkgewotICAgICAgICBmb3IgKGF1dG8gaXQgPSBzY3JpcHQuYnVmZmVyKCktPmJlZ2luKCk7IGl0
ICE9IHNjcmlwdC5idWZmZXIoKS0+ZW5kKCk7ICsraXQpCi0gICAgICAgICAgICB3cml0ZURhdGEo
aXQtPnNlZ21lbnQtPmRhdGEoKSwgaXQtPnNlZ21lbnQtPnNpemUoKSk7CisgICAgYXV0byBpdGVy
YXRlT3ZlckJ1ZmZlckFuZFdyaXRlRGF0YSA9IFsmXShjb25zdCBGdW5jdGlvbjxib29sKFNwYW48
Y29uc3Qgc3RkOjpieXRlPik+JiB3cml0ZURhdGEpIHsKKyAgICAgICAgZm9yIChhdXRvJiBzZWdt
ZW50RW50cnkgOiAqc2NyaXB0LmJ1ZmZlcigpKQorICAgICAgICAgICAgd3JpdGVEYXRhKHNlZ21l
bnRFbnRyeS5zZWdtZW50LT5ieXRlcygpKTsKICAgICB9OwogCiAgICAgaWYgKCFzaG91bGRVc2VG
aWxlTWFwcGluZyhzY3JpcHQuYnVmZmVyKCktPnNpemUoKSkpIHsKQEAgLTk3LDggKzk3LDggQEAg
U2NyaXB0QnVmZmVyIFNXU2NyaXB0U3RvcmFnZTo6c3RvcmUoY29ucwogICAgICAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIlNXU2NyaXB0U3RvcmFnZTo6c3RvcmU6IEZh
aWx1cmUgdG8gc3RvcmUgJXMsIEZpbGVTeXN0ZW06Om9wZW5GaWxlKCkgZmFpbGVkIiwgc2NyaXB0
UGF0aC51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIH0K
LSAgICAgICAgaXRlcmF0ZU92ZXJCdWZmZXJBbmRXcml0ZURhdGEoWyZdKGNvbnN0IHVpbnQ4X3Qq
IGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gICAgICAgICAgICBGaWxlU3lzdGVtOjp3cml0ZVRvRmls
ZShoYW5kbGUsIGRhdGEsIHNpemUpOworICAgICAgICBpdGVyYXRlT3ZlckJ1ZmZlckFuZFdyaXRl
RGF0YShbJl0oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpIHsKKyAgICAgICAgICAgIEZpbGVT
eXN0ZW06OndyaXRlVG9GaWxlKGhhbmRsZSwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9KTsKICAgICAgICAgRmlsZVN5c3RlbTo6
Y2xvc2VGaWxlKGhhbmRsZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw4MSBAQAorMjAy
MS0wNi0xMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRvcHQg
U3BhbiBpbiBtb3JlIHBsYWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hl
U3RvcmFnZUVuZ2luZUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpD
YWNoZTo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6ZGVj
b2RlUmVjb3JkSGVhZGVyKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0
b3JhZ2VFbmdpbmVDYWNoZXMuY3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNh
Y2hlczo6c3RvcmVPcmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hl
czo6cmVhZE9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6ZW5jb2RlQ2Fj
aGVOYW1lcyk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6ZGVjb2RlQ2FjaGVzTmFt
ZXMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6Om1hcFRvRmlsZSBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Y29tcHV0ZVNIQTEpOgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaDoKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhY2hlOjpEYXRhOjpEYXRhKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6RGF0YTo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6
OkRhdGE6OmFkb3B0TWFwKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVFbnRyeS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6OmVu
Y29kZUFzU3RvcmFnZVJlY29yZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNo
ZTo6RW50cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZUtleS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNo
ZTo6aGFzaFN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6S2V5Ojpjb21w
dXRlSGFzaCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6S2V5Ojpjb21w
dXRlUGFydGl0aW9uSGFzaCBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
ZGVjb2RlUmVjb3JkTWV0YURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmVu
Y29kZVJlY29yZE1ldGFEYXRhKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6U3VicmVzb3VyY2VzRW50cnk6OmVuY29kZUFzU3RvcmFnZVJlY29yZCBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3VicmVzb3VyY2VzRW50cnk6OmRlY29kZVN0
b3JhZ2VSZWNvcmQpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVyLmg6Cisg
ICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6
QXJndW1lbnRDb2RlcjxDU3RyaW5nPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRD
b2RlcjxDU3RyaW5nPjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxTdHJp
bmc+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpkZWNvZGVTdHJpbmdUZXh0KToKKyAgICAgICAg
KElQQzo6QXJndW1lbnRDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUpOgorICAgICAgICAoSVBD
OjpBcmd1bWVudENvZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29kZSk6CisgICAgICAgICogUGxhdGZv
cm0vSVBDL0FyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgIChJUEM6OlNpbXBsZUFyZ3VtZW50Q29k
ZXI6OmVuY29kZSk6CisgICAgICAgIChJUEM6OlNpbXBsZUFyZ3VtZW50Q29kZXI6OmRlY29kZSk6
CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FycmF5UmVmZXJlbmNlLmg6CisgICAgICAgICogUGxh
dGZvcm0vSVBDL0RlY29kZXIuY3BwOgorICAgICAgICAoSVBDOjpEZWNvZGVyOjpkZWNvZGVGaXhl
ZExlbmd0aERhdGEpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9EZWNvZGVyLmg6CisgICAgICAg
IChJUEM6OkRlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgICogUGxhdGZv
cm0vSVBDL0VuY29kZXIuY3BwOgorICAgICAgICAoSVBDOjpFbmNvZGVyOjplbmNvZGVGaXhlZExl
bmd0aERhdGEpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9FbmNvZGVyLmg6CisgICAgICAgICog
UGxhdGZvcm0vSVBDL1NoYXJlZEJ1ZmZlckNvcHkuY3BwOgorICAgICAgICAoSVBDOjpTaGFyZWRC
dWZmZXJDb3B5OjplbmNvZGUgY29uc3QpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9TdHJlYW1D
b25uZWN0aW9uRW5jb2Rlci5oOgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2Rl
cnMuY3BwOgorICAgICAgICAoSVBDOjplbmNvZGVTaGFyZWRCdWZmZXIpOgorICAgICAgICAoSVBD
OjpkZWNvZGVTaGFyZWRCdWZmZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJQ29udGVu
dFJ1bGVMaXN0U3RvcmUuY3BwOgorICAgICAgICAoQVBJOjplbmNvZGVDb250ZW50UnVsZUxpc3RN
ZXRhRGF0YSk6CisgICAgICAgIChBUEk6OmdldERhdGEpOgorICAgICAgICAoQVBJOjpkZWNvZGVD
b250ZW50UnVsZUxpc3RNZXRhRGF0YSk6CisgICAgICAgIChBUEk6OndyaXRlRGF0YVRvRmlsZSk6
CisgICAgICAgICogVUlQcm9jZXNzL21hYy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpIaXN0b3J5RW50cnlEYXRhRW5jb2Rlcjo6b3BlcmF0b3I8PCk6Cisg
ICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFFbmNvZGVyOjplbmNvZGVBcml0aG1ldGlj
VHlwZSk6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFFbmNvZGVyOjplbmNvZGVG
aXhlZExlbmd0aERhdGEpOgorICAgICAgICAoV2ViS2l0OjpIaXN0b3J5RW50cnlEYXRhRGVjb2Rl
cjo6b3BlcmF0b3I+Pik6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFEZWNvZGVy
OjpkZWNvZGVBcml0aG1ldGljVHlwZSk6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURh
dGFEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQ
STo6ZW5jb2RlVHlwZWRBcnJheSk6CisKIDIwMjEtMDYtMTEgIFJ5YW4gSGFkZGFkICA8cnlhbmhh
ZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyNzg3NTQu
CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVt
ZW50TWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFu
YWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMyw3ICszMjMsNyBAQCB2b2lkIFByaXZhdGVD
bGlja01lYXN1cmVtZW50TWFuYWdlcjo6ZmlyCiAgICAgICAgIGNyeXB0by0+YWRkQnl0ZXMocHVi
bGljS2V5RGF0YS0+ZGF0YSgpLCBwdWJsaWNLZXlEYXRhLT5zaXplKCkpOwogICAgICAgICBhdXRv
IHB1YmxpY0tleURhdGFIYXNoID0gY3J5cHRvLT5jb21wdXRlSGFzaCgpOwogCi0gICAgICAgIGF1
dG8ga2V5SUQgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhwdWJsaWNLZXlEYXRhSGFzaC5kYXRh
KCksIHB1YmxpY0tleURhdGFIYXNoLnNpemUoKSk7CisgICAgICAgIGF1dG8ga2V5SUQgPSBiYXNl
NjRVUkxFbmNvZGVUb1N0cmluZyhwdWJsaWNLZXlEYXRhSGFzaCk7CiAgICAgICAgIGlmIChrZXlJ
RCAhPSBhdHRyaWJ1dGlvbi5zb3VyY2VVbmxpbmthYmxlVG9rZW4oKS0+a2V5SURCYXNlNjRVUkwp
CiAgICAgICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTY1LDcgKzU2
NSw3IEBAIFN0b3JhZ2U6OlJlY29yZCBDYWNoZTo6ZW5jb2RlKGNvbnN0IFJlY28KIAogICAgIGVu
Y29kZXIuZW5jb2RlQ2hlY2tzdW0oKTsKIAotICAgIERhdGEgaGVhZGVyKGVuY29kZXIuYnVmZmVy
KCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICBEYXRhIGhlYWRlcihlbmNvZGVyLmJ1ZmZl
cigpKTsKICAgICBEYXRhIGJvZHk7CiAgICAgV1RGOjpzd2l0Y2hPbihyZWNvcmQucmVzcG9uc2VC
b2R5LCBbXShjb25zdCBSZWY8V2ViQ29yZTo6Rm9ybURhdGE+JiBmb3JtRGF0YSkgewogICAgICAg
ICAvLyBGSVhNRTogU3RvcmUgZm9ybSBkYXRhIGJvZHkuCkBAIC02MzAsNyArNjMwLDcgQEAgc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RE9NQ2FjaGVFbgogCiBzdGQ6Om9wdGlvbmFsPENh
Y2hlOjpEZWNvZGVkUmVjb3JkPiBDYWNoZTo6ZGVjb2RlUmVjb3JkSGVhZGVyKGNvbnN0IFN0b3Jh
Z2U6OlJlY29yZCYgc3RvcmFnZSkKIHsKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRl
Y29kZXIoc3RvcmFnZS5oZWFkZXIuZGF0YSgpLCBzdG9yYWdlLmhlYWRlci5zaXplKCkpOworICAg
IFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihTcGFuIHsgc3RvcmFnZS5oZWFkZXIu
ZGF0YSgpLCBzdG9yYWdlLmhlYWRlci5zaXplKCkgfSk7CiAKICAgICBzdGQ6Om9wdGlvbmFsPGRv
dWJsZT4gaW5zZXJ0aW9uVGltZTsKICAgICBkZWNvZGVyID4+IGluc2VydGlvblRpbWU7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNh
Y2hlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSwxNCArMTA1LDE0IEBAIHZvaWQgQ2FjaGVzOjpzdG9y
ZU9yaWdpbihDb21wbGV0aW9uQ2FsbGIKICAgICBlbmNvZGVyIDw8IG1fb3JpZ2luLmNsaWVudE9y
aWdpbi5wcm90b2NvbDsKICAgICBlbmNvZGVyIDw8IG1fb3JpZ2luLmNsaWVudE9yaWdpbi5ob3N0
OwogICAgIGVuY29kZXIgPDwgbV9vcmlnaW4uY2xpZW50T3JpZ2luLnBvcnQ7Ci0gICAgbV9lbmdp
bmUtPndyaXRlRmlsZShjYWNoZXNPcmlnaW5GaWxlbmFtZShtX3Jvb3RQYXRoKSwgRGF0YSB7IGVu
Y29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpIH0sIFtwcm90ZWN0ZWRUaGlzID0g
bWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildIChzdGQ6Om9wdGlvbmFsPEVycm9yPiYmIGVycm9yKSBtdXRhYmxlIHsKKyAgICBtX2Vu
Z2luZS0+d3JpdGVGaWxlKGNhY2hlc09yaWdpbkZpbGVuYW1lKG1fcm9vdFBhdGgpLCBEYXRhIHsg
ZW5jb2Rlci5idWZmZXIoKSB9LCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoc3RkOjpvcHRpb25h
bDxFcnJvcj4mJiBlcnJvcikgbXV0YWJsZSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdU
Rk1vdmUoZXJyb3IpKTsKICAgICB9KTsKIH0KIAogc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpDbGll
bnRPcmlnaW4+IENhY2hlczo6cmVhZE9yaWdpbihjb25zdCBEYXRhJiBkYXRhKQogewotICAgIFdU
Rjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkp
OworICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihTcGFuIHsgZGF0YS5kYXRh
KCksIGRhdGEuc2l6ZSgpIH0pOwogCiAgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpTZWN1cml0
eU9yaWdpbkRhdGE+IHRvcE9yaWdpbjsKICAgICBkZWNvZGVyID4+IHRvcE9yaWdpbjsKQEAgLTQw
NCwxMiArNDA0LDEyIEBAIHN0YXRpYyBpbmxpbmUgRGF0YSBlbmNvZGVDYWNoZU5hbWVzKGNvbnMK
ICAgICAgICAgZW5jb2RlciA8PCBjYWNoZS51bmlxdWVOYW1lKCk7CiAgICAgfQogCi0gICAgcmV0
dXJuIERhdGEgeyBlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSB9OworICAg
IHJldHVybiBEYXRhIHsgZW5jb2Rlci5idWZmZXIoKSB9OwogfQogCiBzdGF0aWMgaW5saW5lIEV4
cGVjdGVkPFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiwgRXJyb3I+IGRlY29kZUNh
Y2hlc05hbWVzKGNvbnN0IERhdGEmIGRhdGEpCiB7Ci0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVj
b2RlciBkZWNvZGVyKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgV1RGOjpQZXJzaXN0
ZW5jZTo6RGVjb2RlciBkZWNvZGVyKFNwYW4geyBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkgfSk7
CiAgICAgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gY291bnQ7CiAgICAgZGVjb2RlciA+PiBjb3Vu
dDsKICAgICBpZiAoIWNvdW50KQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCShyZXZpc2lvbiAyNzg4MDkp
CisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBOZXR3b3JrQ2Fj
aGUgewogRGF0YSBEYXRhOjptYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKSBjb25zdAogewog
ICAgIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGU7Ci0gICAgYXV0byBhcHBs
eURhdGEgPSBbJl0oY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4m
IGFwcGxpZXIpIHsgYXBwbHkoYXBwbGllcik7IH07CisgICAgYXV0byBhcHBseURhdGEgPSBbJl0o
Y29uc3QgRnVuY3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYgYXBwbGllcikgeyBh
cHBseShhcHBsaWVyKTsgfTsKICAgICBhdXRvIG1hcHBlZEZpbGUgPSBGaWxlU3lzdGVtOjptYXBU
b0ZpbGUocGF0aCwgc2l6ZSgpLCBXVEZNb3ZlKGFwcGx5RGF0YSksICZoYW5kbGUpOwogICAgIGlm
ICghbWFwcGVkRmlsZSkKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTg2LDkgKzg2LDkgQEAgRGF0
YSBhZG9wdEFuZE1hcEZpbGUoRmlsZVN5c3RlbTo6UGxhdGZvcgogU0hBMTo6RGlnZXN0IGNvbXB1
dGVTSEExKGNvbnN0IERhdGEmIGRhdGEsIGNvbnN0IFNhbHQmIHNhbHQpCiB7CiAgICAgU0hBMSBz
aGExOwotICAgIHNoYTEuYWRkQnl0ZXMoc2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKTsKLSAgICBk
YXRhLmFwcGx5KFsmc2hhMV0oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAg
ICAgICAgc2hhMS5hZGRCeXRlcyhkYXRhLCBzaXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKHNhbHQp
OworICAgIGRhdGEuYXBwbHkoWyZzaGExXShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkgewor
ICAgICAgICBzaGExLmFkZEJ5dGVzKGRhdGEpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
KTsKIApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVEYXRhLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KICNpbmNsdWRlIDx3
dGYvRnVuY3Rpb25EaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8d3RmL1NIQTEuaD4KKyNpbmNsdWRl
IDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC01NCw2ICs1NSwxMCBAQCBjbGFzcyBE
YXRhIHsKIHB1YmxpYzoKICAgICBEYXRhKCkgeyB9CiAgICAgRGF0YShjb25zdCB1aW50OF90Kiwg
c2l6ZV90KTsKKyAgICBEYXRhKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhKQorICAgICAgICA6
IERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5kYXRhKCkpLCBkYXRh
LnNpemUoKSkKKyAgICB7CisgICAgfQogCiAgICAgfkRhdGEoKSB7IH0KIApAQCAtNzksNyArODQs
NyBAQCBwdWJsaWM6CiAKICAgICBEYXRhIHN1YnJhbmdlKHNpemVfdCBvZmZzZXQsIHNpemVfdCkg
Y29uc3Q7CiAKLSAgICBib29sIGFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2wgKGNvbnN0IHVpbnQ4
X3QqLCBzaXplX3QpPiYpIGNvbnN0OworICAgIGJvb2wgYXBwbHkoY29uc3QgRnVuY3Rpb248Ym9v
bCAoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mKSBjb25zdDsKIAogICAgIERhdGEgbWFwVG9GaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1t
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjksMTIgKzY5LDEy
IEBAIGJvb2wgRGF0YTo6aXNOdWxsKCkgY29uc3QKICAgICByZXR1cm4gIW1fZGlzcGF0Y2hEYXRh
OwogfQogCi1ib29sIERhdGE6OmFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2wgKGNvbnN0IHVpbnQ4
X3QqLCBzaXplX3QpPiYgYXBwbGllcikgY29uc3QKK2Jvb2wgRGF0YTo6YXBwbHkoY29uc3QgRnVu
Y3Rpb248Ym9vbCAoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mIGFwcGxpZXIpIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX3NpemUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gZGlzcGF0
Y2hfZGF0YV9hcHBseShtX2Rpc3BhdGNoRGF0YS5nZXQoKSwgWyZhcHBsaWVyXShkaXNwYXRjaF9k
YXRhX3QsIHNpemVfdCwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAg
cmV0dXJuIGFwcGxpZXIoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBzaXplKTsK
KyAgICAgICAgcmV0dXJuIGFwcGxpZXIoU3BhbiB7IHN0YXRpY19jYXN0PGNvbnN0IHN0ZDo6Ynl0
ZSo+KGRhdGEpLCBzaXplIH0pOwogICAgIH0pOwogfQogCkBAIC05NCwxNCArOTQsMTEgQEAgRGF0
YSBjb25jYXRlbmF0ZShjb25zdCBEYXRhJiBhLCBjb25zdCBEYQogCiBEYXRhIERhdGE6OmFkb3B0
TWFwKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYgbWFwcGVkRmlsZSwgRmlsZVN5c3RlbTo6
UGxhdGZvcm1GaWxlSGFuZGxlIGZkKQogewotICAgIHNpemVfdCBzaXplID0gbWFwcGVkRmlsZS5z
aXplKCk7Ci0gICAgdm9pZCogbWFwID0gbWFwcGVkRmlsZS5sZWFrSGFuZGxlKCk7Ci0gICAgQVNT
RVJUKG1hcCk7Ci0gICAgQVNTRVJUKG1hcCAhPSBNQVBfRkFJTEVEKTsKKyAgICBhdXRvIG1hcCA9
IG1hcHBlZEZpbGUubGVha0hhbmRsZSgpOworICAgIEFTU0VSVChtYXAuZGF0YSgpKTsKKyAgICBB
U1NFUlQobWFwLmRhdGEoKSAhPSBNQVBfRkFJTEVEKTsKICAgICBGaWxlU3lzdGVtOjpjbG9zZUZp
bGUoZmQpOwotICAgIGF1dG8gYm9keU1hcCA9IGFkb3B0T1NPYmplY3QoZGlzcGF0Y2hfZGF0YV9j
cmVhdGUobWFwLCBzaXplLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVF
X1BSSU9SSVRZX0RFRkFVTFQsIDApLCBbbWFwLCBzaXplXSB7Ci0gICAgICAgIG11bm1hcChtYXAs
IHNpemUpOwotICAgIH0pKTsKKyAgICBhdXRvIGJvZHlNYXAgPSBhZG9wdE9TT2JqZWN0KGRpc3Bh
dGNoX2RhdGFfY3JlYXRlKG1hcC5kYXRhKCksIG1hcC5zaXplKCksIGRpc3BhdGNoX2dldF9nbG9i
YWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIERJU1BBVENIX0RB
VEFfREVTVFJVQ1RPUl9NVU5NQVApKTsKICAgICByZXR1cm4geyBXVEZNb3ZlKGJvZHlNYXApLCBE
YXRhOjpCYWNraW5nOjpNYXAgfTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAJKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSwxMCArOTksMTAgQEAgU3RvcmFnZTo6
UmVjb3JkIEVudHJ5OjplbmNvZGVBc1N0b3JhZ2VSZQogICAgIAogICAgIGVuY29kZXIuZW5jb2Rl
Q2hlY2tzdW0oKTsKIAotICAgIERhdGEgaGVhZGVyKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIu
YnVmZmVyU2l6ZSgpKTsKKyAgICBEYXRhIGhlYWRlciB7IGVuY29kZXIuYnVmZmVyKCkgfTsKICAg
ICBEYXRhIGJvZHk7CiAgICAgaWYgKG1fYnVmZmVyKQotICAgICAgICBib2R5ID0geyBtX2J1ZmZl
ci0+ZGF0YSgpLCBtX2J1ZmZlci0+c2l6ZSgpIH07CisgICAgICAgIGJvZHkgPSB7IG1fYnVmZmVy
LT5ieXRlcygpIH07CiAKICAgICByZXR1cm4geyBtX2tleSwgbV90aW1lU3RhbXAsIGhlYWRlciwg
Ym9keSwgeyB9IH07CiB9CkBAIC0xMTEsNyArMTExLDcgQEAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5
PiBFbnRyeTo6ZGVjb2RlU3RvcgogewogICAgIGF1dG8gZW50cnkgPSBtYWtlVW5pcXVlPEVudHJ5
PihzdG9yYWdlRW50cnkpOwogCi0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVy
KHN0b3JhZ2VFbnRyeS5oZWFkZXIuZGF0YSgpLCBzdG9yYWdlRW50cnkuaGVhZGVyLnNpemUoKSk7
CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyIHsgU3BhbiB7IHN0b3JhZ2VF
bnRyeS5oZWFkZXIuZGF0YSgpLCBzdG9yYWdlRW50cnkuaGVhZGVyLnNpemUoKSB9IH07CiAgICAg
V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKICAgICBpZiAoIVdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2U6OmRlY29kZShkZWNvZGVyLCByZXNwb25zZSkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVLZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04OCwxMyArODgsMTMgQEAgc3RhdGljIHZvaWQgaGFzaFN0cmluZyhTSEExJiBz
aGExLCBjb25zdAogCiAgICAgaWYgKHN0cmluZy5pczhCaXQoKSAmJiBzdHJpbmcuaXNBbGxBU0NJ
SSgpKSB7CiAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbnVsbEJ5dGUgPSAwOwotICAgICAgICBzaGEx
LmFkZEJ5dGVzKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAgICAg
ICBzaGExLmFkZEJ5dGVzKCZudWxsQnl0ZSwgMSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3Bh
biB7IHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkgfSk7CisgICAgICAgIHNo
YTEuYWRkQnl0ZXMoU3BhbiB7ICZudWxsQnl0ZSwgMSB9KTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBhdXRvIGNTdHJpbmcgPSBzdHJpbmcudXRmOCgpOwogICAgIC8vIEluY2x1ZGUgdGVy
bWluYXRpbmcgbnVsbCBieXRlLgotICAgIHNoYTEuYWRkQnl0ZXMoY1N0cmluZy5kYXRhQXNVSW50
OFB0cigpLCBjU3RyaW5nLmxlbmd0aCgpICsgMSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsg
Y1N0cmluZy5kYXRhQXNVSW50OFB0cigpLCBjU3RyaW5nLmxlbmd0aCgpICsgMSB9KTsKIH0KIAog
S2V5OjpIYXNoVHlwZSBLZXk6OmNvbXB1dGVIYXNoKGNvbnN0IFNhbHQmIHNhbHQpIGNvbnN0CkBA
IC0xMDIsNyArMTAyLDcgQEAgS2V5OjpIYXNoVHlwZSBLZXk6OmNvbXB1dGVIYXNoKGNvbnN0IFNh
bAogICAgIC8vIFdlIGRvbid0IHJlYWxseSBuZWVkIGEgY3J5cHRvZ3JhcGhpYyBoYXNoLiBUaGUg
a2V5IGlzIGFsd2F5cyB2ZXJpZmllZCBhZ2FpbnN0IHRoZSBlbnRyeSBoZWFkZXIuCiAgICAgLy8g
U0hBMSBqdXN0IGhhcHBlbnMgdG8gYmUgc3VpdGFibHkgc2l6ZWQsIGZhc3QgYW5kIGF2YWlsYWJs
ZS4KICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhzYWx0LmRhdGEoKSwgc2FsdC5z
aXplKCkpOworICAgIHNoYTEuYWRkQnl0ZXMoc2FsdCk7CiAKICAgICBoYXNoU3RyaW5nKHNoYTEs
IG1fcGFydGl0aW9uKTsKICAgICBoYXNoU3RyaW5nKHNoYTEsIG1fdHlwZSk7CkBAIC0xMTcsNyAr
MTE3LDcgQEAgS2V5OjpIYXNoVHlwZSBLZXk6OmNvbXB1dGVIYXNoKGNvbnN0IFNhbAogS2V5OjpI
YXNoVHlwZSBLZXk6OmNvbXB1dGVQYXJ0aXRpb25IYXNoKGNvbnN0IFNhbHQmIHNhbHQpIGNvbnN0
CiB7CiAgICAgU0hBMSBzaGExOwotICAgIHNoYTEuYWRkQnl0ZXMoc2FsdC5kYXRhKCksIHNhbHQu
c2l6ZSgpKTsKKyAgICBzaGExLmFkZEJ5dGVzKHNhbHQpOwogCiAgICAgaGFzaFN0cmluZyhzaGEx
LCBtX3BhcnRpdGlvbik7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAkocmV2aXNpb24gMjc4
ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVT
dG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU0LDggKzQ1NCw4IEBAIHN0cnVjdCBSZWNv
cmRNZXRhRGF0YSB7CiBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlUmVjb3Jk
TWV0YURhdGEoUmVjb3JkTWV0YURhdGEmIG1ldGFEYXRhLCBjb25zdCBEYXRhJiBmaWxlRGF0YSkK
IHsKICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBmaWxlRGF0YS5hcHBseShbJm1ldGFE
YXRhLCAmc3VjY2Vzc10oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAg
ICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOworICAgIGZp
bGVEYXRhLmFwcGx5KFsmbWV0YURhdGEsICZzdWNjZXNzXShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
ZGF0YSkgeworICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YSk7
CiAgICAgICAgIAogICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBjYWNoZVN0b3JhZ2VW
ZXJzaW9uOwogICAgICAgICBkZWNvZGVyID4+IGNhY2hlU3RvcmFnZVZlcnNpb247CkBAIC01ODYs
NyArNTg2LDcgQEAgc3RhdGljIERhdGEgZW5jb2RlUmVjb3JkTWV0YURhdGEoY29uc3QgUgogCiAg
ICAgZW5jb2Rlci5lbmNvZGVDaGVja3N1bSgpOwogCi0gICAgcmV0dXJuIERhdGEoZW5jb2Rlci5i
dWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOworICAgIHJldHVybiB7IGVuY29kZXIuYnVm
ZmVyKCkgfTsKIH0KIAogc3RkOjpvcHRpb25hbDxCbG9iU3RvcmFnZTo6QmxvYj4gU3RvcmFnZTo6
c3RvcmVCb2R5QXNCbG9iKFdyaXRlT3BlcmF0aW9uJiB3cml0ZU9wZXJhdGlvbikKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2Vz
RW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291
cmNlc0VudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDE0ICsxMjMsMTQgQEAgU3RvcmFn
ZTo6UmVjb3JkIFN1YnJlc291cmNlc0VudHJ5OjplbmNvZAogCiAgICAgZW5jb2Rlci5lbmNvZGVD
aGVja3N1bSgpOwogCi0gICAgcmV0dXJuIHsgbV9rZXksIG1fdGltZVN0YW1wLCB7IGVuY29kZXIu
YnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpIH0sIHsgfSwgeyB9fTsKKyAgICByZXR1cm4g
eyBtX2tleSwgbV90aW1lU3RhbXAsIHsgZW5jb2Rlci5idWZmZXIoKSB9LCB7IH0sIHsgfX07CiB9
CiAKIHN0ZDo6dW5pcXVlX3B0cjxTdWJyZXNvdXJjZXNFbnRyeT4gU3VicmVzb3VyY2VzRW50cnk6
OmRlY29kZVN0b3JhZ2VSZWNvcmQoY29uc3QgU3RvcmFnZTo6UmVjb3JkJiBzdG9yYWdlRW50cnkp
CiB7CiAgICAgYXV0byBlbnRyeSA9IG1ha2VVbmlxdWU8U3VicmVzb3VyY2VzRW50cnk+KHN0b3Jh
Z2VFbnRyeSk7CiAKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoc3RvcmFn
ZUVudHJ5LmhlYWRlci5kYXRhKCksIHN0b3JhZ2VFbnRyeS5oZWFkZXIuc2l6ZSgpKTsKKyAgICBX
VEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyBTcGFuIHsgc3RvcmFnZUVudHJ5Lmhl
YWRlci5kYXRhKCksIHN0b3JhZ2VFbnRyeS5oZWFkZXIuc2l6ZSgpIH0gfTsKICAgICBzdGQ6Om9w
dGlvbmFsPFZlY3RvcjxTdWJyZXNvdXJjZUluZm8+PiBzdWJyZXNvdXJjZXM7CiAgICAgZGVjb2Rl
ciA+PiBzdWJyZXNvdXJjZXM7CiAgICAgaWYgKCFzdWJyZXNvdXJjZXMpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc5LDEzICs3OSwxMyBAQCBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxULCB0eXBlbmFtZSBz
dGQ6OmVuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KICAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgVCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGVuY29kZXIu
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZ2
YWx1ZSksIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKFNwYW4geyAmdmFsdWUsIDEgfSwgYWxpZ25vZihUKSk7CiAgICAgfQogCiAg
ICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8VD4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAg
ewogICAgICAgICBUIHJlc3VsdDsKLSAgICAgICAgaWYgKGRlY29kZXIuZGVjb2RlRml4ZWRMZW5n
dGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZyZXN1bHQpLCBzaXplb2YoVCksIGFs
aWdub2YoVCkpKQorICAgICAgICBpZiAoZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3Bh
biB7ICZyZXN1bHQsIDEgfSkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0v
SVBDL0FyZ3VtZW50Q29kZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9Bcmd1bWVudENvZGVycy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODIsNyArODIsNyBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8Q1N0cmluZz46OmVuY29kZShFbmNvCiAK
ICAgICB1aW50MzJfdCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAgZW5jb2RlciA8PCBs
ZW5ndGg7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RyaW5nLmRhdGFBc1VJ
bnQ4UHRyKCksIGxlbmd0aCwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEo
c3RyaW5nLmJ5dGVzKCksIDEpOwogfQogCiBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBBcmd1bWVu
dENvZGVyPENTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgQ1N0cmluZyYgcmVzdWx0
KQpAQCAtMTAzLDcgKzEwMyw3IEBAIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIEFyZ3VtZW50Q29k
ZXI8Q1MKIAogICAgIGNoYXIqIGJ1ZmZlcjsKICAgICBDU3RyaW5nIHN0cmluZyA9IENTdHJpbmc6
Om5ld1VuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICghZGVjb2Rlci5kZWNv
ZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgbGVu
Z3RoLCAxKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBi
dWZmZXIsIGxlbmd0aCB9LCAxKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmVzdWx0
ID0gc3RyaW5nOwpAQCAtMTIzLDExICsxMjMsNyBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8U3RyaW5n
Pjo6ZW5jb2RlKEVuY29kCiAgICAgYm9vbCBpczhCaXQgPSBzdHJpbmcuaXM4Qml0KCk7CiAKICAg
ICBlbmNvZGVyIDw8IGxlbmd0aCA8PCBpczhCaXQ7Ci0KLSAgICBpZiAoaXM4Qml0KQotICAgICAg
ICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShzdHJpbmcuY2hhcmFjdGVyczgoKSwgbGVu
Z3RoICogc2l6ZW9mKExDaGFyKSwgYWxpZ25vZihMQ2hhcikpOwotICAgIGVsc2UKLSAgICAgICAg
ZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnMxNigpKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSwgYWxp
Z25vZihVQ2hhcikpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0cmluZy5i
eXRlcygpKTsKIH0KIHRlbXBsYXRlCiB2b2lkIEFyZ3VtZW50Q29kZXI8U3RyaW5nPjo6ZW5jb2Rl
PEVuY29kZXI+KEVuY29kZXImLCBjb25zdCBTdHJpbmcmKTsKQEAgLTE0Myw3ICsxMzksNyBAQCBz
dGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBkZWNvCiAgICAgCiAgICAgQ2hhcmFj
dGVyVHlwZSogYnVmZmVyOwogICAgIFN0cmluZyBzdHJpbmcgPSBTdHJpbmc6OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExl
bmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6
ZW9mKENoYXJhY3RlclR5cGUpLCBhbGlnbm9mKENoYXJhY3RlclR5cGUpKSkKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBidWZmZXIsIGxlbmd0aCB9KSkKICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAKICAgICByZXR1cm4gc3RyaW5nOwpAQCAt
MTgxLDEyICsxNzcsMTIgQEAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgQXJndW1lbnRDb2RlcjxT
dAogCiB2b2lkIEFyZ3VtZW50Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQogewotICAgIGVuY29kZXIuZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpLCAxKTsKKyAgICBl
bmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3QsIDEpOwogfQogCiBXQVJOX1VOVVNF
RF9SRVRVUk4gYm9vbCBBcmd1bWVudENvZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyLCBTSEExOjpEaWdlc3QmIGRpZ2VzdCkKIHsKLSAgICByZXR1cm4gZGVjb2Rlci5k
ZWNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0LmRhdGEoKSwgc2l6ZW9mKGRpZ2VzdCksIDEpOwor
ICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3QsIDEpOwogfQog
CiAjaWYgSEFWRShBVURJVF9UT0tFTikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L0FyZ3VtZW50Q29kZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9J
UEMvQXJndW1lbnRDb2RlcnMuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTIgKzQ1
LDEyIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBTaW1wbGVBcmd1bWUKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBUJiB0KQogICAgIHsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oJnQpLCBzaXplb2YoVCks
IGFsaWdub2YoVCkpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFu
IHsgJnQsIDEgfSk7CiAgICAgfQogCiAgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29s
IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBUJiB0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGRl
Y29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ0
KSwgc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKKyAgICAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmdCwgMSB9KTsKICAgICB9CiB9OwogCkBAIC02MSwxMyAr
NjEsMTQgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IEV4dGVudD4gc3RydQogICAgIHsK
ICAgICAgICAgaWYgKCFFeHRlbnQpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+
KGFycmF5UmVmZXJlbmNlLmRhdGEoKSksIGFycmF5UmVmZXJlbmNlLnNpemUoKSAqIHNpemVvZihU
KSwgYWxpZ25vZihUKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNw
YW4geyBhcnJheVJlZmVyZW5jZS5kYXRhKCksIGFycmF5UmVmZXJlbmNlLnNpemUoKSB9KTsKICAg
ICB9CiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8QXJyYXlSZWZlcmVuY2VUeXBlPiBkZWNvZGUo
RGVjb2RlciYgZGVjb2RlcikKICAgICB7CiAgICAgICAgIGlmICghRXh0ZW50KQogICAgICAgICAg
ICAgcmV0dXJuIEFycmF5UmVmZXJlbmNlVHlwZSgpOwotICAgICAgICBjb25zdCB1aW50OF90KiBk
YXRhID0gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aFJlZmVyZW5jZShFeHRlbnQgKiBzaXplb2Yo
VCksIGFsaWdub2YoVCkpOworCisgICAgICAgIGNvbnN0IGF1dG8qIGRhdGEgPSBkZWNvZGVyLmRl
Y29kZUZpeGVkTGVuZ3RoUmVmZXJlbmNlKEV4dGVudCAqIHNpemVvZihUKSwgYWxpZ25vZihUKSk7
CiAgICAgICAgIGlmICghZGF0YSkKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAg
ICAgICAgIHJldHVybiBBcnJheVJlZmVyZW5jZVR5cGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBU
Kj4oZGF0YSksIEV4dGVudCk7CkBAIC04Miw3ICs4Myw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBBcmd1bWVudENvZGUKICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50
NjRfdD4oYXJyYXlSZWZlcmVuY2Uuc2l6ZSgpKTsKICAgICAgICAgaWYgKCFhcnJheVJlZmVyZW5j
ZS5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGFycmF5UmVmZXJl
bmNlLmRhdGEoKSksIGFycmF5UmVmZXJlbmNlLnNpemUoKSAqIHNpemVvZihUKSwgYWxpZ25vZihU
KSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBhcnJheVJl
ZmVyZW5jZS5kYXRhKCksIGFycmF5UmVmZXJlbmNlLnNpemUoKSB9KTsKICAgICB9CiAgICAgc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8QXJyYXlSZWZlcmVuY2VUeXBlPiBkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKICAgICB7CkBAIC05Niw3ICs5Nyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBBcmd1bWVudENvZGUKICAgICAgICAgaWYgKFVOTElLRUxZKGRhdGFTaXplLmhhc092ZXJmbG93
ZWQoKSkpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgICAgIGNvbnN0
IHVpbnQ4X3QqIGRhdGEgPSBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoUmVmZXJlbmNlKGRhdGFT
aXplLCBhbGlnbm9mKFQpKTsKKyAgICAgICAgY29uc3QgYXV0byogZGF0YSA9IGRlY29kZXIuZGVj
b2RlRml4ZWRMZW5ndGhSZWZlcmVuY2UoZGF0YVNpemUsIGFsaWdub2YoVCkpOwogICAgICAgICBp
ZiAoIWRhdGEpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAgICByZXR1
cm4gQXJyYXlSZWZlcmVuY2VUeXBlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KGRhdGEpLCBz
dGF0aWNfY2FzdDxzaXplX3Q+KHNpemUpKTsKQEAgLTQyMyw3ICs0MjQsNyBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpCiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIsIGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dI
YW5kbGVyLCBtaW5DYXBhY2l0eT4mIHZlY3RvcikKICAgICB7CiAgICAgICAgIGVuY29kZXIgPDwg
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZlY3Rvci5zaXplKCkpOwotICAgICAgICBlbmNvZGVyLmVu
Y29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih2ZWN0
b3IuZGF0YSgpKSwgdmVjdG9yLnNpemUoKSAqIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CisgICAg
ICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHZlY3RvciwgYWxpZ25vZihUKSk7CiAg
ICAgfQogICAgIAogICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVj
b2RlciYgZGVjb2RlciwgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIs
IG1pbkNhcGFjaXR5PiYgdmVjdG9yKQpAQCAtNDQ2LDcgKzQ0Nyw3IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICAgICAgVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiB0ZW1wOwogICAgICAgICB0ZW1wLmdy
b3coc2l6ZSk7CiAKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPih0ZW1wLmRhdGEoKSksIHNpemUgKiBzaXplb2YoVCks
IGFsaWdub2YoVCkpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHRlbXApKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHZlY3Rvci5zd2Fw
KHRlbXApOwpAQCAtNDczLDcgKzQ3NCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2kKICAgICAgICAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hh
bmRsZXIsIG1pbkNhcGFjaXR5PiB2ZWN0b3I7CiAgICAgICAgIHZlY3Rvci5ncm93KHNpemUpOwog
Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4odmVjdG9yLmRhdGEoKSksIHNpemUgKiBzaXplb2YoVCksIGFsaWdub2Yo
VCkpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHZlY3Rvcikp
CiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgICAgIHJldHVybiB2ZWN0
b3I7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9BcnJheVJlZmVyZW5jZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FycmF5UmVmZXJlbmNlLmgJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FycmF5UmVm
ZXJlbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDggQEAKIAogbmFtZXNwYWNlIElQ
QyB7CiAKKy8vIEZJWE1FOiBSZXBsYWNlIHdpdGggPHd0Zi9TcGFuLmg+CisKIGlubGluZSBjb25z
dGV4cHIgc2l6ZV90IGFycmF5UmVmZXJlbmNlRHluYW1pY0V4dGVudCA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8c2l6ZV90Pjo6bWF4KCk7CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgRXh0
ZW50ID0gYXJyYXlSZWZlcmVuY2VEeW5hbWljRXh0ZW50PgpJbmRleDogU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9JUEMvRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvRGVjb2Rlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vSVBDL0RlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsMTMgKzIwNiwx
MyBAQCBib29sIERlY29kZXI6OmJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhCiAgICAgcmV0dXJu
IGFsaWduZWRCdWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKHJvdW5kVXBUb0FsaWdubWVudCht
X2J1ZmZlclBvcywgYWxpZ25tZW50KSwgbV9idWZmZXIsIG1fYnVmZmVyRW5kLCBzaXplKTsKIH0K
IAotYm9vbCBEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCogZGF0YSwgc2l6
ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQpCitib29sIERlY29kZXI6OmRlY29kZUZpeGVkTGVu
Z3RoRGF0YShTcGFuPHN0ZDo6Ynl0ZT4gZGF0YSwgc2l6ZV90IGFsaWdubWVudCkKIHsKLSAgICBp
ZiAoIWFsaWduQnVmZmVyUG9zaXRpb24oYWxpZ25tZW50LCBzaXplKSkKKyAgICBpZiAoIWFsaWdu
QnVmZmVyUG9zaXRpb24oYWxpZ25tZW50LCBkYXRhLnNpemUoKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIG1lbWNweShkYXRhLCBtX2J1ZmZlclBvcywgc2l6ZSk7Ci0gICAgbV9idWZm
ZXJQb3MgKz0gc2l6ZTsKKyAgICBtZW1jcHkoZGF0YS5kYXRhKCksIG1fYnVmZmVyUG9zLCBkYXRh
LnNpemUoKSk7CisgICAgbV9idWZmZXJQb3MgKz0gZGF0YS5zaXplKCk7CiAKICAgICByZXR1cm4g
dHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgJKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzksNyArNzksMTMgQEAgcHVibGljOgogICAgIFdBUk5fVU5VU0VEX1JFVFVS
TiBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlclBvcyAhPSBudWxscHRyOyB9
CiAgICAgdm9pZCBtYXJrSW52YWxpZCgpIHsgbV9idWZmZXJQb3MgPSBudWxscHRyOyB9CiAKLSAg
ICBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCog
ZGF0YSwgc2l6ZV90LCBzaXplX3QgYWxpZ25tZW50KTsKKyAgICBXQVJOX1VOVVNFRF9SRVRVUk4g
Ym9vbCBkZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbjxzdGQ6OmJ5dGU+LCBzaXplX3QgYWxpZ25t
ZW50KTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgV0FSTl9VTlVTRURfUkVUVVJO
IGJvb2wgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCBzaXplX3QgYWxpZ25tZW50ID0g
YWxpZ25vZih0eXBlbmFtZSBkZWNsdHlwZShTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0p
Ojp2YWx1ZV90eXBlKSkKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVGaXhlZExlbmd0aERh
dGEoYXNXcml0YWJsZUJ5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSksIGFsaWdu
bWVudCk7CisgICAgfQogCiAgICAgLy8gVGhlIGRhdGEgaW4gdGhlIHJldHVybmVkIHBvaW50ZXIg
aGVyZSB3aWxsIG9ubHkgYmUgdmFsaWQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgRGVjb2RlciBv
YmplY3QuCiAgICAgLy8gUmV0dXJucyBudWxscHRyIG9uIGZhaWx1cmUuCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiwx
MiArMjAyLDEyIEBAIHVpbnQ4X3QqIEVuY29kZXI6Omdyb3coc2l6ZV90IGFsaWdubWVudCwKICAg
ICByZXR1cm4gbV9idWZmZXIgKyBhbGlnbmVkU2l6ZTsKIH0KIAotdm9pZCBFbmNvZGVyOjplbmNv
ZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIHNpemVf
dCBhbGlnbm1lbnQpCit2b2lkIEVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNv
bnN0IHN0ZDo6Ynl0ZT4gZGF0YSwgc2l6ZV90IGFsaWdubWVudCkKIHsKLSAgICBBU1NFUlQoIShy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZGF0YSkgJSBhbGlnbm1lbnQpKTsKKyAgICBBU1NF
UlQoIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZGF0YS5kYXRhKCkpICUgYWxpZ25tZW50
KSk7CiAKLSAgICB1aW50OF90KiBidWZmZXIgPSBncm93KGFsaWdubWVudCwgc2l6ZSk7Ci0gICAg
bWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7CisgICAgYXV0byogYnVmZmVyID0gZ3JvdyhhbGln
bm1lbnQsIGRhdGEuc2l6ZSgpKTsKKyAgICBtZW1jcHkoYnVmZmVyLCBkYXRhLmRhdGEoKSwgZGF0
YS5zaXplKCkpOwogfQogCiB2b2lkIEVuY29kZXI6OmFkZEF0dGFjaG1lbnQoQXR0YWNobWVudCYm
IGF0dGFjaG1lbnQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5oCShyZXZp
c2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1
ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNl
dC5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBu
YW1lc3BhY2UgSVBDIHsKQEAgLTYwLDcgKzYxLDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgd3Jh
cEZvclRlc3RpbmcoVW5pcXVlUmVmPEVuY29kZXI+JiYpOwogCi0gICAgdm9pZCBlbmNvZGVGaXhl
ZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90LCBzaXplX3QgYWxpZ25tZW50
KTsKKyAgICB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
ZGF0YSwgc2l6ZV90IGFsaWdubWVudCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAg
IHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCBzaXplX3QgYWxpZ25tZW50ID0g
YWxpZ25vZih0eXBlbmFtZSBkZWNsdHlwZShTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0p
Ojp2YWx1ZV90eXBlKSkKKyAgICB7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShhc0J5
dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSksIGFsaWdubWVudCk7CisgICAgfQog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBFbmNvZGVyJiBvcGVyYXRvcjw8KFQmJiB0
KQpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU2hhcmVkQnVmZmVyQ29weS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU2hhcmVkQnVmZmVyQ29w
eS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1No
YXJlZEJ1ZmZlckNvcHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHZvaWQg
U2hhcmVkQnVmZmVyQ29weTo6ZW5jb2RlKEVuY29kZXImIGUKICAgICBpZiAoIWJ1ZmZlclNpemUp
CiAgICAgICAgIHJldHVybjsKICAgICBmb3IgKGF1dG8mIHNlZ21lbnQgOiAqbV9idWZmZXIpCi0g
ICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHNlZ21lbnQuc2VnbWVudC0+ZGF0
YSgpLCBzZWdtZW50LnNlZ21lbnQtPnNpemUoKSwgMSk7CisgICAgICAgIGVuY29kZXIuZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKHNlZ21lbnQuc2VnbWVudC0+Ynl0ZXMoKSwgMSk7CiB9CiAKIHN0ZDo6
b3B0aW9uYWw8U2hhcmVkQnVmZmVyQ29weT4gU2hhcmVkQnVmZmVyQ29weTo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1Db25u
ZWN0aW9uRW5jb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L1N0cmVhbUNvbm5lY3Rpb25FbmNvZGVyLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25FbmNvZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCiAjaW5j
bHVkZSAiTWVzc2FnZU5hbWVzLmgiCisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBJUEMgewpAQCAtNTMsMjIgKzU0LDI4IEBA
IHB1YmxpYzoKIAogICAgIH5TdHJlYW1Db25uZWN0aW9uRW5jb2RlcigpID0gZGVmYXVsdDsKIAot
ICAgIGJvb2wgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVf
dCBzaXplLCBzaXplX3QgYWxpZ25tZW50KQorICAgIGJvb2wgZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhLCBzaXplX3QgYWxpZ25tZW50KQogICAgIHsKICAg
ICAgICAgc2l6ZV90IGJ1ZmZlclBvaW50ZXIgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KG1fYnVmZmVyICsgbV9lbmNvZGVkU2l6ZSkpOwogICAgICAgICBz
aXplX3QgbmV3QnVmZmVyUG9pbnRlciA9IHJvdW5kVXBUb011bHRpcGxlT2YoYWxpZ25tZW50LCBi
dWZmZXJQb2ludGVyKTsKICAgICAgICAgaWYgKG5ld0J1ZmZlclBvaW50ZXIgPCBidWZmZXJQb2lu
dGVyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpbnRwdHJfdCBhbGlnbmVk
U2l6ZSA9IG1fZW5jb2RlZFNpemUgKyAobmV3QnVmZmVyUG9pbnRlciAtIGJ1ZmZlclBvaW50ZXIp
OwotICAgICAgICBpZiAoIXJlc2VydmUoYWxpZ25lZFNpemUsIHNpemUpKQorICAgICAgICBpZiAo
IXJlc2VydmUoYWxpZ25lZFNpemUsIGRhdGEuc2l6ZSgpKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgdWludDhfdCogYnVmZmVyID0gbV9idWZmZXIgKyBhbGlnbmVkU2l6ZTsK
LSAgICAgICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7Ci0gICAgICAgIG1fZW5jb2RlZFNp
emUgPSBhbGlnbmVkU2l6ZSArIHNpemU7CisgICAgICAgIGF1dG8qIGJ1ZmZlciA9IG1fYnVmZmVy
ICsgYWxpZ25lZFNpemU7CisgICAgICAgIG1lbWNweShidWZmZXIsIGRhdGEuZGF0YSgpLCBkYXRh
LnNpemUoKSk7CisgICAgICAgIG1fZW5jb2RlZFNpemUgPSBhbGlnbmVkU2l6ZSArIGRhdGEuc2l6
ZSgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCBzaXplX3QgYWxp
Z25tZW50ID0gYWxpZ25vZihUKSkKKyAgICB7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0
YShhc0J5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSksIGFsaWdubWVudCk7Cisg
ICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBTdHJlYW1Db25uZWN0aW9uRW5j
b2RlciYgb3BlcmF0b3I8PChUJiYgdCkKICAgICB7CiAgICAgICAgIEFyZ3VtZW50Q29kZXI8c3Rk
OjpyZW1vdmVfY29uc3RfdDxzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxUPj4sIHZvaWQ+OjplbmNv
ZGUoKnRoaXMsIHN0ZDo6Zm9yd2FyZDxUPih0KSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJl
ZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
U2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0NCw3ICsxNDQsNyBAQCBzdGF0aWMgdm9pZCBlbmNvZGVTaGFyZWRCdWZmZXIoRW5j
b2RlciYgCiAgICAgLy8gb3ZlciB0aGUgSVBDLiBDb25uZWN0aW9uVW5peC5jcHAgYWxyZWFkeSB1
c2VzIHNoYXJlZCBtZW1vcnkgdG8gc2VuZCBhbnkgSVBDIG1lc3NhZ2UgdGhhdCBpcwogICAgIC8v
IHRvbyBsYXJnZS4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDg1NzEuCiAgICAgZm9yIChjb25zdCBhdXRvJiBlbGVtZW50IDogKmJ1ZmZlcikKLSAgICAgICAg
ZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoZWxlbWVudC5zZWdtZW50LT5kYXRhKCksIGVs
ZW1lbnQuc2VnbWVudC0+c2l6ZSgpLCAxKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoZWxlbWVudC5zZWdtZW50LT5ieXRlcygpLCAxKTsKICNlbHNlCiAgICAgU2hhcmVk
TWVtb3J5OjpIYW5kbGUgaGFuZGxlOwogICAgIGF1dG8gc2hhcmVkTWVtb3J5QnVmZmVyID0gU2hh
cmVkTWVtb3J5Ojpjb3B5QnVmZmVyKCpidWZmZXIpOwpAQCAtMTgwLDcgKzE4MCw3IEBAIHN0YXRp
YyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVTaGEKIAogICAgIFZlY3Rvcjx1aW50OF90
PiBkYXRhOwogICAgIGRhdGEuZ3JvdyhidWZmZXJTaXplKTsKLSAgICBpZiAoIWRlY29kZXIuZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgMSkpCisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShkYXRhLCAxKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgYnVmZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShkYXRh
KSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQXV4aWxpYXJ5UHJvY2Vzc01hYy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQXV4aWxpYXJ5UHJvY2Vz
c01hYy5tbQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL0F1
eGlsaWFyeVByb2Nlc3NNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMyMSw3ICszMjEsNyBAQCBz
dGF0aWMgU3RyaW5nIHNhbmRib3hGaWxlUGF0aChjb25zdCBTdHJpCiAgICAgY3J5cHRvLT5hZGRC
eXRlcyhoZWFkZXIuZGF0YSgpLCBoZWFkZXIubGVuZ3RoKCkpOwogICAgIGF1dG8gaGFzaCA9IGNy
eXB0by0+Y29tcHV0ZUhhc2goKTsKIAotICAgIHJldHVybiBtYWtlU3RyaW5nKGRpcmVjdG9yeVBh
dGgsICIvQ29tcGlsZWRTYW5kYm94KyIsIGJhc2U2NFVSTEVuY29kZWQoaGFzaC5kYXRhKCksIGhh
c2guc2l6ZSgpKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoZGlyZWN0b3J5UGF0aCwgIi9Db21w
aWxlZFNhbmRib3grIiwgYmFzZTY0VVJMRW5jb2RlZChoYXNoKSk7CiB9CiAKIHN0YXRpYyBib29s
IGVuc3VyZVNhbmRib3hDYWNoZURpcmVjdG9yeShjb25zdCBTYW5kYm94SW5mbyYgaW5mbykKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9XZWJDb3JlQXJndW1lbnRDb2RlcnNXaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9XZWJDb3JlQXJndW1lbnRD
b2RlcnNXaW4uY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC93
aW4vV2ViQ29yZUFyZ3VtZW50Q29kZXJzV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTIg
KzUxLDEyIEBAIHN0ZDo6b3B0aW9uYWw8Rm9udEF0dHJpYnV0ZXM+IEFyZ3VtZW50Q28KIHRlbXBs
YXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8TE9HRk9OVD4gewogICAgIHN0YXRpYyB2b2lkIGVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBMT0dGT05UJiBsb2dGb250KQogICAgIHsKLSAg
ICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OF90Kj4oJmxvZ0ZvbnQpLCBzaXplb2YgbG9nRm9udCwgMSk7CisgICAgICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmbG9nRm9udCwgMSB9LCAxKTsKICAgICB9
CiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TE9HRk9OVD4gZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCiAgICAgewogICAgICAgICBMT0dGT05UIGxvZ0ZvbnQ7Ci0gICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJmxvZ0Zv
bnQpLCBzaXplb2YobG9nRm9udCksIDEpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4
ZWRMZW5ndGhEYXRhKFNwYW4geyAmbG9nRm9udCwgMSB9LCAxKSkKICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIHJldHVybiBsb2dGb250OwogICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlz
dFN0b3JlLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDE4
ICsxMzEsMjAgQEAgc3RhdGljIFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhIGVuY29kZQogICAg
IGVuY29kZXIgPDwgbWV0YURhdGEuY29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNvZGVTaXplOwogICAg
IGVuY29kZXIgPDwgbWV0YURhdGEuY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluOwogCi0gICAg
QVNTRVJUKGVuY29kZXIuYnVmZmVyU2l6ZSgpID09IENvbnRlbnRSdWxlTGlzdEZpbGVIZWFkZXJT
aXplKTsKLSAgICByZXR1cm4gV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGEoZW5jb2Rlci5idWZm
ZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOworICAgIEFTU0VSVChlbmNvZGVyLmJ1ZmZlcigp
LnNpemUoKSA9PSBDb250ZW50UnVsZUxpc3RGaWxlSGVhZGVyU2l6ZSk7CisgICAgcmV0dXJuIFdl
YktpdDo6TmV0d29ya0NhY2hlOjpEYXRhIHsgZW5jb2Rlci5idWZmZXIoKSB9OwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGdldERhdGEoY29uc3QgVCYsIGNvbnN0IEZ1bmN0aW9uPGJv
b2woY29uc3QgdWludDhfdCosIHNpemVfdCk+Jik7Ci10ZW1wbGF0ZTw+IHZvaWQgZ2V0RGF0YShj
b25zdCBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YSYgZGF0YSwgY29uc3QgRnVuY3Rpb248Ym9v
bChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIGZ1bmN0aW9uKQordGVtcGxhdGU8dHlwZW5hbWUg
VD4gdm9pZCBnZXREYXRhKGNvbnN0IFQmLCBjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qg
c3RkOjpieXRlPik+Jik7CisKK3RlbXBsYXRlPD4gdm9pZCBnZXREYXRhKGNvbnN0IFdlYktpdDo6
TmV0d29ya0NhY2hlOjpEYXRhJiBkYXRhLCBjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qg
c3RkOjpieXRlPik+JiBmdW5jdGlvbikKIHsKICAgICBkYXRhLmFwcGx5KGZ1bmN0aW9uKTsKIH0K
LXRlbXBsYXRlPD4gdm9pZCBnZXREYXRhKGNvbnN0IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlciYgZGF0
YSwgY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIGZ1bmN0aW9u
KQorCit0ZW1wbGF0ZTw+IHZvaWQgZ2V0RGF0YShjb25zdCBXZWJDb3JlOjpTaGFyZWRCdWZmZXIm
IGRhdGEsIGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mIGZ1bmN0
aW9uKQogewotICAgIGZ1bmN0aW9uKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgZnVu
Y3Rpb24oZGF0YS5ieXRlcygpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTE1MCwx
MyArMTUyLDEzIEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPENvbnRlbnRSdWxlTGlzdE1ldGEKIHsK
ICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKICAgICBDb250ZW50UnVsZUxpc3RNZXRhRGF0YSBt
ZXRhRGF0YTsKLSAgICBnZXREYXRhKGZpbGVEYXRhLCBbJm1ldGFEYXRhLCAmc3VjY2VzcywgJmZp
bGVEYXRhXShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeworICAgIGdldERhdGEo
ZmlsZURhdGEsIFsmbWV0YURhdGEsICZzdWNjZXNzLCAmZmlsZURhdGFdKFNwYW48Y29uc3Qgc3Rk
OjpieXRlPiBkYXRhKSB7CiAgICAgICAgIC8vIFRoZSBmaWxlIGRhdGEgc2hvdWxkIGJlIG1hcHBl
ZCBpbnRvIG9uZSBjb250aW51b3VzIG1lbW9yeSBzZWdtZW50IHNvIHRoZSBzaXplCiAgICAgICAg
IC8vIHBhc3NlZCB0byB0aGUgYXBwbGllciBzaG91bGQgYWx3YXlzIGVxdWFsIHRoZSBkYXRhIHNp
emUuCi0gICAgICAgIGlmIChzaXplICE9IGZpbGVEYXRhLnNpemUoKSkKKyAgICAgICAgaWYgKGRh
dGEuc2l6ZSgpICE9IGZpbGVEYXRhLnNpemUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YSwgc2l6ZSk7
CisgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlciB7IGRhdGEgfTsKICAg
ICAgICAgCiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IHZlcnNpb247CiAgICAgICAg
IGRlY29kZXIgPj4gdmVyc2lvbjsKQEAgLTIyOCw4ICsyMzAsOCBAQCBzdGF0aWMgc3RkOjpvcHRp
b25hbDxNYXBwZWREYXRhPiBvcGVuQW5kCiBzdGF0aWMgYm9vbCB3cml0ZURhdGFUb0ZpbGUoY29u
c3QgV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGEmIGZpbGVEYXRhLCBQbGF0Zm9ybUZpbGVIYW5k
bGUgZmQpCiB7CiAgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKLSAgICBmaWxlRGF0YS5hcHBseShb
ZmQsICZzdWNjZXNzXShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgewotICAgICAg
ICBpZiAod3JpdGVUb0ZpbGUoZmQsIGRhdGEsIHNpemUpID09IC0xKSB7CisgICAgZmlsZURhdGEu
YXBwbHkoW2ZkLCAmc3VjY2Vzc10oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpIHsKKyAgICAg
ICAgaWYgKHdyaXRlVG9GaWxlKGZkLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpID09IC0xKSB7
CiAgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tX
ZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVu
dGljYXRpb25QYW5lbC5tbQkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBAQAogI2ltcG9y
dCA8cGFsL2NyeXB0by9DcnlwdG9EaWdlc3QuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgog
I2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1NwYW5Db2NvYS5o
PgogI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9C
YXNlNjQuaD4KIApAQCAtNzAsNyArNzEsNyBAQCBzdGF0aWMgUmV0YWluUHRyPE5TRGF0YT4gcHJv
ZHVjZUNsaWVudERhCiAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpAIndlYmF1dGhuLmdl
dCIgZm9yS2V5OkAidHlwZSJdOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgW2RpY3Rpb25h
cnkgc2V0T2JqZWN0OmJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNoYWxsZW5nZS5ieXRlcywgY2hh
bGxlbmdlLmxlbmd0aCkgZm9yS2V5OkAiY2hhbGxlbmdlIl07CisgICAgW2RpY3Rpb25hcnkgc2V0
T2JqZWN0OmJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGFzQnl0ZXMoY2hhbGxlbmdlKSkgZm9yS2V5
OkAiY2hhbGxlbmdlIl07CiAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0Om9yaWdpbiBmb3JLZXk6
QCJvcmlnaW4iXTsKIAogICAgIHJldHVybiBbTlNKU09OU2VyaWFsaXphdGlvbiBkYXRhV2l0aEpT
T05PYmplY3Q6ZGljdGlvbmFyeS5nZXQoKSBvcHRpb25zOk5TSlNPTldyaXRpbmdTb3J0ZWRLZXlz
IGVycm9yOm5pbF07CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNh
dGlvbi9Db2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3IubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9y
Lm1tCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRo
ZW50aWNhdGlvbi9Db2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3IubW0JKHdvcmtpbmcgY29weSkKQEAg
LTg1LDcgKzg1LDcgQEAgc3RhdGljIGlubGluZSBIYXNoU2V0PFN0cmluZz4gcHJvZHVjZUhhcwog
ICAgIEhhc2hTZXQ8U3RyaW5nPiByZXN1bHQ7CiAgICAgZm9yIChhdXRvJiBjcmVkZW50aWFsRGVz
Y3JpcHRvciA6IGNyZWRlbnRpYWxEZXNjcmlwdG9ycykgewogICAgICAgICBpZiAoZW1wdHlUcmFu
c3BvcnRzT3JDb250YWluKGNyZWRlbnRpYWxEZXNjcmlwdG9yLnRyYW5zcG9ydHMsIEF1dGhlbnRp
Y2F0b3JUcmFuc3BvcnQ6OkludGVybmFsKSAmJiBjcmVkZW50aWFsRGVzY3JpcHRvci50eXBlID09
IFB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkgJiYgY3JlZGVudGlhbERlc2NyaXB0
b3IuaWRWZWN0b3Iuc2l6ZSgpID09IGNyZWRlbnRpYWxJZExlbmd0aCkKLSAgICAgICAgICAgIHJl
c3VsdC5hZGQoYmFzZTY0RW5jb2RlVG9TdHJpbmcoY3JlZGVudGlhbERlc2NyaXB0b3IuaWRWZWN0
b3IuZGF0YSgpLCBjcmVkZW50aWFsRGVzY3JpcHRvci5pZFZlY3Rvci5zaXplKCkpKTsKKyAgICAg
ICAgICAgIHJlc3VsdC5hZGQoYmFzZTY0RW5jb2RlVG9TdHJpbmcoY3JlZGVudGlhbERlc2NyaXB0
b3IuaWRWZWN0b3IpKTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTIzMyw3ICsy
MzMsNyBAQCB2b2lkIExvY2FsQXV0aGVudGljYXRvcjo6bWFrZUNyZWRlbnRpYWwoCiAgICAgICAg
IGlmIChub3RGb3VuZCAhPSBtX2V4aXN0aW5nQ3JlZGVudGlhbHMuZmluZE1hdGNoaW5nKFsmZXhj
bHVkZUNyZWRlbnRpYWxJZHNdIChhdXRvJiBjcmVkZW50aWFsKSB7CiAgICAgICAgICAgICBhdXRv
KiByYXdJZCA9IGNyZWRlbnRpYWwtPnJhd0lkKCk7CiAgICAgICAgICAgICBBU1NFUlQocmF3SWQp
OwotICAgICAgICAgICAgcmV0dXJuIGV4Y2x1ZGVDcmVkZW50aWFsSWRzLmNvbnRhaW5zKGJhc2U2
NEVuY29kZVRvU3RyaW5nKHJhd0lkLT5kYXRhKCksIHJhd0lkLT5ieXRlTGVuZ3RoKCkpKTsKKyAg
ICAgICAgICAgIHJldHVybiBleGNsdWRlQ3JlZGVudGlhbElkcy5jb250YWlucyhiYXNlNjRFbmNv
ZGVUb1N0cmluZyhyYXdJZC0+Ynl0ZXMoKSkpOwogICAgICAgICB9KSkgewogICAgICAgICAgICAg
cmVjZWl2ZUV4Y2VwdGlvbih7IE5vdEFsbG93ZWRFcnJvciwgIkF0IGxlYXN0IG9uZSBjcmVkZW50
aWFsIG1hdGNoZXMgYW4gZW50cnkgb2YgdGhlIGV4Y2x1ZGVDcmVkZW50aWFscyBsaXN0IGluIHRo
ZSBwbGF0Zm9ybSBhdHRhY2hlZCBhdXRoZW50aWNhdG9yLiJfcyB9LCBXZWJBdXRoZW50aWNhdGlv
blN0YXR1czo6TEFFeGNsdWRlQ3JlZGVudGlhbHNNYXRjaGVkKTsKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTUxMCw3ICs1MTAsNyBAQCB2b2lkIExvY2FsQXV0aGVudGljYXRvcjo6Z2V0QXNzZXJ0
aW9uKCkKICAgICAgICAgfQogCiAgICAgICAgIGF1dG8qIHJhd0lkID0gY3JlZGVudGlhbC0+cmF3
SWQoKTsKLSAgICAgICAgaWYgKGFsbG93Q3JlZGVudGlhbElkcy5jb250YWlucyhiYXNlNjRFbmNv
ZGVUb1N0cmluZyhyYXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgpKSkpCisgICAgICAg
IGlmIChhbGxvd0NyZWRlbnRpYWxJZHMuY29udGFpbnMoYmFzZTY0RW5jb2RlVG9TdHJpbmcocmF3
SWQtPmJ5dGVzKCkpKSkKICAgICAgICAgICAgIGFzc2VydGlvblJlc3BvbnNlcy51bmNoZWNrZWRB
cHBlbmQoY3JlZGVudGlhbC5jb3B5UmVmKCkpOwogICAgIH0KICAgICBpZiAoYXNzZXJ0aW9uUmVz
cG9uc2VzLmlzRW1wdHkoKSkgewpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0
aGVudGljYXRpb24vTW9jay9Nb2NrTG9jYWxDb25uZWN0aW9uLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0xvY2FsQ29u
bmVjdGlvbi5tbQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViQXV0aGVudGljYXRpb24vTW9jay9Nb2NrTG9jYWxDb25uZWN0aW9uLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjIsNyArMTYyLDcgQEAgdm9pZCBNb2NrTG9jYWxDb25uZWN0aW9uOjpmaWx0ZXJS
ZXNwb25zZQogICAgIGZvciAoOyBpdHIgIT0gcmVzcG9uc2VzLmVuZCgpOyArK2l0cikgewogICAg
ICAgICBhdXRvKiByYXdJZCA9IGl0ci0+Z2V0KCkucmF3SWQoKTsKICAgICAgICAgQVNTRVJUKHJh
d0lkKTsKLSAgICAgICAgYXV0byByYXdJZEJhc2U2NCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKHJh
d0lkLT5kYXRhKCksIHJhd0lkLT5ieXRlTGVuZ3RoKCkpOworICAgICAgICBhdXRvIHJhd0lkQmFz
ZTY0ID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcocmF3SWQtPmJ5dGVzKCkpOwogICAgICAgICBpZiAo
cmF3SWRCYXNlNjQgPT0gcHJlZmVycmVkQ3JlZGVudGlhbElkQmFzZTY0KQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL0xlZ2FjeVNl
c3Npb25TdGF0ZUNvZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvbWFjL0xlZ2FjeVNlc3Npb25TdGF0ZUNvZGluZy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjksNyArMTI5LDcgQEAgcHVibGljOgogICAgICAgICAqdGhp
cyA8PCBsZW5ndGg7CiAKICAgICAgICAgKnRoaXMgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGxl
bmd0aCAqIHNpemVvZihVQ2hhcikpOwotICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzKCkuZ2V0KCkpLCBsZW5ndGggKiBzaXplb2YoVUNoYXIpLCBhbGlnbm9mKFVD
aGFyKSk7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgU3RyaW5nVmlldyh2
YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCkuZ2V0KCksIGxlbmd0aCB9KTsKIAogICAgICAg
ICByZXR1cm4gKnRoaXM7CiAgICAgfQpAQCAtMTM3LDcgKzEzNyw3IEBAIHB1YmxpYzoKICAgICBI
aXN0b3J5RW50cnlEYXRhRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBWZWN0b3I8dWludDhfdD4m
IHZhbHVlKQogICAgIHsKICAgICAgICAgKnRoaXMgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZh
bHVlLnNpemUoKSk7Ci0gICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YSh2YWx1ZS5kYXRhKCks
IHZhbHVlLnNpemUoKSwgMSk7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YSh2YWx1ZSwg
MSk7CiAKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KQEAgLTE0NSw3ICsxNDUsNyBAQCBw
dWJsaWM6CiAgICAgSGlzdG9yeUVudHJ5RGF0YUVuY29kZXImIG9wZXJhdG9yPDwoY29uc3QgVmVj
dG9yPGNoYXI+JiB2YWx1ZSkKICAgICB7CiAgICAgICAgICp0aGlzIDw8IHN0YXRpY19jYXN0PHVp
bnQ2NF90Pih2YWx1ZS5zaXplKCkpOwotICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4odmFsdWUuZGF0YSgpKSwgdmFsdWUuc2l6ZSgp
LCAxKTsKKyAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHZhbHVlLCAxKTsKIAogICAgICAg
ICByZXR1cm4gKnRoaXM7CiAgICAgfQpAQCAtMjA2LDE3ICsyMDYsMjMgQEAgcHJpdmF0ZToKICAg
ICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19hcml0aG1ldGljPFR5cGU+Ojp2YWx1
ZSwgIiIpOwogCi0gICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0
PHVpbnQ4X3QqPigmdmFsdWUpLCBzaXplb2YodmFsdWUpLCBzaXplb2YodmFsdWUpKTsKKyAgICAg
ICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmdmFsdWUsIDEgfSwgc2l6ZW9mKHZhbHVl
KSk7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKLSAgICB2b2lkIGVuY29kZUZpeGVk
TGVuZ3RoRGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgYWxp
Z25tZW50KQorICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48Y29uc3Qgc3RkOjpi
eXRlPiBkYXRhLCB1bnNpZ25lZCBhbGlnbm1lbnQpCiAgICAgewotICAgICAgICBSRUxFQVNFX0FT
U0VSVChkYXRhIHx8ICFzaXplKTsKLSAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KGRhdGEpICUgYWxpZ25tZW50KSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRh
dGEuZGF0YSgpIHx8ICFkYXRhLnNpemUoKSk7CisgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90PihkYXRhLmRhdGEoKSkgJSBhbGlnbm1lbnQpKTsKIAotICAgICAgICB1
aW50OF90KiBidWZmZXIgPSBncm93KGFsaWdubWVudCwgc2l6ZSk7Ci0gICAgICAgIG1lbWNweShi
dWZmZXIsIGRhdGEsIHNpemUpOworICAgICAgICBhdXRvKiBidWZmZXIgPSBncm93KGFsaWdubWVu
dCwgZGF0YS5zaXplKCkpOworICAgICAgICBtZW1jcHkoYnVmZmVyLCBkYXRhLmRhdGEoKSwgZGF0
YS5zaXplKCkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBl
bmNvZGVGaXhlZExlbmd0aERhdGEoVCYmIGRhdGEsIHNpemVfdCBhbGlnbm1lbnQgPSBhbGlnbm9m
KFQpKQorICAgIHsKKyAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGFzQnl0ZXMoU3BhbiB7
IHN0ZDo6Zm9yd2FyZDxUPihkYXRhKSB9KSwgYWxpZ25tZW50KTsKICAgICB9CiAKICAgICB1aW50
OF90KiBncm93KHVuc2lnbmVkIGFsaWdubWVudCwgc2l6ZV90IHNpemUpCkBAIC02MDEsNyArNjA3
LDcgQEAgcHVibGljOgogCiAgICAgICAgIFVDaGFyKiBidWZmZXI7CiAgICAgICAgIGF1dG8gc3Ry
aW5nID0gU3RyaW5nOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICAg
ICAgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1ZmZl
ciksIGxlbmd0aCAqIHNpemVvZihVQ2hhciksIGFsaWdub2YoVUNoYXIpKTsKKyAgICAgICAgZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBidWZmZXIsIGxlbmd0aCB9LCBhbGlnbm9mKFVDaGFy
KSk7CiAKICAgICAgICAgdmFsdWUgPSBzdHJpbmc7CiAgICAgICAgIHJldHVybiAqdGhpczsKQEAg
LTczNywxNyArNzQzLDIzIEBAIHByaXZhdGU6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19hcml0aG1ldGljPFR5cGU+Ojp2YWx1ZSwgIiIpOwogICAgICAgICB2YWx1ZSA9IFR5cGUoKTsK
IAotICAgICAgICBkZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4oJnZhbHVlKSwgc2l6ZW9mKHZhbHVlKSwgc2l6ZW9mKHZhbHVlKSk7CisgICAgICAgIGRlY29k
ZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJnZhbHVlLCAxIH0sIHNpemVvZih2YWx1ZSkpOwogICAg
ICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCi0gICAgdm9pZCBkZWNvZGVGaXhlZExlbmd0aERh
dGEodWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGFsaWdubWVudCkKKyAgICB2
b2lkIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPHN0ZDo6Ynl0ZT4gZGF0YSwgdW5zaWduZWQg
YWxpZ25tZW50KQogICAgIHsKLSAgICAgICAgaWYgKCFhbGlnbkJ1ZmZlclBvc2l0aW9uKGFsaWdu
bWVudCwgc2l6ZSkpCisgICAgICAgIGlmICghYWxpZ25CdWZmZXJQb3NpdGlvbihhbGlnbm1lbnQs
IGRhdGEuc2l6ZSgpKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBtZW1jcHkoZGF0
YSwgbV9idWZmZXIsIHNpemUpOwotICAgICAgICBtX2J1ZmZlciArPSBzaXplOworICAgICAgICBt
ZW1jcHkoZGF0YS5kYXRhKCksIG1fYnVmZmVyLCBkYXRhLnNpemUoKSk7CisgICAgICAgIG1fYnVm
ZmVyICs9IGRhdGEuc2l6ZSgpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Cisg
ICAgdm9pZCBkZWNvZGVGaXhlZExlbmd0aERhdGEoVCYmIGRhdGEsIHNpemVfdCBhbGlnbm1lbnQp
CisgICAgeworICAgICAgICBkZWNvZGVGaXhlZExlbmd0aERhdGEoYXNXcml0YWJsZUJ5dGVzKFNw
YW4geyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSksIGFsaWdubWVudCk7CiAgICAgfQogCiAgICAg
Ym9vbCBhbGlnbkJ1ZmZlclBvc2l0aW9uKHVuc2lnbmVkIGFsaWdubWVudCwgc2l6ZV90IHNpemUp
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRDaGFubmVs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJT
b2NrZXRDaGFubmVsLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5
LDggKzU5LDggQEAgTmV0d29ya1NlbmRRdWV1ZSBXZWJTb2NrZXRDaGFubmVsOjpjcmVhdAogICAg
ICAgICBjaGFubmVsLm5vdGlmeVNlbmRGcmFtZShXZWJTb2NrZXRGcmFtZTo6T3BDb2RlOjpPcENv
ZGVUZXh0LCB1dGY4U3RyaW5nLmRhdGFBc1VJbnQ4UHRyKCksIHV0ZjhTdHJpbmcubGVuZ3RoKCkp
OwogICAgICAgICBjaGFubmVsLnNlbmRNZXNzYWdlKE1lc3NhZ2VzOjpOZXR3b3JrU29ja2V0Q2hh
bm5lbDo6U2VuZFN0cmluZyB7IElQQzo6RGF0YVJlZmVyZW5jZSB7IHV0ZjhTdHJpbmcuZGF0YUFz
VUludDhQdHIoKSwgdXRmOFN0cmluZy5sZW5ndGgoKSB9IH0sIHV0ZjhTdHJpbmcubGVuZ3RoKCkp
OwogICAgIH0sIFsmY2hhbm5lbF0oYXV0byYgc3BhbikgewotICAgICAgICBjaGFubmVsLm5vdGlm
eVNlbmRGcmFtZShXZWJTb2NrZXRGcmFtZTo6T3BDb2RlOjpPcENvZGVCaW5hcnksIHNwYW4uZGF0
YSgpLCBzcGFuLnNpemUoKSk7Ci0gICAgICAgIGNoYW5uZWwuc2VuZE1lc3NhZ2UoTWVzc2FnZXM6
Ok5ldHdvcmtTb2NrZXRDaGFubmVsOjpTZW5kRGF0YSB7IElQQzo6RGF0YVJlZmVyZW5jZSB7IHNw
YW4uZGF0YSgpLCBzcGFuLnNpemUoKSB9IH0sIHNwYW4uc2l6ZSgpKTsKKyAgICAgICAgY2hhbm5l
bC5ub3RpZnlTZW5kRnJhbWUoV2ViU29ja2V0RnJhbWU6Ok9wQ29kZTo6T3BDb2RlQmluYXJ5LCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzcGFuLmRhdGEoKSksIHNwYW4uc2l6ZSgp
KTsKKyAgICAgICAgY2hhbm5lbC5zZW5kTWVzc2FnZShNZXNzYWdlczo6TmV0d29ya1NvY2tldENo
YW5uZWw6OlNlbmREYXRhIHsgSVBDOjpEYXRhUmVmZXJlbmNlIHsgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50OF90Kj4oc3Bhbi5kYXRhKCkpLCBzcGFuLnNpemUoKSB9IH0sIHNwYW4uc2l6ZSgp
KTsKICAgICB9LCBbJmNoYW5uZWxdKEV4Y2VwdGlvbkNvZGUgZXhjZXB0aW9uQ29kZSkgewogICAg
ICAgICBhdXRvIGNvZGUgPSBzdGF0aWNfY2FzdDxpbnQ+KGV4Y2VwdGlvbkNvZGUpOwogICAgICAg
ICBjaGFubmVsLmZhaWwobWFrZVN0cmluZygiRmFpbGVkIHRvIGxvYWQgQmxvYjogZXhjZXB0aW9u
IGNvZGUgPSAiLCBjb2RlKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9JUENUZXN0aW5nQVBJLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY5MSw3ICs2OTEsNyBAQCBzdGF0aWMgYm9vbCBlbmNvZGVUeXBlZEFycmF5KElQQzo6
RW5jb2RlCiAgICAgaWYgKCFkYXRhLmJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50OF90Kj4oZGF0YS5idWZmZXIpLCBkYXRhLmxlbmd0aCwgMSk7CisgICAgZW5jb2Rlci5lbmNv
ZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgc3RkOjpieXRl
Kj4oZGF0YS5idWZmZXIpLCBkYXRhLmxlbmd0aCB9LCAxKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9FbnZpcm9ubWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9FbnZpcm9ubWVudC5jcHAJKHJldmlzaW9uIDI3
ODgwOSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRW52aXJvbm1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTYsNyArMTU2LDcgQEAgYm9vbCBFbnZpcm9ubWVudDo6Y29tcHV0ZUlzRGVi
dWdIZWFwRW5hYgogICAgIHJldHVybiB0cnVlOwogI2VuZGlmCiAKLSAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKSW5kZXg6IFRv
b2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3
ODgwOSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBA
CisyMDIxLTA2LTExICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2Fpcm8v
UGl4ZWxEdW1wU3VwcG9ydENhaXJvLmNwcDoKKyAgICAgICAgKGNvbXB1dGVTSEExSGFzaFN0cmlu
Z0ZvckJpdG1hcENvbnRleHQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVt
cFN1cHBvcnRDRy5jcHA6CisgICAgICAgIChjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JCaXRtYXBD
b250ZXh0KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9CbG9vbUZpbHRlci5j
cHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpnZW5lcmF0ZVJhbmRvbURpZ2VzdHMpOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2NvY29hL0hU
VFBTZXJ2ZXIubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9uOjp3ZWJTb2Nr
ZXRIYW5kc2hha2UpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvY2Fpcm8vVGVzdEludm9j
YXRpb25DYWlyby5jcHA6CisgICAgICAgIChXVFI6OmNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckNh
aXJvU3VyZmFjZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlv
bkNHLmNwcDoKKyAgICAgICAgKFdUUjo6Y29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQ29udGV4dCk6
CisKIDIwMjEtMDYtMTEgIEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+
CiAKICAgICAgICAgW1dpbl1bRHVtcFJlbmRlclRyZWVdIC0tbm8tdGltZW91dCBzd2l0Y2ggZG9l
c24ndCB3b3JrCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBw
b3J0Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NhaXJvL1Bp
eGVsRHVtcFN1cHBvcnRDYWlyby5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2NhaXJvL1BpeGVsRHVtcFN1cHBvcnRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JCaXRtYXBDb250
ZQogICAgIFNIQTEgc2hhMTsKICAgICB1bnNpZ25lZCBjaGFyKiBiaXRtYXBEYXRhID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFj
ZSkpOwogICAgIGZvciAodW5zaWduZWQgcm93ID0gMDsgcm93IDwgcGl4ZWxzSGlnaDsgcm93Kysp
IHsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lkZSk7Cisg
ICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlIH0p
OwogICAgICAgICBiaXRtYXBEYXRhICs9IGJ5dGVzUGVyUm93OwogICAgIH0KICAgICBTSEExOjpE
aWdlc3QgaGFzaDsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBv
cnRDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1w
U3VwcG9ydENHLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2cvUGl4ZWxEdW1wU3VwcG9ydENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTQgKzg4LDE0
IEBAIHZvaWQgY29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQml0bWFwQ29udGUKICAgICAgICAgICAg
IHVpbnQzMl90IGJ1ZmZlcltwaXhlbHNXaWRlXTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
Y29sdW1uID0gMDsgY29sdW1uIDwgcGl4ZWxzV2lkZTsgY29sdW1uKyspCiAgICAgICAgICAgICAg
ICAgYnVmZmVyW2NvbHVtbl0gPSBPU1JlYWRMaXR0bGVJbnQzMihiaXRtYXBEYXRhLCA0ICogY29s
dW1uKTsKLSAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50OF90Kj4oYnVmZmVyKSwgNCAqIHBpeGVsc1dpZGUpOworICAgICAgICAgICAgc2hhMS5hZGRC
eXRlcyhTcGFuIHsgYnVmZmVyLCBwaXhlbHNXaWRlIH0pOwogICAgICAgICAgICAgYml0bWFwRGF0
YSArPSBieXRlc1BlclJvdzsKICAgICAgICAgfQogICAgIH0gZWxzZQogI2VuZGlmCiAgICAgewog
ICAgICAgICBmb3IgKHVuc2lnbmVkIHJvdyA9IDA7IHJvdyA8IHBpeGVsc0hpZ2g7IHJvdysrKSB7
Ci0gICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlKTsK
KyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IGJpdG1hcERhdGEsIDQgKiBwaXhlbHNX
aWRlIH0pOwogICAgICAgICAgICAgYml0bWFwRGF0YSArPSBieXRlc1BlclJvdzsKICAgICAgICAg
fQogICAgIH0KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0Jsb29tRmlsdGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9CbG9vbUZp
bHRlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL0Jsb29tRmlsdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBzdGF0
aWMgVmVjdG9yPFNIQTE6OkRpZ2VzdD4gZ2VuZXJhdGVSYW5kCiAgICAgU0hBMSBzaGExOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBoYXNoQ291bnQ7ICsraSkgewogICAgICAgICBkb3Vi
bGUgcmFuZG9tID0gcmFuZG9tTnVtYmVyKCk7Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRl
cnByZXRfY2FzdDx1aW50OF90Kj4oJnJhbmRvbSksIHNpemVvZihkb3VibGUpKTsKKyAgICAgICAg
c2hhMS5hZGRCeXRlcyhTcGFuIHsgJnJhbmRvbSwgMSB9KTsKICAgICAgICAgU0hBMTo6RGlnZXN0
IGRpZ2VzdDsKICAgICAgICAgc2hhMS5jb21wdXRlSGFzaChkaWdlc3QpOwogICAgICAgICBoYXNo
ZXMuYXBwZW5kKGRpZ2VzdCk7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9G
aWxlU3lzdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9GaWxlU3lzdGVtLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw4ICsxMzMs
OCBAQCBURVNUX0YoRmlsZVN5c3RlbVRlc3QsIE1hcHBpbmdFeGlzdGluZ0ZpCiAgICAgRmlsZVN5
c3RlbTo6TWFwcGVkRmlsZURhdGEgbWFwcGVkRmlsZURhdGEodGVtcEZpbGVQYXRoKCksIEZpbGVT
eXN0ZW06Ok1hcHBlZEZpbGVNb2RlOjpTaGFyZWQsIHN1Y2Nlc3MpOwogICAgIEVYUEVDVF9UUlVF
KHN1Y2Nlc3MpOwogICAgIEVYUEVDVF9UUlVFKCEhbWFwcGVkRmlsZURhdGEpOwotICAgIEVYUEVD
VF9UUlVFKG1hcHBlZEZpbGVEYXRhLnNpemUoKSA9PSBzdHJsZW4oRmlsZVN5c3RlbVRlc3REYXRh
KSk7Ci0gICAgRVhQRUNUX1RSVUUoc3RybnN0cihGaWxlU3lzdGVtVGVzdERhdGEsIHN0YXRpY19j
YXN0PGNvbnN0IGNoYXIqPihtYXBwZWRGaWxlRGF0YS5kYXRhKCkpLCBtYXBwZWRGaWxlRGF0YS5z
aXplKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShtYXBwZWRGaWxlRGF0YS5kYXRhKCkuc2l6ZSgpID09
IHN0cmxlbihGaWxlU3lzdGVtVGVzdERhdGEpKTsKKyAgICBFWFBFQ1RfVFJVRShzdHJuc3RyKEZp
bGVTeXN0ZW1UZXN0RGF0YSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4obWFwcGVkRmls
ZURhdGEuZGF0YSgpLmRhdGEoKSksIG1hcHBlZEZpbGVEYXRhLmRhdGEoKS5zaXplKCkpKTsKIH0K
IAogVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBNYXBwaW5nRXhpc3RpbmdFbXB0eUZpbGUpCkluZGV4
OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TSEExLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TSEExLmNwcAkocmV2aXNpb24gMjc4ODA5KQor
KysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU0hBMS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDcgKzM4LDcgQEAgc3RhdGljIHZvaWQgZXhwZWN0U0hBMShDU3RyaW5nIGlucHV0LCBp
bgogewogICAgIFNIQTEgc2hhMTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcGVhdDsgKytp
KQotICAgICAgICBzaGExLmFkZEJ5dGVzKGlucHV0KTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhp
bnB1dC5ieXRlcygpKTsKICAgICBDU3RyaW5nIGFjdHVhbCA9IHNoYTEuY29tcHV0ZUhleERpZ2Vz
dCgpOwogCiAgICAgQVNTRVJUX0VRKGV4cGVjdGVkLmxlbmd0aCgpLCBhY3R1YWwubGVuZ3RoKCkp
OwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbQkocmV2aXNpb24g
Mjc4ODA5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNDAsMTEgKzM0MCwxMSBAQCB2b2lkIENvbm5lY3Rpb246OndlYlNvY2tl
dEhhbmRzaGFrZShDb21wCiAKICAgICAgICAgICAgIGNvbnN0ZXhwciBhdXRvKiB3ZWJTb2NrZXRL
ZXlHVUlEID0gIjI1OEVBRkE1LUU5MTQtNDdEQS05NUNBLUM1QUIwREM4NUIxMSI7CiAgICAgICAg
ICAgICBTSEExIHNoYTE7Ci0gICAgICAgICAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KGtleUJlZ2luKSwga2V5RW5kIC0ga2V5QmVnaW4pOwotICAgICAg
ICAgICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih3ZWJT
b2NrZXRLZXlHVUlEKSwgc3RybGVuKHdlYlNvY2tldEtleUdVSUQpKTsKKyAgICAgICAgICAgIHNo
YTEuYWRkQnl0ZXMoU3BhbiB7IGtleUJlZ2luLCBrZXlFbmQgfSk7CisgICAgICAgICAgICBzaGEx
LmFkZEJ5dGVzKFNwYW4geyB3ZWJTb2NrZXRLZXlHVUlELCBzdHJsZW4od2ViU29ja2V0S2V5R1VJ
RCkgfSk7CiAgICAgICAgICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAgICAgICAgICAgIHNoYTEu
Y29tcHV0ZUhhc2goaGFzaCk7Ci0gICAgICAgICAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJp
bmcoaGFzaC5kYXRhKCksIFNIQTE6Omhhc2hTaXplKTsKKyAgICAgICAgICAgIHJldHVybiBiYXNl
NjRFbmNvZGVUb1N0cmluZyhoYXNoKTsKICAgICAgICAgfTsKIAogICAgICAgICBjb25uZWN0aW9u
LnNlbmQoSFRUUFJlc3BvbnNlKDEwMSwgewpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9j
YWlyby9UZXN0SW52b2NhdGlvbkNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwCShyZXZpc2lvbiAyNzg4MDkp
CisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVTSEEx
SGFzaFN0cmluZ0ZvckNhaXIKICAgICBTSEExIHNoYTE7CiAgICAgdW5zaWduZWQgY2hhciogYml0
bWFwRGF0YSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9kYXRhKHN1cmZhY2UpKTsKICAgICBmb3IgKHNpemVfdCByb3cgPSAwOyByb3cgPCBwaXhl
bHNIaWdoOyArK3JvdykgewotICAgICAgICBzaGExLmFkZEJ5dGVzKGJpdG1hcERhdGEsIDQgKiBw
aXhlbHNXaWRlKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgYml0bWFwRGF0YSwgNCAq
IHBpeGVsc1dpZGUgfSk7CiAgICAgICAgIGJpdG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7CiAgICAg
fQogICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9j
Zy9UZXN0SW52b2NhdGlvbkNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05NCw3ICs5NCw3IEBAIHZvaWQgY29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQ29udGV4dChDR0MK
ICNlbmRpZgogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCByb3cgPSAwOyByb3cgPCBwaXhl
bHNIaWdoOyByb3crKykgewotICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhiaXRtYXBEYXRhLCA0
ICogcGl4ZWxzV2lkZSk7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyBiaXRtYXBE
YXRhLCA0ICogcGl4ZWxzV2lkZSB9KTsKICAgICAgICAgICAgIGJpdG1hcERhdGEgKz0gYnl0ZXNQ
ZXJSb3c7CiAgICAgICAgIH0KICAgICB9Cg==
</data>
<flag name="commit-queue"
          id="453028"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431289</attachid>
            <date>2021-06-13 14:53:51 -0700</date>
            <delta_ts>2021-06-13 15:55:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226887-20210613145350.patch</filename>
            <type>text/plain</type>
            <size>196868</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBA
CisyMDIxLTA2LTEyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogQVBJL0pTU2NyaXB0Lm1tOgorICAg
ICAgICAoK1tKU1NjcmlwdCBzY3JpcHRPZlR5cGU6bWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTp3
aXRoU291cmNlVVJMOmFuZEJ5dGVjb2RlQ2FjaGU6aW5WaXJ0dWFsTWFjaGluZTplcnJvcjpdKToK
KyAgICAgICAgKC1bSlNTY3JpcHQgcmVhZENhY2hlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHdy
aXRlQ2FjaGU6XSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9ja0hhc2g6OkNvZGVCbG9ja0hhc2gpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHA6CisgICAgICAgIChJbnNw
ZWN0b3I6OmJhY2tlbmRDb21tYW5kc0hhc2gpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZm
ZXIuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJDb250ZW50czo6d3JpdGFibGVCeXRlcyk6
CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyQ29udGVudHM6OmJ5dGVzIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6QXJyYXlCdWZmZXI6OndyaXRhYmxlQnl0ZXMpOgorICAgICAgICAoSlNDOjpBcnJh
eUJ1ZmZlcjo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
Lmg6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6d3JpdGFibGVCeXRlcyk6CisgICAg
ICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRp
bWUvQ2FjaGVQYXlsb2FkLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVQYXlsb2FkOjptYWtlTWFw
cGVkUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6bWFrZU1hbGxvY1BheWxv
YWQpOgorICAgICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6Om1ha2VFbXB0eVBheWxvYWQpOgorICAg
ICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6OkNhY2hlUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNh
Y2hlUGF5bG9hZDo6ZnJlZURhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVQYXlsb2FkLmg6
CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6ZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlUGF5bG9hZDo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6
Q2FjaGVQYXlsb2FkKToKKyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKToKKwogMjAyMS0w
Ni0xMSAgUGF0cmljayBBbmdsZSAgPHBhbmdsZUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogQWRkIGluc3RydW1lbnRhdGlvbiB0byBub2RlIGRlc3RydWN0aW9uIGZvciBJbnNw
ZWN0b3JET01BZ2VudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMTMgKzEzNCwxMyBAQCArIChpbnN0YW5jZXR5cGUpc2Ny
aXB0T2ZUeXBlOihKU1NjcmlwdFR5CiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4g
Y3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJGaWxlIGF0IHBhdGggJUAg
Y291bGQgbm90IGJlIG1hcHBlZC4iLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihzeXN0ZW1QYXRo
KV0sIGVycm9yKTsKIAotICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCkpKQor
ICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmlsZURhdGEuZGF0YSgpLnNpemUoKSkpCiAg
ICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIk5v
dCBhbGwgY2hhcmFjdGVycyBpbiBmaWxlIGF0ICVAIGFyZSBBU0NJSS4iLCBzdGF0aWNfY2FzdDxO
U1N0cmluZyAqPihzeXN0ZW1QYXRoKV0sIGVycm9yKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gYWRv
cHROUyhbW0pTU2NyaXB0IGFsbG9jXSBpbml0XSk7CiAgICAgcmVzdWx0LT5tX3ZpcnR1YWxNYWNo
aW5lID0gdm07CiAgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOwotICAgIHJlc3VsdC0+bV9zb3Vy
Y2UgPSBTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcoYml0d2lzZV9jYXN0
PGNvbnN0IExDaGFyKj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpKSk7CisgICAg
cmVzdWx0LT5tX3NvdXJjZSA9IFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWlu
ZyhiaXR3aXNlX2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmls
ZURhdGEuZGF0YSgpLnNpemUoKSkpOwogICAgIHJlc3VsdC0+bV9tYXBwZWRTb3VyY2UgPSBXVEZN
b3ZlKGZpbGVEYXRhKTsKICAgICByZXN1bHQtPm1fc291cmNlVVJMID0gc291cmNlVVJMOwogICAg
IHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7CkBAIC0xNjgsMjQgKzE2OCwyMyBAQCAt
ICh2b2lkKXJlYWRDYWNoZQogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgY29uc3QgdWludDhfdCogZmlsZURhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihtYXBwZWRGaWxlLmRhdGEoKSk7Ci0gICAgdW5zaWduZWQgZmlsZVRvdGFsU2l6ZSA9IG1h
cHBlZEZpbGUuc2l6ZSgpOworICAgIGF1dG8gZmlsZURhdGEgPSBtYXBwZWRGaWxlLmRhdGEoKTsK
IAogICAgIC8vIEVuc3VyZSB3ZSBhdCBsZWFzdCBoYXZlIGEgU0hBMTo6RGlnZXN0IHRvIHJlYWQu
Ci0gICAgaWYgKGZpbGVUb3RhbFNpemUgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgeworICAgIGlm
IChmaWxlRGF0YS5zaXplKCkgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgewogICAgICAgICBGaWxl
U3lzdGVtOjpkZWxldGVGaWxlKGNhY2hlRmlsZW5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgdW5zaWduZWQgZmlsZURhdGFTaXplID0gZmlsZVRvdGFsU2l6ZSAtIHNpemVvZihT
SEExOjpEaWdlc3QpOworICAgIHVuc2lnbmVkIGZpbGVEYXRhU2l6ZSA9IGZpbGVEYXRhLnNpemUo
KSAtIHNpemVvZihTSEExOjpEaWdlc3QpOwogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFz
aDsKICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhmaWxlRGF0YSwgZmlsZURhdGFT
aXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKGZpbGVEYXRhLmZpcnN0KGZpbGVEYXRhU2l6ZSkpOwog
ICAgIHNoYTEuY29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2VzdCBm
aWxlSGFzaDsKLSAgICBtZW1jcHkoJmZpbGVIYXNoLCBmaWxlRGF0YSArIGZpbGVEYXRhU2l6ZSwg
c2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOworICAgIG1lbWNweSgmZmlsZUhhc2gsIGZpbGVEYXRhLmRh
dGEoKSArIGZpbGVEYXRhU2l6ZSwgc2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOwogCiAgICAgaWYgKGNv
bXB1dGVkSGFzaCAhPSBmaWxlSGFzaCkgewogICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxl
KGNhY2hlRmlsZW5hbWUpOwpAQCAtMzQzLDcgKzM0Miw3IEBAIC0gKEJPT0wpd3JpdGVDYWNoZToo
U3RyaW5nJillcnJvcgogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFzaDsKICAgICBTSEEx
IHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhtX2NhY2hlZEJ5dGVjb2RlLT5kYXRhKCksIG1fY2Fj
aGVkQnl0ZWNvZGUtPnNpemUoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgbV9jYWNoZWRC
eXRlY29kZS0+ZGF0YSgpLCBtX2NhY2hlZEJ5dGVjb2RlLT5zaXplKCkgfSk7CiAgICAgc2hhMS5j
b21wdXRlSGFzaChjb21wdXRlZEhhc2gpOwogICAgIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKHRl
bXBGRCwgY29tcHV0ZWRIYXNoLmRhdGEoKSwgc2l6ZW9mKGNvbXB1dGVkSGFzaCkpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0hhc2guY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgQ29kZUJsb2Nr
SGFzaDo6Q29kZUJsb2NrSGFzaChjb25zdCBTb3VyYwogICAgIEFTU0VSVChzb3VyY2VDb2RlLmxl
bmd0aCgpID49IDApOwogICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhTb3VyY2VDb2RlTGVuZ3Ro
VG9IYXNoID0gNTAwICogTUI7CiAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzb3VyY2VD
b2RlLmxlbmd0aCgpKSA8IG1heFNvdXJjZUNvZGVMZW5ndGhUb0hhc2gpCi0gICAgICAgIHNoYTEu
YWRkQnl0ZXMoc291cmNlQ29kZS50b1VURjgoKSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoc291
cmNlQ29kZS50b1VURjgoKS5ieXRlcygpKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gSnVzdCBo
YXNoIHdpdGggdGhlIGxlbmd0aCBhbmQgc2FtcGxlcyBvZiB0aGUgc291cmNlIHN0cmluZyBpbnN0
ZWFkLgogICAgICAgICBTdHJpbmdWaWV3IHN0ciA9IHNvdXJjZUNvZGUucHJvdmlkZXIoKS0+c291
cmNlKCk7CkBAIC02MiwxMCArNjIsMTAgQEAgQ29kZUJsb2NrSGFzaDo6Q29kZUJsb2NrSGFzaChj
b25zdCBTb3VyYwogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHIubGVuZ3RoKCk7CiAgICAg
ICAgIHVuc2lnbmVkIHN0ZXAgPSAobGVuZ3RoID4+IDEwKSArIDE7CiAKLSAgICAgICAgc2hhMS5h
ZGRCeXRlcyhiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KCZsZW5ndGgpLCBzaXplb2YobGVuZ3RoKSk7
CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZsZW5ndGgsIDEgfSk7CiAgICAgICAgIGRv
IHsKICAgICAgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IHN0cltpbmRleF07Ci0gICAgICAgICAg
ICBzaGExLmFkZEJ5dGVzKGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oJmNoYXJhY3RlciksIHNpemVv
ZihjaGFyYWN0ZXIpKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZjaGFyYWN0
ZXIsIDEgfSk7CiAgICAgICAgICAgICBvbGRJbmRleCA9IGluZGV4OwogICAgICAgICAgICAgaW5k
ZXggKz0gc3RlcDsKICAgICAgICAgfSB3aGlsZSAoaW5kZXggPiBvbGRJbmRleCAmJiBpbmRleCA8
IGxlbmd0aCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VIYXNo
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VI
YXNoLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BhcnNlSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiBQYXJzZUhhc2g6OlBhcnNlSGFzaChjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VD
b2RlKQogewogICAgIFNIQTEgc2hhMTsKLSAgICBzaGExLmFkZEJ5dGVzKHNvdXJjZUNvZGUudG9V
VEY4KCkpOworICAgIHNoYTEuYWRkQnl0ZXMoc291cmNlQ29kZS50b1VURjgoKS5ieXRlcygpKTsK
ICAgICBTSEExOjpEaWdlc3QgZGlnZXN0OwogICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsK
ICAgICB1bnNpZ25lZCBoYXNoID0gZGlnZXN0WzBdIHwgKGRpZ2VzdFsxXSA8PCA4KSB8IChkaWdl
c3RbMl0gPDwgMTYpIHwgKGRpZ2VzdFszXSA8PCAyNCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1JlbW90ZUluc3BlY3RvclV0aWxzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1Jl
bW90ZUluc3BlY3RvclV0aWxzLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgY29uc3QgQ1N0cmluZyYgYmFja2VuZENv
bW1hbmRzSGFzaCgpCiAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSA9IGdfYnl0ZXNfZ2V0X2Rh
dGEoYnl0ZXMuZ2V0KCksICZkYXRhU2l6ZSk7CiAgICAgICAgIEFTU0VSVChkYXRhU2l6ZSk7CiAg
ICAgICAgIFNIQTEgc2hhMTsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhzdGF0aWNfY2FzdDxjb25z
dCB1aW50OF90Kj4oZGF0YSksIGRhdGFTaXplKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFu
IHsgc3RhdGljX2Nhc3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSksIGRhdGFTaXplIH0pOwogICAg
ICAgICBoZXhEaWdlc3QgPSBzaGExLmNvbXB1dGVIZXhEaWdlc3QoKTsKICAgICB9CiAgICAgcmV0
dXJuIGhleERpZ2VzdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogI2luY2x1ZGUgPHd0Zi9QYWNrZWRSZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZl
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtODAsNyAr
ODEsMTAgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBt
X2RhdGEuZ2V0TWF5QmVOdWxsKHNpemVJbkJ5dGVzKCkpOyB9CiAgICAgdW5zaWduZWQgc2l6ZUlu
Qnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX3NpemVJbkJ5dGVzOyB9Ci0gICAgCisKKyAgICBTcGFu
PHN0ZDo6Ynl0ZT4gd3JpdGFibGVCeXRlcygpIHsgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8c3RkOjpi
eXRlKj4oZGF0YSgpKSwgc2l6ZUluQnl0ZXMoKSB9OyB9CisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4geyBzdGF0aWNfY2FzdDxjb25zdCBzdGQ6OmJ5dGUq
PihkYXRhKCkpLCBzaXplSW5CeXRlcygpIH07IH0KKwogICAgIGJvb2wgaXNTaGFyZWQoKSBjb25z
dCB7IHJldHVybiBtX3NoYXJlZDsgfQogICAgIAogcHJpdmF0ZToKQEAgLTEyNyw3ICsxMzEsOSBA
QCBwdWJsaWM6CiAgICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKICAgICBpbmxpbmUgY29uc3Qgdm9p
ZCogZGF0YSgpIGNvbnN0OwogICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7
Ci0gICAgCisgICAgaW5saW5lIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCk7CisgICAg
aW5saW5lIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAgICAgdm9pZCBt
YWtlU2hhcmVkKCk7CiAgICAgdm9pZCBzZXRTaGFyaW5nTW9kZShBcnJheUJ1ZmZlclNoYXJpbmdN
b2RlKTsKICAgICBpbmxpbmUgYm9vbCBpc1NoYXJlZCgpIGNvbnN0OwpAQCAtMTk3LDYgKzIwMywx
NiBAQCB1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJu
IG1fY29udGVudHMuc2l6ZUluQnl0ZXMoKTsKIH0KIAorU3BhbjxzdGQ6OmJ5dGU+IEFycmF5QnVm
ZmVyOjp3cml0YWJsZUJ5dGVzKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZW50cy53cml0YWJsZUJ5
dGVzKCk7Cit9CisKK1NwYW48Y29uc3Qgc3RkOjpieXRlPiBBcnJheUJ1ZmZlcjo6Ynl0ZXMoKSBj
b25zdAoreworICAgIHJldHVybiBtX2NvbnRlbnRzLmJ5dGVzKCk7Cit9CisKIGJvb2wgQXJyYXlC
dWZmZXI6OmlzU2hhcmVkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb250ZW50cy5pc1NoYXJl
ZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZm
ZXJWaWV3LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4Niw5IEBAIHB1
YmxpYzoKIAogICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVM
ZW5ndGg7IH0KIAorICAgIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCkgeyByZXR1cm4g
eyBzdGF0aWNfY2FzdDxzdGQ6OmJ5dGUqPihkYXRhKCkpLCBieXRlTGVuZ3RoKCkgfTsgfQorICAg
IFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0IHsgcmV0dXJuIHsgc3RhdGljX2Nh
c3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSgpKSwgYnl0ZUxlbmd0aCgpIH07IH0KKwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0RGV0YWNoYWJsZShib29sKTsKICAgICBib29sIGlzRGV0
YWNoYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNEZXRhY2hhYmxlOyB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlUGF5bG9hZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsMjcgKzMwLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogCiBD
YWNoZVBheWxvYWQgQ2FjaGVQYXlsb2FkOjptYWtlTWFwcGVkUGF5bG9hZChGaWxlU3lzdGVtOjpN
YXBwZWRGaWxlRGF0YSYmIGRhdGEpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZCh0cnVlLCBk
YXRhLmxlYWtIYW5kbGUoKSwgZGF0YS5zaXplKCkpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQo
dHJ1ZSwgZGF0YS5sZWFrSGFuZGxlKCkpOwogfQogCiBDYWNoZVBheWxvYWQgQ2FjaGVQYXlsb2Fk
OjptYWtlTWFsbG9jUGF5bG9hZChNYWxsb2NQdHI8dWludDhfdCwgVk1NYWxsb2M+JiYgZGF0YSwg
c2l6ZV90IHNpemUpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZChmYWxzZSwgZGF0YS5sZWFr
UHRyKCksIHNpemUpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQoZmFsc2UsIGFzV3JpdGFibGVC
eXRlcyhTcGFuIHsgZGF0YS5sZWFrUHRyKCksIHNpemUgfSkpOwogfQogCiBDYWNoZVBheWxvYWQg
Q2FjaGVQYXlsb2FkOjptYWtlRW1wdHlQYXlsb2FkKCkKIHsKLSAgICByZXR1cm4gQ2FjaGVQYXls
b2FkKHRydWUsIG51bGxwdHIsIDApOworICAgIHJldHVybiBDYWNoZVBheWxvYWQodHJ1ZSwgeyB9
KTsKIH0KIAogQ2FjaGVQYXlsb2FkOjpDYWNoZVBheWxvYWQoQ2FjaGVQYXlsb2FkJiYgb3RoZXIp
CiB7Ci0gICAgbV9tYXBwZWQgPSBvdGhlci5tX21hcHBlZDsKLSAgICBtX3NpemUgPSBvdGhlci5t
X3NpemU7Ci0gICAgbV9kYXRhID0gb3RoZXIubV9kYXRhOwotICAgIG90aGVyLm1fbWFwcGVkID0g
ZmFsc2U7Ci0gICAgb3RoZXIubV9kYXRhID0gbnVsbHB0cjsKLSAgICBvdGhlci5tX3NpemUgPSAw
OworICAgIG1fbWFwcGVkID0gc3RkOjpleGNoYW5nZShvdGhlci5tX21hcHBlZCwgZmFsc2UpOwor
ICAgIG1fZGF0YSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLCB7IH0pOwogfQogCiBDYWNo
ZVBheWxvYWQ6On5DYWNoZVBheWxvYWQoKQpAQCAtNjcsMTIgKzYzLDEzIEBAIENhY2hlUGF5bG9h
ZCYgQ2FjaGVQYXlsb2FkOjpvcGVyYXRvcj0oQ2EKIAogdm9pZCBDYWNoZVBheWxvYWQ6OmZyZWVE
YXRhKCkKIHsKLSAgICBpZiAoIW1fZGF0YSkKKyAgICBpZiAoIW1fZGF0YS5kYXRhKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBpZiAobV9tYXBwZWQpIHsKLSAgICAgICAgRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1fZGF0YSwgbV9zaXplKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZmFzdEZy
ZWUobV9kYXRhKTsKKworICAgIGlmIChtX21hcHBlZCkKKyAgICAgICAgRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1fZGF0YSk7CisgICAgZWxzZQorICAgICAgICBmYXN0RnJlZShtX2RhdGEu
ZGF0YSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHd0Zi9GaWxlU3lz
dGVtLmg+CiAjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MSwyMiArNDIsMjAgQEAgcHVibGljOgogICAgIEpT
X0VYUE9SVF9QUklWQVRFIH5DYWNoZVBheWxvYWQoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBD
YWNoZVBheWxvYWQmIG9wZXJhdG9yPShDYWNoZVBheWxvYWQmJiBvdGhlcik7CiAKLSAgICBjb25z
dCB1aW50OF90KiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBjb25zdCB1aW50OF90KiBkYXRhKCkg
Y29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9kYXRhLmRhdGEoKSk7
IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5zaXplKCk7IH0KIAog
cHJpdmF0ZToKLSAgICBDYWNoZVBheWxvYWQoYm9vbCBtYXBwZWQsIHZvaWQqIGRhdGEsIHNpemVf
dCBzaXplKQorICAgIENhY2hlUGF5bG9hZChib29sIG1hcHBlZCwgU3BhbjxzdGQ6OmJ5dGU+IGRh
dGEpCiAgICAgICAgIDogbV9tYXBwZWQobWFwcGVkKQotICAgICAgICAsIG1fc2l6ZShzaXplKQot
ICAgICAgICAsIG1fZGF0YShzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGF0YSkpCisgICAgICAgICwg
bV9kYXRhKGRhdGEpCiAgICAgewogICAgIH0KIAogICAgIHZvaWQgZnJlZURhdGEoKTsKIAogICAg
IGJvb2wgbV9tYXBwZWQ7Ci0gICAgc2l6ZV90IG1fc2l6ZTsKLSAgICB1aW50OF90KiBtX2RhdGE7
CisgICAgU3BhbjxzdGQ6OmJ5dGU+IG1fZGF0YTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1Bh
cnNlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNyArMjYxLDcg
QEAgYXV0byBTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKGNvbnN0IHVpbgogICAgIH0KIAogICAg
IGlmIChVTkxJS0VMWShPcHRpb25zOjp1c2VFYWdlcldlYkFzc2VtYmx5TW9kdWxlSGFzaGluZygp
KSkKLSAgICAgICAgbV9oYXNoZXIuYWRkQnl0ZXMoYnl0ZXMsIGJ5dGVzU2l6ZSk7CisgICAgICAg
IG1faGFzaGVyLmFkZEJ5dGVzKFNwYW4geyBieXRlcywgYnl0ZXNTaXplIH0pOwogCiAgICAgc2l6
ZV90IG9mZnNldEluQnl0ZXMgPSAwOwogICAgIHdoaWxlICh0cnVlKSB7CkluZGV4OiBTb3VyY2Uv
V1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw2OCBAQAorMjAyMS0wNi0xMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgQWRvcHQgU3BhbiBpbiBtb3JlIHBsYWNlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIFdURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmNwcDoKKyAgICAg
ICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjp+TWFwcGVkRmlsZURhdGEp
OgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6TWFwcGVkRmlsZURhdGE6Om1hcEZpbGVI
YW5kbGUpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6dW5tYXBWaWV3T2ZGaWxlKToK
KyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Om1hcFRvRmlsZSk6CisgICAgICAgICogd3Rm
L0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVE
YXRhOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6
Ok1hcHBlZEZpbGVEYXRhOjpkYXRhIGNvbnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUlt
cGw6Ok1hcHBlZEZpbGVEYXRhOjpsZWFrSGFuZGxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3Rl
bUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YSk6CisgICAgICAgIChXVEY6OkZp
bGVTeXN0ZW1JbXBsOjpNYXBwZWRGaWxlRGF0YTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6
RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpzaXplIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1NIQTEuY3BwOgorICAgICAgICAoV1RG
OjpTSEExOjphZGRCeXRlcyk6CisgICAgICAgIChXVEY6OlNIQTE6OmZpbmFsaXplKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6U0hBMTo6cHJvY2Vzc0Jsb2NrKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6U0hBMTo6cmVzZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTSEExOjpoZXhEaWdl
c3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTSEExOjpjb21wdXRlSGV4RGlnZXN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3dGYvU0hBMS5oOgorICAgICAgICAoV1RGOjpTSEExOjphZGRCeXRl
cyk6CisgICAgICAgICogd3RmL1ZlY3Rvci5oOgorICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZS9Q
ZXJzaXN0ZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPENT
dHJpbmc+OjplbmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8Q1N0cmlu
Zz46OmRlY29kZSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTdHJpbmc+Ojpl
bmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVjb2RlU3RyaW5nVGV4dCk6Cisg
ICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUpOgor
ICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKToK
KyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oOgorICAgICAgICAq
IHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5jcHA6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyOjpEZWNvZGVyKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6
OkRlY29kZXI6OmJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFkKToKKyAgICAgICAgKFdURjo6UGVy
c2lzdGVuY2U6OkRlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjp2ZXJpZnlDaGVja3N1bSk6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyOjp+RGVjb2Rlcik6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3Bl
cnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmg6CisgICAgICAgICogd3RmL3BlcnNpc3RlbmNl
L1BlcnNpc3RlbnRFbmNvZGVyLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29k
ZXI6Omdyb3cpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6dXBkYXRlQ2hl
Y2tzdW1Gb3JEYXRhKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6OmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjpl
bmNvZGVOdW1iZXIpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6ZW5jb2Rl
Q2hlY2tzdW0pOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6RW5jb2Rlcik6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjp+RW5jb2Rlcik6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmg6
CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjpidWZmZXIgY29uc3QpOgorICAg
ICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIp
OgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6YnVmZmVyU2l6ZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL3RleHQvQmFzZTY0Lmg6CisgICAgICAgIChXVEY6OmJh
c2U2NEVuY29kZVRvVmVjdG9yKToKKyAgICAgICAgKFdURjo6YmFzZTY0RW5jb2RlVG9TdHJpbmcp
OgorICAgICAgICAqIHd0Zi90ZXh0L0NTdHJpbmcuaDoKKwogMjAyMS0wNi0xMSAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgV2Vha0hhc2hNYXAKSW5kZXg6
IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtNjkyLDYgKzY5Miw4IEBACiAJCUFEODlCNkI5MUU2NDE1MEYwMDkwNzA3RiAvKiBN
ZW1vcnlQcmVzc3VyZUhhbmRsZXJDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IE1lbW9yeVByZXNzdXJlSGFuZGxlckNvY29hLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBREYyQ0U2NDFFMzlGMTA2MDA2ODg5REIgLyogTWVtb3J5Rm9vdHBy
aW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lbW9yeUZvb3RwcmludC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREYyQ0U2NTFFMzlGMTA2MDA2ODg5REIg
LyogTWVtb3J5Rm9vdHByaW50Q29jb2EuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTWVtb3J5Rm9vdHByaW50Q29jb2EuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlCQzcwMEI0NDI2NzY2ODM0MDA0OUVERjIgLyogU3BhbkNvY29hLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNwYW5Db2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzcwMEI0
NTI2NzY2OUMxMDA0OUVERjIgLyogU3BhbkNGLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwYW5DRi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0EzMEM3RjI2NkQzMDM0MDAwRDIzMEMgLyog
U3Bhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTcGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyQkNGQzNFMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5ndWFnZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYW5ndWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyQkNGQzNGMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5ndWFnZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYW5ndWFnZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtODQwLDYgKzg0Miw3IEBACiAJCQkJQzJCQ0ZDNDExRjYxRDYxNjAwQzky
MjJDIC8qIExhbmd1YWdlQ0YuY3BwICovLAogCQkJCTJDREVEMEVFMTgxMTVDMzgwMDREQkE3MCAv
KiBSdW5Mb29wQ0YuY3BwICovLAogCQkJCUEzRUU1QzNCMjFGRkFDN0MwMEZBQkQ2MSAvKiBTY2hl
ZHVsZVBhaXJDRi5jcHAgKi8sCisJCQkJQkM3MDBCNDUyNjc2NjlDMTAwNDlFREYyIC8qIFNwYW5D
Ri5oICovLAogCQkJCTFBRkRFNjQ3MTk1MjAxQzMwMEM0OEZGQSAvKiBUeXBlQ2FzdHNDRi5oICov
LAogCQkJCTVDMUYwNTk0MjE2NDM3QjMwMDM5MzAyQyAvKiBVUkxDRi5jcHAgKi8sCiAJCQkpOwpA
QCAtMTU4MSw2ICsxNTg0LDcgQEAKIAkJCQkxQ0E4NUNBODI0MUIwQjI2MDA3MUMyRjUgLyogUnVu
dGltZUFwcGxpY2F0aW9uQ2hlY2tzQ29jb2EuY3BwICovLAogCQkJCTFDQTg1Q0E3MjQxQjBCMTEw
MDcxQzJGNSAvKiBSdW50aW1lQXBwbGljYXRpb25DaGVja3NDb2NvYS5oICovLAogCQkJCUEzMEQ0
MTJDMUYwREUwQkEwMEI3MTk1NCAvKiBTb2Z0TGlua2luZy5oICovLAorCQkJCUJDNzAwQjQ0MjY3
NjY4MzQwMDQ5RURGMiAvKiBTcGFuQ29jb2EuaCAqLywKIAkJCQlFQjYxRURDNjI0MDlDQ0MwMDAx
RUZFMzYgLyogU3lzdGVtVHJhY2luZ0NvY29hLmNwcCAqLywKIAkJCQk1Q0MwRUU4NjIxNjJCQzIy
MDBBMUE4NDIgLyogVVJMQ29jb2EubW0gKi8sCiAJCQkJOTMyNDE2NTcyNDNCQzJFNTAwMzJGQUFF
IC8qIFZlY3RvckNvY29hLmggKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxOSw5ICszMTksOSBAQCBib29sIGV4Y2x1ZGVGcm9tQmFja3VwKGNvbnN0IFN0cmluZyYp
CiAKIE1hcHBlZEZpbGVEYXRhOjp+TWFwcGVkRmlsZURhdGEoKQogewotICAgIGlmICghbV9maWxl
RGF0YSkKKyAgICBpZiAoIW1fZmlsZURhdGEuZGF0YSgpKQogICAgICAgICByZXR1cm47Ci0gICAg
dW5tYXBWaWV3T2ZGaWxlKG1fZmlsZURhdGEsIG1fZmlsZVNpemUpOworICAgIHVubWFwVmlld09m
RmlsZShtX2ZpbGVEYXRhKTsKIH0KIAogTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKGNv
bnN0IFN0cmluZyYgZmlsZVBhdGgsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUsIGJvb2wmIHN1Y2Nl
c3MpCkBAIC0zODMsMTQgKzM4MywxMyBAQCBib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFu
ZGxlKFBsYXRmCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBtX2ZpbGVEYXRh
ID0gZGF0YTsKLSAgICBtX2ZpbGVTaXplID0gc2l6ZTsKKyAgICBtX2ZpbGVEYXRhID0gU3BhbiB7
IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpieXRlKj4oZGF0YSksIHNpemUgfTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCB1bm1hcFZpZXdPZkZpbGUodm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6
ZSkKK2Jvb2wgdW5tYXBWaWV3T2ZGaWxlKFNwYW48c3RkOjpieXRlPiBkYXRhKQogewotICAgIHJl
dHVybiAhbXVubWFwKGJ1ZmZlciwgc2l6ZSk7CisgICAgcmV0dXJuICFtdW5tYXAoZGF0YS5kYXRh
KCksIGRhdGEuc2l6ZSgpKTsKIH0KIAogI2VuZGlmCkBAIC00MzgsNyArNDM3LDcgQEAgU3RyaW5n
IGNyZWF0ZVRlbXBvcmFyeVppcEFyY2hpdmUoY29uc3QgUwogfQogI2VuZGlmCiAKLU1hcHBlZEZp
bGVEYXRhIG1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIHNpemVfdCBieXRlc1NpemUsIEZ1
bmN0aW9uPHZvaWQoY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4m
KT4mJiBhcHBseSwgUGxhdGZvcm1GaWxlSGFuZGxlKiBvdXRwdXRIYW5kbGUpCitNYXBwZWRGaWxl
RGF0YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBzaXplX3QgYnl0ZXNTaXplLCBGdW5j
dGlvbjx2b2lkKGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mKT4m
JiBhcHBseSwgUGxhdGZvcm1GaWxlSGFuZGxlKiBvdXRwdXRIYW5kbGUpCiB7CiAgICAgY29uc3Rl
eHByIGJvb2wgZmFpbElmRmlsZUV4aXN0cyA9IHRydWU7CiAgICAgYXV0byBoYW5kbGUgPSBGaWxl
U3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWRXcml0
ZSwgRmlsZVN5c3RlbTo6RmlsZUFjY2Vzc1Blcm1pc3Npb246OlVzZXIsIGZhaWxJZkZpbGVFeGlz
dHMpOwpAQCAtNDU1LDEyICs0NTQsMTIgQEAgTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxlKGNvbnN0
IFN0cmluZyYgcAogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIHZvaWQqIG1hcCA9
IGNvbnN0X2Nhc3Q8dm9pZCo+KG1hcHBlZEZpbGUuZGF0YSgpKTsKLSAgICB1aW50OF90KiBtYXBE
YXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1hcCk7CisgICAgYXV0byBtYXAgPSBtYXBwZWRG
aWxlLmRhdGEoKS5kYXRhKCk7CisgICAgYXV0byBtYXBEYXRhID0gbWFwOwogCi0gICAgYXBwbHko
WyZtYXBEYXRhXShjb25zdCB1aW50OF90KiBjaHVuaywgc2l6ZV90IGNodW5rU2l6ZSkgewotICAg
ICAgICBtZW1jcHkobWFwRGF0YSwgY2h1bmssIGNodW5rU2l6ZSk7Ci0gICAgICAgIG1hcERhdGEg
Kz0gY2h1bmtTaXplOworICAgIGFwcGx5KFsmbWFwRGF0YV0oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+
IGNodW5rKSB7CisgICAgICAgIG1lbWNweShtYXBEYXRhLCBjaHVuay5kYXRhKCksIGNodW5rLnNp
emUoKSk7CisgICAgICAgIG1hcERhdGEgKz0gY2h1bmsuc2l6ZSgpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9KTsKIApJbmRleDogU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICsz
NCw3IEBACiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KQEAgLTIxMCw3ICsyMTEsNyBAQCBXVEZfRVhQT1JUX1BSSVZBVEUg
U3RyaW5nIHJlYWxQYXRoKGNvbnN0CiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc1NhZmVUb1Vz
ZU1lbW9yeU1hcEZvclBhdGgoY29uc3QgU3RyaW5nJik7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBtYWtlU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChjb25zdCBTdHJpbmcmKTsKIAotV1RGX0VY
UE9SVF9QUklWQVRFIGJvb2wgdW5tYXBWaWV3T2ZGaWxlKHZvaWQqIGJ1ZmZlciwgc2l6ZV90KTsK
K1dURl9FWFBPUlRfUFJJVkFURSBib29sIHVubWFwVmlld09mRmlsZShTcGFuPHN0ZDo6Ynl0ZT4p
OwogCiBjbGFzcyBNYXBwZWRGaWxlRGF0YSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CkBAIC0yMjMsMTcgKzIyNCwxNSBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5N
YXBwZWRGaWxlRGF0YSgpOwogICAgIE1hcHBlZEZpbGVEYXRhJiBvcGVyYXRvcj0oTWFwcGVkRmls
ZURhdGEmJik7CiAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
ISFtX2ZpbGVEYXRhOyB9Ci0gICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZmlsZURhdGE7IH0KLSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9maWxlU2l6
ZTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fZmls
ZURhdGEuZGF0YSgpOyB9CisgICAgU3BhbjxzdGQ6OmJ5dGU+IGRhdGEoKSBjb25zdCB7IHJldHVy
biBtX2ZpbGVEYXRhOyB9CiAKLSAgICB2b2lkKiBsZWFrSGFuZGxlKCkgeyByZXR1cm4gc3RkOjpl
eGNoYW5nZShtX2ZpbGVEYXRhLCBudWxscHRyKTsgfQorICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBT
cGFuPHN0ZDo6Ynl0ZT4gbGVha0hhbmRsZSgpIHsgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9maWxl
RGF0YSwgeyB9KTsgfQogCiBwcml2YXRlOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIG1h
cEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBGaWxlT3Blbk1vZGUsIE1hcHBlZEZpbGVN
b2RlKTsKIAotICAgIHZvaWQqIG1fZmlsZURhdGEgeyBudWxscHRyIH07Ci0gICAgdW5zaWduZWQg
bV9maWxlU2l6ZSB7IDAgfTsKKyAgICBTcGFuPHN0ZDo6Ynl0ZT4gbV9maWxlRGF0YTsKIH07CiAK
IGlubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGxhdGZvcm1GaWxlSGFuZGxl
IGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUgbWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKQEAgLTI0Nywy
MSArMjQ2LDE5IEBAIGlubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGwKIH0K
IAogaW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShNYXBwZWRGaWxlRGF0YSYm
IG90aGVyKQotICAgIDogbV9maWxlRGF0YShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEs
IG51bGxwdHIpKQotICAgICwgbV9maWxlU2l6ZShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZVNp
emUsIDApKQorICAgIDogbV9maWxlRGF0YShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEs
IHsgfSkpCiB7CiB9CiAKIGlubGluZSBNYXBwZWRGaWxlRGF0YSYgTWFwcGVkRmlsZURhdGE6Om9w
ZXJhdG9yPShNYXBwZWRGaWxlRGF0YSYmIG90aGVyKQogewotICAgIG1fZmlsZURhdGEgPSBzdGQ6
OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEsIG51bGxwdHIpOwotICAgIG1fZmlsZVNpemUgPSBz
dGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZVNpemUsIDApOworICAgIG1fZmlsZURhdGEgPSBzdGQ6
OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEsIHsgfSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQog
CiAvLyBUaGlzIGNyZWF0ZXMgdGhlIGRlc3RpbmF0aW9uIGZpbGUsIG1hcHMgaXQsIHdyaXRlIHRo
ZSBwcm92aWRlZCBkYXRhIHRvIGl0IGFuZCByZXR1cm5zIHRoZSBtYXBwZWQgZmlsZS4KIC8vIFRo
aXMgZnVuY3Rpb24gZmFpbHMgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIGZpbGUgYXQgdGhlIGRlc3Rp
bmF0aW9uIHBhdGguCi1XVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVuY3Rpb248dm9pZChjb25z
dCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYpPiYmIGFwcGx5LCBQbGF0
Zm9ybUZpbGVIYW5kbGUqID0gbnVsbHB0cik7CitXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmls
ZURhdGEgbWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVu
Y3Rpb248dm9pZChjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+Jik+
JiYgYXBwbHksIFBsYXRmb3JtRmlsZUhhbmRsZSogPSBudWxscHRyKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgRmlsZVN5c3RlbUltcGwKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93
dGYvU0hBMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU0hBMS5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL1NIQTEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NiwxMCArNDYsMTAgQEAgU0hBMTo6U0hBMSgpCiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNM
QVJBVElPTlNfRU5ECiB9CiAKLXZvaWQgU0hBMTo6YWRkQnl0ZXMoY29uc3QgdWludDhfdCogaW5w
dXQsIHNpemVfdCBsZW5ndGgpCit2b2lkIFNIQTE6OmFkZEJ5dGVzKFNwYW48Y29uc3Qgc3RkOjpi
eXRlPiBpbnB1dCkKIHsKICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgot
ICAgIENDX1NIQTFfVXBkYXRlKCZtX2NvbnRleHQsIGlucHV0LCBsZW5ndGgpOworICAgIENDX1NI
QTFfVXBkYXRlKCZtX2NvbnRleHQsIGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpKTsKICAgICBB
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIH0KIApAQCAtMTAxLDExICsxMDEsMTEg
QEAgU0hBMTo6U0hBMSgpCiAgICAgcmVzZXQoKTsKIH0KIAotdm9pZCBTSEExOjphZGRCeXRlcyhj
b25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGxlbmd0aCkKK3ZvaWQgU0hBMTo6YWRkQnl0ZXMo
U3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQogewotICAgIHdoaWxlIChsZW5ndGgtLSkgewor
ICAgIGZvciAoYXV0byBieXRlIDogaW5wdXQpIHsKICAgICAgICAgQVNTRVJUKG1fY3Vyc29yIDwg
NjQpOwotICAgICAgICBtX2J1ZmZlclttX2N1cnNvcisrXSA9ICppbnB1dCsrOworICAgICAgICBt
X2J1ZmZlclttX2N1cnNvcisrXSA9IHN0ZDo6dG9faW50ZWdlcjx1aW50OF90PihieXRlKTsKICAg
ICAgICAgKyttX3RvdGFsQnl0ZXM7CiAgICAgICAgIGlmIChtX2N1cnNvciA9PSA2NCkKICAgICAg
ICAgICAgIHByb2Nlc3NCbG9jaygpOwpJbmRleDogU291cmNlL1dURi93dGYvU0hBMS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NIQTEuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dURi93dGYvU0hBMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgPGFycmF5PgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAt
NDUsMTUgKzQ2LDExIEBAIGNsYXNzIFNIQTEgewogcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBTSEExKCk7CiAKLSAgICB2b2lkIGFkZEJ5dGVzKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
aW5wdXQpCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkQnl0ZXMoU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkZEJ5dGVzKFQmJiBk
YXRhKQogICAgIHsKLSAgICAgICAgYWRkQnl0ZXMoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkp
OworICAgICAgICByZXR1cm4gYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+
KGRhdGEpIH0pKTsKICAgICB9Ci0gICAgdm9pZCBhZGRCeXRlcyhjb25zdCBDU3RyaW5nJiBpbnB1
dCkKLSAgICB7Ci0gICAgICAgIGFkZEJ5dGVzKGlucHV0LmRhdGFBc1VJbnQ4UHRyKCksIGlucHV0
Lmxlbmd0aCgpKTsKLSAgICB9Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkQnl0ZXMo
Y29uc3QgdWludDhfdCogaW5wdXQsIHNpemVfdCBsZW5ndGgpOwogCiAgICAgLy8gU2l6ZSBvZiB0
aGUgU0hBMSBoYXNoCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBjb25zdGV4cHIgc2l6
ZV90IGhhc2hTaXplID0gMjA7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dURi93dGYvVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxMyw2ICs2MTMsNyBAQCBw
cml2YXRlOgogCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBUIFZhbHVlVHlwZTsKKyAgICB0eXBlZGVm
IFQgdmFsdWVfdHlwZTsKIAogICAgIHR5cGVkZWYgVCogaXRlcmF0b3I7CiAgICAgdHlwZWRlZiBj
b25zdCBUKiBjb25zdF9pdGVyYXRvcjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL2NmL1NwYW5DRi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL2NmL1NwYW5DRi5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XVEYvd3RmL2NmL1NwYW5DRi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPENvcmVGb3VuZGF0
aW9uL0NvcmVGb3VuZGF0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KKworbmFtZXNwYWNl
IFdURiB7CisKK2lubGluZSBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYXNCeXRlcyhDRkRhdGFSZWYg
ZGF0YSkKK3sKKyAgICByZXR1cm4geyByZWludGVycHJldF9jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+
KENGRGF0YUdldEJ5dGVQdHIoZGF0YSkpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KENGRGF0YUdldExl
bmd0aChkYXRhKSkgfTsKK30KKworfQorCit1c2luZyBXVEY6OmFzQnl0ZXM7CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9jb2NvYS9TcGFuQ29jb2EuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9jb2NvYS9TcGFuQ29jb2EuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9jb2Nv
YS9TcGFuQ29jb2EuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNp
bmNsdWRlIDx3dGYvU3Bhbi5oPgorCituYW1lc3BhY2UgV1RGIHsKKworaW5saW5lIFNwYW48Y29u
c3Qgc3RkOjpieXRlPiBhc0J5dGVzKE5TRGF0YSAqZGF0YSkKK3sKKyAgICByZXR1cm4geyByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxlbmd0aCB9
OworfQorCit9CisKK3VzaW5nIFdURjo6YXNCeXRlczsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3Bl
cnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIENvZGVyPENTdHJpbmc+OjplbmNvZGUoRW5j
b2RlciYgZW5jCiAKICAgICB1aW50MzJfdCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAg
ZW5jb2RlciA8PCBsZW5ndGg7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3Ry
aW5nLmRhdGFBc1VJbnQ4UHRyKCksIGxlbmd0aCk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoc3RyaW5nLmJ5dGVzKCkpOwogfQogCiBzdGQ6Om9wdGlvbmFsPENTdHJpbmc+IENv
ZGVyPENTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKQEAgLTc4LDcgKzc4LDcgQEAg
c3RkOjpvcHRpb25hbDxDU3RyaW5nPiBDb2RlcjxDU3RyaW5nPjo6ZAogCiAgICAgY2hhciogYnVm
ZmVyOwogICAgIENTdHJpbmcgc3RyaW5nID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZCgqbGVu
Z3RoLCBidWZmZXIpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgKmxlbmd0aCkpCisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgcmVpbnRlcnByZXRfY2FzdDxzdGQ6OmJ5
dGUqPihidWZmZXIpLCAqbGVuZ3RoIH0pKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owog
CiAgICAgcmV0dXJuIHN0cmluZzsKQEAgLTk2LDExICs5Niw3IEBAIHZvaWQgQ29kZXI8U3RyaW5n
Pjo6ZW5jb2RlKEVuY29kZXImIGVuY28KICAgICBib29sIGlzOEJpdCA9IHN0cmluZy5pczhCaXQo
KTsKIAogICAgIGVuY29kZXIgPDwgbGVuZ3RoIDw8IGlzOEJpdDsKLQotICAgIGlmIChpczhCaXQp
Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0cmluZy5jaGFyYWN0ZXJz
OCgpLCBsZW5ndGgpOwotICAgIGVsc2UKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnMx
NigpKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoc3RyaW5nLmJ5dGVzKCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KQEAgLTExMiw3ICsxMDgsNyBAQCBzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8
U3RyaW5nPiBkZWNvCiAKICAgICBDaGFyYWN0ZXJUeXBlKiBidWZmZXI7CiAgICAgU3RyaW5nIHN0
cmluZyA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihidWZmZXIpLCBsZW5ndGggKiBzaXplb2YoQ2hhcmFjdGVyVHlwZSkpKQorICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8c3Rk
OjpieXRlKj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJhY3RlclR5cGUpIH0pKQogICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIAogICAgIHJldHVybiBzdHJpbmc7CkBAIC0x
NDIsMTMgKzEzOCwxMyBAQCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gQ29kZXI8U3RyaW5nPjo6ZGVj
CiAKIHZvaWQgQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQogewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpKTsKKyAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3QpOwogfQogCiBzdGQ6Om9wdGlvbmFsPFNIQTE6OkRpZ2Vz
dD4gQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAg
U0hBMTo6RGlnZXN0IHRtcDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHRtcC5kYXRhKCksIHNpemVvZih0bXApKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKHRtcCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgcmV0dXJu
IHRtcDsKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2Rl
cnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50
Q29kZXJzLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNl
L1BlcnNpc3RlbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYg
dmVjdG9yKQogICAgIHsKICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
dmVjdG9yLnNpemUoKSk7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6
ZSgpICogc2l6ZW9mKFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEo
dmVjdG9yKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5Pj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCkBAIC0xNzMsNyArMTcz
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAgICAgICBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IHRlbXA7CiAgICAgICAgIHRlbXAuZ3JvdyhzaXplKTsK
IAotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KHRlbXAuZGF0YSgpKSwgc2l6ZSAqIHNpemVvZihUKSkpCisgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEodGVtcCkpCiAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgICAgIHJldHVybiB0ZW1wOwpJbmRleDogU291cmNl
L1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmNwcAkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29k
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyMyArMzEsMjEgQEAKIG5hbWVzcGFjZSBXVEYg
ewogbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAotRGVjb2Rlcjo6RGVjb2Rlcihjb25zdCB1aW50
OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKQotICAgIDogbV9idWZmZXIoYnVmZmVyKQot
ICAgICwgbV9idWZmZXJQb3NpdGlvbihidWZmZXIpCi0gICAgLCBtX2J1ZmZlckVuZChidWZmZXIg
KyBidWZmZXJTaXplKQorRGVjb2Rlcjo6RGVjb2RlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnVm
ZmVyKQorICAgIDogbV9idWZmZXIoYnVmZmVyLmRhdGEoKSkKKyAgICAsIG1fYnVmZmVyUG9zaXRp
b24oYnVmZmVyLmRhdGEoKSkKKyAgICAsIG1fYnVmZmVyRW5kKGJ1ZmZlci5kYXRhKCkgKyBidWZm
ZXIuc2l6ZSgpKQogewogfQogCi1EZWNvZGVyOjp+RGVjb2RlcigpCi17Ci19CitEZWNvZGVyOjp+
RGVjb2RlcigpID0gZGVmYXVsdDsKIAogYm9vbCBEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdo
VG9Db250YWluKHNpemVfdCBzaXplKSBjb25zdAogewogICAgIHJldHVybiBzaXplIDw9IHN0YXRp
Y19jYXN0PHNpemVfdD4obV9idWZmZXJFbmQgLSBtX2J1ZmZlclBvc2l0aW9uKTsKIH0KIAotY29u
c3QgdWludDhfdCogRGVjb2Rlcjo6YnVmZmVyUG9pbnRlckZvckRpcmVjdFJlYWQoc2l6ZV90IHNp
emUpCitjb25zdCBzdGQ6OmJ5dGUqIERlY29kZXI6OmJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFk
KHNpemVfdCBzaXplKQogewogICAgIGlmICghYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihz
aXplKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC01NSwxNiArNTMsMTYgQEAgY29uc3Qg
dWludDhfdCogRGVjb2Rlcjo6YnVmZmVyUG9pbnRlckZvcgogICAgIGF1dG8gZGF0YSA9IG1fYnVm
ZmVyUG9zaXRpb247CiAgICAgbV9idWZmZXJQb3NpdGlvbiArPSBzaXplOwogCi0gICAgRW5jb2Rl
cjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgZGF0YSwgc2l6ZSk7CisgICAgRW5jb2Rl
cjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgU3BhbiB7IGRhdGEsIHNpemUgfSk7CiAg
ICAgcmV0dXJuIGRhdGE7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQorYm9vbCBEZWNvZGVyOjpkZWNvZGVGaXhlZExl
bmd0aERhdGEoU3BhbjxzdGQ6OmJ5dGU+IGRhdGEpCiB7Ci0gICAgYXV0byBidWZmZXIgPSBidWZm
ZXJQb2ludGVyRm9yRGlyZWN0UmVhZChzaXplKTsKKyAgICBhdXRvIGJ1ZmZlciA9IGJ1ZmZlclBv
aW50ZXJGb3JEaXJlY3RSZWFkKGRhdGEuc2l6ZSgpKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIG1lbWNweShkYXRhLCBidWZmZXIsIHNpemUpOworICAgIG1l
bWNweShkYXRhLmRhdGEoKSwgYnVmZmVyLCBkYXRhLnNpemUoKSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTEzOSw3ICsxMzcsNyBAQCBib29sIERlY29kZXI6OnZlcmlmeUNoZWNrc3VtKCkK
ICAgICBtX3NoYTEuY29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2Vz
dCBzYXZlZEhhc2g7Ci0gICAgaWYgKCFkZWNvZGVGaXhlZExlbmd0aERhdGEoc2F2ZWRIYXNoLmRh
dGEoKSwgc2l6ZW9mKHNhdmVkSGFzaCkpKQorICAgIGlmICghZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHNhdmVkSGFzaCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBjb21wdXRl
ZEhhc2ggPT0gc2F2ZWRIYXNoOwpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVy
c2lzdGVudERlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5j
ZS9QZXJzaXN0ZW50RGVjb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0
Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw3IEBACiAKICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9T
SEExLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2Uv
UGVyc2lzdGVudENvZGVyLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMzUsNyArMzYsMTIgQEAg
bmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIGNsYXNzIERlY29kZXIgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyKGNv
bnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IERlY29kZXIoVCYmIGRhdGEpCisgICAgICAgIDogRGVjb2RlciB7IGFzQnl0ZXMo
U3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihkYXRhKSB9KSB9CisgICAgeworICAgIH0KKworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIH5EZWNvZGVyKCk7CiAKICAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3Qg
eyByZXR1cm4gbV9idWZmZXJFbmQgLSBtX2J1ZmZlcjsgfQpAQCAtNDMsNyArNDksMTEgQEAgcHVi
bGljOgogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIHZl
cmlmeUNoZWNrc3VtKCk7CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgV0FSTl9VTlVTRURfUkVU
VVJOIGJvb2wgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqLCBzaXplX3QpOworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVGaXhlZExlbmd0
aERhdGEoU3BhbjxzdGQ6OmJ5dGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIGRl
Y29kZUZpeGVkTGVuZ3RoRGF0YShUJiYgZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNv
ZGVGaXhlZExlbmd0aERhdGEoYXNXcml0YWJsZUJ5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4o
ZGF0YSkgfSkpOworICAgIH0KIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVy
YXRvcj4+KHN0ZDo6b3B0aW9uYWw8Ym9vbD4mKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVj
b2RlciYgb3BlcmF0b3I+PihzdGQ6Om9wdGlvbmFsPHVpbnQ4X3Q+Jik7CkBAIC04NCw3ICs5NCw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG51bUVsZW1lbnRzIDw9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8c2l6ZV90Pjo6bWF4KCkgLyBzaXplb2YoVCkgJiYgYnVmZmVySXNMYXJnZUVub3VnaFRv
Q29udGFpbihudW1FbGVtZW50cyAqIHNpemVvZihUKSk7CiAgICAgfQogCi0gICAgV1RGX0VYUE9S
VF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBjb25zdCB1aW50OF90KiBidWZmZXJQb2ludGVy
Rm9yRGlyZWN0UmVhZChzaXplX3QgbnVtQnl0ZXMpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBX
QVJOX1VOVVNFRF9SRVRVUk4gY29uc3Qgc3RkOjpieXRlKiBidWZmZXJQb2ludGVyRm9yRGlyZWN0
UmVhZChzaXplX3QgbnVtQnl0ZXMpOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSVBD
RGVjb2RlciA9IGZhbHNlOwogCkBAIC05Miw5ICsxMDIsOSBAQCBwcml2YXRlOgogICAgIFdURl9F
WFBPUlRfUFJJVkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBidWZmZXJJc0xhcmdlRW5vdWdo
VG9Db250YWluKHNpemVfdCkgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4gRGVj
b2RlciYgZGVjb2RlTnVtYmVyKHN0ZDo6b3B0aW9uYWw8VHlwZT4mKTsKIAotICAgIGNvbnN0IHVp
bnQ4X3QqIG1fYnVmZmVyOwotICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyUG9zaXRpb247Ci0g
ICAgY29uc3QgdWludDhfdCogbV9idWZmZXJFbmQ7CisgICAgY29uc3Qgc3RkOjpieXRlKiBtX2J1
ZmZlcjsKKyAgICBjb25zdCBzdGQ6OmJ5dGUqIG1fYnVmZmVyUG9zaXRpb247CisgICAgY29uc3Qg
c3RkOjpieXRlKiBtX2J1ZmZlckVuZDsKIAogICAgIFNIQTEgbV9zaGExOwogfTsKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRF
bmNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMzQgKzMxLDM0IEBACiBuYW1lc3BhY2Ug
V1RGIHsKIG5hbWVzcGFjZSBQZXJzaXN0ZW5jZSB7CiAKLUVuY29kZXI6OkVuY29kZXIoKQotewot
fQotCi1FbmNvZGVyOjp+RW5jb2RlcigpCi17Ci19CitFbmNvZGVyOjpFbmNvZGVyKCkgPSBkZWZh
dWx0OworRW5jb2Rlcjo6fkVuY29kZXIoKSA9IGRlZmF1bHQ7CiAKLXVpbnQ4X3QqIEVuY29kZXI6
Omdyb3coc2l6ZV90IHNpemUpCitzdGQ6OmJ5dGUqIEVuY29kZXI6Omdyb3coc2l6ZV90IHNpemUp
CiB7CiAgICAgc2l6ZV90IG5ld1Bvc2l0aW9uID0gbV9idWZmZXIuc2l6ZSgpOwogICAgIG1fYnVm
ZmVyLmdyb3cobV9idWZmZXIuc2l6ZSgpICsgc2l6ZSk7CiAgICAgcmV0dXJuIG1fYnVmZmVyLmRh
dGEoKSArIG5ld1Bvc2l0aW9uOwogfQogCi12b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9y
RGF0YShTSEExJiBzaGExLCBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3ZvaWQg
RW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmIHNoYTEsIFNwYW48Y29uc3QgdWlu
dDhfdD4gZGF0YSkKK3sKKyAgICByZXR1cm4gdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKHNoYTEsIGFz
Qnl0ZXMoZGF0YSkpOworfQorCit2b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yRGF0YShT
SEExJiBzaGExLCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKICAgICBhdXRvIHR5cGVT
YWx0ID0gU2FsdDx1aW50OF90Kj46OnZhbHVlOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7Ci0gICAgc2hh
MS5hZGRCeXRlcyhkYXRhLCBzaXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmdHlwZVNh
bHQsIDEgfSk7CisgICAgc2hhMS5hZGRCeXRlcyhkYXRhKTsKIH0KIAotdm9pZCBFbmNvZGVyOjpl
bmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCit2
b2lkIEVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
ZGF0YSkKIHsKLSAgICB1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhLCBzaXplKTsK
KyAgICB1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhKTsKIAotICAgIHVpbnQ4X3Qq
IGJ1ZmZlciA9IGdyb3coc2l6ZSk7Ci0gICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7Cisg
ICAgYXV0byogYnVmZmVyID0gZ3JvdyhkYXRhLnNpemUoKSk7CisgICAgbWVtY3B5KGJ1ZmZlciwg
ZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4K
QEAgLTY2LDcgKzY2LDcgQEAgRW5jb2RlciYgRW5jb2Rlcjo6ZW5jb2RlTnVtYmVyKFR5cGUgdmFs
dQogewogICAgIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKG1fc2hhMSwgdmFsdWUp
OwogCi0gICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhzaXplb2YoVHlwZSkpOworICAgIGF1dG8q
IGJ1ZmZlciA9IGdyb3coc2l6ZW9mKFR5cGUpKTsKICAgICBtZW1jcHkoYnVmZmVyLCAmdmFsdWUs
IHNpemVvZihUeXBlKSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQpAQCAtMTI1LDcgKzEyNSw3IEBA
IHZvaWQgRW5jb2Rlcjo6ZW5jb2RlQ2hlY2tzdW0oKQogewogICAgIFNIQTE6OkRpZ2VzdCBoYXNo
OwogICAgIG1fc2hhMS5jb21wdXRlSGFzaChoYXNoKTsKLSAgICBlbmNvZGVGaXhlZExlbmd0aERh
dGEoaGFzaC5kYXRhKCksIGhhc2guc2l6ZSgpKTsKKyAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEo
aGFzaCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3Rl
bnRFbmNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVy
c2lzdGVudEVuY29kZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvcGVy
c2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcs
NyBAQAogCiAjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvU0hBMS5o
PgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1
ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaD4KIApAQCAtNDMsNyArNDQsMTEg
QEAgcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSB+RW5jb2RlcigpOwogCiAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlQ2hlY2tzdW0oKTsKLSAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCosIHNpemVfdCk7
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48
Y29uc3Qgc3RkOjpieXRlPik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBlbmNvZGVG
aXhlZExlbmd0aERhdGEoVCYmIGRhdGEpCisgICAgeworICAgICAgICBlbmNvZGVGaXhlZExlbmd0
aERhdGEoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pKTsKKyAgICB9CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZW51bTxU
Pjo6dmFsdWU+KiA9IG51bGxwdHI+CiAgICAgRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBUJiB0
KQpAQCAtNzAsMjMgKzc1LDIyIEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRW5j
b2RlciYgb3BlcmF0b3I8PChmbG9hdCk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIEVuY29kZXIm
IG9wZXJhdG9yPDwoZG91YmxlKTsKIAotICAgIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlcigpIGNvbnN0
IHsgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKTsgfQotICAgIHNpemVfdCBidWZmZXJTaXplKCkgY29u
c3QgeyByZXR1cm4gbV9idWZmZXIuc2l6ZSgpOyB9Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBjb25zdCB1aW50OF90Kiwg
c2l6ZV90KTsKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnVmZmVyKCkgY29uc3QgeyByZXR1
cm4gbV9idWZmZXI7IH0KKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQg
dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBTcGFuPGNvbnN0IHVpbnQ4X3Q+KTsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEm
LCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPiBz
dGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZvck51bWJlcihTSEExJiwgVHlwZSk7CiAKICAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNJUENFbmNvZGVyID0gZmFsc2U7CiAKIHByaXZhdGU6Ci0K
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiBFbmNvZGVyJiBlbmNvZGVOdW1iZXIoVHlwZSk7
CiAKLSAgICB1aW50OF90KiBncm93KHNpemVfdCk7CisgICAgc3RkOjpieXRlKiBncm93KHNpemVf
dCk7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4gc3RydWN0IFNhbHQ7CiAKLSAgICBW
ZWN0b3I8dWludDhfdCwgNDA5Nj4gbV9idWZmZXI7CisgICAgVmVjdG9yPHN0ZDo6Ynl0ZSwgNDA5
Nj4gbV9idWZmZXI7CiAgICAgU0hBMSBtX3NoYTE7CiB9OwogCkBAIC0xMDYsOCArMTEwLDggQEAg
dGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+CiB2b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9y
TnVtYmVyKFNIQTEmIHNoYTEsIFR5cGUgdmFsdWUpCiB7CiAgICAgYXV0byB0eXBlU2FsdCA9IFNh
bHQ8VHlwZT46OnZhbHVlOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7Ci0gICAgc2hhMS5hZGRCeXRlcyhy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWUpLCBzaXplb2YodmFsdWUpKTsKKyAgICBz
aGExLmFkZEJ5dGVzKFNwYW4geyAmdHlwZVNhbHQsIDEgfSk7CisgICAgc2hhMS5hZGRCeXRlcyhT
cGFuIHsgJnZhbHVlLCAxIH0pOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jh
c2U2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0MCwzOSArMTQwLDM5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IHN0YXRpYyAKICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSAn
PSc7CiB9CiAKLXN0YXRpYyBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoY29u
c3QgdWludDhfdCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0
RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKK3N0YXRpYyBWZWN0b3I8
dWludDhfdD4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0
LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewotICAg
IGF1dG8gZGVzdGluYXRpb25MZW5ndGggPSBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShpbnB1
dExlbmd0aCwgcG9saWN5KTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uTGVuZ3RoID0gY2FsY3VsYXRl
QmFzZTY0RW5jb2RlZFNpemUoaW5wdXQuc2l6ZSgpLCBwb2xpY3kpOwogICAgIGlmICghZGVzdGlu
YXRpb25MZW5ndGgpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBWZWN0b3I8dWludDhfdD4g
ZGVzdGluYXRpb25WZWN0b3IoZGVzdGluYXRpb25MZW5ndGgpOwotICAgIGJhc2U2NEVuY29kZUlu
dGVybmFsKGlucHV0RGF0YUJ1ZmZlciwgaW5wdXRMZW5ndGgsIGRlc3RpbmF0aW9uVmVjdG9yLmRh
dGEoKSwgZGVzdGluYXRpb25MZW5ndGgsIHBvbGljeSwgbWFwKTsKKyAgICBiYXNlNjRFbmNvZGVJ
bnRlcm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBp
bnB1dC5zaXplKCksIGRlc3RpbmF0aW9uVmVjdG9yLmRhdGEoKSwgZGVzdGluYXRpb25MZW5ndGgs
IHBvbGljeSwgbWFwKTsKICAgICByZXR1cm4gZGVzdGluYXRpb25WZWN0b3I7CiB9CiAKLXZvaWQg
YmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRM
ZW5ndGgsIFVDaGFyKiBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9u
TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQor
dm9pZCBiYXNlNjRFbmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0LCBVQ2hhciogZGVz
dGluYXRpb25EYXRhQnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkxlbmd0aCwgQmFzZTY0RW5j
b2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKICAgICBpZiAoIWRlc3Rp
bmF0aW9uTGVuZ3RoKQogICAgICAgICByZXR1cm47Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwo
c3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3Ro
LCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7
CisgICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRl
c3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7CiB9CiAKLXZvaWQgYmFzZTY0RW5jb2RlKGNv
bnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIExDaGFyKiBk
ZXN0aW5hdGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uTGVuZ3RoLCBCYXNlNjRF
bmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordm9pZCBiYXNlNjRFbmNv
ZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0LCBMQ2hhciogZGVzdGluYXRpb25EYXRhQnVm
ZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkxlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGlj
eSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKICAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQog
ICAgICAgICByZXR1cm47Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29u
c3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvbkRh
dGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7CisgICAgYmFzZTY0RW5j
b2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0YSgp
KSwgaW5wdXQuc2l6ZSgpLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3Ro
LCBwb2xpY3ksIG1hcCk7CiB9CiAKLVZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rv
cihjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNl
NjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQorVmVjdG9yPHVpbnQ4
X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwgQmFz
ZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1
cm4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0
RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2
NEVuY29kZUludGVybmFsKGlucHV0LCBwb2xpY3ksIG1hcCk7CiB9CiAKLVN0cmluZyBiYXNlNjRF
bmNvZGVUb1N0cmluZyhjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0
TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQor
U3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwg
QmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBy
ZXR1cm4gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKGlucHV0RGF0YUJ1ZmZlciwgaW5wdXRMZW5n
dGgsIHBvbGljeSwgbWFwKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChp
bnB1dCwgcG9saWN5LCBtYXApKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIHN0
ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGVJbnRlcm5hbChjb25zdCBU
KiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBPcHRpb25TZXQ8QmFzZTY0
RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKQEAgLTI1NCw4NCAr
MjU0LDI3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBzdGQ6Om9wdGlvbmEKICAgICBy
ZXR1cm4gZGVzdGluYXRpb247CiB9CiAKLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjREZWNvZGUoY29uc3QgU3RyaW5nJiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9w
dGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgdW5zaWduZWQgbGVu
Z3RoID0gaW5wdXQubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGggfHwgaW5wdXQuaXM4Qml0KCkp
Ci0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgp
LCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFs
KGlucHV0LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7Ci19Ci0KLXN0ZDo6
b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3RyaW5nVmlldyBpbnB1dCwg
T3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBt
YXApCi17Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7Ci0gICAgaWYgKCFs
ZW5ndGggfHwgaW5wdXQuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRl
cm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7Ci0gICAgcmV0
dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIG9w
dGlvbnMsIG1hcCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRE
ZWNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29k
ZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgaWYgKGlucHV0
LnNpemUoKSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKLSAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5w
dXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIG9wdGlvbnMsIG1hcCk7Ci19Ci0KLXN0ZDo6b3B0aW9u
YWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1
dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1h
cCBtYXApCitzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKFNwYW48
Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9w
dGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7CiAgICAgaWYgKGlucHV0LnNpemUoKSA+IHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpLCBvcHRpb25zLCBt
YXApOwogfQogCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNv
bnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgT3B0aW9uU2V0PEJhc2U2NERlY29k
ZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgcmV0dXJuIGJh
c2U2NERlY29kZUludGVybmFsKGRhdGEsIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKLX0KLQotc3Rk
OjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBjaGFyKiBkYXRh
LCB1bnNpZ25lZCBsZW5ndGgsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRpb25z
LCBCYXNlNjREZWNvZGVNYXAgbWFwKQotewotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5h
bChyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oZGF0YSksIGxlbmd0aCwgb3B0aW9ucywg
bWFwKTsKLX0KLQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29k
ZShjb25zdCBTdHJpbmcmIGlucHV0KQorc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJh
c2U2NERlY29kZShjb25zdCBTdHJpbmcmIGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0
aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKICAgICB1bnNpZ25lZCBsZW5n
dGggPSBpbnB1dC5sZW5ndGgoKTsKICAgICBpZiAoIWxlbmd0aCB8fCBpbnB1dC5pczhCaXQoKSkK
LSAgICAgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnM4KCks
IGxlbmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7Ci0gICAgcmV0dXJuIGJhc2U2NERl
Y29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIHsgfSwgQmFzZTY0RGVj
b2RlTWFwOjpVUkwpOworICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQu
Y2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOworICAgIHJldHVybiBiYXNlNjRE
ZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXAp
OwogfQogCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFN0
cmluZ1ZpZXcgaW5wdXQpCitzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVj
b2RlKFN0cmluZ1ZpZXcgaW5wdXQsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRp
b25zLCBCYXNlNjREZWNvZGVNYXAgbWFwKQogewogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0
Lmxlbmd0aCgpOwogICAgIGlmICghbGVuZ3RoIHx8IGlucHV0LmlzOEJpdCgpKQotICAgICAgICBy
ZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCB7
IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJu
YWwoaW5wdXQuY2hhcmFjdGVyczE2KCksIGxlbmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVS
TCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUo
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKLXsKLSAgICBpZiAoaW5wdXQuc2l6ZSgpID4g
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQotICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5kYXRhKCks
IGlucHV0LnNpemUoKSwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7Ci19Ci0KLXN0ZDo6b3B0
aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+
JiBpbnB1dCkKLXsKLSAgICBpZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHJldHVy
biBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihp
bnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCksIHsgfSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOwot
fQotCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0
IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gYmFzZTY0RGVj
b2RlSW50ZXJuYWwoZGF0YSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKLX0K
LQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBj
aGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUlu
dGVybmFsKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBsZW5ndGgsIHsg
fSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOworICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50
ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOworICAgIHJl
dHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBv
cHRpb25zLCBtYXApOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL3RleHQvQmFzZTY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9CYXNl
NjQuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCkBAIC01Niw1NCArNTcsMzUgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBtYXhpbXVtQmFzZTY0TAogLy8gUmF0aGVyIHRoYW4gYmVpbmcgcGVyZmVjdGx5IHByZWNp
c2UsIHRoaXMgaXMgYSBiaXQgY29uc2VydmF0aXZlLgogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBtYXhpbXVtQmFzZTY0RW5jb2RlcklucHV0QnVmZmVyU2l6ZSA9IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSAvIDc3ICogNzYgLyA0ICogMyAtIDI7CiAKLVdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQsIFVDaGFyKiwg
dW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJ
bnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci1X
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVk
LCBMQ2hhciosIHVuc2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xp
Y3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRl
ZmF1bHQpOworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2RlKFNwYW48Y29uc3Qg
c3RkOjpieXRlPiwgVUNoYXIqIGRlc3RpbmF0aW9uQnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlv
bkJ1ZmZlclNpemUsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9O
b3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7
CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+LCBMQ2hhciogZGVzdGluYXRpb25CdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uQnVmZmVy
U2l6ZSwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2Vy
dExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKIAotV1RG
X0VYUE9SVF9QUklWQVRFIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25z
dCB2b2lkKiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGlj
eTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVm
YXVsdCk7Ci1WZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05v
dEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsK
LVZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8Y2hhcj4m
LCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZz
LCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwotVmVjdG9yPHVp
bnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IENTdHJpbmcmLCBCYXNlNjRFbmNvZGVQ
b2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVN
YXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwotCi1XVEZfRVhQT1JUX1BSSVZBVEUgU3Ry
aW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgQmFzZTY0RW5j
b2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5j
b2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKLVN0cmluZyBiYXNlNjRFbmNvZGVU
b1N0cmluZyhjb25zdCBWZWN0b3I8dWludDhfdD4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNl
NjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRF
bmNvZGVNYXA6OkRlZmF1bHQpOwotU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IFZl
Y3RvcjxjaGFyPiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9O
b3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7
Ci1TdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgQ1N0cmluZyYsIEJhc2U2NEVuY29k
ZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29k
ZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgVmVj
dG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKFNwYW48Y29uc3Qgc3RkOjpieXRlPiwg
QmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywg
QmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihUJiYsIEJhc2U2
NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2
NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CiAKK1dURl9FWFBPUlRfUFJJ
VkFURSBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+LCBC
YXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBC
YXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKFQmJiwgQmFzZTY0RW5jb2RlUG9s
aWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFw
ID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKKworV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6
b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1h
cCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpv
cHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBTdHJpbmcmLCBPcHRp
b25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2
NERlY29kZU1hcDo6RGVmYXVsdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxW
ZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShTdHJpbmdWaWV3LCBPcHRpb25TZXQ8QmFzZTY0
RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6
RGVmYXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGJhc2U2NERlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mLCBPcHRpb25TZXQ8QmFzZTY0
RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6
RGVmYXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGJhc2U2NERlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mLCBPcHRpb25TZXQ8QmFzZTY0RGVj
b2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVm
YXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+
IGJhc2U2NERlY29kZShjb25zdCB1aW50OF90KiwgdW5zaWduZWQsIE9wdGlvblNldDxCYXNlNjRE
ZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpE
ZWZhdWx0KTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90
Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCwgT3B0aW9uU2V0PEJhc2U2NERl
Y29kZU9wdGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRl
ZmF1bHQpOwotCi1pbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJh
c2U2NEVuY29kZU1hcCBtYXApCi17Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlu
cHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7Ci19Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25z
dF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+PiwgU3RyaW5nPiAmJiAhc3RkOjppc19zYW1l
X3Y8c3RkOjpyZW1vdmVfY29uc3RfdDxzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxUPj4sIFN0cmlu
Z1ZpZXc+PiogPSBudWxscHRyPgorc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2
NERlY29kZShUJiYsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0
RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKIAotaW5saW5lIFZlY3Rvcjx1
aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBC
YXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordGVtcGxhdGU8
dHlwZW5hbWUgVD4gVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKFQmJiBpbnB1
dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAg
ICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCks
IHBvbGljeSwgbWFwKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoYXNCeXRlcyhT
cGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGlucHV0KSB9KSwgcG9saWN5LCBtYXApOwogfQogCi1pbmxp
bmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IENTdHJpbmcmIGlu
cHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordGVt
cGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKFQmJiBpbnB1dCwg
QmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBy
ZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwg
cG9saWN5LCBtYXApOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhhc0J5dGVzKFNw
YW4geyBzdGQ6OmZvcndhcmQ8VD4oaW5wdXQpIH0pLCBwb2xpY3ksIG1hcCk7CiB9CiAKLWlubGlu
ZSBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1
dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZV92PHN0ZDo6cmVt
b3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmc+ICYmICFzdGQ6
OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+
PiwgU3RyaW5nVmlldz4+Kj4KK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRE
ZWNvZGUoVCYmIGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywg
QmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmco
aW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSwgbWFwKTsKLX0KLQotaW5saW5lIFN0
cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBCYXNl
NjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQotewotICAgIHJldHVy
biBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5
LCBtYXApOwotfQotCi1pbmxpbmUgU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IENT
dHJpbmcmIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAg
bWFwKQotewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlu
cHV0Lmxlbmd0aCgpLCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZShhc0J5
dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oaW5wdXQpIH0pLCBvcHRpb25zLCBtYXApOwogfQog
CiAKQEAgLTExMiw2MSArOTQsNTcgQEAgaW5saW5lIFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmlu
Zyhjb25zdAogLy8gVGhpcyBmb3JtYXQgdXNlcyAnLScgYW5kICdfJyBpbnN0ZWFkIG9mICcrJyBh
bmQgJy8nIHJlc3BlY3RpdmVseS4KIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAK
LVZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihjb25zdCB2b2lkKiwgdW5z
aWduZWQpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9y
KGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRv
VmVjdG9yKGNvbnN0IENTdHJpbmcmKTsKK1ZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVU
b1ZlY3RvcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVj
dG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKFQmJik7CiAKLVN0cmluZyBiYXNl
NjRVUkxFbmNvZGVUb1N0cmluZyhjb25zdCB2b2lkKiwgdW5zaWduZWQpOwotU3RyaW5nIGJhc2U2
NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOwotU3RyaW5nIGJhc2U2
NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotU3RyaW5nIGJhc2U2NFVS
TEVuY29kZVRvU3RyaW5nKGNvbnN0IENTdHJpbmcmKTsKK1N0cmluZyBiYXNlNjRVUkxFbmNvZGVU
b1N0cmluZyhTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3Ry
aW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKFQmJik7CiAKLVdURl9FWFBPUlRfUFJJVkFURSBz
dGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFN0cmlu
ZyYpOwotV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjRVUkxEZWNvZGUoU3RyaW5nVmlldyk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRp
b25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBWZWN0b3I8dWludDhf
dD4mKTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4g
YmFzZTY0VVJMRGVjb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotV1RGX0VYUE9SVF9QUklWQVRF
IHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgdWlu
dDhfdCosIHVuc2lnbmVkKTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rv
cjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCk7CitzdGQ6
Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFNwYW48Y29uc3Qgc3Rk
OjpieXRlPik7CitzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2Rl
KGNvbnN0IFN0cmluZyYpOworc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVS
TERlY29kZShTdHJpbmdWaWV3KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lm
X3Q8IXN0ZDo6aXNfc2FtZV92PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJl
bmNlX3Q8VD4+LCBTdHJpbmc+ICYmICFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90
PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+PiwgU3RyaW5nVmlldz4+KiA9IG51bGxwdHI+Citz
dGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFQmJik7CiAKLWlu
bGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3Qgdm9pZCog
aW5wdXQsIHVuc2lnbmVkIGxlbmd0aCkKK2lubGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJM
RW5jb2RlVG9WZWN0b3IoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQogewotICAgIHJldHVy
biBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dCwgbGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3k6
OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1Zl
Y3RvcihpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJM
KTsKIH0KIAotaW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihj
b25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVjdG9y
PHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKFQmJiBpbnB1dCkKIHsKLSAgICByZXR1
cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJhc2U2
NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJh
c2U2NEVuY29kZVRvVmVjdG9yKHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCksIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBWZWN0b3I8dWlu
dDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCkK
K2lubGluZSBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRh
KCksIGlucHV0LnNpemUoKSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1h
cDo6VVJMKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5wdXQsIEJhc2U2NEVu
Y29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBWZWN0
b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgQ1N0cmluZyYgaW5wdXQp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoVCYm
IGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRhKCks
IGlucHV0Lmxlbmd0aCgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFw
OjpVUkwpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhzdGQ6OmZvcndhcmQ8VD4o
aW5wdXQpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwog
fQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqIGlu
cHV0LCB1bnNpZ25lZCBsZW5ndGgpCitpbmxpbmUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGJhc2U2NFVSTERlY29kZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCiB7Ci0gICAg
cmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LCBsZW5ndGgsIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29k
ZShpbnB1dCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBTdHJpbmcg
YmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKK2lu
bGluZSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0
IFN0cmluZyYgaW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0
LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5j
b2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjREZWNvZGUoaW5wdXQsIHsgfSwgQmFzZTY0
RGVjb2RlTWFwOjpVUkwpOwogfQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3Ry
aW5nKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW5wdXQpCitpbmxpbmUgc3RkOjpvcHRpb25hbDxWZWN0
b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShTdHJpbmdWaWV3IGlucHV0KQogewotICAgIHJl
dHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgQmFz
ZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKKyAgICByZXR1cm4g
YmFzZTY0RGVjb2RlKGlucHV0LCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKIH0KIAotaW5s
aW5lIFN0cmluZyBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhjb25zdCBDU3RyaW5nJiBpbnB1dCkK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZV92PHN0
ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmc+ICYm
ICFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5j
ZV90PFQ+PiwgU3RyaW5nVmlldz4+Kj4KK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjRVUkxEZWNvZGUoVCYmIGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0
cmluZyhpbnB1dC5kYXRhKCksIGlucHV0Lmxlbmd0aCgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVS
TCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjRVUkxEZWNvZGUoYXNC
eXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGlucHV0KSB9KSk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBpbmxpbmUgYm9vbCBpc0Jhc2U2NE9yQmFzZTY0
VVJMQ2hhcmFjdGVyKENoYXJhY3RlclR5cGUgYykKQEAgLTIwOCw1NyArMTg2LDM2IEBAIGlubGlu
ZSB1bnNpZ25lZCBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2kKIH0KIAogc3RydWN0IEJhc2U2NFNw
ZWNpZmljYXRpb24gewotICAgIGNvbnN0IHZvaWQqIGlucHV0RGF0YTsKLSAgICB1bnNpZ25lZCBp
bnB1dExlbmd0aDsKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXREYXRhOwogICAgIEJh
c2U2NEVuY29kZVBvbGljeSBwb2xpY3k7CiAgICAgQmFzZTY0RW5jb2RlTWFwIG1hcDsKIH07CiAK
LWlubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NEVuY29kZWQoY29uc3Qgdm9pZCogaW5w
dXREYXRhLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9
IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCBtYXAg
PSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpCi17Ci0gICAgcmV0dXJuIHsgaW5wdXREYXRhLCBp
bnB1dExlbmd0aCwgcG9saWN5LCBtYXAgfTsKLX0KLQotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRp
b24gYmFzZTY0RW5jb2RlZChjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0LCBCYXNlNjRFbmNv
ZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcykKLXsK
LSAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9s
aWN5KTsKLX0KLQotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChjb25z
dCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0
RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcykKLXsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2Rl
ZChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5KTsKLX0KLQotaW5saW5lIEJhc2U2
NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChjb25zdCBDU3RyaW5nJiBpbnB1dCwgQmFzZTY0
RW5jb2RlUG9saWN5IHBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMp
Ci17Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgo
KSwgcG9saWN5KTsKLX0KLQotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5j
b2RlZChjb25zdCB2b2lkKiBpbnB1dERhdGEsIHVuc2lnbmVkIGlucHV0TGVuZ3RoKQoraW5saW5l
IEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
aW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRv
Tm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgbWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZh
dWx0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0RGF0YSwgaW5wdXRMZW5ndGgs
IEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0
dXJuIHsgaW5wdXQsIHBvbGljeSwgbWFwIH07CiB9CiAKLWlubGluZSBCYXNlNjRTcGVjaWZpY2F0
aW9uIGJhc2U2NFVSTEVuY29kZWQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChUJiYgaW5w
dXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90
SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgbWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0
KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgp
LCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJl
dHVybiBiYXNlNjRFbmNvZGVkKGFzQnl0ZXMoU3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCkg
fSksIHBvbGljeSwgbWFwKTsKIH0KIAotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0
VVJMRW5jb2RlZChjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0KQoraW5saW5lIEJhc2U2NFNwZWNp
ZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCiB7
Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJh
c2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJu
IGJhc2U2NEVuY29kZWQoaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNv
ZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NFVSTEVu
Y29kZWQoY29uc3QgQ1N0cmluZyYgaW5wdXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBCYXNlNjRT
cGVjaWZpY2F0aW9uIGJhc2U2NFVSTEVuY29kZWQoVCYmIGlucHV0KQogewotICAgIHJldHVybiBi
YXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29k
ZWQoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGlucHV0KSB9KSwgQmFzZTY0RW5jb2Rl
UG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKIH0KIAogdGVtcGxhdGU8PiBjbGFz
cyBTdHJpbmdUeXBlQWRhcHRlcjxCYXNlNjRTcGVjaWZpY2F0aW9uPiB7CiBwdWJsaWM6CiAgICAg
U3RyaW5nVHlwZUFkYXB0ZXIoY29uc3QgQmFzZTY0U3BlY2lmaWNhdGlvbiYgYmFzZTY0KQogICAg
ICAgICA6IG1fYmFzZTY0IHsgYmFzZTY0IH0KLSAgICAgICAgLCBtX2VuY29kZWRMZW5ndGggeyBj
YWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShiYXNlNjQuaW5wdXRMZW5ndGgsIGJhc2U2NC5wb2xp
Y3kpIH0KKyAgICAgICAgLCBtX2VuY29kZWRMZW5ndGggeyBjYWxjdWxhdGVCYXNlNjRFbmNvZGVk
U2l6ZShiYXNlNjQuaW5wdXREYXRhLnNpemUoKSwgYmFzZTY0LnBvbGljeSkgfQogICAgIHsKICAg
ICB9CiAKQEAgLTI2Nyw3ICsyMjQsNyBAQCBwdWJsaWM6CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiB2b2lkIHdyaXRlVG8oQ2hhcmFjdGVyVHlwZSogZGVzdGluYXRpb24p
IGNvbnN0CiAgICAgewotICAgICAgICBiYXNlNjRFbmNvZGUobV9iYXNlNjQuaW5wdXREYXRhLCBt
X2Jhc2U2NC5pbnB1dExlbmd0aCwgZGVzdGluYXRpb24sIG1fZW5jb2RlZExlbmd0aCwgbV9iYXNl
NjQucG9saWN5LCBtX2Jhc2U2NC5tYXApOworICAgICAgICBiYXNlNjRFbmNvZGUobV9iYXNlNjQu
aW5wdXREYXRhLCBkZXN0aW5hdGlvbiwgbV9lbmNvZGVkTGVuZ3RoLCBtX2Jhc2U2NC5wb2xpY3ks
IG1fYmFzZTY0Lm1hcCk7CiAgICAgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dURi93dGYv
dGV4dC9DU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9DU3RyaW5n
LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMu
aD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvU3Bhbi5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtMzksOSArNDAsMTEg
QEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoQwogY2xhc3MgQ1N0cmlu
Z0J1ZmZlciBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPENTdHJpbmdCdWZmZXI+IHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihDU3RyaW5nQnVmZmVy
KTsKIHB1YmxpYzoKLSAgICBjb25zdCBjaGFyKiBkYXRhKCkgeyByZXR1cm4gbXV0YWJsZURhdGEo
KTsgfQorICAgIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PENT
dHJpbmdCdWZmZXIqPih0aGlzKS0+bXV0YWJsZURhdGEoKTsgfQogICAgIHNpemVfdCBsZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQogCisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+
IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4gYXNCeXRlcyhTcGFuIHsgZGF0YSgpLCBsZW5ndGgoKSB9
KTsgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDU3RyaW5nOwogCkBAIC02Niw2ICs2
OSwyMCBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBDU3RyaW5nIG5l
d1VuaW5pdGlhbGl6ZWQoc2l6ZV90IGxlbmd0aCwgY2hhciomIGNoYXJhY3RlckJ1ZmZlcik7CiAg
ICAgQ1N0cmluZyhIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IG1fYnVmZmVyKEhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSkgeyB9CiAKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fYnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIG1f
YnVmZmVyLT5ieXRlcygpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFNwYW48
c3RkOjpieXRlPiBtdXRhYmxlQnl0ZXMoKQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8gbXV0YWJs
ZURhdGEgPSB0aGlzLT5tdXRhYmxlRGF0YSgpKQorICAgICAgICAgICAgcmV0dXJuIGFzV3JpdGFi
bGVCeXRlcyhTcGFuIHsgbXV0YWJsZURhdGEsIG1fYnVmZmVyLT5sZW5ndGgoKSB9KTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICB9CisKICAgICBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3QKICAg
ICB7CiAgICAgICAgIHJldHVybiBtX2J1ZmZlciA/IG1fYnVmZmVyLT5kYXRhKCkgOiBudWxscHRy
OwpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5
NCw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBMQ2hhciogY2hhcmFjdGVyczgoKSBjb25zdDsKICAg
ICBjb25zdCBVQ2hhciogY2hhcmFjdGVyczE2KCkgY29uc3Q7CiAKKyAgICBTcGFuPGNvbnN0IHN0
ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25zdDsKKwogICAgIGJvb2wgaXNBbGxBU0NJSSgpIGNvbnN0Owog
CiAgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CkBAIC00MjQsNiArNDI2LDEzIEBAIGlubGlu
ZSBjb25zdCBVQ2hhciogU3RyaW5nVmlldzo6Y2hhcmFjdGUKICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgVUNoYXIqPihtX2NoYXJhY3RlcnMpOwogfQogCitpbmxpbmUgU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+IFN0cmluZ1ZpZXc6OmJ5dGVzKCkgY29uc3QKK3sKKyAgICBpZiAoaXM4Qml0KCkp
CisgICAgICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSB9
KTsKKyAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgY2hhcmFjdGVyczE2KCksIGxlbmd0aCgpIH0p
OworfQorCiBpbmxpbmUgYm9vbCBTdHJpbmdWaWV3Ojppc0FsbEFTQ0lJKCkgY29uc3QKIHsKICAg
ICBpZiAoaXM4Qml0KCkpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHJldmlzaW9uIDI3
ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPHd0Zi9G
dW5jdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQVND
SUlMaXRlcmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvSW50ZWdlclRvU3RyaW5nQ29udmVyc2lv
bi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KQEAgLTEzNCw2ICsxMzUsNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiAhbV9pbXBsIHx8IG1f
aW1wbC0+aXM4Qml0KCk7IH0KIAogICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5sZW5ndGgoKSAqIChpczhCaXQoKSA/IHNpemVvZihMQ2hh
cikgOiBzaXplb2YoVUNoYXIpKSA6IDA7IH0KKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0
ZXMoKSBjb25zdDsKIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBDU3RyaW5nIGFzY2lpKCkgY29u
c3Q7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIENTdHJpbmcgbGF0aW4xKCkgY29uc3Q7CkBAIC00
ODMsNiArNDg1LDE2IEBAIHRlbXBsYXRlPD4gaW5saW5lIGNvbnN0IFVDaGFyKiBTdHJpbmc6OmMK
ICAgICByZXR1cm4gY2hhcmFjdGVyczE2KCk7CiB9CiAKK2lubGluZSBTcGFuPGNvbnN0IHN0ZDo6
Ynl0ZT4gU3RyaW5nOjpieXRlcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ltcGwpCisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICBpZiAobV9pbXBsLT5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJu
IGFzQnl0ZXMoU3BhbiB7IG1faW1wbC0+Y2hhcmFjdGVyczgoKSwgbV9pbXBsLT5sZW5ndGgoKSB9
KTsKKyAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgbV9pbXBsLT5jaGFyYWN0ZXJzMTYoKSwgbV9p
bXBsLT5sZW5ndGgoKSB9KTsKK30KKwogaW5saW5lIFVDaGFyIFN0cmluZzo6Y2hhcmFjdGVyQXQo
dW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ltcGwgfHwgaW5kZXggPj0gbV9p
bXBsLT5sZW5ndGgoKSkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzYzLDkgKzM2Myw5IEBAIFN0cmluZyBjcmVhdGVUZW1wb3JhcnlE
aXJlY3RvcnkoKQogICAgIH0pOwogfQogCi1ib29sIHVubWFwVmlld09mRmlsZSh2b2lkKiBidWZm
ZXIsIHNpemVfdCkKK2Jvb2wgdW5tYXBWaWV3T2ZGaWxlKFNwYW48c3RkOjpieXRlPiBkYXRhKQog
ewotICAgIHJldHVybiBVbm1hcFZpZXdPZkZpbGUoYnVmZmVyKTsKKyAgICByZXR1cm4gVW5tYXBW
aWV3T2ZGaWxlKGRhdGEuZGF0YSgpKTsKIH0KIAogYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmls
ZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBGaWxlT3Blbk1vZGUgb3Blbk1vZGUs
IE1hcHBlZEZpbGVNb2RlKQpAQCAtMzc0LDcgKzM3NCw3IEBAIGJvb2wgTWFwcGVkRmlsZURhdGE6
Om1hcEZpbGVIYW5kbGUoUGxhdGYKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byBz
aXplID0gZmlsZVNpemUoaGFuZGxlKTsKLSAgICBpZiAoIXNpemUgfHwgKnNpemUgPiBzdGQ6Om51
bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIHx8ICpzaXplID4gc3RkOjpudW1lcmljX2xpbWl0
czxkZWNsdHlwZShtX2ZpbGVTaXplKT46Om1heCgpKSB7CisgICAgaWYgKCFzaXplIHx8ICpzaXpl
ID4gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSB8fCAqc2l6ZSA+IHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZGVjbHR5cGUobV9maWxlRGF0YS5zaXplKCkpPjo6bWF4KCkpIHsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNDAzLDExICs0MDMsMTIgQEAgYm9vbCBNYXBw
ZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0ZgogICAgIGlmICghbWFwcGluZykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9maWxlRGF0YSA9IE1hcFZpZXdPZkZpbGUobWFwcGlu
ZywgZGVzaXJlZEFjY2VzcywgMCwgMCwgKnNpemUpOworICAgIGF1dG8gZGF0YSA9IE1hcFZpZXdP
ZkZpbGUobWFwcGluZywgZGVzaXJlZEFjY2VzcywgMCwgMCwgKnNpemUpOwogICAgIENsb3NlSGFu
ZGxlKG1hcHBpbmcpOwotICAgIGlmICghbV9maWxlRGF0YSkKKyAgICBpZiAoIWRhdGEpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2ZpbGVTaXplID0gKnNpemU7CisKKyAgICBtX2ZpbGVE
YXRhID0gU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpieXRlKj4oZGF0YSksICpzaXplIH07
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgw
IEBACisyMDIxLTA2LTExICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAg
ICBBZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogTW9kdWxlcy9oaWdobGlnaHQv
QXBwSGlnaGxpZ2h0Lmg6CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHQ6OmVuY29kZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHQ6OmRlY29kZSk6CisgICAgICAg
ICogTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6dG9TaGFyZWRCdWZmZXIgY29uc3QpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvclJlc3BvbnNlRGF0YS5oOgor
ICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlQXJyYXlCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
ZGVjb2RlQXJyYXlCdWZmZXIpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oOgorICAgICAgICAoV2ViQ29yZTo6UHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmg6CisgICAgICAgIChX
ZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcjo6ZW5jb2RlIGNvbnN0KToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRXZWJTb2NrZXRBY2Nl
cHQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0J1ZmZlclNvdXJjZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6QnVmZmVyU291cmNlOjpieXRlcyBjb25zdCk6CisgICAgICAgICogYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmRlY29kZSk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvU2VyaWFsaXpl
ZE5GQS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6U2VyaWFsaXpl
ZE5GQTo6cG9pbnRlckF0T2Zmc2V0SW5GaWxlIGNvbnN0KToKKyAgICAgICAgKiBjcnlwdG8vbWFj
L1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
QW5kU3RvcmVNYXN0ZXJLZXkpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Omhhc2hQb2ludGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBhdGNoU3VwcG9ydDo6Y3JlYXRlRGlnZXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OmFkZFN0cmluZ1RvU0hBMSk6IERlbGV0ZWQuCisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZpY2F0ZSk6CisgICAgICAgICogaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yTmV0d29ya0FnZW50OjpnZXRTZXJpYWxpemVkQ2VydGlmaWNhdGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpjcmVhdGVTaGFyZWRCdWZmZXIgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRC
dWZmZXI6OlNoYXJlZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmFw
cGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpkYXRh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmJ5
dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6ZGVjb2RlciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpzaXplIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZGVjb2RlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Nb2RlbC5oOgorICAgICAgICAoV2ViQ29yZTo6TW9kZWw6OmVuY29k
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNb2RlbDo6ZGVjb2RlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6UGl4ZWxC
dWZmZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6ZGVj
b2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNl
Q2FwYWJpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpDYXBhYmlsaXR5VmFsdWVPclJhbmdl
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FwYWJpbGl0eVZhbHVlT3JSYW5n
ZTo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlh
U291cmNlQ2VudGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZFN0cmluZ1RvU0hBMSk6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHA6Cisg
ICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjplbmNvZGVDRkRhdGEpOgorICAgICAgICAoV1RGOjpQ
ZXJzaXN0ZW5jZTo6ZGVjb2RlQ0ZEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRl
U3RhdGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6YmluZEJs
b2IpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaDoKKyAgICAgICAg
KiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzKToKKyAgICAg
ICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTV1NjcmlwdFN0b3JhZ2U6OnN0b3JlKToKKwogMjAyMS0wNi0xMSAgQ2hyaXMg
RHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIExhemlseSBjb21wdXRlIFNlY3Vy
aXR5T3JpZ2luOjptX2lzUG90ZW50aWFsbHlUcnVzdHdvcnRoeSBmb3IgcGVyZm9ybWFuY2UKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvSW5pdERhdGFSZWdpc3Ry
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRp
YS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIHN0YXRpYyBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzYW5p
dGl6ZUtleWkKICAgICBhdXRvIG9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAg
YXV0byBraWRzQXJyYXkgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgZm9yIChhdXRvJiBi
dWZmZXIgOiBrZXlJREJ1ZmZlci52YWx1ZSgpKQotICAgICAgICBraWRzQXJyYXktPnB1c2hTdHJp
bmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgp
KSk7CisgICAgICAgIGtpZHNBcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVUb1N0cmlu
ZyhidWZmZXItPmJ5dGVzKCkpKTsKICAgICBvYmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92
ZShraWRzQXJyYXkpKTsKIAogICAgIENTdHJpbmcganNvbkRhdGEgPSBvYmplY3QtPnRvSlNPTlN0
cmluZygpLnV0ZjgoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0Fw
cEhpZ2hsaWdodC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxp
Z2h0L0FwcEhpZ2hsaWdodC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyAr
NTIsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBBcHBIaWdobGlnaHQ6OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
c2l6ZV90PihoaWdobGlnaHQtPnNpemUoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEoaGlnaGxpZ2h0LT5kYXRhKCksIGhpZ2hsaWdodC0+c2l6ZSgpLCAxKTsKKyAgICBlbmNv
ZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YSgqaGlnaGxpZ2h0LCAxKTsKIAogICAgIGVuY29kZXIg
PDwgdGV4dDsKIApAQCAtNzUsNyArNzUsNyBAQCBzdGQ6Om9wdGlvbmFsPEFwcEhpZ2hsaWdodD4g
QXBwSGlnaGxpZ2h0CiAKICAgICBWZWN0b3I8dWludDhfdD4gaGlnaGxpZ2h0OwogICAgIGhpZ2hs
aWdodC5ncm93KCpsZW5ndGgpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERh
dGEoaGlnaGxpZ2h0LmRhdGEoKSwgaGlnaGxpZ2h0LnNpemUoKSwgMSkpCisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShoaWdobGlnaHQsIDEpKQogICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwogCiAgICAgc3RkOjpvcHRpb25hbDxzdGQ6Om9wdGlvbmFsPFN0cmluZz4+
IHRleHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGln
aHRSYW5nZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGln
aGxpZ2h0L0FwcEhpZ2hsaWdodFJhbmdlRGF0YS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFJhbmdlRGF0YS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgUmVmPFNoYXJlZEJ1ZmZlcj4gQXBwSGln
aGxpZ2h0UmFuZ2VEYXRhOgogewogICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2Rl
cjsKICAgICBlbmNvZGVyIDw8ICp0aGlzOwotICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0
ZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgcmV0dXJuIFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCkpOwogfQogCiB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPiB2b2lkIEFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6Tm9kZVBhdGhDb21wb25lbnQ6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAJKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNo
YW5uZWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIE5ldHdvcmtTZW5kUXVl
dWUgUlRDRGF0YUNoYW5uZWw6OmNyZWF0ZU0KICAgICAgICAgaWYgKCFjaGFubmVsLm1faGFuZGxl
ci0+c2VuZFN0cmluZ0RhdGEodXRmOCkpCiAgICAgICAgICAgICBjaGFubmVsLnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3Nh
Z2VMZXZlbDo6RXJyb3IsICJFcnJvciBzZW5kaW5nIHN0cmluZyB0aHJvdWdoIFJUQ0RhdGFDaGFu
bmVsLiJfcyk7CiAgICAgfSwgWyZjaGFubmVsXShhdXRvJiBzcGFuKSB7Ci0gICAgICAgIGlmICgh
Y2hhbm5lbC5tX2hhbmRsZXItPnNlbmRSYXdEYXRhKHNwYW4uZGF0YSgpLCBzcGFuLnNpemUoKSkp
CisgICAgICAgIGlmICghY2hhbm5lbC5tX2hhbmRsZXItPnNlbmRSYXdEYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNwYW4uZGF0YSgpKSwgc3Bhbi5zaXplKCkpKQogICAgICAg
ICAgICAgY2hhbm5lbC5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFkZENvbnNvbGVNZXNzYWdl
KE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAiRXJyb3Igc2VuZGluZyBi
aW5hcnkgZGF0YSB0aHJvdWdoIFJUQ0RhdGFDaGFubmVsLiJfcyk7CiAgICAgfSwgWyZjaGFubmVs
XShFeGNlcHRpb25Db2RlIGVycm9yQ29kZSkgewogICAgICAgICBpZiAoYXV0byogY29udGV4dCA9
IGNoYW5uZWwuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxh
Y2VtZW50Lm1tCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Bs
dWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTUy
LDYgKzUyLDcgQEAKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0NhdGNoU2NvcGUuaD4KICNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CiAjaW1wb3J0IDxvYmpjL3J1bnRp
bWUuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9TcGFuQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi90ZXh0
L0Jhc2U2NC5oPgogCiAjaW1wb3J0IDxwYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaD4KQEAgLTI0
Niw5ICsyNDcsOSBAQCBzdGF0aWMgSlNWYWx1ZSAqanNWYWx1ZVdpdGhEYXRhSW5Db250ZXh0CiAg
ICAgLy8gRklYTUU6IEFkZCBtYWtlQ0ZTdHJpbmcvbWFrZU5TU3RyaW5nIHRvIGF2b2lkIHVubmVj
ZXNzYXJ5IFN0cmluZyBhbGxvY2F0aW9uLgogICAgIFN0cmluZyBkYXRhNjQ7CiAgICAgaWYgKCFt
aW1lVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6Iiwg
bWltZVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoW2RhdGEgYnl0ZXNdLCBbZGF0YSBs
ZW5ndGhdKSk7CisgICAgICAgIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgbWltZVR5cGUs
ICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoYXNCeXRlcyhkYXRhKSkpOwogICAgIGVsc2UKLSAg
ICAgICAgZGF0YTY0ID0gbWFrZVN0cmluZygiZGF0YTp0ZXh0L3BsYWluO2Jhc2U2NCwiLCBiYXNl
NjRFbmNvZGVkKFtkYXRhIGJ5dGVzXSwgW2RhdGEgbGVuZ3RoXSkpOworICAgICAgICBkYXRhNjQg
PSBtYWtlU3RyaW5nKCJkYXRhOnRleHQvcGxhaW47YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoYXNC
eXRlcyhkYXRhKSkpOwogCiAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aE9iamVjdDooaWQp
ZGF0YTY0LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkgaW5Db250ZXh0OmNvbnRleHRdOwogfQpAQCAt
MzQwLDcgKzM0MSw3IEBAIHN0YXRpYyBKU1ZhbHVlICpqc1ZhbHVlV2l0aEFWTWV0YWRhdGFJdGUK
ICAgICAgICAgaWQgdmFsdWUgPSBpdGVtLnZhbHVlOwogICAgICAgICBOU1N0cmluZyAqbWltZVR5
cGUgPSBbW2l0ZW0gZXh0cmFBdHRyaWJ1dGVzXSBvYmplY3RGb3JLZXk6QCJNSU1FdHlwZSJdOwog
ICAgICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TRGF0YSBjbGFzc11dICYmIG1pbWVU
eXBlKSB7Ci0gICAgICAgICAgICBhdXRvIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgU3Ry
aW5nKG1pbWVUeXBlKSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChbdmFsdWUgYnl0ZXNdLCBb
dmFsdWUgbGVuZ3RoXSkpOworICAgICAgICAgICAgYXV0byBkYXRhNjQgPSBtYWtlU3RyaW5nKCJk
YXRhOiIsIFN0cmluZyhtaW1lVHlwZSksICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoYXNCeXRl
cygoTlNEYXRhICopdmFsdWUpKSk7CiAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6
KF9fYnJpZGdlIE5TU3RyaW5nICopZGF0YTY0LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkgZm9yS2V5
OkAidmFsdWUiXTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRP
YmplY3Q6dmFsdWUgZm9yS2V5OkAidmFsdWUiXTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRpY2F0b3JDb29yZGluYXRvci5j
cHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4v
QXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQs
NyBAQCBzdGF0aWMgUmVmPEFycmF5QnVmZmVyPiBwcm9kdWNlQ2xpZW50RGF0CiAgICAgICAgIG9i
amVjdC0+c2V0U3RyaW5nKCJ0eXBlIl9zLCAid2ViYXV0aG4uZ2V0Il9zKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQotICAgIG9iamVjdC0+c2V0U3RyaW5nKCJjaGFsbGVuZ2UiX3MsIGJhc2U2NFVS
TEVuY29kZVRvU3RyaW5nKGNoYWxsZW5nZS5kYXRhKCksIGNoYWxsZW5nZS5sZW5ndGgoKSkpOwor
ICAgIG9iamVjdC0+c2V0U3RyaW5nKCJjaGFsbGVuZ2UiX3MsIGJhc2U2NFVSTEVuY29kZVRvU3Ry
aW5nKGNoYWxsZW5nZS5ieXRlcygpKSk7CiAgICAgb2JqZWN0LT5zZXRTdHJpbmcoIm9yaWdpbiJf
cywgb3JpZ2luLnRvUmF3U3RyaW5nKCkpOwogCiAgICAgYXV0byB1dGY4SlNPTlN0cmluZyA9IG9i
amVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdXRobi9BdXRoZW50aWNhdG9yUmVzcG9uc2VEYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yUmVzcG9uc2VEYXRhLmgJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0
aGVudGljYXRvclJlc3BvbnNlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBA
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiBzdGF0aWMgdm9pZCBlbmNvZGVBcnJheUJ1ZmZlcihF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBBcnJheUJ1ZmZlciYgYnVmZmVyKQogewogICAgIGVuY29k
ZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ1ZmZlci5ieXRlTGVuZ3RoKCkpOwotICAgIGVu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihi
dWZmZXIuZGF0YSgpKSwgYnVmZmVyLmJ5dGVMZW5ndGgoKSwgMSk7CisgICAgZW5jb2Rlci5lbmNv
ZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLmJ5dGVzKCksIDEpOwogfQogCiB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgpAQCAtNzUsNyArNzUsNyBAQCBSZWZQdHI8QXJyYXlCdWZmZXI+IGRlY29kZUFy
cmF5QnVmZmVyKERlCiAgICAgYXV0byBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKGxl
bmd0aC52YWx1ZSgpLCBzaXplb2YodWludDhfdCkpOwogICAgIGlmICghYnVmZmVyKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihidWZmZXItPmRhdGEoKSksIGxlbmd0aC52YWx1ZSgpLCAx
KSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ1ZmZlci0+d3JpdGFi
bGVCeXRlcygpLCAxKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIGJ1ZmZl
cjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3Jl
ZGVudGlhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRo
bi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTQsNyArNTQsNyBAQCBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRw
dXRzIFB1CiB9CiAKIFB1YmxpY0tleUNyZWRlbnRpYWw6OlB1YmxpY0tleUNyZWRlbnRpYWwoUmVm
PEF1dGhlbnRpY2F0b3JSZXNwb25zZT4mJiByZXNwb25zZSkKLSAgICA6IEJhc2ljQ3JlZGVudGlh
bChiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhyZXNwb25zZS0+cmF3SWQoKS0+ZGF0YSgpLCByZXNw
b25zZS0+cmF3SWQoKS0+Ynl0ZUxlbmd0aCgpKSwgVHlwZTo6UHVibGljS2V5LCBEaXNjb3Zlcnk6
OlJlbW90ZSkKKyAgICA6IEJhc2ljQ3JlZGVudGlhbChiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhy
ZXNwb25zZS0+cmF3SWQoKS0+Ynl0ZXMoKSksIFR5cGU6OlB1YmxpY0tleSwgRGlzY292ZXJ5OjpS
ZW1vdGUpCiAgICAgLCBtX3Jlc3BvbnNlKFdURk1vdmUocmVzcG9uc2UpKQogewogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRp
b25PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRo
bi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmgJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENy
ZWF0aW9uT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsOCArMTQxLDggQEAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9u
czo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBycC5p
ZCA8PCBycC5uYW1lIDw8IHJwLmljb247Ci0gICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50
NjRfdD4odXNlci5pZC5sZW5ndGgoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERh
dGEodXNlci5pZC5kYXRhKCksIHVzZXIuaWQubGVuZ3RoKCksIDEpOworICAgIGVuY29kZXIgPDwg
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHVzZXIuaWQuYnl0ZXMoKS5zaXplKCkpOworICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHVzZXIuaWQuYnl0ZXMoKSwgMSk7CiAgICAgZW5jb2Rl
ciA8PCB1c2VyLmRpc3BsYXlOYW1lIDw8IHVzZXIubmFtZSA8PCB1c2VyLmljb24gPDwgcHViS2V5
Q3JlZFBhcmFtcyA8PCB0aW1lb3V0IDw8IGV4Y2x1ZGVDcmVkZW50aWFscyA8PCBhdXRoZW50aWNh
dG9yU2VsZWN0aW9uIDw8IGF0dGVzdGF0aW9uIDw8IGV4dGVuc2lvbnM7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1Ymxp
Y0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsOCBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgog
dm9pZCBQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcjo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCB0eXBlOwotICAgIGVuY29kZXIgPDwgc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KGlkLmxlbmd0aCgpKTsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShpZC5kYXRhKCksIGlkLmxlbmd0aCgpLCAxKTsKKyAgICBlbmNvZGVyIDw8IHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihpZC5ieXRlcygpLnNpemUoKSk7CisgICAgZW5jb2Rlci5lbmNvZGVG
aXhlZExlbmd0aERhdGEoaWQuYnl0ZXMoKSwgMSk7CiAgICAgZW5jb2RlciA8PCB0cmFuc3BvcnRz
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0
SGFuZHNoYWtlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNv
Y2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk3LDE5ICs5NywyMCBAQCBzdGF0aWMgU3RyaW5nIGdlbmVyYXRlU2VjV2Vi
U29ja2V0S2V5KCkKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG5vbmNlU2l6ZSA9IDE2OwogICAg
IHVuc2lnbmVkIGNoYXIga2V5W25vbmNlU2l6ZV07CiAgICAgY3J5cHRvZ3JhcGhpY2FsbHlSYW5k
b21WYWx1ZXMoa2V5LCBub25jZVNpemUpOwotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmlu
ZyhrZXksIG5vbmNlU2l6ZSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGtleSk7
CiB9CiAKIFN0cmluZyBXZWJTb2NrZXRIYW5kc2hha2U6OmdldEV4cGVjdGVkV2ViU29ja2V0QWNj
ZXB0KGNvbnN0IFN0cmluZyYgc2VjV2ViU29ja2V0S2V5KQogewogICAgIGNvbnN0ZXhwciB1aW50
OF90IHdlYlNvY2tldEtleUdVSURbXSA9ICIyNThFQUZBNS1FOTE0LTQ3REEtOTVDQS1DNUFCMERD
ODVCMTEiOworCiAgICAgU0hBMSBzaGExOwotICAgIENTdHJpbmcga2V5RGF0YSA9IHNlY1dlYlNv
Y2tldEtleS5hc2NpaSgpOwotICAgIHNoYTEuYWRkQnl0ZXMoa2V5RGF0YS5kYXRhQXNVSW50OFB0
cigpLCBrZXlEYXRhLmxlbmd0aCgpKTsKLSAgICBzaGExLmFkZEJ5dGVzKHdlYlNvY2tldEtleUdV
SUQsIHN0ZDo6c2l6ZSh3ZWJTb2NrZXRLZXlHVUlEKSAtIDEpOworICAgIHNoYTEuYWRkQnl0ZXMo
c2VjV2ViU29ja2V0S2V5LmFzY2lpKCkuYnl0ZXMoKSk7CisgICAgc2hhMS5hZGRCeXRlcyh3ZWJT
b2NrZXRLZXlHVUlEKTsKKwogICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwogICAgIHNoYTEuY29tcHV0
ZUhhc2goaGFzaCk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGhhc2guZGF0YSgp
LCBTSEExOjpoYXNoU2l6ZSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGhhc2gp
OwogfQogCiBXZWJTb2NrZXRIYW5kc2hha2U6OldlYlNvY2tldEhhbmRzaGFrZShjb25zdCBVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNv
bnN0IFN0cmluZyYgY2xpZW50T3JpZ2luLCBib29sIGFsbG93Q29va2llcykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvV2ViQ29y
ZS54Y3NjaGVtZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai94Y3NoYXJlZGRhdGEveGNzY2hlbWVzL1dlYkNvcmUueGNzY2hlbWUJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3Nj
aGVtZXMvV2ViQ29yZS54Y3NjaGVtZQkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksOSBAQAog
ICAgICAgaWdub3Jlc1BlcnNpc3RlbnRTdGF0ZU9uTGF1bmNoID0gIk5PIgogICAgICAgZGVidWdE
b2N1bWVudFZlcnNpb25pbmcgPSAiWUVTIgogICAgICAgZGVidWdTZXJ2aWNlRXh0ZW5zaW9uID0g
ImludGVybmFsIgotICAgICAgYWxsb3dMb2NhdGlvblNpbXVsYXRpb24gPSAiWUVTIj4KKyAgICAg
IGVuYWJsZUdQVUZyYW1lQ2FwdHVyZU1vZGUgPSAiMyIKKyAgICAgIGFsbG93TG9jYXRpb25TaW11
bGF0aW9uID0gIllFUyIKKyAgICAgIEdQVVByb2ZpbGVyRW5hYmxlZCA9ICJObyI+CiAgICA8L0xh
dW5jaEFjdGlvbj4KICAgIDxQcm9maWxlQWN0aW9uCiAgICAgICBidWlsZENvbmZpZ3VyYXRpb24g
PSAiUmVsZWFzZSIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0J1ZmZlclNvdXJj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0J1ZmZlclNvdXJj
ZS5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9CdWZm
ZXJTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsMTMgQEAgcHVibGljOgogICAg
ICAgICB9LCBtX3ZhcmlhbnQpOwogICAgIH0KIAorICAgIFNwYW48Y29uc3QgdWludDhfdD4gYnl0
ZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQoW10oYXV0byYgYnVm
ZmVyKSAtPiBTcGFuPGNvbnN0IHVpbnQ4X3Q+IHsKKyAgICAgICAgICAgIHJldHVybiBidWZmZXIg
PyBTcGFuPGNvbnN0IHVpbnQ4X3Q+IHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZl
ci0+ZGF0YSgpKSwgYnVmZmVyLT5ieXRlTGVuZ3RoKCkgfSA6IFNwYW48Y29uc3QgdWludDhfdD4g
eyB9OworICAgICAgICB9LCBtX3ZhcmlhbnQpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBWYXJp
YW50VHlwZSBtX3ZhcmlhbnQ7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjQsMTUgKzE2NCwxNSBAQCB2b2lkIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
ZW5jb2RlKEVuY29kCiAKICAgICBpZiAoaGFzQXJyYXkpIHsKICAgICAgICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDx1aW50NjRfdD4obV9hcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXktPnNpemUoKSk7
Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byAmYXJyYXlCdWZmZXJDb250ZW50cyA6ICptX2FycmF5
QnVmZmVyQ29udGVudHNBcnJheSkgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGFycmF5QnVm
ZmVyQ29udGVudHMgOiAqbV9hcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkpIHsKICAgICAgICAgICAg
IGVuY29kZXIgPDwgYXJyYXlCdWZmZXJDb250ZW50cy5zaXplSW5CeXRlcygpOwotICAgICAgICAg
ICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGFycmF5QnVmZmVyQ29udGVudHMuZGF0YSgpKSwgYXJyYXlCdWZmZXJDb250ZW50cy5zaXpl
SW5CeXRlcygpLCAxKTsKKyAgICAgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KGFycmF5QnVmZmVyQ29udGVudHMuYnl0ZXMoKSwgMSk7CiAgICAgICAgIH0KICAgICB9CiAKICNp
ZiBFTkFCTEUoV0VCX1JUQykKICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Piht
X2RldGFjaGVkUlRDRGF0YUNoYW5uZWxzLnNpemUoKSk7Ci0gICAgZm9yIChjb25zdCBhdXRvICZj
aGFubmVsIDogbV9kZXRhY2hlZFJUQ0RhdGFDaGFubmVscykKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IGNoYW5uZWwgOiBtX2RldGFjaGVkUlRDRGF0YUNoYW5uZWxzKQogICAgICAgICBlbmNvZGVyIDw8
ICpjaGFubmVsOwogI2VuZGlmCiB9CkBAIC0yMDYsNyArMjA2LDcgQEAgUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZAogICAgICAgICAgICAgYXV0byBidWZmZXIgPSBHaWdh
Y2FnZTo6dHJ5TWFsbG9jKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJ1ZmZlclNpemUpOwogICAgICAg
ICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihidWZmZXIpLCBidWZmZXJTaXplLCAxKSkgeworICAgICAgICAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgc3RhdGljX2Nhc3Q8c3RkOjpieXRlKj4o
YnVmZmVyKSwgYnVmZmVyU2l6ZSB9LCAxKSkgewogICAgICAgICAgICAgICAgIEdpZ2FjYWdlOjpm
cmVlKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9TZXJpYWxpemVkTkZBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9TZXJpYWxpemVkTkZBLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvU2VyaWFsaXplZE5GQS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBTZXJpYWxpemVkTkZBOjpTZXJpYWxpemVkTkZB
KEZpbGVTeXN0ZW06CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogY29uc3QgVCogU2VyaWFsaXplZE5G
QTo6cG9pbnRlckF0T2Zmc2V0SW5GaWxlKHNpemVfdCBvZmZzZXQpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihtX2ZpbGUuZGF0YSgpKSArIG9mZnNldCk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgVCo+KG1fZmlsZS5kYXRhKCkuZGF0YSgpICsgb2Zmc2V0KTsKIH0KIAogYXV0byBTZXJp
YWxpemVkTkZBOjpub2RlcygpIGNvbnN0IC0+IGNvbnN0IFJhbmdlPEltbXV0YWJsZU5GQU5vZGU+
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNwcAko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlF
Q01hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NywxMCArMTk3LDEwIEBAIGJvb2wgQ3J5cHRv
S2V5RUM6OnBsYXRmb3JtQWRkRmllbGRFbGVtZW4KIAogICAgIGlmIChVTkxJS0VMWSgoc2l6ZSAh
PSBwdWJsaWNLZXlTaXplKSAmJiAoc2l6ZSAhPSBwcml2YXRlS2V5U2l6ZSkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgandrLnggPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhyZXN1bHQu
ZGF0YSgpICsgMSwga2V5U2l6ZUluQnl0ZXMpOwotICAgIGp3ay55ID0gYmFzZTY0VVJMRW5jb2Rl
VG9TdHJpbmcocmVzdWx0LmRhdGEoKSArIGtleVNpemVJbkJ5dGVzICsgMSwga2V5U2l6ZUluQnl0
ZXMpOworICAgIGp3ay54ID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoU3BhbiB7IHJlc3VsdCB9
LnN1YnNwYW4oMSwga2V5U2l6ZUluQnl0ZXMpKTsKKyAgICBqd2sueSA9IGJhc2U2NFVSTEVuY29k
ZVRvU3RyaW5nKFNwYW4geyByZXN1bHQgfS5zdWJzcGFuKDEgKyBrZXlTaXplSW5CeXRlcywga2V5
U2l6ZUluQnl0ZXMpKTsKICAgICBpZiAoc2l6ZSA+IHB1YmxpY0tleVNpemUpCi0gICAgICAgIGp3
ay5kID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcocmVzdWx0LmRhdGEoKSArIHB1YmxpY0tleVNp
emUsIGtleVNpemVJbkJ5dGVzKTsKKyAgICAgICAgandrLmQgPSBiYXNlNjRVUkxFbmNvZGVUb1N0
cmluZyhTcGFuIHsgcmVzdWx0IH0uc3Vic3BhbihwdWJsaWNLZXlTaXplLCBrZXlTaXplSW5CeXRl
cykpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
bWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9tYWMvU2VyaWFsaXplZENyeXB0b0tleVdyYXBNYWMubW0JKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvU2VyaWFsaXplZENyeXB0b0tl
eVdyYXBNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbXBvcnQgPHd0
Zi9DcnlwdG9ncmFwaGljVXRpbGl0aWVzLmg+CiAjaW1wb3J0IDx3dGYvUHJvY2Vzc1ByaXZpbGVn
ZS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL2NmL1NwYW5DRi5o
PgogI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvc3BpL2Nv
Y29hL1NlY3VyaXR5U1BJLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4KQEAgLTE2Nyw3
ICsxNjgsNyBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGZpCiAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+
IGtleURhdGEgPSBhZG9wdENGKGtleURhdGFSZWYpOwotICAgIHJldHVybiBiYXNlNjREZWNvZGUo
Q0ZEYXRhR2V0Qnl0ZVB0cihrZXlEYXRhLmdldCgpKSwgQ0ZEYXRhR2V0TGVuZ3RoKGtleURhdGEu
Z2V0KCkpKTsKKyAgICByZXR1cm4gYmFzZTY0RGVjb2RlKGFzQnl0ZXMoa2V5RGF0YS5nZXQoKSkp
OwogfQogCiBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZGVmYXVsdFdlYkNyeXB0b01h
c3RlcktleSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MDYsNyArMTYwNiw4
IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IE5vZGU6OnNldFRleHRDb250ZW50KGMKIHN0YXRpYyBTSEEx
OjpEaWdlc3QgaGFzaFBvaW50ZXIoY29uc3Qgdm9pZCogcG9pbnRlcikKIHsKICAgICBTSEExIHNo
YTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigm
cG9pbnRlciksIHNpemVvZihwb2ludGVyKSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgJnBv
aW50ZXIsIDEgfSk7CisKICAgICBTSEExOjpEaWdlc3QgZGlnZXN0OwogICAgIHNoYTEuY29tcHV0
ZUhhc2goZGlnZXN0KTsKICAgICByZXR1cm4gZGlnZXN0OwpJbmRleDogU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMzgsNyArMzM4LDcgQEAgdm9pZCBGaWxlUmVhZGVyTG9hZGVyOjpjb252ZXJ0VG9EYXRhVVJM
KAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9zdHJpbmdSZXN1bHQgPSBtYWtlU3Ry
aW5nKCJkYXRhOiIsIG1fZGF0YVR5cGUuaXNFbXB0eSgpID8gImFwcGxpY2F0aW9uL29jdGV0LXN0
cmVhbSIgOiBtX2RhdGFUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKG1fcmF3RGF0YS0+
ZGF0YSgpLCBtX2J5dGVzTG9hZGVkKSk7CisgICAgbV9zdHJpbmdSZXN1bHQgPSBtYWtlU3RyaW5n
KCJkYXRhOiIsIG1fZGF0YVR5cGUuaXNFbXB0eSgpID8gImFwcGxpY2F0aW9uL29jdGV0LXN0cmVh
bSIgOiBtX2RhdGFUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKG1fcmF3RGF0YS0+Ynl0
ZXMoKSkpOwogfQogCiBib29sIEZpbGVSZWFkZXJMb2FkZXI6OmlzQ29tcGxldGVkKCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTmV0d29ya1NlbmRRdWV1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTEgKzUzLDEwIEBAIHZvaWQgTmV0d29ya1NlbmRR
dWV1ZTo6ZW5xdWV1ZShDU3RyaW5nJiYKIHZvaWQgTmV0d29ya1NlbmRRdWV1ZTo6ZW5xdWV1ZShj
b25zdCBKU0M6OkFycmF5QnVmZmVyJiBiaW5hcnlEYXRhLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
bnNpZ25lZCBieXRlTGVuZ3RoKQogewogICAgIGlmIChtX3F1ZXVlLmlzRW1wdHkoKSkgewotICAg
ICAgICBhdXRvKiBkYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJpbmFyeURhdGEu
ZGF0YSgpKTsKLSAgICAgICAgbV93cml0ZVJhd0RhdGEoU3BhbiB7IGRhdGEgKyBieXRlT2Zmc2V0
LCBieXRlTGVuZ3RoIH0pOworICAgICAgICBtX3dyaXRlUmF3RGF0YShiaW5hcnlEYXRhLmJ5dGVz
KCkuc3Vic3BhbihieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgbV9xdWV1ZS5hcHBlbmQoU2hhcmVkQnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8
Y29uc3QgdWludDhfdCo+KGJpbmFyeURhdGEuZGF0YSgpKSArIGJ5dGVPZmZzZXQsIGJ5dGVMZW5n
dGgpKTsKKyAgICBtX3F1ZXVlLmFwcGVuZChTaGFyZWRCdWZmZXI6OmNyZWF0ZShiaW5hcnlEYXRh
LmJ5dGVzKCkuc3Vic3BhbihieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSkpOwogfQogCiB2b2lkIE5l
dHdvcmtTZW5kUXVldWU6OmVucXVldWUoV2ViQ29yZTo6QmxvYiYgYmxvYikKQEAgLTkzLDcgKzky
LDkgQEAgdm9pZCBOZXR3b3JrU2VuZFF1ZXVlOjpwcm9jZXNzTWVzc2FnZXMoKQogICAgICAgICBz
d2l0Y2hPbihtX3F1ZXVlLmZpcnN0KCksIFt0aGlzXShjb25zdCBDU3RyaW5nJiB1dGY4KSB7CiAg
ICAgICAgICAgICBtX3dyaXRlU3RyaW5nKHV0ZjgpOwogICAgICAgICB9LCBbdGhpc10oUmVmPFNo
YXJlZEJ1ZmZlcj4mIGRhdGEpIHsKLSAgICAgICAgICAgIGRhdGEtPmZvckVhY2hTZWdtZW50KG1f
d3JpdGVSYXdEYXRhKTsKKyAgICAgICAgICAgIGRhdGEtPmZvckVhY2hTZWdtZW50KFt0aGlzXShh
dXRvJiBzcGFuKSB7CisgICAgICAgICAgICAgICAgbV93cml0ZVJhd0RhdGEoYXNCeXRlcyhzcGFu
KSk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfSwgW3RoaXMsICZzaG91bGRTdG9wUHJvY2Vz
c2luZ10oVW5pcXVlUmVmPEJsb2JMb2FkZXI+JiBsb2FkZXIpIHsKICAgICAgICAgICAgIGF1dG8g
ZXJyb3JDb2RlID0gbG9hZGVyLT5lcnJvckNvZGUoKTsKICAgICAgICAgICAgIGlmIChsb2FkZXIt
PmlzTG9hZGluZygpIHx8IChlcnJvckNvZGUgJiYgZXJyb3JDb2RlLnZhbHVlKCkgPT0gQWJvcnRF
cnJvcikpIHsKQEAgLTEwMiw3ICsxMDMsNyBAQCB2b2lkIE5ldHdvcmtTZW5kUXVldWU6OnByb2Nl
c3NNZXNzYWdlcygpCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChjb25zdCBhdXRv
JiByZXN1bHQgPSBsb2FkZXItPmFycmF5QnVmZmVyUmVzdWx0KCkpIHsKLSAgICAgICAgICAgICAg
ICBtX3dyaXRlUmF3RGF0YShTcGFuIHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KHJlc3Vs
dC0+ZGF0YSgpKSwgcmVzdWx0LT5ieXRlTGVuZ3RoKCkgfSk7CisgICAgICAgICAgICAgICAgbV93
cml0ZVJhd0RhdGEocmVzdWx0LT5ieXRlcygpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBBU1NFUlQoZXJyb3JDb2RlKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvTmV0d29ya1NlbmRRdWV1ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvTmV0d29ya1NlbmRRdWV1ZS5oCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL05ldHdvcmtTZW5kUXVldWUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDgsNyArNDgsNyBAQCBjbGFzcyBTaGFyZWRCdWZmZXI7CiBjbGFzcyBXRUJDT1JFX0VY
UE9SVCBOZXR3b3JrU2VuZFF1ZXVlIDogcHVibGljIENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVy
IHsKIHB1YmxpYzoKICAgICB1c2luZyBXcml0ZVN0cmluZyA9IEZ1bmN0aW9uPHZvaWQoY29uc3Qg
Q1N0cmluZyYgdXRmOCk+OwotICAgIHVzaW5nIFdyaXRlUmF3RGF0YSA9IEZ1bmN0aW9uPHZvaWQo
Y29uc3QgU3Bhbjxjb25zdCB1aW50OF90PiYpPjsKKyAgICB1c2luZyBXcml0ZVJhd0RhdGEgPSBG
dW5jdGlvbjx2b2lkKGNvbnN0IFNwYW48Y29uc3Qgc3RkOjpieXRlPiYpPjsKICAgICBlbnVtIGNs
YXNzIENvbnRpbnVlIHsgTm8sIFllcyB9OwogICAgIHVzaW5nIFByb2Nlc3NFcnJvciA9IEZ1bmN0
aW9uPENvbnRpbnVlKEV4Y2VwdGlvbkNvZGUpPjsKICAgICBOZXR3b3JrU2VuZFF1ZXVlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmLCBXcml0ZVN0cmluZyYmLCBXcml0ZVJhd0RhdGEmJiwgUHJvY2Vz
c0Vycm9yJiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9y
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3Vw
cG9ydC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9E
T01QYXRjaFN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQsMjggKzM5NCwyMyBAQCBF
eGNlcHRpb25Pcjx2b2lkPiBET01QYXRjaFN1cHBvcnQ6OmlubmVyCiAgICAgcmV0dXJuIHsgfTsK
IH0KIAotc3RhdGljIHZvaWQgYWRkU3RyaW5nVG9TSEExKFNIQTEmIHNoYTEsIGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKQotewotICAgIENTdHJpbmcgY1N0cmluZyA9IHN0cmluZy51dGY4KCk7Ci0gICAg
c2hhMS5hZGRCeXRlcyhjU3RyaW5nLmRhdGFBc1VJbnQ4UHRyKCksIGNTdHJpbmcubGVuZ3RoKCkp
OwotfQotCiBzdGQ6OnVuaXF1ZV9wdHI8RE9NUGF0Y2hTdXBwb3J0OjpEaWdlc3Q+IERPTVBhdGNo
U3VwcG9ydDo6Y3JlYXRlRGlnZXN0KE5vZGUmIG5vZGUsIFVudXNlZE5vZGVzTWFwKiB1bnVzZWRO
b2Rlc01hcCkKIHsKICAgICBhdXRvIGRpZ2VzdCA9IG1ha2VVbmlxdWU8RGlnZXN0PigpOwogICAg
IGRpZ2VzdC0+bm9kZSA9ICZub2RlOworCiAgICAgU0hBMSBzaGExOwogCiAgICAgYXV0byBub2Rl
VHlwZSA9IG5vZGUubm9kZVR5cGUoKTsKLSAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KCZub2RlVHlwZSksIHNpemVvZihub2RlVHlwZSkpOwotICAgIGFk
ZFN0cmluZ1RvU0hBMShzaGExLCBub2RlLm5vZGVOYW1lKCkpOwotICAgIGFkZFN0cmluZ1RvU0hB
MShzaGExLCBub2RlLm5vZGVWYWx1ZSgpKTsKKyAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmbm9k
ZVR5cGUsIDEgfSk7CisgICAgc2hhMS5hZGRCeXRlcyhub2RlLm5vZGVOYW1lKCkudXRmOCgpLmJ5
dGVzKCkpOworICAgIHNoYTEuYWRkQnl0ZXMobm9kZS5ub2RlVmFsdWUoKS51dGY4KCkuYnl0ZXMo
KSk7CiAKICAgICBpZiAobm9kZS5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSkgewog
ICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUuZmlyc3RDaGlsZCgpOwogICAgICAgICB3aGlsZSAo
Y2hpbGQpIHsKICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxEaWdlc3Q+IGNoaWxkSW5mbyA9
IGNyZWF0ZURpZ2VzdCgqY2hpbGQsIHVudXNlZE5vZGVzTWFwKTsKLSAgICAgICAgICAgIGFkZFN0
cmluZ1RvU0hBMShzaGExLCBjaGlsZEluZm8tPnNoYTEpOworICAgICAgICAgICAgc2hhMS5hZGRC
eXRlcyhjaGlsZEluZm8tPnNoYTEudXRmOCgpLmJ5dGVzKCkpOwogICAgICAgICAgICAgY2hpbGQg
PSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAgIGRpZ2VzdC0+Y2hpbGRyZW4uYXBw
ZW5kKFdURk1vdmUoY2hpbGRJbmZvKSk7CiAgICAgICAgIH0KQEAgLTQyNCwxOSArNDE5LDE5IEBA
IHN0ZDo6dW5pcXVlX3B0cjxET01QYXRjaFN1cHBvcnQ6OkRpZ2VzdD4KICAgICAgICAgaWYgKGVs
ZW1lbnQuaGFzQXR0cmlidXRlc1dpdGhvdXRVcGRhdGUoKSkgewogICAgICAgICAgICAgU0hBMSBh
dHRyc1NIQTE7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGF0dHJpYnV0ZSA6IGVsZW1lbnQuYXR0
cmlidXRlc0l0ZXJhdG9yKCkpIHsKLSAgICAgICAgICAgICAgICBhZGRTdHJpbmdUb1NIQTEoYXR0
cnNTSEExLCBhdHRyaWJ1dGUubmFtZSgpLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGFk
ZFN0cmluZ1RvU0hBMShhdHRyc1NIQTEsIGF0dHJpYnV0ZS52YWx1ZSgpKTsKKyAgICAgICAgICAg
ICAgICBhdHRyc1NIQTEuYWRkQnl0ZXMoYXR0cmlidXRlLm5hbWUoKS50b1N0cmluZygpLnV0Zjgo
KS5ieXRlcygpKTsKKyAgICAgICAgICAgICAgICBhdHRyc1NIQTEuYWRkQnl0ZXMoYXR0cmlidXRl
LnZhbHVlKCkuc3RyaW5nKCkudXRmOCgpLmJ5dGVzKCkpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgU0hBMTo6RGlnZXN0IGF0dHJzSGFzaDsKICAgICAgICAgICAgIGF0dHJzU0hBMS5jb21w
dXRlSGFzaChhdHRyc0hhc2gpOwotICAgICAgICAgICAgZGlnZXN0LT5hdHRyc1NIQTEgPSBiYXNl
NjRFbmNvZGVUb1N0cmluZyhhdHRyc0hhc2guZGF0YSgpLCAxMCk7Ci0gICAgICAgICAgICBhZGRT
dHJpbmdUb1NIQTEoc2hhMSwgZGlnZXN0LT5hdHRyc1NIQTEpOworICAgICAgICAgICAgZGlnZXN0
LT5hdHRyc1NIQTEgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhhdHRyc0hhc2gpOworICAgICAgICAg
ICAgc2hhMS5hZGRCeXRlcyhkaWdlc3QtPmF0dHJzU0hBMS51dGY4KCkuYnl0ZXMoKSk7CiAgICAg
ICAgIH0KICAgICB9CiAKICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAgICBzaGExLmNvbXB1dGVI
YXNoKGhhc2gpOwotICAgIGRpZ2VzdC0+c2hhMSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGhhc2gu
ZGF0YSgpLCAxMCk7CisgICAgZGlnZXN0LT5zaGExID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaGFz
aCk7CiAgICAgaWYgKHVudXNlZE5vZGVzTWFwKQogICAgICAgICB1bnVzZWROb2Rlc01hcC0+YWRk
KGRpZ2VzdC0+c2hhMSwgZGlnZXN0LmdldCgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MDIsNyArNjAyLDcgQEAgYm9vbCBJbnNwZWN0b3JGcm9udGVu
ZEhvc3Q6OnNob3dDZXJ0aWZpYwogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEtPmRhdGEoKSwg
ZGF0YS0+c2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyAq
ZGF0YSB9OwogICAgIHN0ZDo6b3B0aW9uYWw8Q2VydGlmaWNhdGVJbmZvPiBjZXJ0aWZpY2F0ZUlu
Zm87CiAgICAgZGVjb2RlciA+PiBjZXJ0aWZpY2F0ZUluZm87CiAgICAgaWYgKCFjZXJ0aWZpY2F0
ZUluZm8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0Rh
dGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVz
b3VyY2VzRGF0YS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsx
MDYsNyBAQCB1bnNpZ25lZCBOZXR3b3JrUmVzb3VyY2VzRGF0YTo6UmVzb3VyY2VECiAgICAgICAg
IG1fY29udGVudCA9IG1fZGVjb2Rlci0+ZGVjb2RlQW5kRmx1c2gobV9kYXRhQnVmZmVyLT5kYXRh
KCksIGRhdGFMZW5ndGgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fYmFzZTY0RW5jb2RlZCA9
IHRydWU7Ci0gICAgICAgIG1fY29udGVudCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKG1fZGF0YUJ1
ZmZlci0+ZGF0YSgpLCBkYXRhTGVuZ3RoKTsKKyAgICAgICAgbV9jb250ZW50ID0gYmFzZTY0RW5j
b2RlVG9TdHJpbmcobV9kYXRhQnVmZmVyLT5ieXRlcygpKTsKICAgICB9CiAKICAgICBtX2RhdGFC
dWZmZXIgPSBudWxscHRyOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JET01BZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjk4LDcgKzE2OTgsNyBAQCBzdGF0aWMgU3RyaW5nIGNvbXB1dGVDb250
ZW50U2VjdXJpdHlQb2xpCiAgICAgYXV0byBjcnlwdG9EaWdlc3QgPSBQQUw6OkNyeXB0b0RpZ2Vz
dDo6Y3JlYXRlKFBBTDo6Q3J5cHRvRGlnZXN0OjpBbGdvcml0aG06OlNIQV8yNTYpOwogICAgIGNy
eXB0b0RpZ2VzdC0+YWRkQnl0ZXMoY29udGVudC5kYXRhKCksIGNvbnRlbnQuc2l6ZSgpKTsKICAg
ICBhdXRvIGRpZ2VzdCA9IGNyeXB0b0RpZ2VzdC0+Y29tcHV0ZUhhc2goKTsKLSAgICByZXR1cm4g
bWFrZVN0cmluZygic2hhMjU2LSIsIGJhc2U2NEVuY29kZWQoZGlnZXN0LmRhdGEoKSwgZGlnZXN0
LnNpemUoKSkpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCJzaGEyNTYtIiwgYmFzZTY0RW5jb2Rl
ZChkaWdlc3QpKTsKIH0KIAogUmVmPFByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFn
ZW50OjpidWlsZE9iamVjdEZvck5vZGUoTm9kZSogbm9kZSwgaW50IGRlcHRoKQpJbmRleDogU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0
d29ya0FnZW50LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzUsNyArMTc1LDcgQEAgUmVmPFByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRGcmFtZT4gYgog
ICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0RnJhbWU6OmNyZWF0ZSgpCiAg
ICAgICAgIC5zZXRPcGNvZGUoZnJhbWUub3BDb2RlKQogICAgICAgICAuc2V0TWFzayhmcmFtZS5t
YXNrZWQpCi0gICAgICAgIC5zZXRQYXlsb2FkRGF0YShmcmFtZS5vcENvZGUgPT0gMSA/IFN0cmlu
Zzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soZnJhbWUucGF5bG9hZCwgZnJhbWUucGF5bG9h
ZExlbmd0aCkgOiBiYXNlNjRFbmNvZGVUb1N0cmluZyhmcmFtZS5wYXlsb2FkLCBmcmFtZS5wYXls
b2FkTGVuZ3RoKSkKKyAgICAgICAgLnNldFBheWxvYWREYXRhKGZyYW1lLm9wQ29kZSA9PSAxID8g
U3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhmcmFtZS5wYXlsb2FkLCBmcmFtZS5w
YXlsb2FkTGVuZ3RoKSA6IGJhc2U2NEVuY29kZVRvU3RyaW5nKFNwYW4geyBmcmFtZS5wYXlsb2Fk
LCBmcmFtZS5wYXlsb2FkTGVuZ3RoIH0pKQogICAgICAgICAuc2V0UGF5bG9hZExlbmd0aChmcmFt
ZS5wYXlsb2FkTGVuZ3RoKQogICAgICAgICAucmVsZWFzZSgpOwogfQpAQCAtNTg5LDcgKzU4OSw3
IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlRGEKICAgICAgICAgLy8g
T2Z0ZW4gdGhlIGRhdGEgaXMgdGV4dCBhbmQgd2Ugd291bGQgaGF2ZSBhIGRlY29kZXIsIGJ1dCBm
b3Igbm9uLXRleHQgd2Ugd29uJ3QgaGF2ZSBhIGRlY29kZXIuCiAgICAgICAgIC8vIFN5bmMgWEhS
cyBtYXkgbm90IGhhdmUgYSBjYWNoZWQgcmVzb3VyY2UsIHdoaWxlIG5vbi1zeW5jIFhIUnMgdXN1
YWxseSB0cmFuc2ZlciBkYXRhIG92ZXIgb24gY29tcGxldGlvbi4KICAgICAgICAgaWYgKG1fbG9h
ZGluZ1hIUlN5bmNocm9ub3VzbHkgJiYgcmVzb3VyY2VEYXRhICYmICFyZXNvdXJjZURhdGEtPmhh
c0J1ZmZlcmVkRGF0YSgpICYmICFyZXNvdXJjZURhdGEtPmNhY2hlZFJlc291cmNlKCkpCi0gICAg
ICAgICAgICBtX3Jlc291cmNlc0RhdGEtPnNldFJlc291cmNlQ29udGVudChyZXF1ZXN0SWQsIGJh
c2U2NEVuY29kZVRvU3RyaW5nKGRhdGEsIGRhdGFMZW5ndGgpLCB0cnVlKTsKKyAgICAgICAgICAg
IG1fcmVzb3VyY2VzRGF0YS0+c2V0UmVzb3VyY2VDb250ZW50KHJlcXVlc3RJZCwgYmFzZTY0RW5j
b2RlVG9TdHJpbmcoU3BhbiB7IGRhdGEsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihkYXRhTGVuZ3Ro
KSB9KSwgdHJ1ZSk7CiAgICAgfQogCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRhdGFSZWNl
aXZlZChyZXF1ZXN0SWQsIHRpbWVzdGFtcCgpLCBkYXRhTGVuZ3RoLCBlbmNvZGVkRGF0YUxlbmd0
aCk7CkBAIC0xMDA1LDcgKzEwMDUsNyBAQCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+
IEluc3BlY3RvCiAKICAgICBXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyIGVuY29kZXI7CiAgICAg
V1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPjo6ZW5jb2Rl
KGVuY29kZXIsIGNlcnRpZmljYXRlLnZhbHVlKCkpOwotICAgIHJldHVybiBiYXNlNjRFbmNvZGVU
b1N0cmluZyhlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgcmV0
dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGVuY29kZXIuYnVmZmVyKCkpOwogfQogCiBXZWJTb2Nr
ZXQqIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6d2ViU29ja2V0Rm9yUmVxdWVzdElkKGNvbnN0IFBy
b3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCkKQEAgLTE0MTAsNyArMTQxMCw3
IEBAIGJvb2wgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpjYWNoZWRSZXNvdXIKICAgICAgICAgfQog
CiAgICAgICAgICpiYXNlNjRFbmNvZGVkID0gdHJ1ZTsKLSAgICAgICAgKnJlc3VsdCA9IGJhc2U2
NEVuY29kZVRvU3RyaW5nKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7CisgICAgICAg
ICpyZXN1bHQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhidWZmZXItPmJ5dGVzKCkpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2Vu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDcgQEAKIAogI2lmIEVOQUJMRShXRUJf
QVJDSElWRSkgJiYgVVNFKENGKQogI2luY2x1ZGUgIkxlZ2FjeVdlYkFyY2hpdmUuaCIKKyNpbmNs
dWRlIDx3dGYvY2YvU3BhbkNGLmg+CiAjZW5kaWYKIAogCkBAIC0xMTMsNyArMTE0LDcgQEAgYm9v
bCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNoYXJlZEJ1ZmZlckNvbgogYm9vbCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OmRhdGFDb250ZW50KGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIHNpemUsIGNv
bnN0IFN0cmluZyYgdGV4dEVuY29kaW5nTmFtZSwgYm9vbCB3aXRoQmFzZTY0RW5jb2RlLCBTdHJp
bmcqIHJlc3VsdCkKIHsKICAgICBpZiAod2l0aEJhc2U2NEVuY29kZSkgewotICAgICAgICAqcmVz
dWx0ID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoZGF0YSwgc2l6ZSk7CisgICAgICAgICpyZXN1bHQg
PSBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgZGF0YSwgc2l6ZSB9KTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCkBAIC0xMTAyLDcgKzExMDMsNyBAQCBQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxTdHJpbmc+IEluc3BlY3RvCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
Q291bGQgbm90IGNyZWF0ZSB3ZWIgYXJjaGl2ZSBmb3IgbWFpbiBmcmFtZSJfcyk7CiAKICAgICBS
ZXRhaW5QdHI8Q0ZEYXRhUmVmPiBidWZmZXIgPSBhcmNoaXZlLT5yYXdEYXRhUmVwcmVzZW50YXRp
b24oKTsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoQ0ZEYXRhR2V0Qnl0ZVB0cihi
dWZmZXIuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgoYnVmZmVyLmdldCgpKSk7CisgICAgcmV0dXJu
IGJhc2U2NEVuY29kZVRvU3RyaW5nKGFzQnl0ZXMoYnVmZmVyLmdldCgpKSk7CiB9CiAjZW5kaWYK
IApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNoaXZl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9N
SFRNTEFyY2hpdmUuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODEs
MTYgKzE4MSwxNCBAQCBSZWY8U2hhcmVkQnVmZmVyPiBNSFRNTEFyY2hpdmU6OmdlbmVyYXRlCiAg
ICAgICAgIG1odG1sRGF0YS0+YXBwZW5kKGFzY2lpU3RyaW5nLmRhdGEoKSwgYXNjaWlTdHJpbmcu
bGVuZ3RoKCkpOwogCiAgICAgICAgIC8vIEZJWE1FOiBpZGVhbGx5IHdlIHdvdWxkIGVuY29kZSB0
aGUgY29udGVudCBhcyBhIHN0cmVhbSB3aXRob3V0IGhhdmluZyB0byBmZXRjaCBpdCBhbGwuCi0g
ICAgICAgIGF1dG8qIGRhdGEgPSByZXNvdXJjZS5kYXRhLT5kYXRhKCk7Ci0gICAgICAgIHNpemVf
dCBkYXRhTGVuZ3RoID0gcmVzb3VyY2UuZGF0YS0+c2l6ZSgpOwogICAgICAgICBpZiAoIXN0cmNt
cChjb250ZW50RW5jb2RpbmcsIHF1b3RlZFByaW50YWJsZSkpIHsKLSAgICAgICAgICAgIGF1dG8g
ZW5jb2RlZERhdGEgPSBxdW90ZWRQcmludGFibGVFbmNvZGUoZGF0YSwgZGF0YUxlbmd0aCk7Cisg
ICAgICAgICAgICBhdXRvIGVuY29kZWREYXRhID0gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKHJlc291
cmNlLmRhdGEtPmJ5dGVzKCkpOwogICAgICAgICAgICAgbWh0bWxEYXRhLT5hcHBlbmQoZW5jb2Rl
ZERhdGEuZGF0YSgpLCBlbmNvZGVkRGF0YS5zaXplKCkpOwogICAgICAgICAgICAgbWh0bWxEYXRh
LT5hcHBlbmQoIlxyXG4iLCAyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VS
VCghc3RyY21wKGNvbnRlbnRFbmNvZGluZywgYmFzZTY0KSk7CiAgICAgICAgICAgICAvLyBXZSBh
cmUgbm90IHNwZWNpZnlpbmcgaW5zZXJ0TEZzID0gdHJ1ZSBiZWxvdyBhcyBpdCB3b3VsZCBjdXQg
dGhlIGxpbmVzIHdpdGggTEZzIGFuZCBNSFRNTCByZXF1aXJlcyBDUkxGcy4KLSAgICAgICAgICAg
IGF1dG8gZW5jb2RlZERhdGEgPSBiYXNlNjRFbmNvZGVUb1ZlY3RvcihkYXRhLCBkYXRhTGVuZ3Ro
KTsKKyAgICAgICAgICAgIGF1dG8gZW5jb2RlZERhdGEgPSBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihy
ZXNvdXJjZS5kYXRhLT5ieXRlcygpKTsKICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBtYXhpbXVt
TGluZUxlbmd0aCA9IDc2OwogICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gMDsKICAgICAgICAg
ICAgIHNpemVfdCBlbmNvZGVkRGF0YUxlbmd0aCA9IGVuY29kZWREYXRhLnNpemUoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MUGFyc2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTFBhcnNl
ci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZl
L21odG1sL01IVE1MUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDcgKzE5NSw3IEBA
IFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IE1IVE1MUGFyc2VyOjpwYXIKICAgICBWZWN0b3I8dWlu
dDhfdD4gZGF0YTsKICAgICBzd2l0Y2ggKG1pbWVIZWFkZXIuY29udGVudFRyYW5zZmVyRW5jb2Rp
bmcoKSkgewogICAgIGNhc2UgTUlNRUhlYWRlcjo6QmFzZTY0OiB7Ci0gICAgICAgIGF1dG8gZGVj
b2RlZERhdGEgPSBiYXNlNjREZWNvZGUoY29udGVudC0+ZGF0YSgpLCBjb250ZW50LT5zaXplKCkp
OworICAgICAgICBhdXRvIGRlY29kZWREYXRhID0gYmFzZTY0RGVjb2RlKGNvbnRlbnQtPmJ5dGVz
KCkpOwogICAgICAgICBpZiAoIWRlY29kZWREYXRhKSB7CiAgICAgICAgICAgICBMT0dfRVJST1Io
IkludmFsaWQgYmFzZTY0IGNvbnRlbnQgZm9yIE1IVE1MIHBhcnQuIik7CiAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKQEAgLTIwNCw3ICsyMDQsNyBAQCBSZWZQdHI8QXJjaGl2ZVJlc291cmNl
PiBNSFRNTFBhcnNlcjo6cGFyCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIE1JTUVI
ZWFkZXI6OlF1b3RlZFByaW50YWJsZToKLSAgICAgICAgZGF0YSA9IHF1b3RlZFByaW50YWJsZURl
Y29kZShjb250ZW50LT5kYXRhKCksIGNvbnRlbnQtPnNpemUoKSk7CisgICAgICAgIGRhdGEgPSBx
dW90ZWRQcmludGFibGVEZWNvZGUoY29udGVudC0+Ynl0ZXMoKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgTUlNRUhlYWRlcjo6U2V2ZW5CaXQ6CiAgICAgY2FzZSBNSU1FSGVhZGVyOjpCaW5h
cnk6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkxvYWRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIEljb25Mb2FkZXI6Om5v
dGlmeUZpbmlzaGVkKENhY2hlZFJlCiAgICAgICAgIGRhdGEgPSBudWxscHRyOwogCiAgICAgY29u
c3RleHByIHVpbnQ4X3QgcGRmTWFnaWNOdW1iZXJbXSA9IHsgJyUnLCAnUCcsICdEJywgJ0YnIH07
Ci0gICAgaWYgKGRhdGEgJiYgZGF0YS0+c3RhcnRzV2l0aChTcGFuIHsgcGRmTWFnaWNOdW1iZXIs
IHN0ZDo6c2l6ZShwZGZNYWdpY051bWJlcikgfSkpIHsKKyAgICBpZiAoZGF0YSAmJiBkYXRhLT5z
dGFydHNXaXRoKHBkZk1hZ2ljTnVtYmVyKSkgewogICAgICAgICBMT0coSWNvbkRhdGFiYXNlLCAi
SWNvbkxvYWRlcjo6ZmluaXNoTG9hZGluZygpIC0gSWdub3JpbmcgaWNvbiBhdCAlcyBiZWNhdXNl
IGl0IGFwcGVhcnMgdG8gYmUgYSBQREYiLCBtX3Jlc291cmNlLT51cmwoKS5zdHJpbmcoKS5hc2Np
aSgpLmRhdGEoKSk7CiAgICAgICAgIGRhdGEgPSBudWxscHRyOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0Jhc2U2NFV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzgsNyArMzgsNyBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IEJhc2U2NFV0aWxpdGllczo6YnRvCiAg
ICAgaWYgKCFzdHJpbmdUb0VuY29kZS5pc0FsbExhdGluMSgpKQogICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZENoYXJhY3RlckVycm9yIH07CiAKLSAgICByZXR1cm4gYmFzZTY0RW5j
b2RlVG9TdHJpbmcoc3RyaW5nVG9FbmNvZGUubGF0aW4xKCkpOworICAgIHJldHVybiBiYXNlNjRF
bmNvZGVUb1N0cmluZyhzdHJpbmdUb0VuY29kZS5sYXRpbjEoKS5ieXRlcygpKTsKIH0KIAogRXhj
ZXB0aW9uT3I8U3RyaW5nPiBCYXNlNjRVdGlsaXRpZXM6OmF0b2IoY29uc3QgU3RyaW5nJiBlbmNv
ZGVkU3RyaW5nKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1c3Rv
bURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9h
cmRDdXN0b21EYXRhLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4
OSw3IEBAIFJlZjxTaGFyZWRCdWZmZXI+IFBhc3RlYm9hcmRDdXN0b21EYXRhOjoKICAgICBlbmNv
ZGVyIDw8IG1fb3JpZ2luOwogICAgIGVuY29kZXIgPDwgc2FtZU9yaWdpbkN1c3RvbVN0cmluZ0Rh
dGEoKTsKICAgICBlbmNvZGVyIDw8IG9yZGVyZWRUeXBlcygpOwotICAgIHJldHVybiBTaGFyZWRC
dWZmZXI6OmNyZWF0ZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7Cisg
ICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCkpOwogfQogCiBQ
YXN0ZWJvYXJkQ3VzdG9tRGF0YSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6ZnJvbVBlcnNpc3RlbmNl
RGVjb2RlcihXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyJiYgZGVjb2RlcikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsMjQgKzMwLDIwIEBACiAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8d3Rm
L0hleE51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi9jZi9TcGFuQ0YuaD4KICNpbmNsdWRlIDx3dGYv
cGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9VVEY4Q29udmVyc2lvbi5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKGNvbnN0IHVp
bnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQorU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIoU3Bh
bjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpCiB7Ci0gICAgYXBwZW5kKGRhdGEsIHNpemUpOwotfQot
Ci1TaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6
ZSkKLXsKLSAgICBhcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSks
IHNpemUpOworICAgIGFwcGVuZChkYXRhKTsKIH0KIAogU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZm
ZXIoRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmJiBmaWxlRGF0YSkKLSAgICA6IG1fc2l6ZShm
aWxlRGF0YS5zaXplKCkpCisgICAgOiBtX3NpemUoZmlsZURhdGEuZGF0YSgpLnNpemUoKSkKIHsK
ICAgICBtX3NlZ21lbnRzLmFwcGVuZCh7MCwgRGF0YVNlZ21lbnQ6OmNyZWF0ZShXVEZNb3ZlKGZp
bGVEYXRhKSl9KTsKIH0KQEAgLTE4OCwxMyArMTg0LDEzIEBAIHZvaWQgU2hhcmVkQnVmZmVyOjph
cHBlbmQoY29uc3QgU2hhcmVkQnUKICAgICBBU1NFUlQoaW50ZXJuYWxseUNvbnNpc3RlbnQoKSk7
CiB9CiAKLXZvaWQgU2hhcmVkQnVmZmVyOjphcHBlbmQoY29uc3QgdWludDhfdCogZGF0YSwgc2l6
ZV90IGxlbmd0aCkKK3ZvaWQgU2hhcmVkQnVmZmVyOjphcHBlbmQoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGRhdGEpCiB7CiAgICAgQVNTRVJUKCFtX2hhc0JlZW5Db21iaW5lZEludG9PbmVTZWdtZW50
KTsKICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yOwotICAgIHZlY3Rvci5hcHBlbmQoZGF0YSwg
bGVuZ3RoKTsKLSAgICBtX3NlZ21lbnRzLmFwcGVuZCh7bV9zaXplLCBEYXRhU2VnbWVudDo6Y3Jl
YXRlKFdURk1vdmUodmVjdG9yKSl9KTsKLSAgICBtX3NpemUgKz0gbGVuZ3RoOworICAgIHZlY3Rv
ci5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5kYXRhKCkpLCBk
YXRhLnNpemUoKSk7CisgICAgbV9zZWdtZW50cy5hcHBlbmQoeyBtX3NpemUsIERhdGFTZWdtZW50
OjpjcmVhdGUoV1RGTW92ZSh2ZWN0b3IpKSB9KTsKKyAgICBtX3NpemUgKz0gZGF0YS5zaXplKCk7
CiAgICAgQVNTRVJUKGludGVybmFsbHlDb25zaXN0ZW50KCkpOwogfQogCkBAIC0yMzIsNyArMjI4
LDcgQEAgdm9pZCBTaGFyZWRCdWZmZXI6OmZvckVhY2hTZWdtZW50KGNvbnN0IAogICAgICAgICBh
cHBseShTcGFuIHsgc2VnbWVudC5zZWdtZW50LT5kYXRhKCksIHNlZ21lbnQuc2VnbWVudC0+c2l6
ZSgpIH0pOwogfQogCi1ib29sIFNoYXJlZEJ1ZmZlcjo6c3RhcnRzV2l0aChjb25zdCBTcGFuPGNv
bnN0IHVpbnQ4X3Q+JiBwcmVmaXgpIGNvbnN0Citib29sIFNoYXJlZEJ1ZmZlcjo6c3RhcnRzV2l0
aChjb25zdCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4mIHByZWZpeCkgY29uc3QKIHsKICAgICBpZiAo
cHJlZml4LmVtcHR5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjQwLDcgKzIzNiw3IEBA
IGJvb2wgU2hhcmVkQnVmZmVyOjpzdGFydHNXaXRoKGNvbnN0IFNwYW4KICAgICBpZiAoc2l6ZSgp
IDwgcHJlZml4LnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29uc3QgdWlu
dDhfdCogcHJlZml4UHRyID0gcHJlZml4LmRhdGEoKTsKKyAgICBhdXRvKiBwcmVmaXhQdHIgPSBw
cmVmaXguZGF0YSgpOwogICAgIHNpemVfdCByZW1haW5pbmcgPSBwcmVmaXguc2l6ZSgpOwogICAg
IGZvciAoYXV0byYgc2VnbWVudCA6IG1fc2VnbWVudHMpIHsKICAgICAgICAgc2l6ZV90IGFtb3Vu
dFRvQ29tcGFyZVRoaXNUaW1lID0gc3RkOjptaW4ocmVtYWluaW5nLCBzZWdtZW50LnNlZ21lbnQt
PnNpemUoKSk7CkBAIC0zMDEsMTEgKzI5Nyw0MCBAQCBjb25zdCB1aW50OF90KiBTaGFyZWRCdWZm
ZXI6OkRhdGFTZWdtZW50CiAjaWYgVVNFKEdTVFJFQU1FUikKICAgICAgICAgW10oY29uc3QgUmVm
UHRyPEdzdE1hcHBlZE93bmVkQnVmZmVyPiYgZGF0YSkgeyByZXR1cm4gZGF0YS0+ZGF0YSgpOyB9
LAogI2VuZGlmCi0gICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBk
YXRhKSB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5kYXRhKCkpOyB9
CisgICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBkYXRhKSB7IHJl
dHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmRhdGEoKS5kYXRhKCkp
OyB9CiAgICAgKTsKICAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBtX2ltbXV0YWJsZURh
dGEpOwogfQogCitTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gU2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVu
dDo6Ynl0ZXMoKSBjb25zdAoreworICAgIGF1dG8gdmlzaXRvciA9IFdURjo6bWFrZVZpc2l0b3Io
CisgICAgICAgIFtdKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgZGF0YSkgeworICAgICAgICAgICAg
cmV0dXJuIGFzQnl0ZXMoU3BhbiB7IGRhdGEgfSk7CisgICAgICAgIH0sCisjaWYgVVNFKENGKQor
ICAgICAgICBbXShjb25zdCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiYgZGF0YSkgeworICAgICAgICAg
ICAgcmV0dXJuIGFzQnl0ZXMoZGF0YS5nZXQoKSk7CisgICAgICAgIH0sCisjZW5kaWYKKyNpZiBV
U0UoR0xJQikKKyAgICAgICAgW10oY29uc3QgR1JlZlB0cjxHQnl0ZXM+JiBkYXRhKSB7CisgICAg
ICAgICAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+
KGdfYnl0ZXNfZ2V0X2RhdGEoZGF0YS5nZXQoKSwgbnVsbHB0cikpLCBnX2J5dGVzX2dldF9zaXpl
KGRhdGEuZ2V0KCkpIH0pOworICAgICAgICB9LAorI2VuZGlmCisjaWYgVVNFKEdTVFJFQU1FUikK
KyAgICAgICAgW10oY29uc3QgUmVmUHRyPEdzdE1hcHBlZE93bmVkQnVmZmVyPiYgZGF0YSkgewor
ICAgICAgICAgICAgcmV0dXJuIGFzQnl0ZXMoU3BhbiB7IGRhdGEtPmRhdGEoKSwgZGF0YS0+c2l6
ZSgpIH0pOworICAgICAgICB9LAorI2VuZGlmCisgICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06
Ok1hcHBlZEZpbGVEYXRhJiBkYXRhKSB7CisgICAgICAgICAgICByZXR1cm4gZGF0YS5kYXRhKCk7
CisgICAgICAgIH0KKyAgICApOworICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIG1faW1t
dXRhYmxlRGF0YSk7CisKK30KKwogYm9vbCBTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50Ojpjb250
YWluc01hcHBlZEZpbGVEYXRhKCkgY29uc3QKIHsKICAgICByZXR1cm4gV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YT4obV9pbW11dGFibGVEYXRhKTsKQEAg
LTMxOSw3ICszNDQsNyBAQCB2b2lkIFNoYXJlZEJ1ZmZlcjo6aGludE1lbW9yeU5vdE5lZWRlZFNv
CiAKIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgU2hhcmVkQnVmZmVyOjpkZWNvZGVyKCkgY29u
c3QKIHsKLSAgICByZXR1cm4geyByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRh
KCkpLCBzaXplKCkgfTsKKyAgICByZXR1cm4geyBieXRlcygpIH07CiB9CiAKIGJvb2wgU2hhcmVk
QnVmZmVyOjpvcGVyYXRvcj09KGNvbnN0IFNoYXJlZEJ1ZmZlciYgb3RoZXIpIGNvbnN0CkBAIC0z
ODQsNyArNDA5LDcgQEAgc2l6ZV90IFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OnNpemUoKQog
I2lmIFVTRShHU1RSRUFNRVIpCiAgICAgICAgIFtdKGNvbnN0IFJlZlB0cjxHc3RNYXBwZWRPd25l
ZEJ1ZmZlcj4mIGRhdGEpIHsgcmV0dXJuIGRhdGEtPnNpemUoKTsgfSwKICNlbmRpZgotICAgICAg
ICBbXShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeyByZXR1cm4gZGF0
YS5zaXplKCk7IH0KKyAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEm
IGRhdGEpIHsgcmV0dXJuIGRhdGEuZGF0YSgpLnNpemUoKTsgfQogICAgICk7CiAgICAgcmV0dXJu
IFdURjo6dmlzaXQodmlzaXRvciwgbV9pbW11dGFibGVEYXRhKTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsOCAr
NjcsMTIgQEAgY2xhc3MgU2hhcmVkQnVmZmVyRGF0YVZpZXc7CiBjbGFzcyBXRUJDT1JFX0VYUE9S
VCBTaGFyZWRCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxTaGFyZWRCdWZmZXI+IHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBTaGFyZWRCdWZmZXIpOyB9Ci0gICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNy
ZWF0ZShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gYWRvcHRSZWYo
Km5ldyBTaGFyZWRCdWZmZXIoZGF0YSwgc2l6ZSkpOyB9Ci0gICAgc3RhdGljIFJlZjxTaGFyZWRC
dWZmZXI+IGNyZWF0ZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gYWRv
cHRSZWYoKm5ldyBTaGFyZWRCdWZmZXIoZGF0YSwgc2l6ZSkpOyB9CisgICAgc3RhdGljIFJlZjxT
aGFyZWRCdWZmZXI+IGNyZWF0ZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkgeyByZXR1cm4g
YWRvcHRSZWYoKm5ldyBTaGFyZWRCdWZmZXIoZGF0YSkpOyB9CisgICAgc3RhdGljIFJlZjxTaGFy
ZWRCdWZmZXI+IGNyZWF0ZShTcGFuPGNvbnN0IHVpbnQ4X3Q+IGRhdGEpIHsgcmV0dXJuIGNyZWF0
ZShhc0J5dGVzKGRhdGEpKTsgfQorICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUo
U3Bhbjxjb25zdCBjaGFyPiBkYXRhKSB7IHJldHVybiBjcmVhdGUoYXNCeXRlcyhkYXRhKSk7IH0K
KyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IHN0ZDo6Ynl0ZSogZGF0
YSwgc2l6ZV90IHNpemUpIHsgcmV0dXJuIGNyZWF0ZShTcGFuIHsgZGF0YSwgc2l6ZSB9KTsgfQor
ICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoY29uc3QgdWludDhfdCogZGF0YSwg
c2l6ZV90IHNpemUpIHsgcmV0dXJuIGNyZWF0ZShTcGFuIHsgZGF0YSwgc2l6ZSB9KTsgfQorICAg
IHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90
IHNpemUpIHsgcmV0dXJuIGNyZWF0ZShTcGFuIHsgZGF0YSwgc2l6ZSB9KTsgfQogICAgIHN0YXRp
YyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmJiBt
YXBwZWRGaWxlRGF0YSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRCdWZmZXIoV1RGTW92
ZShtYXBwZWRGaWxlRGF0YSkpKTsgfQogCiAgICAgZW51bSBjbGFzcyBNYXlVc2VGaWxlTWFwcGlu
ZyA6IGJvb2wgeyBObywgWWVzIH07CkBAIC0xMDEsNiArMTA1LDggQEAgcHVibGljOgogICAgIC8v
IEZJWE1FOiBBdWRpdCB0aGUgY2FsbCBzaXRlcyBvZiB0aGlzIGZ1bmN0aW9uIGFuZCByZXBsYWNl
IHRoZW0gd2l0aCBpdGVyYXRpb24gaWYgcG9zc2libGUuCiAgICAgY29uc3QgdWludDhfdCogZGF0
YSgpIGNvbnN0OwogICAgIGNvbnN0IGNoYXIqIGRhdGFBc0NoYXJQdHIoKSBjb25zdCB7IHJldHVy
biByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihkYXRhKCkpOyB9CisgICAgU3Bhbjxjb25z
dCBzdGQ6OmJ5dGU+IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4gYXNCeXRlcyhTcGFuIHsgZGF0YSgp
LCBzaXplKCkgfSk7IH0KKwogICAgIFZlY3Rvcjx1aW50OF90PiBjb3B5RGF0YSgpIHsgcmV0dXJu
IHsgZGF0YSgpLCBzaXplKCkgfTsgfQogCiAgICAgLy8gQ29tYmluZXMgYWxsIHRoZSBzZWdtZW50
cyBpbnRvIGEgVmVjdG9yIGFuZCByZXR1cm5zIHRoYXQgdmVjdG9yIGFmdGVyIGNsZWFyaW5nIHRo
ZSBTaGFyZWRCdWZmZXIuCkBAIC0xMTUsOCArMTIxLDEyIEBAIHB1YmxpYzoKICAgICBib29sIGlz
RW1wdHkoKSBjb25zdCB7IHJldHVybiAhc2l6ZSgpOyB9CiAKICAgICB2b2lkIGFwcGVuZChjb25z
dCBTaGFyZWRCdWZmZXImKTsKLSAgICB2b2lkIGFwcGVuZChjb25zdCB1aW50OF90Kiwgc2l6ZV90
KTsKLSAgICB2b2lkIGFwcGVuZChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKSB7IGFw
cGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgbGVuZ3RoKTsgfQor
ICAgIHZvaWQgYXBwZW5kKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CisgICAgdm9pZCBhcHBlbmQo
U3Bhbjxjb25zdCB1aW50OF90PiBkYXRhKSB7IGFwcGVuZChhc0J5dGVzKGRhdGEpKTsgfQorICAg
IHZvaWQgYXBwZW5kKFNwYW48Y29uc3QgY2hhcj4gZGF0YSkgeyBhcHBlbmQoYXNCeXRlcyhkYXRh
KSk7IH0KKyAgICB2b2lkIGFwcGVuZChjb25zdCBzdGQ6OmJ5dGUqIGRhdGEsIHNpemVfdCBsZW5n
dGgpIHsgYXBwZW5kKFNwYW4geyBkYXRhLCBsZW5ndGggfSk7IH0KKyAgICB2b2lkIGFwcGVuZChj
b25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoKSB7IGFwcGVuZChTcGFuIHsgZGF0YSwg
bGVuZ3RoIH0pOyB9CisgICAgdm9pZCBhcHBlbmQoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxl
bmd0aCkgeyBhcHBlbmQoU3BhbiB7IGRhdGEsIGxlbmd0aCB9KTsgfQogICAgIHZvaWQgYXBwZW5k
KFZlY3Rvcjx1aW50OF90PiYmKTsKIAogICAgIHZvaWQgY2xlYXIoKTsKQEAgLTEzMSw2ICsxNDEs
OCBAQCBwdWJsaWM6CiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IHVpbnQ4X3QqIGRhdGEo
KSBjb25zdDsKICAgICAgICAgV0VCQ09SRV9FWFBPUlQgc2l6ZV90IHNpemUoKSBjb25zdDsKIAor
ICAgICAgICBXRUJDT1JFX0VYUE9SVCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25z
dDsKKwogICAgICAgICBzdGF0aWMgUmVmPERhdGFTZWdtZW50PiBjcmVhdGUoVmVjdG9yPHVpbnQ4
X3Q+JiYgZGF0YSkKICAgICAgICAgewogICAgICAgICAgICAgZGF0YS5zaHJpbmtUb0ZpdCgpOwpA
QCAtMTg3LDcgKzE5OSw5IEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAgdm9pZCBmb3JFYWNoU2Vn
bWVudChjb25zdCBGdW5jdGlvbjx2b2lkKGNvbnN0IFNwYW48Y29uc3QgdWludDhfdD4mKT4mKSBj
b25zdDsKLSAgICBib29sIHN0YXJ0c1dpdGgoY29uc3QgU3Bhbjxjb25zdCB1aW50OF90PiYgcHJl
Zml4KSBjb25zdDsKKworICAgIGJvb2wgc3RhcnRzV2l0aChjb25zdCBTcGFuPGNvbnN0IHN0ZDo6
Ynl0ZT4mIHByZWZpeCkgY29uc3Q7CisgICAgYm9vbCBzdGFydHNXaXRoKGNvbnN0IFNwYW48Y29u
c3QgdWludDhfdD4mIHByZWZpeCkgY29uc3QgeyByZXR1cm4gc3RhcnRzV2l0aChhc0J5dGVzKHBy
ZWZpeCkpOyB9CiAKICAgICBzdHJ1Y3QgRGF0YVNlZ21lbnRWZWN0b3JFbnRyeSB7CiAgICAgICAg
IHNpemVfdCBiZWdpblBvc2l0aW9uOwpAQCAtMjEyLDggKzIyNiw3IEBAIHB1YmxpYzoKIAogcHJp
dmF0ZToKICAgICBleHBsaWNpdCBTaGFyZWRCdWZmZXIoKSA9IGRlZmF1bHQ7Ci0gICAgZXhwbGlj
aXQgU2hhcmVkQnVmZmVyKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwotICAgIGV4cGxpY2l0IFNo
YXJlZEJ1ZmZlcihjb25zdCBjaGFyKiwgc2l6ZV90KTsKKyAgICBleHBsaWNpdCBTaGFyZWRCdWZm
ZXIoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KTsKICAgICBleHBsaWNpdCBTaGFyZWRCdWZmZXIoVmVj
dG9yPHVpbnQ4X3Q+JiYpOwogICAgIGV4cGxpY2l0IFNoYXJlZEJ1ZmZlcihGaWxlU3lzdGVtOjpN
YXBwZWRGaWxlRGF0YSYmKTsKICNpZiBVU0UoQ0YpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb24uaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vY29jb2EvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCIKICNpbmNs
dWRlIDxDb3JlQXVkaW8vQ29yZUF1ZGlvVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTgwLDEzICs4MSwxMyBAQCBwcml2YXRlOgogdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmbV9zdHJlYW1EZXNjcmlw
dGlvbiksIHNpemVvZihtX3N0cmVhbURlc2NyaXB0aW9uKSwgMSk7CisgICAgZW5jb2Rlci5lbmNv
ZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZtX3N0cmVhbURlc2NyaXB0aW9uLCAxIH0sIDEpOwog
fQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgogYm9vbCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRp
b246OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGRl
c2NyaXB0aW9uKQogewotICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmZGVzY3JpcHRpb24ubV9zdHJlYW1EZXNjcmlwdGlv
biksIHNpemVvZihkZXNjcmlwdGlvbi5tX3N0cmVhbURlc2NyaXB0aW9uKSwgMSk7CisgICAgcmV0
dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmZGVzY3JpcHRpb24ubV9z
dHJlYW1EZXNjcmlwdGlvbiwgMSB9LCAxKTsKIH0KIAogaW5saW5lIENBQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbiB0b0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbihjb25zdCBBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uJiBkZXNjcmlwdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5
cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1l
ZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk4LDE1ICsx
OTgsMTMgQEAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGV4dHJhY3RLZXlpZHNGcgogewogICAg
IFJlZjxTaGFyZWRCdWZmZXI+IGtleUlkcyA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCk7CiAKLSAg
ICBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBrZXlJZHNNYXAgPSBleHRyYWN0S2V5aWRz
TG9jYXRpb25Gcm9tQ2VuY0luaXREYXRhKGluaXREYXRhKTsKLSAgICB1bnNpZ25lZCBrZXlJZENv
dW50ID0ga2V5SWRzTWFwLmZpcnN0OwotICAgIHVuc2lnbmVkIGluZGV4ID0ga2V5SWRzTWFwLnNl
Y29uZDsKKyAgICBhdXRvIFtrZXlJZENvdW50LCBpbmRleF0gPSBleHRyYWN0S2V5aWRzTG9jYXRp
b25Gcm9tQ2VuY0luaXREYXRhKGluaXREYXRhKTsKIAogICAgIC8vIENoZWNrIGlmIGluaXREYXRh
IGlzIGEgdmFsaWQgQ0VOQyBpbml0RGF0YS4KICAgICBpZiAoIWtleUlkQ291bnQgfHwgIWluZGV4
KQogICAgICAgICByZXR1cm4ga2V5SWRzOwogCi0gICAgYXV0byogZGF0YSA9IGluaXREYXRhLmRh
dGEoKTsKKyAgICBhdXRvIGRhdGEgPSBpbml0RGF0YS5ieXRlcygpOwogCiAgICAgYXV0byBvYmpl
Y3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGF1dG8ga2V5SWRzQXJyYXkgPSBKU09O
OjpBcnJheTo6Y3JlYXRlKCk7CkBAIC0yMTgsNyArMjE2LDcgQEAgc3RhdGljIFJlZjxTaGFyZWRC
dWZmZXI+IGV4dHJhY3RLZXlpZHNGcgogICAgIC8vICJraWRzIgogICAgIC8vIEFuIGFycmF5IG9m
IGtleSBJRHMuIEVhY2ggZWxlbWVudCBvZiB0aGUgYXJyYXkgaXMgdGhlIGJhc2U2NHVybCBlbmNv
ZGluZyBvZiB0aGUgb2N0ZXQgc2VxdWVuY2UgY29udGFpbmluZyB0aGUga2V5IElEIHZhbHVlLgog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlJZENvdW50OyBpKyspIHsKLSAgICAgICAg
a2V5SWRzQXJyYXktPnB1c2hTdHJpbmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoJmRhdGFbaW5k
ZXhdLCBDbGVhcktleTo6S2V5SURTaXplSW5CeXRlcykpOworICAgICAgICBrZXlJZHNBcnJheS0+
cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhkYXRhLnN1YnNwYW4oaW5kZXgsIENs
ZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVzKSkpOwogICAgICAgICBpbmRleCArPSBDbGVhcktleTo6
S2V5SURTaXplSW5CeXRlczsKICAgICB9CiAKQEAgLTI0NSw3ICsyNDMsNyBAQCBzdGF0aWMgUmVm
PFNoYXJlZEJ1ZmZlcj4gZXh0cmFjdEtleUlkRnJvCiAgICAgLy8gVGhlIGZvcm1hdCBpcyBhIEpT
T04gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyBtZW1iZXJzOgogICAgIC8vICJraWRz
IgogICAgIC8vIEFuIGFycmF5IG9mIGtleSBJRHMuIEVhY2ggZWxlbWVudCBvZiB0aGUgYXJyYXkg
aXMgdGhlIGJhc2U2NHVybCBlbmNvZGluZyBvZiB0aGUgb2N0ZXQgc2VxdWVuY2UgY29udGFpbmlu
ZyB0aGUga2V5IElEIHZhbHVlLgotICAgIGtleUlkc0FycmF5LT5wdXNoU3RyaW5nKGJhc2U2NFVS
TEVuY29kZVRvU3RyaW5nKGluaXREYXRhLmRhdGEoKSwgaW5pdERhdGEuc2l6ZSgpKSk7CisgICAg
a2V5SWRzQXJyYXktPnB1c2hTdHJpbmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoaW5pdERhdGEu
Ynl0ZXMoKSkpOwogCiAgICAgb2JqZWN0LT5zZXRBcnJheSgia2lkcyIsIFdURk1vdmUoa2V5SWRz
QXJyYXkpKTsKICAgICBDU3RyaW5nIGpzb25EYXRhID0gb2JqZWN0LT50b0pTT05TdHJpbmcoKS51
dGY4KCk7CkBAIC01NzgsOSArNTc2LDggQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktl
eTo6cmVtb3ZlUwogCiAgICAgLy8gQ29uc3RydWN0IHRoZSBLZXlTdGF0dXNWZWN0b3Igb2JqZWN0
LCByZXByZXNlbnRpbmcgcmVsZWFzZWQga2V5cywgYW5kIHRoZSBtZXNzYWdlIGluIHRoZQogICAg
IC8vICdsaWNlbnNlIHJlbGVhc2UnIGZvcm1hdC4KLSAgICBLZXlTdGF0dXNWZWN0b3Iga2V5U3Rh
dHVzVmVjdG9yID0gbV9rZXlTdG9yZS5hbGxLZXlzQXMoQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlT
dGF0dXM6OlJlbGVhc2VkKTsKLSAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtZXNzYWdlOwotICAg
IHsKKyAgICBhdXRvIGtleVN0YXR1c1ZlY3RvciA9IG1fa2V5U3RvcmUuYWxsS2V5c0FzKENETUlu
c3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpSZWxlYXNlZCk7CisgICAgYXV0byBtZXNzYWdlID0g
WyZdewogICAgICAgICAvLyBDb25zdHJ1Y3QgSlNPTiB0aGF0IHJlcHJlc2VudHMgdGhlICdsaWNl
bnNlIHJlbGVhc2UnIGZvcm1hdCwgY3JlYXRpbmcgYSAna2lkcycgYXJyYXkKICAgICAgICAgLy8g
b2YgYmFzZTY0VVJMLWVuY29kZWQga2V5IElEcyBmb3IgYWxsIGtleXMgdGhhdCB3ZXJlIGFzc29j
aWF0ZWQgd2l0aCB0aGlzIHNlc3Npb24uCiAgICAgICAgIGF1dG8gcm9vdE9iamVjdCA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CkBAIC01ODgsNyArNTg1LDcgQEAgdm9pZCBDRE1JbnN0YW5jZVNl
c3Npb25DbGVhcktleTo6cmVtb3ZlUwogICAgICAgICAgICAgYXV0byBhcnJheSA9IEpTT046OkFy
cmF5OjpjcmVhdGUoKTsKICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYga2V5IDogbV9rZXlT
dG9yZSkgewogICAgICAgICAgICAgICAgIEFTU0VSVChrZXktPmlkKCkuc2l6ZSgpIDw9IHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7Ci0gICAgICAgICAgICAgICAgYXJyYXkt
PnB1c2hTdHJpbmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoa2V5LT5pZCgpLmRhdGEoKSwga2V5
LT5pZCgpLnNpemUoKSkpOworICAgICAgICAgICAgICAgIGFycmF5LT5wdXNoU3RyaW5nKGJhc2U2
NFVSTEVuY29kZVRvU3RyaW5nKGtleS0+aWQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgcm9vdE9iamVjdC0+c2V0QXJyYXkoImtpZHMiLCBXVEZNb3ZlKGFycmF5KSk7CiAgICAgICAg
IH0KQEAgLTU5NiwxMSArNTkzLDExIEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6
OnJlbW92ZVMKICAgICAgICAgLy8gQ29weSB0aGUgSlNPTiBkYXRhIGludG8gYSBTaGFyZWRCdWZm
ZXIgb2JqZWN0LgogICAgICAgICBTdHJpbmcgbWVzc2FnZVN0cmluZyA9IHJvb3RPYmplY3QtPnRv
SlNPTlN0cmluZygpOwogICAgICAgICBDU3RyaW5nIG1lc3NhZ2VDU3RyaW5nID0gbWVzc2FnZVN0
cmluZy51dGY4KCk7Ci0gICAgICAgIG1lc3NhZ2UgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShtZXNz
YWdlQ1N0cmluZy5kYXRhKCksIG1lc3NhZ2VDU3RyaW5nLmxlbmd0aCgpKTsKLSAgICB9CisgICAg
ICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShtZXNzYWdlQ1N0cmluZy5kYXRhKCksIG1l
c3NhZ2VDU3RyaW5nLmxlbmd0aCgpKTsKKyAgICB9KCk7CiAKICAgICBtX2tleVN0b3JlLnJlbW92
ZUFsbEtleXMoKTsKLSAgICBkaXNwYXRjaENhbGxiYWNrKFdURk1vdmUoa2V5U3RhdHVzVmVjdG9y
KSwgUmVmPFNoYXJlZEJ1ZmZlcj4oKm1lc3NhZ2UpLCBTdWNjZXNzVmFsdWU6OlN1Y2NlZWRlZCk7
CisgICAgZGlzcGF0Y2hDYWxsYmFjayhXVEZNb3ZlKGtleVN0YXR1c1ZlY3RvciksIFdURk1vdmUo
bWVzc2FnZSksIFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVkKTsKIH0KIAogdm9pZCBDRE1JbnN0YW5j
ZVNlc3Npb25DbGVhcktleTo6c3RvcmVSZWNvcmRPZktleVVzYWdlKGNvbnN0IFN0cmluZyYpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL0tleWVkRGVjb2RlckdlbmVyaWMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvS2V5ZWRE
ZWNvZGVyR2VuZXJpYy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dlbmVyaWMvS2V5ZWREZWNvZGVyR2VuZXJpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU4LDcgKzU4LDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiByZWFkU3RyaW5nKAog
ICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAogICAgIFZlY3Rvcjx1aW50OF90PiBidWZm
ZXIoc2l6ZS52YWx1ZSgpKTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KGJ1ZmZlci5kYXRhKCksIHNpemUudmFsdWUoKSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZp
eGVkTGVuZ3RoRGF0YShTcGFuIHsgYnVmZmVyIH0pKQogICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwogICAgIGF1dG8gcmVzdWx0ID0gU3RyaW5nOjpmcm9tVVRGOChidWZmZXIuZGF0YSgpLCBz
aXplLnZhbHVlKCkpOwogICAgIGlmIChyZXN1bHQuaXNOdWxsKCkpCkBAIC0xMTcsNyArMTE3LDcg
QEAgS2V5ZWREZWNvZGVyR2VuZXJpYzo6S2V5ZWREZWNvZGVyR2VuZXJpYwogICAgICAgICAgICAg
aWYgKCFvaykKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIFZlY3Rvcjx1aW50
OF90PiBidWZmZXIoKnNpemUpOwotICAgICAgICAgICAgb2sgPSBkZWNvZGVyLmRlY29kZUZpeGVk
TGVuZ3RoRGF0YShidWZmZXIuZGF0YSgpLCAqc2l6ZSk7CisgICAgICAgICAgICBvayA9IGRlY29k
ZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBidWZmZXIgfSk7CiAgICAgICAgICAgICBp
ZiAoIW9rKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgbV9kaWN0aW9uYXJ5
U3RhY2subGFzdCgpLT5hZGQoKmtleSwgV1RGTW92ZShidWZmZXIpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01vZGVsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTW9kZWwuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTW9kZWwuaAkod29ya2luZyBjb3B5KQpAQCAt
NTYsNyArNTYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBNb2RlbDo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxz
aXplX3Q+KG1fZGF0YS0+c2l6ZSgpKTsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0
YShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCksIDEpOworICAgIGVuY29kZXIuZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKG1fZGF0YS0+Ynl0ZXMoKSwgMSk7CiB9CiAKIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+CkBAIC03NCw3ICs3NCw3IEBAIFJlZlB0cjxNb2RlbD4gTW9kZWw6OmRlY29kZShE
ZWNvZGVyJiBkZWMKIAogICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAgIGRhdGEuZ3Jvdygq
bGVuZ3RoKTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGRhdGEuZGF0
YSgpLCBkYXRhLnNpemUoKSwgMSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3Ro
RGF0YShkYXRhLCAxKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gTW9k
ZWw6OmNyZWF0ZShTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGRhdGEpKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmgJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVm
ZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBQaXhlbEJ1ZmZlcgogCiAgICAgZW5jb2RlciA8PCBtX2Zvcm1hdDsKICAgICBl
bmNvZGVyIDw8IG1fc2l6ZTsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShtX2Rh
dGEtPmRhdGEoKSwgbV9kYXRhLT5ieXRlTGVuZ3RoKCksIDEpOworICAgIGVuY29kZXIuZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKG1fZGF0YS0+Ynl0ZXMoKSwgMSk7CiB9CiAKIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IFBpeGVsQnVmZmVyOjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlcikKQEAgLTExMyw3ICsxMTMsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGQ6Om9wdGlvbmFsPFBpCiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CiAKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJl
c3VsdC0+bV9kYXRhLT5kYXRhKCksIHJlc3VsdC0+bV9kYXRhLT5ieXRlTGVuZ3RoKCksIDEpKQor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVzdWx0LT5tX2RhdGEtPndy
aXRhYmxlQnl0ZXMoKSwgMSkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKICAgICBy
ZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0JKHJldmlzaW9uIDI3
ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC00Myw2ICs0Myw3IEBACiAjaW1wb3J0IDx3dGYvRmlsZVN5c3RlbS5oPgogI2ltcG9ydCA8
d3RmL0pTT05WYWx1ZXMuaD4KICNpbXBvcnQgPHd0Zi9Mb2dnZXJIZWxwZXIuaD4KKyNpbXBvcnQg
PHd0Zi9jb2NvYS9TcGFuQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5o
PgogI2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdI
YXNoLmg+CkBAIC03MTUsNyArNzE2LDcgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxh
eVN0cmVhbWluZwogICAgICAgICBpZGVudGlmaWVyID0gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9j
XSBpbml0V2l0aERhdGE6aW5pdERhdGEtPmNyZWF0ZU5TRGF0YSgpLmdldCgpIGVuY29kaW5nOk5T
VVRGOFN0cmluZ0VuY29kaW5nXSk7CiAjaWYgSEFWRShGQUlSUExBWVNUUkVBTUlOR19DRU5DX0lO
SVREQVRBKQogICAgIGVsc2UgaWYgKGluaXREYXRhVHlwZSA9PSBJbml0RGF0YVJlZ2lzdHJ5Ojpj
ZW5jTmFtZSgpKSB7Ci0gICAgICAgIGF1dG8gcHNzaFN0cmluZyA9IGJhc2U2NEVuY29kZVRvU3Ry
aW5nKGluaXREYXRhLT5kYXRhKCksIGluaXREYXRhLT5zaXplKCkpOworICAgICAgICBhdXRvIHBz
c2hTdHJpbmcgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbml0RGF0YS0+Ynl0ZXMoKSk7CiAgICAg
ICAgIGluaXRpYWxpemF0aW9uRGF0YSA9IFtOU0pTT05TZXJpYWxpemF0aW9uIGRhdGFXaXRoSlNP
Tk9iamVjdDpAeyBAInBzc2giOiAoTlNTdHJpbmcqKXBzc2hTdHJpbmcgfSBvcHRpb25zOk5TSlNP
TldyaXRpbmdQcmV0dHlQcmludGVkIGVycm9yOm5pbF07CiAgICAgfQogI2VuZGlmCkBAIC0xMTkx
LDEyICsxMTkyLDEwIEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmcK
ICAgICAgICAgfQogCiAgICAgICAgIGF1dG8gcmVxdWVzdEpTT04gPSBKU09OOjpBcnJheTo6Y3Jl
YXRlKCk7Ci0gICAgICAgIGZvciAoYXV0byYgcmVxdWVzdERhdGEgOiByZXF1ZXN0c0RhdGEpIHsK
KyAgICAgICAgZm9yIChhdXRvJiBba2V5SUQsIHBheWxvYWRdIDogcmVxdWVzdHNEYXRhKSB7CiAg
ICAgICAgICAgICBhdXRvIGVudHJ5ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAg
ICAgIGF1dG8mIGtleUlEID0gcmVxdWVzdERhdGEuZmlyc3Q7Ci0gICAgICAgICAgICBhdXRvJiBw
YXlsb2FkID0gcmVxdWVzdERhdGEuc2Vjb25kOwotICAgICAgICAgICAgZW50cnktPnNldFN0cmlu
Zygia2V5SUQiLCBiYXNlNjRFbmNvZGVUb1N0cmluZyhrZXlJRC0+ZGF0YSgpLCBrZXlJRC0+c2l6
ZSgpKSk7Ci0gICAgICAgICAgICBlbnRyeS0+c2V0U3RyaW5nKCJwYXlsb2FkIiwgYmFzZTY0RW5j
b2RlVG9TdHJpbmcocGF5bG9hZC5nZXQoKS5ieXRlcywgcGF5bG9hZC5nZXQoKS5sZW5ndGgpKTsK
KyAgICAgICAgICAgIGVudHJ5LT5zZXRTdHJpbmcoImtleUlEIiwgYmFzZTY0RW5jb2RlVG9TdHJp
bmcoa2V5SUQtPmJ5dGVzKCkpKTsKKyAgICAgICAgICAgIGVudHJ5LT5zZXRTdHJpbmcoInBheWxv
YWQiLCBiYXNlNjRFbmNvZGVUb1N0cmluZyhhc0J5dGVzKHBheWxvYWQuZ2V0KCkpKSk7CiAgICAg
ICAgICAgICByZXF1ZXN0SlNPTi0+cHVzaE9iamVjdChXVEZNb3ZlKGVudHJ5KSk7CiAgICAgICAg
IH0KICAgICAgICAgYXV0byByZXF1ZXN0QnVmZmVyID0gdXRmOEJ1ZmZlcihyZXF1ZXN0SlNPTi0+
dG9KU09OU3RyaW5nKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNyArMTAwLDcg
QEAgc3RhdGljIFN0cmluZyBjcmVhdGVVbmlxdWVGb250TmFtZSgpCiAgICAgR1VJRCBmb250VXVp
ZDsKICAgICBDb0NyZWF0ZUd1aWQoJmZvbnRVdWlkKTsKIAotICAgIGF1dG8gZm9udE5hbWUgPSBi
YXNlNjRFbmNvZGVUb1N0cmluZyhyZWludGVycHJldF9jYXN0PGNoYXIqPigmZm9udFV1aWQpLCBz
aXplb2YoZm9udFV1aWQpKTsKKyAgICBhdXRvIGZvbnROYW1lID0gYmFzZTY0RW5jb2RlVG9TdHJp
bmcoU3BhbiB7ICZmb250VXVpZCwgMSB9KTsKICAgICBBU1NFUlQoZm9udE5hbWUubGVuZ3RoKCkg
PCBMRl9GQUNFU0laRSk7CiAgICAgcmV0dXJuIGZvbnROYW1lOwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fp
cm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHN0YXRpYyBTdHJpbmcgY3Jl
YXRlVW5pcXVlRm9udE5hbWUoKQogICAgIEdVSUQgZm9udFV1aWQ7CiAgICAgQ29DcmVhdGVHdWlk
KCZmb250VXVpZCk7CiAKLSAgICBhdXRvIGZvbnROYW1lID0gYmFzZTY0RW5jb2RlVG9TdHJpbmco
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJmZvbnRVdWlkKSwgc2l6ZW9mKGZvbnRVdWlkKSk7Cisg
ICAgYXV0byBmb250TmFtZSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKFNwYW4geyAmZm9udFV1aWQs
IDEgfSk7CiAgICAgQVNTRVJUKGZvbnROYW1lLmxlbmd0aCgpIDwgTEZfRkFDRVNJWkUpOwogICAg
IHJldHVybiBmb250TmFtZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9T
U0xLZXlHZW5lcmF0b3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1NTTEtleUdlbmVyYXRvck1hYy5tbQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRvck1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjE5LDcgKzIxOSw3IEBAIHN0YXRpYyBTdHJpbmcgc2lnbmVkUHVibGljS2V5QW5kQ2hh
bGxlbmcKICAgICBpZiAoU2VjQXNuMUVuY29kZUl0ZW0oY29kZXIsICZzaWduZWRQdWJsaWNLZXlB
bmRDaGFsbGVuZ2UsIHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVRlbXBsYXRlLCAmZW5jb2Rl
ZFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZSkgIT0gbm9FcnIpCiAgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKIAotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhlbmNvZGVkU2lnbmVk
UHVibGljS2V5QW5kQ2hhbGxlbmdlLkRhdGEsIGVuY29kZWRTaWduZWRQdWJsaWNLZXlBbmRDaGFs
bGVuZ2UuTGVuZ3RoKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoU3BhbiB7IGVu
Y29kZWRTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2UuRGF0YSwgZW5jb2RlZFNpZ25lZFB1Ymxp
Y0tleUFuZENoYWxsZW5nZS5MZW5ndGggfSk7CiB9CiAKIEFMTE9XX0RFUFJFQ0FURURfREVDTEFS
QVRJT05TX0VORApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVh
bHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMu
aAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTQsMTYgKzExNCwxNiBAQCBwcml2YXRlOgogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQg
Q2FwYWJpbGl0eVZhbHVlT3JSYW5nZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7
Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OF90Kj4oJm1fbWluT3JWYWx1ZSksIHNpemVvZihWYWx1ZVVuaW9uKSwgYWxpZ25vZihW
YWx1ZVVuaW9uKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oJm1fbWF4KSwgc2l6ZW9mKFZhbHVlVW5pb24pLCBhbGln
bm9mKFZhbHVlVW5pb24pKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFu
IHsgJm1fbWluT3JWYWx1ZSwgMSB9LCBhbGlnbm9mKFZhbHVlVW5pb24pKTsKKyAgICBlbmNvZGVy
LmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJm1fbWF4LCAxIH0sIGFsaWdub2YoVmFsdWVV
bmlvbikpOwogICAgIGVuY29kZXIgPDwgbV90eXBlOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgogYm9vbCBDYXBhYmlsaXR5VmFsdWVPclJhbmdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
ciwgQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZSYgdmFsdWVPclJhbmdlKQogewotICAgIHJldHVybiBk
ZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigm
dmFsdWVPclJhbmdlLm1fbWluT3JWYWx1ZSksIHNpemVvZihWYWx1ZVVuaW9uKSwgYWxpZ25vZihW
YWx1ZVVuaW9uKSkKLSAgICAgICAgJiYgZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnZhbHVlT3JSYW5nZS5tX21heCksIHNpemVvZihWYWx1
ZVVuaW9uKSwgYWxpZ25vZihWYWx1ZVVuaW9uKSkKKyAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVG
aXhlZExlbmd0aERhdGEoU3BhbiB7ICZ2YWx1ZU9yUmFuZ2UubV9taW5PclZhbHVlLCAxIH0sIGFs
aWdub2YoVmFsdWVVbmlvbikpCisgICAgICAgICYmIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhE
YXRhKFNwYW4geyAmdmFsdWVPclJhbmdlLm1fbWF4LCAxIH0sIGFsaWdub2YoVmFsdWVVbmlvbikp
CiAgICAgICAgICYmIGRlY29kZXIuZGVjb2RlKHZhbHVlT3JSYW5nZS5tX3R5cGUpOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJj
ZUNlbnRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSwxMyArMTM5LDEzIEBAIHN0YXRpYyB2
b2lkIGFkZFN0cmluZ1RvU0hBMShTSEExJiBzaGExLCAKIAogICAgIGlmIChzdHJpbmcuaXM4Qml0
KCkgJiYgc3RyaW5nLmlzQWxsQVNDSUkoKSkgewogICAgICAgICBjb25zdCB1aW50OF90IG51bGxC
eXRlID0gMDsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3Ry
aW5nLmxlbmd0aCgpKTsKLSAgICAgICAgc2hhMS5hZGRCeXRlcygmbnVsbEJ5dGUsIDEpOworICAg
ICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyBzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxl
bmd0aCgpIH0pOworICAgICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmbnVsbEJ5dGUsIDEgfSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBhdXRvIHV0ZjggPSBzdHJpbmcudXRmOCgp
OwotICAgIHNoYTEuYWRkQnl0ZXModXRmOC5kYXRhQXNVSW50OFB0cigpLCB1dGY4Lmxlbmd0aCgp
ICsgMSk7IC8vIEluY2x1ZGUgdGVybWluYXRpbmcgbnVsbCBieXRlLgorICAgIHNoYTEuYWRkQnl0
ZXMoU3BhbiB7IHV0ZjguZGF0YUFzVUludDhQdHIoKSwgdXRmOC5sZW5ndGgoKSArIDEgfSk7IC8v
IEluY2x1ZGUgdGVybWluYXRpbmcgbnVsbCBieXRlLgogfQogCiBTdHJpbmcgUmVhbHRpbWVNZWRp
YVNvdXJjZUNlbnRlcjo6aGFzaFN0cmluZ1dpdGhTYWx0KGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0
IFN0cmluZyYgaGFzaFNhbHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0NyZWRlbnRpYWxCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0NyZWRlbnRpYWxCYXNlLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsQmFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk3LDggKzk3LDkgQEAgYm9vbCBDcmVkZW50aWFsQmFzZTo6Y29tcGFyZShjb25zdCBD
cmVkZQogCiBTdHJpbmcgQ3JlZGVudGlhbEJhc2U6OnNlcmlhbGl6YXRpb25Gb3JCYXNpY0F1dGhv
cml6YXRpb25IZWFkZXIoKSBjb25zdAogeworICAgIC8vIEZJWE1FOiBBZGQgbWFrZVN0cmluZyB2
YXJpYW50IHRoYXQgY3JlYXRlcyBhIHV0ZjggYnVmZmVyIGRpcmVjdGx5LgogICAgIGF1dG8gY3Jl
ZGVudGlhbFN0cmluZ0RhdGEgPSBtYWtlU3RyaW5nKG1fdXNlciwgJzonLCBtX3Bhc3N3b3JkKS51
dGY4KCk7Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoIkJhc2ljICIsIGJhc2U2NEVuY29kZWQoY3Jl
ZGVudGlhbFN0cmluZ0RhdGEpKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygiQmFzaWMgIiwgYmFz
ZTY0RW5jb2RlZChjcmVkZW50aWFsU3RyaW5nRGF0YS5ieXRlcygpKSk7CiB9CiAKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ2VydGlmaWNhdGVJbmZvQ0ZOZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ2Vy
dGlmaWNhdGVJbmZvQ0ZOZXQuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0NlcnRpZmljYXRlSW5mb0NGTmV0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjEwLDcgKzIxMCw3IEBAIHN0YXRpYyB2b2lkIGVuY29kZUNGRGF0YShFbmNvZGVy
JiBlbmNvZGUKICAgICBjb25zdCB1aW50OF90KiBieXRlUHRyID0gQ0ZEYXRhR2V0Qnl0ZVB0cihk
YXRhKTsKIAogICAgIGVuY29kZXIgPDwgbGVuZ3RoOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKGJ5dGVQdHIsIHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSk7CisgICAgZW5j
b2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IGJ5dGVQdHIsIHN0YXRpY19jYXN0PHNp
emVfdD4obGVuZ3RoKSB9KTsKIH0KIAogc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0YWluUHRyPENG
RGF0YVJlZj4+IGRlY29kZUNGRGF0YShEZWNvZGVyJiBkZWNvZGVyKQpAQCAtMjI1LDcgKzIyNSw3
IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldGFpblB0cjxDRkRhdGFSZWYKICAgICBpZiAoIXBv
aW50ZXIpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gYWRvcHRD
RihDRkRhdGFDcmVhdGUobnVsbHB0ciwgcG9pbnRlciwgKnNpemUpKTsKKyAgICByZXR1cm4gYWRv
cHRDRihDRkRhdGFDcmVhdGUobnVsbHB0ciwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4ocG9pbnRlciksICpzaXplKSk7CiB9CiAKICNpZiBIQVZFKFNFQ19UUlVTVF9TRVJJQUxJWkFU
SU9OKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0NlcnRpZmlj
YXRlSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9DZXJ0aWZpY2F0ZUluZm8uaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0NlcnRpZmljYXRlSW5mby5oCSh3b3JraW5nIGNvcHkp
CkBAIC03NSw3ICs3NSw3IEBAIHRlbXBsYXRlPD4gc3RydWN0IENvZGVyPEdSZWZQdHI8R0J5dGVB
cnIKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciAmZW5jb2RlciwgY29uc3QgR1JlZlB0
cjxHQnl0ZUFycmF5PiYgYnl0ZUFycmF5KQogICAgIHsKICAgICAgICAgZW5jb2RlciA8PCBzdGF0
aWNfY2FzdDx1aW50MzJfdD4oYnl0ZUFycmF5LT5sZW4pOwotICAgICAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShieXRlQXJyYXktPmRhdGEsIGJ5dGVBcnJheS0+bGVuKTsKKyAgICAg
ICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IGJ5dGVBcnJheS0+ZGF0YSwg
Ynl0ZUFycmF5LT5sZW4gfSk7CiAgICAgfQogCiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8R1Jl
ZlB0cjxHQnl0ZUFycmF5Pj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCkBAIC04Nyw3ICs4Nyw3
IEBAIHRlbXBsYXRlPD4gc3RydWN0IENvZGVyPEdSZWZQdHI8R0J5dGVBcnIKIAogICAgICAgICBH
UmVmUHRyPEdCeXRlQXJyYXk+IGJ5dGVBcnJheSA9IGFkb3B0R1JlZihnX2J5dGVfYXJyYXlfc2l6
ZWRfbmV3KCpzaXplKSk7CiAgICAgICAgIGdfYnl0ZV9hcnJheV9zZXRfc2l6ZShieXRlQXJyYXku
Z2V0KCksICpzaXplKTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0
YShieXRlQXJyYXktPmRhdGEsICpzaXplKSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZp
eGVkTGVuZ3RoRGF0YShTcGFuIHsgYnl0ZUFycmF5LT5kYXRhLCAqc2l6ZSB9KSkKICAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIHJldHVybiBieXRlQXJyYXk7CiAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVu
dC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9T
UUxpdGVTdGF0ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIGJvb2wg
U1FMaXRlU3RhdGVtZW50OjpleGVjdXRlQ29tbWFuZCgpCiAgICAgcmV0dXJuIHN0ZXAoKSA9PSBT
UUxJVEVfRE9ORTsKIH0KIAotaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IoaW50IGluZGV4
LCBTcGFuPGNvbnN0IHVpbnQ4X3Q+IGJsb2IpCitpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kQmxv
YihpbnQgaW5kZXgsIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBibG9iKQogewogICAgIEFTU0VSVChp
bmRleCA+IDApOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpIDw9IGJp
bmRQYXJhbWV0ZXJDb3VudCgpKTsKQEAgLTk1LDYgKzk1LDExIEBAIGludCBTUUxpdGVTdGF0ZW1l
bnQ6OmJpbmRCbG9iKGludCBpbmRleCwKICAgICByZXR1cm4gc3FsaXRlM19iaW5kX2Jsb2IobV9z
dGF0ZW1lbnQsIGluZGV4LCBibG9iLmRhdGEoKSwgYmxvYi5zaXplKCksIFNRTElURV9UUkFOU0lF
TlQpOwogfQogCitpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kQmxvYihpbnQgaW5kZXgsIFNwYW48
Y29uc3QgdWludDhfdD4gYmxvYikKK3sKKyAgICByZXR1cm4gYmluZEJsb2IoaW5kZXgsIGFzQnl0
ZXMoYmxvYikpOworfQorCiBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kQmxvYihpbnQgaW5kZXgs
IGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKICAgICAvLyBTdHJpbmc6OmNoYXJhY3RlcnMoKSByZXR1
cm5zIDAgZm9yIHRoZSBlbXB0eSBzdHJpbmcsIHdoaWNoIFNRTGl0ZQpAQCAtMTA3LDcgKzExMiw3
IEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwKICAgICBlbHNlCiAg
ICAgICAgIGNoYXJhY3RlcnMgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7CiAKLSAgICByZXR1cm4g
YmluZEJsb2IoaW5kZXgsIFNwYW4geyByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihj
aGFyYWN0ZXJzKSwgdGV4dC5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcikgfSk7CisgICAgcmV0dXJu
IGJpbmRCbG9iKGluZGV4LCBTcGFuIHsgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBzdGQ6OmJ5dGUq
PihjaGFyYWN0ZXJzKSwgdGV4dC5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcikgfSk7CiB9CiAKIGlu
dCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRUZXh0KGludCBpbmRleCwgU3RyaW5nVmlldyB0ZXh0KQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaAko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0
YXRlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBAIHB1YmxpYzoKICAgICBX
RUJDT1JFX0VYUE9SVCB+U1FMaXRlU3RhdGVtZW50KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgU1FM
aXRlU3RhdGVtZW50KFNRTGl0ZVN0YXRlbWVudCYmKTsKICAgICAKKyAgICBXRUJDT1JFX0VYUE9S
VCBpbnQgYmluZEJsb2IoaW50IGluZGV4LCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwogICAgIFdF
QkNPUkVfRVhQT1JUIGludCBiaW5kQmxvYihpbnQgaW5kZXgsIFNwYW48Y29uc3QgdWludDhfdD4p
OwogICAgIFdFQkNPUkVfRVhQT1JUIGludCBiaW5kQmxvYihpbnQgaW5kZXgsIGNvbnN0IFN0cmlu
ZyYpOwogICAgIFdFQkNPUkVfRVhQT1JUIGludCBiaW5kVGV4dChpbnQgaW5kZXgsIFN0cmluZ1Zp
ZXcpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVvdGVkUHJp
bnRhYmxlLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9RdW90ZWRQcmludGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxMiArNTUsNyBA
QCBzdGF0aWMgc2l6ZV90IGxlbmd0aE9mTGluZUVuZGluZ0F0SW5kZXgoCiAgICAgcmV0dXJuIDA7
CiB9CiAKLVZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNvZGUoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBpbnB1dCkKLXsKLSAgICByZXR1cm4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGlu
cHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpKTsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFBy
aW50YWJsZUVuY29kZShjb25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGlucHV0TGVuZ3RoKQor
c3RhdGljIFZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNvZGUoY29uc3QgdWludDhf
dCogaW5wdXQsIHNpemVfdCBpbnB1dExlbmd0aCkKIHsKICAgICBWZWN0b3I8dWludDhfdD4gb3V0
OwogICAgIG91dC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGlucHV0TGVuZ3RoKTsKQEAgLTExNiwx
MiArMTExLDEyIEBAIFZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNvZGUoY28KICAg
ICByZXR1cm4gb3V0OwogfQogCi1WZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVjb2Rl
KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQpCitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJp
bnRhYmxlRW5jb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCkKIHsKLSAgICByZXR1cm4g
cXVvdGVkUHJpbnRhYmxlRGVjb2RlKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpKTsKKyAgICBy
ZXR1cm4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGlucHV0LmRhdGEoKSksIGlucHV0LnNpemUoKSk7CiB9CiAKLVZlY3Rvcjx1aW50OF90PiBx
dW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGRhdGFMZW5n
dGgpCitzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCB1
aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCkKIHsKICAgICBWZWN0b3I8dWludDhfdD4g
b3V0OwogICAgIGlmICghZGF0YUxlbmd0aCkKQEAgLTE1Niw0ICsxNTEsOSBAQCBWZWN0b3I8dWlu
dDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvCiAgICAgcmV0dXJuIG91dDsKIH0KIAorVmVj
dG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
aW5wdXQpCit7CisgICAgcmV0dXJuIHF1b3RlZFByaW50YWJsZURlY29kZShyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCkpOworfQorCiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVvdGVkUHJpbnRhYmxl
LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVv
dGVkUHJpbnRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEzICszMSwxMSBAQAogI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJs
ZUVuY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mKTsKLVZlY3Rvcjx1aW50OF90PiBxdW90ZWRQ
cmludGFibGVFbmNvZGUoY29uc3QgdWludDhfdCosIHNpemVfdCk7Ci0KLVZlY3Rvcjx1aW50OF90
PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik7Ci1WZWN0b3I8
dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwor
VmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShTcGFuPGNvbnN0IHN0ZDo6Ynl0
ZT4pOworVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShTcGFuPGNvbnN0IHN0
ZDo6Ynl0ZT4pOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI1MSw3ICsyNTEsNyBAQCBzdGQ6Om9wdGlvbmFsPFBhc3RlYm9hcmRDdXN0b21E
YXRhPiBQYXN0CiAgICAgICAgIGlmIChIQU5ETEUgY2JEYXRhID0gOjpHZXRDbGlwYm9hcmREYXRh
KEN1c3RvbURhdGFDbGlwYm9hcmRGb3JtYXQpKSB7CiAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9
IEdsb2JhbFNpemUoY2JEYXRhKTsKICAgICAgICAgICAgIGF1dG8gZGF0YSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3QqPihHbG9iYWxMb2NrKGNiRGF0YSkpOwotICAgICAgICAgICAgYXV0byBjdXN0b21E
YXRhID0gUGFzdGVib2FyZEN1c3RvbURhdGE6OmZyb21QZXJzaXN0ZW5jZURlY29kZXIoe2RhdGEs
IHNpemV9KTsKKyAgICAgICAgICAgIGF1dG8gY3VzdG9tRGF0YSA9IFBhc3RlYm9hcmRDdXN0b21E
YXRhOjpmcm9tUGVyc2lzdGVuY2VEZWNvZGVyKFNwYW4geyBkYXRhLCBzaXplIH0pOwogCiAgICAg
ICAgICAgICBHbG9iYWxVbmxvY2soY2JEYXRhKTsKICAgICAgICAgICAgIDo6Q2xvc2VDbGlwYm9h
cmQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0
cmF0aW9uRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
c2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAyNzg4MDkp
CisrKyBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRh
dGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU5LDEwICs0NTksMTAgQEAgYm9vbCBSZWdp
c3RyYXRpb25EYXRhYmFzZTo6ZG9QdXNoQ2hhbmdlcwogICAgICAgICAgICAgfHwgaW5zZXJ0U3Rh
dGVtZW50LT5iaW5kVGV4dCg2LCB1cGRhdGVWaWFDYWNoZVRvU3RyaW5nKGRhdGEucmVnaXN0cmF0
aW9uLnVwZGF0ZVZpYUNhY2hlKSkgIT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8fCBpbnNlcnRT
dGF0ZW1lbnQtPmJpbmRUZXh0KDcsIGRhdGEuc2NyaXB0VVJMLnN0cmluZygpKSAhPSBTUUxJVEVf
T0sKICAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRleHQoOCwgd29ya2VyVHlw
ZVRvU3RyaW5nKGRhdGEud29ya2VyVHlwZSkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwg
aW5zZXJ0U3RhdGVtZW50LT5iaW5kQmxvYig5LCBTcGFuIHsgY3NwRW5jb2Rlci5idWZmZXIoKSwg
Y3NwRW5jb2Rlci5idWZmZXJTaXplKCkgfSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBp
bnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDksIGNzcEVuY29kZXIuYnVmZmVyKCkpICE9IFNRTElU
RV9PSwogICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCgxMCwgZGF0YS5y
ZWZlcnJlclBvbGljeSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1l
bnQtPmJpbmRCbG9iKDExLCBTcGFuIHsgc2NyaXB0UmVzb3VyY2VNYXBFbmNvZGVyLmJ1ZmZlcigp
LCBzY3JpcHRSZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVyU2l6ZSgpIH0pICE9IFNRTElURV9PSwot
ICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kQmxvYigxMiwgU3BhbiB7IGNlcnRp
ZmljYXRlSW5mb0VuY29kZXIuYnVmZmVyKCksIGNlcnRpZmljYXRlSW5mb0VuY29kZXIuYnVmZmVy
U2l6ZSgpIH0pICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5i
aW5kQmxvYigxMSwgc2NyaXB0UmVzb3VyY2VNYXBFbmNvZGVyLmJ1ZmZlcigpKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoMTIsIGNlcnRpZmlj
YXRlSW5mb0VuY29kZXIuYnVmZmVyKCkpICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwgaW5z
ZXJ0U3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIsICJGYWlsZWQgdG8gc3RvcmUgcmVnaXN0cmF0aW9u
IGRhdGEgaW50byByZWNvcmRzIHRhYmxlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJv
cigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC01MTcsNyArNTE3LDcgQEAgU3RyaW5nIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBv
cnRSZWNvcgogICAgICAgICBzdGQ6Om9wdGlvbmFsPENvbnRlbnRTZWN1cml0eVBvbGljeVJlc3Bv
bnNlSGVhZGVycz4gY29udGVudFNlY3VyaXR5UG9saWN5OwogICAgICAgICBhdXRvIGNvbnRlbnRT
ZWN1cml0eVBvbGljeURhdGFTcGFuID0gc3FsLT5jb2x1bW5CbG9iQXNTcGFuKDgpOwogICAgICAg
ICBpZiAoY29udGVudFNlY3VyaXR5UG9saWN5RGF0YVNwYW4uc2l6ZSgpKSB7Ci0gICAgICAgICAg
ICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGNzcERlY29kZXIoY29udGVudFNlY3VyaXR5UG9s
aWN5RGF0YVNwYW4uZGF0YSgpLCBjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhU3Bhbi5zaXplKCkp
OworICAgICAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBjc3BEZWNvZGVyIHsgY29u
dGVudFNlY3VyaXR5UG9saWN5RGF0YVNwYW4gfTsKICAgICAgICAgICAgIGNzcERlY29kZXIgPj4g
Y29udGVudFNlY3VyaXR5UG9saWN5OwogICAgICAgICAgICAgaWYgKCFjb250ZW50U2VjdXJpdHlQ
b2xpY3kpIHsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTZXJ2aWNlV29ya2Vy
LCAiUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yZHM6IEZhaWxlZCB0byBkZWNvZGUg
Y29udGVudFNlY3VyaXR5UG9saWN5Iik7CkBAIC01MzAsNyArNTMwLDcgQEAgU3RyaW5nIFJlZ2lz
dHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcgogICAgICAgICBIYXNoTWFwPFVSTCwgU2Vydmlj
ZVdvcmtlckNvbnRleHREYXRhOjpJbXBvcnRlZFNjcmlwdD4gc2NyaXB0UmVzb3VyY2VNYXA7CiAg
ICAgICAgIGF1dG8gc2NyaXB0UmVzb3VyY2VNYXBEYXRhU3BhbiA9IHNxbC0+Y29sdW1uQmxvYkFz
U3BhbigxMCk7CiAgICAgICAgIGlmIChzY3JpcHRSZXNvdXJjZU1hcERhdGFTcGFuLnNpemUoKSkg
ewotICAgICAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBzY3JpcHRSZXNvdXJjZU1h
cERlY29kZXIoc2NyaXB0UmVzb3VyY2VNYXBEYXRhU3Bhbi5kYXRhKCksIHNjcmlwdFJlc291cmNl
TWFwRGF0YVNwYW4uc2l6ZSgpKTsKKyAgICAgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29k
ZXIgc2NyaXB0UmVzb3VyY2VNYXBEZWNvZGVyIHsgc2NyaXB0UmVzb3VyY2VNYXBEYXRhU3BhbiB9
OwogICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxIYXNoTWFwPFVSTCwgSW1wb3J0ZWRTY3JpcHRB
dHRyaWJ1dGVzPj4gc2NyaXB0UmVzb3VyY2VNYXBXaXRob3V0U2NyaXB0czsKICAgICAgICAgICAg
IHNjcmlwdFJlc291cmNlTWFwRGVjb2RlciA+PiBzY3JpcHRSZXNvdXJjZU1hcFdpdGhvdXRTY3Jp
cHRzOwogICAgICAgICAgICAgaWYgKCFzY3JpcHRSZXNvdXJjZU1hcFdpdGhvdXRTY3JpcHRzKSB7
CkBAIC01NDMsNyArNTQzLDcgQEAgU3RyaW5nIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRS
ZWNvcgogICAgICAgICBhdXRvIGNlcnRpZmljYXRlSW5mb0RhdGFTcGFuID0gc3FsLT5jb2x1bW5C
bG9iQXNTcGFuKDExKTsKICAgICAgICAgc3RkOjpvcHRpb25hbDxDZXJ0aWZpY2F0ZUluZm8+IGNl
cnRpZmljYXRlSW5mbzsKIAotICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGNlcnRp
ZmljYXRlSW5mb0RlY29kZXIoY2VydGlmaWNhdGVJbmZvRGF0YVNwYW4uZGF0YSgpLCBjZXJ0aWZp
Y2F0ZUluZm9EYXRhU3Bhbi5zaXplKCkpOworICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNv
ZGVyIGNlcnRpZmljYXRlSW5mb0RlY29kZXIgeyBjZXJ0aWZpY2F0ZUluZm9EYXRhU3BhbiB9Owog
ICAgICAgICBjZXJ0aWZpY2F0ZUluZm9EZWNvZGVyID4+IGNlcnRpZmljYXRlSW5mbzsKICAgICAg
ICAgaWYgKCFjZXJ0aWZpY2F0ZUluZm8pIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
KFNlcnZpY2VXb3JrZXIsICJSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3JkczogRmFp
bGVkIHRvIGRlY29kZSBjZXJ0aWZpY2F0ZUluZm8iKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTY3JpcHRTdG9yYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHAJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2
ZXIvU1dTY3JpcHRTdG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBT
dHJpbmcgU1dTY3JpcHRTdG9yYWdlOjpzaGEySGFzaChjb25zdCBTCiAgICAgYXV0byBpbnB1dFV0
ZjggPSBpbnB1dC51dGY4KCk7CiAgICAgY3J5cHRvLT5hZGRCeXRlcyhpbnB1dFV0ZjguZGF0YSgp
LCBpbnB1dFV0ZjgubGVuZ3RoKCkpOwogICAgIGF1dG8gaGFzaCA9IGNyeXB0by0+Y29tcHV0ZUhh
c2goKTsKLSAgICByZXR1cm4gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoaGFzaC5kYXRhKCksIGhh
c2guc2l6ZSgpKTsKKyAgICByZXR1cm4gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoaGFzaCk7CiB9
CiAKIFN0cmluZyBTV1NjcmlwdFN0b3JhZ2U6OnNoYTJIYXNoKGNvbnN0IFVSTCYgaW5wdXQpIGNv
bnN0CkBAIC04Niw5ICs4Niw5IEBAIFNjcmlwdEJ1ZmZlciBTV1NjcmlwdFN0b3JhZ2U6OnN0b3Jl
KGNvbnMKICAgICBhdXRvIHNjcmlwdFBhdGggPSB0aGlzLT5zY3JpcHRQYXRoKHJlZ2lzdHJhdGlv
bktleSwgc2NyaXB0VVJMKTsKICAgICBGaWxlU3lzdGVtOjptYWtlQWxsRGlyZWN0b3JpZXMoRmls
ZVN5c3RlbTo6cGFyZW50UGF0aChzY3JpcHRQYXRoKSk7CiAKLSAgICBhdXRvIGl0ZXJhdGVPdmVy
QnVmZmVyQW5kV3JpdGVEYXRhID0gWyZdKGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhf
dCosIHNpemVfdCk+JiB3cml0ZURhdGEpIHsKLSAgICAgICAgZm9yIChhdXRvIGl0ID0gc2NyaXB0
LmJ1ZmZlcigpLT5iZWdpbigpOyBpdCAhPSBzY3JpcHQuYnVmZmVyKCktPmVuZCgpOyArK2l0KQot
ICAgICAgICAgICAgd3JpdGVEYXRhKGl0LT5zZWdtZW50LT5kYXRhKCksIGl0LT5zZWdtZW50LT5z
aXplKCkpOworICAgIGF1dG8gaXRlcmF0ZU92ZXJCdWZmZXJBbmRXcml0ZURhdGEgPSBbJl0oY29u
c3QgRnVuY3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYgd3JpdGVEYXRhKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgc2VnbWVudEVudHJ5IDogKnNjcmlwdC5idWZmZXIoKSkKKyAgICAg
ICAgICAgIHdyaXRlRGF0YShzZWdtZW50RW50cnkuc2VnbWVudC0+Ynl0ZXMoKSk7CiAgICAgfTsK
IAogICAgIGlmICghc2hvdWxkVXNlRmlsZU1hcHBpbmcoc2NyaXB0LmJ1ZmZlcigpLT5zaXplKCkp
KSB7CkBAIC05Nyw4ICs5Nyw4IEBAIFNjcmlwdEJ1ZmZlciBTV1NjcmlwdFN0b3JhZ2U6OnN0b3Jl
KGNvbnMKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIsICJTV1Nj
cmlwdFN0b3JhZ2U6OnN0b3JlOiBGYWlsdXJlIHRvIHN0b3JlICVzLCBGaWxlU3lzdGVtOjpvcGVu
RmlsZSgpIGZhaWxlZCIsIHNjcmlwdFBhdGgudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgICAgICBy
ZXR1cm4geyB9OwogICAgICAgICB9Ci0gICAgICAgIGl0ZXJhdGVPdmVyQnVmZmVyQW5kV3JpdGVE
YXRhKFsmXShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgewotICAgICAgICAgICAg
RmlsZVN5c3RlbTo6d3JpdGVUb0ZpbGUoaGFuZGxlLCBkYXRhLCBzaXplKTsKKyAgICAgICAgaXRl
cmF0ZU92ZXJCdWZmZXJBbmRXcml0ZURhdGEoWyZdKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRh
KSB7CisgICAgICAgICAgICBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShoYW5kbGUsIGRhdGEuZGF0
YSgpLCBkYXRhLnNpemUoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSk7
CiAgICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShoYW5kbGUpOwpJbmRleDogU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsODEgQEAKKzIwMjEtMDYtMTEgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUu
Y29tPgorCisgICAgICAgIEFkb3B0IFNwYW4gaW4gbW9yZSBwbGFjZXMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjg4NworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtXSVBdCisKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OkNh
Y2hlU3RvcmFnZTo6Q2FjaGU6OmRlY29kZVJlY29yZEhlYWRlcik6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnN0b3JlT3JpZ2luKToKKyAgICAgICAgKFdlYktp
dDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnJlYWRPcmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpD
YWNoZVN0b3JhZ2U6OmVuY29kZUNhY2hlTmFtZXMpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0
b3JhZ2U6OmRlY29kZUNhY2hlc05hbWVzKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpE
YXRhOjptYXBUb0ZpbGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmNv
bXB1dGVTSEExKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVE
YXRhLmg6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YTo6RGF0YSk6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1tOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6OmFwcGx5IGNvbnN0KToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhOjphZG9wdE1hcCk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FjaGU6OkVudHJ5OjplbmNvZGVBc1N0b3JhZ2VSZWNvcmQgY29uc3QpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVudHJ5OjpkZWNvZGVTdG9yYWdlUmVjb3JkKToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6Omhhc2hTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FjaGU6OktleTo6Y29tcHV0ZUhhc2ggY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FjaGU6OktleTo6Y29tcHV0ZVBhcnRpdGlvbkhhc2ggY29uc3QpOgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmRlY29kZVJlY29yZE1ldGFEYXRhKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhY2hlOjplbmNvZGVSZWNvcmRNZXRhRGF0YSk6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN1YnJlc291cmNlc0VudHJ5OjplbmNvZGVBc1N0
b3JhZ2VSZWNvcmQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN1YnJl
c291cmNlc0VudHJ5OjpkZWNvZGVTdG9yYWdlUmVjb3JkKToKKyAgICAgICAgKiBQbGF0Zm9ybS9J
UEMvQXJndW1lbnRDb2Rlci5oOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVy
cy5jcHA6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8Q1N0cmluZz46OmVuY29kZSk6Cisg
ICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8Q1N0cmluZz46OmRlY29kZSk6CisgICAgICAgIChJ
UEM6OkFyZ3VtZW50Q29kZXI8U3RyaW5nPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6ZGVjb2Rl
U3RyaW5nVGV4dCk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8U0hBMTo6RGlnZXN0Pjo6
ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxTSEExOjpEaWdlc3Q+OjpkZWNv
ZGUpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oOgorICAgICAgICAo
SVBDOjpTaW1wbGVBcmd1bWVudENvZGVyOjplbmNvZGUpOgorICAgICAgICAoSVBDOjpTaW1wbGVB
cmd1bWVudENvZGVyOjpkZWNvZGUpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9BcnJheVJlZmVy
ZW5jZS5oOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9EZWNvZGVyLmNwcDoKKyAgICAgICAgKElQ
Qzo6RGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKToKKyAgICAgICAgKiBQbGF0Zm9ybS9J
UEMvRGVjb2Rlci5oOgorICAgICAgICAoSVBDOjpEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERh
dGEpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9FbmNvZGVyLmNwcDoKKyAgICAgICAgKElQQzo6
RW5jb2Rlcjo6ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMv
RW5jb2Rlci5oOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9TaGFyZWRCdWZmZXJDb3B5LmNwcDoK
KyAgICAgICAgKElQQzo6U2hhcmVkQnVmZmVyQ29weTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAg
KiBQbGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlvbkVuY29kZXIuaDoKKyAgICAgICAgKiBTaGFy
ZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6ZW5jb2RlU2hhcmVk
QnVmZmVyKToKKyAgICAgICAgKElQQzo6ZGVjb2RlU2hhcmVkQnVmZmVyKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNwcDoKKyAgICAgICAgKEFQSTo6
ZW5jb2RlQ29udGVudFJ1bGVMaXN0TWV0YURhdGEpOgorICAgICAgICAoQVBJOjpnZXREYXRhKToK
KyAgICAgICAgKEFQSTo6ZGVjb2RlQ29udGVudFJ1bGVMaXN0TWV0YURhdGEpOgorICAgICAgICAo
QVBJOjp3cml0ZURhdGFUb0ZpbGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvTGVnYWN5U2Vz
c2lvblN0YXRlQ29kaW5nLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SGlzdG9yeUVudHJ5RGF0YUVu
Y29kZXI6Om9wZXJhdG9yPDwpOgorICAgICAgICAoV2ViS2l0OjpIaXN0b3J5RW50cnlEYXRhRW5j
b2Rlcjo6ZW5jb2RlQXJpdGhtZXRpY1R5cGUpOgorICAgICAgICAoV2ViS2l0OjpIaXN0b3J5RW50
cnlEYXRhRW5jb2Rlcjo6ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKToKKyAgICAgICAgKFdlYktpdDo6
SGlzdG9yeUVudHJ5RGF0YURlY29kZXI6Om9wZXJhdG9yPj4pOgorICAgICAgICAoV2ViS2l0OjpI
aXN0b3J5RW50cnlEYXRhRGVjb2Rlcjo6ZGVjb2RlQXJpdGhtZXRpY1R5cGUpOgorICAgICAgICAo
V2ViS2l0OjpIaXN0b3J5RW50cnlEYXRhRGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OmVuY29kZVR5cGVkQXJyYXkpOgorCiAyMDIxLTA2LTEx
ICBSeWFuIEhhZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3
ZWQsIHJldmVydGluZyByMjc4NzU0LgpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmNw
cAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Qcml2
YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjMsNyAr
MzIzLDcgQEAgdm9pZCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXI6OmZpcgogICAgICAg
ICBjcnlwdG8tPmFkZEJ5dGVzKHB1YmxpY0tleURhdGEtPmRhdGEoKSwgcHVibGljS2V5RGF0YS0+
c2l6ZSgpKTsKICAgICAgICAgYXV0byBwdWJsaWNLZXlEYXRhSGFzaCA9IGNyeXB0by0+Y29tcHV0
ZUhhc2goKTsKIAotICAgICAgICBhdXRvIGtleUlEID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmco
cHVibGljS2V5RGF0YUhhc2guZGF0YSgpLCBwdWJsaWNLZXlEYXRhSGFzaC5zaXplKCkpOworICAg
ICAgICBhdXRvIGtleUlEID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcocHVibGljS2V5RGF0YUhh
c2gpOwogICAgICAgICBpZiAoa2V5SUQgIT0gYXR0cmlidXRpb24uc291cmNlVW5saW5rYWJsZVRv
a2VuKCktPmtleUlEQmFzZTY0VVJMKQogICAgICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hl
U3RvcmFnZUVuZ2luZUNhY2hlLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU2NSw3ICs1NjUsNyBAQCBTdG9yYWdlOjpSZWNvcmQgQ2FjaGU6OmVuY29k
ZShjb25zdCBSZWNvCiAKICAgICBlbmNvZGVyLmVuY29kZUNoZWNrc3VtKCk7CiAKLSAgICBEYXRh
IGhlYWRlcihlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgRGF0
YSBoZWFkZXIoZW5jb2Rlci5idWZmZXIoKSk7CiAgICAgRGF0YSBib2R5OwogICAgIFdURjo6c3dp
dGNoT24ocmVjb3JkLnJlc3BvbnNlQm9keSwgW10oY29uc3QgUmVmPFdlYkNvcmU6OkZvcm1EYXRh
PiYgZm9ybURhdGEpIHsKICAgICAgICAgLy8gRklYTUU6IFN0b3JlIGZvcm0gZGF0YSBib2R5LgpA
QCAtNjMwLDcgKzYzMCw3IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkRPTUNhY2hl
RW4KIAogc3RkOjpvcHRpb25hbDxDYWNoZTo6RGVjb2RlZFJlY29yZD4gQ2FjaGU6OmRlY29kZVJl
Y29yZEhlYWRlcihjb25zdCBTdG9yYWdlOjpSZWNvcmQmIHN0b3JhZ2UpCiB7Ci0gICAgV1RGOjpQ
ZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKHN0b3JhZ2UuaGVhZGVyLmRhdGEoKSwgc3RvcmFn
ZS5oZWFkZXIuc2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIo
U3BhbiB7IHN0b3JhZ2UuaGVhZGVyLmRhdGEoKSwgc3RvcmFnZS5oZWFkZXIuc2l6ZSgpIH0pOwog
CiAgICAgc3RkOjpvcHRpb25hbDxkb3VibGU+IGluc2VydGlvblRpbWU7CiAgICAgZGVjb2RlciA+
PiBpbnNlcnRpb25UaW1lOwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNo
ZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsMTQgKzEwNSwx
NCBAQCB2b2lkIENhY2hlczo6c3RvcmVPcmlnaW4oQ29tcGxldGlvbkNhbGxiCiAgICAgZW5jb2Rl
ciA8PCBtX29yaWdpbi5jbGllbnRPcmlnaW4ucHJvdG9jb2w7CiAgICAgZW5jb2RlciA8PCBtX29y
aWdpbi5jbGllbnRPcmlnaW4uaG9zdDsKICAgICBlbmNvZGVyIDw8IG1fb3JpZ2luLmNsaWVudE9y
aWdpbi5wb3J0OwotICAgIG1fZW5naW5lLT53cml0ZUZpbGUoY2FjaGVzT3JpZ2luRmlsZW5hbWUo
bV9yb290UGF0aCksIERhdGEgeyBlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUo
KSB9LCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoc3RkOjpvcHRpb25hbDxFcnJvcj4mJiBlcnJv
cikgbXV0YWJsZSB7CisgICAgbV9lbmdpbmUtPndyaXRlRmlsZShjYWNoZXNPcmlnaW5GaWxlbmFt
ZShtX3Jvb3RQYXRoKSwgRGF0YSB7IGVuY29kZXIuYnVmZmVyKCkgfSwgW3Byb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0gKHN0ZDo6b3B0aW9uYWw8RXJyb3I+JiYgZXJyb3IpIG11dGFibGUgewogICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGVycm9yKSk7CiAgICAgfSk7CiB9CiAKIHN0ZDo6
b3B0aW9uYWw8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiBDYWNoZXM6OnJlYWRPcmlnaW4oY29uc3Qg
RGF0YSYgZGF0YSkKIHsKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0
YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRl
Y29kZXIoU3BhbiB7IGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSB9KTsKIAogICAgIHN0ZDo6b3B0
aW9uYWw8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiB0b3BPcmlnaW47CiAgICAgZGVjb2Rl
ciA+PiB0b3BPcmlnaW47CkBAIC00MDQsMTIgKzQwNCwxMiBAQCBzdGF0aWMgaW5saW5lIERhdGEg
ZW5jb2RlQ2FjaGVOYW1lcyhjb25zCiAgICAgICAgIGVuY29kZXIgPDwgY2FjaGUudW5pcXVlTmFt
ZSgpOwogICAgIH0KIAotICAgIHJldHVybiBEYXRhIHsgZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rl
ci5idWZmZXJTaXplKCkgfTsKKyAgICByZXR1cm4gRGF0YSB7IGVuY29kZXIuYnVmZmVyKCkgfTsK
IH0KIAogc3RhdGljIGlubGluZSBFeHBlY3RlZDxWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3Ry
aW5nPj4sIEVycm9yPiBkZWNvZGVDYWNoZXNOYW1lcyhjb25zdCBEYXRhJiBkYXRhKQogewotICAg
IFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihkYXRhLmRhdGEoKSwgZGF0YS5zaXpl
KCkpOworICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihTcGFuIHsgZGF0YS5k
YXRhKCksIGRhdGEuc2l6ZSgpIH0pOwogICAgIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGNvdW50
OwogICAgIGRlY29kZXIgPj4gY291bnQ7CiAgICAgaWYgKCFjb3VudCkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRh
LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBA
QCBuYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIERhdGEgRGF0YTo6bWFwVG9GaWxlKGNvbnN0IFN0
cmluZyYgcGF0aCkgY29uc3QKIHsKICAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUg
aGFuZGxlOwotICAgIGF1dG8gYXBwbHlEYXRhID0gWyZdKGNvbnN0IEZ1bmN0aW9uPGJvb2woY29u
c3QgdWludDhfdCosIHNpemVfdCk+JiBhcHBsaWVyKSB7IGFwcGx5KGFwcGxpZXIpOyB9OworICAg
IGF1dG8gYXBwbHlEYXRhID0gWyZdKGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6
OmJ5dGU+KT4mIGFwcGxpZXIpIHsgYXBwbHkoYXBwbGllcik7IH07CiAgICAgYXV0byBtYXBwZWRG
aWxlID0gRmlsZVN5c3RlbTo6bWFwVG9GaWxlKHBhdGgsIHNpemUoKSwgV1RGTW92ZShhcHBseURh
dGEpLCAmaGFuZGxlKTsKICAgICBpZiAoIW1hcHBlZEZpbGUpCiAgICAgICAgIHJldHVybiB7IH07
CkBAIC04Niw5ICs4Niw5IEBAIERhdGEgYWRvcHRBbmRNYXBGaWxlKEZpbGVTeXN0ZW06OlBsYXRm
b3IKIFNIQTE6OkRpZ2VzdCBjb21wdXRlU0hBMShjb25zdCBEYXRhJiBkYXRhLCBjb25zdCBTYWx0
JiBzYWx0KQogewogICAgIFNIQTEgc2hhMTsKLSAgICBzaGExLmFkZEJ5dGVzKHNhbHQuZGF0YSgp
LCBzYWx0LnNpemUoKSk7Ci0gICAgZGF0YS5hcHBseShbJnNoYTFdKGNvbnN0IHVpbnQ4X3QqIGRh
dGEsIHNpemVfdCBzaXplKSB7Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMoZGF0YSwgc2l6ZSk7Cisg
ICAgc2hhMS5hZGRCeXRlcyhzYWx0KTsKKyAgICBkYXRhLmFwcGx5KFsmc2hhMV0oU3Bhbjxjb25z
dCBzdGQ6OmJ5dGU+IGRhdGEpIHsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhkYXRhKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURh
dGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPHd0Zi9GaWxl
U3lzdGVtLmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUg
PHd0Zi9TSEExLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFk
U2FmZVJlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAt
NTQsNiArNTUsMTAgQEAgY2xhc3MgRGF0YSB7CiBwdWJsaWM6CiAgICAgRGF0YSgpIHsgfQogICAg
IERhdGEoY29uc3QgdWludDhfdCosIHNpemVfdCk7CisgICAgRGF0YShTcGFuPGNvbnN0IHN0ZDo6
Ynl0ZT4gZGF0YSkKKyAgICAgICAgOiBEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGRhdGEuZGF0YSgpKSwgZGF0YS5zaXplKCkpCisgICAgeworICAgIH0KIAogICAgIH5EYXRh
KCkgeyB9CiAKQEAgLTc5LDcgKzg0LDcgQEAgcHVibGljOgogCiAgICAgRGF0YSBzdWJyYW5nZShz
aXplX3Qgb2Zmc2V0LCBzaXplX3QpIGNvbnN0OwogCi0gICAgYm9vbCBhcHBseShjb25zdCBGdW5j
dGlvbjxib29sIChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mKSBjb25zdDsKKyAgICBib29sIGFw
cGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2wgKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+JikgY29uc3Q7
CiAKICAgICBEYXRhIG1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpIGNvbnN0OwogCkluZGV4
OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2Nv
YS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZURhdGFDb2NvYS5tbQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTY5LDEyICs2OSwxMiBAQCBib29sIERhdGE6OmlzTnVsbCgpIGNvbnN0CiAgICAg
cmV0dXJuICFtX2Rpc3BhdGNoRGF0YTsKIH0KIAotYm9vbCBEYXRhOjphcHBseShjb25zdCBGdW5j
dGlvbjxib29sIChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIGFwcGxpZXIpIGNvbnN0Citib29s
IERhdGE6OmFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2wgKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+
JiBhcHBsaWVyKSBjb25zdAogewogICAgIGlmICghbV9zaXplKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgcmV0dXJuIGRpc3BhdGNoX2RhdGFfYXBwbHkobV9kaXNwYXRjaERhdGEuZ2V0KCks
IFsmYXBwbGllcl0oZGlzcGF0Y2hfZGF0YV90LCBzaXplX3QsIGNvbnN0IHZvaWQqIGRhdGEsIHNp
emVfdCBzaXplKSB7Ci0gICAgICAgIHJldHVybiBhcHBsaWVyKHN0YXRpY19jYXN0PGNvbnN0IHVp
bnQ4X3QqPihkYXRhKSwgc2l6ZSk7CisgICAgICAgIHJldHVybiBhcHBsaWVyKFNwYW4geyBzdGF0
aWNfY2FzdDxjb25zdCBzdGQ6OmJ5dGUqPihkYXRhKSwgc2l6ZSB9KTsKICAgICB9KTsKIH0KIApA
QCAtOTQsMTQgKzk0LDExIEBAIERhdGEgY29uY2F0ZW5hdGUoY29uc3QgRGF0YSYgYSwgY29uc3Qg
RGEKIAogRGF0YSBEYXRhOjphZG9wdE1hcChGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIG1h
cHBlZEZpbGUsIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmZCkKIHsKLSAgICBzaXpl
X3Qgc2l6ZSA9IG1hcHBlZEZpbGUuc2l6ZSgpOwotICAgIHZvaWQqIG1hcCA9IG1hcHBlZEZpbGUu
bGVha0hhbmRsZSgpOwotICAgIEFTU0VSVChtYXApOwotICAgIEFTU0VSVChtYXAgIT0gTUFQX0ZB
SUxFRCk7CisgICAgYXV0byBtYXAgPSBtYXBwZWRGaWxlLmxlYWtIYW5kbGUoKTsKKyAgICBBU1NF
UlQobWFwLmRhdGEoKSk7CisgICAgQVNTRVJUKG1hcC5kYXRhKCkgIT0gTUFQX0ZBSUxFRCk7CiAg
ICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGZkKTsKLSAgICBhdXRvIGJvZHlNYXAgPSBhZG9wdE9T
T2JqZWN0KGRpc3BhdGNoX2RhdGFfY3JlYXRlKG1hcCwgc2l6ZSwgZGlzcGF0Y2hfZ2V0X2dsb2Jh
bF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9ERUZBVUxULCAwKSwgW21hcCwgc2l6ZV0g
ewotICAgICAgICBtdW5tYXAobWFwLCBzaXplKTsKLSAgICB9KSk7CisgICAgYXV0byBib2R5TWFw
ID0gYWRvcHRPU09iamVjdChkaXNwYXRjaF9kYXRhX2NyZWF0ZShtYXAuZGF0YSgpLCBtYXAuc2l6
ZSgpLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RF
RkFVTFQsIDApLCBESVNQQVRDSF9EQVRBX0RFU1RSVUNUT1JfTVVOTUFQKSk7CiAgICAgcmV0dXJu
IHsgV1RGTW92ZShib2R5TWFwKSwgRGF0YTo6QmFja2luZzo6TWFwIH07CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRW50cnkuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTks
MTAgKzk5LDEwIEBAIFN0b3JhZ2U6OlJlY29yZCBFbnRyeTo6ZW5jb2RlQXNTdG9yYWdlUmUKICAg
ICAKICAgICBlbmNvZGVyLmVuY29kZUNoZWNrc3VtKCk7CiAKLSAgICBEYXRhIGhlYWRlcihlbmNv
ZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgRGF0YSBoZWFkZXIgeyBl
bmNvZGVyLmJ1ZmZlcigpIH07CiAgICAgRGF0YSBib2R5OwogICAgIGlmIChtX2J1ZmZlcikKLSAg
ICAgICAgYm9keSA9IHsgbV9idWZmZXItPmRhdGEoKSwgbV9idWZmZXItPnNpemUoKSB9OworICAg
ICAgICBib2R5ID0geyBtX2J1ZmZlci0+Ynl0ZXMoKSB9OwogCiAgICAgcmV0dXJuIHsgbV9rZXks
IG1fdGltZVN0YW1wLCBoZWFkZXIsIGJvZHksIHsgfSB9OwogfQpAQCAtMTExLDcgKzExMSw3IEBA
IHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gRW50cnk6OmRlY29kZVN0b3IKIHsKICAgICBhdXRvIGVu
dHJ5ID0gbWFrZVVuaXF1ZTxFbnRyeT4oc3RvcmFnZUVudHJ5KTsKIAotICAgIFdURjo6UGVyc2lz
dGVuY2U6OkRlY29kZXIgZGVjb2RlcihzdG9yYWdlRW50cnkuaGVhZGVyLmRhdGEoKSwgc3RvcmFn
ZUVudHJ5LmhlYWRlci5zaXplKCkpOworICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVj
b2RlciB7IFNwYW4geyBzdG9yYWdlRW50cnkuaGVhZGVyLmRhdGEoKSwgc3RvcmFnZUVudHJ5Lmhl
YWRlci5zaXplKCkgfSB9OwogICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7
CiAgICAgaWYgKCFXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlOjpkZWNvZGUoZGVjb2RlciwgcmVz
cG9uc2UpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlS2V5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTMgKzg4LDEzIEBAIHN0YXRpYyB2
b2lkIGhhc2hTdHJpbmcoU0hBMSYgc2hhMSwgY29uc3QKIAogICAgIGlmIChzdHJpbmcuaXM4Qml0
KCkgJiYgc3RyaW5nLmlzQWxsQVNDSUkoKSkgewogICAgICAgICBjb25zdCB1aW50OF90IG51bGxC
eXRlID0gMDsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3Ry
aW5nLmxlbmd0aCgpKTsKLSAgICAgICAgc2hhMS5hZGRCeXRlcygmbnVsbEJ5dGUsIDEpOworICAg
ICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyBzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxl
bmd0aCgpIH0pOworICAgICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmbnVsbEJ5dGUsIDEgfSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byBjU3RyaW5nID0gc3RyaW5nLnV0Zjgo
KTsKICAgICAvLyBJbmNsdWRlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4KLSAgICBzaGExLmFkZEJ5
dGVzKGNTdHJpbmcuZGF0YUFzVUludDhQdHIoKSwgY1N0cmluZy5sZW5ndGgoKSArIDEpOworICAg
IHNoYTEuYWRkQnl0ZXMoU3BhbiB7IGNTdHJpbmcuZGF0YUFzVUludDhQdHIoKSwgY1N0cmluZy5s
ZW5ndGgoKSArIDEgfSk7CiB9CiAKIEtleTo6SGFzaFR5cGUgS2V5Ojpjb21wdXRlSGFzaChjb25z
dCBTYWx0JiBzYWx0KSBjb25zdApAQCAtMTAyLDcgKzEwMiw3IEBAIEtleTo6SGFzaFR5cGUgS2V5
Ojpjb21wdXRlSGFzaChjb25zdCBTYWwKICAgICAvLyBXZSBkb24ndCByZWFsbHkgbmVlZCBhIGNy
eXB0b2dyYXBoaWMgaGFzaC4gVGhlIGtleSBpcyBhbHdheXMgdmVyaWZpZWQgYWdhaW5zdCB0aGUg
ZW50cnkgaGVhZGVyLgogICAgIC8vIFNIQTEganVzdCBoYXBwZW5zIHRvIGJlIHN1aXRhYmx5IHNp
emVkLCBmYXN0IGFuZCBhdmFpbGFibGUuCiAgICAgU0hBMSBzaGExOwotICAgIHNoYTEuYWRkQnl0
ZXMoc2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKTsKKyAgICBzaGExLmFkZEJ5dGVzKHNhbHQpOwog
CiAgICAgaGFzaFN0cmluZyhzaGExLCBtX3BhcnRpdGlvbik7CiAgICAgaGFzaFN0cmluZyhzaGEx
LCBtX3R5cGUpOwpAQCAtMTE3LDcgKzExNyw3IEBAIEtleTo6SGFzaFR5cGUgS2V5Ojpjb21wdXRl
SGFzaChjb25zdCBTYWwKIEtleTo6SGFzaFR5cGUgS2V5Ojpjb21wdXRlUGFydGl0aW9uSGFzaChj
b25zdCBTYWx0JiBzYWx0KSBjb25zdAogewogICAgIFNIQTEgc2hhMTsKLSAgICBzaGExLmFkZEJ5
dGVzKHNhbHQuZGF0YSgpLCBzYWx0LnNpemUoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhzYWx0KTsK
IAogICAgIGhhc2hTdHJpbmcoc2hhMSwgbV9wYXJ0aXRpb24pOwogCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3Rv
cmFnZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1NCw4
ICs0NTQsOCBAQCBzdHJ1Y3QgUmVjb3JkTWV0YURhdGEgewogc3RhdGljIFdBUk5fVU5VU0VEX1JF
VFVSTiBib29sIGRlY29kZVJlY29yZE1ldGFEYXRhKFJlY29yZE1ldGFEYXRhJiBtZXRhRGF0YSwg
Y29uc3QgRGF0YSYgZmlsZURhdGEpCiB7CiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAg
ZmlsZURhdGEuYXBwbHkoWyZtZXRhRGF0YSwgJnN1Y2Nlc3NdKGNvbnN0IHVpbnQ4X3QqIGRhdGEs
IHNpemVfdCBzaXplKSB7Ci0gICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2Rl
cihkYXRhLCBzaXplKTsKKyAgICBmaWxlRGF0YS5hcHBseShbJm1ldGFEYXRhLCAmc3VjY2Vzc10o
U3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpIHsKKyAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6
RGVjb2RlciBkZWNvZGVyKGRhdGEpOwogICAgICAgICAKICAgICAgICAgc3RkOjpvcHRpb25hbDx1
bnNpZ25lZD4gY2FjaGVTdG9yYWdlVmVyc2lvbjsKICAgICAgICAgZGVjb2RlciA+PiBjYWNoZVN0
b3JhZ2VWZXJzaW9uOwpAQCAtNTg2LDcgKzU4Niw3IEBAIHN0YXRpYyBEYXRhIGVuY29kZVJlY29y
ZE1ldGFEYXRhKGNvbnN0IFIKIAogICAgIGVuY29kZXIuZW5jb2RlQ2hlY2tzdW0oKTsKIAotICAg
IHJldHVybiBEYXRhKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAg
ICByZXR1cm4geyBlbmNvZGVyLmJ1ZmZlcigpIH07CiB9CiAKIHN0ZDo6b3B0aW9uYWw8QmxvYlN0
b3JhZ2U6OkJsb2I+IFN0b3JhZ2U6OnN0b3JlQm9keUFzQmxvYihXcml0ZU9wZXJhdGlvbiYgd3Jp
dGVPcGVyYXRpb24pCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNw
cAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
MywxNCArMTIzLDE0IEBAIFN0b3JhZ2U6OlJlY29yZCBTdWJyZXNvdXJjZXNFbnRyeTo6ZW5jb2QK
IAogICAgIGVuY29kZXIuZW5jb2RlQ2hlY2tzdW0oKTsKIAotICAgIHJldHVybiB7IG1fa2V5LCBt
X3RpbWVTdGFtcCwgeyBlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSB9LCB7
IH0sIHsgfX07CisgICAgcmV0dXJuIHsgbV9rZXksIG1fdGltZVN0YW1wLCB7IGVuY29kZXIuYnVm
ZmVyKCkgfSwgeyB9LCB7IH19OwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8U3VicmVzb3VyY2VzRW50
cnk+IFN1YnJlc291cmNlc0VudHJ5OjpkZWNvZGVTdG9yYWdlUmVjb3JkKGNvbnN0IFN0b3JhZ2U6
OlJlY29yZCYgc3RvcmFnZUVudHJ5KQogewogICAgIGF1dG8gZW50cnkgPSBtYWtlVW5pcXVlPFN1
YnJlc291cmNlc0VudHJ5PihzdG9yYWdlRW50cnkpOwogCi0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6
RGVjb2RlciBkZWNvZGVyKHN0b3JhZ2VFbnRyeS5oZWFkZXIuZGF0YSgpLCBzdG9yYWdlRW50cnku
aGVhZGVyLnNpemUoKSk7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyIHsg
U3BhbiB7IHN0b3JhZ2VFbnRyeS5oZWFkZXIuZGF0YSgpLCBzdG9yYWdlRW50cnkuaGVhZGVyLnNp
emUoKSB9IH07CiAgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8U3VicmVzb3VyY2VJbmZvPj4gc3Vi
cmVzb3VyY2VzOwogICAgIGRlY29kZXIgPj4gc3VicmVzb3VyY2VzOwogICAgIGlmICghc3VicmVz
b3VyY2VzKQpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2Rlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXIu
aAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1l
bnRDb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSwxMyArNzksMTMgQEAgc3RydWN0IEFyZ3Vt
ZW50Q29kZXI8VCwgdHlwZW5hbWUgc3RkOjplbgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29k
ZXI+CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIFQgdmFsdWUpCiAg
ICAgewotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPigmdmFsdWUpLCBzaXplb2YoVCksIGFsaWdub2YoVCkpOworICAg
ICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJnZhbHVlLCAxIH0sIGFs
aWdub2YoVCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFQ+IGRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKICAgICAgICAgVCByZXN1bHQ7Ci0gICAgICAgIGlmIChk
ZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigm
cmVzdWx0KSwgc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKSkKKyAgICAgICAgaWYgKGRlY29kZXIuZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmcmVzdWx0LCAxIH0pKQogICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuY3BwCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBBcmd1bWVudENvZGVyPENT
dHJpbmc+OjplbmNvZGUoRW5jbwogCiAgICAgdWludDMyX3QgbGVuZ3RoID0gc3RyaW5nLmxlbmd0
aCgpOwogICAgIGVuY29kZXIgPDwgbGVuZ3RoOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKHN0cmluZy5kYXRhQXNVSW50OFB0cigpLCBsZW5ndGgsIDEpOworICAgIGVuY29kZXIu
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0cmluZy5ieXRlcygpLCAxKTsKIH0KIAogV0FSTl9VTlVT
RURfUkVUVVJOIGJvb2wgQXJndW1lbnRDb2RlcjxDU3RyaW5nPjo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIsIENTdHJpbmcmIHJlc3VsdCkKQEAgLTEwMyw3ICsxMDMsNyBAQCBXQVJOX1VOVVNFRF9S
RVRVUk4gYm9vbCBBcmd1bWVudENvZGVyPENTCiAKICAgICBjaGFyKiBidWZmZXI7CiAgICAgQ1N0
cmluZyBzdHJpbmcgPSBDU3RyaW5nOjpuZXdVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsK
LSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KGJ1ZmZlciksIGxlbmd0aCwgMSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZp
eGVkTGVuZ3RoRGF0YShTcGFuIHsgYnVmZmVyLCBsZW5ndGggfSwgMSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIHJlc3VsdCA9IHN0cmluZzsKQEAgLTEyMywxMSArMTIzLDcgQEAgdm9p
ZCBBcmd1bWVudENvZGVyPFN0cmluZz46OmVuY29kZShFbmNvZAogICAgIGJvb2wgaXM4Qml0ID0g
c3RyaW5nLmlzOEJpdCgpOwogCiAgICAgZW5jb2RlciA8PCBsZW5ndGggPDwgaXM4Qml0OwotCi0g
ICAgaWYgKGlzOEJpdCkKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3Ry
aW5nLmNoYXJhY3RlcnM4KCksIGxlbmd0aCAqIHNpemVvZihMQ2hhciksIGFsaWdub2YoTENoYXIp
KTsKLSAgICBlbHNlCi0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHN0cmluZy5jaGFyYWN0ZXJzMTYoKSksIGxlbmd0
aCAqIHNpemVvZihVQ2hhciksIGFsaWdub2YoVUNoYXIpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZp
eGVkTGVuZ3RoRGF0YShzdHJpbmcuYnl0ZXMoKSk7CiB9CiB0ZW1wbGF0ZQogdm9pZCBBcmd1bWVu
dENvZGVyPFN0cmluZz46OmVuY29kZTxFbmNvZGVyPihFbmNvZGVyJiwgY29uc3QgU3RyaW5nJik7
CkBAIC0xNDMsNyArMTM5LDcgQEAgc3RhdGljIGlubGluZSBzdGQ6Om9wdGlvbmFsPFN0cmluZz4g
ZGVjbwogICAgIAogICAgIENoYXJhY3RlclR5cGUqIGJ1ZmZlcjsKICAgICBTdHJpbmcgc3RyaW5n
ID0gU3RyaW5nOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+
KGJ1ZmZlciksIGxlbmd0aCAqIHNpemVvZihDaGFyYWN0ZXJUeXBlKSwgYWxpZ25vZihDaGFyYWN0
ZXJUeXBlKSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsg
YnVmZmVyLCBsZW5ndGggfSkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgCiAg
ICAgcmV0dXJuIHN0cmluZzsKQEAgLTE4MSwxMiArMTc3LDEyIEBAIFdBUk5fVU5VU0VEX1JFVFVS
TiBib29sIEFyZ3VtZW50Q29kZXI8U3QKIAogdm9pZCBBcmd1bWVudENvZGVyPFNIQTE6OkRpZ2Vz
dD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTSEExOjpEaWdlc3QmIGRpZ2VzdCkK
IHsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3QuZGF0YSgpLCBzaXpl
b2YoZGlnZXN0KSwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0
LCAxKTsKIH0KIAogV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgQXJndW1lbnRDb2RlcjxTSEExOjpE
aWdlc3Q+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgU0hBMTo6RGlnZXN0JiBkaWdlc3QpCiB7
Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGRpZ2VzdC5kYXRhKCks
IHNpemVvZihkaWdlc3QpLCAxKTsKKyAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0
aERhdGEoZGlnZXN0LCAxKTsKIH0KIAogI2lmIEhBVkUoQVVESVRfVE9LRU4pCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ1LDEyICs0NSwxMiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
U2ltcGxlQXJndW1lCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KICAgICBzdGF0aWMg
dm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVCYgdCkKICAgICB7Ci0gICAgICAg
IGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KCZ0KSwgc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNv
ZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZ0LCAxIH0pOwogICAgIH0KIAogICAgIHN0YXRpYyBX
QVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVCYgdCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVy
cHJldF9jYXN0PHVpbnQ4X3QqPigmdCksIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAg
IHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJnQsIDEgfSk7CiAg
ICAgfQogfTsKIApAQCAtNjEsMTMgKzYxLDE0IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVf
dCBFeHRlbnQ+IHN0cnUKICAgICB7CiAgICAgICAgIGlmICghRXh0ZW50KQogICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihhcnJheVJlZmVyZW5jZS5kYXRhKCkpLCBhcnJheVJlZmVy
ZW5jZS5zaXplKCkgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpOworICAgICAgICBlbmNvZGVyLmVu
Y29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgYXJyYXlSZWZlcmVuY2UuZGF0YSgpLCBhcnJheVJl
ZmVyZW5jZS5zaXplKCkgfSk7CiAgICAgfQogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEFycmF5
UmVmZXJlbmNlVHlwZT4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewogICAgICAgICBp
ZiAoIUV4dGVudCkKICAgICAgICAgICAgIHJldHVybiBBcnJheVJlZmVyZW5jZVR5cGUoKTsKLSAg
ICAgICAgY29uc3QgdWludDhfdCogZGF0YSA9IGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhSZWZl
cmVuY2UoRXh0ZW50ICogc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKKworICAgICAgICBjb25zdCBh
dXRvKiBkYXRhID0gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aFJlZmVyZW5jZShFeHRlbnQgKiBz
aXplb2YoVCksIGFsaWdub2YoVCkpOwogICAgICAgICBpZiAoIWRhdGEpCiAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAgICByZXR1cm4gQXJyYXlSZWZlcmVuY2VUeXBlKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KGRhdGEpLCBFeHRlbnQpOwpAQCAtODIsNyArODMsNyBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQXJndW1lbnRDb2RlCiAgICAgICAgIGVuY29k
ZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGFycmF5UmVmZXJlbmNlLnNpemUoKSk7CiAgICAg
ICAgIGlmICghYXJyYXlSZWZlcmVuY2Uuc2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihhcnJheVJlZmVyZW5jZS5kYXRhKCkpLCBhcnJheVJlZmVyZW5jZS5zaXplKCkg
KiBzaXplb2YoVCksIGFsaWdub2YoVCkpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShTcGFuIHsgYXJyYXlSZWZlcmVuY2UuZGF0YSgpLCBhcnJheVJlZmVyZW5jZS5zaXpl
KCkgfSk7CiAgICAgfQogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEFycmF5UmVmZXJlbmNlVHlw
ZT4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewpAQCAtOTYsNyArOTcsNyBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQXJndW1lbnRDb2RlCiAgICAgICAgIGlmIChVTkxJS0VM
WShkYXRhU2l6ZS5oYXNPdmVyZmxvd2VkKCkpKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKIAotICAgICAgICBjb25zdCB1aW50OF90KiBkYXRhID0gZGVjb2Rlci5kZWNvZGVGaXhl
ZExlbmd0aFJlZmVyZW5jZShkYXRhU2l6ZSwgYWxpZ25vZihUKSk7CisgICAgICAgIGNvbnN0IGF1
dG8qIGRhdGEgPSBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoUmVmZXJlbmNlKGRhdGFTaXplLCBh
bGlnbm9mKFQpKTsKICAgICAgICAgaWYgKCFkYXRhKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKICAgICAgICAgcmV0dXJuIEFycmF5UmVmZXJlbmNlVHlwZShyZWludGVycHJldF9j
YXN0PGNvbnN0IFQqPihkYXRhKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihzaXplKSk7CkBAIC00MjMs
NyArNDI0LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAg
IHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiB2ZWN0b3IpCiAgICAg
ewogICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2ZWN0b3Iuc2l6ZSgp
KTsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4odmVjdG9yLmRhdGEoKSksIHZlY3Rvci5zaXplKCkgKiBzaXplb2Yo
VCksIGFsaWdub2YoVCkpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YSh2
ZWN0b3IsIGFsaWdub2YoVCkpOwogICAgIH0KICAgICAKICAgICBzdGF0aWMgV0FSTl9VTlVTRURf
UkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mIHZlY3RvcikKQEAgLTQ0Niw3ICs0
NDcsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpCiAgICAgICAg
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4g
dGVtcDsKICAgICAgICAgdGVtcC5ncm93KHNpemUpOwogCi0gICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4odGVtcC5kYXRh
KCkpLCBzaXplICogc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKSkKKyAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZUZpeGVkTGVuZ3RoRGF0YSh0ZW1wKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgICAgICB2ZWN0b3Iuc3dhcCh0ZW1wKTsKQEAgLTQ3Myw3ICs0NzQsNyBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpCiAgICAgICAgIFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4gdmVjdG9yOwogICAgICAg
ICB2ZWN0b3IuZ3JvdyhzaXplKTsKIAotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCBzaXpl
ICogc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZp
eGVkTGVuZ3RoRGF0YSh2ZWN0b3IpKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
IAogICAgICAgICByZXR1cm4gdmVjdG9yOwpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9J
UEMvQXJyYXlSZWZlcmVuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0lQQy9BcnJheVJlZmVyZW5jZS5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9BcnJheVJlZmVyZW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw4IEBACiAKIG5hbWVzcGFjZSBJUEMgewogCisvLyBGSVhNRTogUmVwbGFjZSB3aXRoIDx3dGYv
U3Bhbi5oPgorCiBpbmxpbmUgY29uc3RleHByIHNpemVfdCBhcnJheVJlZmVyZW5jZUR5bmFtaWNF
eHRlbnQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpOwogCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgc2l6ZV90IEV4dGVudCA9IGFycmF5UmVmZXJlbmNlRHluYW1pY0V4dGVudD4K
SW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuY3BwCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjA2LDEzICsyMDYsMTMgQEAgYm9vbCBEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5v
dWdoVG9Db250YQogICAgIHJldHVybiBhbGlnbmVkQnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFp
bihyb3VuZFVwVG9BbGlnbm1lbnQobV9idWZmZXJQb3MsIGFsaWdubWVudCksIG1fYnVmZmVyLCBt
X2J1ZmZlckVuZCwgc2l6ZSk7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhE
YXRhKHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50KQorYm9vbCBE
ZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbjxzdGQ6OmJ5dGU+IGRhdGEsIHNpemVf
dCBhbGlnbm1lbnQpCiB7Ci0gICAgaWYgKCFhbGlnbkJ1ZmZlclBvc2l0aW9uKGFsaWdubWVudCwg
c2l6ZSkpCisgICAgaWYgKCFhbGlnbkJ1ZmZlclBvc2l0aW9uKGFsaWdubWVudCwgZGF0YS5zaXpl
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtZW1jcHkoZGF0YSwgbV9idWZmZXJQ
b3MsIHNpemUpOwotICAgIG1fYnVmZmVyUG9zICs9IHNpemU7CisgICAgbWVtY3B5KGRhdGEuZGF0
YSgpLCBtX2J1ZmZlclBvcywgZGF0YS5zaXplKCkpOworICAgIG1fYnVmZmVyUG9zICs9IGRhdGEu
c2l6ZSgpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9EZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9J
UEMvRGVjb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0lQQy9EZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDEzIEBAIHB1YmxpYzoK
ICAgICBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9i
dWZmZXJQb3MgIT0gbnVsbHB0cjsgfQogICAgIHZvaWQgbWFya0ludmFsaWQoKSB7IG1fYnVmZmVy
UG9zID0gbnVsbHB0cjsgfQogCi0gICAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlRml4
ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqIGRhdGEsIHNpemVfdCwgc2l6ZV90IGFsaWdubWVudCk7Cisg
ICAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48c3Rk
OjpieXRlPiwgc2l6ZV90IGFsaWdubWVudCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
ICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShUJiYgZGF0
YSwgc2l6ZV90IGFsaWdubWVudCA9IGFsaWdub2YodHlwZW5hbWUgZGVjbHR5cGUoU3BhbiB7IHN0
ZDo6Zm9yd2FyZDxUPihkYXRhKSB9KTo6dmFsdWVfdHlwZSkpCisgICAgeworICAgICAgICByZXR1
cm4gZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGFzV3JpdGFibGVCeXRlcyhTcGFuIHsgc3RkOjpmb3J3
YXJkPFQ+KGRhdGEpIH0pLCBhbGlnbm1lbnQpOworICAgIH0KIAogICAgIC8vIFRoZSBkYXRhIGlu
IHRoZSByZXR1cm5lZCBwb2ludGVyIGhlcmUgd2lsbCBvbmx5IGJlIHZhbGlkIGZvciB0aGUgbGlm
ZXRpbWUgb2YgdGhlIERlY29kZXIgb2JqZWN0LgogICAgIC8vIFJldHVybnMgbnVsbHB0ciBvbiBm
YWlsdXJlLgpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29kZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMDIsMTIgKzIwMiwxMiBAQCB1aW50OF90KiBFbmNvZGVyOjpncm93
KHNpemVfdCBhbGlnbm1lbnQsCiAgICAgcmV0dXJuIG1fYnVmZmVyICsgYWxpZ25lZFNpemU7CiB9
CiAKLXZvaWQgRW5jb2Rlcjo6ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqIGRh
dGEsIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50KQordm9pZCBFbmNvZGVyOjplbmNvZGVG
aXhlZExlbmd0aERhdGEoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEsIHNpemVfdCBhbGlnbm1l
bnQpCiB7Ci0gICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGRhdGEpICUg
YWxpZ25tZW50KSk7CisgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGRh
dGEuZGF0YSgpKSAlIGFsaWdubWVudCkpOwogCi0gICAgdWludDhfdCogYnVmZmVyID0gZ3Jvdyhh
bGlnbm1lbnQsIHNpemUpOwotICAgIG1lbWNweShidWZmZXIsIGRhdGEsIHNpemUpOworICAgIGF1
dG8qIGJ1ZmZlciA9IGdyb3coYWxpZ25tZW50LCBkYXRhLnNpemUoKSk7CisgICAgbWVtY3B5KGJ1
ZmZlciwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKIH0KIAogdm9pZCBFbmNvZGVyOjphZGRB
dHRhY2htZW50KEF0dGFjaG1lbnQmJiBhdHRhY2htZW50KQpJbmRleDogU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9JUEMvRW5jb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vSVBDL0VuY29kZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvRW5jb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5j
bHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgog
I2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIElQQyB7CkBAIC02MCw3ICs2MSwxMyBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIHdyYXBGb3JUZXN0aW5nKFVuaXF1ZVJlZjxFbmNvZGVyPiYmKTsK
IAotICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNp
emVfdCwgc2l6ZV90IGFsaWdubWVudCk7CisgICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEo
U3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEsIHNpemVfdCBhbGlnbm1lbnQpOworCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShUJiYgZGF0
YSwgc2l6ZV90IGFsaWdubWVudCA9IGFsaWdub2YodHlwZW5hbWUgZGVjbHR5cGUoU3BhbiB7IHN0
ZDo6Zm9yd2FyZDxUPihkYXRhKSB9KTo6dmFsdWVfdHlwZSkpCisgICAgeworICAgICAgICBlbmNv
ZGVGaXhlZExlbmd0aERhdGEoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0p
LCBhbGlnbm1lbnQpOworICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgRW5j
b2RlciYgb3BlcmF0b3I8PChUJiYgdCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L1NoYXJlZEJ1ZmZlckNvcHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vSVBDL1NoYXJlZEJ1ZmZlckNvcHkuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9TaGFyZWRCdWZmZXJDb3B5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDMsNyArNDMsNyBAQCB2b2lkIFNoYXJlZEJ1ZmZlckNvcHk6OmVuY29kZShFbmNvZGVyJiBl
CiAgICAgaWYgKCFidWZmZXJTaXplKQogICAgICAgICByZXR1cm47CiAgICAgZm9yIChhdXRvJiBz
ZWdtZW50IDogKm1fYnVmZmVyKQotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0
YShzZWdtZW50LnNlZ21lbnQtPmRhdGEoKSwgc2VnbWVudC5zZWdtZW50LT5zaXplKCksIDEpOwor
ICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShzZWdtZW50LnNlZ21lbnQtPmJ5
dGVzKCksIDEpOwogfQogCiBzdGQ6Om9wdGlvbmFsPFNoYXJlZEJ1ZmZlckNvcHk+IFNoYXJlZEJ1
ZmZlckNvcHk6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQpJbmRleDogU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlvbkVuY29kZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uRW5jb2Rlci5oCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9u
RW5jb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJB
cmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIk1lc3NhZ2VOYW1lcy5oIgorI2luY2x1ZGUgPHd0
Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgSVBD
IHsKQEAgLTUzLDIyICs1NCwyOCBAQCBwdWJsaWM6CiAKICAgICB+U3RyZWFtQ29ubmVjdGlvbkVu
Y29kZXIoKSA9IGRlZmF1bHQ7CiAKLSAgICBib29sIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShjb25z
dCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVudCkKKyAgICBib29s
IGVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSwgc2l6ZV90
IGFsaWdubWVudCkKICAgICB7CiAgICAgICAgIHNpemVfdCBidWZmZXJQb2ludGVyID0gc3RhdGlj
X2Nhc3Q8c2l6ZV90PihyZWludGVycHJldF9jYXN0PGludHB0cl90PihtX2J1ZmZlciArIG1fZW5j
b2RlZFNpemUpKTsKICAgICAgICAgc2l6ZV90IG5ld0J1ZmZlclBvaW50ZXIgPSByb3VuZFVwVG9N
dWx0aXBsZU9mKGFsaWdubWVudCwgYnVmZmVyUG9pbnRlcik7CiAgICAgICAgIGlmIChuZXdCdWZm
ZXJQb2ludGVyIDwgYnVmZmVyUG9pbnRlcikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgaW50cHRyX3QgYWxpZ25lZFNpemUgPSBtX2VuY29kZWRTaXplICsgKG5ld0J1ZmZlclBv
aW50ZXIgLSBidWZmZXJQb2ludGVyKTsKLSAgICAgICAgaWYgKCFyZXNlcnZlKGFsaWduZWRTaXpl
LCBzaXplKSkKKyAgICAgICAgaWYgKCFyZXNlcnZlKGFsaWduZWRTaXplLCBkYXRhLnNpemUoKSkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHVpbnQ4X3QqIGJ1ZmZlciA9IG1f
YnVmZmVyICsgYWxpZ25lZFNpemU7Ci0gICAgICAgIG1lbWNweShidWZmZXIsIGRhdGEsIHNpemUp
OwotICAgICAgICBtX2VuY29kZWRTaXplID0gYWxpZ25lZFNpemUgKyBzaXplOworICAgICAgICBh
dXRvKiBidWZmZXIgPSBtX2J1ZmZlciArIGFsaWduZWRTaXplOworICAgICAgICBtZW1jcHkoYnVm
ZmVyLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOworICAgICAgICBtX2VuY29kZWRTaXplID0g
YWxpZ25lZFNpemUgKyBkYXRhLnNpemUoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0
YShUJiYgZGF0YSwgc2l6ZV90IGFsaWdubWVudCA9IGFsaWdub2YoVCkpCisgICAgeworICAgICAg
ICBlbmNvZGVGaXhlZExlbmd0aERhdGEoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRh
dGEpIH0pLCBhbGlnbm1lbnQpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAg
ICAgU3RyZWFtQ29ubmVjdGlvbkVuY29kZXImIG9wZXJhdG9yPDwoVCYmIHQpCiAgICAgewogICAg
ICAgICBBcmd1bWVudENvZGVyPHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJl
bmNlX3Q8VD4+LCB2b2lkPjo6ZW5jb2RlKCp0aGlzLCBzdGQ6OmZvcndhcmQ8VD4odCkpOwpJbmRl
eDogU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNyArMTQ0LDcgQEAgc3RhdGljIHZvaWQg
ZW5jb2RlU2hhcmVkQnVmZmVyKEVuY29kZXImIAogICAgIC8vIG92ZXIgdGhlIElQQy4gQ29ubmVj
dGlvblVuaXguY3BwIGFscmVhZHkgdXNlcyBzaGFyZWQgbWVtb3J5IHRvIHNlbmQgYW55IElQQyBt
ZXNzYWdlIHRoYXQgaXMKICAgICAvLyB0b28gbGFyZ2UuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4NTcxLgogICAgIGZvciAoY29uc3QgYXV0byYgZWxlbWVu
dCA6ICpidWZmZXIpCi0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGVsZW1l
bnQuc2VnbWVudC0+ZGF0YSgpLCBlbGVtZW50LnNlZ21lbnQtPnNpemUoKSwgMSk7CisgICAgICAg
IGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGVsZW1lbnQuc2VnbWVudC0+Ynl0ZXMoKSwg
MSk7CiAjZWxzZQogICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKICAgICBhdXRvIHNo
YXJlZE1lbW9yeUJ1ZmZlciA9IFNoYXJlZE1lbW9yeTo6Y29weUJ1ZmZlcigqYnVmZmVyKTsKQEAg
LTE4MCw3ICsxODAsNyBAQCBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlU2hh
CiAKICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKICAgICBkYXRhLmdyb3coYnVmZmVyU2l6ZSk7
Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShkYXRhLmRhdGEoKSwgZGF0
YS5zaXplKCksIDEpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoZGF0
YSwgMSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJ1ZmZlciA9IFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKFdURk1vdmUoZGF0YSkpOwpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvbWFj
L0F1eGlsaWFyeVByb2Nlc3NNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFy
ZWQvbWFjL0F1eGlsaWFyeVByb2Nlc3NNYWMubW0JKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJj
ZS9XZWJLaXQvU2hhcmVkL21hYy9BdXhpbGlhcnlQcm9jZXNzTWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0zMjEsNyArMzIxLDcgQEAgc3RhdGljIFN0cmluZyBzYW5kYm94RmlsZVBhdGgoY29uc3Qg
U3RyaQogICAgIGNyeXB0by0+YWRkQnl0ZXMoaGVhZGVyLmRhdGEoKSwgaGVhZGVyLmxlbmd0aCgp
KTsKICAgICBhdXRvIGhhc2ggPSBjcnlwdG8tPmNvbXB1dGVIYXNoKCk7CiAKLSAgICByZXR1cm4g
bWFrZVN0cmluZyhkaXJlY3RvcnlQYXRoLCAiL0NvbXBpbGVkU2FuZGJveCsiLCBiYXNlNjRVUkxF
bmNvZGVkKGhhc2guZGF0YSgpLCBoYXNoLnNpemUoKSkpOworICAgIHJldHVybiBtYWtlU3RyaW5n
KGRpcmVjdG9yeVBhdGgsICIvQ29tcGlsZWRTYW5kYm94KyIsIGJhc2U2NFVSTEVuY29kZWQoaGFz
aCkpOwogfQogCiBzdGF0aWMgYm9vbCBlbnN1cmVTYW5kYm94Q2FjaGVEaXJlY3RvcnkoY29uc3Qg
U2FuZGJveEluZm8mIGluZm8pCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJl
ZC93aW4vV2ViQ29yZUFyZ3VtZW50Q29kZXJzV2luLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYktpdC9TaGFyZWQvd2luL1dlYkNvcmVBcmd1bWVudENvZGVyc1dpbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUxLDEyICs1MSwxMiBAQCBzdGQ6Om9wdGlvbmFsPEZvbnRBdHRyaWJ1
dGVzPiBBcmd1bWVudENvCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPExPR0ZPTlQ+
IHsKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgTE9HRk9O
VCYgbG9nRm9udCkKICAgICB7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZsb2dGb250KSwgc2l6ZW9mIGxvZ0Zv
bnQsIDEpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJmxv
Z0ZvbnQsIDEgfSwgMSk7CiAgICAgfQogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPExPR0ZPTlQ+
IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKICAgICAgICAgTE9HRk9OVCBsb2dGb250
OwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KCZsb2dGb250KSwgc2l6ZW9mKGxvZ0ZvbnQpLCAxKSkKKyAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJmxvZ0ZvbnQsIDEgfSwg
MSkpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAgICByZXR1cm4gbG9n
Rm9udDsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVu
dFJ1bGVMaXN0U3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzMSwxOCArMTMxLDIwIEBAIHN0YXRpYyBXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6RGF0YSBlbmNvZGUKICAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmNvbmRpdGlvbmVkRmls
dGVyc0J5dGVjb2RlU2l6ZTsKICAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmNvbmRpdGlvbnNBcHBs
eU9ubHlUb0RvbWFpbjsKIAotICAgIEFTU0VSVChlbmNvZGVyLmJ1ZmZlclNpemUoKSA9PSBDb250
ZW50UnVsZUxpc3RGaWxlSGVhZGVyU2l6ZSk7Ci0gICAgcmV0dXJuIFdlYktpdDo6TmV0d29ya0Nh
Y2hlOjpEYXRhKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICBB
U1NFUlQoZW5jb2Rlci5idWZmZXIoKS5zaXplKCkgPT0gQ29udGVudFJ1bGVMaXN0RmlsZUhlYWRl
clNpemUpOworICAgIHJldHVybiBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YSB7IGVuY29kZXIu
YnVmZmVyKCkgfTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBnZXREYXRhKGNvbnN0
IFQmLCBjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYpOwotdGVt
cGxhdGU8PiB2b2lkIGdldERhdGEoY29uc3QgV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGEmIGRh
dGEsIGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCosIHNpemVfdCk+JiBmdW5jdGlv
bikKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgZ2V0RGF0YShjb25zdCBUJiwgY29uc3QgRnVu
Y3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYpOworCit0ZW1wbGF0ZTw+IHZvaWQg
Z2V0RGF0YShjb25zdCBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YSYgZGF0YSwgY29uc3QgRnVu
Y3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYgZnVuY3Rpb24pCiB7CiAgICAgZGF0
YS5hcHBseShmdW5jdGlvbik7CiB9Ci10ZW1wbGF0ZTw+IHZvaWQgZ2V0RGF0YShjb25zdCBXZWJD
b3JlOjpTaGFyZWRCdWZmZXImIGRhdGEsIGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhf
dCosIHNpemVfdCk+JiBmdW5jdGlvbikKKwordGVtcGxhdGU8PiB2b2lkIGdldERhdGEoY29uc3Qg
V2ViQ29yZTo6U2hhcmVkQnVmZmVyJiBkYXRhLCBjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29u
c3Qgc3RkOjpieXRlPik+JiBmdW5jdGlvbikKIHsKLSAgICBmdW5jdGlvbihkYXRhLmRhdGEoKSwg
ZGF0YS5zaXplKCkpOworICAgIGZ1bmN0aW9uKGRhdGEuYnl0ZXMoKSk7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CkBAIC0xNTAsMTMgKzE1MiwxMyBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxD
b250ZW50UnVsZUxpc3RNZXRhCiB7CiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CiAgICAgQ29u
dGVudFJ1bGVMaXN0TWV0YURhdGEgbWV0YURhdGE7Ci0gICAgZ2V0RGF0YShmaWxlRGF0YSwgWyZt
ZXRhRGF0YSwgJnN1Y2Nlc3MsICZmaWxlRGF0YV0oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90
IHNpemUpIHsKKyAgICBnZXREYXRhKGZpbGVEYXRhLCBbJm1ldGFEYXRhLCAmc3VjY2VzcywgJmZp
bGVEYXRhXShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkgewogICAgICAgICAvLyBUaGUgZmls
ZSBkYXRhIHNob3VsZCBiZSBtYXBwZWQgaW50byBvbmUgY29udGludW91cyBtZW1vcnkgc2VnbWVu
dCBzbyB0aGUgc2l6ZQogICAgICAgICAvLyBwYXNzZWQgdG8gdGhlIGFwcGxpZXIgc2hvdWxkIGFs
d2F5cyBlcXVhbCB0aGUgZGF0YSBzaXplLgotICAgICAgICBpZiAoc2l6ZSAhPSBmaWxlRGF0YS5z
aXplKCkpCisgICAgICAgIGlmIChkYXRhLnNpemUoKSAhPSBmaWxlRGF0YS5zaXplKCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2Rl
ciBkZWNvZGVyKGRhdGEsIHNpemUpOworICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVy
IGRlY29kZXIgeyBkYXRhIH07CiAgICAgICAgIAogICAgICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQz
Ml90PiB2ZXJzaW9uOwogICAgICAgICBkZWNvZGVyID4+IHZlcnNpb247CkBAIC0yMjgsOCArMjMw
LDggQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TWFwcGVkRGF0YT4gb3BlbkFuZAogc3RhdGljIGJv
b2wgd3JpdGVEYXRhVG9GaWxlKGNvbnN0IFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhJiBmaWxl
RGF0YSwgUGxhdGZvcm1GaWxlSGFuZGxlIGZkKQogewogICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7
Ci0gICAgZmlsZURhdGEuYXBwbHkoW2ZkLCAmc3VjY2Vzc10oY29uc3QgdWludDhfdCogZGF0YSwg
c2l6ZV90IHNpemUpIHsKLSAgICAgICAgaWYgKHdyaXRlVG9GaWxlKGZkLCBkYXRhLCBzaXplKSA9
PSAtMSkgeworICAgIGZpbGVEYXRhLmFwcGx5KFtmZCwgJnN1Y2Nlc3NdKFNwYW48Y29uc3Qgc3Rk
OjpieXRlPiBkYXRhKSB7CisgICAgICAgIGlmICh3cml0ZVRvRmlsZShmZCwgZGF0YS5kYXRhKCks
IGRhdGEuc2l6ZSgpKSA9PSAtMSkgewogICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRp
b25QYW5lbC5tbQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0JKHdvcmtpbmcgY29weSkKQEAg
LTU1LDYgKzU1LDcgQEAKICNpbXBvcnQgPHBhbC9jcnlwdG8vQ3J5cHRvRGlnZXN0Lmg+CiAjaW1w
b3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQg
PHd0Zi9jb2NvYS9TcGFuQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5o
PgogI2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+CiAKQEAgLTcwLDcgKzcxLDcgQEAgc3RhdGlj
IFJldGFpblB0cjxOU0RhdGE+IHByb2R1Y2VDbGllbnREYQogICAgICAgICBbZGljdGlvbmFyeSBz
ZXRPYmplY3Q6QCJ3ZWJhdXRobi5nZXQiIGZvcktleTpAInR5cGUiXTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQotICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpiYXNlNjRVUkxFbmNvZGVUb1N0cmlu
ZyhjaGFsbGVuZ2UuYnl0ZXMsIGNoYWxsZW5nZS5sZW5ndGgpIGZvcktleTpAImNoYWxsZW5nZSJd
OworICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhhc0J5
dGVzKGNoYWxsZW5nZSkpIGZvcktleTpAImNoYWxsZW5nZSJdOwogICAgIFtkaWN0aW9uYXJ5IHNl
dE9iamVjdDpvcmlnaW4gZm9yS2V5OkAib3JpZ2luIl07CiAKICAgICByZXR1cm4gW05TSlNPTlNl
cmlhbGl6YXRpb24gZGF0YVdpdGhKU09OT2JqZWN0OmRpY3Rpb25hcnkuZ2V0KCkgb3B0aW9uczpO
U0pTT05Xcml0aW5nU29ydGVkS2V5cyBlcnJvcjpuaWxdOwpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0Nv
Y29hL0xvY2FsQXV0aGVudGljYXRvci5tbQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9y
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIHN0YXRpYyBpbmxpbmUgSGFzaFNl
dDxTdHJpbmc+IHByb2R1Y2VIYXMKICAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0OwogICAgIGZv
ciAoYXV0byYgY3JlZGVudGlhbERlc2NyaXB0b3IgOiBjcmVkZW50aWFsRGVzY3JpcHRvcnMpIHsK
ICAgICAgICAgaWYgKGVtcHR5VHJhbnNwb3J0c09yQ29udGFpbihjcmVkZW50aWFsRGVzY3JpcHRv
ci50cmFuc3BvcnRzLCBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpJbnRlcm5hbCkgJiYgY3JlZGVu
dGlhbERlc2NyaXB0b3IudHlwZSA9PSBQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5
ICYmIGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9yLnNpemUoKSA9PSBjcmVkZW50aWFsSWRM
ZW5ndGgpCi0gICAgICAgICAgICByZXN1bHQuYWRkKGJhc2U2NEVuY29kZVRvU3RyaW5nKGNyZWRl
bnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9yLmRhdGEoKSwgY3JlZGVudGlhbERlc2NyaXB0b3IuaWRW
ZWN0b3Iuc2l6ZSgpKSk7CisgICAgICAgICAgICByZXN1bHQuYWRkKGJhc2U2NEVuY29kZVRvU3Ry
aW5nKGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9yKSk7CiAgICAgfQogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CkBAIC0yMzMsNyArMjMzLDcgQEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6Om1h
a2VDcmVkZW50aWFsKAogICAgICAgICBpZiAobm90Rm91bmQgIT0gbV9leGlzdGluZ0NyZWRlbnRp
YWxzLmZpbmRNYXRjaGluZyhbJmV4Y2x1ZGVDcmVkZW50aWFsSWRzXSAoYXV0byYgY3JlZGVudGlh
bCkgewogICAgICAgICAgICAgYXV0byogcmF3SWQgPSBjcmVkZW50aWFsLT5yYXdJZCgpOwogICAg
ICAgICAgICAgQVNTRVJUKHJhd0lkKTsKLSAgICAgICAgICAgIHJldHVybiBleGNsdWRlQ3JlZGVu
dGlhbElkcy5jb250YWlucyhiYXNlNjRFbmNvZGVUb1N0cmluZyhyYXdJZC0+ZGF0YSgpLCByYXdJ
ZC0+Ynl0ZUxlbmd0aCgpKSk7CisgICAgICAgICAgICByZXR1cm4gZXhjbHVkZUNyZWRlbnRpYWxJ
ZHMuY29udGFpbnMoYmFzZTY0RW5jb2RlVG9TdHJpbmcocmF3SWQtPmJ5dGVzKCkpKTsKICAgICAg
ICAgfSkpIHsKICAgICAgICAgICAgIHJlY2VpdmVFeGNlcHRpb24oeyBOb3RBbGxvd2VkRXJyb3Is
ICJBdCBsZWFzdCBvbmUgY3JlZGVudGlhbCBtYXRjaGVzIGFuIGVudHJ5IG9mIHRoZSBleGNsdWRl
Q3JlZGVudGlhbHMgbGlzdCBpbiB0aGUgcGxhdGZvcm0gYXR0YWNoZWQgYXV0aGVudGljYXRvci4i
X3MgfSwgV2ViQXV0aGVudGljYXRpb25TdGF0dXM6OkxBRXhjbHVkZUNyZWRlbnRpYWxzTWF0Y2hl
ZCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC01MTAsNyArNTEwLDcgQEAgdm9pZCBMb2NhbEF1
dGhlbnRpY2F0b3I6OmdldEFzc2VydGlvbigpCiAgICAgICAgIH0KIAogICAgICAgICBhdXRvKiBy
YXdJZCA9IGNyZWRlbnRpYWwtPnJhd0lkKCk7Ci0gICAgICAgIGlmIChhbGxvd0NyZWRlbnRpYWxJ
ZHMuY29udGFpbnMoYmFzZTY0RW5jb2RlVG9TdHJpbmcocmF3SWQtPmRhdGEoKSwgcmF3SWQtPmJ5
dGVMZW5ndGgoKSkpKQorICAgICAgICBpZiAoYWxsb3dDcmVkZW50aWFsSWRzLmNvbnRhaW5zKGJh
c2U2NEVuY29kZVRvU3RyaW5nKHJhd0lkLT5ieXRlcygpKSkpCiAgICAgICAgICAgICBhc3NlcnRp
b25SZXNwb25zZXMudW5jaGVja2VkQXBwZW5kKGNyZWRlbnRpYWwuY29weVJlZigpKTsKICAgICB9
CiAgICAgaWYgKGFzc2VydGlvblJlc3BvbnNlcy5pc0VtcHR5KCkpIHsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0xvY2FsQ29ubmVjdGlv
bi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNh
dGlvbi9Nb2NrL01vY2tMb2NhbENvbm5lY3Rpb24ubW0JKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0xvY2FsQ29u
bmVjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgTW9ja0xv
Y2FsQ29ubmVjdGlvbjo6ZmlsdGVyUmVzcG9uc2UKICAgICBmb3IgKDsgaXRyICE9IHJlc3BvbnNl
cy5lbmQoKTsgKytpdHIpIHsKICAgICAgICAgYXV0byogcmF3SWQgPSBpdHItPmdldCgpLnJhd0lk
KCk7CiAgICAgICAgIEFTU0VSVChyYXdJZCk7Ci0gICAgICAgIGF1dG8gcmF3SWRCYXNlNjQgPSBi
YXNlNjRFbmNvZGVUb1N0cmluZyhyYXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgpKTsK
KyAgICAgICAgYXV0byByYXdJZEJhc2U2NCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKHJhd0lkLT5i
eXRlcygpKTsKICAgICAgICAgaWYgKHJhd0lkQmFzZTY0ID09IHByZWZlcnJlZENyZWRlbnRpYWxJ
ZEJhc2U2NCkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL21hYy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvTGVnYWN5
U2Vzc2lvblN0YXRlQ29kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDcgKzEyOSw3IEBA
IHB1YmxpYzoKICAgICAgICAgKnRoaXMgPDwgbGVuZ3RoOwogCiAgICAgICAgICp0aGlzIDw8IHN0
YXRpY19jYXN0PHVpbnQ2NF90PihsZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKLSAgICAgICAgZW5j
b2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KFN0cmlu
Z1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpLmdldCgpKSwgbGVuZ3RoICogc2l6
ZW9mKFVDaGFyKSwgYWxpZ25vZihVQ2hhcikpOworICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERh
dGEoU3BhbiB7IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpLmdldCgp
LCBsZW5ndGggfSk7CiAKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KQEAgLTEzNyw3ICsx
MzcsNyBAQCBwdWJsaWM6CiAgICAgSGlzdG9yeUVudHJ5RGF0YUVuY29kZXImIG9wZXJhdG9yPDwo
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2YWx1ZSkKICAgICB7CiAgICAgICAgICp0aGlzIDw8IHN0
YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1ZS5zaXplKCkpOwotICAgICAgICBlbmNvZGVGaXhlZExl
bmd0aERhdGEodmFsdWUuZGF0YSgpLCB2YWx1ZS5zaXplKCksIDEpOworICAgICAgICBlbmNvZGVG
aXhlZExlbmd0aERhdGEodmFsdWUsIDEpOwogCiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9
CkBAIC0xNDUsNyArMTQ1LDcgQEAgcHVibGljOgogICAgIEhpc3RvcnlFbnRyeURhdGFFbmNvZGVy
JiBvcGVyYXRvcjw8KGNvbnN0IFZlY3RvcjxjaGFyPiYgdmFsdWUpCiAgICAgewogICAgICAgICAq
dGhpcyA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUuc2l6ZSgpKTsKLSAgICAgICAgZW5j
b2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZhbHVl
LmRhdGEoKSksIHZhbHVlLnNpemUoKSwgMSk7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0
YSh2YWx1ZSwgMSk7CiAKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KQEAgLTIwNiwxNyAr
MjA2LDIzIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
YXJpdGhtZXRpYzxUeXBlPjo6dmFsdWUsICIiKTsKIAotICAgICAgICBlbmNvZGVGaXhlZExlbmd0
aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnZhbHVlKSwgc2l6ZW9mKHZhbHVlKSwg
c2l6ZW9mKHZhbHVlKSk7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJnZh
bHVlLCAxIH0sIHNpemVvZih2YWx1ZSkpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQog
Ci0gICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6
ZV90IHNpemUsIHVuc2lnbmVkIGFsaWdubWVudCkKKyAgICB2b2lkIGVuY29kZUZpeGVkTGVuZ3Ro
RGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSwgdW5zaWduZWQgYWxpZ25tZW50KQogICAg
IHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGF0YSB8fCAhc2l6ZSk7Ci0gICAgICAgIEFTU0VS
VCghKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihkYXRhKSAlIGFsaWdubWVudCkpOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChkYXRhLmRhdGEoKSB8fCAhZGF0YS5zaXplKCkpOworICAgICAg
ICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZGF0YS5kYXRhKCkpICUgYWxp
Z25tZW50KSk7CiAKLSAgICAgICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQsIHNp
emUpOwotICAgICAgICBtZW1jcHkoYnVmZmVyLCBkYXRhLCBzaXplKTsKKyAgICAgICAgYXV0byog
YnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQsIGRhdGEuc2l6ZSgpKTsKKyAgICAgICAgbWVtY3B5KGJ1
ZmZlciwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCBzaXpl
X3QgYWxpZ25tZW50ID0gYWxpZ25vZihUKSkKKyAgICB7CisgICAgICAgIGVuY29kZUZpeGVkTGVu
Z3RoRGF0YShhc0J5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSksIGFsaWdubWVu
dCk7CiAgICAgfQogCiAgICAgdWludDhfdCogZ3Jvdyh1bnNpZ25lZCBhbGlnbm1lbnQsIHNpemVf
dCBzaXplKQpAQCAtNjAxLDcgKzYwNyw3IEBAIHB1YmxpYzoKIAogICAgICAgICBVQ2hhciogYnVm
ZmVyOwogICAgICAgICBhdXRvIHN0cmluZyA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChs
ZW5ndGgsIGJ1ZmZlcik7Ci0gICAgICAgIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPihidWZmZXIpLCBsZW5ndGggKiBzaXplb2YoVUNoYXIpLCBhbGlnbm9m
KFVDaGFyKSk7CisgICAgICAgIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgYnVmZmVyLCBs
ZW5ndGggfSwgYWxpZ25vZihVQ2hhcikpOwogCiAgICAgICAgIHZhbHVlID0gc3RyaW5nOwogICAg
ICAgICByZXR1cm4gKnRoaXM7CkBAIC03MzcsMTcgKzc0MywyMyBAQCBwcml2YXRlOgogICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYXJpdGhtZXRpYzxUeXBlPjo6dmFsdWUsICIiKTsKICAg
ICAgICAgdmFsdWUgPSBUeXBlKCk7CiAKLSAgICAgICAgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2YWx1ZSksIHNpemVvZih2YWx1ZSksIHNpemVvZih2
YWx1ZSkpOworICAgICAgICBkZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZ2YWx1ZSwgMSB9
LCBzaXplb2YodmFsdWUpKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAotICAgIHZv
aWQgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCB1bnNp
Z25lZCBhbGlnbm1lbnQpCisgICAgdm9pZCBkZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbjxzdGQ6
OmJ5dGU+IGRhdGEsIHVuc2lnbmVkIGFsaWdubWVudCkKICAgICB7Ci0gICAgICAgIGlmICghYWxp
Z25CdWZmZXJQb3NpdGlvbihhbGlnbm1lbnQsIHNpemUpKQorICAgICAgICBpZiAoIWFsaWduQnVm
ZmVyUG9zaXRpb24oYWxpZ25tZW50LCBkYXRhLnNpemUoKSkpCiAgICAgICAgICAgICByZXR1cm47
CiAKLSAgICAgICAgbWVtY3B5KGRhdGEsIG1fYnVmZmVyLCBzaXplKTsKLSAgICAgICAgbV9idWZm
ZXIgKz0gc2l6ZTsKKyAgICAgICAgbWVtY3B5KGRhdGEuZGF0YSgpLCBtX2J1ZmZlciwgZGF0YS5z
aXplKCkpOworICAgICAgICBtX2J1ZmZlciArPSBkYXRhLnNpemUoKTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBk
YXRhLCBzaXplX3QgYWxpZ25tZW50KQorICAgIHsKKyAgICAgICAgZGVjb2RlRml4ZWRMZW5ndGhE
YXRhKGFzV3JpdGFibGVCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pLCBhbGln
bm1lbnQpOwogICAgIH0KIAogICAgIGJvb2wgYWxpZ25CdWZmZXJQb3NpdGlvbih1bnNpZ25lZCBh
bGlnbm1lbnQsIHNpemVfdCBzaXplKQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05l
dHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5jcHAJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01OSw4ICs1OSw4IEBAIE5ldHdvcmtTZW5kUXVldWUgV2ViU29j
a2V0Q2hhbm5lbDo6Y3JlYXQKICAgICAgICAgY2hhbm5lbC5ub3RpZnlTZW5kRnJhbWUoV2ViU29j
a2V0RnJhbWU6Ok9wQ29kZTo6T3BDb2RlVGV4dCwgdXRmOFN0cmluZy5kYXRhQXNVSW50OFB0cigp
LCB1dGY4U3RyaW5nLmxlbmd0aCgpKTsKICAgICAgICAgY2hhbm5lbC5zZW5kTWVzc2FnZShNZXNz
YWdlczo6TmV0d29ya1NvY2tldENoYW5uZWw6OlNlbmRTdHJpbmcgeyBJUEM6OkRhdGFSZWZlcmVu
Y2UgeyB1dGY4U3RyaW5nLmRhdGFBc1VJbnQ4UHRyKCksIHV0ZjhTdHJpbmcubGVuZ3RoKCkgfSB9
LCB1dGY4U3RyaW5nLmxlbmd0aCgpKTsKICAgICB9LCBbJmNoYW5uZWxdKGF1dG8mIHNwYW4pIHsK
LSAgICAgICAgY2hhbm5lbC5ub3RpZnlTZW5kRnJhbWUoV2ViU29ja2V0RnJhbWU6Ok9wQ29kZTo6
T3BDb2RlQmluYXJ5LCBzcGFuLmRhdGEoKSwgc3Bhbi5zaXplKCkpOwotICAgICAgICBjaGFubmVs
LnNlbmRNZXNzYWdlKE1lc3NhZ2VzOjpOZXR3b3JrU29ja2V0Q2hhbm5lbDo6U2VuZERhdGEgeyBJ
UEM6OkRhdGFSZWZlcmVuY2UgeyBzcGFuLmRhdGEoKSwgc3Bhbi5zaXplKCkgfSB9LCBzcGFuLnNp
emUoKSk7CisgICAgICAgIGNoYW5uZWwubm90aWZ5U2VuZEZyYW1lKFdlYlNvY2tldEZyYW1lOjpP
cENvZGU6Ok9wQ29kZUJpbmFyeSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3Bh
bi5kYXRhKCkpLCBzcGFuLnNpemUoKSk7CisgICAgICAgIGNoYW5uZWwuc2VuZE1lc3NhZ2UoTWVz
c2FnZXM6Ok5ldHdvcmtTb2NrZXRDaGFubmVsOjpTZW5kRGF0YSB7IElQQzo6RGF0YVJlZmVyZW5j
ZSB7IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNwYW4uZGF0YSgpKSwgc3Bhbi5z
aXplKCkgfSB9LCBzcGFuLnNpemUoKSk7CiAgICAgfSwgWyZjaGFubmVsXShFeGNlcHRpb25Db2Rl
IGV4Y2VwdGlvbkNvZGUpIHsKICAgICAgICAgYXV0byBjb2RlID0gc3RhdGljX2Nhc3Q8aW50Pihl
eGNlcHRpb25Db2RlKTsKICAgICAgICAgY2hhbm5lbC5mYWlsKG1ha2VTdHJpbmcoIkZhaWxlZCB0
byBsb2FkIEJsb2I6IGV4Y2VwdGlvbiBjb2RlID0gIiwgY29kZSkpOwpJbmRleDogU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3Rp
bmdBUEkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTEsNyArNjkxLDcgQEAgc3RhdGljIGJvb2wg
ZW5jb2RlVHlwZWRBcnJheShJUEM6OkVuY29kZQogICAgIGlmICghZGF0YS5idWZmZXIpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuYnVmZmVyKSwgZGF0YS5sZW5ndGgs
IDEpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyByZWludGVycHJl
dF9jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGRhdGEuYnVmZmVyKSwgZGF0YS5sZW5ndGggfSwgMSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRW52
aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRW52aXJv
bm1lbnQuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0Vu
dmlyb25tZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDcgKzE1Niw3IEBAIGJvb2wgRW52
aXJvbm1lbnQ6OmNvbXB1dGVJc0RlYnVnSGVhcEVuYWIKICAgICByZXR1cm4gdHJ1ZTsKICNlbmRp
ZgogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBibWFsbG9jCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwyNyBAQAorMjAyMS0wNi0xMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0Bh
cHBsZS5jb20+CisKKyAgICAgICAgQWRvcHQgU3BhbiBpbiBtb3JlIHBsYWNlcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2ODg3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL2NhaXJvL1BpeGVsRHVtcFN1cHBvcnRDYWlyby5jcHA6CisgICAgICAg
IChjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JCaXRtYXBDb250ZXh0KToKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9jZy9QaXhlbER1bXBTdXBwb3J0Q0cuY3BwOgorICAgICAgICAoY29tcHV0ZVNI
QTFIYXNoU3RyaW5nRm9yQml0bWFwQ29udGV4dCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvQmxvb21GaWx0ZXIuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Z2VuZXJh
dGVSYW5kb21EaWdlc3RzKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxl
U3lzdGVtLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisgICAgICAgICog
VGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6Q29ubmVjdGlvbjo6d2ViU29ja2V0SGFuZHNoYWtlKToKKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwOgorICAgICAgICAoV1RSOjpjb21w
dXRlU0hBMUhhc2hTdHJpbmdGb3JDYWlyb1N1cmZhY2UpOgorICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvY2cvVGVzdEludm9jYXRpb25DRy5jcHA6CisgICAgICAgIChXVFI6OmNvbXB1dGVTSEEx
SGFzaFN0cmluZ0ZvckNvbnRleHQpOgorCiAyMDIxLTA2LTExICBGdWppaSBIaXJvbm9yaSAgPEhp
cm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIFtXaW5dW0R1bXBSZW5kZXJUcmVlXSAt
LW5vLXRpbWVvdXQgc3dpdGNoIGRvZXNuJ3Qgd29yawpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2Fpcm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9E
dW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fpcm8uY3BwCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fp
cm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHZvaWQgY29tcHV0ZVNIQTFI
YXNoU3RyaW5nRm9yQml0bWFwQ29udGUKICAgICBTSEExIHNoYTE7CiAgICAgdW5zaWduZWQgY2hh
ciogYml0bWFwRGF0YSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpKTsKICAgICBmb3IgKHVuc2lnbmVkIHJvdyA9IDA7IHJv
dyA8IHBpeGVsc0hpZ2g7IHJvdysrKSB7Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMoYml0bWFwRGF0
YSwgNCAqIHBpeGVsc1dpZGUpOworICAgICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyBiaXRtYXBE
YXRhLCA0ICogcGl4ZWxzV2lkZSB9KTsKICAgICAgICAgYml0bWFwRGF0YSArPSBieXRlc1BlclJv
dzsKICAgICB9CiAgICAgU0hBMTo6RGlnZXN0IGhhc2g7CkluZGV4OiBUb29scy9EdW1wUmVuZGVy
VHJlZS9jZy9QaXhlbER1bXBTdXBwb3J0Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRDRy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysr
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRDRy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg4LDE0ICs4OCwxNCBAQCB2b2lkIGNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckJp
dG1hcENvbnRlCiAgICAgICAgICAgICB1aW50MzJfdCBidWZmZXJbcGl4ZWxzV2lkZV07CiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGNvbHVtbiA9IDA7IGNvbHVtbiA8IHBpeGVsc1dpZGU7IGNv
bHVtbisrKQogICAgICAgICAgICAgICAgIGJ1ZmZlcltjb2x1bW5dID0gT1NSZWFkTGl0dGxlSW50
MzIoYml0bWFwRGF0YSwgNCAqIGNvbHVtbik7Ci0gICAgICAgICAgICBzaGExLmFkZEJ5dGVzKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZlciksIDQgKiBwaXhlbHNXaWRlKTsK
KyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IGJ1ZmZlciwgcGl4ZWxzV2lkZSB9KTsK
ICAgICAgICAgICAgIGJpdG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7CiAgICAgICAgIH0KICAgICB9
IGVsc2UKICNlbmRpZgogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCByb3cgPSAwOyByb3cg
PCBwaXhlbHNIaWdoOyByb3crKykgewotICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhiaXRtYXBE
YXRhLCA0ICogcGl4ZWxzV2lkZSk7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyBi
aXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lkZSB9KTsKICAgICAgICAgICAgIGJpdG1hcERhdGEgKz0g
Ynl0ZXNQZXJSb3c7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9CbG9vbUZpbHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvQmxvb21GaWx0ZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9CbG9vbUZpbHRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDcgKzQ1LDcgQEAgc3RhdGljIFZlY3RvcjxTSEExOjpEaWdlc3Q+IGdlbmVyYXRlUmFu
ZAogICAgIFNIQTEgc2hhMTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaGFzaENvdW50
OyArK2kpIHsKICAgICAgICAgZG91YmxlIHJhbmRvbSA9IHJhbmRvbU51bWJlcigpOwotICAgICAg
ICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZyYW5kb20pLCBzaXpl
b2YoZG91YmxlKSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZyYW5kb20sIDEgfSk7
CiAgICAgICAgIFNIQTE6OkRpZ2VzdCBkaWdlc3Q7CiAgICAgICAgIHNoYTEuY29tcHV0ZUhhc2go
ZGlnZXN0KTsKICAgICAgICAgaGFzaGVzLmFwcGVuZChkaWdlc3QpOwpJbmRleDogVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzMsOCArMTMzLDggQEAgVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBNYXBwaW5n
RXhpc3RpbmdGaQogICAgIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhIG1hcHBlZEZpbGVEYXRh
KHRlbXBGaWxlUGF0aCgpLCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlTW9kZTo6U2hhcmVkLCBzdWNj
ZXNzKTsKICAgICBFWFBFQ1RfVFJVRShzdWNjZXNzKTsKICAgICBFWFBFQ1RfVFJVRSghIW1hcHBl
ZEZpbGVEYXRhKTsKLSAgICBFWFBFQ1RfVFJVRShtYXBwZWRGaWxlRGF0YS5zaXplKCkgPT0gc3Ry
bGVuKEZpbGVTeXN0ZW1UZXN0RGF0YSkpOwotICAgIEVYUEVDVF9UUlVFKHN0cm5zdHIoRmlsZVN5
c3RlbVRlc3REYXRhLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4obWFwcGVkRmlsZURhdGEuZGF0
YSgpKSwgbWFwcGVkRmlsZURhdGEuc2l6ZSgpKSk7CisgICAgRVhQRUNUX1RSVUUobWFwcGVkRmls
ZURhdGEuZGF0YSgpLnNpemUoKSA9PSBzdHJsZW4oRmlsZVN5c3RlbVRlc3REYXRhKSk7CisgICAg
RVhQRUNUX1RSVUUoc3RybnN0cihGaWxlU3lzdGVtVGVzdERhdGEsIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgY2hhcio+KG1hcHBlZEZpbGVEYXRhLmRhdGEoKS5kYXRhKCkpLCBtYXBwZWRGaWxlRGF0
YS5kYXRhKCkuc2l6ZSgpKSk7CiB9CiAKIFRFU1RfRihGaWxlU3lzdGVtVGVzdCwgTWFwcGluZ0V4
aXN0aW5nRW1wdHlGaWxlKQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU0hB
MS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU0hBMS5j
cHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1NI
QTEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHN0YXRpYyB2b2lkIGV4cGVj
dFNIQTEoQ1N0cmluZyBpbnB1dCwgaW4KIHsKICAgICBTSEExIHNoYTE7CiAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCByZXBlYXQ7ICsraSkKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhpbnB1dCk7Cisg
ICAgICAgIHNoYTEuYWRkQnl0ZXMoaW5wdXQuYnl0ZXMoKSk7CiAgICAgQ1N0cmluZyBhY3R1YWwg
PSBzaGExLmNvbXB1dGVIZXhEaWdlc3QoKTsKIAogICAgIEFTU0VSVF9FUShleHBlY3RlZC5sZW5n
dGgoKSwgYWN0dWFsLmxlbmd0aCgpKTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2Ev
SFRUUFNlcnZlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hU
VFBTZXJ2ZXIubW0JKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29j
b2EvSFRUUFNlcnZlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQwLDExICszNDAsMTEgQEAgdm9p
ZCBDb25uZWN0aW9uOjp3ZWJTb2NrZXRIYW5kc2hha2UoQ29tcAogCiAgICAgICAgICAgICBjb25z
dGV4cHIgYXV0byogd2ViU29ja2V0S2V5R1VJRCA9ICIyNThFQUZBNS1FOTE0LTQ3REEtOTVDQS1D
NUFCMERDODVCMTEiOwogICAgICAgICAgICAgU0hBMSBzaGExOwotICAgICAgICAgICAgc2hhMS5h
ZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihrZXlCZWdpbiksIGtleUVu
ZCAtIGtleUJlZ2luKTsKLSAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4od2ViU29ja2V0S2V5R1VJRCksIHN0cmxlbih3ZWJTb2NrZXRLZXlH
VUlEKSk7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyBrZXlCZWdpbiwga2V5RW5k
IH0pOworICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgd2ViU29ja2V0S2V5R1VJRCwg
c3RybGVuKHdlYlNvY2tldEtleUdVSUQpIH0pOwogICAgICAgICAgICAgU0hBMTo6RGlnZXN0IGhh
c2g7CiAgICAgICAgICAgICBzaGExLmNvbXB1dGVIYXNoKGhhc2gpOwotICAgICAgICAgICAgcmV0
dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGhhc2guZGF0YSgpLCBTSEExOjpoYXNoU2l6ZSk7Cisg
ICAgICAgICAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaGFzaCk7CiAgICAgICAgIH07
CiAKICAgICAgICAgY29ubmVjdGlvbi5zZW5kKEhUVFBSZXNwb25zZSgxMDEsIHsKSW5kZXg6IFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvY2Fpcm8vVGVzdEludm9jYXRpb25DYWlyby5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jYWlyby9UZXN0SW52b2NhdGlvbkNhaXJv
LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jYWlyby9U
ZXN0SW52b2NhdGlvbkNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBz
dGF0aWMgdm9pZCBjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JDYWlyCiAgICAgU0hBMSBzaGExOwog
ICAgIHVuc2lnbmVkIGNoYXIqIGJpdG1hcERhdGEgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlKSk7CiAgICAgZm9yIChzaXpl
X3Qgcm93ID0gMDsgcm93IDwgcGl4ZWxzSGlnaDsgKytyb3cpIHsKLSAgICAgICAgc2hhMS5hZGRC
eXRlcyhiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lkZSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMo
U3BhbiB7IGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlIH0pOwogICAgICAgICBiaXRtYXBEYXRh
ICs9IGJ5dGVzUGVyUm93OwogICAgIH0KICAgICBTSEExOjpEaWdlc3QgaGFzaDsKSW5kZXg6IFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvY2cvVGVzdEludm9jYXRpb25DRy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcAkocmV2aXNp
b24gMjc4ODA5KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNH
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQCB2b2lkIGNvbXB1dGVTSEExSGFz
aFN0cmluZ0ZvckNvbnRleHQoQ0dDCiAjZW5kaWYKICAgICB7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgcm93ID0gMDsgcm93IDwgcGl4ZWxzSGlnaDsgcm93KyspIHsKLSAgICAgICAgICAgIHNoYTEu
YWRkQnl0ZXMoYml0bWFwRGF0YSwgNCAqIHBpeGVsc1dpZGUpOworICAgICAgICAgICAgc2hhMS5h
ZGRCeXRlcyhTcGFuIHsgYml0bWFwRGF0YSwgNCAqIHBpeGVsc1dpZGUgfSk7CiAgICAgICAgICAg
ICBiaXRtYXBEYXRhICs9IGJ5dGVzUGVyUm93OwogICAgICAgICB9CiAgICAgfQo=
</data>
<flag name="commit-queue"
          id="453031"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431290</attachid>
            <date>2021-06-13 15:18:01 -0700</date>
            <delta_ts>2021-06-13 16:19:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226887-20210613151800.patch</filename>
            <type>text/plain</type>
            <size>198839</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBA
CisyMDIxLTA2LTEyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogQVBJL0pTU2NyaXB0Lm1tOgorICAg
ICAgICAoK1tKU1NjcmlwdCBzY3JpcHRPZlR5cGU6bWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTp3
aXRoU291cmNlVVJMOmFuZEJ5dGVjb2RlQ2FjaGU6aW5WaXJ0dWFsTWFjaGluZTplcnJvcjpdKToK
KyAgICAgICAgKC1bSlNTY3JpcHQgcmVhZENhY2hlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHdy
aXRlQ2FjaGU6XSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9ja0hhc2g6OkNvZGVCbG9ja0hhc2gpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHA6CisgICAgICAgIChJbnNw
ZWN0b3I6OmJhY2tlbmRDb21tYW5kc0hhc2gpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZm
ZXIuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJDb250ZW50czo6d3JpdGFibGVCeXRlcyk6
CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyQ29udGVudHM6OmJ5dGVzIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6QXJyYXlCdWZmZXI6OndyaXRhYmxlQnl0ZXMpOgorICAgICAgICAoSlNDOjpBcnJh
eUJ1ZmZlcjo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
Lmg6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6d3JpdGFibGVCeXRlcyk6CisgICAg
ICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRp
bWUvQ2FjaGVQYXlsb2FkLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVQYXlsb2FkOjptYWtlTWFw
cGVkUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6bWFrZU1hbGxvY1BheWxv
YWQpOgorICAgICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6Om1ha2VFbXB0eVBheWxvYWQpOgorICAg
ICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6OkNhY2hlUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNh
Y2hlUGF5bG9hZDo6ZnJlZURhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVQYXlsb2FkLmg6
CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6ZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlUGF5bG9hZDo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6
Q2FjaGVQYXlsb2FkKToKKyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKToKKwogMjAyMS0w
Ni0xMSAgUGF0cmljayBBbmdsZSAgPHBhbmdsZUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogQWRkIGluc3RydW1lbnRhdGlvbiB0byBub2RlIGRlc3RydWN0aW9uIGZvciBJbnNw
ZWN0b3JET01BZ2VudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMTMgKzEzNCwxMyBAQCArIChpbnN0YW5jZXR5cGUpc2Ny
aXB0T2ZUeXBlOihKU1NjcmlwdFR5CiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4g
Y3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJGaWxlIGF0IHBhdGggJUAg
Y291bGQgbm90IGJlIG1hcHBlZC4iLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihzeXN0ZW1QYXRo
KV0sIGVycm9yKTsKIAotICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCkpKQor
ICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmlsZURhdGEuZGF0YSgpLnNpemUoKSkpCiAg
ICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIk5v
dCBhbGwgY2hhcmFjdGVycyBpbiBmaWxlIGF0ICVAIGFyZSBBU0NJSS4iLCBzdGF0aWNfY2FzdDxO
U1N0cmluZyAqPihzeXN0ZW1QYXRoKV0sIGVycm9yKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gYWRv
cHROUyhbW0pTU2NyaXB0IGFsbG9jXSBpbml0XSk7CiAgICAgcmVzdWx0LT5tX3ZpcnR1YWxNYWNo
aW5lID0gdm07CiAgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOwotICAgIHJlc3VsdC0+bV9zb3Vy
Y2UgPSBTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcoYml0d2lzZV9jYXN0
PGNvbnN0IExDaGFyKj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpKSk7CisgICAg
cmVzdWx0LT5tX3NvdXJjZSA9IFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWlu
ZyhiaXR3aXNlX2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmls
ZURhdGEuZGF0YSgpLnNpemUoKSkpOwogICAgIHJlc3VsdC0+bV9tYXBwZWRTb3VyY2UgPSBXVEZN
b3ZlKGZpbGVEYXRhKTsKICAgICByZXN1bHQtPm1fc291cmNlVVJMID0gc291cmNlVVJMOwogICAg
IHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7CkBAIC0xNjgsMjQgKzE2OCwyMyBAQCAt
ICh2b2lkKXJlYWRDYWNoZQogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgY29uc3QgdWludDhfdCogZmlsZURhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihtYXBwZWRGaWxlLmRhdGEoKSk7Ci0gICAgdW5zaWduZWQgZmlsZVRvdGFsU2l6ZSA9IG1h
cHBlZEZpbGUuc2l6ZSgpOworICAgIGF1dG8gZmlsZURhdGEgPSBtYXBwZWRGaWxlLmRhdGEoKTsK
IAogICAgIC8vIEVuc3VyZSB3ZSBhdCBsZWFzdCBoYXZlIGEgU0hBMTo6RGlnZXN0IHRvIHJlYWQu
Ci0gICAgaWYgKGZpbGVUb3RhbFNpemUgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgeworICAgIGlm
IChmaWxlRGF0YS5zaXplKCkgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgewogICAgICAgICBGaWxl
U3lzdGVtOjpkZWxldGVGaWxlKGNhY2hlRmlsZW5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgdW5zaWduZWQgZmlsZURhdGFTaXplID0gZmlsZVRvdGFsU2l6ZSAtIHNpemVvZihT
SEExOjpEaWdlc3QpOworICAgIHVuc2lnbmVkIGZpbGVEYXRhU2l6ZSA9IGZpbGVEYXRhLnNpemUo
KSAtIHNpemVvZihTSEExOjpEaWdlc3QpOwogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFz
aDsKICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhmaWxlRGF0YSwgZmlsZURhdGFT
aXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKGZpbGVEYXRhLmZpcnN0KGZpbGVEYXRhU2l6ZSkpOwog
ICAgIHNoYTEuY29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2VzdCBm
aWxlSGFzaDsKLSAgICBtZW1jcHkoJmZpbGVIYXNoLCBmaWxlRGF0YSArIGZpbGVEYXRhU2l6ZSwg
c2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOworICAgIG1lbWNweSgmZmlsZUhhc2gsIGZpbGVEYXRhLmRh
dGEoKSArIGZpbGVEYXRhU2l6ZSwgc2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOwogCiAgICAgaWYgKGNv
bXB1dGVkSGFzaCAhPSBmaWxlSGFzaCkgewogICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxl
KGNhY2hlRmlsZW5hbWUpOwpAQCAtMzQzLDcgKzM0Miw3IEBAIC0gKEJPT0wpd3JpdGVDYWNoZToo
U3RyaW5nJillcnJvcgogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFzaDsKICAgICBTSEEx
IHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhtX2NhY2hlZEJ5dGVjb2RlLT5kYXRhKCksIG1fY2Fj
aGVkQnl0ZWNvZGUtPnNpemUoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgbV9jYWNoZWRC
eXRlY29kZS0+ZGF0YSgpLCBtX2NhY2hlZEJ5dGVjb2RlLT5zaXplKCkgfSk7CiAgICAgc2hhMS5j
b21wdXRlSGFzaChjb21wdXRlZEhhc2gpOwogICAgIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKHRl
bXBGRCwgY29tcHV0ZWRIYXNoLmRhdGEoKSwgc2l6ZW9mKGNvbXB1dGVkSGFzaCkpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0hhc2guY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgQ29kZUJsb2Nr
SGFzaDo6Q29kZUJsb2NrSGFzaChjb25zdCBTb3VyYwogICAgIEFTU0VSVChzb3VyY2VDb2RlLmxl
bmd0aCgpID49IDApOwogICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhTb3VyY2VDb2RlTGVuZ3Ro
VG9IYXNoID0gNTAwICogTUI7CiAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzb3VyY2VD
b2RlLmxlbmd0aCgpKSA8IG1heFNvdXJjZUNvZGVMZW5ndGhUb0hhc2gpCi0gICAgICAgIHNoYTEu
YWRkQnl0ZXMoc291cmNlQ29kZS50b1VURjgoKSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoc291
cmNlQ29kZS50b1VURjgoKS5ieXRlcygpKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gSnVzdCBo
YXNoIHdpdGggdGhlIGxlbmd0aCBhbmQgc2FtcGxlcyBvZiB0aGUgc291cmNlIHN0cmluZyBpbnN0
ZWFkLgogICAgICAgICBTdHJpbmdWaWV3IHN0ciA9IHNvdXJjZUNvZGUucHJvdmlkZXIoKS0+c291
cmNlKCk7CkBAIC02MiwxMCArNjIsMTAgQEAgQ29kZUJsb2NrSGFzaDo6Q29kZUJsb2NrSGFzaChj
b25zdCBTb3VyYwogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHIubGVuZ3RoKCk7CiAgICAg
ICAgIHVuc2lnbmVkIHN0ZXAgPSAobGVuZ3RoID4+IDEwKSArIDE7CiAKLSAgICAgICAgc2hhMS5h
ZGRCeXRlcyhiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KCZsZW5ndGgpLCBzaXplb2YobGVuZ3RoKSk7
CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZsZW5ndGgsIDEgfSk7CiAgICAgICAgIGRv
IHsKICAgICAgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IHN0cltpbmRleF07Ci0gICAgICAgICAg
ICBzaGExLmFkZEJ5dGVzKGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oJmNoYXJhY3RlciksIHNpemVv
ZihjaGFyYWN0ZXIpKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZjaGFyYWN0
ZXIsIDEgfSk7CiAgICAgICAgICAgICBvbGRJbmRleCA9IGluZGV4OwogICAgICAgICAgICAgaW5k
ZXggKz0gc3RlcDsKICAgICAgICAgfSB3aGlsZSAoaW5kZXggPiBvbGRJbmRleCAmJiBpbmRleCA8
IGxlbmd0aCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VIYXNo
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VI
YXNoLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BhcnNlSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiBQYXJzZUhhc2g6OlBhcnNlSGFzaChjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VD
b2RlKQogewogICAgIFNIQTEgc2hhMTsKLSAgICBzaGExLmFkZEJ5dGVzKHNvdXJjZUNvZGUudG9V
VEY4KCkpOworICAgIHNoYTEuYWRkQnl0ZXMoc291cmNlQ29kZS50b1VURjgoKS5ieXRlcygpKTsK
ICAgICBTSEExOjpEaWdlc3QgZGlnZXN0OwogICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsK
ICAgICB1bnNpZ25lZCBoYXNoID0gZGlnZXN0WzBdIHwgKGRpZ2VzdFsxXSA8PCA4KSB8IChkaWdl
c3RbMl0gPDwgMTYpIHwgKGRpZ2VzdFszXSA8PCAyNCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1JlbW90ZUluc3BlY3RvclV0aWxzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1Jl
bW90ZUluc3BlY3RvclV0aWxzLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgY29uc3QgQ1N0cmluZyYgYmFja2VuZENv
bW1hbmRzSGFzaCgpCiAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSA9IGdfYnl0ZXNfZ2V0X2Rh
dGEoYnl0ZXMuZ2V0KCksICZkYXRhU2l6ZSk7CiAgICAgICAgIEFTU0VSVChkYXRhU2l6ZSk7CiAg
ICAgICAgIFNIQTEgc2hhMTsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhzdGF0aWNfY2FzdDxjb25z
dCB1aW50OF90Kj4oZGF0YSksIGRhdGFTaXplKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFu
IHsgc3RhdGljX2Nhc3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSksIGRhdGFTaXplIH0pOwogICAg
ICAgICBoZXhEaWdlc3QgPSBzaGExLmNvbXB1dGVIZXhEaWdlc3QoKTsKICAgICB9CiAgICAgcmV0
dXJuIGhleERpZ2VzdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogI2luY2x1ZGUgPHd0Zi9QYWNrZWRSZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZl
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtODAsNyAr
ODEsMTAgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBt
X2RhdGEuZ2V0TWF5QmVOdWxsKHNpemVJbkJ5dGVzKCkpOyB9CiAgICAgdW5zaWduZWQgc2l6ZUlu
Qnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX3NpemVJbkJ5dGVzOyB9Ci0gICAgCisKKyAgICBTcGFu
PHN0ZDo6Ynl0ZT4gd3JpdGFibGVCeXRlcygpIHsgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8c3RkOjpi
eXRlKj4oZGF0YSgpKSwgc2l6ZUluQnl0ZXMoKSB9OyB9CisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4geyBzdGF0aWNfY2FzdDxjb25zdCBzdGQ6OmJ5dGUq
PihkYXRhKCkpLCBzaXplSW5CeXRlcygpIH07IH0KKwogICAgIGJvb2wgaXNTaGFyZWQoKSBjb25z
dCB7IHJldHVybiBtX3NoYXJlZDsgfQogICAgIAogcHJpdmF0ZToKQEAgLTEyNyw3ICsxMzEsOSBA
QCBwdWJsaWM6CiAgICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKICAgICBpbmxpbmUgY29uc3Qgdm9p
ZCogZGF0YSgpIGNvbnN0OwogICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7
Ci0gICAgCisgICAgaW5saW5lIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCk7CisgICAg
aW5saW5lIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAgICAgdm9pZCBt
YWtlU2hhcmVkKCk7CiAgICAgdm9pZCBzZXRTaGFyaW5nTW9kZShBcnJheUJ1ZmZlclNoYXJpbmdN
b2RlKTsKICAgICBpbmxpbmUgYm9vbCBpc1NoYXJlZCgpIGNvbnN0OwpAQCAtMTk3LDYgKzIwMywx
NiBAQCB1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJu
IG1fY29udGVudHMuc2l6ZUluQnl0ZXMoKTsKIH0KIAorU3BhbjxzdGQ6OmJ5dGU+IEFycmF5QnVm
ZmVyOjp3cml0YWJsZUJ5dGVzKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZW50cy53cml0YWJsZUJ5
dGVzKCk7Cit9CisKK1NwYW48Y29uc3Qgc3RkOjpieXRlPiBBcnJheUJ1ZmZlcjo6Ynl0ZXMoKSBj
b25zdAoreworICAgIHJldHVybiBtX2NvbnRlbnRzLmJ5dGVzKCk7Cit9CisKIGJvb2wgQXJyYXlC
dWZmZXI6OmlzU2hhcmVkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb250ZW50cy5pc1NoYXJl
ZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZm
ZXJWaWV3LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4Niw5IEBAIHB1
YmxpYzoKIAogICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVM
ZW5ndGg7IH0KIAorICAgIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCkgeyByZXR1cm4g
eyBzdGF0aWNfY2FzdDxzdGQ6OmJ5dGUqPihkYXRhKCkpLCBieXRlTGVuZ3RoKCkgfTsgfQorICAg
IFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0IHsgcmV0dXJuIHsgc3RhdGljX2Nh
c3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSgpKSwgYnl0ZUxlbmd0aCgpIH07IH0KKwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0RGV0YWNoYWJsZShib29sKTsKICAgICBib29sIGlzRGV0
YWNoYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNEZXRhY2hhYmxlOyB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlUGF5bG9hZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsMjcgKzMwLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogCiBD
YWNoZVBheWxvYWQgQ2FjaGVQYXlsb2FkOjptYWtlTWFwcGVkUGF5bG9hZChGaWxlU3lzdGVtOjpN
YXBwZWRGaWxlRGF0YSYmIGRhdGEpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZCh0cnVlLCBk
YXRhLmxlYWtIYW5kbGUoKSwgZGF0YS5zaXplKCkpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQo
dHJ1ZSwgZGF0YS5sZWFrSGFuZGxlKCkpOwogfQogCiBDYWNoZVBheWxvYWQgQ2FjaGVQYXlsb2Fk
OjptYWtlTWFsbG9jUGF5bG9hZChNYWxsb2NQdHI8dWludDhfdCwgVk1NYWxsb2M+JiYgZGF0YSwg
c2l6ZV90IHNpemUpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZChmYWxzZSwgZGF0YS5sZWFr
UHRyKCksIHNpemUpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQoZmFsc2UsIGFzV3JpdGFibGVC
eXRlcyhTcGFuIHsgZGF0YS5sZWFrUHRyKCksIHNpemUgfSkpOwogfQogCiBDYWNoZVBheWxvYWQg
Q2FjaGVQYXlsb2FkOjptYWtlRW1wdHlQYXlsb2FkKCkKIHsKLSAgICByZXR1cm4gQ2FjaGVQYXls
b2FkKHRydWUsIG51bGxwdHIsIDApOworICAgIHJldHVybiBDYWNoZVBheWxvYWQodHJ1ZSwgeyB9
KTsKIH0KIAogQ2FjaGVQYXlsb2FkOjpDYWNoZVBheWxvYWQoQ2FjaGVQYXlsb2FkJiYgb3RoZXIp
CiB7Ci0gICAgbV9tYXBwZWQgPSBvdGhlci5tX21hcHBlZDsKLSAgICBtX3NpemUgPSBvdGhlci5t
X3NpemU7Ci0gICAgbV9kYXRhID0gb3RoZXIubV9kYXRhOwotICAgIG90aGVyLm1fbWFwcGVkID0g
ZmFsc2U7Ci0gICAgb3RoZXIubV9kYXRhID0gbnVsbHB0cjsKLSAgICBvdGhlci5tX3NpemUgPSAw
OworICAgIG1fbWFwcGVkID0gc3RkOjpleGNoYW5nZShvdGhlci5tX21hcHBlZCwgZmFsc2UpOwor
ICAgIG1fZGF0YSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLCB7IH0pOwogfQogCiBDYWNo
ZVBheWxvYWQ6On5DYWNoZVBheWxvYWQoKQpAQCAtNjcsMTIgKzYzLDEzIEBAIENhY2hlUGF5bG9h
ZCYgQ2FjaGVQYXlsb2FkOjpvcGVyYXRvcj0oQ2EKIAogdm9pZCBDYWNoZVBheWxvYWQ6OmZyZWVE
YXRhKCkKIHsKLSAgICBpZiAoIW1fZGF0YSkKKyAgICBpZiAoIW1fZGF0YS5kYXRhKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBpZiAobV9tYXBwZWQpIHsKLSAgICAgICAgRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1fZGF0YSwgbV9zaXplKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZmFzdEZy
ZWUobV9kYXRhKTsKKworICAgIGlmIChtX21hcHBlZCkKKyAgICAgICAgRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1fZGF0YSk7CisgICAgZWxzZQorICAgICAgICBmYXN0RnJlZShtX2RhdGEu
ZGF0YSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHd0Zi9GaWxlU3lz
dGVtLmg+CiAjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MSwyMiArNDIsMjAgQEAgcHVibGljOgogICAgIEpT
X0VYUE9SVF9QUklWQVRFIH5DYWNoZVBheWxvYWQoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBD
YWNoZVBheWxvYWQmIG9wZXJhdG9yPShDYWNoZVBheWxvYWQmJiBvdGhlcik7CiAKLSAgICBjb25z
dCB1aW50OF90KiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBjb25zdCB1aW50OF90KiBkYXRhKCkg
Y29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9kYXRhLmRhdGEoKSk7
IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5zaXplKCk7IH0KIAog
cHJpdmF0ZToKLSAgICBDYWNoZVBheWxvYWQoYm9vbCBtYXBwZWQsIHZvaWQqIGRhdGEsIHNpemVf
dCBzaXplKQorICAgIENhY2hlUGF5bG9hZChib29sIG1hcHBlZCwgU3BhbjxzdGQ6OmJ5dGU+IGRh
dGEpCiAgICAgICAgIDogbV9tYXBwZWQobWFwcGVkKQotICAgICAgICAsIG1fc2l6ZShzaXplKQot
ICAgICAgICAsIG1fZGF0YShzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGF0YSkpCisgICAgICAgICwg
bV9kYXRhKGRhdGEpCiAgICAgewogICAgIH0KIAogICAgIHZvaWQgZnJlZURhdGEoKTsKIAogICAg
IGJvb2wgbV9tYXBwZWQ7Ci0gICAgc2l6ZV90IG1fc2l6ZTsKLSAgICB1aW50OF90KiBtX2RhdGE7
CisgICAgU3BhbjxzdGQ6OmJ5dGU+IG1fZGF0YTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1Bh
cnNlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNyArMjYxLDcg
QEAgYXV0byBTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKGNvbnN0IHVpbgogICAgIH0KIAogICAg
IGlmIChVTkxJS0VMWShPcHRpb25zOjp1c2VFYWdlcldlYkFzc2VtYmx5TW9kdWxlSGFzaGluZygp
KSkKLSAgICAgICAgbV9oYXNoZXIuYWRkQnl0ZXMoYnl0ZXMsIGJ5dGVzU2l6ZSk7CisgICAgICAg
IG1faGFzaGVyLmFkZEJ5dGVzKFNwYW4geyBieXRlcywgYnl0ZXNTaXplIH0pOwogCiAgICAgc2l6
ZV90IG9mZnNldEluQnl0ZXMgPSAwOwogICAgIHdoaWxlICh0cnVlKSB7CkluZGV4OiBTb3VyY2Uv
V1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw2OCBAQAorMjAyMS0wNi0xMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgQWRvcHQgU3BhbiBpbiBtb3JlIHBsYWNlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIFdURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmNwcDoKKyAgICAg
ICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjp+TWFwcGVkRmlsZURhdGEp
OgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6TWFwcGVkRmlsZURhdGE6Om1hcEZpbGVI
YW5kbGUpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6dW5tYXBWaWV3T2ZGaWxlKToK
KyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Om1hcFRvRmlsZSk6CisgICAgICAgICogd3Rm
L0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVE
YXRhOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6
Ok1hcHBlZEZpbGVEYXRhOjpkYXRhIGNvbnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUlt
cGw6Ok1hcHBlZEZpbGVEYXRhOjpsZWFrSGFuZGxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3Rl
bUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YSk6CisgICAgICAgIChXVEY6OkZp
bGVTeXN0ZW1JbXBsOjpNYXBwZWRGaWxlRGF0YTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6
RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpzaXplIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1NIQTEuY3BwOgorICAgICAgICAoV1RG
OjpTSEExOjphZGRCeXRlcyk6CisgICAgICAgIChXVEY6OlNIQTE6OmZpbmFsaXplKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6U0hBMTo6cHJvY2Vzc0Jsb2NrKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6U0hBMTo6cmVzZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTSEExOjpoZXhEaWdl
c3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTSEExOjpjb21wdXRlSGV4RGlnZXN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3dGYvU0hBMS5oOgorICAgICAgICAoV1RGOjpTSEExOjphZGRCeXRl
cyk6CisgICAgICAgICogd3RmL1ZlY3Rvci5oOgorICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZS9Q
ZXJzaXN0ZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPENT
dHJpbmc+OjplbmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8Q1N0cmlu
Zz46OmRlY29kZSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTdHJpbmc+Ojpl
bmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVjb2RlU3RyaW5nVGV4dCk6Cisg
ICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUpOgor
ICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKToK
KyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oOgorICAgICAgICAq
IHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5jcHA6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyOjpEZWNvZGVyKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6
OkRlY29kZXI6OmJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFkKToKKyAgICAgICAgKFdURjo6UGVy
c2lzdGVuY2U6OkRlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjp2ZXJpZnlDaGVja3N1bSk6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyOjp+RGVjb2Rlcik6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3Bl
cnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmg6CisgICAgICAgICogd3RmL3BlcnNpc3RlbmNl
L1BlcnNpc3RlbnRFbmNvZGVyLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29k
ZXI6Omdyb3cpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6dXBkYXRlQ2hl
Y2tzdW1Gb3JEYXRhKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6OmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjpl
bmNvZGVOdW1iZXIpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6ZW5jb2Rl
Q2hlY2tzdW0pOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6RW5jb2Rlcik6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjp+RW5jb2Rlcik6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmg6
CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjpidWZmZXIgY29uc3QpOgorICAg
ICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIp
OgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6YnVmZmVyU2l6ZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL3RleHQvQmFzZTY0Lmg6CisgICAgICAgIChXVEY6OmJh
c2U2NEVuY29kZVRvVmVjdG9yKToKKyAgICAgICAgKFdURjo6YmFzZTY0RW5jb2RlVG9TdHJpbmcp
OgorICAgICAgICAqIHd0Zi90ZXh0L0NTdHJpbmcuaDoKKwogMjAyMS0wNi0xMSAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgV2Vha0hhc2hNYXAKSW5kZXg6
IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtNjkyLDYgKzY5Miw4IEBACiAJCUFEODlCNkI5MUU2NDE1MEYwMDkwNzA3RiAvKiBN
ZW1vcnlQcmVzc3VyZUhhbmRsZXJDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IE1lbW9yeVByZXNzdXJlSGFuZGxlckNvY29hLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBREYyQ0U2NDFFMzlGMTA2MDA2ODg5REIgLyogTWVtb3J5Rm9vdHBy
aW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lbW9yeUZvb3RwcmludC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREYyQ0U2NTFFMzlGMTA2MDA2ODg5REIg
LyogTWVtb3J5Rm9vdHByaW50Q29jb2EuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTWVtb3J5Rm9vdHByaW50Q29jb2EuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlCQzcwMEI0NDI2NzY2ODM0MDA0OUVERjIgLyogU3BhbkNvY29hLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNwYW5Db2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzcwMEI0
NTI2NzY2OUMxMDA0OUVERjIgLyogU3BhbkNGLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwYW5DRi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0EzMEM3RjI2NkQzMDM0MDAwRDIzMEMgLyog
U3Bhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTcGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyQkNGQzNFMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5ndWFnZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYW5ndWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyQkNGQzNGMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5ndWFnZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYW5ndWFnZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtODQwLDYgKzg0Miw3IEBACiAJCQkJQzJCQ0ZDNDExRjYxRDYxNjAwQzky
MjJDIC8qIExhbmd1YWdlQ0YuY3BwICovLAogCQkJCTJDREVEMEVFMTgxMTVDMzgwMDREQkE3MCAv
KiBSdW5Mb29wQ0YuY3BwICovLAogCQkJCUEzRUU1QzNCMjFGRkFDN0MwMEZBQkQ2MSAvKiBTY2hl
ZHVsZVBhaXJDRi5jcHAgKi8sCisJCQkJQkM3MDBCNDUyNjc2NjlDMTAwNDlFREYyIC8qIFNwYW5D
Ri5oICovLAogCQkJCTFBRkRFNjQ3MTk1MjAxQzMwMEM0OEZGQSAvKiBUeXBlQ2FzdHNDRi5oICov
LAogCQkJCTVDMUYwNTk0MjE2NDM3QjMwMDM5MzAyQyAvKiBVUkxDRi5jcHAgKi8sCiAJCQkpOwpA
QCAtMTU4MSw2ICsxNTg0LDcgQEAKIAkJCQkxQ0E4NUNBODI0MUIwQjI2MDA3MUMyRjUgLyogUnVu
dGltZUFwcGxpY2F0aW9uQ2hlY2tzQ29jb2EuY3BwICovLAogCQkJCTFDQTg1Q0E3MjQxQjBCMTEw
MDcxQzJGNSAvKiBSdW50aW1lQXBwbGljYXRpb25DaGVja3NDb2NvYS5oICovLAogCQkJCUEzMEQ0
MTJDMUYwREUwQkEwMEI3MTk1NCAvKiBTb2Z0TGlua2luZy5oICovLAorCQkJCUJDNzAwQjQ0MjY3
NjY4MzQwMDQ5RURGMiAvKiBTcGFuQ29jb2EuaCAqLywKIAkJCQlFQjYxRURDNjI0MDlDQ0MwMDAx
RUZFMzYgLyogU3lzdGVtVHJhY2luZ0NvY29hLmNwcCAqLywKIAkJCQk1Q0MwRUU4NjIxNjJCQzIy
MDBBMUE4NDIgLyogVVJMQ29jb2EubW0gKi8sCiAJCQkJOTMyNDE2NTcyNDNCQzJFNTAwMzJGQUFF
IC8qIFZlY3RvckNvY29hLmggKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxOSw5ICszMTksOSBAQCBib29sIGV4Y2x1ZGVGcm9tQmFja3VwKGNvbnN0IFN0cmluZyYp
CiAKIE1hcHBlZEZpbGVEYXRhOjp+TWFwcGVkRmlsZURhdGEoKQogewotICAgIGlmICghbV9maWxl
RGF0YSkKKyAgICBpZiAoIW1fZmlsZURhdGEuZGF0YSgpKQogICAgICAgICByZXR1cm47Ci0gICAg
dW5tYXBWaWV3T2ZGaWxlKG1fZmlsZURhdGEsIG1fZmlsZVNpemUpOworICAgIHVubWFwVmlld09m
RmlsZShtX2ZpbGVEYXRhKTsKIH0KIAogTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKGNv
bnN0IFN0cmluZyYgZmlsZVBhdGgsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUsIGJvb2wmIHN1Y2Nl
c3MpCkBAIC0zODMsMTQgKzM4MywxMyBAQCBib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFu
ZGxlKFBsYXRmCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBtX2ZpbGVEYXRh
ID0gZGF0YTsKLSAgICBtX2ZpbGVTaXplID0gc2l6ZTsKKyAgICBtX2ZpbGVEYXRhID0gU3BhbiB7
IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpieXRlKj4oZGF0YSksIHNpemUgfTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCB1bm1hcFZpZXdPZkZpbGUodm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6
ZSkKK2Jvb2wgdW5tYXBWaWV3T2ZGaWxlKFNwYW48c3RkOjpieXRlPiBkYXRhKQogewotICAgIHJl
dHVybiAhbXVubWFwKGJ1ZmZlciwgc2l6ZSk7CisgICAgcmV0dXJuICFtdW5tYXAoZGF0YS5kYXRh
KCksIGRhdGEuc2l6ZSgpKTsKIH0KIAogI2VuZGlmCkBAIC00MzgsNyArNDM3LDcgQEAgU3RyaW5n
IGNyZWF0ZVRlbXBvcmFyeVppcEFyY2hpdmUoY29uc3QgUwogfQogI2VuZGlmCiAKLU1hcHBlZEZp
bGVEYXRhIG1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIHNpemVfdCBieXRlc1NpemUsIEZ1
bmN0aW9uPHZvaWQoY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4m
KT4mJiBhcHBseSwgUGxhdGZvcm1GaWxlSGFuZGxlKiBvdXRwdXRIYW5kbGUpCitNYXBwZWRGaWxl
RGF0YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBzaXplX3QgYnl0ZXNTaXplLCBGdW5j
dGlvbjx2b2lkKGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mKT4m
JiBhcHBseSwgUGxhdGZvcm1GaWxlSGFuZGxlKiBvdXRwdXRIYW5kbGUpCiB7CiAgICAgY29uc3Rl
eHByIGJvb2wgZmFpbElmRmlsZUV4aXN0cyA9IHRydWU7CiAgICAgYXV0byBoYW5kbGUgPSBGaWxl
U3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWRXcml0
ZSwgRmlsZVN5c3RlbTo6RmlsZUFjY2Vzc1Blcm1pc3Npb246OlVzZXIsIGZhaWxJZkZpbGVFeGlz
dHMpOwpAQCAtNDU1LDEyICs0NTQsMTIgQEAgTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxlKGNvbnN0
IFN0cmluZyYgcAogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIHZvaWQqIG1hcCA9
IGNvbnN0X2Nhc3Q8dm9pZCo+KG1hcHBlZEZpbGUuZGF0YSgpKTsKLSAgICB1aW50OF90KiBtYXBE
YXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1hcCk7CisgICAgYXV0byBtYXAgPSBtYXBwZWRG
aWxlLmRhdGEoKS5kYXRhKCk7CisgICAgYXV0byBtYXBEYXRhID0gbWFwOwogCi0gICAgYXBwbHko
WyZtYXBEYXRhXShjb25zdCB1aW50OF90KiBjaHVuaywgc2l6ZV90IGNodW5rU2l6ZSkgewotICAg
ICAgICBtZW1jcHkobWFwRGF0YSwgY2h1bmssIGNodW5rU2l6ZSk7Ci0gICAgICAgIG1hcERhdGEg
Kz0gY2h1bmtTaXplOworICAgIGFwcGx5KFsmbWFwRGF0YV0oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+
IGNodW5rKSB7CisgICAgICAgIG1lbWNweShtYXBEYXRhLCBjaHVuay5kYXRhKCksIGNodW5rLnNp
emUoKSk7CisgICAgICAgIG1hcERhdGEgKz0gY2h1bmsuc2l6ZSgpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9KTsKIApJbmRleDogU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICsz
NCw3IEBACiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KQEAgLTIxMCw3ICsyMTEsNyBAQCBXVEZfRVhQT1JUX1BSSVZBVEUg
U3RyaW5nIHJlYWxQYXRoKGNvbnN0CiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc1NhZmVUb1Vz
ZU1lbW9yeU1hcEZvclBhdGgoY29uc3QgU3RyaW5nJik7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBtYWtlU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChjb25zdCBTdHJpbmcmKTsKIAotV1RGX0VY
UE9SVF9QUklWQVRFIGJvb2wgdW5tYXBWaWV3T2ZGaWxlKHZvaWQqIGJ1ZmZlciwgc2l6ZV90KTsK
K1dURl9FWFBPUlRfUFJJVkFURSBib29sIHVubWFwVmlld09mRmlsZShTcGFuPHN0ZDo6Ynl0ZT4p
OwogCiBjbGFzcyBNYXBwZWRGaWxlRGF0YSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CkBAIC0yMjMsMTcgKzIyNCwxNSBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5N
YXBwZWRGaWxlRGF0YSgpOwogICAgIE1hcHBlZEZpbGVEYXRhJiBvcGVyYXRvcj0oTWFwcGVkRmls
ZURhdGEmJik7CiAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
ISFtX2ZpbGVEYXRhOyB9Ci0gICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZmlsZURhdGE7IH0KLSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9maWxlU2l6
ZTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fZmls
ZURhdGEuZGF0YSgpOyB9CisgICAgU3BhbjxzdGQ6OmJ5dGU+IGRhdGEoKSBjb25zdCB7IHJldHVy
biBtX2ZpbGVEYXRhOyB9CiAKLSAgICB2b2lkKiBsZWFrSGFuZGxlKCkgeyByZXR1cm4gc3RkOjpl
eGNoYW5nZShtX2ZpbGVEYXRhLCBudWxscHRyKTsgfQorICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBT
cGFuPHN0ZDo6Ynl0ZT4gbGVha0hhbmRsZSgpIHsgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9maWxl
RGF0YSwgeyB9KTsgfQogCiBwcml2YXRlOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIG1h
cEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBGaWxlT3Blbk1vZGUsIE1hcHBlZEZpbGVN
b2RlKTsKIAotICAgIHZvaWQqIG1fZmlsZURhdGEgeyBudWxscHRyIH07Ci0gICAgdW5zaWduZWQg
bV9maWxlU2l6ZSB7IDAgfTsKKyAgICBTcGFuPHN0ZDo6Ynl0ZT4gbV9maWxlRGF0YTsKIH07CiAK
IGlubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGxhdGZvcm1GaWxlSGFuZGxl
IGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUgbWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKQEAgLTI0Nywy
MSArMjQ2LDE5IEBAIGlubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGwKIH0K
IAogaW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShNYXBwZWRGaWxlRGF0YSYm
IG90aGVyKQotICAgIDogbV9maWxlRGF0YShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEs
IG51bGxwdHIpKQotICAgICwgbV9maWxlU2l6ZShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZVNp
emUsIDApKQorICAgIDogbV9maWxlRGF0YShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEs
IHsgfSkpCiB7CiB9CiAKIGlubGluZSBNYXBwZWRGaWxlRGF0YSYgTWFwcGVkRmlsZURhdGE6Om9w
ZXJhdG9yPShNYXBwZWRGaWxlRGF0YSYmIG90aGVyKQogewotICAgIG1fZmlsZURhdGEgPSBzdGQ6
OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEsIG51bGxwdHIpOwotICAgIG1fZmlsZVNpemUgPSBz
dGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZVNpemUsIDApOworICAgIG1fZmlsZURhdGEgPSBzdGQ6
OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEsIHsgfSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQog
CiAvLyBUaGlzIGNyZWF0ZXMgdGhlIGRlc3RpbmF0aW9uIGZpbGUsIG1hcHMgaXQsIHdyaXRlIHRo
ZSBwcm92aWRlZCBkYXRhIHRvIGl0IGFuZCByZXR1cm5zIHRoZSBtYXBwZWQgZmlsZS4KIC8vIFRo
aXMgZnVuY3Rpb24gZmFpbHMgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIGZpbGUgYXQgdGhlIGRlc3Rp
bmF0aW9uIHBhdGguCi1XVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVuY3Rpb248dm9pZChjb25z
dCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYpPiYmIGFwcGx5LCBQbGF0
Zm9ybUZpbGVIYW5kbGUqID0gbnVsbHB0cik7CitXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmls
ZURhdGEgbWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVu
Y3Rpb248dm9pZChjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+Jik+
JiYgYXBwbHksIFBsYXRmb3JtRmlsZUhhbmRsZSogPSBudWxscHRyKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgRmlsZVN5c3RlbUltcGwKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93
dGYvU0hBMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU0hBMS5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL1NIQTEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NiwxMCArNDYsMTAgQEAgU0hBMTo6U0hBMSgpCiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNM
QVJBVElPTlNfRU5ECiB9CiAKLXZvaWQgU0hBMTo6YWRkQnl0ZXMoY29uc3QgdWludDhfdCogaW5w
dXQsIHNpemVfdCBsZW5ndGgpCit2b2lkIFNIQTE6OmFkZEJ5dGVzKFNwYW48Y29uc3Qgc3RkOjpi
eXRlPiBpbnB1dCkKIHsKICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgot
ICAgIENDX1NIQTFfVXBkYXRlKCZtX2NvbnRleHQsIGlucHV0LCBsZW5ndGgpOworICAgIENDX1NI
QTFfVXBkYXRlKCZtX2NvbnRleHQsIGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpKTsKICAgICBB
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIH0KIApAQCAtMTAxLDExICsxMDEsMTEg
QEAgU0hBMTo6U0hBMSgpCiAgICAgcmVzZXQoKTsKIH0KIAotdm9pZCBTSEExOjphZGRCeXRlcyhj
b25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGxlbmd0aCkKK3ZvaWQgU0hBMTo6YWRkQnl0ZXMo
U3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQogewotICAgIHdoaWxlIChsZW5ndGgtLSkgewor
ICAgIGZvciAoYXV0byBieXRlIDogaW5wdXQpIHsKICAgICAgICAgQVNTRVJUKG1fY3Vyc29yIDwg
NjQpOwotICAgICAgICBtX2J1ZmZlclttX2N1cnNvcisrXSA9ICppbnB1dCsrOworICAgICAgICBt
X2J1ZmZlclttX2N1cnNvcisrXSA9IHN0ZDo6dG9faW50ZWdlcjx1aW50OF90PihieXRlKTsKICAg
ICAgICAgKyttX3RvdGFsQnl0ZXM7CiAgICAgICAgIGlmIChtX2N1cnNvciA9PSA2NCkKICAgICAg
ICAgICAgIHByb2Nlc3NCbG9jaygpOwpJbmRleDogU291cmNlL1dURi93dGYvU0hBMS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NIQTEuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dURi93dGYvU0hBMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgPGFycmF5PgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAt
NDUsMTUgKzQ2LDExIEBAIGNsYXNzIFNIQTEgewogcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBTSEExKCk7CiAKLSAgICB2b2lkIGFkZEJ5dGVzKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
aW5wdXQpCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkQnl0ZXMoU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkZEJ5dGVzKFQmJiBk
YXRhKQogICAgIHsKLSAgICAgICAgYWRkQnl0ZXMoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkp
OworICAgICAgICByZXR1cm4gYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+
KGRhdGEpIH0pKTsKICAgICB9Ci0gICAgdm9pZCBhZGRCeXRlcyhjb25zdCBDU3RyaW5nJiBpbnB1
dCkKLSAgICB7Ci0gICAgICAgIGFkZEJ5dGVzKGlucHV0LmRhdGFBc1VJbnQ4UHRyKCksIGlucHV0
Lmxlbmd0aCgpKTsKLSAgICB9Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkQnl0ZXMo
Y29uc3QgdWludDhfdCogaW5wdXQsIHNpemVfdCBsZW5ndGgpOwogCiAgICAgLy8gU2l6ZSBvZiB0
aGUgU0hBMSBoYXNoCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBjb25zdGV4cHIgc2l6
ZV90IGhhc2hTaXplID0gMjA7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dURi93dGYvVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxMyw2ICs2MTMsNyBAQCBw
cml2YXRlOgogCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBUIFZhbHVlVHlwZTsKKyAgICB0eXBlZGVm
IFQgdmFsdWVfdHlwZTsKIAogICAgIHR5cGVkZWYgVCogaXRlcmF0b3I7CiAgICAgdHlwZWRlZiBj
b25zdCBUKiBjb25zdF9pdGVyYXRvcjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL2NmL1NwYW5DRi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL2NmL1NwYW5DRi5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XVEYvd3RmL2NmL1NwYW5DRi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPENvcmVGb3VuZGF0
aW9uL0NvcmVGb3VuZGF0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KKworbmFtZXNwYWNl
IFdURiB7CisKK2lubGluZSBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYXNCeXRlcyhDRkRhdGFSZWYg
ZGF0YSkKK3sKKyAgICByZXR1cm4geyByZWludGVycHJldF9jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+
KENGRGF0YUdldEJ5dGVQdHIoZGF0YSkpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KENGRGF0YUdldExl
bmd0aChkYXRhKSkgfTsKK30KKworfQorCit1c2luZyBXVEY6OmFzQnl0ZXM7CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9jb2NvYS9TcGFuQ29jb2EuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9jb2NvYS9TcGFuQ29jb2EuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9jb2Nv
YS9TcGFuQ29jb2EuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNp
bmNsdWRlIDx3dGYvU3Bhbi5oPgorCituYW1lc3BhY2UgV1RGIHsKKworaW5saW5lIFNwYW48Y29u
c3Qgc3RkOjpieXRlPiBhc0J5dGVzKE5TRGF0YSAqZGF0YSkKK3sKKyAgICByZXR1cm4geyByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxlbmd0aCB9
OworfQorCit9CisKK3VzaW5nIFdURjo6YXNCeXRlczsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3Bl
cnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIENvZGVyPENTdHJpbmc+OjplbmNvZGUoRW5j
b2RlciYgZW5jCiAKICAgICB1aW50MzJfdCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAg
ZW5jb2RlciA8PCBsZW5ndGg7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3Ry
aW5nLmRhdGFBc1VJbnQ4UHRyKCksIGxlbmd0aCk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoc3RyaW5nLmJ5dGVzKCkpOwogfQogCiBzdGQ6Om9wdGlvbmFsPENTdHJpbmc+IENv
ZGVyPENTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKQEAgLTc4LDcgKzc4LDcgQEAg
c3RkOjpvcHRpb25hbDxDU3RyaW5nPiBDb2RlcjxDU3RyaW5nPjo6ZAogCiAgICAgY2hhciogYnVm
ZmVyOwogICAgIENTdHJpbmcgc3RyaW5nID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZCgqbGVu
Z3RoLCBidWZmZXIpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgKmxlbmd0aCkpCisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgcmVpbnRlcnByZXRfY2FzdDxzdGQ6OmJ5
dGUqPihidWZmZXIpLCAqbGVuZ3RoIH0pKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owog
CiAgICAgcmV0dXJuIHN0cmluZzsKQEAgLTk2LDExICs5Niw3IEBAIHZvaWQgQ29kZXI8U3RyaW5n
Pjo6ZW5jb2RlKEVuY29kZXImIGVuY28KICAgICBib29sIGlzOEJpdCA9IHN0cmluZy5pczhCaXQo
KTsKIAogICAgIGVuY29kZXIgPDwgbGVuZ3RoIDw8IGlzOEJpdDsKLQotICAgIGlmIChpczhCaXQp
Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0cmluZy5jaGFyYWN0ZXJz
OCgpLCBsZW5ndGgpOwotICAgIGVsc2UKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnMx
NigpKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoc3RyaW5nLmJ5dGVzKCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KQEAgLTExMiw3ICsxMDgsNyBAQCBzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8
U3RyaW5nPiBkZWNvCiAKICAgICBDaGFyYWN0ZXJUeXBlKiBidWZmZXI7CiAgICAgU3RyaW5nIHN0
cmluZyA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihidWZmZXIpLCBsZW5ndGggKiBzaXplb2YoQ2hhcmFjdGVyVHlwZSkpKQorICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8c3Rk
OjpieXRlKj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJhY3RlclR5cGUpIH0pKQogICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIAogICAgIHJldHVybiBzdHJpbmc7CkBAIC0x
NDIsMTMgKzEzOCwxMyBAQCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gQ29kZXI8U3RyaW5nPjo6ZGVj
CiAKIHZvaWQgQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQogewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpKTsKKyAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3QpOwogfQogCiBzdGQ6Om9wdGlvbmFsPFNIQTE6OkRpZ2Vz
dD4gQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAg
U0hBMTo6RGlnZXN0IHRtcDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHRtcC5kYXRhKCksIHNpemVvZih0bXApKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKHRtcCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgcmV0dXJu
IHRtcDsKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2Rl
cnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50
Q29kZXJzLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNl
L1BlcnNpc3RlbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYg
dmVjdG9yKQogICAgIHsKICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
dmVjdG9yLnNpemUoKSk7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6
ZSgpICogc2l6ZW9mKFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEo
dmVjdG9yKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5Pj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCkBAIC0xNzMsNyArMTcz
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAgICAgICBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IHRlbXA7CiAgICAgICAgIHRlbXAuZ3JvdyhzaXplKTsK
IAotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KHRlbXAuZGF0YSgpKSwgc2l6ZSAqIHNpemVvZihUKSkpCisgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEodGVtcCkpCiAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgICAgIHJldHVybiB0ZW1wOwpJbmRleDogU291cmNl
L1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmNwcAkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29k
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyMyArMzEsMjEgQEAKIG5hbWVzcGFjZSBXVEYg
ewogbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAotRGVjb2Rlcjo6RGVjb2Rlcihjb25zdCB1aW50
OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKQotICAgIDogbV9idWZmZXIoYnVmZmVyKQot
ICAgICwgbV9idWZmZXJQb3NpdGlvbihidWZmZXIpCi0gICAgLCBtX2J1ZmZlckVuZChidWZmZXIg
KyBidWZmZXJTaXplKQorRGVjb2Rlcjo6RGVjb2RlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnVm
ZmVyKQorICAgIDogbV9idWZmZXIoYnVmZmVyLmRhdGEoKSkKKyAgICAsIG1fYnVmZmVyUG9zaXRp
b24oYnVmZmVyLmRhdGEoKSkKKyAgICAsIG1fYnVmZmVyRW5kKGJ1ZmZlci5kYXRhKCkgKyBidWZm
ZXIuc2l6ZSgpKQogewogfQogCi1EZWNvZGVyOjp+RGVjb2RlcigpCi17Ci19CitEZWNvZGVyOjp+
RGVjb2RlcigpID0gZGVmYXVsdDsKIAogYm9vbCBEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdo
VG9Db250YWluKHNpemVfdCBzaXplKSBjb25zdAogewogICAgIHJldHVybiBzaXplIDw9IHN0YXRp
Y19jYXN0PHNpemVfdD4obV9idWZmZXJFbmQgLSBtX2J1ZmZlclBvc2l0aW9uKTsKIH0KIAotY29u
c3QgdWludDhfdCogRGVjb2Rlcjo6YnVmZmVyUG9pbnRlckZvckRpcmVjdFJlYWQoc2l6ZV90IHNp
emUpCitjb25zdCBzdGQ6OmJ5dGUqIERlY29kZXI6OmJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFk
KHNpemVfdCBzaXplKQogewogICAgIGlmICghYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihz
aXplKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC01NSwxNiArNTMsMTYgQEAgY29uc3Qg
dWludDhfdCogRGVjb2Rlcjo6YnVmZmVyUG9pbnRlckZvcgogICAgIGF1dG8gZGF0YSA9IG1fYnVm
ZmVyUG9zaXRpb247CiAgICAgbV9idWZmZXJQb3NpdGlvbiArPSBzaXplOwogCi0gICAgRW5jb2Rl
cjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgZGF0YSwgc2l6ZSk7CisgICAgRW5jb2Rl
cjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgU3BhbiB7IGRhdGEsIHNpemUgfSk7CiAg
ICAgcmV0dXJuIGRhdGE7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQorYm9vbCBEZWNvZGVyOjpkZWNvZGVGaXhlZExl
bmd0aERhdGEoU3BhbjxzdGQ6OmJ5dGU+IGRhdGEpCiB7Ci0gICAgYXV0byBidWZmZXIgPSBidWZm
ZXJQb2ludGVyRm9yRGlyZWN0UmVhZChzaXplKTsKKyAgICBhdXRvIGJ1ZmZlciA9IGJ1ZmZlclBv
aW50ZXJGb3JEaXJlY3RSZWFkKGRhdGEuc2l6ZSgpKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIG1lbWNweShkYXRhLCBidWZmZXIsIHNpemUpOworICAgIG1l
bWNweShkYXRhLmRhdGEoKSwgYnVmZmVyLCBkYXRhLnNpemUoKSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTEzOSw3ICsxMzcsNyBAQCBib29sIERlY29kZXI6OnZlcmlmeUNoZWNrc3VtKCkK
ICAgICBtX3NoYTEuY29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2Vz
dCBzYXZlZEhhc2g7Ci0gICAgaWYgKCFkZWNvZGVGaXhlZExlbmd0aERhdGEoc2F2ZWRIYXNoLmRh
dGEoKSwgc2l6ZW9mKHNhdmVkSGFzaCkpKQorICAgIGlmICghZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHNhdmVkSGFzaCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBjb21wdXRl
ZEhhc2ggPT0gc2F2ZWRIYXNoOwpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVy
c2lzdGVudERlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5j
ZS9QZXJzaXN0ZW50RGVjb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0
Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw3IEBACiAKICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9T
SEExLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2Uv
UGVyc2lzdGVudENvZGVyLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMzUsNyArMzYsMTIgQEAg
bmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIGNsYXNzIERlY29kZXIgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyKGNv
bnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IERlY29kZXIoVCYmIGRhdGEpCisgICAgICAgIDogRGVjb2RlciB7IGFzQnl0ZXMo
U3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihkYXRhKSB9KSB9CisgICAgeworICAgIH0KKworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIH5EZWNvZGVyKCk7CiAKICAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3Qg
eyByZXR1cm4gbV9idWZmZXJFbmQgLSBtX2J1ZmZlcjsgfQpAQCAtNDMsNyArNDksMTEgQEAgcHVi
bGljOgogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIHZl
cmlmeUNoZWNrc3VtKCk7CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgV0FSTl9VTlVTRURfUkVU
VVJOIGJvb2wgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqLCBzaXplX3QpOworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVGaXhlZExlbmd0
aERhdGEoU3BhbjxzdGQ6OmJ5dGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIGRl
Y29kZUZpeGVkTGVuZ3RoRGF0YShUJiYgZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNv
ZGVGaXhlZExlbmd0aERhdGEoYXNXcml0YWJsZUJ5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4o
ZGF0YSkgfSkpOworICAgIH0KIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVy
YXRvcj4+KHN0ZDo6b3B0aW9uYWw8Ym9vbD4mKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVj
b2RlciYgb3BlcmF0b3I+PihzdGQ6Om9wdGlvbmFsPHVpbnQ4X3Q+Jik7CkBAIC04NCw3ICs5NCw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG51bUVsZW1lbnRzIDw9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8c2l6ZV90Pjo6bWF4KCkgLyBzaXplb2YoVCkgJiYgYnVmZmVySXNMYXJnZUVub3VnaFRv
Q29udGFpbihudW1FbGVtZW50cyAqIHNpemVvZihUKSk7CiAgICAgfQogCi0gICAgV1RGX0VYUE9S
VF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBjb25zdCB1aW50OF90KiBidWZmZXJQb2ludGVy
Rm9yRGlyZWN0UmVhZChzaXplX3QgbnVtQnl0ZXMpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBX
QVJOX1VOVVNFRF9SRVRVUk4gY29uc3Qgc3RkOjpieXRlKiBidWZmZXJQb2ludGVyRm9yRGlyZWN0
UmVhZChzaXplX3QgbnVtQnl0ZXMpOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSVBD
RGVjb2RlciA9IGZhbHNlOwogCkBAIC05Miw5ICsxMDIsOSBAQCBwcml2YXRlOgogICAgIFdURl9F
WFBPUlRfUFJJVkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBidWZmZXJJc0xhcmdlRW5vdWdo
VG9Db250YWluKHNpemVfdCkgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4gRGVj
b2RlciYgZGVjb2RlTnVtYmVyKHN0ZDo6b3B0aW9uYWw8VHlwZT4mKTsKIAotICAgIGNvbnN0IHVp
bnQ4X3QqIG1fYnVmZmVyOwotICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyUG9zaXRpb247Ci0g
ICAgY29uc3QgdWludDhfdCogbV9idWZmZXJFbmQ7CisgICAgY29uc3Qgc3RkOjpieXRlKiBtX2J1
ZmZlcjsKKyAgICBjb25zdCBzdGQ6OmJ5dGUqIG1fYnVmZmVyUG9zaXRpb247CisgICAgY29uc3Qg
c3RkOjpieXRlKiBtX2J1ZmZlckVuZDsKIAogICAgIFNIQTEgbV9zaGExOwogfTsKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRF
bmNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMzQgKzMxLDM0IEBACiBuYW1lc3BhY2Ug
V1RGIHsKIG5hbWVzcGFjZSBQZXJzaXN0ZW5jZSB7CiAKLUVuY29kZXI6OkVuY29kZXIoKQotewot
fQotCi1FbmNvZGVyOjp+RW5jb2RlcigpCi17Ci19CitFbmNvZGVyOjpFbmNvZGVyKCkgPSBkZWZh
dWx0OworRW5jb2Rlcjo6fkVuY29kZXIoKSA9IGRlZmF1bHQ7CiAKLXVpbnQ4X3QqIEVuY29kZXI6
Omdyb3coc2l6ZV90IHNpemUpCitzdGQ6OmJ5dGUqIEVuY29kZXI6Omdyb3coc2l6ZV90IHNpemUp
CiB7CiAgICAgc2l6ZV90IG5ld1Bvc2l0aW9uID0gbV9idWZmZXIuc2l6ZSgpOwogICAgIG1fYnVm
ZmVyLmdyb3cobV9idWZmZXIuc2l6ZSgpICsgc2l6ZSk7CiAgICAgcmV0dXJuIG1fYnVmZmVyLmRh
dGEoKSArIG5ld1Bvc2l0aW9uOwogfQogCi12b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9y
RGF0YShTSEExJiBzaGExLCBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3ZvaWQg
RW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmIHNoYTEsIFNwYW48Y29uc3QgdWlu
dDhfdD4gZGF0YSkKK3sKKyAgICByZXR1cm4gdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKHNoYTEsIGFz
Qnl0ZXMoZGF0YSkpOworfQorCit2b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yRGF0YShT
SEExJiBzaGExLCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKICAgICBhdXRvIHR5cGVT
YWx0ID0gU2FsdDx1aW50OF90Kj46OnZhbHVlOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7Ci0gICAgc2hh
MS5hZGRCeXRlcyhkYXRhLCBzaXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmdHlwZVNh
bHQsIDEgfSk7CisgICAgc2hhMS5hZGRCeXRlcyhkYXRhKTsKIH0KIAotdm9pZCBFbmNvZGVyOjpl
bmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCit2
b2lkIEVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
ZGF0YSkKIHsKLSAgICB1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhLCBzaXplKTsK
KyAgICB1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhKTsKIAotICAgIHVpbnQ4X3Qq
IGJ1ZmZlciA9IGdyb3coc2l6ZSk7Ci0gICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7Cisg
ICAgYXV0byogYnVmZmVyID0gZ3JvdyhkYXRhLnNpemUoKSk7CisgICAgbWVtY3B5KGJ1ZmZlciwg
ZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4K
QEAgLTY2LDcgKzY2LDcgQEAgRW5jb2RlciYgRW5jb2Rlcjo6ZW5jb2RlTnVtYmVyKFR5cGUgdmFs
dQogewogICAgIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKG1fc2hhMSwgdmFsdWUp
OwogCi0gICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhzaXplb2YoVHlwZSkpOworICAgIGF1dG8q
IGJ1ZmZlciA9IGdyb3coc2l6ZW9mKFR5cGUpKTsKICAgICBtZW1jcHkoYnVmZmVyLCAmdmFsdWUs
IHNpemVvZihUeXBlKSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQpAQCAtMTI1LDcgKzEyNSw3IEBA
IHZvaWQgRW5jb2Rlcjo6ZW5jb2RlQ2hlY2tzdW0oKQogewogICAgIFNIQTE6OkRpZ2VzdCBoYXNo
OwogICAgIG1fc2hhMS5jb21wdXRlSGFzaChoYXNoKTsKLSAgICBlbmNvZGVGaXhlZExlbmd0aERh
dGEoaGFzaC5kYXRhKCksIGhhc2guc2l6ZSgpKTsKKyAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEo
aGFzaCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3Rl
bnRFbmNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVy
c2lzdGVudEVuY29kZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvcGVy
c2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcs
NyBAQAogCiAjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvU0hBMS5o
PgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1
ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaD4KIApAQCAtNDMsNyArNDQsMTEg
QEAgcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSB+RW5jb2RlcigpOwogCiAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlQ2hlY2tzdW0oKTsKLSAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCosIHNpemVfdCk7
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48
Y29uc3Qgc3RkOjpieXRlPik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBlbmNvZGVG
aXhlZExlbmd0aERhdGEoVCYmIGRhdGEpCisgICAgeworICAgICAgICBlbmNvZGVGaXhlZExlbmd0
aERhdGEoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pKTsKKyAgICB9CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZW51bTxU
Pjo6dmFsdWU+KiA9IG51bGxwdHI+CiAgICAgRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBUJiB0
KQpAQCAtNzAsMjMgKzc1LDIyIEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRW5j
b2RlciYgb3BlcmF0b3I8PChmbG9hdCk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIEVuY29kZXIm
IG9wZXJhdG9yPDwoZG91YmxlKTsKIAotICAgIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlcigpIGNvbnN0
IHsgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKTsgfQotICAgIHNpemVfdCBidWZmZXJTaXplKCkgY29u
c3QgeyByZXR1cm4gbV9idWZmZXIuc2l6ZSgpOyB9Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBjb25zdCB1aW50OF90Kiwg
c2l6ZV90KTsKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnVmZmVyKCkgY29uc3QgeyByZXR1
cm4gbV9idWZmZXI7IH0KKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQg
dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBTcGFuPGNvbnN0IHVpbnQ4X3Q+KTsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEm
LCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPiBz
dGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZvck51bWJlcihTSEExJiwgVHlwZSk7CiAKICAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNJUENFbmNvZGVyID0gZmFsc2U7CiAKIHByaXZhdGU6Ci0K
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiBFbmNvZGVyJiBlbmNvZGVOdW1iZXIoVHlwZSk7
CiAKLSAgICB1aW50OF90KiBncm93KHNpemVfdCk7CisgICAgc3RkOjpieXRlKiBncm93KHNpemVf
dCk7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4gc3RydWN0IFNhbHQ7CiAKLSAgICBW
ZWN0b3I8dWludDhfdCwgNDA5Nj4gbV9idWZmZXI7CisgICAgVmVjdG9yPHN0ZDo6Ynl0ZSwgNDA5
Nj4gbV9idWZmZXI7CiAgICAgU0hBMSBtX3NoYTE7CiB9OwogCkBAIC0xMDYsOCArMTEwLDggQEAg
dGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+CiB2b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9y
TnVtYmVyKFNIQTEmIHNoYTEsIFR5cGUgdmFsdWUpCiB7CiAgICAgYXV0byB0eXBlU2FsdCA9IFNh
bHQ8VHlwZT46OnZhbHVlOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7Ci0gICAgc2hhMS5hZGRCeXRlcyhy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWUpLCBzaXplb2YodmFsdWUpKTsKKyAgICBz
aGExLmFkZEJ5dGVzKFNwYW4geyAmdHlwZVNhbHQsIDEgfSk7CisgICAgc2hhMS5hZGRCeXRlcyhT
cGFuIHsgJnZhbHVlLCAxIH0pOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jh
c2U2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0MCwzOSArMTQwLDM5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IHN0YXRpYyAKICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSAn
PSc7CiB9CiAKLXN0YXRpYyBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoY29u
c3QgdWludDhfdCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0
RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKK3N0YXRpYyBWZWN0b3I8
dWludDhfdD4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0
LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewotICAg
IGF1dG8gZGVzdGluYXRpb25MZW5ndGggPSBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShpbnB1
dExlbmd0aCwgcG9saWN5KTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uTGVuZ3RoID0gY2FsY3VsYXRl
QmFzZTY0RW5jb2RlZFNpemUoaW5wdXQuc2l6ZSgpLCBwb2xpY3kpOwogICAgIGlmICghZGVzdGlu
YXRpb25MZW5ndGgpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBWZWN0b3I8dWludDhfdD4g
ZGVzdGluYXRpb25WZWN0b3IoZGVzdGluYXRpb25MZW5ndGgpOwotICAgIGJhc2U2NEVuY29kZUlu
dGVybmFsKGlucHV0RGF0YUJ1ZmZlciwgaW5wdXRMZW5ndGgsIGRlc3RpbmF0aW9uVmVjdG9yLmRh
dGEoKSwgZGVzdGluYXRpb25MZW5ndGgsIHBvbGljeSwgbWFwKTsKKyAgICBiYXNlNjRFbmNvZGVJ
bnRlcm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBp
bnB1dC5zaXplKCksIGRlc3RpbmF0aW9uVmVjdG9yLmRhdGEoKSwgZGVzdGluYXRpb25MZW5ndGgs
IHBvbGljeSwgbWFwKTsKICAgICByZXR1cm4gZGVzdGluYXRpb25WZWN0b3I7CiB9CiAKLXZvaWQg
YmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRM
ZW5ndGgsIFVDaGFyKiBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9u
TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQor
dm9pZCBiYXNlNjRFbmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0LCBVQ2hhciogZGVz
dGluYXRpb25EYXRhQnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkxlbmd0aCwgQmFzZTY0RW5j
b2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKICAgICBpZiAoIWRlc3Rp
bmF0aW9uTGVuZ3RoKQogICAgICAgICByZXR1cm47Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwo
c3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3Ro
LCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7
CisgICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRl
c3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7CiB9CiAKLXZvaWQgYmFzZTY0RW5jb2RlKGNv
bnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIExDaGFyKiBk
ZXN0aW5hdGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uTGVuZ3RoLCBCYXNlNjRF
bmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordm9pZCBiYXNlNjRFbmNv
ZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0LCBMQ2hhciogZGVzdGluYXRpb25EYXRhQnVm
ZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkxlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGlj
eSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKICAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQog
ICAgICAgICByZXR1cm47Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29u
c3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvbkRh
dGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7CisgICAgYmFzZTY0RW5j
b2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0YSgp
KSwgaW5wdXQuc2l6ZSgpLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3Ro
LCBwb2xpY3ksIG1hcCk7CiB9CiAKLVZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rv
cihjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNl
NjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQorVmVjdG9yPHVpbnQ4
X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwgQmFz
ZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1
cm4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0
RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2
NEVuY29kZUludGVybmFsKGlucHV0LCBwb2xpY3ksIG1hcCk7CiB9CiAKLVN0cmluZyBiYXNlNjRF
bmNvZGVUb1N0cmluZyhjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0
TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQor
U3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwg
QmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBy
ZXR1cm4gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKGlucHV0RGF0YUJ1ZmZlciwgaW5wdXRMZW5n
dGgsIHBvbGljeSwgbWFwKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChp
bnB1dCwgcG9saWN5LCBtYXApKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIHN0
ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGVJbnRlcm5hbChjb25zdCBU
KiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBPcHRpb25TZXQ8QmFzZTY0
RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKQEAgLTI1NCw4NCAr
MjU0LDI3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBzdGQ6Om9wdGlvbmEKICAgICBy
ZXR1cm4gZGVzdGluYXRpb247CiB9CiAKLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjREZWNvZGUoY29uc3QgU3RyaW5nJiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9w
dGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgdW5zaWduZWQgbGVu
Z3RoID0gaW5wdXQubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGggfHwgaW5wdXQuaXM4Qml0KCkp
Ci0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgp
LCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFs
KGlucHV0LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7Ci19Ci0KLXN0ZDo6
b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3RyaW5nVmlldyBpbnB1dCwg
T3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBt
YXApCi17Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7Ci0gICAgaWYgKCFs
ZW5ndGggfHwgaW5wdXQuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRl
cm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7Ci0gICAgcmV0
dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIG9w
dGlvbnMsIG1hcCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRE
ZWNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29k
ZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgaWYgKGlucHV0
LnNpemUoKSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKLSAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5w
dXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIG9wdGlvbnMsIG1hcCk7Ci19Ci0KLXN0ZDo6b3B0aW9u
YWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1
dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1h
cCBtYXApCitzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKFNwYW48
Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9w
dGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7CiAgICAgaWYgKGlucHV0LnNpemUoKSA+IHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpLCBvcHRpb25zLCBt
YXApOwogfQogCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNv
bnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgT3B0aW9uU2V0PEJhc2U2NERlY29k
ZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgcmV0dXJuIGJh
c2U2NERlY29kZUludGVybmFsKGRhdGEsIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKLX0KLQotc3Rk
OjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBjaGFyKiBkYXRh
LCB1bnNpZ25lZCBsZW5ndGgsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRpb25z
LCBCYXNlNjREZWNvZGVNYXAgbWFwKQotewotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5h
bChyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oZGF0YSksIGxlbmd0aCwgb3B0aW9ucywg
bWFwKTsKLX0KLQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29k
ZShjb25zdCBTdHJpbmcmIGlucHV0KQorc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJh
c2U2NERlY29kZShjb25zdCBTdHJpbmcmIGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0
aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKICAgICB1bnNpZ25lZCBsZW5n
dGggPSBpbnB1dC5sZW5ndGgoKTsKICAgICBpZiAoIWxlbmd0aCB8fCBpbnB1dC5pczhCaXQoKSkK
LSAgICAgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnM4KCks
IGxlbmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7Ci0gICAgcmV0dXJuIGJhc2U2NERl
Y29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIHsgfSwgQmFzZTY0RGVj
b2RlTWFwOjpVUkwpOworICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQu
Y2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOworICAgIHJldHVybiBiYXNlNjRE
ZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXAp
OwogfQogCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFN0
cmluZ1ZpZXcgaW5wdXQpCitzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVj
b2RlKFN0cmluZ1ZpZXcgaW5wdXQsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRp
b25zLCBCYXNlNjREZWNvZGVNYXAgbWFwKQogewogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0
Lmxlbmd0aCgpOwogICAgIGlmICghbGVuZ3RoIHx8IGlucHV0LmlzOEJpdCgpKQotICAgICAgICBy
ZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCB7
IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJu
YWwoaW5wdXQuY2hhcmFjdGVyczE2KCksIGxlbmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVS
TCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUo
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKLXsKLSAgICBpZiAoaW5wdXQuc2l6ZSgpID4g
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQotICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5kYXRhKCks
IGlucHV0LnNpemUoKSwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7Ci19Ci0KLXN0ZDo6b3B0
aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+
JiBpbnB1dCkKLXsKLSAgICBpZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHJldHVy
biBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihp
bnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCksIHsgfSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOwot
fQotCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0
IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gYmFzZTY0RGVj
b2RlSW50ZXJuYWwoZGF0YSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKLX0K
LQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBj
aGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUlu
dGVybmFsKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBsZW5ndGgsIHsg
fSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOworICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50
ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOworICAgIHJl
dHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBv
cHRpb25zLCBtYXApOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL3RleHQvQmFzZTY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9CYXNl
NjQuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCkBAIC01Niw1NCArNTcsMzUgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBtYXhpbXVtQmFzZTY0TAogLy8gUmF0aGVyIHRoYW4gYmVpbmcgcGVyZmVjdGx5IHByZWNp
c2UsIHRoaXMgaXMgYSBiaXQgY29uc2VydmF0aXZlLgogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBtYXhpbXVtQmFzZTY0RW5jb2RlcklucHV0QnVmZmVyU2l6ZSA9IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSAvIDc3ICogNzYgLyA0ICogMyAtIDI7CiAKLVdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQsIFVDaGFyKiwg
dW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJ
bnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci1X
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVk
LCBMQ2hhciosIHVuc2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xp
Y3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRl
ZmF1bHQpOworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2RlKFNwYW48Y29uc3Qg
c3RkOjpieXRlPiwgVUNoYXIqIGRlc3RpbmF0aW9uQnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlv
bkJ1ZmZlclNpemUsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9O
b3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7
CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+LCBMQ2hhciogZGVzdGluYXRpb25CdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uQnVmZmVy
U2l6ZSwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2Vy
dExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKIAotV1RG
X0VYUE9SVF9QUklWQVRFIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25z
dCB2b2lkKiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGlj
eTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVm
YXVsdCk7Ci1WZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05v
dEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsK
LVZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8Y2hhcj4m
LCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZz
LCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwotVmVjdG9yPHVp
bnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IENTdHJpbmcmLCBCYXNlNjRFbmNvZGVQ
b2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVN
YXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwotCi1XVEZfRVhQT1JUX1BSSVZBVEUgU3Ry
aW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgQmFzZTY0RW5j
b2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5j
b2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKLVN0cmluZyBiYXNlNjRFbmNvZGVU
b1N0cmluZyhjb25zdCBWZWN0b3I8dWludDhfdD4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNl
NjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRF
bmNvZGVNYXA6OkRlZmF1bHQpOwotU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IFZl
Y3RvcjxjaGFyPiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9O
b3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7
Ci1TdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgQ1N0cmluZyYsIEJhc2U2NEVuY29k
ZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29k
ZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgVmVj
dG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKFNwYW48Y29uc3Qgc3RkOjpieXRlPiwg
QmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywg
QmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihUJiYsIEJhc2U2
NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2
NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CiAKK1dURl9FWFBPUlRfUFJJ
VkFURSBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+LCBC
YXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBC
YXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKFQmJiwgQmFzZTY0RW5jb2RlUG9s
aWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFw
ID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKKworV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6
b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1h
cCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpv
cHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBTdHJpbmcmLCBPcHRp
b25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2
NERlY29kZU1hcDo6RGVmYXVsdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxW
ZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShTdHJpbmdWaWV3LCBPcHRpb25TZXQ8QmFzZTY0
RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6
RGVmYXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGJhc2U2NERlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mLCBPcHRpb25TZXQ8QmFzZTY0
RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6
RGVmYXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGJhc2U2NERlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mLCBPcHRpb25TZXQ8QmFzZTY0RGVj
b2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVm
YXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+
IGJhc2U2NERlY29kZShjb25zdCB1aW50OF90KiwgdW5zaWduZWQsIE9wdGlvblNldDxCYXNlNjRE
ZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpE
ZWZhdWx0KTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90
Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCwgT3B0aW9uU2V0PEJhc2U2NERl
Y29kZU9wdGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRl
ZmF1bHQpOwotCi1pbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJh
c2U2NEVuY29kZU1hcCBtYXApCi17Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlu
cHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7Ci19Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25z
dF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+PiwgU3RyaW5nPiAmJiAhc3RkOjppc19zYW1l
X3Y8c3RkOjpyZW1vdmVfY29uc3RfdDxzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxUPj4sIFN0cmlu
Z1ZpZXc+PiogPSBudWxscHRyPgorc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2
NERlY29kZShUJiYsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0
RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKIAotaW5saW5lIFZlY3Rvcjx1
aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBC
YXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordGVtcGxhdGU8
dHlwZW5hbWUgVD4gVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKFQmJiBpbnB1
dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAg
ICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCks
IHBvbGljeSwgbWFwKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoYXNCeXRlcyhT
cGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGlucHV0KSB9KSwgcG9saWN5LCBtYXApOwogfQogCi1pbmxp
bmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IENTdHJpbmcmIGlu
cHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordGVt
cGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKFQmJiBpbnB1dCwg
QmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBy
ZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwg
cG9saWN5LCBtYXApOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhhc0J5dGVzKFNw
YW4geyBzdGQ6OmZvcndhcmQ8VD4oaW5wdXQpIH0pLCBwb2xpY3ksIG1hcCk7CiB9CiAKLWlubGlu
ZSBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1
dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZV92PHN0ZDo6cmVt
b3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmc+ICYmICFzdGQ6
OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+
PiwgU3RyaW5nVmlldz4+Kj4KK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRE
ZWNvZGUoVCYmIGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywg
QmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmco
aW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSwgbWFwKTsKLX0KLQotaW5saW5lIFN0
cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBCYXNl
NjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQotewotICAgIHJldHVy
biBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5
LCBtYXApOwotfQotCi1pbmxpbmUgU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IENT
dHJpbmcmIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAg
bWFwKQotewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlu
cHV0Lmxlbmd0aCgpLCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZShhc0J5
dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oaW5wdXQpIH0pLCBvcHRpb25zLCBtYXApOwogfQog
CiAKQEAgLTExMiw2MSArOTQsNTcgQEAgaW5saW5lIFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmlu
Zyhjb25zdAogLy8gVGhpcyBmb3JtYXQgdXNlcyAnLScgYW5kICdfJyBpbnN0ZWFkIG9mICcrJyBh
bmQgJy8nIHJlc3BlY3RpdmVseS4KIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAK
LVZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihjb25zdCB2b2lkKiwgdW5z
aWduZWQpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9y
KGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRv
VmVjdG9yKGNvbnN0IENTdHJpbmcmKTsKK1ZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVU
b1ZlY3RvcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVj
dG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKFQmJik7CiAKLVN0cmluZyBiYXNl
NjRVUkxFbmNvZGVUb1N0cmluZyhjb25zdCB2b2lkKiwgdW5zaWduZWQpOwotU3RyaW5nIGJhc2U2
NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOwotU3RyaW5nIGJhc2U2
NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotU3RyaW5nIGJhc2U2NFVS
TEVuY29kZVRvU3RyaW5nKGNvbnN0IENTdHJpbmcmKTsKK1N0cmluZyBiYXNlNjRVUkxFbmNvZGVU
b1N0cmluZyhTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3Ry
aW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKFQmJik7CiAKLVdURl9FWFBPUlRfUFJJVkFURSBz
dGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFN0cmlu
ZyYpOwotV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjRVUkxEZWNvZGUoU3RyaW5nVmlldyk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRp
b25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBWZWN0b3I8dWludDhf
dD4mKTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4g
YmFzZTY0VVJMRGVjb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotV1RGX0VYUE9SVF9QUklWQVRF
IHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgdWlu
dDhfdCosIHVuc2lnbmVkKTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rv
cjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCk7CitzdGQ6
Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFNwYW48Y29uc3Qgc3Rk
OjpieXRlPik7CitzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2Rl
KGNvbnN0IFN0cmluZyYpOworc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVS
TERlY29kZShTdHJpbmdWaWV3KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lm
X3Q8IXN0ZDo6aXNfc2FtZV92PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJl
bmNlX3Q8VD4+LCBTdHJpbmc+ICYmICFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90
PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+PiwgU3RyaW5nVmlldz4+KiA9IG51bGxwdHI+Citz
dGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFQmJik7CiAKLWlu
bGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3Qgdm9pZCog
aW5wdXQsIHVuc2lnbmVkIGxlbmd0aCkKK2lubGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJM
RW5jb2RlVG9WZWN0b3IoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQogewotICAgIHJldHVy
biBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dCwgbGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3k6
OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1Zl
Y3RvcihpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJM
KTsKIH0KIAotaW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihj
b25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVjdG9y
PHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKFQmJiBpbnB1dCkKIHsKLSAgICByZXR1
cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJhc2U2
NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJh
c2U2NEVuY29kZVRvVmVjdG9yKHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCksIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBWZWN0b3I8dWlu
dDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCkK
K2lubGluZSBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRh
KCksIGlucHV0LnNpemUoKSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1h
cDo6VVJMKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5wdXQsIEJhc2U2NEVu
Y29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBWZWN0
b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgQ1N0cmluZyYgaW5wdXQp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoVCYm
IGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRhKCks
IGlucHV0Lmxlbmd0aCgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFw
OjpVUkwpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhzdGQ6OmZvcndhcmQ8VD4o
aW5wdXQpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwog
fQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqIGlu
cHV0LCB1bnNpZ25lZCBsZW5ndGgpCitpbmxpbmUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGJhc2U2NFVSTERlY29kZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCiB7Ci0gICAg
cmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LCBsZW5ndGgsIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29k
ZShpbnB1dCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBTdHJpbmcg
YmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKK2lu
bGluZSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0
IFN0cmluZyYgaW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0
LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5j
b2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjREZWNvZGUoaW5wdXQsIHsgfSwgQmFzZTY0
RGVjb2RlTWFwOjpVUkwpOwogfQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3Ry
aW5nKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW5wdXQpCitpbmxpbmUgc3RkOjpvcHRpb25hbDxWZWN0
b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShTdHJpbmdWaWV3IGlucHV0KQogewotICAgIHJl
dHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgQmFz
ZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKKyAgICByZXR1cm4g
YmFzZTY0RGVjb2RlKGlucHV0LCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKIH0KIAotaW5s
aW5lIFN0cmluZyBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhjb25zdCBDU3RyaW5nJiBpbnB1dCkK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZV92PHN0
ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmc+ICYm
ICFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5j
ZV90PFQ+PiwgU3RyaW5nVmlldz4+Kj4KK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjRVUkxEZWNvZGUoVCYmIGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0
cmluZyhpbnB1dC5kYXRhKCksIGlucHV0Lmxlbmd0aCgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVS
TCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjRVUkxEZWNvZGUoYXNC
eXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGlucHV0KSB9KSk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBpbmxpbmUgYm9vbCBpc0Jhc2U2NE9yQmFzZTY0
VVJMQ2hhcmFjdGVyKENoYXJhY3RlclR5cGUgYykKQEAgLTIwOCw1NyArMTg2LDM2IEBAIGlubGlu
ZSB1bnNpZ25lZCBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2kKIH0KIAogc3RydWN0IEJhc2U2NFNw
ZWNpZmljYXRpb24gewotICAgIGNvbnN0IHZvaWQqIGlucHV0RGF0YTsKLSAgICB1bnNpZ25lZCBp
bnB1dExlbmd0aDsKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXREYXRhOwogICAgIEJh
c2U2NEVuY29kZVBvbGljeSBwb2xpY3k7CiAgICAgQmFzZTY0RW5jb2RlTWFwIG1hcDsKIH07CiAK
LWlubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NEVuY29kZWQoY29uc3Qgdm9pZCogaW5w
dXREYXRhLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9
IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCBtYXAg
PSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpCi17Ci0gICAgcmV0dXJuIHsgaW5wdXREYXRhLCBp
bnB1dExlbmd0aCwgcG9saWN5LCBtYXAgfTsKLX0KLQotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRp
b24gYmFzZTY0RW5jb2RlZChjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0LCBCYXNlNjRFbmNv
ZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcykKLXsK
LSAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9s
aWN5KTsKLX0KLQotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChjb25z
dCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0
RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcykKLXsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2Rl
ZChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5KTsKLX0KLQotaW5saW5lIEJhc2U2
NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChjb25zdCBDU3RyaW5nJiBpbnB1dCwgQmFzZTY0
RW5jb2RlUG9saWN5IHBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMp
Ci17Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgo
KSwgcG9saWN5KTsKLX0KLQotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5j
b2RlZChjb25zdCB2b2lkKiBpbnB1dERhdGEsIHVuc2lnbmVkIGlucHV0TGVuZ3RoKQoraW5saW5l
IEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
aW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRv
Tm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgbWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZh
dWx0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0RGF0YSwgaW5wdXRMZW5ndGgs
IEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0
dXJuIHsgaW5wdXQsIHBvbGljeSwgbWFwIH07CiB9CiAKLWlubGluZSBCYXNlNjRTcGVjaWZpY2F0
aW9uIGJhc2U2NFVSTEVuY29kZWQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChUJiYgaW5w
dXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90
SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgbWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0
KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgp
LCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJl
dHVybiBiYXNlNjRFbmNvZGVkKGFzQnl0ZXMoU3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCkg
fSksIHBvbGljeSwgbWFwKTsKIH0KIAotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0
VVJMRW5jb2RlZChjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0KQoraW5saW5lIEJhc2U2NFNwZWNp
ZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCiB7
Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJh
c2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJu
IGJhc2U2NEVuY29kZWQoaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNv
ZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NFVSTEVu
Y29kZWQoY29uc3QgQ1N0cmluZyYgaW5wdXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBCYXNlNjRT
cGVjaWZpY2F0aW9uIGJhc2U2NFVSTEVuY29kZWQoVCYmIGlucHV0KQogewotICAgIHJldHVybiBi
YXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29k
ZWQoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGlucHV0KSB9KSwgQmFzZTY0RW5jb2Rl
UG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKIH0KIAogdGVtcGxhdGU8PiBjbGFz
cyBTdHJpbmdUeXBlQWRhcHRlcjxCYXNlNjRTcGVjaWZpY2F0aW9uPiB7CiBwdWJsaWM6CiAgICAg
U3RyaW5nVHlwZUFkYXB0ZXIoY29uc3QgQmFzZTY0U3BlY2lmaWNhdGlvbiYgYmFzZTY0KQogICAg
ICAgICA6IG1fYmFzZTY0IHsgYmFzZTY0IH0KLSAgICAgICAgLCBtX2VuY29kZWRMZW5ndGggeyBj
YWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShiYXNlNjQuaW5wdXRMZW5ndGgsIGJhc2U2NC5wb2xp
Y3kpIH0KKyAgICAgICAgLCBtX2VuY29kZWRMZW5ndGggeyBjYWxjdWxhdGVCYXNlNjRFbmNvZGVk
U2l6ZShiYXNlNjQuaW5wdXREYXRhLnNpemUoKSwgYmFzZTY0LnBvbGljeSkgfQogICAgIHsKICAg
ICB9CiAKQEAgLTI2Nyw3ICsyMjQsNyBAQCBwdWJsaWM6CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiB2b2lkIHdyaXRlVG8oQ2hhcmFjdGVyVHlwZSogZGVzdGluYXRpb24p
IGNvbnN0CiAgICAgewotICAgICAgICBiYXNlNjRFbmNvZGUobV9iYXNlNjQuaW5wdXREYXRhLCBt
X2Jhc2U2NC5pbnB1dExlbmd0aCwgZGVzdGluYXRpb24sIG1fZW5jb2RlZExlbmd0aCwgbV9iYXNl
NjQucG9saWN5LCBtX2Jhc2U2NC5tYXApOworICAgICAgICBiYXNlNjRFbmNvZGUobV9iYXNlNjQu
aW5wdXREYXRhLCBkZXN0aW5hdGlvbiwgbV9lbmNvZGVkTGVuZ3RoLCBtX2Jhc2U2NC5wb2xpY3ks
IG1fYmFzZTY0Lm1hcCk7CiAgICAgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dURi93dGYv
dGV4dC9DU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9DU3RyaW5n
LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMu
aD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvU3Bhbi5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtMzksOSArNDAsMTEg
QEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoQwogY2xhc3MgQ1N0cmlu
Z0J1ZmZlciBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPENTdHJpbmdCdWZmZXI+IHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihDU3RyaW5nQnVmZmVy
KTsKIHB1YmxpYzoKLSAgICBjb25zdCBjaGFyKiBkYXRhKCkgeyByZXR1cm4gbXV0YWJsZURhdGEo
KTsgfQorICAgIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PENT
dHJpbmdCdWZmZXIqPih0aGlzKS0+bXV0YWJsZURhdGEoKTsgfQogICAgIHNpemVfdCBsZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQogCisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+
IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4gYXNCeXRlcyhTcGFuIHsgZGF0YSgpLCBsZW5ndGgoKSB9
KTsgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDU3RyaW5nOwogCkBAIC02Niw2ICs2
OSwyMCBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBDU3RyaW5nIG5l
d1VuaW5pdGlhbGl6ZWQoc2l6ZV90IGxlbmd0aCwgY2hhciomIGNoYXJhY3RlckJ1ZmZlcik7CiAg
ICAgQ1N0cmluZyhIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IG1fYnVmZmVyKEhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSkgeyB9CiAKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fYnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIG1f
YnVmZmVyLT5ieXRlcygpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFNwYW48
c3RkOjpieXRlPiBtdXRhYmxlQnl0ZXMoKQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8gbXV0YWJs
ZURhdGEgPSB0aGlzLT5tdXRhYmxlRGF0YSgpKQorICAgICAgICAgICAgcmV0dXJuIGFzV3JpdGFi
bGVCeXRlcyhTcGFuIHsgbXV0YWJsZURhdGEsIG1fYnVmZmVyLT5sZW5ndGgoKSB9KTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICB9CisKICAgICBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3QKICAg
ICB7CiAgICAgICAgIHJldHVybiBtX2J1ZmZlciA/IG1fYnVmZmVyLT5kYXRhKCkgOiBudWxscHRy
OwpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5
NCw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBMQ2hhciogY2hhcmFjdGVyczgoKSBjb25zdDsKICAg
ICBjb25zdCBVQ2hhciogY2hhcmFjdGVyczE2KCkgY29uc3Q7CiAKKyAgICBTcGFuPGNvbnN0IHN0
ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25zdDsKKwogICAgIGJvb2wgaXNBbGxBU0NJSSgpIGNvbnN0Owog
CiAgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CkBAIC00MjQsNiArNDI2LDEzIEBAIGlubGlu
ZSBjb25zdCBVQ2hhciogU3RyaW5nVmlldzo6Y2hhcmFjdGUKICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgVUNoYXIqPihtX2NoYXJhY3RlcnMpOwogfQogCitpbmxpbmUgU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+IFN0cmluZ1ZpZXc6OmJ5dGVzKCkgY29uc3QKK3sKKyAgICBpZiAoaXM4Qml0KCkp
CisgICAgICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSB9
KTsKKyAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgY2hhcmFjdGVyczE2KCksIGxlbmd0aCgpIH0p
OworfQorCiBpbmxpbmUgYm9vbCBTdHJpbmdWaWV3Ojppc0FsbEFTQ0lJKCkgY29uc3QKIHsKICAg
ICBpZiAoaXM4Qml0KCkpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHJldmlzaW9uIDI3
ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPHd0Zi9G
dW5jdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQVND
SUlMaXRlcmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvSW50ZWdlclRvU3RyaW5nQ29udmVyc2lv
bi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KQEAgLTEzNCw2ICsxMzUsNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiAhbV9pbXBsIHx8IG1f
aW1wbC0+aXM4Qml0KCk7IH0KIAogICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5sZW5ndGgoKSAqIChpczhCaXQoKSA/IHNpemVvZihMQ2hh
cikgOiBzaXplb2YoVUNoYXIpKSA6IDA7IH0KKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0
ZXMoKSBjb25zdDsKIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBDU3RyaW5nIGFzY2lpKCkgY29u
c3Q7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIENTdHJpbmcgbGF0aW4xKCkgY29uc3Q7CkBAIC00
ODMsNiArNDg1LDE2IEBAIHRlbXBsYXRlPD4gaW5saW5lIGNvbnN0IFVDaGFyKiBTdHJpbmc6OmMK
ICAgICByZXR1cm4gY2hhcmFjdGVyczE2KCk7CiB9CiAKK2lubGluZSBTcGFuPGNvbnN0IHN0ZDo6
Ynl0ZT4gU3RyaW5nOjpieXRlcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ltcGwpCisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICBpZiAobV9pbXBsLT5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJu
IGFzQnl0ZXMoU3BhbiB7IG1faW1wbC0+Y2hhcmFjdGVyczgoKSwgbV9pbXBsLT5sZW5ndGgoKSB9
KTsKKyAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgbV9pbXBsLT5jaGFyYWN0ZXJzMTYoKSwgbV9p
bXBsLT5sZW5ndGgoKSB9KTsKK30KKwogaW5saW5lIFVDaGFyIFN0cmluZzo6Y2hhcmFjdGVyQXQo
dW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ltcGwgfHwgaW5kZXggPj0gbV9p
bXBsLT5sZW5ndGgoKSkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzYzLDkgKzM2Myw5IEBAIFN0cmluZyBjcmVhdGVUZW1wb3JhcnlE
aXJlY3RvcnkoKQogICAgIH0pOwogfQogCi1ib29sIHVubWFwVmlld09mRmlsZSh2b2lkKiBidWZm
ZXIsIHNpemVfdCkKK2Jvb2wgdW5tYXBWaWV3T2ZGaWxlKFNwYW48c3RkOjpieXRlPiBkYXRhKQog
ewotICAgIHJldHVybiBVbm1hcFZpZXdPZkZpbGUoYnVmZmVyKTsKKyAgICByZXR1cm4gVW5tYXBW
aWV3T2ZGaWxlKGRhdGEuZGF0YSgpKTsKIH0KIAogYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmls
ZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBGaWxlT3Blbk1vZGUgb3Blbk1vZGUs
IE1hcHBlZEZpbGVNb2RlKQpAQCAtMzc0LDcgKzM3NCw3IEBAIGJvb2wgTWFwcGVkRmlsZURhdGE6
Om1hcEZpbGVIYW5kbGUoUGxhdGYKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byBz
aXplID0gZmlsZVNpemUoaGFuZGxlKTsKLSAgICBpZiAoIXNpemUgfHwgKnNpemUgPiBzdGQ6Om51
bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIHx8ICpzaXplID4gc3RkOjpudW1lcmljX2xpbWl0
czxkZWNsdHlwZShtX2ZpbGVTaXplKT46Om1heCgpKSB7CisgICAgaWYgKCFzaXplIHx8ICpzaXpl
ID4gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSB8fCAqc2l6ZSA+IHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZGVjbHR5cGUobV9maWxlRGF0YS5zaXplKCkpPjo6bWF4KCkpIHsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNDAzLDExICs0MDMsMTIgQEAgYm9vbCBNYXBw
ZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0ZgogICAgIGlmICghbWFwcGluZykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9maWxlRGF0YSA9IE1hcFZpZXdPZkZpbGUobWFwcGlu
ZywgZGVzaXJlZEFjY2VzcywgMCwgMCwgKnNpemUpOworICAgIGF1dG8gZGF0YSA9IE1hcFZpZXdP
ZkZpbGUobWFwcGluZywgZGVzaXJlZEFjY2VzcywgMCwgMCwgKnNpemUpOwogICAgIENsb3NlSGFu
ZGxlKG1hcHBpbmcpOwotICAgIGlmICghbV9maWxlRGF0YSkKKyAgICBpZiAoIWRhdGEpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2ZpbGVTaXplID0gKnNpemU7CisKKyAgICBtX2ZpbGVE
YXRhID0gU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpieXRlKj4oZGF0YSksICpzaXplIH07
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgw
IEBACisyMDIxLTA2LTExICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAg
ICBBZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogTW9kdWxlcy9oaWdobGlnaHQv
QXBwSGlnaGxpZ2h0Lmg6CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHQ6OmVuY29kZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHQ6OmRlY29kZSk6CisgICAgICAg
ICogTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6dG9TaGFyZWRCdWZmZXIgY29uc3QpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvclJlc3BvbnNlRGF0YS5oOgor
ICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlQXJyYXlCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
ZGVjb2RlQXJyYXlCdWZmZXIpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oOgorICAgICAgICAoV2ViQ29yZTo6UHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmg6CisgICAgICAgIChX
ZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcjo6ZW5jb2RlIGNvbnN0KToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRXZWJTb2NrZXRBY2Nl
cHQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0J1ZmZlclNvdXJjZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6QnVmZmVyU291cmNlOjpieXRlcyBjb25zdCk6CisgICAgICAgICogYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmRlY29kZSk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvU2VyaWFsaXpl
ZE5GQS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6U2VyaWFsaXpl
ZE5GQTo6cG9pbnRlckF0T2Zmc2V0SW5GaWxlIGNvbnN0KToKKyAgICAgICAgKiBjcnlwdG8vbWFj
L1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
QW5kU3RvcmVNYXN0ZXJLZXkpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Omhhc2hQb2ludGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBhdGNoU3VwcG9ydDo6Y3JlYXRlRGlnZXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OmFkZFN0cmluZ1RvU0hBMSk6IERlbGV0ZWQuCisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZpY2F0ZSk6CisgICAgICAgICogaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yTmV0d29ya0FnZW50OjpnZXRTZXJpYWxpemVkQ2VydGlmaWNhdGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpjcmVhdGVTaGFyZWRCdWZmZXIgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRC
dWZmZXI6OlNoYXJlZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmFw
cGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpkYXRh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmJ5
dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6ZGVjb2RlciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpzaXplIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZGVjb2RlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Nb2RlbC5oOgorICAgICAgICAoV2ViQ29yZTo6TW9kZWw6OmVuY29k
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNb2RlbDo6ZGVjb2RlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6UGl4ZWxC
dWZmZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6ZGVj
b2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNl
Q2FwYWJpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpDYXBhYmlsaXR5VmFsdWVPclJhbmdl
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FwYWJpbGl0eVZhbHVlT3JSYW5n
ZTo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlh
U291cmNlQ2VudGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZFN0cmluZ1RvU0hBMSk6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHA6Cisg
ICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjplbmNvZGVDRkRhdGEpOgorICAgICAgICAoV1RGOjpQ
ZXJzaXN0ZW5jZTo6ZGVjb2RlQ0ZEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRl
U3RhdGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6YmluZEJs
b2IpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaDoKKyAgICAgICAg
KiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzKToKKyAgICAg
ICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTV1NjcmlwdFN0b3JhZ2U6OnN0b3JlKToKKwogMjAyMS0wNi0xMSAgQ2hyaXMg
RHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIExhemlseSBjb21wdXRlIFNlY3Vy
aXR5T3JpZ2luOjptX2lzUG90ZW50aWFsbHlUcnVzdHdvcnRoeSBmb3IgcGVyZm9ybWFuY2UKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvSW5pdERhdGFSZWdpc3Ry
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRp
YS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIHN0YXRpYyBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzYW5p
dGl6ZUtleWkKICAgICBhdXRvIG9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAg
YXV0byBraWRzQXJyYXkgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgZm9yIChhdXRvJiBi
dWZmZXIgOiBrZXlJREJ1ZmZlci52YWx1ZSgpKQotICAgICAgICBraWRzQXJyYXktPnB1c2hTdHJp
bmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgp
KSk7CisgICAgICAgIGtpZHNBcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVUb1N0cmlu
ZyhidWZmZXItPmJ5dGVzKCkpKTsKICAgICBvYmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92
ZShraWRzQXJyYXkpKTsKIAogICAgIENTdHJpbmcganNvbkRhdGEgPSBvYmplY3QtPnRvSlNPTlN0
cmluZygpLnV0ZjgoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0Fw
cEhpZ2hsaWdodC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxp
Z2h0L0FwcEhpZ2hsaWdodC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyAr
NTIsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBBcHBIaWdobGlnaHQ6OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
c2l6ZV90PihoaWdobGlnaHQtPnNpemUoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEoaGlnaGxpZ2h0LT5kYXRhKCksIGhpZ2hsaWdodC0+c2l6ZSgpLCAxKTsKKyAgICBlbmNv
ZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YSgqaGlnaGxpZ2h0LCAxKTsKIAogICAgIGVuY29kZXIg
PDwgdGV4dDsKIApAQCAtNzUsNyArNzUsNyBAQCBzdGQ6Om9wdGlvbmFsPEFwcEhpZ2hsaWdodD4g
QXBwSGlnaGxpZ2h0CiAKICAgICBWZWN0b3I8dWludDhfdD4gaGlnaGxpZ2h0OwogICAgIGhpZ2hs
aWdodC5ncm93KCpsZW5ndGgpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERh
dGEoaGlnaGxpZ2h0LmRhdGEoKSwgaGlnaGxpZ2h0LnNpemUoKSwgMSkpCisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShoaWdobGlnaHQsIDEpKQogICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwogCiAgICAgc3RkOjpvcHRpb25hbDxzdGQ6Om9wdGlvbmFsPFN0cmluZz4+
IHRleHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGln
aHRSYW5nZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGln
aGxpZ2h0L0FwcEhpZ2hsaWdodFJhbmdlRGF0YS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFJhbmdlRGF0YS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgUmVmPFNoYXJlZEJ1ZmZlcj4gQXBwSGln
aGxpZ2h0UmFuZ2VEYXRhOgogewogICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2Rl
cjsKICAgICBlbmNvZGVyIDw8ICp0aGlzOwotICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0
ZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgcmV0dXJuIFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCkpOwogfQogCiB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPiB2b2lkIEFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6Tm9kZVBhdGhDb21wb25lbnQ6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAJKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNo
YW5uZWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIE5ldHdvcmtTZW5kUXVl
dWUgUlRDRGF0YUNoYW5uZWw6OmNyZWF0ZU0KICAgICAgICAgaWYgKCFjaGFubmVsLm1faGFuZGxl
ci0+c2VuZFN0cmluZ0RhdGEodXRmOCkpCiAgICAgICAgICAgICBjaGFubmVsLnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3Nh
Z2VMZXZlbDo6RXJyb3IsICJFcnJvciBzZW5kaW5nIHN0cmluZyB0aHJvdWdoIFJUQ0RhdGFDaGFu
bmVsLiJfcyk7CiAgICAgfSwgWyZjaGFubmVsXShhdXRvJiBzcGFuKSB7Ci0gICAgICAgIGlmICgh
Y2hhbm5lbC5tX2hhbmRsZXItPnNlbmRSYXdEYXRhKHNwYW4uZGF0YSgpLCBzcGFuLnNpemUoKSkp
CisgICAgICAgIGlmICghY2hhbm5lbC5tX2hhbmRsZXItPnNlbmRSYXdEYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNwYW4uZGF0YSgpKSwgc3Bhbi5zaXplKCkpKQogICAgICAg
ICAgICAgY2hhbm5lbC5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFkZENvbnNvbGVNZXNzYWdl
KE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAiRXJyb3Igc2VuZGluZyBi
aW5hcnkgZGF0YSB0aHJvdWdoIFJUQ0RhdGFDaGFubmVsLiJfcyk7CiAgICAgfSwgWyZjaGFubmVs
XShFeGNlcHRpb25Db2RlIGVycm9yQ29kZSkgewogICAgICAgICBpZiAoYXV0byogY29udGV4dCA9
IGNoYW5uZWwuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxh
Y2VtZW50Lm1tCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Bs
dWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTUy
LDYgKzUyLDcgQEAKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0NhdGNoU2NvcGUuaD4KICNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CiAjaW1wb3J0IDxvYmpjL3J1bnRp
bWUuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9TcGFuQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi90ZXh0
L0Jhc2U2NC5oPgogCiAjaW1wb3J0IDxwYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaD4KQEAgLTI0
Niw5ICsyNDcsOSBAQCBzdGF0aWMgSlNWYWx1ZSAqanNWYWx1ZVdpdGhEYXRhSW5Db250ZXh0CiAg
ICAgLy8gRklYTUU6IEFkZCBtYWtlQ0ZTdHJpbmcvbWFrZU5TU3RyaW5nIHRvIGF2b2lkIHVubmVj
ZXNzYXJ5IFN0cmluZyBhbGxvY2F0aW9uLgogICAgIFN0cmluZyBkYXRhNjQ7CiAgICAgaWYgKCFt
aW1lVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6Iiwg
bWltZVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoW2RhdGEgYnl0ZXNdLCBbZGF0YSBs
ZW5ndGhdKSk7CisgICAgICAgIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgbWltZVR5cGUs
ICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoYXNCeXRlcyhkYXRhKSkpOwogICAgIGVsc2UKLSAg
ICAgICAgZGF0YTY0ID0gbWFrZVN0cmluZygiZGF0YTp0ZXh0L3BsYWluO2Jhc2U2NCwiLCBiYXNl
NjRFbmNvZGVkKFtkYXRhIGJ5dGVzXSwgW2RhdGEgbGVuZ3RoXSkpOworICAgICAgICBkYXRhNjQg
PSBtYWtlU3RyaW5nKCJkYXRhOnRleHQvcGxhaW47YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoYXNC
eXRlcyhkYXRhKSkpOwogCiAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aE9iamVjdDooaWQp
ZGF0YTY0LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkgaW5Db250ZXh0OmNvbnRleHRdOwogfQpAQCAt
MzQwLDcgKzM0MSw3IEBAIHN0YXRpYyBKU1ZhbHVlICpqc1ZhbHVlV2l0aEFWTWV0YWRhdGFJdGUK
ICAgICAgICAgaWQgdmFsdWUgPSBpdGVtLnZhbHVlOwogICAgICAgICBOU1N0cmluZyAqbWltZVR5
cGUgPSBbW2l0ZW0gZXh0cmFBdHRyaWJ1dGVzXSBvYmplY3RGb3JLZXk6QCJNSU1FdHlwZSJdOwog
ICAgICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TRGF0YSBjbGFzc11dICYmIG1pbWVU
eXBlKSB7Ci0gICAgICAgICAgICBhdXRvIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgU3Ry
aW5nKG1pbWVUeXBlKSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChbdmFsdWUgYnl0ZXNdLCBb
dmFsdWUgbGVuZ3RoXSkpOworICAgICAgICAgICAgYXV0byBkYXRhNjQgPSBtYWtlU3RyaW5nKCJk
YXRhOiIsIFN0cmluZyhtaW1lVHlwZSksICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoYXNCeXRl
cygoTlNEYXRhICopdmFsdWUpKSk7CiAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6
KF9fYnJpZGdlIE5TU3RyaW5nICopZGF0YTY0LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkgZm9yS2V5
OkAidmFsdWUiXTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRP
YmplY3Q6dmFsdWUgZm9yS2V5OkAidmFsdWUiXTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRpY2F0b3JDb29yZGluYXRvci5j
cHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4v
QXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQs
NyBAQCBzdGF0aWMgUmVmPEFycmF5QnVmZmVyPiBwcm9kdWNlQ2xpZW50RGF0CiAgICAgICAgIG9i
amVjdC0+c2V0U3RyaW5nKCJ0eXBlIl9zLCAid2ViYXV0aG4uZ2V0Il9zKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQotICAgIG9iamVjdC0+c2V0U3RyaW5nKCJjaGFsbGVuZ2UiX3MsIGJhc2U2NFVS
TEVuY29kZVRvU3RyaW5nKGNoYWxsZW5nZS5kYXRhKCksIGNoYWxsZW5nZS5sZW5ndGgoKSkpOwor
ICAgIG9iamVjdC0+c2V0U3RyaW5nKCJjaGFsbGVuZ2UiX3MsIGJhc2U2NFVSTEVuY29kZVRvU3Ry
aW5nKGNoYWxsZW5nZS5ieXRlcygpKSk7CiAgICAgb2JqZWN0LT5zZXRTdHJpbmcoIm9yaWdpbiJf
cywgb3JpZ2luLnRvUmF3U3RyaW5nKCkpOwogCiAgICAgYXV0byB1dGY4SlNPTlN0cmluZyA9IG9i
amVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdXRobi9BdXRoZW50aWNhdG9yUmVzcG9uc2VEYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yUmVzcG9uc2VEYXRhLmgJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0
aGVudGljYXRvclJlc3BvbnNlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBA
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiBzdGF0aWMgdm9pZCBlbmNvZGVBcnJheUJ1ZmZlcihF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBBcnJheUJ1ZmZlciYgYnVmZmVyKQogewogICAgIGVuY29k
ZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ1ZmZlci5ieXRlTGVuZ3RoKCkpOwotICAgIGVu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihi
dWZmZXIuZGF0YSgpKSwgYnVmZmVyLmJ5dGVMZW5ndGgoKSwgMSk7CisgICAgZW5jb2Rlci5lbmNv
ZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLmJ5dGVzKCksIDEpOwogfQogCiB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgpAQCAtNzUsNyArNzUsNyBAQCBSZWZQdHI8QXJyYXlCdWZmZXI+IGRlY29kZUFy
cmF5QnVmZmVyKERlCiAgICAgYXV0byBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKGxl
bmd0aC52YWx1ZSgpLCBzaXplb2YodWludDhfdCkpOwogICAgIGlmICghYnVmZmVyKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihidWZmZXItPmRhdGEoKSksIGxlbmd0aC52YWx1ZSgpLCAx
KSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ1ZmZlci0+d3JpdGFi
bGVCeXRlcygpLCAxKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIGJ1ZmZl
cjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3Jl
ZGVudGlhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRo
bi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTQsNyArNTQsNyBAQCBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRw
dXRzIFB1CiB9CiAKIFB1YmxpY0tleUNyZWRlbnRpYWw6OlB1YmxpY0tleUNyZWRlbnRpYWwoUmVm
PEF1dGhlbnRpY2F0b3JSZXNwb25zZT4mJiByZXNwb25zZSkKLSAgICA6IEJhc2ljQ3JlZGVudGlh
bChiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhyZXNwb25zZS0+cmF3SWQoKS0+ZGF0YSgpLCByZXNw
b25zZS0+cmF3SWQoKS0+Ynl0ZUxlbmd0aCgpKSwgVHlwZTo6UHVibGljS2V5LCBEaXNjb3Zlcnk6
OlJlbW90ZSkKKyAgICA6IEJhc2ljQ3JlZGVudGlhbChiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhy
ZXNwb25zZS0+cmF3SWQoKS0+Ynl0ZXMoKSksIFR5cGU6OlB1YmxpY0tleSwgRGlzY292ZXJ5OjpS
ZW1vdGUpCiAgICAgLCBtX3Jlc3BvbnNlKFdURk1vdmUocmVzcG9uc2UpKQogewogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRp
b25PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRo
bi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmgJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENy
ZWF0aW9uT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsOCArMTQxLDggQEAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9u
czo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBycC5p
ZCA8PCBycC5uYW1lIDw8IHJwLmljb247Ci0gICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50
NjRfdD4odXNlci5pZC5sZW5ndGgoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERh
dGEodXNlci5pZC5kYXRhKCksIHVzZXIuaWQubGVuZ3RoKCksIDEpOworICAgIGVuY29kZXIgPDwg
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHVzZXIuaWQuYnl0ZXMoKS5zaXplKCkpOworICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHVzZXIuaWQuYnl0ZXMoKSwgMSk7CiAgICAgZW5jb2Rl
ciA8PCB1c2VyLmRpc3BsYXlOYW1lIDw8IHVzZXIubmFtZSA8PCB1c2VyLmljb24gPDwgcHViS2V5
Q3JlZFBhcmFtcyA8PCB0aW1lb3V0IDw8IGV4Y2x1ZGVDcmVkZW50aWFscyA8PCBhdXRoZW50aWNh
dG9yU2VsZWN0aW9uIDw8IGF0dGVzdGF0aW9uIDw8IGV4dGVuc2lvbnM7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1Ymxp
Y0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsOCBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgog
dm9pZCBQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcjo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCB0eXBlOwotICAgIGVuY29kZXIgPDwgc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KGlkLmxlbmd0aCgpKTsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShpZC5kYXRhKCksIGlkLmxlbmd0aCgpLCAxKTsKKyAgICBlbmNvZGVyIDw8IHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihpZC5ieXRlcygpLnNpemUoKSk7CisgICAgZW5jb2Rlci5lbmNvZGVG
aXhlZExlbmd0aERhdGEoaWQuYnl0ZXMoKSwgMSk7CiAgICAgZW5jb2RlciA8PCB0cmFuc3BvcnRz
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0
SGFuZHNoYWtlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNv
Y2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk3LDE5ICs5NywyMCBAQCBzdGF0aWMgU3RyaW5nIGdlbmVyYXRlU2VjV2Vi
U29ja2V0S2V5KCkKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG5vbmNlU2l6ZSA9IDE2OwogICAg
IHVuc2lnbmVkIGNoYXIga2V5W25vbmNlU2l6ZV07CiAgICAgY3J5cHRvZ3JhcGhpY2FsbHlSYW5k
b21WYWx1ZXMoa2V5LCBub25jZVNpemUpOwotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmlu
ZyhrZXksIG5vbmNlU2l6ZSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGtleSk7
CiB9CiAKIFN0cmluZyBXZWJTb2NrZXRIYW5kc2hha2U6OmdldEV4cGVjdGVkV2ViU29ja2V0QWNj
ZXB0KGNvbnN0IFN0cmluZyYgc2VjV2ViU29ja2V0S2V5KQogewogICAgIGNvbnN0ZXhwciB1aW50
OF90IHdlYlNvY2tldEtleUdVSURbXSA9ICIyNThFQUZBNS1FOTE0LTQ3REEtOTVDQS1DNUFCMERD
ODVCMTEiOworCiAgICAgU0hBMSBzaGExOwotICAgIENTdHJpbmcga2V5RGF0YSA9IHNlY1dlYlNv
Y2tldEtleS5hc2NpaSgpOwotICAgIHNoYTEuYWRkQnl0ZXMoa2V5RGF0YS5kYXRhQXNVSW50OFB0
cigpLCBrZXlEYXRhLmxlbmd0aCgpKTsKLSAgICBzaGExLmFkZEJ5dGVzKHdlYlNvY2tldEtleUdV
SUQsIHN0ZDo6c2l6ZSh3ZWJTb2NrZXRLZXlHVUlEKSAtIDEpOworICAgIHNoYTEuYWRkQnl0ZXMo
c2VjV2ViU29ja2V0S2V5LmFzY2lpKCkuYnl0ZXMoKSk7CisgICAgc2hhMS5hZGRCeXRlcyh3ZWJT
b2NrZXRLZXlHVUlEKTsKKwogICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwogICAgIHNoYTEuY29tcHV0
ZUhhc2goaGFzaCk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGhhc2guZGF0YSgp
LCBTSEExOjpoYXNoU2l6ZSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGhhc2gp
OwogfQogCiBXZWJTb2NrZXRIYW5kc2hha2U6OldlYlNvY2tldEhhbmRzaGFrZShjb25zdCBVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNv
bnN0IFN0cmluZyYgY2xpZW50T3JpZ2luLCBib29sIGFsbG93Q29va2llcykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvV2ViQ29y
ZS54Y3NjaGVtZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai94Y3NoYXJlZGRhdGEveGNzY2hlbWVzL1dlYkNvcmUueGNzY2hlbWUJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3Nj
aGVtZXMvV2ViQ29yZS54Y3NjaGVtZQkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksOSBAQAog
ICAgICAgaWdub3Jlc1BlcnNpc3RlbnRTdGF0ZU9uTGF1bmNoID0gIk5PIgogICAgICAgZGVidWdE
b2N1bWVudFZlcnNpb25pbmcgPSAiWUVTIgogICAgICAgZGVidWdTZXJ2aWNlRXh0ZW5zaW9uID0g
ImludGVybmFsIgotICAgICAgYWxsb3dMb2NhdGlvblNpbXVsYXRpb24gPSAiWUVTIj4KKyAgICAg
IGVuYWJsZUdQVUZyYW1lQ2FwdHVyZU1vZGUgPSAiMyIKKyAgICAgIGFsbG93TG9jYXRpb25TaW11
bGF0aW9uID0gIllFUyIKKyAgICAgIEdQVVByb2ZpbGVyRW5hYmxlZCA9ICJObyI+CiAgICA8L0xh
dW5jaEFjdGlvbj4KICAgIDxQcm9maWxlQWN0aW9uCiAgICAgICBidWlsZENvbmZpZ3VyYXRpb24g
PSAiUmVsZWFzZSIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0J1ZmZlclNvdXJj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0J1ZmZlclNvdXJj
ZS5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9CdWZm
ZXJTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsMTMgQEAgcHVibGljOgogICAg
ICAgICB9LCBtX3ZhcmlhbnQpOwogICAgIH0KIAorICAgIFNwYW48Y29uc3QgdWludDhfdD4gYnl0
ZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQoW10oYXV0byYgYnVm
ZmVyKSAtPiBTcGFuPGNvbnN0IHVpbnQ4X3Q+IHsKKyAgICAgICAgICAgIHJldHVybiBidWZmZXIg
PyBTcGFuPGNvbnN0IHVpbnQ4X3Q+IHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZl
ci0+ZGF0YSgpKSwgYnVmZmVyLT5ieXRlTGVuZ3RoKCkgfSA6IFNwYW48Y29uc3QgdWludDhfdD4g
eyB9OworICAgICAgICB9LCBtX3ZhcmlhbnQpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBWYXJp
YW50VHlwZSBtX3ZhcmlhbnQ7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjQsMTUgKzE2NCwxNSBAQCB2b2lkIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
ZW5jb2RlKEVuY29kCiAKICAgICBpZiAoaGFzQXJyYXkpIHsKICAgICAgICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDx1aW50NjRfdD4obV9hcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXktPnNpemUoKSk7
Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byAmYXJyYXlCdWZmZXJDb250ZW50cyA6ICptX2FycmF5
QnVmZmVyQ29udGVudHNBcnJheSkgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGFycmF5QnVm
ZmVyQ29udGVudHMgOiAqbV9hcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkpIHsKICAgICAgICAgICAg
IGVuY29kZXIgPDwgYXJyYXlCdWZmZXJDb250ZW50cy5zaXplSW5CeXRlcygpOwotICAgICAgICAg
ICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGFycmF5QnVmZmVyQ29udGVudHMuZGF0YSgpKSwgYXJyYXlCdWZmZXJDb250ZW50cy5zaXpl
SW5CeXRlcygpLCAxKTsKKyAgICAgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KGFycmF5QnVmZmVyQ29udGVudHMuYnl0ZXMoKSwgMSk7CiAgICAgICAgIH0KICAgICB9CiAKICNp
ZiBFTkFCTEUoV0VCX1JUQykKICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Piht
X2RldGFjaGVkUlRDRGF0YUNoYW5uZWxzLnNpemUoKSk7Ci0gICAgZm9yIChjb25zdCBhdXRvICZj
aGFubmVsIDogbV9kZXRhY2hlZFJUQ0RhdGFDaGFubmVscykKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IGNoYW5uZWwgOiBtX2RldGFjaGVkUlRDRGF0YUNoYW5uZWxzKQogICAgICAgICBlbmNvZGVyIDw8
ICpjaGFubmVsOwogI2VuZGlmCiB9CkBAIC0yMDYsNyArMjA2LDcgQEAgUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZAogICAgICAgICAgICAgYXV0byBidWZmZXIgPSBHaWdh
Y2FnZTo6dHJ5TWFsbG9jKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJ1ZmZlclNpemUpOwogICAgICAg
ICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihidWZmZXIpLCBidWZmZXJTaXplLCAxKSkgeworICAgICAgICAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgc3RhdGljX2Nhc3Q8c3RkOjpieXRlKj4o
YnVmZmVyKSwgYnVmZmVyU2l6ZSB9LCAxKSkgewogICAgICAgICAgICAgICAgIEdpZ2FjYWdlOjpm
cmVlKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9TZXJpYWxpemVkTkZBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9TZXJpYWxpemVkTkZBLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvU2VyaWFsaXplZE5GQS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBTZXJpYWxpemVkTkZBOjpTZXJpYWxpemVkTkZB
KEZpbGVTeXN0ZW06CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogY29uc3QgVCogU2VyaWFsaXplZE5G
QTo6cG9pbnRlckF0T2Zmc2V0SW5GaWxlKHNpemVfdCBvZmZzZXQpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihtX2ZpbGUuZGF0YSgpKSArIG9mZnNldCk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgVCo+KG1fZmlsZS5kYXRhKCkuZGF0YSgpICsgb2Zmc2V0KTsKIH0KIAogYXV0byBTZXJp
YWxpemVkTkZBOjpub2RlcygpIGNvbnN0IC0+IGNvbnN0IFJhbmdlPEltbXV0YWJsZU5GQU5vZGU+
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNwcAko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlF
Q01hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NywxMCArMTk3LDEwIEBAIGJvb2wgQ3J5cHRv
S2V5RUM6OnBsYXRmb3JtQWRkRmllbGRFbGVtZW4KIAogICAgIGlmIChVTkxJS0VMWSgoc2l6ZSAh
PSBwdWJsaWNLZXlTaXplKSAmJiAoc2l6ZSAhPSBwcml2YXRlS2V5U2l6ZSkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgandrLnggPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhyZXN1bHQu
ZGF0YSgpICsgMSwga2V5U2l6ZUluQnl0ZXMpOwotICAgIGp3ay55ID0gYmFzZTY0VVJMRW5jb2Rl
VG9TdHJpbmcocmVzdWx0LmRhdGEoKSArIGtleVNpemVJbkJ5dGVzICsgMSwga2V5U2l6ZUluQnl0
ZXMpOworICAgIGp3ay54ID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoU3BhbiB7IHJlc3VsdCB9
LnN1YnNwYW4oMSwga2V5U2l6ZUluQnl0ZXMpKTsKKyAgICBqd2sueSA9IGJhc2U2NFVSTEVuY29k
ZVRvU3RyaW5nKFNwYW4geyByZXN1bHQgfS5zdWJzcGFuKDEgKyBrZXlTaXplSW5CeXRlcywga2V5
U2l6ZUluQnl0ZXMpKTsKICAgICBpZiAoc2l6ZSA+IHB1YmxpY0tleVNpemUpCi0gICAgICAgIGp3
ay5kID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcocmVzdWx0LmRhdGEoKSArIHB1YmxpY0tleVNp
emUsIGtleVNpemVJbkJ5dGVzKTsKKyAgICAgICAgandrLmQgPSBiYXNlNjRVUkxFbmNvZGVUb1N0
cmluZyhTcGFuIHsgcmVzdWx0IH0uc3Vic3BhbihwdWJsaWNLZXlTaXplLCBrZXlTaXplSW5CeXRl
cykpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
bWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9tYWMvU2VyaWFsaXplZENyeXB0b0tleVdyYXBNYWMubW0JKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvU2VyaWFsaXplZENyeXB0b0tl
eVdyYXBNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbXBvcnQgPHd0
Zi9DcnlwdG9ncmFwaGljVXRpbGl0aWVzLmg+CiAjaW1wb3J0IDx3dGYvUHJvY2Vzc1ByaXZpbGVn
ZS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL2NmL1NwYW5DRi5o
PgogI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvc3BpL2Nv
Y29hL1NlY3VyaXR5U1BJLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4KQEAgLTE2Nyw3
ICsxNjgsNyBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGZpCiAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+
IGtleURhdGEgPSBhZG9wdENGKGtleURhdGFSZWYpOwotICAgIHJldHVybiBiYXNlNjREZWNvZGUo
Q0ZEYXRhR2V0Qnl0ZVB0cihrZXlEYXRhLmdldCgpKSwgQ0ZEYXRhR2V0TGVuZ3RoKGtleURhdGEu
Z2V0KCkpKTsKKyAgICByZXR1cm4gYmFzZTY0RGVjb2RlKGFzQnl0ZXMoa2V5RGF0YS5nZXQoKSkp
OwogfQogCiBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZGVmYXVsdFdlYkNyeXB0b01h
c3RlcktleSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MDYsNyArMTYwNiw4
IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IE5vZGU6OnNldFRleHRDb250ZW50KGMKIHN0YXRpYyBTSEEx
OjpEaWdlc3QgaGFzaFBvaW50ZXIoY29uc3Qgdm9pZCogcG9pbnRlcikKIHsKICAgICBTSEExIHNo
YTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigm
cG9pbnRlciksIHNpemVvZihwb2ludGVyKSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgJnBv
aW50ZXIsIDEgfSk7CisKICAgICBTSEExOjpEaWdlc3QgZGlnZXN0OwogICAgIHNoYTEuY29tcHV0
ZUhhc2goZGlnZXN0KTsKICAgICByZXR1cm4gZGlnZXN0OwpJbmRleDogU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMzgsNyArMzM4LDcgQEAgdm9pZCBGaWxlUmVhZGVyTG9hZGVyOjpjb252ZXJ0VG9EYXRhVVJM
KAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9zdHJpbmdSZXN1bHQgPSBtYWtlU3Ry
aW5nKCJkYXRhOiIsIG1fZGF0YVR5cGUuaXNFbXB0eSgpID8gImFwcGxpY2F0aW9uL29jdGV0LXN0
cmVhbSIgOiBtX2RhdGFUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKG1fcmF3RGF0YS0+
ZGF0YSgpLCBtX2J5dGVzTG9hZGVkKSk7CisgICAgbV9zdHJpbmdSZXN1bHQgPSBtYWtlU3RyaW5n
KCJkYXRhOiIsIG1fZGF0YVR5cGUuaXNFbXB0eSgpID8gImFwcGxpY2F0aW9uL29jdGV0LXN0cmVh
bSIgOiBtX2RhdGFUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKG1fcmF3RGF0YS0+Ynl0
ZXMoKSkpOwogfQogCiBib29sIEZpbGVSZWFkZXJMb2FkZXI6OmlzQ29tcGxldGVkKCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTmV0d29ya1NlbmRRdWV1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTEgKzUzLDEwIEBAIHZvaWQgTmV0d29ya1NlbmRR
dWV1ZTo6ZW5xdWV1ZShDU3RyaW5nJiYKIHZvaWQgTmV0d29ya1NlbmRRdWV1ZTo6ZW5xdWV1ZShj
b25zdCBKU0M6OkFycmF5QnVmZmVyJiBiaW5hcnlEYXRhLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
bnNpZ25lZCBieXRlTGVuZ3RoKQogewogICAgIGlmIChtX3F1ZXVlLmlzRW1wdHkoKSkgewotICAg
ICAgICBhdXRvKiBkYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJpbmFyeURhdGEu
ZGF0YSgpKTsKLSAgICAgICAgbV93cml0ZVJhd0RhdGEoU3BhbiB7IGRhdGEgKyBieXRlT2Zmc2V0
LCBieXRlTGVuZ3RoIH0pOworICAgICAgICBtX3dyaXRlUmF3RGF0YShiaW5hcnlEYXRhLmJ5dGVz
KCkuc3Vic3BhbihieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgbV9xdWV1ZS5hcHBlbmQoU2hhcmVkQnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8
Y29uc3QgdWludDhfdCo+KGJpbmFyeURhdGEuZGF0YSgpKSArIGJ5dGVPZmZzZXQsIGJ5dGVMZW5n
dGgpKTsKKyAgICBtX3F1ZXVlLmFwcGVuZChTaGFyZWRCdWZmZXI6OmNyZWF0ZShiaW5hcnlEYXRh
LmJ5dGVzKCkuc3Vic3BhbihieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSkpOwogfQogCiB2b2lkIE5l
dHdvcmtTZW5kUXVldWU6OmVucXVldWUoV2ViQ29yZTo6QmxvYiYgYmxvYikKQEAgLTkzLDcgKzky
LDkgQEAgdm9pZCBOZXR3b3JrU2VuZFF1ZXVlOjpwcm9jZXNzTWVzc2FnZXMoKQogICAgICAgICBz
d2l0Y2hPbihtX3F1ZXVlLmZpcnN0KCksIFt0aGlzXShjb25zdCBDU3RyaW5nJiB1dGY4KSB7CiAg
ICAgICAgICAgICBtX3dyaXRlU3RyaW5nKHV0ZjgpOwogICAgICAgICB9LCBbdGhpc10oUmVmPFNo
YXJlZEJ1ZmZlcj4mIGRhdGEpIHsKLSAgICAgICAgICAgIGRhdGEtPmZvckVhY2hTZWdtZW50KG1f
d3JpdGVSYXdEYXRhKTsKKyAgICAgICAgICAgIGRhdGEtPmZvckVhY2hTZWdtZW50KFt0aGlzXShh
dXRvJiBzcGFuKSB7CisgICAgICAgICAgICAgICAgbV93cml0ZVJhd0RhdGEoYXNCeXRlcyhzcGFu
KSk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfSwgW3RoaXMsICZzaG91bGRTdG9wUHJvY2Vz
c2luZ10oVW5pcXVlUmVmPEJsb2JMb2FkZXI+JiBsb2FkZXIpIHsKICAgICAgICAgICAgIGF1dG8g
ZXJyb3JDb2RlID0gbG9hZGVyLT5lcnJvckNvZGUoKTsKICAgICAgICAgICAgIGlmIChsb2FkZXIt
PmlzTG9hZGluZygpIHx8IChlcnJvckNvZGUgJiYgZXJyb3JDb2RlLnZhbHVlKCkgPT0gQWJvcnRF
cnJvcikpIHsKQEAgLTEwMiw3ICsxMDMsNyBAQCB2b2lkIE5ldHdvcmtTZW5kUXVldWU6OnByb2Nl
c3NNZXNzYWdlcygpCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChjb25zdCBhdXRv
JiByZXN1bHQgPSBsb2FkZXItPmFycmF5QnVmZmVyUmVzdWx0KCkpIHsKLSAgICAgICAgICAgICAg
ICBtX3dyaXRlUmF3RGF0YShTcGFuIHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KHJlc3Vs
dC0+ZGF0YSgpKSwgcmVzdWx0LT5ieXRlTGVuZ3RoKCkgfSk7CisgICAgICAgICAgICAgICAgbV93
cml0ZVJhd0RhdGEocmVzdWx0LT5ieXRlcygpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBBU1NFUlQoZXJyb3JDb2RlKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvTmV0d29ya1NlbmRRdWV1ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvTmV0d29ya1NlbmRRdWV1ZS5oCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL05ldHdvcmtTZW5kUXVldWUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDgsNyArNDgsNyBAQCBjbGFzcyBTaGFyZWRCdWZmZXI7CiBjbGFzcyBXRUJDT1JFX0VY
UE9SVCBOZXR3b3JrU2VuZFF1ZXVlIDogcHVibGljIENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVy
IHsKIHB1YmxpYzoKICAgICB1c2luZyBXcml0ZVN0cmluZyA9IEZ1bmN0aW9uPHZvaWQoY29uc3Qg
Q1N0cmluZyYgdXRmOCk+OwotICAgIHVzaW5nIFdyaXRlUmF3RGF0YSA9IEZ1bmN0aW9uPHZvaWQo
Y29uc3QgU3Bhbjxjb25zdCB1aW50OF90PiYpPjsKKyAgICB1c2luZyBXcml0ZVJhd0RhdGEgPSBG
dW5jdGlvbjx2b2lkKGNvbnN0IFNwYW48Y29uc3Qgc3RkOjpieXRlPiYpPjsKICAgICBlbnVtIGNs
YXNzIENvbnRpbnVlIHsgTm8sIFllcyB9OwogICAgIHVzaW5nIFByb2Nlc3NFcnJvciA9IEZ1bmN0
aW9uPENvbnRpbnVlKEV4Y2VwdGlvbkNvZGUpPjsKICAgICBOZXR3b3JrU2VuZFF1ZXVlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmLCBXcml0ZVN0cmluZyYmLCBXcml0ZVJhd0RhdGEmJiwgUHJvY2Vz
c0Vycm9yJiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9y
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3Vw
cG9ydC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9E
T01QYXRjaFN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQsMjggKzM5NCwyMyBAQCBF
eGNlcHRpb25Pcjx2b2lkPiBET01QYXRjaFN1cHBvcnQ6OmlubmVyCiAgICAgcmV0dXJuIHsgfTsK
IH0KIAotc3RhdGljIHZvaWQgYWRkU3RyaW5nVG9TSEExKFNIQTEmIHNoYTEsIGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKQotewotICAgIENTdHJpbmcgY1N0cmluZyA9IHN0cmluZy51dGY4KCk7Ci0gICAg
c2hhMS5hZGRCeXRlcyhjU3RyaW5nLmRhdGFBc1VJbnQ4UHRyKCksIGNTdHJpbmcubGVuZ3RoKCkp
OwotfQotCiBzdGQ6OnVuaXF1ZV9wdHI8RE9NUGF0Y2hTdXBwb3J0OjpEaWdlc3Q+IERPTVBhdGNo
U3VwcG9ydDo6Y3JlYXRlRGlnZXN0KE5vZGUmIG5vZGUsIFVudXNlZE5vZGVzTWFwKiB1bnVzZWRO
b2Rlc01hcCkKIHsKICAgICBhdXRvIGRpZ2VzdCA9IG1ha2VVbmlxdWU8RGlnZXN0PigpOwogICAg
IGRpZ2VzdC0+bm9kZSA9ICZub2RlOworCiAgICAgU0hBMSBzaGExOwogCiAgICAgYXV0byBub2Rl
VHlwZSA9IG5vZGUubm9kZVR5cGUoKTsKLSAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KCZub2RlVHlwZSksIHNpemVvZihub2RlVHlwZSkpOwotICAgIGFk
ZFN0cmluZ1RvU0hBMShzaGExLCBub2RlLm5vZGVOYW1lKCkpOwotICAgIGFkZFN0cmluZ1RvU0hB
MShzaGExLCBub2RlLm5vZGVWYWx1ZSgpKTsKKyAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmbm9k
ZVR5cGUsIDEgfSk7CisgICAgc2hhMS5hZGRCeXRlcyhub2RlLm5vZGVOYW1lKCkudXRmOCgpLmJ5
dGVzKCkpOworICAgIHNoYTEuYWRkQnl0ZXMobm9kZS5ub2RlVmFsdWUoKS51dGY4KCkuYnl0ZXMo
KSk7CiAKICAgICBpZiAobm9kZS5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSkgewog
ICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUuZmlyc3RDaGlsZCgpOwogICAgICAgICB3aGlsZSAo
Y2hpbGQpIHsKICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxEaWdlc3Q+IGNoaWxkSW5mbyA9
IGNyZWF0ZURpZ2VzdCgqY2hpbGQsIHVudXNlZE5vZGVzTWFwKTsKLSAgICAgICAgICAgIGFkZFN0
cmluZ1RvU0hBMShzaGExLCBjaGlsZEluZm8tPnNoYTEpOworICAgICAgICAgICAgc2hhMS5hZGRC
eXRlcyhjaGlsZEluZm8tPnNoYTEudXRmOCgpLmJ5dGVzKCkpOwogICAgICAgICAgICAgY2hpbGQg
PSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAgIGRpZ2VzdC0+Y2hpbGRyZW4uYXBw
ZW5kKFdURk1vdmUoY2hpbGRJbmZvKSk7CiAgICAgICAgIH0KQEAgLTQyNCwxOSArNDE5LDE5IEBA
IHN0ZDo6dW5pcXVlX3B0cjxET01QYXRjaFN1cHBvcnQ6OkRpZ2VzdD4KICAgICAgICAgaWYgKGVs
ZW1lbnQuaGFzQXR0cmlidXRlc1dpdGhvdXRVcGRhdGUoKSkgewogICAgICAgICAgICAgU0hBMSBh
dHRyc1NIQTE7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGF0dHJpYnV0ZSA6IGVsZW1lbnQuYXR0
cmlidXRlc0l0ZXJhdG9yKCkpIHsKLSAgICAgICAgICAgICAgICBhZGRTdHJpbmdUb1NIQTEoYXR0
cnNTSEExLCBhdHRyaWJ1dGUubmFtZSgpLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGFk
ZFN0cmluZ1RvU0hBMShhdHRyc1NIQTEsIGF0dHJpYnV0ZS52YWx1ZSgpKTsKKyAgICAgICAgICAg
ICAgICBhdHRyc1NIQTEuYWRkQnl0ZXMoYXR0cmlidXRlLm5hbWUoKS50b1N0cmluZygpLnV0Zjgo
KS5ieXRlcygpKTsKKyAgICAgICAgICAgICAgICBhdHRyc1NIQTEuYWRkQnl0ZXMoYXR0cmlidXRl
LnZhbHVlKCkuc3RyaW5nKCkudXRmOCgpLmJ5dGVzKCkpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgU0hBMTo6RGlnZXN0IGF0dHJzSGFzaDsKICAgICAgICAgICAgIGF0dHJzU0hBMS5jb21w
dXRlSGFzaChhdHRyc0hhc2gpOwotICAgICAgICAgICAgZGlnZXN0LT5hdHRyc1NIQTEgPSBiYXNl
NjRFbmNvZGVUb1N0cmluZyhhdHRyc0hhc2guZGF0YSgpLCAxMCk7Ci0gICAgICAgICAgICBhZGRT
dHJpbmdUb1NIQTEoc2hhMSwgZGlnZXN0LT5hdHRyc1NIQTEpOworICAgICAgICAgICAgZGlnZXN0
LT5hdHRyc1NIQTEgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhhdHRyc0hhc2gpOworICAgICAgICAg
ICAgc2hhMS5hZGRCeXRlcyhkaWdlc3QtPmF0dHJzU0hBMS51dGY4KCkuYnl0ZXMoKSk7CiAgICAg
ICAgIH0KICAgICB9CiAKICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAgICBzaGExLmNvbXB1dGVI
YXNoKGhhc2gpOwotICAgIGRpZ2VzdC0+c2hhMSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGhhc2gu
ZGF0YSgpLCAxMCk7CisgICAgZGlnZXN0LT5zaGExID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaGFz
aCk7CiAgICAgaWYgKHVudXNlZE5vZGVzTWFwKQogICAgICAgICB1bnVzZWROb2Rlc01hcC0+YWRk
KGRpZ2VzdC0+c2hhMSwgZGlnZXN0LmdldCgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MDIsNyArNjAyLDcgQEAgYm9vbCBJbnNwZWN0b3JGcm9udGVu
ZEhvc3Q6OnNob3dDZXJ0aWZpYwogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEtPmRhdGEoKSwg
ZGF0YS0+c2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyAq
ZGF0YSB9OwogICAgIHN0ZDo6b3B0aW9uYWw8Q2VydGlmaWNhdGVJbmZvPiBjZXJ0aWZpY2F0ZUlu
Zm87CiAgICAgZGVjb2RlciA+PiBjZXJ0aWZpY2F0ZUluZm87CiAgICAgaWYgKCFjZXJ0aWZpY2F0
ZUluZm8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0Rh
dGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVz
b3VyY2VzRGF0YS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsx
MDYsNyBAQCB1bnNpZ25lZCBOZXR3b3JrUmVzb3VyY2VzRGF0YTo6UmVzb3VyY2VECiAgICAgICAg
IG1fY29udGVudCA9IG1fZGVjb2Rlci0+ZGVjb2RlQW5kRmx1c2gobV9kYXRhQnVmZmVyLT5kYXRh
KCksIGRhdGFMZW5ndGgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fYmFzZTY0RW5jb2RlZCA9
IHRydWU7Ci0gICAgICAgIG1fY29udGVudCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKG1fZGF0YUJ1
ZmZlci0+ZGF0YSgpLCBkYXRhTGVuZ3RoKTsKKyAgICAgICAgbV9jb250ZW50ID0gYmFzZTY0RW5j
b2RlVG9TdHJpbmcobV9kYXRhQnVmZmVyLT5ieXRlcygpKTsKICAgICB9CiAKICAgICBtX2RhdGFC
dWZmZXIgPSBudWxscHRyOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JET01BZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjk4LDcgKzE2OTgsNyBAQCBzdGF0aWMgU3RyaW5nIGNvbXB1dGVDb250
ZW50U2VjdXJpdHlQb2xpCiAgICAgYXV0byBjcnlwdG9EaWdlc3QgPSBQQUw6OkNyeXB0b0RpZ2Vz
dDo6Y3JlYXRlKFBBTDo6Q3J5cHRvRGlnZXN0OjpBbGdvcml0aG06OlNIQV8yNTYpOwogICAgIGNy
eXB0b0RpZ2VzdC0+YWRkQnl0ZXMoY29udGVudC5kYXRhKCksIGNvbnRlbnQuc2l6ZSgpKTsKICAg
ICBhdXRvIGRpZ2VzdCA9IGNyeXB0b0RpZ2VzdC0+Y29tcHV0ZUhhc2goKTsKLSAgICByZXR1cm4g
bWFrZVN0cmluZygic2hhMjU2LSIsIGJhc2U2NEVuY29kZWQoZGlnZXN0LmRhdGEoKSwgZGlnZXN0
LnNpemUoKSkpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCJzaGEyNTYtIiwgYmFzZTY0RW5jb2Rl
ZChkaWdlc3QpKTsKIH0KIAogUmVmPFByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFn
ZW50OjpidWlsZE9iamVjdEZvck5vZGUoTm9kZSogbm9kZSwgaW50IGRlcHRoKQpJbmRleDogU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0
d29ya0FnZW50LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzUsNyArMTc1LDcgQEAgUmVmPFByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRGcmFtZT4gYgog
ICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0RnJhbWU6OmNyZWF0ZSgpCiAg
ICAgICAgIC5zZXRPcGNvZGUoZnJhbWUub3BDb2RlKQogICAgICAgICAuc2V0TWFzayhmcmFtZS5t
YXNrZWQpCi0gICAgICAgIC5zZXRQYXlsb2FkRGF0YShmcmFtZS5vcENvZGUgPT0gMSA/IFN0cmlu
Zzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soZnJhbWUucGF5bG9hZCwgZnJhbWUucGF5bG9h
ZExlbmd0aCkgOiBiYXNlNjRFbmNvZGVUb1N0cmluZyhmcmFtZS5wYXlsb2FkLCBmcmFtZS5wYXls
b2FkTGVuZ3RoKSkKKyAgICAgICAgLnNldFBheWxvYWREYXRhKGZyYW1lLm9wQ29kZSA9PSAxID8g
U3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhmcmFtZS5wYXlsb2FkLCBmcmFtZS5w
YXlsb2FkTGVuZ3RoKSA6IGJhc2U2NEVuY29kZVRvU3RyaW5nKFNwYW4geyBmcmFtZS5wYXlsb2Fk
LCBmcmFtZS5wYXlsb2FkTGVuZ3RoIH0pKQogICAgICAgICAuc2V0UGF5bG9hZExlbmd0aChmcmFt
ZS5wYXlsb2FkTGVuZ3RoKQogICAgICAgICAucmVsZWFzZSgpOwogfQpAQCAtNTg5LDcgKzU4OSw3
IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlRGEKICAgICAgICAgLy8g
T2Z0ZW4gdGhlIGRhdGEgaXMgdGV4dCBhbmQgd2Ugd291bGQgaGF2ZSBhIGRlY29kZXIsIGJ1dCBm
b3Igbm9uLXRleHQgd2Ugd29uJ3QgaGF2ZSBhIGRlY29kZXIuCiAgICAgICAgIC8vIFN5bmMgWEhS
cyBtYXkgbm90IGhhdmUgYSBjYWNoZWQgcmVzb3VyY2UsIHdoaWxlIG5vbi1zeW5jIFhIUnMgdXN1
YWxseSB0cmFuc2ZlciBkYXRhIG92ZXIgb24gY29tcGxldGlvbi4KICAgICAgICAgaWYgKG1fbG9h
ZGluZ1hIUlN5bmNocm9ub3VzbHkgJiYgcmVzb3VyY2VEYXRhICYmICFyZXNvdXJjZURhdGEtPmhh
c0J1ZmZlcmVkRGF0YSgpICYmICFyZXNvdXJjZURhdGEtPmNhY2hlZFJlc291cmNlKCkpCi0gICAg
ICAgICAgICBtX3Jlc291cmNlc0RhdGEtPnNldFJlc291cmNlQ29udGVudChyZXF1ZXN0SWQsIGJh
c2U2NEVuY29kZVRvU3RyaW5nKGRhdGEsIGRhdGFMZW5ndGgpLCB0cnVlKTsKKyAgICAgICAgICAg
IG1fcmVzb3VyY2VzRGF0YS0+c2V0UmVzb3VyY2VDb250ZW50KHJlcXVlc3RJZCwgYmFzZTY0RW5j
b2RlVG9TdHJpbmcoU3BhbiB7IGRhdGEsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihkYXRhTGVuZ3Ro
KSB9KSwgdHJ1ZSk7CiAgICAgfQogCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRhdGFSZWNl
aXZlZChyZXF1ZXN0SWQsIHRpbWVzdGFtcCgpLCBkYXRhTGVuZ3RoLCBlbmNvZGVkRGF0YUxlbmd0
aCk7CkBAIC0xMDA1LDcgKzEwMDUsNyBAQCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+
IEluc3BlY3RvCiAKICAgICBXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyIGVuY29kZXI7CiAgICAg
V1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPjo6ZW5jb2Rl
KGVuY29kZXIsIGNlcnRpZmljYXRlLnZhbHVlKCkpOwotICAgIHJldHVybiBiYXNlNjRFbmNvZGVU
b1N0cmluZyhlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgcmV0
dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGVuY29kZXIuYnVmZmVyKCkpOwogfQogCiBXZWJTb2Nr
ZXQqIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6d2ViU29ja2V0Rm9yUmVxdWVzdElkKGNvbnN0IFBy
b3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCkKQEAgLTE0MTAsNyArMTQxMCw3
IEBAIGJvb2wgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpjYWNoZWRSZXNvdXIKICAgICAgICAgfQog
CiAgICAgICAgICpiYXNlNjRFbmNvZGVkID0gdHJ1ZTsKLSAgICAgICAgKnJlc3VsdCA9IGJhc2U2
NEVuY29kZVRvU3RyaW5nKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7CisgICAgICAg
ICpyZXN1bHQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhidWZmZXItPmJ5dGVzKCkpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2Vu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDcgQEAKIAogI2lmIEVOQUJMRShXRUJf
QVJDSElWRSkgJiYgVVNFKENGKQogI2luY2x1ZGUgIkxlZ2FjeVdlYkFyY2hpdmUuaCIKKyNpbmNs
dWRlIDx3dGYvY2YvU3BhbkNGLmg+CiAjZW5kaWYKIAogCkBAIC0xMTMsNyArMTE0LDcgQEAgYm9v
bCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNoYXJlZEJ1ZmZlckNvbgogYm9vbCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OmRhdGFDb250ZW50KGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIHNpemUsIGNv
bnN0IFN0cmluZyYgdGV4dEVuY29kaW5nTmFtZSwgYm9vbCB3aXRoQmFzZTY0RW5jb2RlLCBTdHJp
bmcqIHJlc3VsdCkKIHsKICAgICBpZiAod2l0aEJhc2U2NEVuY29kZSkgewotICAgICAgICAqcmVz
dWx0ID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoZGF0YSwgc2l6ZSk7CisgICAgICAgICpyZXN1bHQg
PSBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgZGF0YSwgc2l6ZSB9KTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCkBAIC0xMTAyLDcgKzExMDMsNyBAQCBQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxTdHJpbmc+IEluc3BlY3RvCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
Q291bGQgbm90IGNyZWF0ZSB3ZWIgYXJjaGl2ZSBmb3IgbWFpbiBmcmFtZSJfcyk7CiAKICAgICBS
ZXRhaW5QdHI8Q0ZEYXRhUmVmPiBidWZmZXIgPSBhcmNoaXZlLT5yYXdEYXRhUmVwcmVzZW50YXRp
b24oKTsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoQ0ZEYXRhR2V0Qnl0ZVB0cihi
dWZmZXIuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgoYnVmZmVyLmdldCgpKSk7CisgICAgcmV0dXJu
IGJhc2U2NEVuY29kZVRvU3RyaW5nKGFzQnl0ZXMoYnVmZmVyLmdldCgpKSk7CiB9CiAjZW5kaWYK
IApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNoaXZl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9N
SFRNTEFyY2hpdmUuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODEs
MTYgKzE4MSwxNCBAQCBSZWY8U2hhcmVkQnVmZmVyPiBNSFRNTEFyY2hpdmU6OmdlbmVyYXRlCiAg
ICAgICAgIG1odG1sRGF0YS0+YXBwZW5kKGFzY2lpU3RyaW5nLmRhdGEoKSwgYXNjaWlTdHJpbmcu
bGVuZ3RoKCkpOwogCiAgICAgICAgIC8vIEZJWE1FOiBpZGVhbGx5IHdlIHdvdWxkIGVuY29kZSB0
aGUgY29udGVudCBhcyBhIHN0cmVhbSB3aXRob3V0IGhhdmluZyB0byBmZXRjaCBpdCBhbGwuCi0g
ICAgICAgIGF1dG8qIGRhdGEgPSByZXNvdXJjZS5kYXRhLT5kYXRhKCk7Ci0gICAgICAgIHNpemVf
dCBkYXRhTGVuZ3RoID0gcmVzb3VyY2UuZGF0YS0+c2l6ZSgpOwogICAgICAgICBpZiAoIXN0cmNt
cChjb250ZW50RW5jb2RpbmcsIHF1b3RlZFByaW50YWJsZSkpIHsKLSAgICAgICAgICAgIGF1dG8g
ZW5jb2RlZERhdGEgPSBxdW90ZWRQcmludGFibGVFbmNvZGUoZGF0YSwgZGF0YUxlbmd0aCk7Cisg
ICAgICAgICAgICBhdXRvIGVuY29kZWREYXRhID0gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKHJlc291
cmNlLmRhdGEtPmJ5dGVzKCkpOwogICAgICAgICAgICAgbWh0bWxEYXRhLT5hcHBlbmQoZW5jb2Rl
ZERhdGEuZGF0YSgpLCBlbmNvZGVkRGF0YS5zaXplKCkpOwogICAgICAgICAgICAgbWh0bWxEYXRh
LT5hcHBlbmQoIlxyXG4iLCAyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VS
VCghc3RyY21wKGNvbnRlbnRFbmNvZGluZywgYmFzZTY0KSk7CiAgICAgICAgICAgICAvLyBXZSBh
cmUgbm90IHNwZWNpZnlpbmcgaW5zZXJ0TEZzID0gdHJ1ZSBiZWxvdyBhcyBpdCB3b3VsZCBjdXQg
dGhlIGxpbmVzIHdpdGggTEZzIGFuZCBNSFRNTCByZXF1aXJlcyBDUkxGcy4KLSAgICAgICAgICAg
IGF1dG8gZW5jb2RlZERhdGEgPSBiYXNlNjRFbmNvZGVUb1ZlY3RvcihkYXRhLCBkYXRhTGVuZ3Ro
KTsKKyAgICAgICAgICAgIGF1dG8gZW5jb2RlZERhdGEgPSBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihy
ZXNvdXJjZS5kYXRhLT5ieXRlcygpKTsKICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBtYXhpbXVt
TGluZUxlbmd0aCA9IDc2OwogICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gMDsKICAgICAgICAg
ICAgIHNpemVfdCBlbmNvZGVkRGF0YUxlbmd0aCA9IGVuY29kZWREYXRhLnNpemUoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MUGFyc2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTFBhcnNl
ci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZl
L21odG1sL01IVE1MUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDcgKzE5NSw3IEBA
IFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IE1IVE1MUGFyc2VyOjpwYXIKICAgICBWZWN0b3I8dWlu
dDhfdD4gZGF0YTsKICAgICBzd2l0Y2ggKG1pbWVIZWFkZXIuY29udGVudFRyYW5zZmVyRW5jb2Rp
bmcoKSkgewogICAgIGNhc2UgTUlNRUhlYWRlcjo6QmFzZTY0OiB7Ci0gICAgICAgIGF1dG8gZGVj
b2RlZERhdGEgPSBiYXNlNjREZWNvZGUoY29udGVudC0+ZGF0YSgpLCBjb250ZW50LT5zaXplKCkp
OworICAgICAgICBhdXRvIGRlY29kZWREYXRhID0gYmFzZTY0RGVjb2RlKGNvbnRlbnQtPmJ5dGVz
KCkpOwogICAgICAgICBpZiAoIWRlY29kZWREYXRhKSB7CiAgICAgICAgICAgICBMT0dfRVJST1Io
IkludmFsaWQgYmFzZTY0IGNvbnRlbnQgZm9yIE1IVE1MIHBhcnQuIik7CiAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKQEAgLTIwNCw3ICsyMDQsNyBAQCBSZWZQdHI8QXJjaGl2ZVJlc291cmNl
PiBNSFRNTFBhcnNlcjo6cGFyCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIE1JTUVI
ZWFkZXI6OlF1b3RlZFByaW50YWJsZToKLSAgICAgICAgZGF0YSA9IHF1b3RlZFByaW50YWJsZURl
Y29kZShjb250ZW50LT5kYXRhKCksIGNvbnRlbnQtPnNpemUoKSk7CisgICAgICAgIGRhdGEgPSBx
dW90ZWRQcmludGFibGVEZWNvZGUoY29udGVudC0+Ynl0ZXMoKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgTUlNRUhlYWRlcjo6U2V2ZW5CaXQ6CiAgICAgY2FzZSBNSU1FSGVhZGVyOjpCaW5h
cnk6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkxvYWRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIEljb25Mb2FkZXI6Om5v
dGlmeUZpbmlzaGVkKENhY2hlZFJlCiAgICAgICAgIGRhdGEgPSBudWxscHRyOwogCiAgICAgY29u
c3RleHByIHVpbnQ4X3QgcGRmTWFnaWNOdW1iZXJbXSA9IHsgJyUnLCAnUCcsICdEJywgJ0YnIH07
Ci0gICAgaWYgKGRhdGEgJiYgZGF0YS0+c3RhcnRzV2l0aChTcGFuIHsgcGRmTWFnaWNOdW1iZXIs
IHN0ZDo6c2l6ZShwZGZNYWdpY051bWJlcikgfSkpIHsKKyAgICBpZiAoZGF0YSAmJiBkYXRhLT5z
dGFydHNXaXRoKHBkZk1hZ2ljTnVtYmVyKSkgewogICAgICAgICBMT0coSWNvbkRhdGFiYXNlLCAi
SWNvbkxvYWRlcjo6ZmluaXNoTG9hZGluZygpIC0gSWdub3JpbmcgaWNvbiBhdCAlcyBiZWNhdXNl
IGl0IGFwcGVhcnMgdG8gYmUgYSBQREYiLCBtX3Jlc291cmNlLT51cmwoKS5zdHJpbmcoKS5hc2Np
aSgpLmRhdGEoKSk7CiAgICAgICAgIGRhdGEgPSBudWxscHRyOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0Jhc2U2NFV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzgsNyArMzgsNyBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IEJhc2U2NFV0aWxpdGllczo6YnRvCiAg
ICAgaWYgKCFzdHJpbmdUb0VuY29kZS5pc0FsbExhdGluMSgpKQogICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZENoYXJhY3RlckVycm9yIH07CiAKLSAgICByZXR1cm4gYmFzZTY0RW5j
b2RlVG9TdHJpbmcoc3RyaW5nVG9FbmNvZGUubGF0aW4xKCkpOworICAgIHJldHVybiBiYXNlNjRF
bmNvZGVUb1N0cmluZyhzdHJpbmdUb0VuY29kZS5sYXRpbjEoKS5ieXRlcygpKTsKIH0KIAogRXhj
ZXB0aW9uT3I8U3RyaW5nPiBCYXNlNjRVdGlsaXRpZXM6OmF0b2IoY29uc3QgU3RyaW5nJiBlbmNv
ZGVkU3RyaW5nKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1c3Rv
bURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9h
cmRDdXN0b21EYXRhLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4
OSw3IEBAIFJlZjxTaGFyZWRCdWZmZXI+IFBhc3RlYm9hcmRDdXN0b21EYXRhOjoKICAgICBlbmNv
ZGVyIDw8IG1fb3JpZ2luOwogICAgIGVuY29kZXIgPDwgc2FtZU9yaWdpbkN1c3RvbVN0cmluZ0Rh
dGEoKTsKICAgICBlbmNvZGVyIDw8IG9yZGVyZWRUeXBlcygpOwotICAgIHJldHVybiBTaGFyZWRC
dWZmZXI6OmNyZWF0ZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7Cisg
ICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCkpOwogfQogCiBQ
YXN0ZWJvYXJkQ3VzdG9tRGF0YSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6ZnJvbVBlcnNpc3RlbmNl
RGVjb2RlcihXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyJiYgZGVjb2RlcikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsMjAgKzM0LDE5IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgog
I2luY2x1ZGUgPHd0Zi91bmljb2RlL1VURjhDb252ZXJzaW9uLmg+CiAKLW5hbWVzcGFjZSBXZWJD
b3JlIHsKKyNpZiBVU0UoQ0YpCisjaW5jbHVkZSA8d3RmL2NmL1NwYW5DRi5oPgorI2VuZGlmCiAK
LVNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBz
aXplKQotewotICAgIGFwcGVuZChkYXRhLCBzaXplKTsKLX0KK25hbWVzcGFjZSBXZWJDb3JlIHsK
IAotU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNp
emUpCitTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0
YSkKIHsKLSAgICBhcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSks
IHNpemUpOworICAgIGFwcGVuZChkYXRhKTsKIH0KIAogU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZm
ZXIoRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmJiBmaWxlRGF0YSkKLSAgICA6IG1fc2l6ZShm
aWxlRGF0YS5zaXplKCkpCisgICAgOiBtX3NpemUoZmlsZURhdGEuZGF0YSgpLnNpemUoKSkKIHsK
ICAgICBtX3NlZ21lbnRzLmFwcGVuZCh7MCwgRGF0YVNlZ21lbnQ6OmNyZWF0ZShXVEZNb3ZlKGZp
bGVEYXRhKSl9KTsKIH0KQEAgLTE4OCwxMyArMTg3LDEzIEBAIHZvaWQgU2hhcmVkQnVmZmVyOjph
cHBlbmQoY29uc3QgU2hhcmVkQnUKICAgICBBU1NFUlQoaW50ZXJuYWxseUNvbnNpc3RlbnQoKSk7
CiB9CiAKLXZvaWQgU2hhcmVkQnVmZmVyOjphcHBlbmQoY29uc3QgdWludDhfdCogZGF0YSwgc2l6
ZV90IGxlbmd0aCkKK3ZvaWQgU2hhcmVkQnVmZmVyOjphcHBlbmQoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGRhdGEpCiB7CiAgICAgQVNTRVJUKCFtX2hhc0JlZW5Db21iaW5lZEludG9PbmVTZWdtZW50
KTsKICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yOwotICAgIHZlY3Rvci5hcHBlbmQoZGF0YSwg
bGVuZ3RoKTsKLSAgICBtX3NlZ21lbnRzLmFwcGVuZCh7bV9zaXplLCBEYXRhU2VnbWVudDo6Y3Jl
YXRlKFdURk1vdmUodmVjdG9yKSl9KTsKLSAgICBtX3NpemUgKz0gbGVuZ3RoOworICAgIHZlY3Rv
ci5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5kYXRhKCkpLCBk
YXRhLnNpemUoKSk7CisgICAgbV9zZWdtZW50cy5hcHBlbmQoeyBtX3NpemUsIERhdGFTZWdtZW50
OjpjcmVhdGUoV1RGTW92ZSh2ZWN0b3IpKSB9KTsKKyAgICBtX3NpemUgKz0gZGF0YS5zaXplKCk7
CiAgICAgQVNTRVJUKGludGVybmFsbHlDb25zaXN0ZW50KCkpOwogfQogCkBAIC0yMzIsNyArMjMx
LDcgQEAgdm9pZCBTaGFyZWRCdWZmZXI6OmZvckVhY2hTZWdtZW50KGNvbnN0IAogICAgICAgICBh
cHBseShTcGFuIHsgc2VnbWVudC5zZWdtZW50LT5kYXRhKCksIHNlZ21lbnQuc2VnbWVudC0+c2l6
ZSgpIH0pOwogfQogCi1ib29sIFNoYXJlZEJ1ZmZlcjo6c3RhcnRzV2l0aChjb25zdCBTcGFuPGNv
bnN0IHVpbnQ4X3Q+JiBwcmVmaXgpIGNvbnN0Citib29sIFNoYXJlZEJ1ZmZlcjo6c3RhcnRzV2l0
aChjb25zdCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4mIHByZWZpeCkgY29uc3QKIHsKICAgICBpZiAo
cHJlZml4LmVtcHR5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjQwLDcgKzIzOSw3IEBA
IGJvb2wgU2hhcmVkQnVmZmVyOjpzdGFydHNXaXRoKGNvbnN0IFNwYW4KICAgICBpZiAoc2l6ZSgp
IDwgcHJlZml4LnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29uc3QgdWlu
dDhfdCogcHJlZml4UHRyID0gcHJlZml4LmRhdGEoKTsKKyAgICBhdXRvKiBwcmVmaXhQdHIgPSBw
cmVmaXguZGF0YSgpOwogICAgIHNpemVfdCByZW1haW5pbmcgPSBwcmVmaXguc2l6ZSgpOwogICAg
IGZvciAoYXV0byYgc2VnbWVudCA6IG1fc2VnbWVudHMpIHsKICAgICAgICAgc2l6ZV90IGFtb3Vu
dFRvQ29tcGFyZVRoaXNUaW1lID0gc3RkOjptaW4ocmVtYWluaW5nLCBzZWdtZW50LnNlZ21lbnQt
PnNpemUoKSk7CkBAIC0zMDEsOSArMzAwLDM4IEBAIGNvbnN0IHVpbnQ4X3QqIFNoYXJlZEJ1ZmZl
cjo6RGF0YVNlZ21lbnQKICNpZiBVU0UoR1NUUkVBTUVSKQogICAgICAgICBbXShjb25zdCBSZWZQ
dHI8R3N0TWFwcGVkT3duZWRCdWZmZXI+JiBkYXRhKSB7IHJldHVybiBkYXRhLT5kYXRhKCk7IH0s
CiAjZW5kaWYKLSAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRh
dGEpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmRhdGEoKSk7IH0K
KyAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuZGF0YSgpLmRhdGEoKSk7
IH0KKyAgICApOworICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIG1faW1tdXRhYmxlRGF0
YSk7Cit9CisKK1NwYW48Y29uc3Qgc3RkOjpieXRlPiBTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50
OjpieXRlcygpIGNvbnN0Cit7CisgICAgYXV0byB2aXNpdG9yID0gV1RGOjptYWtlVmlzaXRvcigK
KyAgICAgICAgW10oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKSB7CisgICAgICAgICAgICBy
ZXR1cm4gYXNCeXRlcyhTcGFuIHsgZGF0YSB9KTsKKyAgICAgICAgfSwKKyNpZiBVU0UoQ0YpCisg
ICAgICAgIFtdKGNvbnN0IFJldGFpblB0cjxDRkRhdGFSZWY+JiBkYXRhKSB7CisgICAgICAgICAg
ICByZXR1cm4gYXNCeXRlcyhkYXRhLmdldCgpKTsKKyAgICAgICAgfSwKKyNlbmRpZgorI2lmIFVT
RShHTElCKQorICAgICAgICBbXShjb25zdCBHUmVmUHRyPEdCeXRlcz4mIGRhdGEpIHsKKyAgICAg
ICAgICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4o
Z19ieXRlc19nZXRfZGF0YShkYXRhLmdldCgpLCBudWxscHRyKSksIGdfYnl0ZXNfZ2V0X3NpemUo
ZGF0YS5nZXQoKSkgfSk7CisgICAgICAgIH0sCisjZW5kaWYKKyNpZiBVU0UoR1NUUkVBTUVSKQor
ICAgICAgICBbXShjb25zdCBSZWZQdHI8R3N0TWFwcGVkT3duZWRCdWZmZXI+JiBkYXRhKSB7Cisg
ICAgICAgICAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXpl
KCkgfSk7CisgICAgICAgIH0sCisjZW5kaWYKKyAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6
TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBkYXRhLmRhdGEoKTsK
KyAgICAgICAgfQogICAgICk7CiAgICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwgbV9pbW11
dGFibGVEYXRhKTsKKwogfQogCiBib29sIFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmNvbnRh
aW5zTWFwcGVkRmlsZURhdGEoKSBjb25zdApAQCAtMzE5LDcgKzM0Nyw3IEBAIHZvaWQgU2hhcmVk
QnVmZmVyOjpoaW50TWVtb3J5Tm90TmVlZGVkU28KIAogV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2Rl
ciBTaGFyZWRCdWZmZXI6OmRlY29kZXIoKSBjb25zdAogewotICAgIHJldHVybiB7IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEoKSksIHNpemUoKSB9OworICAgIHJldHVybiB7
IGJ5dGVzKCkgfTsKIH0KIAogYm9vbCBTaGFyZWRCdWZmZXI6Om9wZXJhdG9yPT0oY29uc3QgU2hh
cmVkQnVmZmVyJiBvdGhlcikgY29uc3QKQEAgLTM4NCw3ICs0MTIsNyBAQCBzaXplX3QgU2hhcmVk
QnVmZmVyOjpEYXRhU2VnbWVudDo6c2l6ZSgpCiAjaWYgVVNFKEdTVFJFQU1FUikKICAgICAgICAg
W10oY29uc3QgUmVmUHRyPEdzdE1hcHBlZE93bmVkQnVmZmVyPiYgZGF0YSkgeyByZXR1cm4gZGF0
YS0+c2l6ZSgpOyB9LAogI2VuZGlmCi0gICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBl
ZEZpbGVEYXRhJiBkYXRhKSB7IHJldHVybiBkYXRhLnNpemUoKTsgfQorICAgICAgICBbXShjb25z
dCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeyByZXR1cm4gZGF0YS5kYXRhKCku
c2l6ZSgpOyB9CiAgICAgKTsKICAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBtX2ltbXV0
YWJsZURhdGEpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw4ICs2NywxMiBAQCBjbGFzcyBTaGFyZWRCdWZmZXJE
YXRhVmlldzsKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIFNoYXJlZEJ1ZmZlciA6IHB1YmxpYyBSZWZD
b3VudGVkPFNoYXJlZEJ1ZmZlcj4gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVm
ZmVyPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcik7IH0KLSAg
ICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNp
emVfdCBzaXplKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihkYXRhLCBzaXpl
KSk7IH0KLSAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IGNoYXIqIGRh
dGEsIHNpemVfdCBzaXplKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihkYXRh
LCBzaXplKSk7IH0KKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKFNwYW48Y29u
c3Qgc3RkOjpieXRlPiBkYXRhKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihk
YXRhKSk7IH0KKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKFNwYW48Y29uc3Qg
dWludDhfdD4gZGF0YSkgeyByZXR1cm4gY3JlYXRlKGFzQnl0ZXMoZGF0YSkpOyB9CisgICAgc3Rh
dGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShTcGFuPGNvbnN0IGNoYXI+IGRhdGEpIHsgcmV0
dXJuIGNyZWF0ZShhc0J5dGVzKGRhdGEpKTsgfQorICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVy
PiBjcmVhdGUoY29uc3Qgc3RkOjpieXRlKiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gY3Jl
YXRlKFNwYW4geyBkYXRhLCBzaXplIH0pOyB9CisgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+
IGNyZWF0ZShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gY3JlYXRl
KFNwYW4geyBkYXRhLCBzaXplIH0pOyB9CisgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNy
ZWF0ZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gY3JlYXRlKFNwYW4g
eyBkYXRhLCBzaXplIH0pOyB9CiAgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShG
aWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIG1hcHBlZEZpbGVEYXRhKSB7IHJldHVybiBhZG9w
dFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihXVEZNb3ZlKG1hcHBlZEZpbGVEYXRhKSkpOyB9CiAKICAg
ICBlbnVtIGNsYXNzIE1heVVzZUZpbGVNYXBwaW5nIDogYm9vbCB7IE5vLCBZZXMgfTsKQEAgLTEw
MSw2ICsxMDUsOCBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IEF1ZGl0IHRoZSBjYWxsIHNpdGVz
IG9mIHRoaXMgZnVuY3Rpb24gYW5kIHJlcGxhY2UgdGhlbSB3aXRoIGl0ZXJhdGlvbiBpZiBwb3Nz
aWJsZS4KICAgICBjb25zdCB1aW50OF90KiBkYXRhKCkgY29uc3Q7CiAgICAgY29uc3QgY2hhciog
ZGF0YUFzQ2hhclB0cigpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KGRhdGEoKSk7IH0KKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25zdCB7
IHJldHVybiBhc0J5dGVzKFNwYW4geyBkYXRhKCksIHNpemUoKSB9KTsgfQorCiAgICAgVmVjdG9y
PHVpbnQ4X3Q+IGNvcHlEYXRhKCkgeyByZXR1cm4geyBkYXRhKCksIHNpemUoKSB9OyB9CiAKICAg
ICAvLyBDb21iaW5lcyBhbGwgdGhlIHNlZ21lbnRzIGludG8gYSBWZWN0b3IgYW5kIHJldHVybnMg
dGhhdCB2ZWN0b3IgYWZ0ZXIgY2xlYXJpbmcgdGhlIFNoYXJlZEJ1ZmZlci4KQEAgLTExNSw4ICsx
MjEsMTIgQEAgcHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXpl
KCk7IH0KIAogICAgIHZvaWQgYXBwZW5kKGNvbnN0IFNoYXJlZEJ1ZmZlciYpOwotICAgIHZvaWQg
YXBwZW5kKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwotICAgIHZvaWQgYXBwZW5kKGNvbnN0IGNo
YXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpIHsgYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KGRhdGEpLCBsZW5ndGgpOyB9CisgICAgdm9pZCBhcHBlbmQoU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+KTsKKyAgICB2b2lkIGFwcGVuZChTcGFuPGNvbnN0IHVpbnQ4X3Q+IGRhdGEpIHsg
YXBwZW5kKGFzQnl0ZXMoZGF0YSkpOyB9CisgICAgdm9pZCBhcHBlbmQoU3Bhbjxjb25zdCBjaGFy
PiBkYXRhKSB7IGFwcGVuZChhc0J5dGVzKGRhdGEpKTsgfQorICAgIHZvaWQgYXBwZW5kKGNvbnN0
IHN0ZDo6Ynl0ZSogZGF0YSwgc2l6ZV90IGxlbmd0aCkgeyBhcHBlbmQoU3BhbiB7IGRhdGEsIGxl
bmd0aCB9KTsgfQorICAgIHZvaWQgYXBwZW5kKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBs
ZW5ndGgpIHsgYXBwZW5kKFNwYW4geyBkYXRhLCBsZW5ndGggfSk7IH0KKyAgICB2b2lkIGFwcGVu
ZChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKSB7IGFwcGVuZChTcGFuIHsgZGF0YSwg
bGVuZ3RoIH0pOyB9CiAgICAgdm9pZCBhcHBlbmQoVmVjdG9yPHVpbnQ4X3Q+JiYpOwogCiAgICAg
dm9pZCBjbGVhcigpOwpAQCAtMTMxLDYgKzE0MSw4IEBAIHB1YmxpYzoKICAgICAgICAgV0VCQ09S
RV9FWFBPUlQgY29uc3QgdWludDhfdCogZGF0YSgpIGNvbnN0OwogICAgICAgICBXRUJDT1JFX0VY
UE9SVCBzaXplX3Qgc2l6ZSgpIGNvbnN0OwogCisgICAgICAgIFdFQkNPUkVfRVhQT1JUIFNwYW48
Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAgICAgICAgIHN0YXRpYyBSZWY8RGF0
YVNlZ21lbnQ+IGNyZWF0ZShWZWN0b3I8dWludDhfdD4mJiBkYXRhKQogICAgICAgICB7CiAgICAg
ICAgICAgICBkYXRhLnNocmlua1RvRml0KCk7CkBAIC0xODcsNyArMTk5LDkgQEAgcHVibGljOgog
ICAgIH07CiAKICAgICB2b2lkIGZvckVhY2hTZWdtZW50KGNvbnN0IEZ1bmN0aW9uPHZvaWQoY29u
c3QgU3Bhbjxjb25zdCB1aW50OF90PiYpPiYpIGNvbnN0OwotICAgIGJvb2wgc3RhcnRzV2l0aChj
b25zdCBTcGFuPGNvbnN0IHVpbnQ4X3Q+JiBwcmVmaXgpIGNvbnN0OworCisgICAgYm9vbCBzdGFy
dHNXaXRoKGNvbnN0IFNwYW48Y29uc3Qgc3RkOjpieXRlPiYgcHJlZml4KSBjb25zdDsKKyAgICBi
b29sIHN0YXJ0c1dpdGgoY29uc3QgU3Bhbjxjb25zdCB1aW50OF90PiYgcHJlZml4KSBjb25zdCB7
IHJldHVybiBzdGFydHNXaXRoKGFzQnl0ZXMocHJlZml4KSk7IH0KIAogICAgIHN0cnVjdCBEYXRh
U2VnbWVudFZlY3RvckVudHJ5IHsKICAgICAgICAgc2l6ZV90IGJlZ2luUG9zaXRpb247CkBAIC0y
MTIsOCArMjI2LDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFNoYXJlZEJ1
ZmZlcigpID0gZGVmYXVsdDsKLSAgICBleHBsaWNpdCBTaGFyZWRCdWZmZXIoY29uc3QgdWludDhf
dCosIHNpemVfdCk7Ci0gICAgZXhwbGljaXQgU2hhcmVkQnVmZmVyKGNvbnN0IGNoYXIqLCBzaXpl
X3QpOworICAgIGV4cGxpY2l0IFNoYXJlZEJ1ZmZlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwog
ICAgIGV4cGxpY2l0IFNoYXJlZEJ1ZmZlcihWZWN0b3I8dWludDhfdD4mJik7CiAgICAgZXhwbGlj
aXQgU2hhcmVkQnVmZmVyKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYpOwogI2lmIFVTRShD
RikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0NBQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL2NvY29hL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgPENvcmVBdWRpby9Db3JlQXVkaW9UeXBl
cy5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
ODAsMTMgKzgxLDEzIEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAog
ewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDhfdCo+KCZtX3N0cmVhbURlc2NyaXB0aW9uKSwgc2l6ZW9mKG1fc3RyZWFtRGVzY3Jp
cHRpb24pLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJm1f
c3RyZWFtRGVzY3JpcHRpb24sIDEgfSwgMSk7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
CiBib29sIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7Ci0gICAgcmV0dXJuIGRl
Y29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZk
ZXNjcmlwdGlvbi5tX3N0cmVhbURlc2NyaXB0aW9uKSwgc2l6ZW9mKGRlc2NyaXB0aW9uLm1fc3Ry
ZWFtRGVzY3JpcHRpb24pLCAxKTsKKyAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0
aERhdGEoU3BhbiB7ICZkZXNjcmlwdGlvbi5tX3N0cmVhbURlc2NyaXB0aW9uLCAxIH0sIDEpOwog
fQogCiBpbmxpbmUgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uIHRvQ0FBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uKGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJL
ZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1l
ZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTgsMTUgKzE5OCwxMyBAQCBzdGF0aWMgUmVmPFNoYXJlZEJ1
ZmZlcj4gZXh0cmFjdEtleWlkc0ZyCiB7CiAgICAgUmVmPFNoYXJlZEJ1ZmZlcj4ga2V5SWRzID0g
U2hhcmVkQnVmZmVyOjpjcmVhdGUoKTsKIAotICAgIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWdu
ZWQ+IGtleUlkc01hcCA9IGV4dHJhY3RLZXlpZHNMb2NhdGlvbkZyb21DZW5jSW5pdERhdGEoaW5p
dERhdGEpOwotICAgIHVuc2lnbmVkIGtleUlkQ291bnQgPSBrZXlJZHNNYXAuZmlyc3Q7Ci0gICAg
dW5zaWduZWQgaW5kZXggPSBrZXlJZHNNYXAuc2Vjb25kOworICAgIGF1dG8gW2tleUlkQ291bnQs
IGluZGV4XSA9IGV4dHJhY3RLZXlpZHNMb2NhdGlvbkZyb21DZW5jSW5pdERhdGEoaW5pdERhdGEp
OwogCiAgICAgLy8gQ2hlY2sgaWYgaW5pdERhdGEgaXMgYSB2YWxpZCBDRU5DIGluaXREYXRhLgog
ICAgIGlmICgha2V5SWRDb3VudCB8fCAhaW5kZXgpCiAgICAgICAgIHJldHVybiBrZXlJZHM7CiAK
LSAgICBhdXRvKiBkYXRhID0gaW5pdERhdGEuZGF0YSgpOworICAgIGF1dG8gZGF0YSA9IGluaXRE
YXRhLmJ5dGVzKCk7CiAKICAgICBhdXRvIG9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgYXV0byBrZXlJZHNBcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKQEAgLTIxOCw3
ICsyMTYsNyBAQCBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gZXh0cmFjdEtleWlkc0ZyCiAgICAg
Ly8gImtpZHMiCiAgICAgLy8gQW4gYXJyYXkgb2Yga2V5IElEcy4gRWFjaCBlbGVtZW50IG9mIHRo
ZSBhcnJheSBpcyB0aGUgYmFzZTY0dXJsIGVuY29kaW5nIG9mIHRoZSBvY3RldCBzZXF1ZW5jZSBj
b250YWluaW5nIHRoZSBrZXkgSUQgdmFsdWUuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGtleUlkQ291bnQ7IGkrKykgewotICAgICAgICBrZXlJZHNBcnJheS0+cHVzaFN0cmluZyhiYXNl
NjRVUkxFbmNvZGVUb1N0cmluZygmZGF0YVtpbmRleF0sIENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5
dGVzKSk7CisgICAgICAgIGtleUlkc0FycmF5LT5wdXNoU3RyaW5nKGJhc2U2NFVSTEVuY29kZVRv
U3RyaW5nKGRhdGEuc3Vic3BhbihpbmRleCwgQ2xlYXJLZXk6OktleUlEU2l6ZUluQnl0ZXMpKSk7
CiAgICAgICAgIGluZGV4ICs9IENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVzOwogICAgIH0KIApA
QCAtMjQ1LDcgKzI0Myw3IEBAIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBleHRyYWN0S2V5SWRG
cm8KICAgICAvLyBUaGUgZm9ybWF0IGlzIGEgSlNPTiBvYmplY3QgY29udGFpbmluZyB0aGUgZm9s
bG93aW5nIG1lbWJlcnM6CiAgICAgLy8gImtpZHMiCiAgICAgLy8gQW4gYXJyYXkgb2Yga2V5IElE
cy4gRWFjaCBlbGVtZW50IG9mIHRoZSBhcnJheSBpcyB0aGUgYmFzZTY0dXJsIGVuY29kaW5nIG9m
IHRoZSBvY3RldCBzZXF1ZW5jZSBjb250YWluaW5nIHRoZSBrZXkgSUQgdmFsdWUuCi0gICAga2V5
SWRzQXJyYXktPnB1c2hTdHJpbmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoaW5pdERhdGEuZGF0
YSgpLCBpbml0RGF0YS5zaXplKCkpKTsKKyAgICBrZXlJZHNBcnJheS0+cHVzaFN0cmluZyhiYXNl
NjRVUkxFbmNvZGVUb1N0cmluZyhpbml0RGF0YS5ieXRlcygpKSk7CiAKICAgICBvYmplY3QtPnNl
dEFycmF5KCJraWRzIiwgV1RGTW92ZShrZXlJZHNBcnJheSkpOwogICAgIENTdHJpbmcganNvbkRh
dGEgPSBvYmplY3QtPnRvSlNPTlN0cmluZygpLnV0ZjgoKTsKQEAgLTU3OCw5ICs1NzYsOCBAQCB2
b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTCiAKICAgICAvLyBDb25zdHJ1
Y3QgdGhlIEtleVN0YXR1c1ZlY3RvciBvYmplY3QsIHJlcHJlc2VudGluZyByZWxlYXNlZCBrZXlz
LCBhbmQgdGhlIG1lc3NhZ2UgaW4gdGhlCiAgICAgLy8gJ2xpY2Vuc2UgcmVsZWFzZScgZm9ybWF0
LgotICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3IgPSBtX2tleVN0b3JlLmFsbEtl
eXNBcyhDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6UmVsZWFzZWQpOwotICAgIFJlZlB0
cjxTaGFyZWRCdWZmZXI+IG1lc3NhZ2U7Ci0gICAgeworICAgIGF1dG8ga2V5U3RhdHVzVmVjdG9y
ID0gbV9rZXlTdG9yZS5hbGxLZXlzQXMoQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlJl
bGVhc2VkKTsKKyAgICBhdXRvIG1lc3NhZ2UgPSBbJl17CiAgICAgICAgIC8vIENvbnN0cnVjdCBK
U09OIHRoYXQgcmVwcmVzZW50cyB0aGUgJ2xpY2Vuc2UgcmVsZWFzZScgZm9ybWF0LCBjcmVhdGlu
ZyBhICdraWRzJyBhcnJheQogICAgICAgICAvLyBvZiBiYXNlNjRVUkwtZW5jb2RlZCBrZXkgSURz
IGZvciBhbGwga2V5cyB0aGF0IHdlcmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2Vzc2lvbi4KICAg
ICAgICAgYXV0byByb290T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKQEAgLTU4OCw3
ICs1ODUsNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTCiAgICAg
ICAgICAgICBhdXRvIGFycmF5ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICAgICAg
Zm9yIChjb25zdCBhdXRvJiBrZXkgOiBtX2tleVN0b3JlKSB7CiAgICAgICAgICAgICAgICAgQVNT
RVJUKGtleS0+aWQoKS5zaXplKCkgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1h
eCgpKTsKLSAgICAgICAgICAgICAgICBhcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVU
b1N0cmluZyhrZXktPmlkKCkuZGF0YSgpLCBrZXktPmlkKCkuc2l6ZSgpKSk7CisgICAgICAgICAg
ICAgICAgYXJyYXktPnB1c2hTdHJpbmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoa2V5LT5pZCgp
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByb290T2JqZWN0LT5zZXRBcnJheSgia2lk
cyIsIFdURk1vdmUoYXJyYXkpKTsKICAgICAgICAgfQpAQCAtNTk2LDExICs1OTMsMTEgQEAgdm9p
ZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlUwogICAgICAgICAvLyBDb3B5IHRo
ZSBKU09OIGRhdGEgaW50byBhIFNoYXJlZEJ1ZmZlciBvYmplY3QuCiAgICAgICAgIFN0cmluZyBt
ZXNzYWdlU3RyaW5nID0gcm9vdE9iamVjdC0+dG9KU09OU3RyaW5nKCk7CiAgICAgICAgIENTdHJp
bmcgbWVzc2FnZUNTdHJpbmcgPSBtZXNzYWdlU3RyaW5nLnV0ZjgoKTsKLSAgICAgICAgbWVzc2Fn
ZSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKG1lc3NhZ2VDU3RyaW5nLmRhdGEoKSwgbWVzc2FnZUNT
dHJpbmcubGVuZ3RoKCkpOwotICAgIH0KKyAgICAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3Jl
YXRlKG1lc3NhZ2VDU3RyaW5nLmRhdGEoKSwgbWVzc2FnZUNTdHJpbmcubGVuZ3RoKCkpOworICAg
IH0oKTsKIAogICAgIG1fa2V5U3RvcmUucmVtb3ZlQWxsS2V5cygpOwotICAgIGRpc3BhdGNoQ2Fs
bGJhY2soV1RGTW92ZShrZXlTdGF0dXNWZWN0b3IpLCBSZWY8U2hhcmVkQnVmZmVyPigqbWVzc2Fn
ZSksIFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVkKTsKKyAgICBkaXNwYXRjaENhbGxiYWNrKFdURk1v
dmUoa2V5U3RhdHVzVmVjdG9yKSwgV1RGTW92ZShtZXNzYWdlKSwgU3VjY2Vzc1ZhbHVlOjpTdWNj
ZWVkZWQpOwogfQogCiB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpzdG9yZVJlY29y
ZE9mS2V5VXNhZ2UoY29uc3QgU3RyaW5nJikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dlbmVyaWMvS2V5ZWREZWNvZGVyR2VuZXJpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9LZXllZERlY29kZXJHZW5lcmljLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9LZXllZERlY29kZXJH
ZW5lcmljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBzdGF0aWMgc3RkOjpv
cHRpb25hbDxTdHJpbmc+IHJlYWRTdHJpbmcoCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygp
OwogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcihzaXplLnZhbHVlKCkpOwotICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLmRhdGEoKSwgc2l6ZS52YWx1ZSgp
KSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBidWZmZXIg
fSkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgYXV0byByZXN1bHQgPSBTdHJp
bmc6OmZyb21VVEY4KGJ1ZmZlci5kYXRhKCksIHNpemUudmFsdWUoKSk7CiAgICAgaWYgKHJlc3Vs
dC5pc051bGwoKSkKQEAgLTExNyw3ICsxMTcsNyBAQCBLZXllZERlY29kZXJHZW5lcmljOjpLZXll
ZERlY29kZXJHZW5lcmljCiAgICAgICAgICAgICBpZiAoIW9rKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcigqc2l6ZSk7Ci0gICAgICAg
ICAgICBvayA9IGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ1ZmZlci5kYXRhKCksICpz
aXplKTsKKyAgICAgICAgICAgIG9rID0gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3Bh
biB7IGJ1ZmZlciB9KTsKICAgICAgICAgICAgIGlmICghb2spCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCktPmFkZCgqa2V5LCBXVEZN
b3ZlKGJ1ZmZlcikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTW9k
ZWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Nb2Rl
bC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Nb2RlbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+CiB2b2lkIE1vZGVsOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsK
ICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHNpemVfdD4obV9kYXRhLT5zaXplKCkpOwotICAg
IGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNp
emUoKSwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEobV9kYXRhLT5ieXRl
cygpLCAxKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KQEAgLTc0LDcgKzc0LDcgQEAg
UmVmUHRyPE1vZGVsPiBNb2RlbDo6ZGVjb2RlKERlY29kZXImIGRlYwogCiAgICAgVmVjdG9yPHVp
bnQ4X3Q+IGRhdGE7CiAgICAgZGF0YS5ncm93KCpsZW5ndGgpOwotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGVGaXhlZExlbmd0aERhdGEoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAxKSkKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGRhdGEsIDEpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBNb2RlbDo6Y3JlYXRlKFNoYXJlZEJ1ZmZlcjo6Y3Jl
YXRlKFdURk1vdmUoZGF0YSkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BpeGVsQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUGl4ZWxCdWZmZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODIs
NyArODIsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIFBpeGVsQnVmZmVyCiAKICAg
ICBlbmNvZGVyIDw8IG1fZm9ybWF0OwogICAgIGVuY29kZXIgPDwgbV9zaXplOwotICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPmJ5dGVMZW5n
dGgoKSwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEobV9kYXRhLT5ieXRl
cygpLCAxKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RkOjpvcHRpb25hbDxQaXhl
bEJ1ZmZlcj4gUGl4ZWxCdWZmZXI6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQpAQCAtMTEzLDcg
KzExMyw3IEBAIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0ZDo6b3B0aW9uYWw8UGkKICAgICBp
ZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIGlmICghZGVj
b2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVzdWx0LT5tX2RhdGEtPmRhdGEoKSwgcmVzdWx0
LT5tX2RhdGEtPmJ5dGVMZW5ndGgoKSwgMSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVk
TGVuZ3RoRGF0YShyZXN1bHQtPm1fZGF0YS0+d3JpdGFibGVCeXRlcygpLCAxKSkKICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZh
aXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3Ry
ZWFtaW5nQVZGT2JqQy5tbQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVh
bWluZ0FWRk9iakMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAKICNpbXBvcnQg
PHd0Zi9GaWxlU3lzdGVtLmg+CiAjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgogI2ltcG9ydCA8
d3RmL0xvZ2dlckhlbHBlci5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1NwYW5Db2NvYS5oPgogI2lt
cG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQu
aD4KICNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KQEAgLTcxNSw3ICs3MTYsNyBAQCB2
b2lkIENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nCiAgICAgICAgIGlkZW50aWZp
ZXIgPSBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTppbml0RGF0YS0+Y3Jl
YXRlTlNEYXRhKCkuZ2V0KCkgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddKTsKICNpZiBI
QVZFKEZBSVJQTEFZU1RSRUFNSU5HX0NFTkNfSU5JVERBVEEpCiAgICAgZWxzZSBpZiAoaW5pdERh
dGFUeXBlID09IEluaXREYXRhUmVnaXN0cnk6OmNlbmNOYW1lKCkpIHsKLSAgICAgICAgYXV0byBw
c3NoU3RyaW5nID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5pdERhdGEtPmRhdGEoKSwgaW5pdERh
dGEtPnNpemUoKSk7CisgICAgICAgIGF1dG8gcHNzaFN0cmluZyA9IGJhc2U2NEVuY29kZVRvU3Ry
aW5nKGluaXREYXRhLT5ieXRlcygpKTsKICAgICAgICAgaW5pdGlhbGl6YXRpb25EYXRhID0gW05T
SlNPTlNlcmlhbGl6YXRpb24gZGF0YVdpdGhKU09OT2JqZWN0OkB7IEAicHNzaCI6IChOU1N0cmlu
ZyopcHNzaFN0cmluZyB9IG9wdGlvbnM6TlNKU09OV3JpdGluZ1ByZXR0eVByaW50ZWQgZXJyb3I6
bmlsXTsKICAgICB9CiAjZW5kaWYKQEAgLTExOTEsMTIgKzExOTIsMTAgQEAgdm9pZCBDRE1JbnN0
YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZwogICAgICAgICB9CiAKICAgICAgICAgYXV0byBy
ZXF1ZXN0SlNPTiA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKLSAgICAgICAgZm9yIChhdXRvJiBy
ZXF1ZXN0RGF0YSA6IHJlcXVlc3RzRGF0YSkgeworICAgICAgICBmb3IgKGF1dG8mIFtrZXlJRCwg
cGF5bG9hZF0gOiByZXF1ZXN0c0RhdGEpIHsKICAgICAgICAgICAgIGF1dG8gZW50cnkgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICAgICAgYXV0byYga2V5SUQgPSByZXF1ZXN0RGF0
YS5maXJzdDsKLSAgICAgICAgICAgIGF1dG8mIHBheWxvYWQgPSByZXF1ZXN0RGF0YS5zZWNvbmQ7
Ci0gICAgICAgICAgICBlbnRyeS0+c2V0U3RyaW5nKCJrZXlJRCIsIGJhc2U2NEVuY29kZVRvU3Ry
aW5nKGtleUlELT5kYXRhKCksIGtleUlELT5zaXplKCkpKTsKLSAgICAgICAgICAgIGVudHJ5LT5z
ZXRTdHJpbmcoInBheWxvYWQiLCBiYXNlNjRFbmNvZGVUb1N0cmluZyhwYXlsb2FkLmdldCgpLmJ5
dGVzLCBwYXlsb2FkLmdldCgpLmxlbmd0aCkpOworICAgICAgICAgICAgZW50cnktPnNldFN0cmlu
Zygia2V5SUQiLCBiYXNlNjRFbmNvZGVUb1N0cmluZyhrZXlJRC0+Ynl0ZXMoKSkpOworICAgICAg
ICAgICAgZW50cnktPnNldFN0cmluZygicGF5bG9hZCIsIGJhc2U2NEVuY29kZVRvU3RyaW5nKGFz
Qnl0ZXMocGF5bG9hZC5nZXQoKSkpKTsKICAgICAgICAgICAgIHJlcXVlc3RKU09OLT5wdXNoT2Jq
ZWN0KFdURk1vdmUoZW50cnkpKTsKICAgICAgICAgfQogICAgICAgICBhdXRvIHJlcXVlc3RCdWZm
ZXIgPSB1dGY4QnVmZmVyKHJlcXVlc3RKU09OLT50b0pTT05TdHJpbmcoKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCBzdGF0aWMgU3RyaW5nIGNyZWF0ZVVuaXF1
ZUZvbnROYW1lKCkKICAgICBHVUlEIGZvbnRVdWlkOwogICAgIENvQ3JlYXRlR3VpZCgmZm9udFV1
aWQpOwogCi0gICAgYXV0byBmb250TmFtZSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KCZmb250VXVpZCksIHNpemVvZihmb250VXVpZCkpOworICAgIGF1dG8g
Zm9udE5hbWUgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgJmZvbnRVdWlkLCAxIH0pOwog
ICAgIEFTU0VSVChmb250TmFtZS5sZW5ndGgoKSA8IExGX0ZBQ0VTSVpFKTsKICAgICByZXR1cm4g
Zm9udE5hbWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNw
cAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgx
LDcgKzgxLDcgQEAgc3RhdGljIFN0cmluZyBjcmVhdGVVbmlxdWVGb250TmFtZSgpCiAgICAgR1VJ
RCBmb250VXVpZDsKICAgICBDb0NyZWF0ZUd1aWQoJmZvbnRVdWlkKTsKIAotICAgIGF1dG8gZm9u
dE5hbWUgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhyZWludGVycHJldF9jYXN0PGNoYXIqPigmZm9u
dFV1aWQpLCBzaXplb2YoZm9udFV1aWQpKTsKKyAgICBhdXRvIGZvbnROYW1lID0gYmFzZTY0RW5j
b2RlVG9TdHJpbmcoU3BhbiB7ICZmb250VXVpZCwgMSB9KTsKICAgICBBU1NFUlQoZm9udE5hbWUu
bGVuZ3RoKCkgPCBMRl9GQUNFU0laRSk7CiAgICAgcmV0dXJuIGZvbnROYW1lOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRvck1hYy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU1NMS2V5R2VuZXJhdG9yTWFjLm1t
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU1NMS2V5
R2VuZXJhdG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksNyArMjE5LDcgQEAgc3RhdGlj
IFN0cmluZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZwogICAgIGlmIChTZWNBc24xRW5jb2Rl
SXRlbShjb2RlciwgJnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZSwgc2lnbmVkUHVibGljS2V5
QW5kQ2hhbGxlbmdlVGVtcGxhdGUsICZlbmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdl
KSAhPSBub0VycikKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJuIGJhc2U2
NEVuY29kZVRvU3RyaW5nKGVuY29kZWRTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2UuRGF0YSwg
ZW5jb2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZS5MZW5ndGgpOworICAgIHJldHVybiBi
YXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgZW5jb2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxs
ZW5nZS5EYXRhLCBlbmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlLkxlbmd0aCB9KTsK
IH0KIAogQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVh
bHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcy5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2FwYWJp
bGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCwxNiArMTE0LDE2IEBAIHByaXZhdGU6CiB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBDYXBhYmlsaXR5VmFsdWVPclJhbmdlOjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmbV9taW5PclZhbHVlKSwg
c2l6ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZhbHVlVW5pb24pKTsKLSAgICBlbmNvZGVyLmVu
Y29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmbV9t
YXgpLCBzaXplb2YoVmFsdWVVbmlvbiksIGFsaWdub2YoVmFsdWVVbmlvbikpOworICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmbV9taW5PclZhbHVlLCAxIH0sIGFsaWdu
b2YoVmFsdWVVbmlvbikpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4g
eyAmbV9tYXgsIDEgfSwgYWxpZ25vZihWYWx1ZVVuaW9uKSk7CiAgICAgZW5jb2RlciA8PCBtX3R5
cGU7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CiBib29sIENhcGFiaWxpdHlWYWx1ZU9y
UmFuZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBDYXBhYmlsaXR5VmFsdWVPclJhbmdlJiB2
YWx1ZU9yUmFuZ2UpCiB7Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2YWx1ZU9yUmFuZ2UubV9taW5PclZhbHVlKSwg
c2l6ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZhbHVlVW5pb24pKQotICAgICAgICAmJiBkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFs
dWVPclJhbmdlLm1fbWF4KSwgc2l6ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZhbHVlVW5pb24p
KQorICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJnZhbHVl
T3JSYW5nZS5tX21pbk9yVmFsdWUsIDEgfSwgYWxpZ25vZihWYWx1ZVVuaW9uKSkKKyAgICAgICAg
JiYgZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZ2YWx1ZU9yUmFuZ2UubV9t
YXgsIDEgfSwgYWxpZ25vZihWYWx1ZVVuaW9uKSkKICAgICAgICAgJiYgZGVjb2Rlci5kZWNvZGUo
dmFsdWVPclJhbmdlLm1fdHlwZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VD
ZW50ZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTM5LDEzICsxMzksMTMgQEAgc3RhdGljIHZvaWQgYWRkU3RyaW5nVG9TSEExKFNIQTEmIHNo
YTEsIAogCiAgICAgaWYgKHN0cmluZy5pczhCaXQoKSAmJiBzdHJpbmcuaXNBbGxBU0NJSSgpKSB7
CiAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbnVsbEJ5dGUgPSAwOwotICAgICAgICBzaGExLmFkZEJ5
dGVzKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAgICAgICBzaGEx
LmFkZEJ5dGVzKCZudWxsQnl0ZSwgMSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IHN0
cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkgfSk7CisgICAgICAgIHNoYTEuYWRk
Qnl0ZXMoU3BhbiB7ICZudWxsQnl0ZSwgMSB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGF1dG8gdXRmOCA9IHN0cmluZy51dGY4KCk7Ci0gICAgc2hhMS5hZGRCeXRlcyh1dGY4LmRh
dGFBc1VJbnQ4UHRyKCksIHV0ZjgubGVuZ3RoKCkgKyAxKTsgLy8gSW5jbHVkZSB0ZXJtaW5hdGlu
ZyBudWxsIGJ5dGUuCisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgdXRmOC5kYXRhQXNVSW50OFB0
cigpLCB1dGY4Lmxlbmd0aCgpICsgMSB9KTsgLy8gSW5jbHVkZSB0ZXJtaW5hdGluZyBudWxsIGJ5
dGUuCiB9CiAKIFN0cmluZyBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpoYXNoU3RyaW5nV2l0
aFNhbHQoY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgU3RyaW5nJiBoYXNoU2FsdCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Ny
ZWRlbnRpYWxCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsOCArOTcsOSBAQCBib29sIENy
ZWRlbnRpYWxCYXNlOjpjb21wYXJlKGNvbnN0IENyZWRlCiAKIFN0cmluZyBDcmVkZW50aWFsQmFz
ZTo6c2VyaWFsaXphdGlvbkZvckJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcigpIGNvbnN0CiB7Cisg
ICAgLy8gRklYTUU6IEFkZCBtYWtlU3RyaW5nIHZhcmlhbnQgdGhhdCBjcmVhdGVzIGEgdXRmOCBi
dWZmZXIgZGlyZWN0bHkuCiAgICAgYXV0byBjcmVkZW50aWFsU3RyaW5nRGF0YSA9IG1ha2VTdHJp
bmcobV91c2VyLCAnOicsIG1fcGFzc3dvcmQpLnV0ZjgoKTsKLSAgICByZXR1cm4gbWFrZVN0cmlu
ZygiQmFzaWMgIiwgYmFzZTY0RW5jb2RlZChjcmVkZW50aWFsU3RyaW5nRGF0YSkpOworICAgIHJl
dHVybiBtYWtlU3RyaW5nKCJCYXNpYyAiLCBiYXNlNjRFbmNvZGVkKGNyZWRlbnRpYWxTdHJpbmdE
YXRhLmJ5dGVzKCkpKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ2VydGlm
aWNhdGVJbmZvQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNyArMjEwLDcgQEAgc3Rh
dGljIHZvaWQgZW5jb2RlQ0ZEYXRhKEVuY29kZXImIGVuY29kZQogICAgIGNvbnN0IHVpbnQ4X3Qq
IGJ5dGVQdHIgPSBDRkRhdGFHZXRCeXRlUHRyKGRhdGEpOwogCiAgICAgZW5jb2RlciA8PCBsZW5n
dGg7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYnl0ZVB0ciwgc3RhdGljX2Nh
c3Q8c2l6ZV90PihsZW5ndGgpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShT
cGFuIHsgYnl0ZVB0ciwgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpIH0pOwogfQogCiBzdGF0
aWMgc3RkOjpvcHRpb25hbDxSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4gZGVjb2RlQ0ZEYXRhKERlY29k
ZXImIGRlY29kZXIpCkBAIC0yMjUsNyArMjI1LDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0
YWluUHRyPENGRGF0YVJlZgogICAgIGlmICghcG9pbnRlcikKICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKIAotICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0ZShudWxscHRyLCBwb2lu
dGVyLCAqc2l6ZSkpOworICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0ZShudWxscHRyLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwb2ludGVyKSwgKnNpemUpKTsKIH0KIAog
I2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ2VydGlmaWNhdGVJbmZvLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0NlcnRpZmljYXRlSW5mby5oCShyZXZp
c2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ2Vy
dGlmaWNhdGVJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgdGVtcGxhdGU8
PiBzdHJ1Y3QgQ29kZXI8R1JlZlB0cjxHQnl0ZUFycgogICAgIHN0YXRpYyB2b2lkIGVuY29kZShF
bmNvZGVyICZlbmNvZGVyLCBjb25zdCBHUmVmUHRyPEdCeXRlQXJyYXk+JiBieXRlQXJyYXkpCiAg
ICAgewogICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90PihieXRlQXJyYXkt
Pmxlbik7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGJ5dGVBcnJheS0+
ZGF0YSwgYnl0ZUFycmF5LT5sZW4pOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3Ro
RGF0YShTcGFuIHsgYnl0ZUFycmF5LT5kYXRhLCBieXRlQXJyYXktPmxlbiB9KTsKICAgICB9CiAK
ICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxHUmVmUHRyPEdCeXRlQXJyYXk+PiBkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKQEAgLTg3LDcgKzg3LDcgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8
R1JlZlB0cjxHQnl0ZUFycgogCiAgICAgICAgIEdSZWZQdHI8R0J5dGVBcnJheT4gYnl0ZUFycmF5
ID0gYWRvcHRHUmVmKGdfYnl0ZV9hcnJheV9zaXplZF9uZXcoKnNpemUpKTsKICAgICAgICAgZ19i
eXRlX2FycmF5X3NldF9zaXplKGJ5dGVBcnJheS5nZXQoKSwgKnNpemUpOwotICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ5dGVBcnJheS0+ZGF0YSwgKnNpemUpKQor
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBieXRlQXJy
YXktPmRhdGEsICpzaXplIH0pKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAg
ICAgICAgcmV0dXJuIGJ5dGVBcnJheTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg1LDcgKzg1LDcgQEAgYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OmV4ZWN1dGVDb21t
YW5kKCkKICAgICByZXR1cm4gc3RlcCgpID09IFNRTElURV9ET05FOwogfQogCi1pbnQgU1FMaXRl
U3RhdGVtZW50OjpiaW5kQmxvYihpbnQgaW5kZXgsIFNwYW48Y29uc3QgdWludDhfdD4gYmxvYikK
K2ludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgU3Bhbjxjb25zdCBzdGQ6
OmJ5dGU+IGJsb2IpCiB7CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAgQVNTRVJUKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkpOwpAQCAtOTUs
NiArOTUsMTEgQEAgaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IoaW50IGluZGV4LAogICAg
IHJldHVybiBzcWxpdGUzX2JpbmRfYmxvYihtX3N0YXRlbWVudCwgaW5kZXgsIGJsb2IuZGF0YSgp
LCBibG9iLnNpemUoKSwgU1FMSVRFX1RSQU5TSUVOVCk7CiB9CiAKK2ludCBTUUxpdGVTdGF0ZW1l
bnQ6OmJpbmRCbG9iKGludCBpbmRleCwgU3Bhbjxjb25zdCB1aW50OF90PiBibG9iKQoreworICAg
IHJldHVybiBiaW5kQmxvYihpbmRleCwgYXNCeXRlcyhibG9iKSk7Cit9CisKIGludCBTUUxpdGVT
dGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0KQogewogICAg
IC8vIFN0cmluZzo6Y2hhcmFjdGVycygpIHJldHVybnMgMCBmb3IgdGhlIGVtcHR5IHN0cmluZywg
d2hpY2ggU1FMaXRlCkBAIC0xMDcsNyArMTEyLDcgQEAgaW50IFNRTGl0ZVN0YXRlbWVudDo6Ymlu
ZEJsb2IoaW50IGluZGV4LAogICAgIGVsc2UKICAgICAgICAgY2hhcmFjdGVycyA9IHVwY29udmVy
dGVkQ2hhcmFjdGVyczsKIAotICAgIHJldHVybiBiaW5kQmxvYihpbmRleCwgU3BhbiB7IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGNoYXJhY3RlcnMpLCB0ZXh0Lmxlbmd0aCgpICog
c2l6ZW9mKFVDaGFyKSB9KTsKKyAgICByZXR1cm4gYmluZEJsb2IoaW5kZXgsIFNwYW4geyByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGNoYXJhY3RlcnMpLCB0ZXh0Lmxlbmd0aCgp
ICogc2l6ZW9mKFVDaGFyKSB9KTsKIH0KIAogaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZFRleHQo
aW50IGluZGV4LCBTdHJpbmdWaWV3IHRleHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9zcWwvU1FMaXRlU3RhdGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM5LDYgKzM5LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIH5TUUxpdGVTdGF0ZW1l
bnQoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBTUUxpdGVTdGF0ZW1lbnQoU1FMaXRlU3RhdGVtZW50
JiYpOwogICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIGludCBiaW5kQmxvYihpbnQgaW5kZXgsIFNw
YW48Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJpbmRCbG9iKGlu
dCBpbmRleCwgU3Bhbjxjb25zdCB1aW50OF90Pik7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJp
bmRCbG9iKGludCBpbmRleCwgY29uc3QgU3RyaW5nJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50
IGJpbmRUZXh0KGludCBpbmRleCwgU3RyaW5nVmlldyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuY3BwCShyZXZpc2lvbiAyNzg4MDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU1LDEyICs1NSw3IEBAIHN0YXRpYyBzaXplX3QgbGVuZ3RoT2ZMaW5l
RW5kaW5nQXRJbmRleCgKICAgICByZXR1cm4gMDsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+IHF1b3Rl
ZFByaW50YWJsZUVuY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQotewotICAgIHJl
dHVybiBxdW90ZWRQcmludGFibGVFbmNvZGUoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkpOwot
fQotCi1WZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IHVpbnQ4X3Qq
IGlucHV0LCBzaXplX3QgaW5wdXRMZW5ndGgpCitzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IHF1b3Rl
ZFByaW50YWJsZUVuY29kZShjb25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGlucHV0TGVuZ3Ro
KQogewogICAgIFZlY3Rvcjx1aW50OF90PiBvdXQ7CiAgICAgb3V0LnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoaW5wdXRMZW5ndGgpOwpAQCAtMTE2LDEyICsxMTEsMTIgQEAgVmVjdG9yPHVpbnQ4X3Q+
IHF1b3RlZFByaW50YWJsZUVuY29kZShjbwogICAgIHJldHVybiBvdXQ7CiB9CiAKLVZlY3Rvcjx1
aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1
dCkKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNvZGUoU3Bhbjxjb25zdCBzdGQ6
OmJ5dGU+IGlucHV0KQogewotICAgIHJldHVybiBxdW90ZWRQcmludGFibGVEZWNvZGUoaW5wdXQu
ZGF0YSgpLCBpbnB1dC5zaXplKCkpOworICAgIHJldHVybiBxdW90ZWRQcmludGFibGVFbmNvZGUo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6
ZSgpKTsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCB1
aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCkKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4g
cXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBkYXRhTGVu
Z3RoKQogewogICAgIFZlY3Rvcjx1aW50OF90PiBvdXQ7CiAgICAgaWYgKCFkYXRhTGVuZ3RoKQpA
QCAtMTU2LDQgKzE1MSw5IEBAIFZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUo
Y28KICAgICByZXR1cm4gb3V0OwogfQogCitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxl
RGVjb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCkKK3sKKyAgICByZXR1cm4gcXVvdGVk
UHJpbnRhYmxlRGVjb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0LmRh
dGEoKSksIGlucHV0LnNpemUoKSk7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvUXVvdGVkUHJpbnRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzEsMTMgKzMxLDExIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1W
ZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYpOwotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCB1aW50OF90
Kiwgc2l6ZV90KTsKLQotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShjb25z
dCBWZWN0b3I8dWludDhfdD4mKTsKLVZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNv
ZGUoY29uc3QgdWludDhfdCosIHNpemVfdCk7CitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRh
YmxlRW5jb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CitWZWN0b3I8dWludDhfdD4gcXVvdGVk
UHJpbnRhYmxlRGVjb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2lu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2Fy
ZFdpbi5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9QYXN0ZWJvYXJkV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDcgKzI1MSw3IEBAIHN0
ZDo6b3B0aW9uYWw8UGFzdGVib2FyZEN1c3RvbURhdGE+IFBhc3QKICAgICAgICAgaWYgKEhBTkRM
RSBjYkRhdGEgPSA6OkdldENsaXBib2FyZERhdGEoQ3VzdG9tRGF0YUNsaXBib2FyZEZvcm1hdCkp
IHsKICAgICAgICAgICAgIHNpemVfdCBzaXplID0gR2xvYmFsU2l6ZShjYkRhdGEpOwogICAgICAg
ICAgICAgYXV0byBkYXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KEdsb2JhbExvY2soY2JEYXRh
KSk7Ci0gICAgICAgICAgICBhdXRvIGN1c3RvbURhdGEgPSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6
ZnJvbVBlcnNpc3RlbmNlRGVjb2Rlcih7ZGF0YSwgc2l6ZX0pOworICAgICAgICAgICAgYXV0byBj
dXN0b21EYXRhID0gUGFzdGVib2FyZEN1c3RvbURhdGE6OmZyb21QZXJzaXN0ZW5jZURlY29kZXIo
U3BhbiB7IGRhdGEsIHNpemUgfSk7CiAKICAgICAgICAgICAgIEdsb2JhbFVubG9jayhjYkRhdGEp
OwogICAgICAgICAgICAgOjpDbG9zZUNsaXBib2FyZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
d29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25E
YXRhYmFzZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
c2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NTksMTAgKzQ1OSwxMCBAQCBib29sIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFu
Z2VzCiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDYsIHVwZGF0ZVZp
YUNhY2hlVG9TdHJpbmcoZGF0YS5yZWdpc3RyYXRpb24udXBkYXRlVmlhQ2FjaGUpKSAhPSBTUUxJ
VEVfT0sKICAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRleHQoNywgZGF0YS5z
Y3JpcHRVUkwuc3RyaW5nKCkpICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwgaW5zZXJ0U3Rh
dGVtZW50LT5iaW5kVGV4dCg4LCB3b3JrZXJUeXBlVG9TdHJpbmcoZGF0YS53b3JrZXJUeXBlKSkg
IT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDks
IFNwYW4geyBjc3BFbmNvZGVyLmJ1ZmZlcigpLCBjc3BFbmNvZGVyLmJ1ZmZlclNpemUoKSB9KSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoOSwg
Y3NwRW5jb2Rlci5idWZmZXIoKSkgIT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8fCBpbnNlcnRT
dGF0ZW1lbnQtPmJpbmRUZXh0KDEwLCBkYXRhLnJlZmVycmVyUG9saWN5KSAhPSBTUUxJVEVfT0sK
LSAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoMTEsIFNwYW4geyBzY3Jp
cHRSZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVyKCksIHNjcmlwdFJlc291cmNlTWFwRW5jb2Rlci5i
dWZmZXJTaXplKCkgfSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1l
bnQtPmJpbmRCbG9iKDEyLCBTcGFuIHsgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXIoKSwg
Y2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXJTaXplKCkgfSkgIT0gU1FMSVRFX09LCisgICAg
ICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDExLCBzY3JpcHRSZXNvdXJjZU1h
cEVuY29kZXIuYnVmZmVyKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3Rh
dGVtZW50LT5iaW5kQmxvYigxMiwgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXIoKSkgIT0g
U1FMSVRFX09LCiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJ
VEVfRE9ORSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwg
IkZhaWxlZCB0byBzdG9yZSByZWdpc3RyYXRpb24gZGF0YSBpbnRvIHJlY29yZHMgdGFibGUgKCVp
KSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1z
ZygpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTUxNyw3ICs1MTcsNyBAQCBTdHJp
bmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yCiAgICAgICAgIHN0ZDo6b3B0aW9u
YWw8Q29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzPiBjb250ZW50U2VjdXJpdHlQ
b2xpY3k7CiAgICAgICAgIGF1dG8gY29udGVudFNlY3VyaXR5UG9saWN5RGF0YVNwYW4gPSBzcWwt
PmNvbHVtbkJsb2JBc1NwYW4oOCk7CiAgICAgICAgIGlmIChjb250ZW50U2VjdXJpdHlQb2xpY3lE
YXRhU3Bhbi5zaXplKCkpIHsKLSAgICAgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIg
Y3NwRGVjb2Rlcihjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhU3Bhbi5kYXRhKCksIGNvbnRlbnRT
ZWN1cml0eVBvbGljeURhdGFTcGFuLnNpemUoKSk7CisgICAgICAgICAgICBXVEY6OlBlcnNpc3Rl
bmNlOjpEZWNvZGVyIGNzcERlY29kZXIgeyBjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhU3BhbiB9
OwogICAgICAgICAgICAgY3NwRGVjb2RlciA+PiBjb250ZW50U2VjdXJpdHlQb2xpY3k7CiAgICAg
ICAgICAgICBpZiAoIWNvbnRlbnRTZWN1cml0eVBvbGljeSkgewogICAgICAgICAgICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIsICJSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1w
b3J0UmVjb3JkczogRmFpbGVkIHRvIGRlY29kZSBjb250ZW50U2VjdXJpdHlQb2xpY3kiKTsKQEAg
LTUzMCw3ICs1MzAsNyBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29y
CiAgICAgICAgIEhhc2hNYXA8VVJMLCBTZXJ2aWNlV29ya2VyQ29udGV4dERhdGE6OkltcG9ydGVk
U2NyaXB0PiBzY3JpcHRSZXNvdXJjZU1hcDsKICAgICAgICAgYXV0byBzY3JpcHRSZXNvdXJjZU1h
cERhdGFTcGFuID0gc3FsLT5jb2x1bW5CbG9iQXNTcGFuKDEwKTsKICAgICAgICAgaWYgKHNjcmlw
dFJlc291cmNlTWFwRGF0YVNwYW4uc2l6ZSgpKSB7Ci0gICAgICAgICAgICBXVEY6OlBlcnNpc3Rl
bmNlOjpEZWNvZGVyIHNjcmlwdFJlc291cmNlTWFwRGVjb2RlcihzY3JpcHRSZXNvdXJjZU1hcERh
dGFTcGFuLmRhdGEoKSwgc2NyaXB0UmVzb3VyY2VNYXBEYXRhU3Bhbi5zaXplKCkpOworICAgICAg
ICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBzY3JpcHRSZXNvdXJjZU1hcERlY29kZXIg
eyBzY3JpcHRSZXNvdXJjZU1hcERhdGFTcGFuIH07CiAgICAgICAgICAgICBzdGQ6Om9wdGlvbmFs
PEhhc2hNYXA8VVJMLCBJbXBvcnRlZFNjcmlwdEF0dHJpYnV0ZXM+PiBzY3JpcHRSZXNvdXJjZU1h
cFdpdGhvdXRTY3JpcHRzOwogICAgICAgICAgICAgc2NyaXB0UmVzb3VyY2VNYXBEZWNvZGVyID4+
IHNjcmlwdFJlc291cmNlTWFwV2l0aG91dFNjcmlwdHM7CiAgICAgICAgICAgICBpZiAoIXNjcmlw
dFJlc291cmNlTWFwV2l0aG91dFNjcmlwdHMpIHsKQEAgLTU0Myw3ICs1NDMsNyBAQCBTdHJpbmcg
UmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yCiAgICAgICAgIGF1dG8gY2VydGlmaWNh
dGVJbmZvRGF0YVNwYW4gPSBzcWwtPmNvbHVtbkJsb2JBc1NwYW4oMTEpOwogICAgICAgICBzdGQ6
Om9wdGlvbmFsPENlcnRpZmljYXRlSW5mbz4gY2VydGlmaWNhdGVJbmZvOwogCi0gICAgICAgIFdU
Rjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgY2VydGlmaWNhdGVJbmZvRGVjb2RlcihjZXJ0aWZpY2F0
ZUluZm9EYXRhU3Bhbi5kYXRhKCksIGNlcnRpZmljYXRlSW5mb0RhdGFTcGFuLnNpemUoKSk7Cisg
ICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgY2VydGlmaWNhdGVJbmZvRGVjb2RlciB7
IGNlcnRpZmljYXRlSW5mb0RhdGFTcGFuIH07CiAgICAgICAgIGNlcnRpZmljYXRlSW5mb0RlY29k
ZXIgPj4gY2VydGlmaWNhdGVJbmZvOwogICAgICAgICBpZiAoIWNlcnRpZmljYXRlSW5mbykgewog
ICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIlJlZ2lzdHJhdGlv
bkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzOiBGYWlsZWQgdG8gZGVjb2RlIGNlcnRpZmljYXRlSW5m
byIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1Njcmlw
dFN0b3JhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2Vydmlj
ZS9zZXJ2ZXIvU1dTY3JpcHRTdG9yYWdlLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NjcmlwdFN0b3JhZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIFN0cmluZyBTV1NjcmlwdFN0b3JhZ2U6OnNoYTJI
YXNoKGNvbnN0IFMKICAgICBhdXRvIGlucHV0VXRmOCA9IGlucHV0LnV0ZjgoKTsKICAgICBjcnlw
dG8tPmFkZEJ5dGVzKGlucHV0VXRmOC5kYXRhKCksIGlucHV0VXRmOC5sZW5ndGgoKSk7CiAgICAg
YXV0byBoYXNoID0gY3J5cHRvLT5jb21wdXRlSGFzaCgpOwotICAgIHJldHVybiBiYXNlNjRVUkxF
bmNvZGVUb1N0cmluZyhoYXNoLmRhdGEoKSwgaGFzaC5zaXplKCkpOworICAgIHJldHVybiBiYXNl
NjRVUkxFbmNvZGVUb1N0cmluZyhoYXNoKTsKIH0KIAogU3RyaW5nIFNXU2NyaXB0U3RvcmFnZTo6
c2hhMkhhc2goY29uc3QgVVJMJiBpbnB1dCkgY29uc3QKQEAgLTg2LDkgKzg2LDkgQEAgU2NyaXB0
QnVmZmVyIFNXU2NyaXB0U3RvcmFnZTo6c3RvcmUoY29ucwogICAgIGF1dG8gc2NyaXB0UGF0aCA9
IHRoaXMtPnNjcmlwdFBhdGgocmVnaXN0cmF0aW9uS2V5LCBzY3JpcHRVUkwpOwogICAgIEZpbGVT
eXN0ZW06Om1ha2VBbGxEaXJlY3RvcmllcyhGaWxlU3lzdGVtOjpwYXJlbnRQYXRoKHNjcmlwdFBh
dGgpKTsKIAotICAgIGF1dG8gaXRlcmF0ZU92ZXJCdWZmZXJBbmRXcml0ZURhdGEgPSBbJl0oY29u
c3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIHdyaXRlRGF0YSkgewot
ICAgICAgICBmb3IgKGF1dG8gaXQgPSBzY3JpcHQuYnVmZmVyKCktPmJlZ2luKCk7IGl0ICE9IHNj
cmlwdC5idWZmZXIoKS0+ZW5kKCk7ICsraXQpCi0gICAgICAgICAgICB3cml0ZURhdGEoaXQtPnNl
Z21lbnQtPmRhdGEoKSwgaXQtPnNlZ21lbnQtPnNpemUoKSk7CisgICAgYXV0byBpdGVyYXRlT3Zl
ckJ1ZmZlckFuZFdyaXRlRGF0YSA9IFsmXShjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qg
c3RkOjpieXRlPik+JiB3cml0ZURhdGEpIHsKKyAgICAgICAgZm9yIChhdXRvJiBzZWdtZW50RW50
cnkgOiAqc2NyaXB0LmJ1ZmZlcigpKQorICAgICAgICAgICAgd3JpdGVEYXRhKHNlZ21lbnRFbnRy
eS5zZWdtZW50LT5ieXRlcygpKTsKICAgICB9OwogCiAgICAgaWYgKCFzaG91bGRVc2VGaWxlTWFw
cGluZyhzY3JpcHQuYnVmZmVyKCktPnNpemUoKSkpIHsKQEAgLTk3LDggKzk3LDggQEAgU2NyaXB0
QnVmZmVyIFNXU2NyaXB0U3RvcmFnZTo6c3RvcmUoY29ucwogICAgICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoU2VydmljZVdvcmtlciwgIlNXU2NyaXB0U3RvcmFnZTo6c3RvcmU6IEZhaWx1cmUg
dG8gc3RvcmUgJXMsIEZpbGVTeXN0ZW06Om9wZW5GaWxlKCkgZmFpbGVkIiwgc2NyaXB0UGF0aC51
dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIH0KLSAgICAg
ICAgaXRlcmF0ZU92ZXJCdWZmZXJBbmRXcml0ZURhdGEoWyZdKGNvbnN0IHVpbnQ4X3QqIGRhdGEs
IHNpemVfdCBzaXplKSB7Ci0gICAgICAgICAgICBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShoYW5k
bGUsIGRhdGEsIHNpemUpOworICAgICAgICBpdGVyYXRlT3ZlckJ1ZmZlckFuZFdyaXRlRGF0YShb
Jl0oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpIHsKKyAgICAgICAgICAgIEZpbGVTeXN0ZW06
OndyaXRlVG9GaWxlKGhhbmRsZSwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9KTsKICAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VG
aWxlKGhhbmRsZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw4MSBAQAorMjAyMS0wNi0x
MSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRvcHQgU3BhbiBp
biBtb3JlIHBsYWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgW1dJUF0KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFn
ZUVuZ2luZUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6
ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6ZGVjb2RlUmVj
b3JkSGVhZGVyKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VF
bmdpbmVDYWNoZXMuY3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6
c3RvcmVPcmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVh
ZE9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6ZW5jb2RlQ2FjaGVOYW1l
cyk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6ZGVjb2RlQ2FjaGVzTmFtZXMpOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6Om1hcFRvRmlsZSBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Y29tcHV0ZVNIQTEpOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaDoKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhY2hlOjpEYXRhOjpEYXRhKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
RGF0YTo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6
OmFkb3B0TWFwKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVF
bnRyeS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6OmVuY29kZUFz
U3RvcmFnZVJlY29yZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50
cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZUtleS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6aGFz
aFN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6S2V5Ojpjb21wdXRlSGFz
aCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6S2V5Ojpjb21wdXRlUGFy
dGl0aW9uSGFzaCBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6ZGVjb2Rl
UmVjb3JkTWV0YURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmVuY29kZVJl
Y29yZE1ldGFEYXRhKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVTdWJyZXNvdXJjZXNFbnRyeS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
U3VicmVzb3VyY2VzRW50cnk6OmVuY29kZUFzU3RvcmFnZVJlY29yZCBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3VicmVzb3VyY2VzRW50cnk6OmRlY29kZVN0b3JhZ2VS
ZWNvcmQpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVyLmg6CisgICAgICAg
ICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1l
bnRDb2RlcjxDU3RyaW5nPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxD
U3RyaW5nPjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxTdHJpbmc+Ojpl
bmNvZGUpOgorICAgICAgICAoSVBDOjpkZWNvZGVTdHJpbmdUZXh0KToKKyAgICAgICAgKElQQzo6
QXJndW1lbnRDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1
bWVudENvZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29kZSk6CisgICAgICAgICogUGxhdGZvcm0vSVBD
L0FyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgIChJUEM6OlNpbXBsZUFyZ3VtZW50Q29kZXI6OmVu
Y29kZSk6CisgICAgICAgIChJUEM6OlNpbXBsZUFyZ3VtZW50Q29kZXI6OmRlY29kZSk6CisgICAg
ICAgICogUGxhdGZvcm0vSVBDL0FycmF5UmVmZXJlbmNlLmg6CisgICAgICAgICogUGxhdGZvcm0v
SVBDL0RlY29kZXIuY3BwOgorICAgICAgICAoSVBDOjpEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0
aERhdGEpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9EZWNvZGVyLmg6CisgICAgICAgIChJUEM6
OkRlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgICogUGxhdGZvcm0vSVBD
L0VuY29kZXIuY3BwOgorICAgICAgICAoSVBDOjpFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERh
dGEpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9FbmNvZGVyLmg6CisgICAgICAgICogUGxhdGZv
cm0vSVBDL1NoYXJlZEJ1ZmZlckNvcHkuY3BwOgorICAgICAgICAoSVBDOjpTaGFyZWRCdWZmZXJD
b3B5OjplbmNvZGUgY29uc3QpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0
aW9uRW5jb2Rlci5oOgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3Bw
OgorICAgICAgICAoSVBDOjplbmNvZGVTaGFyZWRCdWZmZXIpOgorICAgICAgICAoSVBDOjpkZWNv
ZGVTaGFyZWRCdWZmZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVM
aXN0U3RvcmUuY3BwOgorICAgICAgICAoQVBJOjplbmNvZGVDb250ZW50UnVsZUxpc3RNZXRhRGF0
YSk6CisgICAgICAgIChBUEk6OmdldERhdGEpOgorICAgICAgICAoQVBJOjpkZWNvZGVDb250ZW50
UnVsZUxpc3RNZXRhRGF0YSk6CisgICAgICAgIChBUEk6OndyaXRlRGF0YVRvRmlsZSk6CisgICAg
ICAgICogVUlQcm9jZXNzL21hYy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpIaXN0b3J5RW50cnlEYXRhRW5jb2Rlcjo6b3BlcmF0b3I8PCk6CisgICAgICAg
IChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFFbmNvZGVyOjplbmNvZGVBcml0aG1ldGljVHlwZSk6
CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFFbmNvZGVyOjplbmNvZGVGaXhlZExl
bmd0aERhdGEpOgorICAgICAgICAoV2ViS2l0OjpIaXN0b3J5RW50cnlEYXRhRGVjb2Rlcjo6b3Bl
cmF0b3I+Pik6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFEZWNvZGVyOjpkZWNv
ZGVBcml0aG1ldGljVHlwZSk6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFEZWNv
ZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9JUENUZXN0aW5nQVBJLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6ZW5j
b2RlVHlwZWRBcnJheSk6CisKIDIwMjEtMDYtMTEgIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBh
cHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyNzg3NTQuCkluZGV4
OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFu
YWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Qcml2
YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMyw3ICszMjMsNyBAQCB2b2lkIFByaXZhdGVDbGlja01l
YXN1cmVtZW50TWFuYWdlcjo6ZmlyCiAgICAgICAgIGNyeXB0by0+YWRkQnl0ZXMocHVibGljS2V5
RGF0YS0+ZGF0YSgpLCBwdWJsaWNLZXlEYXRhLT5zaXplKCkpOwogICAgICAgICBhdXRvIHB1Ymxp
Y0tleURhdGFIYXNoID0gY3J5cHRvLT5jb21wdXRlSGFzaCgpOwogCi0gICAgICAgIGF1dG8ga2V5
SUQgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhwdWJsaWNLZXlEYXRhSGFzaC5kYXRhKCksIHB1
YmxpY0tleURhdGFIYXNoLnNpemUoKSk7CisgICAgICAgIGF1dG8ga2V5SUQgPSBiYXNlNjRVUkxF
bmNvZGVUb1N0cmluZyhwdWJsaWNLZXlEYXRhSGFzaCk7CiAgICAgICAgIGlmIChrZXlJRCAhPSBh
dHRyaWJ1dGlvbi5zb3VyY2VVbmxpbmthYmxlVG9rZW4oKS0+a2V5SURCYXNlNjRVUkwpCiAgICAg
ICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCShyZXZp
c2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hl
U3RvcmFnZUVuZ2luZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTY1LDcgKzU2NSw3IEBA
IFN0b3JhZ2U6OlJlY29yZCBDYWNoZTo6ZW5jb2RlKGNvbnN0IFJlY28KIAogICAgIGVuY29kZXIu
ZW5jb2RlQ2hlY2tzdW0oKTsKIAotICAgIERhdGEgaGVhZGVyKGVuY29kZXIuYnVmZmVyKCksIGVu
Y29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICBEYXRhIGhlYWRlcihlbmNvZGVyLmJ1ZmZlcigpKTsK
ICAgICBEYXRhIGJvZHk7CiAgICAgV1RGOjpzd2l0Y2hPbihyZWNvcmQucmVzcG9uc2VCb2R5LCBb
XShjb25zdCBSZWY8V2ViQ29yZTo6Rm9ybURhdGE+JiBmb3JtRGF0YSkgewogICAgICAgICAvLyBG
SVhNRTogU3RvcmUgZm9ybSBkYXRhIGJvZHkuCkBAIC02MzAsNyArNjMwLDcgQEAgc3RhdGljIHN0
ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RE9NQ2FjaGVFbgogCiBzdGQ6Om9wdGlvbmFsPENhY2hlOjpE
ZWNvZGVkUmVjb3JkPiBDYWNoZTo6ZGVjb2RlUmVjb3JkSGVhZGVyKGNvbnN0IFN0b3JhZ2U6OlJl
Y29yZCYgc3RvcmFnZSkKIHsKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIo
c3RvcmFnZS5oZWFkZXIuZGF0YSgpLCBzdG9yYWdlLmhlYWRlci5zaXplKCkpOworICAgIFdURjo6
UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihTcGFuIHsgc3RvcmFnZS5oZWFkZXIuZGF0YSgp
LCBzdG9yYWdlLmhlYWRlci5zaXplKCkgfSk7CiAKICAgICBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4g
aW5zZXJ0aW9uVGltZTsKICAgICBkZWNvZGVyID4+IGluc2VydGlvblRpbWU7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNo
ZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwNSwxNCArMTA1LDE0IEBAIHZvaWQgQ2FjaGVzOjpzdG9yZU9yaWdp
bihDb21wbGV0aW9uQ2FsbGIKICAgICBlbmNvZGVyIDw8IG1fb3JpZ2luLmNsaWVudE9yaWdpbi5w
cm90b2NvbDsKICAgICBlbmNvZGVyIDw8IG1fb3JpZ2luLmNsaWVudE9yaWdpbi5ob3N0OwogICAg
IGVuY29kZXIgPDwgbV9vcmlnaW4uY2xpZW50T3JpZ2luLnBvcnQ7Ci0gICAgbV9lbmdpbmUtPndy
aXRlRmlsZShjYWNoZXNPcmlnaW5GaWxlbmFtZShtX3Jvb3RQYXRoKSwgRGF0YSB7IGVuY29kZXIu
YnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpIH0sIFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
IChzdGQ6Om9wdGlvbmFsPEVycm9yPiYmIGVycm9yKSBtdXRhYmxlIHsKKyAgICBtX2VuZ2luZS0+
d3JpdGVGaWxlKGNhY2hlc09yaWdpbkZpbGVuYW1lKG1fcm9vdFBhdGgpLCBEYXRhIHsgZW5jb2Rl
ci5idWZmZXIoKSB9LCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoc3RkOjpvcHRpb25hbDxFcnJv
cj4mJiBlcnJvcikgbXV0YWJsZSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUo
ZXJyb3IpKTsKICAgICB9KTsKIH0KIAogc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpDbGllbnRPcmln
aW4+IENhY2hlczo6cmVhZE9yaWdpbihjb25zdCBEYXRhJiBkYXRhKQogewotICAgIFdURjo6UGVy
c2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOworICAg
IFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihTcGFuIHsgZGF0YS5kYXRhKCksIGRh
dGEuc2l6ZSgpIH0pOwogCiAgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpTZWN1cml0eU9yaWdp
bkRhdGE+IHRvcE9yaWdpbjsKICAgICBkZWNvZGVyID4+IHRvcE9yaWdpbjsKQEAgLTQwNCwxMiAr
NDA0LDEyIEBAIHN0YXRpYyBpbmxpbmUgRGF0YSBlbmNvZGVDYWNoZU5hbWVzKGNvbnMKICAgICAg
ICAgZW5jb2RlciA8PCBjYWNoZS51bmlxdWVOYW1lKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIERh
dGEgeyBlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSB9OworICAgIHJldHVy
biBEYXRhIHsgZW5jb2Rlci5idWZmZXIoKSB9OwogfQogCiBzdGF0aWMgaW5saW5lIEV4cGVjdGVk
PFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiwgRXJyb3I+IGRlY29kZUNhY2hlc05h
bWVzKGNvbnN0IERhdGEmIGRhdGEpCiB7Ci0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBk
ZWNvZGVyKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6
RGVjb2RlciBkZWNvZGVyKFNwYW4geyBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkgfSk7CiAgICAg
c3RkOjpvcHRpb25hbDx1aW50NjRfdD4gY291bnQ7CiAgICAgZGVjb2RlciA+PiBjb3VudDsKICAg
ICBpZiAoIWNvdW50KQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewog
RGF0YSBEYXRhOjptYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKSBjb25zdAogewogICAgIEZp
bGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGU7Ci0gICAgYXV0byBhcHBseURhdGEg
PSBbJl0oY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIGFwcGxp
ZXIpIHsgYXBwbHkoYXBwbGllcik7IH07CisgICAgYXV0byBhcHBseURhdGEgPSBbJl0oY29uc3Qg
RnVuY3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYgYXBwbGllcikgeyBhcHBseShh
cHBsaWVyKTsgfTsKICAgICBhdXRvIG1hcHBlZEZpbGUgPSBGaWxlU3lzdGVtOjptYXBUb0ZpbGUo
cGF0aCwgc2l6ZSgpLCBXVEZNb3ZlKGFwcGx5RGF0YSksICZoYW5kbGUpOwogICAgIGlmICghbWFw
cGVkRmlsZSkKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTg2LDkgKzg2LDkgQEAgRGF0YSBhZG9w
dEFuZE1hcEZpbGUoRmlsZVN5c3RlbTo6UGxhdGZvcgogU0hBMTo6RGlnZXN0IGNvbXB1dGVTSEEx
KGNvbnN0IERhdGEmIGRhdGEsIGNvbnN0IFNhbHQmIHNhbHQpCiB7CiAgICAgU0hBMSBzaGExOwot
ICAgIHNoYTEuYWRkQnl0ZXMoc2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKTsKLSAgICBkYXRhLmFw
cGx5KFsmc2hhMV0oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAg
c2hhMS5hZGRCeXRlcyhkYXRhLCBzaXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKHNhbHQpOworICAg
IGRhdGEuYXBwbHkoWyZzaGExXShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkgeworICAgICAg
ICBzaGExLmFkZEJ5dGVzKGRhdGEpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9KTsKIApJ
bmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVEYXRhLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2
ICsyOCw3IEBACiAjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KICNpbmNsdWRlIDx3dGYvRnVu
Y3Rpb25EaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8d3RmL1NIQTEuaD4KKyNpbmNsdWRlIDx3dGYv
U3Bhbi5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC01NCw2ICs1NSwxMCBAQCBjbGFzcyBEYXRhIHsK
IHB1YmxpYzoKICAgICBEYXRhKCkgeyB9CiAgICAgRGF0YShjb25zdCB1aW50OF90Kiwgc2l6ZV90
KTsKKyAgICBEYXRhKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhKQorICAgICAgICA6IERhdGEo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5kYXRhKCkpLCBkYXRhLnNpemUo
KSkKKyAgICB7CisgICAgfQogCiAgICAgfkRhdGEoKSB7IH0KIApAQCAtNzksNyArODQsNyBAQCBw
dWJsaWM6CiAKICAgICBEYXRhIHN1YnJhbmdlKHNpemVfdCBvZmZzZXQsIHNpemVfdCkgY29uc3Q7
CiAKLSAgICBib29sIGFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2wgKGNvbnN0IHVpbnQ4X3QqLCBz
aXplX3QpPiYpIGNvbnN0OworICAgIGJvb2wgYXBwbHkoY29uc3QgRnVuY3Rpb248Ym9vbCAoU3Bh
bjxjb25zdCBzdGQ6OmJ5dGU+KT4mKSBjb25zdDsKIAogICAgIERhdGEgbWFwVG9GaWxlKGNvbnN0
IFN0cmluZyYgcGF0aCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1tCShyZXZp
c2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZURhdGFDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjksMTIgKzY5LDEyIEBAIGJv
b2wgRGF0YTo6aXNOdWxsKCkgY29uc3QKICAgICByZXR1cm4gIW1fZGlzcGF0Y2hEYXRhOwogfQog
Ci1ib29sIERhdGE6OmFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2wgKGNvbnN0IHVpbnQ4X3QqLCBz
aXplX3QpPiYgYXBwbGllcikgY29uc3QKK2Jvb2wgRGF0YTo6YXBwbHkoY29uc3QgRnVuY3Rpb248
Ym9vbCAoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mIGFwcGxpZXIpIGNvbnN0CiB7CiAgICAgaWYg
KCFtX3NpemUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gZGlzcGF0Y2hfZGF0
YV9hcHBseShtX2Rpc3BhdGNoRGF0YS5nZXQoKSwgWyZhcHBsaWVyXShkaXNwYXRjaF9kYXRhX3Qs
IHNpemVfdCwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgcmV0dXJu
IGFwcGxpZXIoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBzaXplKTsKKyAgICAg
ICAgcmV0dXJuIGFwcGxpZXIoU3BhbiB7IHN0YXRpY19jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGRh
dGEpLCBzaXplIH0pOwogICAgIH0pOwogfQogCkBAIC05NCwxNCArOTQsMTEgQEAgRGF0YSBjb25j
YXRlbmF0ZShjb25zdCBEYXRhJiBhLCBjb25zdCBEYQogCiBEYXRhIERhdGE6OmFkb3B0TWFwKEZp
bGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYgbWFwcGVkRmlsZSwgRmlsZVN5c3RlbTo6UGxhdGZv
cm1GaWxlSGFuZGxlIGZkKQogewotICAgIHNpemVfdCBzaXplID0gbWFwcGVkRmlsZS5zaXplKCk7
Ci0gICAgdm9pZCogbWFwID0gbWFwcGVkRmlsZS5sZWFrSGFuZGxlKCk7Ci0gICAgQVNTRVJUKG1h
cCk7Ci0gICAgQVNTRVJUKG1hcCAhPSBNQVBfRkFJTEVEKTsKKyAgICBhdXRvIG1hcCA9IG1hcHBl
ZEZpbGUubGVha0hhbmRsZSgpOworICAgIEFTU0VSVChtYXAuZGF0YSgpKTsKKyAgICBBU1NFUlQo
bWFwLmRhdGEoKSAhPSBNQVBfRkFJTEVEKTsKICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmQp
OwotICAgIGF1dG8gYm9keU1hcCA9IGFkb3B0T1NPYmplY3QoZGlzcGF0Y2hfZGF0YV9jcmVhdGUo
bWFwLCBzaXplLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9S
SVRZX0RFRkFVTFQsIDApLCBbbWFwLCBzaXplXSB7Ci0gICAgICAgIG11bm1hcChtYXAsIHNpemUp
OwotICAgIH0pKTsKKyAgICBhdXRvIGJvZHlNYXAgPSBhZG9wdE9TT2JqZWN0KGRpc3BhdGNoX2Rh
dGFfY3JlYXRlKG1hcC5kYXRhKCksIG1hcC5zaXplKCksIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVl
dWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIERJU1BBVENIX0RBVEFfREVT
VFJVQ1RPUl9NVU5NQVApKTsKICAgICByZXR1cm4geyBXVEZNb3ZlKGJvZHlNYXApLCBEYXRhOjpC
YWNraW5nOjpNYXAgfTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50
cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSwxMCArOTksMTAgQEAgU3RvcmFnZTo6UmVjb3Jk
IEVudHJ5OjplbmNvZGVBc1N0b3JhZ2VSZQogICAgIAogICAgIGVuY29kZXIuZW5jb2RlQ2hlY2tz
dW0oKTsKIAotICAgIERhdGEgaGVhZGVyKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVy
U2l6ZSgpKTsKKyAgICBEYXRhIGhlYWRlciB7IGVuY29kZXIuYnVmZmVyKCkgfTsKICAgICBEYXRh
IGJvZHk7CiAgICAgaWYgKG1fYnVmZmVyKQotICAgICAgICBib2R5ID0geyBtX2J1ZmZlci0+ZGF0
YSgpLCBtX2J1ZmZlci0+c2l6ZSgpIH07CisgICAgICAgIGJvZHkgPSB7IG1fYnVmZmVyLT5ieXRl
cygpIH07CiAKICAgICByZXR1cm4geyBtX2tleSwgbV90aW1lU3RhbXAsIGhlYWRlciwgYm9keSwg
eyB9IH07CiB9CkBAIC0xMTEsNyArMTExLDcgQEAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBFbnRy
eTo6ZGVjb2RlU3RvcgogewogICAgIGF1dG8gZW50cnkgPSBtYWtlVW5pcXVlPEVudHJ5PihzdG9y
YWdlRW50cnkpOwogCi0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKHN0b3Jh
Z2VFbnRyeS5oZWFkZXIuZGF0YSgpLCBzdG9yYWdlRW50cnkuaGVhZGVyLnNpemUoKSk7CisgICAg
V1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyIHsgU3BhbiB7IHN0b3JhZ2VFbnRyeS5o
ZWFkZXIuZGF0YSgpLCBzdG9yYWdlRW50cnkuaGVhZGVyLnNpemUoKSB9IH07CiAgICAgV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKICAgICBpZiAoIVdlYkNvcmU6OlJlc291cmNl
UmVzcG9uc2U6OmRlY29kZShkZWNvZGVyLCByZXNwb25zZSkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVLZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlS2V5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04OCwxMyArODgsMTMgQEAgc3RhdGljIHZvaWQgaGFzaFN0cmluZyhTSEExJiBzaGExLCBj
b25zdAogCiAgICAgaWYgKHN0cmluZy5pczhCaXQoKSAmJiBzdHJpbmcuaXNBbGxBU0NJSSgpKSB7
CiAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbnVsbEJ5dGUgPSAwOwotICAgICAgICBzaGExLmFkZEJ5
dGVzKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAgICAgICBzaGEx
LmFkZEJ5dGVzKCZudWxsQnl0ZSwgMSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IHN0
cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkgfSk7CisgICAgICAgIHNoYTEuYWRk
Qnl0ZXMoU3BhbiB7ICZudWxsQnl0ZSwgMSB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBhdXRvIGNTdHJpbmcgPSBzdHJpbmcudXRmOCgpOwogICAgIC8vIEluY2x1ZGUgdGVybWluYXRp
bmcgbnVsbCBieXRlLgotICAgIHNoYTEuYWRkQnl0ZXMoY1N0cmluZy5kYXRhQXNVSW50OFB0cigp
LCBjU3RyaW5nLmxlbmd0aCgpICsgMSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgY1N0cmlu
Zy5kYXRhQXNVSW50OFB0cigpLCBjU3RyaW5nLmxlbmd0aCgpICsgMSB9KTsKIH0KIAogS2V5OjpI
YXNoVHlwZSBLZXk6OmNvbXB1dGVIYXNoKGNvbnN0IFNhbHQmIHNhbHQpIGNvbnN0CkBAIC0xMDIs
NyArMTAyLDcgQEAgS2V5OjpIYXNoVHlwZSBLZXk6OmNvbXB1dGVIYXNoKGNvbnN0IFNhbAogICAg
IC8vIFdlIGRvbid0IHJlYWxseSBuZWVkIGEgY3J5cHRvZ3JhcGhpYyBoYXNoLiBUaGUga2V5IGlz
IGFsd2F5cyB2ZXJpZmllZCBhZ2FpbnN0IHRoZSBlbnRyeSBoZWFkZXIuCiAgICAgLy8gU0hBMSBq
dXN0IGhhcHBlbnMgdG8gYmUgc3VpdGFibHkgc2l6ZWQsIGZhc3QgYW5kIGF2YWlsYWJsZS4KICAg
ICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhzYWx0LmRhdGEoKSwgc2FsdC5zaXplKCkp
OworICAgIHNoYTEuYWRkQnl0ZXMoc2FsdCk7CiAKICAgICBoYXNoU3RyaW5nKHNoYTEsIG1fcGFy
dGl0aW9uKTsKICAgICBoYXNoU3RyaW5nKHNoYTEsIG1fdHlwZSk7CkBAIC0xMTcsNyArMTE3LDcg
QEAgS2V5OjpIYXNoVHlwZSBLZXk6OmNvbXB1dGVIYXNoKGNvbnN0IFNhbAogS2V5OjpIYXNoVHlw
ZSBLZXk6OmNvbXB1dGVQYXJ0aXRpb25IYXNoKGNvbnN0IFNhbHQmIHNhbHQpIGNvbnN0CiB7CiAg
ICAgU0hBMSBzaGExOwotICAgIHNoYTEuYWRkQnl0ZXMoc2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgp
KTsKKyAgICBzaGExLmFkZEJ5dGVzKHNhbHQpOwogCiAgICAgaGFzaFN0cmluZyhzaGExLCBtX3Bh
cnRpdGlvbik7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlU3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU0LDggKzQ1NCw4IEBAIHN0cnVjdCBSZWNvcmRNZXRh
RGF0YSB7CiBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlUmVjb3JkTWV0YURh
dGEoUmVjb3JkTWV0YURhdGEmIG1ldGFEYXRhLCBjb25zdCBEYXRhJiBmaWxlRGF0YSkKIHsKICAg
ICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBmaWxlRGF0YS5hcHBseShbJm1ldGFEYXRhLCAm
c3VjY2Vzc10oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgV1RG
OjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOworICAgIGZpbGVEYXRh
LmFwcGx5KFsmbWV0YURhdGEsICZzdWNjZXNzXShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkg
eworICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YSk7CiAgICAg
ICAgIAogICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBjYWNoZVN0b3JhZ2VWZXJzaW9u
OwogICAgICAgICBkZWNvZGVyID4+IGNhY2hlU3RvcmFnZVZlcnNpb247CkBAIC01ODYsNyArNTg2
LDcgQEAgc3RhdGljIERhdGEgZW5jb2RlUmVjb3JkTWV0YURhdGEoY29uc3QgUgogCiAgICAgZW5j
b2Rlci5lbmNvZGVDaGVja3N1bSgpOwogCi0gICAgcmV0dXJuIERhdGEoZW5jb2Rlci5idWZmZXIo
KSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOworICAgIHJldHVybiB7IGVuY29kZXIuYnVmZmVyKCkg
fTsKIH0KIAogc3RkOjpvcHRpb25hbDxCbG9iU3RvcmFnZTo6QmxvYj4gU3RvcmFnZTo6c3RvcmVC
b2R5QXNCbG9iKFdyaXRlT3BlcmF0aW9uJiB3cml0ZU9wZXJhdGlvbikKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0Vu
dHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDE0ICsxMjMsMTQgQEAgU3RvcmFnZTo6UmVj
b3JkIFN1YnJlc291cmNlc0VudHJ5OjplbmNvZAogCiAgICAgZW5jb2Rlci5lbmNvZGVDaGVja3N1
bSgpOwogCi0gICAgcmV0dXJuIHsgbV9rZXksIG1fdGltZVN0YW1wLCB7IGVuY29kZXIuYnVmZmVy
KCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpIH0sIHsgfSwgeyB9fTsKKyAgICByZXR1cm4geyBtX2tl
eSwgbV90aW1lU3RhbXAsIHsgZW5jb2Rlci5idWZmZXIoKSB9LCB7IH0sIHsgfX07CiB9CiAKIHN0
ZDo6dW5pcXVlX3B0cjxTdWJyZXNvdXJjZXNFbnRyeT4gU3VicmVzb3VyY2VzRW50cnk6OmRlY29k
ZVN0b3JhZ2VSZWNvcmQoY29uc3QgU3RvcmFnZTo6UmVjb3JkJiBzdG9yYWdlRW50cnkpCiB7CiAg
ICAgYXV0byBlbnRyeSA9IG1ha2VVbmlxdWU8U3VicmVzb3VyY2VzRW50cnk+KHN0b3JhZ2VFbnRy
eSk7CiAKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoc3RvcmFnZUVudHJ5
LmhlYWRlci5kYXRhKCksIHN0b3JhZ2VFbnRyeS5oZWFkZXIuc2l6ZSgpKTsKKyAgICBXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyBTcGFuIHsgc3RvcmFnZUVudHJ5LmhlYWRlci5k
YXRhKCksIHN0b3JhZ2VFbnRyeS5oZWFkZXIuc2l6ZSgpIH0gfTsKICAgICBzdGQ6Om9wdGlvbmFs
PFZlY3RvcjxTdWJyZXNvdXJjZUluZm8+PiBzdWJyZXNvdXJjZXM7CiAgICAgZGVjb2RlciA+PiBz
dWJyZXNvdXJjZXM7CiAgICAgaWYgKCFzdWJyZXNvdXJjZXMpCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc5LDEzICs3OSwxMyBAQCBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxULCB0eXBlbmFtZSBzdGQ6OmVu
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KICAgICBzdGF0aWMgdm9pZCBlbmNvZGUo
RW5jb2RlciYgZW5jb2RlciwgVCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGVuY29kZXIuZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZ2YWx1ZSks
IHNpemVvZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKFNwYW4geyAmdmFsdWUsIDEgfSk7CiAgICAgfQogCiAgICAgc3RhdGljIHN0ZDo6b3B0
aW9uYWw8VD4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewogICAgICAgICBUIHJlc3Vs
dDsKLSAgICAgICAgaWYgKGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KCZyZXN1bHQpLCBzaXplb2YoVCksIGFsaWdub2YoVCkpKQorICAgICAg
ICBpZiAoZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZyZXN1bHQsIDEgfSkp
CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENv
ZGVycy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L0FyZ3VtZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCB2b2lk
IEFyZ3VtZW50Q29kZXI8Q1N0cmluZz46OmVuY29kZShFbmNvCiAKICAgICB1aW50MzJfdCBsZW5n
dGggPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAgZW5jb2RlciA8PCBsZW5ndGg7Ci0gICAgZW5jb2Rl
ci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RyaW5nLmRhdGFBc1VJbnQ4UHRyKCksIGxlbmd0aCwg
MSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RyaW5nLmJ5dGVzKCkpOwog
fQogCiBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBBcmd1bWVudENvZGVyPENTdHJpbmc+OjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlciwgQ1N0cmluZyYgcmVzdWx0KQpAQCAtMTAzLDcgKzEwMyw3IEBA
IFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIEFyZ3VtZW50Q29kZXI8Q1MKIAogICAgIGNoYXIqIGJ1
ZmZlcjsKICAgICBDU3RyaW5nIHN0cmluZyA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQobGVu
Z3RoLCBidWZmZXIpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoLCAxKSkKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBidWZmZXIsIGxlbmd0aCB9KSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmVzdWx0ID0gc3RyaW5nOwpAQCAtMTIzLDExICsx
MjMsNyBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8U3RyaW5nPjo6ZW5jb2RlKEVuY29kCiAgICAgYm9v
bCBpczhCaXQgPSBzdHJpbmcuaXM4Qml0KCk7CiAKICAgICBlbmNvZGVyIDw8IGxlbmd0aCA8PCBp
czhCaXQ7Ci0KLSAgICBpZiAoaXM4Qml0KQotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShzdHJpbmcuY2hhcmFjdGVyczgoKSwgbGVuZ3RoICogc2l6ZW9mKExDaGFyKSwgYWxp
Z25vZihMQ2hhcikpOwotICAgIGVsc2UKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnMx
NigpKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSwgYWxpZ25vZihVQ2hhcikpOworICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0cmluZy5ieXRlcygpKTsKIH0KIHRlbXBsYXRlCiB2
b2lkIEFyZ3VtZW50Q29kZXI8U3RyaW5nPjo6ZW5jb2RlPEVuY29kZXI+KEVuY29kZXImLCBjb25z
dCBTdHJpbmcmKTsKQEAgLTE0Myw3ICsxMzksNyBAQCBzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9u
YWw8U3RyaW5nPiBkZWNvCiAgICAgCiAgICAgQ2hhcmFjdGVyVHlwZSogYnVmZmVyOwogICAgIFN0
cmluZyBzdHJpbmcgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIp
OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2Fz
dDx1aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJhY3RlclR5cGUpLCBhbGln
bm9mKENoYXJhY3RlclR5cGUpKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhE
YXRhKFNwYW4geyBidWZmZXIsIGxlbmd0aCB9KSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKICAgICAKICAgICByZXR1cm4gc3RyaW5nOwpAQCAtMTgxLDEyICsxNzcsMTIgQEAgV0FSTl9V
TlVTRURfUkVUVVJOIGJvb2wgQXJndW1lbnRDb2RlcjxTdAogCiB2b2lkIEFyZ3VtZW50Q29kZXI8
U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNIQTE6OkRpZ2Vz
dCYgZGlnZXN0KQogewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGRpZ2VzdC5k
YXRhKCksIHNpemVvZihkaWdlc3QpLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3Ro
RGF0YShkaWdlc3QpOwogfQogCiBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBBcmd1bWVudENvZGVy
PFNIQTE6OkRpZ2VzdD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTSEExOjpEaWdlc3QmIGRp
Z2VzdCkKIHsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0
LmRhdGEoKSwgc2l6ZW9mKGRpZ2VzdCksIDEpOworICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZp
eGVkTGVuZ3RoRGF0YShkaWdlc3QpOwogfQogCiAjaWYgSEFWRShBVURJVF9UT0tFTikKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtNDUsMTIgKzQ1LDEyIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBTaW1wbGVBcmd1bWUKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgogICAgIHN0
YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBUJiB0KQogICAgIHsKLSAg
ICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OF90Kj4oJnQpLCBzaXplb2YoVCksIGFsaWdub2YoVCkpOworICAgICAgICBlbmNvZGVy
LmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJnQsIDEgfSk7CiAgICAgfQogCiAgICAgc3Rh
dGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBUJiB0
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ0KSwgc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKKyAg
ICAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmdCwgMSB9
KTsKICAgICB9CiB9OwogCkBAIC02MSwxMyArNjEsMTQgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IEV4dGVudD4gc3RydQogICAgIHsKICAgICAgICAgaWYgKCFFeHRlbnQpCiAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGFycmF5UmVmZXJlbmNlLmRhdGEoKSksIGFycmF5
UmVmZXJlbmNlLnNpemUoKSAqIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBhcnJheVJlZmVyZW5jZS5kYXRhKCksIGFy
cmF5UmVmZXJlbmNlLnNpemUoKSB9KTsKICAgICB9CiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8
QXJyYXlSZWZlcmVuY2VUeXBlPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7CiAgICAg
ICAgIGlmICghRXh0ZW50KQogICAgICAgICAgICAgcmV0dXJuIEFycmF5UmVmZXJlbmNlVHlwZSgp
OwotICAgICAgICBjb25zdCB1aW50OF90KiBkYXRhID0gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0
aFJlZmVyZW5jZShFeHRlbnQgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpOworCisgICAgICAgIGNv
bnN0IGF1dG8qIGRhdGEgPSBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoUmVmZXJlbmNlKEV4dGVu
dCAqIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CiAgICAgICAgIGlmICghZGF0YSkKICAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIHJldHVybiBBcnJheVJlZmVyZW5jZVR5
cGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4oZGF0YSksIEV4dGVudCk7CkBAIC04Miw3ICs4
Myw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBBcmd1bWVudENvZGUKICAgICAgICAg
ZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYXJyYXlSZWZlcmVuY2Uuc2l6ZSgpKTsK
ICAgICAgICAgaWYgKCFhcnJheVJlZmVyZW5jZS5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDhfdCo+KGFycmF5UmVmZXJlbmNlLmRhdGEoKSksIGFycmF5UmVmZXJlbmNlLnNp
emUoKSAqIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKFNwYW4geyBhcnJheVJlZmVyZW5jZS5kYXRhKCksIGFycmF5UmVmZXJlbmNl
LnNpemUoKSB9KTsKICAgICB9CiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8QXJyYXlSZWZlcmVu
Y2VUeXBlPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7CkBAIC05Niw3ICs5Nyw3IEBA
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBBcmd1bWVudENvZGUKICAgICAgICAgaWYgKFVO
TElLRUxZKGRhdGFTaXplLmhhc092ZXJmbG93ZWQoKSkpCiAgICAgICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogCi0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEgPSBkZWNvZGVyLmRlY29k
ZUZpeGVkTGVuZ3RoUmVmZXJlbmNlKGRhdGFTaXplLCBhbGlnbm9mKFQpKTsKKyAgICAgICAgY29u
c3QgYXV0byogZGF0YSA9IGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhSZWZlcmVuY2UoZGF0YVNp
emUsIGFsaWdub2YoVCkpOwogICAgICAgICBpZiAoIWRhdGEpCiAgICAgICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwogICAgICAgICByZXR1cm4gQXJyYXlSZWZlcmVuY2VUeXBlKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgVCo+KGRhdGEpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KHNpemUpKTsKQEAg
LTQyMyw3ICs0MjQsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNp
CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mIHZlY3RvcikK
ICAgICB7CiAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZlY3Rvci5z
aXplKCkpOwotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih2ZWN0b3IuZGF0YSgpKSwgdmVjdG9yLnNpemUoKSAqIHNp
emVvZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKHZlY3Rvcik7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4g
Ym9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBP
dmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiYgdmVjdG9yKQpAQCAtNDQ2LDcgKzQ0Nyw3IEBA
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICAgICAgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiB0ZW1wOwog
ICAgICAgICB0ZW1wLmdyb3coc2l6ZSk7CiAKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZp
eGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPih0ZW1wLmRhdGEoKSksIHNp
emUgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKHRlbXApKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
ICAgIHZlY3Rvci5zd2FwKHRlbXApOwpAQCAtNDczLDcgKzQ3NCw3IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICAgICAgVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiB2ZWN0b3I7CiAgICAgICAgIHZlY3Rv
ci5ncm93KHNpemUpOwogCi0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERh
dGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4odmVjdG9yLmRhdGEoKSksIHNpemUgKiBzaXpl
b2YoVCksIGFsaWdub2YoVCkpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5n
dGhEYXRhKHZlY3RvcikpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAg
ICAgIHJldHVybiB2ZWN0b3I7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9BcnJh
eVJlZmVyZW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Fy
cmF5UmVmZXJlbmNlLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vSVBDL0FycmF5UmVmZXJlbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDggQEAK
IAogbmFtZXNwYWNlIElQQyB7CiAKKy8vIEZJWE1FOiBSZXBsYWNlIHdpdGggPHd0Zi9TcGFuLmg+
CisKIGlubGluZSBjb25zdGV4cHIgc2l6ZV90IGFycmF5UmVmZXJlbmNlRHluYW1pY0V4dGVudCA9
IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCk7CiAKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBULCBzaXplX3QgRXh0ZW50ID0gYXJyYXlSZWZlcmVuY2VEeW5hbWljRXh0ZW50PgpJbmRleDog
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysr
IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDYsMTMgKzIwNiwxMyBAQCBib29sIERlY29kZXI6OmJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0Nv
bnRhCiAgICAgcmV0dXJuIGFsaWduZWRCdWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKHJvdW5k
VXBUb0FsaWdubWVudChtX2J1ZmZlclBvcywgYWxpZ25tZW50KSwgbV9idWZmZXIsIG1fYnVmZmVy
RW5kLCBzaXplKTsKIH0KIAotYm9vbCBEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEodWlu
dDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQpCitib29sIERlY29kZXI6
OmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPHN0ZDo6Ynl0ZT4gZGF0YSwgc2l6ZV90IGFsaWdu
bWVudCkKIHsKLSAgICBpZiAoIWFsaWduQnVmZmVyUG9zaXRpb24oYWxpZ25tZW50LCBzaXplKSkK
KyAgICBpZiAoIWFsaWduQnVmZmVyUG9zaXRpb24oYWxpZ25tZW50LCBkYXRhLnNpemUoKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1lbWNweShkYXRhLCBtX2J1ZmZlclBvcywgc2l6
ZSk7Ci0gICAgbV9idWZmZXJQb3MgKz0gc2l6ZTsKKyAgICBtZW1jcHkoZGF0YS5kYXRhKCksIG1f
YnVmZmVyUG9zLCBkYXRhLnNpemUoKSk7CisgICAgbV9idWZmZXJQb3MgKz0gZGF0YS5zaXplKCk7
CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L0RlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNv
ZGVyLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Rl
Y29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksMTMgQEAgcHVibGljOgogICAgIFdB
Uk5fVU5VU0VEX1JFVFVSTiBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlclBv
cyAhPSBudWxscHRyOyB9CiAgICAgdm9pZCBtYXJrSW52YWxpZCgpIHsgbV9idWZmZXJQb3MgPSBu
dWxscHRyOyB9CiAKLSAgICBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVGaXhlZExlbmd0
aERhdGEodWludDhfdCogZGF0YSwgc2l6ZV90LCBzaXplX3QgYWxpZ25tZW50KTsKKyAgICBXQVJO
X1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbjxzdGQ6OmJ5dGU+
LCBzaXplX3QgYWxpZ25tZW50KTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgV0FS
Tl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCBzaXpl
X3QgYWxpZ25tZW50ID0gYWxpZ25vZih0eXBlbmFtZSBkZWNsdHlwZShTcGFuIHsgc3RkOjpmb3J3
YXJkPFQ+KGRhdGEpIH0pOjp2YWx1ZV90eXBlKSkKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNv
ZGVGaXhlZExlbmd0aERhdGEoYXNXcml0YWJsZUJ5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4o
ZGF0YSkgfSksIGFsaWdubWVudCk7CisgICAgfQogCiAgICAgLy8gVGhlIGRhdGEgaW4gdGhlIHJl
dHVybmVkIHBvaW50ZXIgaGVyZSB3aWxsIG9ubHkgYmUgdmFsaWQgZm9yIHRoZSBsaWZldGltZSBv
ZiB0aGUgRGVjb2RlciBvYmplY3QuCiAgICAgLy8gUmV0dXJucyBudWxscHRyIG9uIGZhaWx1cmUu
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmNwcAkocmV2aXNpb24gMjc4
ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIwMiwxMiArMjAyLDEyIEBAIHVpbnQ4X3QqIEVuY29kZXI6Omdyb3coc2l6ZV90
IGFsaWdubWVudCwKICAgICByZXR1cm4gbV9idWZmZXIgKyBhbGlnbmVkU2l6ZTsKIH0KIAotdm9p
ZCBFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6
ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQpCit2b2lkIEVuY29kZXI6OmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSwgc2l6ZV90IGFsaWdubWVudCkKIHsK
LSAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZGF0YSkgJSBhbGlnbm1l
bnQpKTsKKyAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZGF0YS5kYXRh
KCkpICUgYWxpZ25tZW50KSk7CiAKLSAgICB1aW50OF90KiBidWZmZXIgPSBncm93KGFsaWdubWVu
dCwgc2l6ZSk7Ci0gICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7CisgICAgYXV0byogYnVm
ZmVyID0gZ3JvdyhhbGlnbm1lbnQsIGRhdGEuc2l6ZSgpKTsKKyAgICBtZW1jcHkoYnVmZmVyLCBk
YXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwogfQogCiB2b2lkIEVuY29kZXI6OmFkZEF0dGFjaG1l
bnQoQXR0YWNobWVudCYmIGF0dGFjaG1lbnQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0lQQy9FbmNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
RW5jb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQ
Qy9FbmNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxX
ZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVk
ZSA8d3RmL09wdGlvblNldC5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSVBDIHsKQEAgLTYwLDcgKzYxLDEzIEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgd3JhcEZvclRlc3RpbmcoVW5pcXVlUmVmPEVuY29kZXI+JiYpOwogCi0gICAg
dm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90LCBz
aXplX3QgYWxpZ25tZW50KTsKKyAgICB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNv
bnN0IHN0ZDo6Ynl0ZT4gZGF0YSwgc2l6ZV90IGFsaWdubWVudCk7CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCBzaXpl
X3QgYWxpZ25tZW50ID0gYWxpZ25vZih0eXBlbmFtZSBkZWNsdHlwZShTcGFuIHsgc3RkOjpmb3J3
YXJkPFQ+KGRhdGEpIH0pOjp2YWx1ZV90eXBlKSkKKyAgICB7CisgICAgICAgIGVuY29kZUZpeGVk
TGVuZ3RoRGF0YShhc0J5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSksIGFsaWdu
bWVudCk7CisgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBFbmNvZGVyJiBv
cGVyYXRvcjw8KFQmJiB0KQpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU2hhcmVk
QnVmZmVyQ29weS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
U2hhcmVkQnVmZmVyQ29weS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vSVBDL1NoYXJlZEJ1ZmZlckNvcHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3
ICs0Myw3IEBAIHZvaWQgU2hhcmVkQnVmZmVyQ29weTo6ZW5jb2RlKEVuY29kZXImIGUKICAgICBp
ZiAoIWJ1ZmZlclNpemUpCiAgICAgICAgIHJldHVybjsKICAgICBmb3IgKGF1dG8mIHNlZ21lbnQg
OiAqbV9idWZmZXIpCi0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHNlZ21l
bnQuc2VnbWVudC0+ZGF0YSgpLCBzZWdtZW50LnNlZ21lbnQtPnNpemUoKSwgMSk7CisgICAgICAg
IGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHNlZ21lbnQuc2VnbWVudC0+Ynl0ZXMoKSk7
CiB9CiAKIHN0ZDo6b3B0aW9uYWw8U2hhcmVkQnVmZmVyQ29weT4gU2hhcmVkQnVmZmVyQ29weTo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQ
Qy9TdHJlYW1Db25uZWN0aW9uRW5jb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25FbmNvZGVyLmgJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25FbmNvZGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkFyZ3VtZW50Q29k
ZXJzLmgiCiAjaW5jbHVkZSAiTWVzc2FnZU5hbWVzLmgiCisjaW5jbHVkZSA8d3RmL1NwYW4uaD4K
ICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBJUEMgewpAQCAtNTMs
MjIgKzU0LDI4IEBAIHB1YmxpYzoKIAogICAgIH5TdHJlYW1Db25uZWN0aW9uRW5jb2RlcigpID0g
ZGVmYXVsdDsKIAotICAgIGJvb2wgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3Qq
IGRhdGEsIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50KQorICAgIGJvb2wgZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhLCBzaXplX3QgYWxpZ25tZW50
KQogICAgIHsKICAgICAgICAgc2l6ZV90IGJ1ZmZlclBvaW50ZXIgPSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fYnVmZmVyICsgbV9lbmNvZGVkU2l6ZSkp
OwogICAgICAgICBzaXplX3QgbmV3QnVmZmVyUG9pbnRlciA9IHJvdW5kVXBUb011bHRpcGxlT2Yo
YWxpZ25tZW50LCBidWZmZXJQb2ludGVyKTsKICAgICAgICAgaWYgKG5ld0J1ZmZlclBvaW50ZXIg
PCBidWZmZXJQb2ludGVyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpbnRw
dHJfdCBhbGlnbmVkU2l6ZSA9IG1fZW5jb2RlZFNpemUgKyAobmV3QnVmZmVyUG9pbnRlciAtIGJ1
ZmZlclBvaW50ZXIpOwotICAgICAgICBpZiAoIXJlc2VydmUoYWxpZ25lZFNpemUsIHNpemUpKQor
ICAgICAgICBpZiAoIXJlc2VydmUoYWxpZ25lZFNpemUsIGRhdGEuc2l6ZSgpKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdWludDhfdCogYnVmZmVyID0gbV9idWZmZXIgKyBh
bGlnbmVkU2l6ZTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7Ci0gICAgICAg
IG1fZW5jb2RlZFNpemUgPSBhbGlnbmVkU2l6ZSArIHNpemU7CisgICAgICAgIGF1dG8qIGJ1ZmZl
ciA9IG1fYnVmZmVyICsgYWxpZ25lZFNpemU7CisgICAgICAgIG1lbWNweShidWZmZXIsIGRhdGEu
ZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgICAgIG1fZW5jb2RlZFNpemUgPSBhbGlnbmVkU2l6
ZSArIGRhdGEuc2l6ZSgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRh
LCBzaXplX3QgYWxpZ25tZW50ID0gYWxpZ25vZih0eXBlbmFtZSBkZWNsdHlwZShTcGFuIHsgc3Rk
Ojpmb3J3YXJkPFQ+KGRhdGEpIH0pOjp2YWx1ZV90eXBlKSkKKyAgICB7CisgICAgICAgIGVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShhc0J5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSks
IGFsaWdubWVudCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBTdHJl
YW1Db25uZWN0aW9uRW5jb2RlciYgb3BlcmF0b3I8PChUJiYgdCkKICAgICB7CiAgICAgICAgIEFy
Z3VtZW50Q29kZXI8c3RkOjpyZW1vdmVfY29uc3RfdDxzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxU
Pj4sIHZvaWQ+OjplbmNvZGUoKnRoaXMsIHN0ZDo6Zm9yd2FyZDxUPih0KSk7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw3ICsxNDQsNyBAQCBzdGF0aWMgdm9pZCBlbmNvZGVT
aGFyZWRCdWZmZXIoRW5jb2RlciYgCiAgICAgLy8gb3ZlciB0aGUgSVBDLiBDb25uZWN0aW9uVW5p
eC5jcHAgYWxyZWFkeSB1c2VzIHNoYXJlZCBtZW1vcnkgdG8gc2VuZCBhbnkgSVBDIG1lc3NhZ2Ug
dGhhdCBpcwogICAgIC8vIHRvbyBsYXJnZS4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDg1NzEuCiAgICAgZm9yIChjb25zdCBhdXRvJiBlbGVtZW50IDogKmJ1
ZmZlcikKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoZWxlbWVudC5zZWdt
ZW50LT5kYXRhKCksIGVsZW1lbnQuc2VnbWVudC0+c2l6ZSgpLCAxKTsKKyAgICAgICAgZW5jb2Rl
ci5lbmNvZGVGaXhlZExlbmd0aERhdGEoZWxlbWVudC5zZWdtZW50LT5ieXRlcygpKTsKICNlbHNl
CiAgICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOwogICAgIGF1dG8gc2hhcmVkTWVtb3J5
QnVmZmVyID0gU2hhcmVkTWVtb3J5Ojpjb3B5QnVmZmVyKCpidWZmZXIpOwpAQCAtMTgwLDcgKzE4
MCw3IEBAIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVTaGEKIAogICAgIFZl
Y3Rvcjx1aW50OF90PiBkYXRhOwogICAgIGRhdGEuZ3JvdyhidWZmZXJTaXplKTsKLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwg
MSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShkYXRhKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYnVmZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RG
TW92ZShkYXRhKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQXV4aWxpYXJ5UHJv
Y2Vzc01hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQXV4aWxp
YXJ5UHJvY2Vzc01hYy5tbQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9TaGFy
ZWQvbWFjL0F1eGlsaWFyeVByb2Nlc3NNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMyMSw3ICsz
MjEsNyBAQCBzdGF0aWMgU3RyaW5nIHNhbmRib3hGaWxlUGF0aChjb25zdCBTdHJpCiAgICAgY3J5
cHRvLT5hZGRCeXRlcyhoZWFkZXIuZGF0YSgpLCBoZWFkZXIubGVuZ3RoKCkpOwogICAgIGF1dG8g
aGFzaCA9IGNyeXB0by0+Y29tcHV0ZUhhc2goKTsKIAotICAgIHJldHVybiBtYWtlU3RyaW5nKGRp
cmVjdG9yeVBhdGgsICIvQ29tcGlsZWRTYW5kYm94KyIsIGJhc2U2NFVSTEVuY29kZWQoaGFzaC5k
YXRhKCksIGhhc2guc2l6ZSgpKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoZGlyZWN0b3J5UGF0
aCwgIi9Db21waWxlZFNhbmRib3grIiwgYmFzZTY0VVJMRW5jb2RlZChoYXNoKSk7CiB9CiAKIHN0
YXRpYyBib29sIGVuc3VyZVNhbmRib3hDYWNoZURpcmVjdG9yeShjb25zdCBTYW5kYm94SW5mbyYg
aW5mbykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9XZWJDb3JlQXJndW1lbnRDb2Rl
cnNXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9XZWJDb3Jl
QXJndW1lbnRDb2RlcnNXaW4uY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0
L1NoYXJlZC93aW4vV2ViQ29yZUFyZ3VtZW50Q29kZXJzV2luLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTEsMTIgKzUxLDEyIEBAIHN0ZDo6b3B0aW9uYWw8Rm9udEF0dHJpYnV0ZXM+IEFyZ3VtZW50
Q28KIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8TE9HRk9OVD4gewogICAgIHN0YXRp
YyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBMT0dGT05UJiBsb2dGb250KQog
ICAgIHsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50OF90Kj4oJmxvZ0ZvbnQpLCBzaXplb2YgbG9nRm9udCwgMSk7CisgICAg
ICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmbG9nRm9udCwgMSB9LCAx
KTsKICAgICB9CiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TE9HRk9OVD4gZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCiAgICAgewogICAgICAgICBMT0dGT05UIGxvZ0ZvbnQ7Ci0gICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4oJmxvZ0ZvbnQpLCBzaXplb2YobG9nRm9udCksIDEpKQorICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmbG9nRm9udCwgMSB9LCAxKSkKICAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIHJldHVybiBsb2dGb250OwogICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9y
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRl
bnRSdWxlTGlzdFN0b3JlLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTMxLDE4ICsxMzEsMjAgQEAgc3RhdGljIFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhIGVu
Y29kZQogICAgIGVuY29kZXIgPDwgbWV0YURhdGEuY29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNvZGVT
aXplOwogICAgIGVuY29kZXIgPDwgbWV0YURhdGEuY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWlu
OwogCi0gICAgQVNTRVJUKGVuY29kZXIuYnVmZmVyU2l6ZSgpID09IENvbnRlbnRSdWxlTGlzdEZp
bGVIZWFkZXJTaXplKTsKLSAgICByZXR1cm4gV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGEoZW5j
b2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOworICAgIEFTU0VSVChlbmNvZGVy
LmJ1ZmZlcigpLnNpemUoKSA9PSBDb250ZW50UnVsZUxpc3RGaWxlSGVhZGVyU2l6ZSk7CisgICAg
cmV0dXJuIFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhIHsgZW5jb2Rlci5idWZmZXIoKSB9Owog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGdldERhdGEoY29uc3QgVCYsIGNvbnN0IEZ1
bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCosIHNpemVfdCk+Jik7Ci10ZW1wbGF0ZTw+IHZvaWQg
Z2V0RGF0YShjb25zdCBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YSYgZGF0YSwgY29uc3QgRnVu
Y3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIGZ1bmN0aW9uKQordGVtcGxhdGU8
dHlwZW5hbWUgVD4gdm9pZCBnZXREYXRhKGNvbnN0IFQmLCBjb25zdCBGdW5jdGlvbjxib29sKFNw
YW48Y29uc3Qgc3RkOjpieXRlPik+Jik7CisKK3RlbXBsYXRlPD4gdm9pZCBnZXREYXRhKGNvbnN0
IFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhJiBkYXRhLCBjb25zdCBGdW5jdGlvbjxib29sKFNw
YW48Y29uc3Qgc3RkOjpieXRlPik+JiBmdW5jdGlvbikKIHsKICAgICBkYXRhLmFwcGx5KGZ1bmN0
aW9uKTsKIH0KLXRlbXBsYXRlPD4gdm9pZCBnZXREYXRhKGNvbnN0IFdlYkNvcmU6OlNoYXJlZEJ1
ZmZlciYgZGF0YSwgY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4m
IGZ1bmN0aW9uKQorCit0ZW1wbGF0ZTw+IHZvaWQgZ2V0RGF0YShjb25zdCBXZWJDb3JlOjpTaGFy
ZWRCdWZmZXImIGRhdGEsIGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+
KT4mIGZ1bmN0aW9uKQogewotICAgIGZ1bmN0aW9uKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7
CisgICAgZnVuY3Rpb24oZGF0YS5ieXRlcygpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4K
QEAgLTE1MCwxMyArMTUyLDEzIEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPENvbnRlbnRSdWxlTGlz
dE1ldGEKIHsKICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKICAgICBDb250ZW50UnVsZUxpc3RN
ZXRhRGF0YSBtZXRhRGF0YTsKLSAgICBnZXREYXRhKGZpbGVEYXRhLCBbJm1ldGFEYXRhLCAmc3Vj
Y2VzcywgJmZpbGVEYXRhXShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeworICAg
IGdldERhdGEoZmlsZURhdGEsIFsmbWV0YURhdGEsICZzdWNjZXNzLCAmZmlsZURhdGFdKFNwYW48
Y29uc3Qgc3RkOjpieXRlPiBkYXRhKSB7CiAgICAgICAgIC8vIFRoZSBmaWxlIGRhdGEgc2hvdWxk
IGJlIG1hcHBlZCBpbnRvIG9uZSBjb250aW51b3VzIG1lbW9yeSBzZWdtZW50IHNvIHRoZSBzaXpl
CiAgICAgICAgIC8vIHBhc3NlZCB0byB0aGUgYXBwbGllciBzaG91bGQgYWx3YXlzIGVxdWFsIHRo
ZSBkYXRhIHNpemUuCi0gICAgICAgIGlmIChzaXplICE9IGZpbGVEYXRhLnNpemUoKSkKKyAgICAg
ICAgaWYgKGRhdGEuc2l6ZSgpICE9IGZpbGVEYXRhLnNpemUoKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0
YSwgc2l6ZSk7CisgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlciB7IGRh
dGEgfTsKICAgICAgICAgCiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IHZlcnNpb247
CiAgICAgICAgIGRlY29kZXIgPj4gdmVyc2lvbjsKQEAgLTIyOCw4ICsyMzAsOCBAQCBzdGF0aWMg
c3RkOjpvcHRpb25hbDxNYXBwZWREYXRhPiBvcGVuQW5kCiBzdGF0aWMgYm9vbCB3cml0ZURhdGFU
b0ZpbGUoY29uc3QgV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGEmIGZpbGVEYXRhLCBQbGF0Zm9y
bUZpbGVIYW5kbGUgZmQpCiB7CiAgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKLSAgICBmaWxlRGF0
YS5hcHBseShbZmQsICZzdWNjZXNzXShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkg
ewotICAgICAgICBpZiAod3JpdGVUb0ZpbGUoZmQsIGRhdGEsIHNpemUpID09IC0xKSB7CisgICAg
ZmlsZURhdGEuYXBwbHkoW2ZkLCAmc3VjY2Vzc10oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEp
IHsKKyAgICAgICAgaWYgKHdyaXRlVG9GaWxlKGZkLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkp
ID09IC0xKSB7CiAgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
V2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBA
QAogI2ltcG9ydCA8cGFsL2NyeXB0by9DcnlwdG9EaWdlc3QuaD4KICNpbXBvcnQgPHd0Zi9CbG9j
a1B0ci5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1Nw
YW5Db2NvYS5oPgogI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3
dGYvdGV4dC9CYXNlNjQuaD4KIApAQCAtNzAsNyArNzEsNyBAQCBzdGF0aWMgUmV0YWluUHRyPE5T
RGF0YT4gcHJvZHVjZUNsaWVudERhCiAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpAIndl
YmF1dGhuLmdldCIgZm9yS2V5OkAidHlwZSJdOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAg
W2RpY3Rpb25hcnkgc2V0T2JqZWN0OmJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNoYWxsZW5nZS5i
eXRlcywgY2hhbGxlbmdlLmxlbmd0aCkgZm9yS2V5OkAiY2hhbGxlbmdlIl07CisgICAgW2RpY3Rp
b25hcnkgc2V0T2JqZWN0OmJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGFzQnl0ZXMoY2hhbGxlbmdl
KSkgZm9yS2V5OkAiY2hhbGxlbmdlIl07CiAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0Om9yaWdp
biBmb3JLZXk6QCJvcmlnaW4iXTsKIAogICAgIHJldHVybiBbTlNKU09OU2VyaWFsaXphdGlvbiBk
YXRhV2l0aEpTT05PYmplY3Q6ZGljdGlvbmFyeS5nZXQoKSBvcHRpb25zOk5TSlNPTldyaXRpbmdT
b3J0ZWRLZXlzIGVycm9yOm5pbF07CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJB
dXRoZW50aWNhdGlvbi9Db2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3IubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxBdXRo
ZW50aWNhdG9yLm1tCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3IubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTg1LDcgKzg1LDcgQEAgc3RhdGljIGlubGluZSBIYXNoU2V0PFN0cmluZz4gcHJv
ZHVjZUhhcwogICAgIEhhc2hTZXQ8U3RyaW5nPiByZXN1bHQ7CiAgICAgZm9yIChhdXRvJiBjcmVk
ZW50aWFsRGVzY3JpcHRvciA6IGNyZWRlbnRpYWxEZXNjcmlwdG9ycykgewogICAgICAgICBpZiAo
ZW1wdHlUcmFuc3BvcnRzT3JDb250YWluKGNyZWRlbnRpYWxEZXNjcmlwdG9yLnRyYW5zcG9ydHMs
IEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OkludGVybmFsKSAmJiBjcmVkZW50aWFsRGVzY3JpcHRv
ci50eXBlID09IFB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkgJiYgY3JlZGVudGlh
bERlc2NyaXB0b3IuaWRWZWN0b3Iuc2l6ZSgpID09IGNyZWRlbnRpYWxJZExlbmd0aCkKLSAgICAg
ICAgICAgIHJlc3VsdC5hZGQoYmFzZTY0RW5jb2RlVG9TdHJpbmcoY3JlZGVudGlhbERlc2NyaXB0
b3IuaWRWZWN0b3IuZGF0YSgpLCBjcmVkZW50aWFsRGVzY3JpcHRvci5pZFZlY3Rvci5zaXplKCkp
KTsKKyAgICAgICAgICAgIHJlc3VsdC5hZGQoYmFzZTY0RW5jb2RlVG9TdHJpbmcoY3JlZGVudGlh
bERlc2NyaXB0b3IuaWRWZWN0b3IpKTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAg
LTIzMyw3ICsyMzMsNyBAQCB2b2lkIExvY2FsQXV0aGVudGljYXRvcjo6bWFrZUNyZWRlbnRpYWwo
CiAgICAgICAgIGlmIChub3RGb3VuZCAhPSBtX2V4aXN0aW5nQ3JlZGVudGlhbHMuZmluZE1hdGNo
aW5nKFsmZXhjbHVkZUNyZWRlbnRpYWxJZHNdIChhdXRvJiBjcmVkZW50aWFsKSB7CiAgICAgICAg
ICAgICBhdXRvKiByYXdJZCA9IGNyZWRlbnRpYWwtPnJhd0lkKCk7CiAgICAgICAgICAgICBBU1NF
UlQocmF3SWQpOwotICAgICAgICAgICAgcmV0dXJuIGV4Y2x1ZGVDcmVkZW50aWFsSWRzLmNvbnRh
aW5zKGJhc2U2NEVuY29kZVRvU3RyaW5nKHJhd0lkLT5kYXRhKCksIHJhd0lkLT5ieXRlTGVuZ3Ro
KCkpKTsKKyAgICAgICAgICAgIHJldHVybiBleGNsdWRlQ3JlZGVudGlhbElkcy5jb250YWlucyhi
YXNlNjRFbmNvZGVUb1N0cmluZyhyYXdJZC0+Ynl0ZXMoKSkpOwogICAgICAgICB9KSkgewogICAg
ICAgICAgICAgcmVjZWl2ZUV4Y2VwdGlvbih7IE5vdEFsbG93ZWRFcnJvciwgIkF0IGxlYXN0IG9u
ZSBjcmVkZW50aWFsIG1hdGNoZXMgYW4gZW50cnkgb2YgdGhlIGV4Y2x1ZGVDcmVkZW50aWFscyBs
aXN0IGluIHRoZSBwbGF0Zm9ybSBhdHRhY2hlZCBhdXRoZW50aWNhdG9yLiJfcyB9LCBXZWJBdXRo
ZW50aWNhdGlvblN0YXR1czo6TEFFeGNsdWRlQ3JlZGVudGlhbHNNYXRjaGVkKTsKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTUxMCw3ICs1MTAsNyBAQCB2b2lkIExvY2FsQXV0aGVudGljYXRvcjo6
Z2V0QXNzZXJ0aW9uKCkKICAgICAgICAgfQogCiAgICAgICAgIGF1dG8qIHJhd0lkID0gY3JlZGVu
dGlhbC0+cmF3SWQoKTsKLSAgICAgICAgaWYgKGFsbG93Q3JlZGVudGlhbElkcy5jb250YWlucyhi
YXNlNjRFbmNvZGVUb1N0cmluZyhyYXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgpKSkp
CisgICAgICAgIGlmIChhbGxvd0NyZWRlbnRpYWxJZHMuY29udGFpbnMoYmFzZTY0RW5jb2RlVG9T
dHJpbmcocmF3SWQtPmJ5dGVzKCkpKSkKICAgICAgICAgICAgIGFzc2VydGlvblJlc3BvbnNlcy51
bmNoZWNrZWRBcHBlbmQoY3JlZGVudGlhbC5jb3B5UmVmKCkpOwogICAgIH0KICAgICBpZiAoYXNz
ZXJ0aW9uUmVzcG9uc2VzLmlzRW1wdHkoKSkgewpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViQXV0aGVudGljYXRpb24vTW9jay9Nb2NrTG9jYWxDb25uZWN0aW9uLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2svTW9j
a0xvY2FsQ29ubmVjdGlvbi5tbQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vTW9jay9Nb2NrTG9jYWxDb25uZWN0aW9uLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjIsNyArMTYyLDcgQEAgdm9pZCBNb2NrTG9jYWxDb25uZWN0aW9u
OjpmaWx0ZXJSZXNwb25zZQogICAgIGZvciAoOyBpdHIgIT0gcmVzcG9uc2VzLmVuZCgpOyArK2l0
cikgewogICAgICAgICBhdXRvKiByYXdJZCA9IGl0ci0+Z2V0KCkucmF3SWQoKTsKICAgICAgICAg
QVNTRVJUKHJhd0lkKTsKLSAgICAgICAgYXV0byByYXdJZEJhc2U2NCA9IGJhc2U2NEVuY29kZVRv
U3RyaW5nKHJhd0lkLT5kYXRhKCksIHJhd0lkLT5ieXRlTGVuZ3RoKCkpOworICAgICAgICBhdXRv
IHJhd0lkQmFzZTY0ID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcocmF3SWQtPmJ5dGVzKCkpOwogICAg
ICAgICBpZiAocmF3SWRCYXNlNjQgPT0gcHJlZmVycmVkQ3JlZGVudGlhbElkQmFzZTY0KQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFj
L0xlZ2FjeVNlc3Npb25TdGF0ZUNvZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvbWFjL0xlZ2FjeVNlc3Npb25TdGF0ZUNvZGluZy5jcHAJKHJldmlzaW9uIDI3
ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9MZWdhY3lTZXNzaW9uU3RhdGVD
b2RpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksNyArMTI5LDcgQEAgcHVibGljOgogICAg
ICAgICAqdGhpcyA8PCBsZW5ndGg7CiAKICAgICAgICAgKnRoaXMgPDwgc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KGxlbmd0aCAqIHNpemVvZihVQ2hhcikpOwotICAgICAgICBlbmNvZGVGaXhlZExlbmd0
aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oU3RyaW5nVmlldyh2YWx1ZSku
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCkuZ2V0KCkpLCBsZW5ndGggKiBzaXplb2YoVUNoYXIpLCBh
bGlnbm9mKFVDaGFyKSk7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgU3Ry
aW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCkuZ2V0KCksIGxlbmd0aCB9KTsK
IAogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQpAQCAtMTM3LDcgKzEzNyw3IEBAIHB1Ymxp
YzoKICAgICBIaXN0b3J5RW50cnlEYXRhRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBWZWN0b3I8
dWludDhfdD4mIHZhbHVlKQogICAgIHsKICAgICAgICAgKnRoaXMgPDwgc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KHZhbHVlLnNpemUoKSk7Ci0gICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YSh2YWx1
ZS5kYXRhKCksIHZhbHVlLnNpemUoKSwgMSk7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0
YSh2YWx1ZSk7CiAKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KQEAgLTE0NSw3ICsxNDUs
NyBAQCBwdWJsaWM6CiAgICAgSGlzdG9yeUVudHJ5RGF0YUVuY29kZXImIG9wZXJhdG9yPDwoY29u
c3QgVmVjdG9yPGNoYXI+JiB2YWx1ZSkKICAgICB7CiAgICAgICAgICp0aGlzIDw8IHN0YXRpY19j
YXN0PHVpbnQ2NF90Pih2YWx1ZS5zaXplKCkpOwotICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERh
dGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4odmFsdWUuZGF0YSgpKSwgdmFsdWUu
c2l6ZSgpLCAxKTsKKyAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHZhbHVlKTsKIAogICAg
ICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQpAQCAtMjA2LDE3ICsyMDYsMjMgQEAgcHJpdmF0ZToK
ICAgICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19hcml0aG1ldGljPFR5cGU+Ojp2
YWx1ZSwgIiIpOwogCi0gICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9j
YXN0PHVpbnQ4X3QqPigmdmFsdWUpLCBzaXplb2YodmFsdWUpLCBzaXplb2YodmFsdWUpKTsKKyAg
ICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmdmFsdWUsIDEgfSwgc2l6ZW9mKHZh
bHVlKSk7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKLSAgICB2b2lkIGVuY29kZUZp
eGVkTGVuZ3RoRGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQg
YWxpZ25tZW50KQorICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48Y29uc3Qgc3Rk
OjpieXRlPiBkYXRhLCB1bnNpZ25lZCBhbGlnbm1lbnQpCiAgICAgewotICAgICAgICBSRUxFQVNF
X0FTU0VSVChkYXRhIHx8ICFzaXplKTsKLSAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KGRhdGEpICUgYWxpZ25tZW50KSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGRhdGEuZGF0YSgpIHx8ICFkYXRhLnNpemUoKSk7CisgICAgICAgIEFTU0VSVCghKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90PihkYXRhLmRhdGEoKSkgJSBhbGlnbm1lbnQpKTsKIAotICAgICAg
ICB1aW50OF90KiBidWZmZXIgPSBncm93KGFsaWdubWVudCwgc2l6ZSk7Ci0gICAgICAgIG1lbWNw
eShidWZmZXIsIGRhdGEsIHNpemUpOworICAgICAgICBhdXRvKiBidWZmZXIgPSBncm93KGFsaWdu
bWVudCwgZGF0YS5zaXplKCkpOworICAgICAgICBtZW1jcHkoYnVmZmVyLCBkYXRhLmRhdGEoKSwg
ZGF0YS5zaXplKCkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9p
ZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoVCYmIGRhdGEsIHVuc2lnbmVkIGFsaWdubWVudCA9IGFs
aWdub2YodHlwZW5hbWUgZGVjbHR5cGUoU3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihkYXRhKSB9KTo6
dmFsdWVfdHlwZSkpCisgICAgeworICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEoYXNCeXRl
cyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pLCBhbGlnbm1lbnQpOwogICAgIH0KIAog
ICAgIHVpbnQ4X3QqIGdyb3codW5zaWduZWQgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKQEAgLTYw
MSw3ICs2MDcsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgVUNoYXIqIGJ1ZmZlcjsKICAgICAgICAg
YXV0byBzdHJpbmcgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIp
OwotICAgICAgICBkZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSwgYWxpZ25vZihVQ2hhcikpOworICAg
ICAgICBkZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IGJ1ZmZlciwgbGVuZ3RoIH0pOwogCiAg
ICAgICAgIHZhbHVlID0gc3RyaW5nOwogICAgICAgICByZXR1cm4gKnRoaXM7CkBAIC03MzcsMTcg
Kzc0MywyMyBAQCBwcml2YXRlOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYXJpdGht
ZXRpYzxUeXBlPjo6dmFsdWUsICIiKTsKICAgICAgICAgdmFsdWUgPSBUeXBlKCk7CiAKLSAgICAg
ICAgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2YWx1
ZSksIHNpemVvZih2YWx1ZSksIHNpemVvZih2YWx1ZSkpOworICAgICAgICBkZWNvZGVGaXhlZExl
bmd0aERhdGEoU3BhbiB7ICZ2YWx1ZSwgMSB9LCBzaXplb2YodmFsdWUpKTsKICAgICAgICAgcmV0
dXJuICp0aGlzOwogICAgIH0KIAotICAgIHZvaWQgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4
X3QqIGRhdGEsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBhbGlnbm1lbnQpCisgICAgdm9pZCBkZWNv
ZGVGaXhlZExlbmd0aERhdGEoU3BhbjxzdGQ6OmJ5dGU+IGRhdGEsIHVuc2lnbmVkIGFsaWdubWVu
dCkKICAgICB7Ci0gICAgICAgIGlmICghYWxpZ25CdWZmZXJQb3NpdGlvbihhbGlnbm1lbnQsIHNp
emUpKQorICAgICAgICBpZiAoIWFsaWduQnVmZmVyUG9zaXRpb24oYWxpZ25tZW50LCBkYXRhLnNp
emUoKSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbWVtY3B5KGRhdGEsIG1fYnVm
ZmVyLCBzaXplKTsKLSAgICAgICAgbV9idWZmZXIgKz0gc2l6ZTsKKyAgICAgICAgbWVtY3B5KGRh
dGEuZGF0YSgpLCBtX2J1ZmZlciwgZGF0YS5zaXplKCkpOworICAgICAgICBtX2J1ZmZlciArPSBk
YXRhLnNpemUoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQg
ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCB1bnNpZ25lZCBhbGlnbm1lbnQgPSBhbGln
bm9mKHR5cGVuYW1lIGRlY2x0eXBlKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSk6OnZh
bHVlX3R5cGUpKQorICAgIHsKKyAgICAgICAgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGFzV3JpdGFi
bGVCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pLCBhbGlnbm1lbnQpOwogICAg
IH0KIAogICAgIGJvb2wgYWxpZ25CdWZmZXJQb3NpdGlvbih1bnNpZ25lZCBhbGlnbm1lbnQsIHNp
emVfdCBzaXplKQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29j
a2V0Q2hhbm5lbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05l
dHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01OSw4ICs1OSw4IEBAIE5ldHdvcmtTZW5kUXVldWUgV2ViU29ja2V0Q2hhbm5lbDo6
Y3JlYXQKICAgICAgICAgY2hhbm5lbC5ub3RpZnlTZW5kRnJhbWUoV2ViU29ja2V0RnJhbWU6Ok9w
Q29kZTo6T3BDb2RlVGV4dCwgdXRmOFN0cmluZy5kYXRhQXNVSW50OFB0cigpLCB1dGY4U3RyaW5n
Lmxlbmd0aCgpKTsKICAgICAgICAgY2hhbm5lbC5zZW5kTWVzc2FnZShNZXNzYWdlczo6TmV0d29y
a1NvY2tldENoYW5uZWw6OlNlbmRTdHJpbmcgeyBJUEM6OkRhdGFSZWZlcmVuY2UgeyB1dGY4U3Ry
aW5nLmRhdGFBc1VJbnQ4UHRyKCksIHV0ZjhTdHJpbmcubGVuZ3RoKCkgfSB9LCB1dGY4U3RyaW5n
Lmxlbmd0aCgpKTsKICAgICB9LCBbJmNoYW5uZWxdKGF1dG8mIHNwYW4pIHsKLSAgICAgICAgY2hh
bm5lbC5ub3RpZnlTZW5kRnJhbWUoV2ViU29ja2V0RnJhbWU6Ok9wQ29kZTo6T3BDb2RlQmluYXJ5
LCBzcGFuLmRhdGEoKSwgc3Bhbi5zaXplKCkpOwotICAgICAgICBjaGFubmVsLnNlbmRNZXNzYWdl
KE1lc3NhZ2VzOjpOZXR3b3JrU29ja2V0Q2hhbm5lbDo6U2VuZERhdGEgeyBJUEM6OkRhdGFSZWZl
cmVuY2UgeyBzcGFuLmRhdGEoKSwgc3Bhbi5zaXplKCkgfSB9LCBzcGFuLnNpemUoKSk7CisgICAg
ICAgIGNoYW5uZWwubm90aWZ5U2VuZEZyYW1lKFdlYlNvY2tldEZyYW1lOjpPcENvZGU6Ok9wQ29k
ZUJpbmFyeSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3Bhbi5kYXRhKCkpLCBz
cGFuLnNpemUoKSk7CisgICAgICAgIGNoYW5uZWwuc2VuZE1lc3NhZ2UoTWVzc2FnZXM6Ok5ldHdv
cmtTb2NrZXRDaGFubmVsOjpTZW5kRGF0YSB7IElQQzo6RGF0YVJlZmVyZW5jZSB7IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNwYW4uZGF0YSgpKSwgc3Bhbi5zaXplKCkgfSB9LCBz
cGFuLnNpemUoKSk7CiAgICAgfSwgWyZjaGFubmVsXShFeGNlcHRpb25Db2RlIGV4Y2VwdGlvbkNv
ZGUpIHsKICAgICAgICAgYXV0byBjb2RlID0gc3RhdGljX2Nhc3Q8aW50PihleGNlcHRpb25Db2Rl
KTsKICAgICAgICAgY2hhbm5lbC5mYWlsKG1ha2VTdHJpbmcoIkZhaWxlZCB0byBsb2FkIEJsb2I6
IGV4Y2VwdGlvbiBjb2RlID0gIiwgY29kZSkpOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NDMsMTIgKzQ0Myw3IEBAIEpTVmFsdWVSZWYgSlNTaGFyZWRNZW1v
cnk6OnJlYWRCeXRlcyhKU0MKICAgICByZXR1cm4gdG9SZWYoanNBcnJheUJ1ZmZlcik7CiB9CiAK
LXN0cnVjdCBBcnJheUJ1ZmZlckRhdGEgewotICAgIHZvaWQqIGJ1ZmZlciB7IG51bGxwdHIgfTsK
LSAgICBzaXplX3QgbGVuZ3RoIHsgMCB9OwotfTsKLQotc3RhdGljIEFycmF5QnVmZmVyRGF0YSBh
cnJheUJ1ZmZlckRhdGFGcm9tVmFsdWVSZWYoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVHlwZWRB
cnJheVR5cGUgdHlwZSwgSlNWYWx1ZVJlZiB2YWx1ZVJlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQorc3RhdGljIFNwYW48c3RkOjpieXRlPiBhcnJheUJ1ZmZlckRhdGFGcm9tVmFsdWVSZWYoSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTVHlwZWRBcnJheVR5cGUgdHlwZSwgSlNWYWx1ZVJlZiB2YWx1
ZVJlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIGF1dG8gb2JqZWN0UmVmID0gSlNW
YWx1ZVRvT2JqZWN0KGNvbnRleHQsIHZhbHVlUmVmLCBleGNlcHRpb24pOwogICAgIGlmICghb2Jq
ZWN0UmVmKQpAQCAtNDY5LDcgKzQ2NCw3IEBAIHN0YXRpYyBBcnJheUJ1ZmZlckRhdGEgYXJyYXlC
dWZmZXJEYXRhRnIKICAgICBlbHNlCiAgICAgICAgIGxlbmd0aCA9IEpTT2JqZWN0R2V0VHlwZWRB
cnJheUJ5dGVMZW5ndGgoY29udGV4dCwgb2JqZWN0UmVmLCBleGNlcHRpb24pOwogCi0gICAgcmV0
dXJuIHsgYnVmZmVyLCBsZW5ndGggfTsKKyAgICByZXR1cm4geyBzdGF0aWNfY2FzdDxzdGQ6OmJ5
dGUqPihidWZmZXIpLCBsZW5ndGggfTsKIH0KIAogSlNWYWx1ZVJlZiBKU1NoYXJlZE1lbW9yeTo6
d3JpdGVCeXRlcyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVm
IHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3Vt
ZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCkBAIC00ODcsMTMgKzQ4MiwxMyBAQCBKU1Zh
bHVlUmVmIEpTU2hhcmVkTWVtb3J5Ojp3cml0ZUJ5dGVzKEpTCiAgICAgfQogCiAgICAgYXV0byBk
YXRhID0gYXJyYXlCdWZmZXJEYXRhRnJvbVZhbHVlUmVmKGNvbnRleHQsIHR5cGUsIGFyZ3VtZW50
c1swXSwgZXhjZXB0aW9uKTsKLSAgICBpZiAoIWRhdGEuYnVmZmVyKSB7CisgICAgaWYgKCFkYXRh
LmRhdGEoKSkgewogICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQs
ICJDb3VsZCBub3QgcmVhZCB0aGUgYnVmZmVyIl9zKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOwogICAgIH0KIAogICAgIHNpemVfdCBvZmZzZXQgPSAwOwot
ICAgIHNpemVfdCBsZW5ndGggPSBkYXRhLmxlbmd0aDsKKyAgICBzaXplX3QgbGVuZ3RoID0gZGF0
YS5zaXplKCk7CiAgICAgc2l6ZV90IHNoYXJlZE1lbW9yeVNpemUgPSBqc1NoYXJlZE1lbW9yeS0+
bV9zaGFyZWRNZW1vcnktPnNpemUoKTsKIAogICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHRvSlMo
Y29udGV4dCk7CkBAIC01MjYsNyArNTIxLDcgQEAgSlNWYWx1ZVJlZiBKU1NoYXJlZE1lbW9yeTo6
d3JpdGVCeXRlcyhKUwogICAgICAgICBsZW5ndGggPSAqbGVuZ3RoVmFsdWU7CiAgICAgfQogCi0g
ICAgbWVtY3B5KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihqc1NoYXJlZE1lbW9yeS0+bV9zaGFyZWRN
ZW1vcnktPmRhdGEoKSkgKyBvZmZzZXQsIGRhdGEuYnVmZmVyLCBsZW5ndGgpOworICAgIG1lbWNw
eShzdGF0aWNfY2FzdDx1aW50OF90Kj4oanNTaGFyZWRNZW1vcnktPm1fc2hhcmVkTWVtb3J5LT5k
YXRhKCkpICsgb2Zmc2V0LCBkYXRhLmRhdGEoKSwgbGVuZ3RoKTsKIAogICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KQEAgLTY4OCwxMCArNjgzLDEwIEBAIHN0YXRp
YyBib29sIGVuY29kZVR5cGVkQXJyYXkoSVBDOjpFbmNvZGUKICAgICBBU1NFUlQodHlwZSAhPSBr
SlNUeXBlZEFycmF5VHlwZU5vbmUpOwogCiAgICAgYXV0byBkYXRhID0gYXJyYXlCdWZmZXJEYXRh
RnJvbVZhbHVlUmVmKGNvbnRleHQsIHR5cGUsIHZhbHVlUmVmLCBleGNlcHRpb24pOwotICAgIGlm
ICghZGF0YS5idWZmZXIpCisgICAgaWYgKCFkYXRhLmRhdGEoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4oZGF0YS5idWZmZXIpLCBkYXRhLmxlbmd0aCwgMSk7CisgICAgZW5j
b2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoZGF0YSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
SW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRW52aXJvbm1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRW52aXJvbm1lbnQuY3BwCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0Vudmlyb25tZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTU2LDcgKzE1Niw3IEBAIGJvb2wgRW52aXJvbm1lbnQ6OmNvbXB1dGVJc0RlYnVn
SGVhcEVuYWIKICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogCi0gICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJldHVybiB0cnVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCkluZGV4OiBUb29s
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNyBAQAor
MjAyMS0wNi0xMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRv
cHQgU3BhbiBpbiBtb3JlIHBsYWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2NhaXJvL1Bp
eGVsRHVtcFN1cHBvcnRDYWlyby5jcHA6CisgICAgICAgIChjb21wdXRlU0hBMUhhc2hTdHJpbmdG
b3JCaXRtYXBDb250ZXh0KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jZy9QaXhlbER1bXBT
dXBwb3J0Q0cuY3BwOgorICAgICAgICAoY29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQml0bWFwQ29u
dGV4dCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQmxvb21GaWx0ZXIuY3Bw
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Z2VuZXJhdGVSYW5kb21EaWdlc3RzKToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OlRFU1RfRik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQ
U2VydmVyLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Q29ubmVjdGlvbjo6d2ViU29ja2V0
SGFuZHNoYWtlKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0
aW9uQ2Fpcm8uY3BwOgorICAgICAgICAoV1RSOjpjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JDYWly
b1N1cmZhY2UpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvY2cvVGVzdEludm9jYXRpb25D
Ry5jcHA6CisgICAgICAgIChXVFI6OmNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckNvbnRleHQpOgor
CiAyMDIxLTA2LTExICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgog
CiAgICAgICAgIFtXaW5dW0R1bXBSZW5kZXJUcmVlXSAtLW5vLXRpbWVvdXQgc3dpdGNoIGRvZXNu
J3Qgd29yawpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2Fpcm8vUGl4ZWxEdW1wU3VwcG9y
dENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhl
bER1bXBTdXBwb3J0Q2Fpcm8uY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9EdW1wUmVu
ZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03NSw3ICs3NSw3IEBAIHZvaWQgY29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQml0bWFwQ29udGUK
ICAgICBTSEExIHNoYTE7CiAgICAgdW5zaWduZWQgY2hhciogYml0bWFwRGF0YSA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2Up
KTsKICAgICBmb3IgKHVuc2lnbmVkIHJvdyA9IDA7IHJvdyA8IHBpeGVsc0hpZ2g7IHJvdysrKSB7
Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMoYml0bWFwRGF0YSwgNCAqIHBpeGVsc1dpZGUpOworICAg
ICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyBiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lkZSB9KTsK
ICAgICAgICAgYml0bWFwRGF0YSArPSBieXRlc1BlclJvdzsKICAgICB9CiAgICAgU0hBMTo6RGln
ZXN0IGhhc2g7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jZy9QaXhlbER1bXBTdXBwb3J0
Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1
cHBvcnRDRy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nn
L1BpeGVsRHVtcFN1cHBvcnRDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDE0ICs4OCwxNCBA
QCB2b2lkIGNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckJpdG1hcENvbnRlCiAgICAgICAgICAgICB1
aW50MzJfdCBidWZmZXJbcGl4ZWxzV2lkZV07CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNv
bHVtbiA9IDA7IGNvbHVtbiA8IHBpeGVsc1dpZGU7IGNvbHVtbisrKQogICAgICAgICAgICAgICAg
IGJ1ZmZlcltjb2x1bW5dID0gT1NSZWFkTGl0dGxlSW50MzIoYml0bWFwRGF0YSwgNCAqIGNvbHVt
bik7Ci0gICAgICAgICAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KGJ1ZmZlciksIDQgKiBwaXhlbHNXaWRlKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0
ZXMoU3BhbiB7IGJ1ZmZlciwgcGl4ZWxzV2lkZSB9KTsKICAgICAgICAgICAgIGJpdG1hcERhdGEg
Kz0gYnl0ZXNQZXJSb3c7CiAgICAgICAgIH0KICAgICB9IGVsc2UKICNlbmRpZgogICAgIHsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCByb3cgPSAwOyByb3cgPCBwaXhlbHNIaWdoOyByb3crKykgewot
ICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lkZSk7Cisg
ICAgICAgICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyBiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lk
ZSB9KTsKICAgICAgICAgICAgIGJpdG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7CiAgICAgICAgIH0K
ICAgICB9CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9CbG9vbUZpbHRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQmxvb21GaWx0
ZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9CbG9vbUZpbHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgc3RhdGlj
IFZlY3RvcjxTSEExOjpEaWdlc3Q+IGdlbmVyYXRlUmFuZAogICAgIFNIQTEgc2hhMTsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaGFzaENvdW50OyArK2kpIHsKICAgICAgICAgZG91Ymxl
IHJhbmRvbSA9IHJhbmRvbU51bWJlcigpOwotICAgICAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KCZyYW5kb20pLCBzaXplb2YoZG91YmxlKSk7CisgICAgICAgIHNo
YTEuYWRkQnl0ZXMoU3BhbiB7ICZyYW5kb20sIDEgfSk7CiAgICAgICAgIFNIQTE6OkRpZ2VzdCBk
aWdlc3Q7CiAgICAgICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsKICAgICAgICAgaGFzaGVz
LmFwcGVuZChkaWdlc3QpOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmls
ZVN5c3RlbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYv
RmlsZVN5c3RlbS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsOCArMTMzLDgg
QEAgVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBNYXBwaW5nRXhpc3RpbmdGaQogICAgIEZpbGVTeXN0
ZW06Ok1hcHBlZEZpbGVEYXRhIG1hcHBlZEZpbGVEYXRhKHRlbXBGaWxlUGF0aCgpLCBGaWxlU3lz
dGVtOjpNYXBwZWRGaWxlTW9kZTo6U2hhcmVkLCBzdWNjZXNzKTsKICAgICBFWFBFQ1RfVFJVRShz
dWNjZXNzKTsKICAgICBFWFBFQ1RfVFJVRSghIW1hcHBlZEZpbGVEYXRhKTsKLSAgICBFWFBFQ1Rf
VFJVRShtYXBwZWRGaWxlRGF0YS5zaXplKCkgPT0gc3RybGVuKEZpbGVTeXN0ZW1UZXN0RGF0YSkp
OwotICAgIEVYUEVDVF9UUlVFKHN0cm5zdHIoRmlsZVN5c3RlbVRlc3REYXRhLCBzdGF0aWNfY2Fz
dDxjb25zdCBjaGFyKj4obWFwcGVkRmlsZURhdGEuZGF0YSgpKSwgbWFwcGVkRmlsZURhdGEuc2l6
ZSgpKSk7CisgICAgRVhQRUNUX1RSVUUobWFwcGVkRmlsZURhdGEuZGF0YSgpLnNpemUoKSA9PSBz
dHJsZW4oRmlsZVN5c3RlbVRlc3REYXRhKSk7CisgICAgRVhQRUNUX1RSVUUoc3RybnN0cihGaWxl
U3lzdGVtVGVzdERhdGEsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KG1hcHBlZEZpbGVE
YXRhLmRhdGEoKS5kYXRhKCkpLCBtYXBwZWRGaWxlRGF0YS5kYXRhKCkuc2l6ZSgpKSk7CiB9CiAK
IFRFU1RfRihGaWxlU3lzdGVtVGVzdCwgTWFwcGluZ0V4aXN0aW5nRW1wdHlGaWxlKQpJbmRleDog
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU0hBMS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU0hBMS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysr
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1NIQTEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCw3ICszOCw3IEBAIHN0YXRpYyB2b2lkIGV4cGVjdFNIQTEoQ1N0cmluZyBpbnB1dCwgaW4K
IHsKICAgICBTSEExIHNoYTE7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXBlYXQ7ICsraSkK
LSAgICAgICAgc2hhMS5hZGRCeXRlcyhpbnB1dCk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoaW5w
dXQuYnl0ZXMoKSk7CiAgICAgQ1N0cmluZyBhY3R1YWwgPSBzaGExLmNvbXB1dGVIZXhEaWdlc3Qo
KTsKIAogICAgIEFTU0VSVF9FUShleHBlY3RlZC5sZW5ndGgoKSwgYWN0dWFsLmxlbmd0aCgpKTsK
SW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW0JKHJldmlzaW9uIDI3
ODgwOSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMzQwLDExICszNDAsMTEgQEAgdm9pZCBDb25uZWN0aW9uOjp3ZWJTb2NrZXRI
YW5kc2hha2UoQ29tcAogCiAgICAgICAgICAgICBjb25zdGV4cHIgYXV0byogd2ViU29ja2V0S2V5
R1VJRCA9ICIyNThFQUZBNS1FOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTEiOwogICAgICAgICAg
ICAgU0hBMSBzaGExOwotICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQ4X3QqPihrZXlCZWdpbiksIGtleUVuZCAtIGtleUJlZ2luKTsKLSAgICAgICAg
ICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4od2ViU29j
a2V0S2V5R1VJRCksIHN0cmxlbih3ZWJTb2NrZXRLZXlHVUlEKSk7CisgICAgICAgICAgICBzaGEx
LmFkZEJ5dGVzKFNwYW4geyBrZXlCZWdpbiwga2V5RW5kIH0pOworICAgICAgICAgICAgc2hhMS5h
ZGRCeXRlcyhTcGFuIHsgd2ViU29ja2V0S2V5R1VJRCwgc3RybGVuKHdlYlNvY2tldEtleUdVSUQp
IH0pOwogICAgICAgICAgICAgU0hBMTo6RGlnZXN0IGhhc2g7CiAgICAgICAgICAgICBzaGExLmNv
bXB1dGVIYXNoKGhhc2gpOwotICAgICAgICAgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5n
KGhhc2guZGF0YSgpLCBTSEExOjpoYXNoU2l6ZSk7CisgICAgICAgICAgICByZXR1cm4gYmFzZTY0
RW5jb2RlVG9TdHJpbmcoaGFzaCk7CiAgICAgICAgIH07CiAKICAgICAgICAgY29ubmVjdGlvbi5z
ZW5kKEhUVFBSZXNwb25zZSgxMDEsIHsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2Fp
cm8vVGVzdEludm9jYXRpb25DYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9jYWlyby9UZXN0SW52b2NhdGlvbkNhaXJvLmNwcAkocmV2aXNpb24gMjc4ODA5KQor
KysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jYWlyby9UZXN0SW52b2NhdGlvbkNhaXJvLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBzdGF0aWMgdm9pZCBjb21wdXRlU0hBMUhh
c2hTdHJpbmdGb3JDYWlyCiAgICAgU0hBMSBzaGExOwogICAgIHVuc2lnbmVkIGNoYXIqIGJpdG1h
cERhdGEgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfZGF0YShzdXJmYWNlKSk7CiAgICAgZm9yIChzaXplX3Qgcm93ID0gMDsgcm93IDwgcGl4ZWxz
SGlnaDsgKytyb3cpIHsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhiaXRtYXBEYXRhLCA0ICogcGl4
ZWxzV2lkZSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IGJpdG1hcERhdGEsIDQgKiBw
aXhlbHNXaWRlIH0pOwogICAgICAgICBiaXRtYXBEYXRhICs9IGJ5dGVzUGVyUm93OwogICAgIH0K
ICAgICBTSEExOjpEaWdlc3QgaGFzaDsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2cv
VGVzdEludm9jYXRpb25DRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTQsNyArOTQsNyBAQCB2b2lkIGNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckNvbnRleHQoQ0dDCiAj
ZW5kaWYKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgcm93ID0gMDsgcm93IDwgcGl4ZWxz
SGlnaDsgcm93KyspIHsKLSAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoYml0bWFwRGF0YSwgNCAq
IHBpeGVsc1dpZGUpOworICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgYml0bWFwRGF0
YSwgNCAqIHBpeGVsc1dpZGUgfSk7CiAgICAgICAgICAgICBiaXRtYXBEYXRhICs9IGJ5dGVzUGVy
Um93OwogICAgICAgICB9CiAgICAgfQo=
</data>
<flag name="commit-queue"
          id="453035"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431291</attachid>
            <date>2021-06-13 15:32:59 -0700</date>
            <delta_ts>2021-06-13 16:35:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226887-20210613153259.patch</filename>
            <type>text/plain</type>
            <size>200823</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBA
CisyMDIxLTA2LTEyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogQVBJL0pTU2NyaXB0Lm1tOgorICAg
ICAgICAoK1tKU1NjcmlwdCBzY3JpcHRPZlR5cGU6bWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTp3
aXRoU291cmNlVVJMOmFuZEJ5dGVjb2RlQ2FjaGU6aW5WaXJ0dWFsTWFjaGluZTplcnJvcjpdKToK
KyAgICAgICAgKC1bSlNTY3JpcHQgcmVhZENhY2hlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHdy
aXRlQ2FjaGU6XSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9ja0hhc2g6OkNvZGVCbG9ja0hhc2gpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHA6CisgICAgICAgIChJbnNw
ZWN0b3I6OmJhY2tlbmRDb21tYW5kc0hhc2gpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZm
ZXIuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJDb250ZW50czo6d3JpdGFibGVCeXRlcyk6
CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyQ29udGVudHM6OmJ5dGVzIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6QXJyYXlCdWZmZXI6OndyaXRhYmxlQnl0ZXMpOgorICAgICAgICAoSlNDOjpBcnJh
eUJ1ZmZlcjo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
Lmg6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6d3JpdGFibGVCeXRlcyk6CisgICAg
ICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRp
bWUvQ2FjaGVQYXlsb2FkLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVQYXlsb2FkOjptYWtlTWFw
cGVkUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6bWFrZU1hbGxvY1BheWxv
YWQpOgorICAgICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6Om1ha2VFbXB0eVBheWxvYWQpOgorICAg
ICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6OkNhY2hlUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNh
Y2hlUGF5bG9hZDo6ZnJlZURhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVQYXlsb2FkLmg6
CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6ZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlUGF5bG9hZDo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6
Q2FjaGVQYXlsb2FkKToKKyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKToKKwogMjAyMS0w
Ni0xMSAgUGF0cmljayBBbmdsZSAgPHBhbmdsZUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogQWRkIGluc3RydW1lbnRhdGlvbiB0byBub2RlIGRlc3RydWN0aW9uIGZvciBJbnNw
ZWN0b3JET01BZ2VudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMTMgKzEzNCwxMyBAQCArIChpbnN0YW5jZXR5cGUpc2Ny
aXB0T2ZUeXBlOihKU1NjcmlwdFR5CiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4g
Y3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJGaWxlIGF0IHBhdGggJUAg
Y291bGQgbm90IGJlIG1hcHBlZC4iLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihzeXN0ZW1QYXRo
KV0sIGVycm9yKTsKIAotICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCkpKQor
ICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmlsZURhdGEuZGF0YSgpLnNpemUoKSkpCiAg
ICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIk5v
dCBhbGwgY2hhcmFjdGVycyBpbiBmaWxlIGF0ICVAIGFyZSBBU0NJSS4iLCBzdGF0aWNfY2FzdDxO
U1N0cmluZyAqPihzeXN0ZW1QYXRoKV0sIGVycm9yKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gYWRv
cHROUyhbW0pTU2NyaXB0IGFsbG9jXSBpbml0XSk7CiAgICAgcmVzdWx0LT5tX3ZpcnR1YWxNYWNo
aW5lID0gdm07CiAgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOwotICAgIHJlc3VsdC0+bV9zb3Vy
Y2UgPSBTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcoYml0d2lzZV9jYXN0
PGNvbnN0IExDaGFyKj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpKSk7CisgICAg
cmVzdWx0LT5tX3NvdXJjZSA9IFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWlu
ZyhiaXR3aXNlX2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmls
ZURhdGEuZGF0YSgpLnNpemUoKSkpOwogICAgIHJlc3VsdC0+bV9tYXBwZWRTb3VyY2UgPSBXVEZN
b3ZlKGZpbGVEYXRhKTsKICAgICByZXN1bHQtPm1fc291cmNlVVJMID0gc291cmNlVVJMOwogICAg
IHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7CkBAIC0xNjgsMjQgKzE2OCwyMyBAQCAt
ICh2b2lkKXJlYWRDYWNoZQogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgY29uc3QgdWludDhfdCogZmlsZURhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihtYXBwZWRGaWxlLmRhdGEoKSk7Ci0gICAgdW5zaWduZWQgZmlsZVRvdGFsU2l6ZSA9IG1h
cHBlZEZpbGUuc2l6ZSgpOworICAgIGF1dG8gZmlsZURhdGEgPSBtYXBwZWRGaWxlLmRhdGEoKTsK
IAogICAgIC8vIEVuc3VyZSB3ZSBhdCBsZWFzdCBoYXZlIGEgU0hBMTo6RGlnZXN0IHRvIHJlYWQu
Ci0gICAgaWYgKGZpbGVUb3RhbFNpemUgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgeworICAgIGlm
IChmaWxlRGF0YS5zaXplKCkgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgewogICAgICAgICBGaWxl
U3lzdGVtOjpkZWxldGVGaWxlKGNhY2hlRmlsZW5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgdW5zaWduZWQgZmlsZURhdGFTaXplID0gZmlsZVRvdGFsU2l6ZSAtIHNpemVvZihT
SEExOjpEaWdlc3QpOworICAgIHVuc2lnbmVkIGZpbGVEYXRhU2l6ZSA9IGZpbGVEYXRhLnNpemUo
KSAtIHNpemVvZihTSEExOjpEaWdlc3QpOwogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFz
aDsKICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhmaWxlRGF0YSwgZmlsZURhdGFT
aXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKGZpbGVEYXRhLmZpcnN0KGZpbGVEYXRhU2l6ZSkpOwog
ICAgIHNoYTEuY29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2VzdCBm
aWxlSGFzaDsKLSAgICBtZW1jcHkoJmZpbGVIYXNoLCBmaWxlRGF0YSArIGZpbGVEYXRhU2l6ZSwg
c2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOworICAgIG1lbWNweSgmZmlsZUhhc2gsIGZpbGVEYXRhLmRh
dGEoKSArIGZpbGVEYXRhU2l6ZSwgc2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOwogCiAgICAgaWYgKGNv
bXB1dGVkSGFzaCAhPSBmaWxlSGFzaCkgewogICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxl
KGNhY2hlRmlsZW5hbWUpOwpAQCAtMzQzLDcgKzM0Miw3IEBAIC0gKEJPT0wpd3JpdGVDYWNoZToo
U3RyaW5nJillcnJvcgogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFzaDsKICAgICBTSEEx
IHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhtX2NhY2hlZEJ5dGVjb2RlLT5kYXRhKCksIG1fY2Fj
aGVkQnl0ZWNvZGUtPnNpemUoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgbV9jYWNoZWRC
eXRlY29kZS0+ZGF0YSgpLCBtX2NhY2hlZEJ5dGVjb2RlLT5zaXplKCkgfSk7CiAgICAgc2hhMS5j
b21wdXRlSGFzaChjb21wdXRlZEhhc2gpOwogICAgIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKHRl
bXBGRCwgY29tcHV0ZWRIYXNoLmRhdGEoKSwgc2l6ZW9mKGNvbXB1dGVkSGFzaCkpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0hhc2guY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgQ29kZUJsb2Nr
SGFzaDo6Q29kZUJsb2NrSGFzaChjb25zdCBTb3VyYwogICAgIEFTU0VSVChzb3VyY2VDb2RlLmxl
bmd0aCgpID49IDApOwogICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhTb3VyY2VDb2RlTGVuZ3Ro
VG9IYXNoID0gNTAwICogTUI7CiAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzb3VyY2VD
b2RlLmxlbmd0aCgpKSA8IG1heFNvdXJjZUNvZGVMZW5ndGhUb0hhc2gpCi0gICAgICAgIHNoYTEu
YWRkQnl0ZXMoc291cmNlQ29kZS50b1VURjgoKSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoc291
cmNlQ29kZS50b1VURjgoKS5ieXRlcygpKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gSnVzdCBo
YXNoIHdpdGggdGhlIGxlbmd0aCBhbmQgc2FtcGxlcyBvZiB0aGUgc291cmNlIHN0cmluZyBpbnN0
ZWFkLgogICAgICAgICBTdHJpbmdWaWV3IHN0ciA9IHNvdXJjZUNvZGUucHJvdmlkZXIoKS0+c291
cmNlKCk7CkBAIC02MiwxMCArNjIsMTAgQEAgQ29kZUJsb2NrSGFzaDo6Q29kZUJsb2NrSGFzaChj
b25zdCBTb3VyYwogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHIubGVuZ3RoKCk7CiAgICAg
ICAgIHVuc2lnbmVkIHN0ZXAgPSAobGVuZ3RoID4+IDEwKSArIDE7CiAKLSAgICAgICAgc2hhMS5h
ZGRCeXRlcyhiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KCZsZW5ndGgpLCBzaXplb2YobGVuZ3RoKSk7
CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZsZW5ndGgsIDEgfSk7CiAgICAgICAgIGRv
IHsKICAgICAgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IHN0cltpbmRleF07Ci0gICAgICAgICAg
ICBzaGExLmFkZEJ5dGVzKGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oJmNoYXJhY3RlciksIHNpemVv
ZihjaGFyYWN0ZXIpKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZjaGFyYWN0
ZXIsIDEgfSk7CiAgICAgICAgICAgICBvbGRJbmRleCA9IGluZGV4OwogICAgICAgICAgICAgaW5k
ZXggKz0gc3RlcDsKICAgICAgICAgfSB3aGlsZSAoaW5kZXggPiBvbGRJbmRleCAmJiBpbmRleCA8
IGxlbmd0aCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VIYXNo
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VI
YXNoLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BhcnNlSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiBQYXJzZUhhc2g6OlBhcnNlSGFzaChjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VD
b2RlKQogewogICAgIFNIQTEgc2hhMTsKLSAgICBzaGExLmFkZEJ5dGVzKHNvdXJjZUNvZGUudG9V
VEY4KCkpOworICAgIHNoYTEuYWRkQnl0ZXMoc291cmNlQ29kZS50b1VURjgoKS5ieXRlcygpKTsK
ICAgICBTSEExOjpEaWdlc3QgZGlnZXN0OwogICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsK
ICAgICB1bnNpZ25lZCBoYXNoID0gZGlnZXN0WzBdIHwgKGRpZ2VzdFsxXSA8PCA4KSB8IChkaWdl
c3RbMl0gPDwgMTYpIHwgKGRpZ2VzdFszXSA8PCAyNCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1JlbW90ZUluc3BlY3RvclV0aWxzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1Jl
bW90ZUluc3BlY3RvclV0aWxzLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgY29uc3QgQ1N0cmluZyYgYmFja2VuZENv
bW1hbmRzSGFzaCgpCiAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSA9IGdfYnl0ZXNfZ2V0X2Rh
dGEoYnl0ZXMuZ2V0KCksICZkYXRhU2l6ZSk7CiAgICAgICAgIEFTU0VSVChkYXRhU2l6ZSk7CiAg
ICAgICAgIFNIQTEgc2hhMTsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhzdGF0aWNfY2FzdDxjb25z
dCB1aW50OF90Kj4oZGF0YSksIGRhdGFTaXplKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFu
IHsgc3RhdGljX2Nhc3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSksIGRhdGFTaXplIH0pOwogICAg
ICAgICBoZXhEaWdlc3QgPSBzaGExLmNvbXB1dGVIZXhEaWdlc3QoKTsKICAgICB9CiAgICAgcmV0
dXJuIGhleERpZ2VzdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogI2luY2x1ZGUgPHd0Zi9QYWNrZWRSZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZl
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtODAsNyAr
ODEsMTAgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBt
X2RhdGEuZ2V0TWF5QmVOdWxsKHNpemVJbkJ5dGVzKCkpOyB9CiAgICAgdW5zaWduZWQgc2l6ZUlu
Qnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX3NpemVJbkJ5dGVzOyB9Ci0gICAgCisKKyAgICBTcGFu
PHN0ZDo6Ynl0ZT4gd3JpdGFibGVCeXRlcygpIHsgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8c3RkOjpi
eXRlKj4oZGF0YSgpKSwgc2l6ZUluQnl0ZXMoKSB9OyB9CisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4geyBzdGF0aWNfY2FzdDxjb25zdCBzdGQ6OmJ5dGUq
PihkYXRhKCkpLCBzaXplSW5CeXRlcygpIH07IH0KKwogICAgIGJvb2wgaXNTaGFyZWQoKSBjb25z
dCB7IHJldHVybiBtX3NoYXJlZDsgfQogICAgIAogcHJpdmF0ZToKQEAgLTEyNyw3ICsxMzEsOSBA
QCBwdWJsaWM6CiAgICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKICAgICBpbmxpbmUgY29uc3Qgdm9p
ZCogZGF0YSgpIGNvbnN0OwogICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7
Ci0gICAgCisgICAgaW5saW5lIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCk7CisgICAg
aW5saW5lIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAgICAgdm9pZCBt
YWtlU2hhcmVkKCk7CiAgICAgdm9pZCBzZXRTaGFyaW5nTW9kZShBcnJheUJ1ZmZlclNoYXJpbmdN
b2RlKTsKICAgICBpbmxpbmUgYm9vbCBpc1NoYXJlZCgpIGNvbnN0OwpAQCAtMTk3LDYgKzIwMywx
NiBAQCB1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJu
IG1fY29udGVudHMuc2l6ZUluQnl0ZXMoKTsKIH0KIAorU3BhbjxzdGQ6OmJ5dGU+IEFycmF5QnVm
ZmVyOjp3cml0YWJsZUJ5dGVzKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZW50cy53cml0YWJsZUJ5
dGVzKCk7Cit9CisKK1NwYW48Y29uc3Qgc3RkOjpieXRlPiBBcnJheUJ1ZmZlcjo6Ynl0ZXMoKSBj
b25zdAoreworICAgIHJldHVybiBtX2NvbnRlbnRzLmJ5dGVzKCk7Cit9CisKIGJvb2wgQXJyYXlC
dWZmZXI6OmlzU2hhcmVkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb250ZW50cy5pc1NoYXJl
ZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZm
ZXJWaWV3LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4Niw5IEBAIHB1
YmxpYzoKIAogICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVM
ZW5ndGg7IH0KIAorICAgIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCkgeyByZXR1cm4g
eyBzdGF0aWNfY2FzdDxzdGQ6OmJ5dGUqPihkYXRhKCkpLCBieXRlTGVuZ3RoKCkgfTsgfQorICAg
IFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0IHsgcmV0dXJuIHsgc3RhdGljX2Nh
c3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSgpKSwgYnl0ZUxlbmd0aCgpIH07IH0KKwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0RGV0YWNoYWJsZShib29sKTsKICAgICBib29sIGlzRGV0
YWNoYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNEZXRhY2hhYmxlOyB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlUGF5bG9hZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsMjcgKzMwLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogCiBD
YWNoZVBheWxvYWQgQ2FjaGVQYXlsb2FkOjptYWtlTWFwcGVkUGF5bG9hZChGaWxlU3lzdGVtOjpN
YXBwZWRGaWxlRGF0YSYmIGRhdGEpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZCh0cnVlLCBk
YXRhLmxlYWtIYW5kbGUoKSwgZGF0YS5zaXplKCkpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQo
dHJ1ZSwgZGF0YS5sZWFrSGFuZGxlKCkpOwogfQogCiBDYWNoZVBheWxvYWQgQ2FjaGVQYXlsb2Fk
OjptYWtlTWFsbG9jUGF5bG9hZChNYWxsb2NQdHI8dWludDhfdCwgVk1NYWxsb2M+JiYgZGF0YSwg
c2l6ZV90IHNpemUpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZChmYWxzZSwgZGF0YS5sZWFr
UHRyKCksIHNpemUpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQoZmFsc2UsIGFzV3JpdGFibGVC
eXRlcyhTcGFuIHsgZGF0YS5sZWFrUHRyKCksIHNpemUgfSkpOwogfQogCiBDYWNoZVBheWxvYWQg
Q2FjaGVQYXlsb2FkOjptYWtlRW1wdHlQYXlsb2FkKCkKIHsKLSAgICByZXR1cm4gQ2FjaGVQYXls
b2FkKHRydWUsIG51bGxwdHIsIDApOworICAgIHJldHVybiBDYWNoZVBheWxvYWQodHJ1ZSwgeyB9
KTsKIH0KIAogQ2FjaGVQYXlsb2FkOjpDYWNoZVBheWxvYWQoQ2FjaGVQYXlsb2FkJiYgb3RoZXIp
CiB7Ci0gICAgbV9tYXBwZWQgPSBvdGhlci5tX21hcHBlZDsKLSAgICBtX3NpemUgPSBvdGhlci5t
X3NpemU7Ci0gICAgbV9kYXRhID0gb3RoZXIubV9kYXRhOwotICAgIG90aGVyLm1fbWFwcGVkID0g
ZmFsc2U7Ci0gICAgb3RoZXIubV9kYXRhID0gbnVsbHB0cjsKLSAgICBvdGhlci5tX3NpemUgPSAw
OworICAgIG1fbWFwcGVkID0gc3RkOjpleGNoYW5nZShvdGhlci5tX21hcHBlZCwgZmFsc2UpOwor
ICAgIG1fZGF0YSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLCB7IH0pOwogfQogCiBDYWNo
ZVBheWxvYWQ6On5DYWNoZVBheWxvYWQoKQpAQCAtNjcsMTIgKzYzLDEzIEBAIENhY2hlUGF5bG9h
ZCYgQ2FjaGVQYXlsb2FkOjpvcGVyYXRvcj0oQ2EKIAogdm9pZCBDYWNoZVBheWxvYWQ6OmZyZWVE
YXRhKCkKIHsKLSAgICBpZiAoIW1fZGF0YSkKKyAgICBpZiAoIW1fZGF0YS5kYXRhKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBpZiAobV9tYXBwZWQpIHsKLSAgICAgICAgRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1fZGF0YSwgbV9zaXplKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZmFzdEZy
ZWUobV9kYXRhKTsKKworICAgIGlmIChtX21hcHBlZCkKKyAgICAgICAgRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1fZGF0YSk7CisgICAgZWxzZQorICAgICAgICBmYXN0RnJlZShtX2RhdGEu
ZGF0YSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHd0Zi9GaWxlU3lz
dGVtLmg+CiAjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MSwyMiArNDIsMjAgQEAgcHVibGljOgogICAgIEpT
X0VYUE9SVF9QUklWQVRFIH5DYWNoZVBheWxvYWQoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBD
YWNoZVBheWxvYWQmIG9wZXJhdG9yPShDYWNoZVBheWxvYWQmJiBvdGhlcik7CiAKLSAgICBjb25z
dCB1aW50OF90KiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBjb25zdCB1aW50OF90KiBkYXRhKCkg
Y29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9kYXRhLmRhdGEoKSk7
IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5zaXplKCk7IH0KIAog
cHJpdmF0ZToKLSAgICBDYWNoZVBheWxvYWQoYm9vbCBtYXBwZWQsIHZvaWQqIGRhdGEsIHNpemVf
dCBzaXplKQorICAgIENhY2hlUGF5bG9hZChib29sIG1hcHBlZCwgU3BhbjxzdGQ6OmJ5dGU+IGRh
dGEpCiAgICAgICAgIDogbV9tYXBwZWQobWFwcGVkKQotICAgICAgICAsIG1fc2l6ZShzaXplKQot
ICAgICAgICAsIG1fZGF0YShzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGF0YSkpCisgICAgICAgICwg
bV9kYXRhKGRhdGEpCiAgICAgewogICAgIH0KIAogICAgIHZvaWQgZnJlZURhdGEoKTsKIAogICAg
IGJvb2wgbV9tYXBwZWQ7Ci0gICAgc2l6ZV90IG1fc2l6ZTsKLSAgICB1aW50OF90KiBtX2RhdGE7
CisgICAgU3BhbjxzdGQ6OmJ5dGU+IG1fZGF0YTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1Bh
cnNlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNyArMjYxLDcg
QEAgYXV0byBTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKGNvbnN0IHVpbgogICAgIH0KIAogICAg
IGlmIChVTkxJS0VMWShPcHRpb25zOjp1c2VFYWdlcldlYkFzc2VtYmx5TW9kdWxlSGFzaGluZygp
KSkKLSAgICAgICAgbV9oYXNoZXIuYWRkQnl0ZXMoYnl0ZXMsIGJ5dGVzU2l6ZSk7CisgICAgICAg
IG1faGFzaGVyLmFkZEJ5dGVzKFNwYW4geyBieXRlcywgYnl0ZXNTaXplIH0pOwogCiAgICAgc2l6
ZV90IG9mZnNldEluQnl0ZXMgPSAwOwogICAgIHdoaWxlICh0cnVlKSB7CkluZGV4OiBTb3VyY2Uv
V1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw2OCBAQAorMjAyMS0wNi0xMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgQWRvcHQgU3BhbiBpbiBtb3JlIHBsYWNlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIFdURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmNwcDoKKyAgICAg
ICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjp+TWFwcGVkRmlsZURhdGEp
OgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6TWFwcGVkRmlsZURhdGE6Om1hcEZpbGVI
YW5kbGUpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6dW5tYXBWaWV3T2ZGaWxlKToK
KyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Om1hcFRvRmlsZSk6CisgICAgICAgICogd3Rm
L0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVE
YXRhOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6
Ok1hcHBlZEZpbGVEYXRhOjpkYXRhIGNvbnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUlt
cGw6Ok1hcHBlZEZpbGVEYXRhOjpsZWFrSGFuZGxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3Rl
bUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YSk6CisgICAgICAgIChXVEY6OkZp
bGVTeXN0ZW1JbXBsOjpNYXBwZWRGaWxlRGF0YTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6
RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpzaXplIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1NIQTEuY3BwOgorICAgICAgICAoV1RG
OjpTSEExOjphZGRCeXRlcyk6CisgICAgICAgIChXVEY6OlNIQTE6OmZpbmFsaXplKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6U0hBMTo6cHJvY2Vzc0Jsb2NrKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6U0hBMTo6cmVzZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTSEExOjpoZXhEaWdl
c3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTSEExOjpjb21wdXRlSGV4RGlnZXN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3dGYvU0hBMS5oOgorICAgICAgICAoV1RGOjpTSEExOjphZGRCeXRl
cyk6CisgICAgICAgICogd3RmL1ZlY3Rvci5oOgorICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZS9Q
ZXJzaXN0ZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPENT
dHJpbmc+OjplbmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8Q1N0cmlu
Zz46OmRlY29kZSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTdHJpbmc+Ojpl
bmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVjb2RlU3RyaW5nVGV4dCk6Cisg
ICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUpOgor
ICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKToK
KyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oOgorICAgICAgICAq
IHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5jcHA6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyOjpEZWNvZGVyKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6
OkRlY29kZXI6OmJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFkKToKKyAgICAgICAgKFdURjo6UGVy
c2lzdGVuY2U6OkRlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjp2ZXJpZnlDaGVja3N1bSk6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyOjp+RGVjb2Rlcik6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3Bl
cnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmg6CisgICAgICAgICogd3RmL3BlcnNpc3RlbmNl
L1BlcnNpc3RlbnRFbmNvZGVyLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29k
ZXI6Omdyb3cpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6dXBkYXRlQ2hl
Y2tzdW1Gb3JEYXRhKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6OmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjpl
bmNvZGVOdW1iZXIpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6ZW5jb2Rl
Q2hlY2tzdW0pOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6RW5jb2Rlcik6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjp+RW5jb2Rlcik6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmg6
CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjpidWZmZXIgY29uc3QpOgorICAg
ICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIp
OgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6YnVmZmVyU2l6ZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL3RleHQvQmFzZTY0Lmg6CisgICAgICAgIChXVEY6OmJh
c2U2NEVuY29kZVRvVmVjdG9yKToKKyAgICAgICAgKFdURjo6YmFzZTY0RW5jb2RlVG9TdHJpbmcp
OgorICAgICAgICAqIHd0Zi90ZXh0L0NTdHJpbmcuaDoKKwogMjAyMS0wNi0xMSAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgV2Vha0hhc2hNYXAKSW5kZXg6
IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtNjkyLDYgKzY5Miw4IEBACiAJCUFEODlCNkI5MUU2NDE1MEYwMDkwNzA3RiAvKiBN
ZW1vcnlQcmVzc3VyZUhhbmRsZXJDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IE1lbW9yeVByZXNzdXJlSGFuZGxlckNvY29hLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBREYyQ0U2NDFFMzlGMTA2MDA2ODg5REIgLyogTWVtb3J5Rm9vdHBy
aW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lbW9yeUZvb3RwcmludC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREYyQ0U2NTFFMzlGMTA2MDA2ODg5REIg
LyogTWVtb3J5Rm9vdHByaW50Q29jb2EuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTWVtb3J5Rm9vdHByaW50Q29jb2EuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlCQzcwMEI0NDI2NzY2ODM0MDA0OUVERjIgLyogU3BhbkNvY29hLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNwYW5Db2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzcwMEI0
NTI2NzY2OUMxMDA0OUVERjIgLyogU3BhbkNGLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwYW5DRi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0EzMEM3RjI2NkQzMDM0MDAwRDIzMEMgLyog
U3Bhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTcGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyQkNGQzNFMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5ndWFnZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYW5ndWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyQkNGQzNGMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5ndWFnZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYW5ndWFnZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtODQwLDYgKzg0Miw3IEBACiAJCQkJQzJCQ0ZDNDExRjYxRDYxNjAwQzky
MjJDIC8qIExhbmd1YWdlQ0YuY3BwICovLAogCQkJCTJDREVEMEVFMTgxMTVDMzgwMDREQkE3MCAv
KiBSdW5Mb29wQ0YuY3BwICovLAogCQkJCUEzRUU1QzNCMjFGRkFDN0MwMEZBQkQ2MSAvKiBTY2hl
ZHVsZVBhaXJDRi5jcHAgKi8sCisJCQkJQkM3MDBCNDUyNjc2NjlDMTAwNDlFREYyIC8qIFNwYW5D
Ri5oICovLAogCQkJCTFBRkRFNjQ3MTk1MjAxQzMwMEM0OEZGQSAvKiBUeXBlQ2FzdHNDRi5oICov
LAogCQkJCTVDMUYwNTk0MjE2NDM3QjMwMDM5MzAyQyAvKiBVUkxDRi5jcHAgKi8sCiAJCQkpOwpA
QCAtMTU4MSw2ICsxNTg0LDcgQEAKIAkJCQkxQ0E4NUNBODI0MUIwQjI2MDA3MUMyRjUgLyogUnVu
dGltZUFwcGxpY2F0aW9uQ2hlY2tzQ29jb2EuY3BwICovLAogCQkJCTFDQTg1Q0E3MjQxQjBCMTEw
MDcxQzJGNSAvKiBSdW50aW1lQXBwbGljYXRpb25DaGVja3NDb2NvYS5oICovLAogCQkJCUEzMEQ0
MTJDMUYwREUwQkEwMEI3MTk1NCAvKiBTb2Z0TGlua2luZy5oICovLAorCQkJCUJDNzAwQjQ0MjY3
NjY4MzQwMDQ5RURGMiAvKiBTcGFuQ29jb2EuaCAqLywKIAkJCQlFQjYxRURDNjI0MDlDQ0MwMDAx
RUZFMzYgLyogU3lzdGVtVHJhY2luZ0NvY29hLmNwcCAqLywKIAkJCQk1Q0MwRUU4NjIxNjJCQzIy
MDBBMUE4NDIgLyogVVJMQ29jb2EubW0gKi8sCiAJCQkJOTMyNDE2NTcyNDNCQzJFNTAwMzJGQUFF
IC8qIFZlY3RvckNvY29hLmggKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxOSw5ICszMTksOSBAQCBib29sIGV4Y2x1ZGVGcm9tQmFja3VwKGNvbnN0IFN0cmluZyYp
CiAKIE1hcHBlZEZpbGVEYXRhOjp+TWFwcGVkRmlsZURhdGEoKQogewotICAgIGlmICghbV9maWxl
RGF0YSkKKyAgICBpZiAoIW1fZmlsZURhdGEuZGF0YSgpKQogICAgICAgICByZXR1cm47Ci0gICAg
dW5tYXBWaWV3T2ZGaWxlKG1fZmlsZURhdGEsIG1fZmlsZVNpemUpOworICAgIHVubWFwVmlld09m
RmlsZShtX2ZpbGVEYXRhKTsKIH0KIAogTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKGNv
bnN0IFN0cmluZyYgZmlsZVBhdGgsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUsIGJvb2wmIHN1Y2Nl
c3MpCkBAIC0zODMsMTQgKzM4MywxMyBAQCBib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFu
ZGxlKFBsYXRmCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBtX2ZpbGVEYXRh
ID0gZGF0YTsKLSAgICBtX2ZpbGVTaXplID0gc2l6ZTsKKyAgICBtX2ZpbGVEYXRhID0gU3BhbiB7
IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpieXRlKj4oZGF0YSksIHNpemUgfTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCB1bm1hcFZpZXdPZkZpbGUodm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6
ZSkKK2Jvb2wgdW5tYXBWaWV3T2ZGaWxlKFNwYW48c3RkOjpieXRlPiBkYXRhKQogewotICAgIHJl
dHVybiAhbXVubWFwKGJ1ZmZlciwgc2l6ZSk7CisgICAgcmV0dXJuICFtdW5tYXAoZGF0YS5kYXRh
KCksIGRhdGEuc2l6ZSgpKTsKIH0KIAogI2VuZGlmCkBAIC00MzgsNyArNDM3LDcgQEAgU3RyaW5n
IGNyZWF0ZVRlbXBvcmFyeVppcEFyY2hpdmUoY29uc3QgUwogfQogI2VuZGlmCiAKLU1hcHBlZEZp
bGVEYXRhIG1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIHNpemVfdCBieXRlc1NpemUsIEZ1
bmN0aW9uPHZvaWQoY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4m
KT4mJiBhcHBseSwgUGxhdGZvcm1GaWxlSGFuZGxlKiBvdXRwdXRIYW5kbGUpCitNYXBwZWRGaWxl
RGF0YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBzaXplX3QgYnl0ZXNTaXplLCBGdW5j
dGlvbjx2b2lkKGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mKT4m
JiBhcHBseSwgUGxhdGZvcm1GaWxlSGFuZGxlKiBvdXRwdXRIYW5kbGUpCiB7CiAgICAgY29uc3Rl
eHByIGJvb2wgZmFpbElmRmlsZUV4aXN0cyA9IHRydWU7CiAgICAgYXV0byBoYW5kbGUgPSBGaWxl
U3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWRXcml0
ZSwgRmlsZVN5c3RlbTo6RmlsZUFjY2Vzc1Blcm1pc3Npb246OlVzZXIsIGZhaWxJZkZpbGVFeGlz
dHMpOwpAQCAtNDU1LDEyICs0NTQsMTIgQEAgTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxlKGNvbnN0
IFN0cmluZyYgcAogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIHZvaWQqIG1hcCA9
IGNvbnN0X2Nhc3Q8dm9pZCo+KG1hcHBlZEZpbGUuZGF0YSgpKTsKLSAgICB1aW50OF90KiBtYXBE
YXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1hcCk7CisgICAgYXV0byBtYXAgPSBtYXBwZWRG
aWxlLmRhdGEoKS5kYXRhKCk7CisgICAgYXV0byBtYXBEYXRhID0gbWFwOwogCi0gICAgYXBwbHko
WyZtYXBEYXRhXShjb25zdCB1aW50OF90KiBjaHVuaywgc2l6ZV90IGNodW5rU2l6ZSkgewotICAg
ICAgICBtZW1jcHkobWFwRGF0YSwgY2h1bmssIGNodW5rU2l6ZSk7Ci0gICAgICAgIG1hcERhdGEg
Kz0gY2h1bmtTaXplOworICAgIGFwcGx5KFsmbWFwRGF0YV0oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+
IGNodW5rKSB7CisgICAgICAgIG1lbWNweShtYXBEYXRhLCBjaHVuay5kYXRhKCksIGNodW5rLnNp
emUoKSk7CisgICAgICAgIG1hcERhdGEgKz0gY2h1bmsuc2l6ZSgpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9KTsKIApJbmRleDogU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICsz
NCw3IEBACiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KQEAgLTIxMCw3ICsyMTEsNyBAQCBXVEZfRVhQT1JUX1BSSVZBVEUg
U3RyaW5nIHJlYWxQYXRoKGNvbnN0CiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc1NhZmVUb1Vz
ZU1lbW9yeU1hcEZvclBhdGgoY29uc3QgU3RyaW5nJik7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBtYWtlU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChjb25zdCBTdHJpbmcmKTsKIAotV1RGX0VY
UE9SVF9QUklWQVRFIGJvb2wgdW5tYXBWaWV3T2ZGaWxlKHZvaWQqIGJ1ZmZlciwgc2l6ZV90KTsK
K1dURl9FWFBPUlRfUFJJVkFURSBib29sIHVubWFwVmlld09mRmlsZShTcGFuPHN0ZDo6Ynl0ZT4p
OwogCiBjbGFzcyBNYXBwZWRGaWxlRGF0YSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CkBAIC0yMjMsMTcgKzIyNCwxNSBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5N
YXBwZWRGaWxlRGF0YSgpOwogICAgIE1hcHBlZEZpbGVEYXRhJiBvcGVyYXRvcj0oTWFwcGVkRmls
ZURhdGEmJik7CiAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
ISFtX2ZpbGVEYXRhOyB9Ci0gICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZmlsZURhdGE7IH0KLSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9maWxlU2l6
ZTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fZmls
ZURhdGEuZGF0YSgpOyB9CisgICAgU3BhbjxzdGQ6OmJ5dGU+IGRhdGEoKSBjb25zdCB7IHJldHVy
biBtX2ZpbGVEYXRhOyB9CiAKLSAgICB2b2lkKiBsZWFrSGFuZGxlKCkgeyByZXR1cm4gc3RkOjpl
eGNoYW5nZShtX2ZpbGVEYXRhLCBudWxscHRyKTsgfQorICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBT
cGFuPHN0ZDo6Ynl0ZT4gbGVha0hhbmRsZSgpIHsgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9maWxl
RGF0YSwgeyB9KTsgfQogCiBwcml2YXRlOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIG1h
cEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBGaWxlT3Blbk1vZGUsIE1hcHBlZEZpbGVN
b2RlKTsKIAotICAgIHZvaWQqIG1fZmlsZURhdGEgeyBudWxscHRyIH07Ci0gICAgdW5zaWduZWQg
bV9maWxlU2l6ZSB7IDAgfTsKKyAgICBTcGFuPHN0ZDo6Ynl0ZT4gbV9maWxlRGF0YTsKIH07CiAK
IGlubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGxhdGZvcm1GaWxlSGFuZGxl
IGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUgbWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKQEAgLTI0Nywy
MSArMjQ2LDE5IEBAIGlubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGwKIH0K
IAogaW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShNYXBwZWRGaWxlRGF0YSYm
IG90aGVyKQotICAgIDogbV9maWxlRGF0YShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEs
IG51bGxwdHIpKQotICAgICwgbV9maWxlU2l6ZShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZVNp
emUsIDApKQorICAgIDogbV9maWxlRGF0YShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEs
IHsgfSkpCiB7CiB9CiAKIGlubGluZSBNYXBwZWRGaWxlRGF0YSYgTWFwcGVkRmlsZURhdGE6Om9w
ZXJhdG9yPShNYXBwZWRGaWxlRGF0YSYmIG90aGVyKQogewotICAgIG1fZmlsZURhdGEgPSBzdGQ6
OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEsIG51bGxwdHIpOwotICAgIG1fZmlsZVNpemUgPSBz
dGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZVNpemUsIDApOworICAgIG1fZmlsZURhdGEgPSBzdGQ6
OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEsIHsgfSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQog
CiAvLyBUaGlzIGNyZWF0ZXMgdGhlIGRlc3RpbmF0aW9uIGZpbGUsIG1hcHMgaXQsIHdyaXRlIHRo
ZSBwcm92aWRlZCBkYXRhIHRvIGl0IGFuZCByZXR1cm5zIHRoZSBtYXBwZWQgZmlsZS4KIC8vIFRo
aXMgZnVuY3Rpb24gZmFpbHMgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIGZpbGUgYXQgdGhlIGRlc3Rp
bmF0aW9uIHBhdGguCi1XVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVuY3Rpb248dm9pZChjb25z
dCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYpPiYmIGFwcGx5LCBQbGF0
Zm9ybUZpbGVIYW5kbGUqID0gbnVsbHB0cik7CitXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmls
ZURhdGEgbWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVu
Y3Rpb248dm9pZChjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+Jik+
JiYgYXBwbHksIFBsYXRmb3JtRmlsZUhhbmRsZSogPSBudWxscHRyKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgRmlsZVN5c3RlbUltcGwKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93
dGYvU0hBMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU0hBMS5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL1NIQTEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NiwxMCArNDYsMTAgQEAgU0hBMTo6U0hBMSgpCiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNM
QVJBVElPTlNfRU5ECiB9CiAKLXZvaWQgU0hBMTo6YWRkQnl0ZXMoY29uc3QgdWludDhfdCogaW5w
dXQsIHNpemVfdCBsZW5ndGgpCit2b2lkIFNIQTE6OmFkZEJ5dGVzKFNwYW48Y29uc3Qgc3RkOjpi
eXRlPiBpbnB1dCkKIHsKICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgot
ICAgIENDX1NIQTFfVXBkYXRlKCZtX2NvbnRleHQsIGlucHV0LCBsZW5ndGgpOworICAgIENDX1NI
QTFfVXBkYXRlKCZtX2NvbnRleHQsIGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpKTsKICAgICBB
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIH0KIApAQCAtMTAxLDExICsxMDEsMTEg
QEAgU0hBMTo6U0hBMSgpCiAgICAgcmVzZXQoKTsKIH0KIAotdm9pZCBTSEExOjphZGRCeXRlcyhj
b25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGxlbmd0aCkKK3ZvaWQgU0hBMTo6YWRkQnl0ZXMo
U3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQogewotICAgIHdoaWxlIChsZW5ndGgtLSkgewor
ICAgIGZvciAoYXV0byBieXRlIDogaW5wdXQpIHsKICAgICAgICAgQVNTRVJUKG1fY3Vyc29yIDwg
NjQpOwotICAgICAgICBtX2J1ZmZlclttX2N1cnNvcisrXSA9ICppbnB1dCsrOworICAgICAgICBt
X2J1ZmZlclttX2N1cnNvcisrXSA9IHN0ZDo6dG9faW50ZWdlcjx1aW50OF90PihieXRlKTsKICAg
ICAgICAgKyttX3RvdGFsQnl0ZXM7CiAgICAgICAgIGlmIChtX2N1cnNvciA9PSA2NCkKICAgICAg
ICAgICAgIHByb2Nlc3NCbG9jaygpOwpJbmRleDogU291cmNlL1dURi93dGYvU0hBMS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NIQTEuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dURi93dGYvU0hBMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgPGFycmF5PgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAt
NDUsMTUgKzQ2LDExIEBAIGNsYXNzIFNIQTEgewogcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBTSEExKCk7CiAKLSAgICB2b2lkIGFkZEJ5dGVzKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
aW5wdXQpCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkQnl0ZXMoU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkZEJ5dGVzKFQmJiBk
YXRhKQogICAgIHsKLSAgICAgICAgYWRkQnl0ZXMoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkp
OworICAgICAgICByZXR1cm4gYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+
KGRhdGEpIH0pKTsKICAgICB9Ci0gICAgdm9pZCBhZGRCeXRlcyhjb25zdCBDU3RyaW5nJiBpbnB1
dCkKLSAgICB7Ci0gICAgICAgIGFkZEJ5dGVzKGlucHV0LmRhdGFBc1VJbnQ4UHRyKCksIGlucHV0
Lmxlbmd0aCgpKTsKLSAgICB9Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkQnl0ZXMo
Y29uc3QgdWludDhfdCogaW5wdXQsIHNpemVfdCBsZW5ndGgpOwogCiAgICAgLy8gU2l6ZSBvZiB0
aGUgU0hBMSBoYXNoCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBjb25zdGV4cHIgc2l6
ZV90IGhhc2hTaXplID0gMjA7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dURi93dGYvVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxMyw2ICs2MTMsNyBAQCBw
cml2YXRlOgogCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBUIFZhbHVlVHlwZTsKKyAgICB0eXBlZGVm
IFQgdmFsdWVfdHlwZTsKIAogICAgIHR5cGVkZWYgVCogaXRlcmF0b3I7CiAgICAgdHlwZWRlZiBj
b25zdCBUKiBjb25zdF9pdGVyYXRvcjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL2NmL1NwYW5DRi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL2NmL1NwYW5DRi5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XVEYvd3RmL2NmL1NwYW5DRi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPENvcmVGb3VuZGF0
aW9uL0NvcmVGb3VuZGF0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KKworbmFtZXNwYWNl
IFdURiB7CisKK2lubGluZSBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYXNCeXRlcyhDRkRhdGFSZWYg
ZGF0YSkKK3sKKyAgICByZXR1cm4geyByZWludGVycHJldF9jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+
KENGRGF0YUdldEJ5dGVQdHIoZGF0YSkpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KENGRGF0YUdldExl
bmd0aChkYXRhKSkgfTsKK30KKworfQorCit1c2luZyBXVEY6OmFzQnl0ZXM7CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9jb2NvYS9TcGFuQ29jb2EuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9jb2NvYS9TcGFuQ29jb2EuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9jb2Nv
YS9TcGFuQ29jb2EuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNp
bmNsdWRlIDx3dGYvU3Bhbi5oPgorCituYW1lc3BhY2UgV1RGIHsKKworaW5saW5lIFNwYW48Y29u
c3Qgc3RkOjpieXRlPiBhc0J5dGVzKE5TRGF0YSAqZGF0YSkKK3sKKyAgICByZXR1cm4geyByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxlbmd0aCB9
OworfQorCit9CisKK3VzaW5nIFdURjo6YXNCeXRlczsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3Bl
cnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIENvZGVyPENTdHJpbmc+OjplbmNvZGUoRW5j
b2RlciYgZW5jCiAKICAgICB1aW50MzJfdCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAg
ZW5jb2RlciA8PCBsZW5ndGg7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3Ry
aW5nLmRhdGFBc1VJbnQ4UHRyKCksIGxlbmd0aCk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoc3RyaW5nLmJ5dGVzKCkpOwogfQogCiBzdGQ6Om9wdGlvbmFsPENTdHJpbmc+IENv
ZGVyPENTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKQEAgLTc4LDcgKzc4LDcgQEAg
c3RkOjpvcHRpb25hbDxDU3RyaW5nPiBDb2RlcjxDU3RyaW5nPjo6ZAogCiAgICAgY2hhciogYnVm
ZmVyOwogICAgIENTdHJpbmcgc3RyaW5nID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZCgqbGVu
Z3RoLCBidWZmZXIpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgKmxlbmd0aCkpCisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgcmVpbnRlcnByZXRfY2FzdDxzdGQ6OmJ5
dGUqPihidWZmZXIpLCAqbGVuZ3RoIH0pKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owog
CiAgICAgcmV0dXJuIHN0cmluZzsKQEAgLTk2LDExICs5Niw3IEBAIHZvaWQgQ29kZXI8U3RyaW5n
Pjo6ZW5jb2RlKEVuY29kZXImIGVuY28KICAgICBib29sIGlzOEJpdCA9IHN0cmluZy5pczhCaXQo
KTsKIAogICAgIGVuY29kZXIgPDwgbGVuZ3RoIDw8IGlzOEJpdDsKLQotICAgIGlmIChpczhCaXQp
Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0cmluZy5jaGFyYWN0ZXJz
OCgpLCBsZW5ndGgpOwotICAgIGVsc2UKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnMx
NigpKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoc3RyaW5nLmJ5dGVzKCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KQEAgLTExMiw3ICsxMDgsNyBAQCBzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8
U3RyaW5nPiBkZWNvCiAKICAgICBDaGFyYWN0ZXJUeXBlKiBidWZmZXI7CiAgICAgU3RyaW5nIHN0
cmluZyA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihidWZmZXIpLCBsZW5ndGggKiBzaXplb2YoQ2hhcmFjdGVyVHlwZSkpKQorICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8c3Rk
OjpieXRlKj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJhY3RlclR5cGUpIH0pKQogICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIAogICAgIHJldHVybiBzdHJpbmc7CkBAIC0x
NDIsMTMgKzEzOCwxMyBAQCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gQ29kZXI8U3RyaW5nPjo6ZGVj
CiAKIHZvaWQgQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQogewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpKTsKKyAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3QpOwogfQogCiBzdGQ6Om9wdGlvbmFsPFNIQTE6OkRpZ2Vz
dD4gQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAg
U0hBMTo6RGlnZXN0IHRtcDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHRtcC5kYXRhKCksIHNpemVvZih0bXApKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKHRtcCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgcmV0dXJu
IHRtcDsKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2Rl
cnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50
Q29kZXJzLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNl
L1BlcnNpc3RlbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYg
dmVjdG9yKQogICAgIHsKICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
dmVjdG9yLnNpemUoKSk7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6
ZSgpICogc2l6ZW9mKFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEo
dmVjdG9yKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5Pj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCkBAIC0xNzMsNyArMTcz
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAgICAgICBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IHRlbXA7CiAgICAgICAgIHRlbXAuZ3JvdyhzaXplKTsK
IAotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KHRlbXAuZGF0YSgpKSwgc2l6ZSAqIHNpemVvZihUKSkpCisgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEodGVtcCkpCiAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgICAgIHJldHVybiB0ZW1wOwpJbmRleDogU291cmNl
L1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmNwcAkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29k
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyMyArMzEsMjEgQEAKIG5hbWVzcGFjZSBXVEYg
ewogbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAotRGVjb2Rlcjo6RGVjb2Rlcihjb25zdCB1aW50
OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKQotICAgIDogbV9idWZmZXIoYnVmZmVyKQot
ICAgICwgbV9idWZmZXJQb3NpdGlvbihidWZmZXIpCi0gICAgLCBtX2J1ZmZlckVuZChidWZmZXIg
KyBidWZmZXJTaXplKQorRGVjb2Rlcjo6RGVjb2RlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnVm
ZmVyKQorICAgIDogbV9idWZmZXIoYnVmZmVyLmRhdGEoKSkKKyAgICAsIG1fYnVmZmVyUG9zaXRp
b24oYnVmZmVyLmRhdGEoKSkKKyAgICAsIG1fYnVmZmVyRW5kKGJ1ZmZlci5kYXRhKCkgKyBidWZm
ZXIuc2l6ZSgpKQogewogfQogCi1EZWNvZGVyOjp+RGVjb2RlcigpCi17Ci19CitEZWNvZGVyOjp+
RGVjb2RlcigpID0gZGVmYXVsdDsKIAogYm9vbCBEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdo
VG9Db250YWluKHNpemVfdCBzaXplKSBjb25zdAogewogICAgIHJldHVybiBzaXplIDw9IHN0YXRp
Y19jYXN0PHNpemVfdD4obV9idWZmZXJFbmQgLSBtX2J1ZmZlclBvc2l0aW9uKTsKIH0KIAotY29u
c3QgdWludDhfdCogRGVjb2Rlcjo6YnVmZmVyUG9pbnRlckZvckRpcmVjdFJlYWQoc2l6ZV90IHNp
emUpCitjb25zdCBzdGQ6OmJ5dGUqIERlY29kZXI6OmJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFk
KHNpemVfdCBzaXplKQogewogICAgIGlmICghYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihz
aXplKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC01NSwxNiArNTMsMTYgQEAgY29uc3Qg
dWludDhfdCogRGVjb2Rlcjo6YnVmZmVyUG9pbnRlckZvcgogICAgIGF1dG8gZGF0YSA9IG1fYnVm
ZmVyUG9zaXRpb247CiAgICAgbV9idWZmZXJQb3NpdGlvbiArPSBzaXplOwogCi0gICAgRW5jb2Rl
cjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgZGF0YSwgc2l6ZSk7CisgICAgRW5jb2Rl
cjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgU3BhbiB7IGRhdGEsIHNpemUgfSk7CiAg
ICAgcmV0dXJuIGRhdGE7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQorYm9vbCBEZWNvZGVyOjpkZWNvZGVGaXhlZExl
bmd0aERhdGEoU3BhbjxzdGQ6OmJ5dGU+IGRhdGEpCiB7Ci0gICAgYXV0byBidWZmZXIgPSBidWZm
ZXJQb2ludGVyRm9yRGlyZWN0UmVhZChzaXplKTsKKyAgICBhdXRvIGJ1ZmZlciA9IGJ1ZmZlclBv
aW50ZXJGb3JEaXJlY3RSZWFkKGRhdGEuc2l6ZSgpKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIG1lbWNweShkYXRhLCBidWZmZXIsIHNpemUpOworICAgIG1l
bWNweShkYXRhLmRhdGEoKSwgYnVmZmVyLCBkYXRhLnNpemUoKSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTEzOSw3ICsxMzcsNyBAQCBib29sIERlY29kZXI6OnZlcmlmeUNoZWNrc3VtKCkK
ICAgICBtX3NoYTEuY29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2Vz
dCBzYXZlZEhhc2g7Ci0gICAgaWYgKCFkZWNvZGVGaXhlZExlbmd0aERhdGEoc2F2ZWRIYXNoLmRh
dGEoKSwgc2l6ZW9mKHNhdmVkSGFzaCkpKQorICAgIGlmICghZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHNhdmVkSGFzaCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBjb21wdXRl
ZEhhc2ggPT0gc2F2ZWRIYXNoOwpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVy
c2lzdGVudERlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5j
ZS9QZXJzaXN0ZW50RGVjb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0
Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw3IEBACiAKICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9T
SEExLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2Uv
UGVyc2lzdGVudENvZGVyLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMzUsNyArMzYsMTIgQEAg
bmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIGNsYXNzIERlY29kZXIgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyKGNv
bnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IERlY29kZXIoVCYmIGRhdGEpCisgICAgICAgIDogRGVjb2RlciB7IGFzQnl0ZXMo
U3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihkYXRhKSB9KSB9CisgICAgeworICAgIH0KKworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIH5EZWNvZGVyKCk7CiAKICAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3Qg
eyByZXR1cm4gbV9idWZmZXJFbmQgLSBtX2J1ZmZlcjsgfQpAQCAtNDMsNyArNDksMTEgQEAgcHVi
bGljOgogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIHZl
cmlmeUNoZWNrc3VtKCk7CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgV0FSTl9VTlVTRURfUkVU
VVJOIGJvb2wgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqLCBzaXplX3QpOworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVGaXhlZExlbmd0
aERhdGEoU3BhbjxzdGQ6OmJ5dGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIGRl
Y29kZUZpeGVkTGVuZ3RoRGF0YShUJiYgZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNv
ZGVGaXhlZExlbmd0aERhdGEoYXNXcml0YWJsZUJ5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4o
ZGF0YSkgfSkpOworICAgIH0KIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVy
YXRvcj4+KHN0ZDo6b3B0aW9uYWw8Ym9vbD4mKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVj
b2RlciYgb3BlcmF0b3I+PihzdGQ6Om9wdGlvbmFsPHVpbnQ4X3Q+Jik7CkBAIC04NCw3ICs5NCw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG51bUVsZW1lbnRzIDw9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8c2l6ZV90Pjo6bWF4KCkgLyBzaXplb2YoVCkgJiYgYnVmZmVySXNMYXJnZUVub3VnaFRv
Q29udGFpbihudW1FbGVtZW50cyAqIHNpemVvZihUKSk7CiAgICAgfQogCi0gICAgV1RGX0VYUE9S
VF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBjb25zdCB1aW50OF90KiBidWZmZXJQb2ludGVy
Rm9yRGlyZWN0UmVhZChzaXplX3QgbnVtQnl0ZXMpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBX
QVJOX1VOVVNFRF9SRVRVUk4gY29uc3Qgc3RkOjpieXRlKiBidWZmZXJQb2ludGVyRm9yRGlyZWN0
UmVhZChzaXplX3QgbnVtQnl0ZXMpOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSVBD
RGVjb2RlciA9IGZhbHNlOwogCkBAIC05Miw5ICsxMDIsOSBAQCBwcml2YXRlOgogICAgIFdURl9F
WFBPUlRfUFJJVkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBidWZmZXJJc0xhcmdlRW5vdWdo
VG9Db250YWluKHNpemVfdCkgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4gRGVj
b2RlciYgZGVjb2RlTnVtYmVyKHN0ZDo6b3B0aW9uYWw8VHlwZT4mKTsKIAotICAgIGNvbnN0IHVp
bnQ4X3QqIG1fYnVmZmVyOwotICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyUG9zaXRpb247Ci0g
ICAgY29uc3QgdWludDhfdCogbV9idWZmZXJFbmQ7CisgICAgY29uc3Qgc3RkOjpieXRlKiBtX2J1
ZmZlcjsKKyAgICBjb25zdCBzdGQ6OmJ5dGUqIG1fYnVmZmVyUG9zaXRpb247CisgICAgY29uc3Qg
c3RkOjpieXRlKiBtX2J1ZmZlckVuZDsKIAogICAgIFNIQTEgbV9zaGExOwogfTsKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRF
bmNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMzQgKzMxLDM0IEBACiBuYW1lc3BhY2Ug
V1RGIHsKIG5hbWVzcGFjZSBQZXJzaXN0ZW5jZSB7CiAKLUVuY29kZXI6OkVuY29kZXIoKQotewot
fQotCi1FbmNvZGVyOjp+RW5jb2RlcigpCi17Ci19CitFbmNvZGVyOjpFbmNvZGVyKCkgPSBkZWZh
dWx0OworRW5jb2Rlcjo6fkVuY29kZXIoKSA9IGRlZmF1bHQ7CiAKLXVpbnQ4X3QqIEVuY29kZXI6
Omdyb3coc2l6ZV90IHNpemUpCitzdGQ6OmJ5dGUqIEVuY29kZXI6Omdyb3coc2l6ZV90IHNpemUp
CiB7CiAgICAgc2l6ZV90IG5ld1Bvc2l0aW9uID0gbV9idWZmZXIuc2l6ZSgpOwogICAgIG1fYnVm
ZmVyLmdyb3cobV9idWZmZXIuc2l6ZSgpICsgc2l6ZSk7CiAgICAgcmV0dXJuIG1fYnVmZmVyLmRh
dGEoKSArIG5ld1Bvc2l0aW9uOwogfQogCi12b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9y
RGF0YShTSEExJiBzaGExLCBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3ZvaWQg
RW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmIHNoYTEsIFNwYW48Y29uc3QgdWlu
dDhfdD4gZGF0YSkKK3sKKyAgICByZXR1cm4gdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKHNoYTEsIGFz
Qnl0ZXMoZGF0YSkpOworfQorCit2b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yRGF0YShT
SEExJiBzaGExLCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKICAgICBhdXRvIHR5cGVT
YWx0ID0gU2FsdDx1aW50OF90Kj46OnZhbHVlOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7Ci0gICAgc2hh
MS5hZGRCeXRlcyhkYXRhLCBzaXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmdHlwZVNh
bHQsIDEgfSk7CisgICAgc2hhMS5hZGRCeXRlcyhkYXRhKTsKIH0KIAotdm9pZCBFbmNvZGVyOjpl
bmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCit2
b2lkIEVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
ZGF0YSkKIHsKLSAgICB1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhLCBzaXplKTsK
KyAgICB1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhKTsKIAotICAgIHVpbnQ4X3Qq
IGJ1ZmZlciA9IGdyb3coc2l6ZSk7Ci0gICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7Cisg
ICAgYXV0byogYnVmZmVyID0gZ3JvdyhkYXRhLnNpemUoKSk7CisgICAgbWVtY3B5KGJ1ZmZlciwg
ZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4K
QEAgLTY2LDcgKzY2LDcgQEAgRW5jb2RlciYgRW5jb2Rlcjo6ZW5jb2RlTnVtYmVyKFR5cGUgdmFs
dQogewogICAgIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKG1fc2hhMSwgdmFsdWUp
OwogCi0gICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhzaXplb2YoVHlwZSkpOworICAgIGF1dG8q
IGJ1ZmZlciA9IGdyb3coc2l6ZW9mKFR5cGUpKTsKICAgICBtZW1jcHkoYnVmZmVyLCAmdmFsdWUs
IHNpemVvZihUeXBlKSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQpAQCAtMTI1LDcgKzEyNSw3IEBA
IHZvaWQgRW5jb2Rlcjo6ZW5jb2RlQ2hlY2tzdW0oKQogewogICAgIFNIQTE6OkRpZ2VzdCBoYXNo
OwogICAgIG1fc2hhMS5jb21wdXRlSGFzaChoYXNoKTsKLSAgICBlbmNvZGVGaXhlZExlbmd0aERh
dGEoaGFzaC5kYXRhKCksIGhhc2guc2l6ZSgpKTsKKyAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEo
aGFzaCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3Rl
bnRFbmNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVy
c2lzdGVudEVuY29kZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvcGVy
c2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcs
NyBAQAogCiAjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvU0hBMS5o
PgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1
ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaD4KIApAQCAtNDMsNyArNDQsMTEg
QEAgcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSB+RW5jb2RlcigpOwogCiAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlQ2hlY2tzdW0oKTsKLSAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCosIHNpemVfdCk7
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48
Y29uc3Qgc3RkOjpieXRlPik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBlbmNvZGVG
aXhlZExlbmd0aERhdGEoVCYmIGRhdGEpCisgICAgeworICAgICAgICBlbmNvZGVGaXhlZExlbmd0
aERhdGEoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pKTsKKyAgICB9CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZW51bTxU
Pjo6dmFsdWU+KiA9IG51bGxwdHI+CiAgICAgRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBUJiB0
KQpAQCAtNzAsMjMgKzc1LDIyIEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRW5j
b2RlciYgb3BlcmF0b3I8PChmbG9hdCk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIEVuY29kZXIm
IG9wZXJhdG9yPDwoZG91YmxlKTsKIAotICAgIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlcigpIGNvbnN0
IHsgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKTsgfQotICAgIHNpemVfdCBidWZmZXJTaXplKCkgY29u
c3QgeyByZXR1cm4gbV9idWZmZXIuc2l6ZSgpOyB9Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBjb25zdCB1aW50OF90Kiwg
c2l6ZV90KTsKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnVmZmVyKCkgY29uc3QgeyByZXR1
cm4gbV9idWZmZXI7IH0KKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQg
dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBTcGFuPGNvbnN0IHVpbnQ4X3Q+KTsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEm
LCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPiBz
dGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZvck51bWJlcihTSEExJiwgVHlwZSk7CiAKICAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNJUENFbmNvZGVyID0gZmFsc2U7CiAKIHByaXZhdGU6Ci0K
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiBFbmNvZGVyJiBlbmNvZGVOdW1iZXIoVHlwZSk7
CiAKLSAgICB1aW50OF90KiBncm93KHNpemVfdCk7CisgICAgc3RkOjpieXRlKiBncm93KHNpemVf
dCk7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4gc3RydWN0IFNhbHQ7CiAKLSAgICBW
ZWN0b3I8dWludDhfdCwgNDA5Nj4gbV9idWZmZXI7CisgICAgVmVjdG9yPHN0ZDo6Ynl0ZSwgNDA5
Nj4gbV9idWZmZXI7CiAgICAgU0hBMSBtX3NoYTE7CiB9OwogCkBAIC0xMDYsOCArMTEwLDggQEAg
dGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+CiB2b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9y
TnVtYmVyKFNIQTEmIHNoYTEsIFR5cGUgdmFsdWUpCiB7CiAgICAgYXV0byB0eXBlU2FsdCA9IFNh
bHQ8VHlwZT46OnZhbHVlOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7Ci0gICAgc2hhMS5hZGRCeXRlcyhy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWUpLCBzaXplb2YodmFsdWUpKTsKKyAgICBz
aGExLmFkZEJ5dGVzKFNwYW4geyAmdHlwZVNhbHQsIDEgfSk7CisgICAgc2hhMS5hZGRCeXRlcyhT
cGFuIHsgJnZhbHVlLCAxIH0pOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jh
c2U2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0MCwzOSArMTQwLDM5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IHN0YXRpYyAKICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSAn
PSc7CiB9CiAKLXN0YXRpYyBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoY29u
c3QgdWludDhfdCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0
RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKK3N0YXRpYyBWZWN0b3I8
dWludDhfdD4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0
LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewotICAg
IGF1dG8gZGVzdGluYXRpb25MZW5ndGggPSBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShpbnB1
dExlbmd0aCwgcG9saWN5KTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uTGVuZ3RoID0gY2FsY3VsYXRl
QmFzZTY0RW5jb2RlZFNpemUoaW5wdXQuc2l6ZSgpLCBwb2xpY3kpOwogICAgIGlmICghZGVzdGlu
YXRpb25MZW5ndGgpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBWZWN0b3I8dWludDhfdD4g
ZGVzdGluYXRpb25WZWN0b3IoZGVzdGluYXRpb25MZW5ndGgpOwotICAgIGJhc2U2NEVuY29kZUlu
dGVybmFsKGlucHV0RGF0YUJ1ZmZlciwgaW5wdXRMZW5ndGgsIGRlc3RpbmF0aW9uVmVjdG9yLmRh
dGEoKSwgZGVzdGluYXRpb25MZW5ndGgsIHBvbGljeSwgbWFwKTsKKyAgICBiYXNlNjRFbmNvZGVJ
bnRlcm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBp
bnB1dC5zaXplKCksIGRlc3RpbmF0aW9uVmVjdG9yLmRhdGEoKSwgZGVzdGluYXRpb25MZW5ndGgs
IHBvbGljeSwgbWFwKTsKICAgICByZXR1cm4gZGVzdGluYXRpb25WZWN0b3I7CiB9CiAKLXZvaWQg
YmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRM
ZW5ndGgsIFVDaGFyKiBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9u
TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQor
dm9pZCBiYXNlNjRFbmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0LCBVQ2hhciogZGVz
dGluYXRpb25EYXRhQnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkxlbmd0aCwgQmFzZTY0RW5j
b2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKICAgICBpZiAoIWRlc3Rp
bmF0aW9uTGVuZ3RoKQogICAgICAgICByZXR1cm47Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwo
c3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3Ro
LCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7
CisgICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRl
c3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7CiB9CiAKLXZvaWQgYmFzZTY0RW5jb2RlKGNv
bnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIExDaGFyKiBk
ZXN0aW5hdGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uTGVuZ3RoLCBCYXNlNjRF
bmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordm9pZCBiYXNlNjRFbmNv
ZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0LCBMQ2hhciogZGVzdGluYXRpb25EYXRhQnVm
ZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkxlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGlj
eSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKICAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQog
ICAgICAgICByZXR1cm47Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29u
c3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvbkRh
dGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7CisgICAgYmFzZTY0RW5j
b2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0YSgp
KSwgaW5wdXQuc2l6ZSgpLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3Ro
LCBwb2xpY3ksIG1hcCk7CiB9CiAKLVZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rv
cihjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNl
NjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQorVmVjdG9yPHVpbnQ4
X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwgQmFz
ZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1
cm4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0
RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2
NEVuY29kZUludGVybmFsKGlucHV0LCBwb2xpY3ksIG1hcCk7CiB9CiAKLVN0cmluZyBiYXNlNjRF
bmNvZGVUb1N0cmluZyhjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0
TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQor
U3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwg
QmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBy
ZXR1cm4gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKGlucHV0RGF0YUJ1ZmZlciwgaW5wdXRMZW5n
dGgsIHBvbGljeSwgbWFwKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChp
bnB1dCwgcG9saWN5LCBtYXApKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIHN0
ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGVJbnRlcm5hbChjb25zdCBU
KiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBPcHRpb25TZXQ8QmFzZTY0
RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKQEAgLTI1NCw4NCAr
MjU0LDI3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBzdGQ6Om9wdGlvbmEKICAgICBy
ZXR1cm4gZGVzdGluYXRpb247CiB9CiAKLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjREZWNvZGUoY29uc3QgU3RyaW5nJiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9w
dGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgdW5zaWduZWQgbGVu
Z3RoID0gaW5wdXQubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGggfHwgaW5wdXQuaXM4Qml0KCkp
Ci0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgp
LCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFs
KGlucHV0LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7Ci19Ci0KLXN0ZDo6
b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3RyaW5nVmlldyBpbnB1dCwg
T3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBt
YXApCi17Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7Ci0gICAgaWYgKCFs
ZW5ndGggfHwgaW5wdXQuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRl
cm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7Ci0gICAgcmV0
dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIG9w
dGlvbnMsIG1hcCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRE
ZWNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29k
ZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgaWYgKGlucHV0
LnNpemUoKSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKLSAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5w
dXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIG9wdGlvbnMsIG1hcCk7Ci19Ci0KLXN0ZDo6b3B0aW9u
YWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1
dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1h
cCBtYXApCitzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKFNwYW48
Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9w
dGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7CiAgICAgaWYgKGlucHV0LnNpemUoKSA+IHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpLCBvcHRpb25zLCBt
YXApOwogfQogCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNv
bnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgT3B0aW9uU2V0PEJhc2U2NERlY29k
ZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgcmV0dXJuIGJh
c2U2NERlY29kZUludGVybmFsKGRhdGEsIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKLX0KLQotc3Rk
OjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBjaGFyKiBkYXRh
LCB1bnNpZ25lZCBsZW5ndGgsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRpb25z
LCBCYXNlNjREZWNvZGVNYXAgbWFwKQotewotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5h
bChyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oZGF0YSksIGxlbmd0aCwgb3B0aW9ucywg
bWFwKTsKLX0KLQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29k
ZShjb25zdCBTdHJpbmcmIGlucHV0KQorc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJh
c2U2NERlY29kZShjb25zdCBTdHJpbmcmIGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0
aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKICAgICB1bnNpZ25lZCBsZW5n
dGggPSBpbnB1dC5sZW5ndGgoKTsKICAgICBpZiAoIWxlbmd0aCB8fCBpbnB1dC5pczhCaXQoKSkK
LSAgICAgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnM4KCks
IGxlbmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7Ci0gICAgcmV0dXJuIGJhc2U2NERl
Y29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIHsgfSwgQmFzZTY0RGVj
b2RlTWFwOjpVUkwpOworICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQu
Y2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOworICAgIHJldHVybiBiYXNlNjRE
ZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXAp
OwogfQogCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFN0
cmluZ1ZpZXcgaW5wdXQpCitzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVj
b2RlKFN0cmluZ1ZpZXcgaW5wdXQsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRp
b25zLCBCYXNlNjREZWNvZGVNYXAgbWFwKQogewogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0
Lmxlbmd0aCgpOwogICAgIGlmICghbGVuZ3RoIHx8IGlucHV0LmlzOEJpdCgpKQotICAgICAgICBy
ZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCB7
IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJu
YWwoaW5wdXQuY2hhcmFjdGVyczE2KCksIGxlbmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVS
TCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUo
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKLXsKLSAgICBpZiAoaW5wdXQuc2l6ZSgpID4g
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQotICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5kYXRhKCks
IGlucHV0LnNpemUoKSwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7Ci19Ci0KLXN0ZDo6b3B0
aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+
JiBpbnB1dCkKLXsKLSAgICBpZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHJldHVy
biBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihp
bnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCksIHsgfSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOwot
fQotCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0
IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gYmFzZTY0RGVj
b2RlSW50ZXJuYWwoZGF0YSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKLX0K
LQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBj
aGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUlu
dGVybmFsKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBsZW5ndGgsIHsg
fSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOworICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50
ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOworICAgIHJl
dHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBv
cHRpb25zLCBtYXApOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL3RleHQvQmFzZTY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9CYXNl
NjQuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCkBAIC01Niw1NCArNTcsMzUgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBtYXhpbXVtQmFzZTY0TAogLy8gUmF0aGVyIHRoYW4gYmVpbmcgcGVyZmVjdGx5IHByZWNp
c2UsIHRoaXMgaXMgYSBiaXQgY29uc2VydmF0aXZlLgogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBtYXhpbXVtQmFzZTY0RW5jb2RlcklucHV0QnVmZmVyU2l6ZSA9IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSAvIDc3ICogNzYgLyA0ICogMyAtIDI7CiAKLVdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQsIFVDaGFyKiwg
dW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJ
bnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci1X
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVk
LCBMQ2hhciosIHVuc2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xp
Y3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRl
ZmF1bHQpOworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2RlKFNwYW48Y29uc3Qg
c3RkOjpieXRlPiwgVUNoYXIqIGRlc3RpbmF0aW9uQnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlv
bkJ1ZmZlclNpemUsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9O
b3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7
CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+LCBMQ2hhciogZGVzdGluYXRpb25CdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uQnVmZmVy
U2l6ZSwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2Vy
dExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKIAotV1RG
X0VYUE9SVF9QUklWQVRFIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25z
dCB2b2lkKiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGlj
eTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVm
YXVsdCk7Ci1WZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05v
dEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsK
LVZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8Y2hhcj4m
LCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZz
LCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwotVmVjdG9yPHVp
bnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IENTdHJpbmcmLCBCYXNlNjRFbmNvZGVQ
b2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVN
YXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwotCi1XVEZfRVhQT1JUX1BSSVZBVEUgU3Ry
aW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgQmFzZTY0RW5j
b2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5j
b2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKLVN0cmluZyBiYXNlNjRFbmNvZGVU
b1N0cmluZyhjb25zdCBWZWN0b3I8dWludDhfdD4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNl
NjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRF
bmNvZGVNYXA6OkRlZmF1bHQpOwotU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IFZl
Y3RvcjxjaGFyPiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9O
b3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7
Ci1TdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgQ1N0cmluZyYsIEJhc2U2NEVuY29k
ZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29k
ZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgVmVj
dG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKFNwYW48Y29uc3Qgc3RkOjpieXRlPiwg
QmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywg
QmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihUJiYsIEJhc2U2
NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2
NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CiAKK1dURl9FWFBPUlRfUFJJ
VkFURSBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+LCBC
YXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBC
YXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKFQmJiwgQmFzZTY0RW5jb2RlUG9s
aWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFw
ID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKKworV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6
b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1h
cCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpv
cHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBTdHJpbmcmLCBPcHRp
b25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2
NERlY29kZU1hcDo6RGVmYXVsdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxW
ZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShTdHJpbmdWaWV3LCBPcHRpb25TZXQ8QmFzZTY0
RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6
RGVmYXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGJhc2U2NERlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mLCBPcHRpb25TZXQ8QmFzZTY0
RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6
RGVmYXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGJhc2U2NERlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mLCBPcHRpb25TZXQ8QmFzZTY0RGVj
b2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVm
YXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+
IGJhc2U2NERlY29kZShjb25zdCB1aW50OF90KiwgdW5zaWduZWQsIE9wdGlvblNldDxCYXNlNjRE
ZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpE
ZWZhdWx0KTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90
Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCwgT3B0aW9uU2V0PEJhc2U2NERl
Y29kZU9wdGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRl
ZmF1bHQpOwotCi1pbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJh
c2U2NEVuY29kZU1hcCBtYXApCi17Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlu
cHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7Ci19Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25z
dF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+PiwgU3RyaW5nPiAmJiAhc3RkOjppc19zYW1l
X3Y8c3RkOjpyZW1vdmVfY29uc3RfdDxzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxUPj4sIFN0cmlu
Z1ZpZXc+PiogPSBudWxscHRyPgorc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2
NERlY29kZShUJiYsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0
RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKIAotaW5saW5lIFZlY3Rvcjx1
aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBC
YXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordGVtcGxhdGU8
dHlwZW5hbWUgVD4gVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKFQmJiBpbnB1
dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAg
ICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCks
IHBvbGljeSwgbWFwKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoYXNCeXRlcyhT
cGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGlucHV0KSB9KSwgcG9saWN5LCBtYXApOwogfQogCi1pbmxp
bmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IENTdHJpbmcmIGlu
cHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordGVt
cGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKFQmJiBpbnB1dCwg
QmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBy
ZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwg
cG9saWN5LCBtYXApOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhhc0J5dGVzKFNw
YW4geyBzdGQ6OmZvcndhcmQ8VD4oaW5wdXQpIH0pLCBwb2xpY3ksIG1hcCk7CiB9CiAKLWlubGlu
ZSBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1
dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZV92PHN0ZDo6cmVt
b3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmc+ICYmICFzdGQ6
OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+
PiwgU3RyaW5nVmlldz4+Kj4KK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRE
ZWNvZGUoVCYmIGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywg
QmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmco
aW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSwgbWFwKTsKLX0KLQotaW5saW5lIFN0
cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBCYXNl
NjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQotewotICAgIHJldHVy
biBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5
LCBtYXApOwotfQotCi1pbmxpbmUgU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IENT
dHJpbmcmIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAg
bWFwKQotewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlu
cHV0Lmxlbmd0aCgpLCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZShhc0J5
dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oaW5wdXQpIH0pLCBvcHRpb25zLCBtYXApOwogfQog
CiAKQEAgLTExMiw2MSArOTQsNTcgQEAgaW5saW5lIFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmlu
Zyhjb25zdAogLy8gVGhpcyBmb3JtYXQgdXNlcyAnLScgYW5kICdfJyBpbnN0ZWFkIG9mICcrJyBh
bmQgJy8nIHJlc3BlY3RpdmVseS4KIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAK
LVZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihjb25zdCB2b2lkKiwgdW5z
aWduZWQpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9y
KGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRv
VmVjdG9yKGNvbnN0IENTdHJpbmcmKTsKK1ZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVU
b1ZlY3RvcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVj
dG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKFQmJik7CiAKLVN0cmluZyBiYXNl
NjRVUkxFbmNvZGVUb1N0cmluZyhjb25zdCB2b2lkKiwgdW5zaWduZWQpOwotU3RyaW5nIGJhc2U2
NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOwotU3RyaW5nIGJhc2U2
NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotU3RyaW5nIGJhc2U2NFVS
TEVuY29kZVRvU3RyaW5nKGNvbnN0IENTdHJpbmcmKTsKK1N0cmluZyBiYXNlNjRVUkxFbmNvZGVU
b1N0cmluZyhTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3Ry
aW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKFQmJik7CiAKLVdURl9FWFBPUlRfUFJJVkFURSBz
dGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFN0cmlu
ZyYpOwotV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjRVUkxEZWNvZGUoU3RyaW5nVmlldyk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRp
b25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBWZWN0b3I8dWludDhf
dD4mKTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4g
YmFzZTY0VVJMRGVjb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotV1RGX0VYUE9SVF9QUklWQVRF
IHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgdWlu
dDhfdCosIHVuc2lnbmVkKTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rv
cjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCk7CitzdGQ6
Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFNwYW48Y29uc3Qgc3Rk
OjpieXRlPik7CitzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2Rl
KGNvbnN0IFN0cmluZyYpOworc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVS
TERlY29kZShTdHJpbmdWaWV3KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lm
X3Q8IXN0ZDo6aXNfc2FtZV92PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJl
bmNlX3Q8VD4+LCBTdHJpbmc+ICYmICFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90
PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+PiwgU3RyaW5nVmlldz4+KiA9IG51bGxwdHI+Citz
dGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFQmJik7CiAKLWlu
bGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3Qgdm9pZCog
aW5wdXQsIHVuc2lnbmVkIGxlbmd0aCkKK2lubGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJM
RW5jb2RlVG9WZWN0b3IoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQogewotICAgIHJldHVy
biBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dCwgbGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3k6
OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1Zl
Y3RvcihpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJM
KTsKIH0KIAotaW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihj
b25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVjdG9y
PHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKFQmJiBpbnB1dCkKIHsKLSAgICByZXR1
cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJhc2U2
NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJh
c2U2NEVuY29kZVRvVmVjdG9yKHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCksIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBWZWN0b3I8dWlu
dDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCkK
K2lubGluZSBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRh
KCksIGlucHV0LnNpemUoKSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1h
cDo6VVJMKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5wdXQsIEJhc2U2NEVu
Y29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBWZWN0
b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgQ1N0cmluZyYgaW5wdXQp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoVCYm
IGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRhKCks
IGlucHV0Lmxlbmd0aCgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFw
OjpVUkwpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhzdGQ6OmZvcndhcmQ8VD4o
aW5wdXQpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwog
fQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqIGlu
cHV0LCB1bnNpZ25lZCBsZW5ndGgpCitpbmxpbmUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGJhc2U2NFVSTERlY29kZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCiB7Ci0gICAg
cmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LCBsZW5ndGgsIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29k
ZShpbnB1dCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBTdHJpbmcg
YmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKK2lu
bGluZSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0
IFN0cmluZyYgaW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0
LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5j
b2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjREZWNvZGUoaW5wdXQsIHsgfSwgQmFzZTY0
RGVjb2RlTWFwOjpVUkwpOwogfQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3Ry
aW5nKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW5wdXQpCitpbmxpbmUgc3RkOjpvcHRpb25hbDxWZWN0
b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShTdHJpbmdWaWV3IGlucHV0KQogewotICAgIHJl
dHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgQmFz
ZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKKyAgICByZXR1cm4g
YmFzZTY0RGVjb2RlKGlucHV0LCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKIH0KIAotaW5s
aW5lIFN0cmluZyBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhjb25zdCBDU3RyaW5nJiBpbnB1dCkK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZV92PHN0
ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmc+ICYm
ICFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5j
ZV90PFQ+PiwgU3RyaW5nVmlldz4+Kj4KK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjRVUkxEZWNvZGUoVCYmIGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0
cmluZyhpbnB1dC5kYXRhKCksIGlucHV0Lmxlbmd0aCgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVS
TCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjRVUkxEZWNvZGUoYXNC
eXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGlucHV0KSB9KSk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBpbmxpbmUgYm9vbCBpc0Jhc2U2NE9yQmFzZTY0
VVJMQ2hhcmFjdGVyKENoYXJhY3RlclR5cGUgYykKQEAgLTIwOCw1NyArMTg2LDM2IEBAIGlubGlu
ZSB1bnNpZ25lZCBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2kKIH0KIAogc3RydWN0IEJhc2U2NFNw
ZWNpZmljYXRpb24gewotICAgIGNvbnN0IHZvaWQqIGlucHV0RGF0YTsKLSAgICB1bnNpZ25lZCBp
bnB1dExlbmd0aDsKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXREYXRhOwogICAgIEJh
c2U2NEVuY29kZVBvbGljeSBwb2xpY3k7CiAgICAgQmFzZTY0RW5jb2RlTWFwIG1hcDsKIH07CiAK
LWlubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NEVuY29kZWQoY29uc3Qgdm9pZCogaW5w
dXREYXRhLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9
IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCBtYXAg
PSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpCi17Ci0gICAgcmV0dXJuIHsgaW5wdXREYXRhLCBp
bnB1dExlbmd0aCwgcG9saWN5LCBtYXAgfTsKLX0KLQotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRp
b24gYmFzZTY0RW5jb2RlZChjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0LCBCYXNlNjRFbmNv
ZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcykKLXsK
LSAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9s
aWN5KTsKLX0KLQotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChjb25z
dCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0
RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcykKLXsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2Rl
ZChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5KTsKLX0KLQotaW5saW5lIEJhc2U2
NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChjb25zdCBDU3RyaW5nJiBpbnB1dCwgQmFzZTY0
RW5jb2RlUG9saWN5IHBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMp
Ci17Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgo
KSwgcG9saWN5KTsKLX0KLQotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5j
b2RlZChjb25zdCB2b2lkKiBpbnB1dERhdGEsIHVuc2lnbmVkIGlucHV0TGVuZ3RoKQoraW5saW5l
IEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
aW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRv
Tm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgbWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZh
dWx0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0RGF0YSwgaW5wdXRMZW5ndGgs
IEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0
dXJuIHsgaW5wdXQsIHBvbGljeSwgbWFwIH07CiB9CiAKLWlubGluZSBCYXNlNjRTcGVjaWZpY2F0
aW9uIGJhc2U2NFVSTEVuY29kZWQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChUJiYgaW5w
dXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90
SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgbWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0
KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgp
LCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJl
dHVybiBiYXNlNjRFbmNvZGVkKGFzQnl0ZXMoU3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCkg
fSksIHBvbGljeSwgbWFwKTsKIH0KIAotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0
VVJMRW5jb2RlZChjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0KQoraW5saW5lIEJhc2U2NFNwZWNp
ZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCiB7
Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJh
c2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJu
IGJhc2U2NEVuY29kZWQoaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNv
ZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NFVSTEVu
Y29kZWQoY29uc3QgQ1N0cmluZyYgaW5wdXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBCYXNlNjRT
cGVjaWZpY2F0aW9uIGJhc2U2NFVSTEVuY29kZWQoVCYmIGlucHV0KQogewotICAgIHJldHVybiBi
YXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29k
ZWQoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGlucHV0KSB9KSwgQmFzZTY0RW5jb2Rl
UG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKIH0KIAogdGVtcGxhdGU8PiBjbGFz
cyBTdHJpbmdUeXBlQWRhcHRlcjxCYXNlNjRTcGVjaWZpY2F0aW9uPiB7CiBwdWJsaWM6CiAgICAg
U3RyaW5nVHlwZUFkYXB0ZXIoY29uc3QgQmFzZTY0U3BlY2lmaWNhdGlvbiYgYmFzZTY0KQogICAg
ICAgICA6IG1fYmFzZTY0IHsgYmFzZTY0IH0KLSAgICAgICAgLCBtX2VuY29kZWRMZW5ndGggeyBj
YWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShiYXNlNjQuaW5wdXRMZW5ndGgsIGJhc2U2NC5wb2xp
Y3kpIH0KKyAgICAgICAgLCBtX2VuY29kZWRMZW5ndGggeyBjYWxjdWxhdGVCYXNlNjRFbmNvZGVk
U2l6ZShiYXNlNjQuaW5wdXREYXRhLnNpemUoKSwgYmFzZTY0LnBvbGljeSkgfQogICAgIHsKICAg
ICB9CiAKQEAgLTI2Nyw3ICsyMjQsNyBAQCBwdWJsaWM6CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiB2b2lkIHdyaXRlVG8oQ2hhcmFjdGVyVHlwZSogZGVzdGluYXRpb24p
IGNvbnN0CiAgICAgewotICAgICAgICBiYXNlNjRFbmNvZGUobV9iYXNlNjQuaW5wdXREYXRhLCBt
X2Jhc2U2NC5pbnB1dExlbmd0aCwgZGVzdGluYXRpb24sIG1fZW5jb2RlZExlbmd0aCwgbV9iYXNl
NjQucG9saWN5LCBtX2Jhc2U2NC5tYXApOworICAgICAgICBiYXNlNjRFbmNvZGUobV9iYXNlNjQu
aW5wdXREYXRhLCBkZXN0aW5hdGlvbiwgbV9lbmNvZGVkTGVuZ3RoLCBtX2Jhc2U2NC5wb2xpY3ks
IG1fYmFzZTY0Lm1hcCk7CiAgICAgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dURi93dGYv
dGV4dC9DU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9DU3RyaW5n
LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMu
aD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvU3Bhbi5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtMzksOSArNDAsMTEg
QEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoQwogY2xhc3MgQ1N0cmlu
Z0J1ZmZlciBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPENTdHJpbmdCdWZmZXI+IHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihDU3RyaW5nQnVmZmVy
KTsKIHB1YmxpYzoKLSAgICBjb25zdCBjaGFyKiBkYXRhKCkgeyByZXR1cm4gbXV0YWJsZURhdGEo
KTsgfQorICAgIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PENT
dHJpbmdCdWZmZXIqPih0aGlzKS0+bXV0YWJsZURhdGEoKTsgfQogICAgIHNpemVfdCBsZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQogCisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+
IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4gYXNCeXRlcyhTcGFuIHsgZGF0YSgpLCBsZW5ndGgoKSB9
KTsgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDU3RyaW5nOwogCkBAIC02Niw2ICs2
OSwyMCBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBDU3RyaW5nIG5l
d1VuaW5pdGlhbGl6ZWQoc2l6ZV90IGxlbmd0aCwgY2hhciomIGNoYXJhY3RlckJ1ZmZlcik7CiAg
ICAgQ1N0cmluZyhIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IG1fYnVmZmVyKEhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSkgeyB9CiAKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fYnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIG1f
YnVmZmVyLT5ieXRlcygpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFNwYW48
c3RkOjpieXRlPiBtdXRhYmxlQnl0ZXMoKQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8gbXV0YWJs
ZURhdGEgPSB0aGlzLT5tdXRhYmxlRGF0YSgpKQorICAgICAgICAgICAgcmV0dXJuIGFzV3JpdGFi
bGVCeXRlcyhTcGFuIHsgbXV0YWJsZURhdGEsIG1fYnVmZmVyLT5sZW5ndGgoKSB9KTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICB9CisKICAgICBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3QKICAg
ICB7CiAgICAgICAgIHJldHVybiBtX2J1ZmZlciA/IG1fYnVmZmVyLT5kYXRhKCkgOiBudWxscHRy
OwpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5
NCw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBMQ2hhciogY2hhcmFjdGVyczgoKSBjb25zdDsKICAg
ICBjb25zdCBVQ2hhciogY2hhcmFjdGVyczE2KCkgY29uc3Q7CiAKKyAgICBTcGFuPGNvbnN0IHN0
ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25zdDsKKwogICAgIGJvb2wgaXNBbGxBU0NJSSgpIGNvbnN0Owog
CiAgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CkBAIC00MjQsNiArNDI2LDEzIEBAIGlubGlu
ZSBjb25zdCBVQ2hhciogU3RyaW5nVmlldzo6Y2hhcmFjdGUKICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgVUNoYXIqPihtX2NoYXJhY3RlcnMpOwogfQogCitpbmxpbmUgU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+IFN0cmluZ1ZpZXc6OmJ5dGVzKCkgY29uc3QKK3sKKyAgICBpZiAoaXM4Qml0KCkp
CisgICAgICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSB9
KTsKKyAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgY2hhcmFjdGVyczE2KCksIGxlbmd0aCgpIH0p
OworfQorCiBpbmxpbmUgYm9vbCBTdHJpbmdWaWV3Ojppc0FsbEFTQ0lJKCkgY29uc3QKIHsKICAg
ICBpZiAoaXM4Qml0KCkpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHJldmlzaW9uIDI3
ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPHd0Zi9G
dW5jdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQVND
SUlMaXRlcmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvSW50ZWdlclRvU3RyaW5nQ29udmVyc2lv
bi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KQEAgLTEzNCw2ICsxMzUsNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiAhbV9pbXBsIHx8IG1f
aW1wbC0+aXM4Qml0KCk7IH0KIAogICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5sZW5ndGgoKSAqIChpczhCaXQoKSA/IHNpemVvZihMQ2hh
cikgOiBzaXplb2YoVUNoYXIpKSA6IDA7IH0KKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0
ZXMoKSBjb25zdDsKIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBDU3RyaW5nIGFzY2lpKCkgY29u
c3Q7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIENTdHJpbmcgbGF0aW4xKCkgY29uc3Q7CkBAIC00
ODMsNiArNDg1LDE2IEBAIHRlbXBsYXRlPD4gaW5saW5lIGNvbnN0IFVDaGFyKiBTdHJpbmc6OmMK
ICAgICByZXR1cm4gY2hhcmFjdGVyczE2KCk7CiB9CiAKK2lubGluZSBTcGFuPGNvbnN0IHN0ZDo6
Ynl0ZT4gU3RyaW5nOjpieXRlcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ltcGwpCisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICBpZiAobV9pbXBsLT5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJu
IGFzQnl0ZXMoU3BhbiB7IG1faW1wbC0+Y2hhcmFjdGVyczgoKSwgbV9pbXBsLT5sZW5ndGgoKSB9
KTsKKyAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgbV9pbXBsLT5jaGFyYWN0ZXJzMTYoKSwgbV9p
bXBsLT5sZW5ndGgoKSB9KTsKK30KKwogaW5saW5lIFVDaGFyIFN0cmluZzo6Y2hhcmFjdGVyQXQo
dW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ltcGwgfHwgaW5kZXggPj0gbV9p
bXBsLT5sZW5ndGgoKSkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzYzLDkgKzM2Myw5IEBAIFN0cmluZyBjcmVhdGVUZW1wb3JhcnlE
aXJlY3RvcnkoKQogICAgIH0pOwogfQogCi1ib29sIHVubWFwVmlld09mRmlsZSh2b2lkKiBidWZm
ZXIsIHNpemVfdCkKK2Jvb2wgdW5tYXBWaWV3T2ZGaWxlKFNwYW48c3RkOjpieXRlPiBkYXRhKQog
ewotICAgIHJldHVybiBVbm1hcFZpZXdPZkZpbGUoYnVmZmVyKTsKKyAgICByZXR1cm4gVW5tYXBW
aWV3T2ZGaWxlKGRhdGEuZGF0YSgpKTsKIH0KIAogYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmls
ZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBGaWxlT3Blbk1vZGUgb3Blbk1vZGUs
IE1hcHBlZEZpbGVNb2RlKQpAQCAtMzc0LDcgKzM3NCw3IEBAIGJvb2wgTWFwcGVkRmlsZURhdGE6
Om1hcEZpbGVIYW5kbGUoUGxhdGYKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byBz
aXplID0gZmlsZVNpemUoaGFuZGxlKTsKLSAgICBpZiAoIXNpemUgfHwgKnNpemUgPiBzdGQ6Om51
bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIHx8ICpzaXplID4gc3RkOjpudW1lcmljX2xpbWl0
czxkZWNsdHlwZShtX2ZpbGVTaXplKT46Om1heCgpKSB7CisgICAgaWYgKCFzaXplIHx8ICpzaXpl
ID4gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSB8fCAqc2l6ZSA+IHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZGVjbHR5cGUobV9maWxlRGF0YS5zaXplKCkpPjo6bWF4KCkpIHsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNDAzLDExICs0MDMsMTIgQEAgYm9vbCBNYXBw
ZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0ZgogICAgIGlmICghbWFwcGluZykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9maWxlRGF0YSA9IE1hcFZpZXdPZkZpbGUobWFwcGlu
ZywgZGVzaXJlZEFjY2VzcywgMCwgMCwgKnNpemUpOworICAgIGF1dG8gZGF0YSA9IE1hcFZpZXdP
ZkZpbGUobWFwcGluZywgZGVzaXJlZEFjY2VzcywgMCwgMCwgKnNpemUpOwogICAgIENsb3NlSGFu
ZGxlKG1hcHBpbmcpOwotICAgIGlmICghbV9maWxlRGF0YSkKKyAgICBpZiAoIWRhdGEpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2ZpbGVTaXplID0gKnNpemU7CisKKyAgICBtX2ZpbGVE
YXRhID0gU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpieXRlKj4oZGF0YSksICpzaXplIH07
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgw
IEBACisyMDIxLTA2LTExICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAg
ICBBZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogTW9kdWxlcy9oaWdobGlnaHQv
QXBwSGlnaGxpZ2h0Lmg6CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHQ6OmVuY29kZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHQ6OmRlY29kZSk6CisgICAgICAg
ICogTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6dG9TaGFyZWRCdWZmZXIgY29uc3QpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvclJlc3BvbnNlRGF0YS5oOgor
ICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlQXJyYXlCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
ZGVjb2RlQXJyYXlCdWZmZXIpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oOgorICAgICAgICAoV2ViQ29yZTo6UHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmg6CisgICAgICAgIChX
ZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcjo6ZW5jb2RlIGNvbnN0KToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRXZWJTb2NrZXRBY2Nl
cHQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0J1ZmZlclNvdXJjZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6QnVmZmVyU291cmNlOjpieXRlcyBjb25zdCk6CisgICAgICAgICogYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmRlY29kZSk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvU2VyaWFsaXpl
ZE5GQS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6U2VyaWFsaXpl
ZE5GQTo6cG9pbnRlckF0T2Zmc2V0SW5GaWxlIGNvbnN0KToKKyAgICAgICAgKiBjcnlwdG8vbWFj
L1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
QW5kU3RvcmVNYXN0ZXJLZXkpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Omhhc2hQb2ludGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBhdGNoU3VwcG9ydDo6Y3JlYXRlRGlnZXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OmFkZFN0cmluZ1RvU0hBMSk6IERlbGV0ZWQuCisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZpY2F0ZSk6CisgICAgICAgICogaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yTmV0d29ya0FnZW50OjpnZXRTZXJpYWxpemVkQ2VydGlmaWNhdGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpjcmVhdGVTaGFyZWRCdWZmZXIgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRC
dWZmZXI6OlNoYXJlZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmFw
cGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpkYXRh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmJ5
dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6ZGVjb2RlciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpzaXplIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZGVjb2RlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Nb2RlbC5oOgorICAgICAgICAoV2ViQ29yZTo6TW9kZWw6OmVuY29k
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNb2RlbDo6ZGVjb2RlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6UGl4ZWxC
dWZmZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6ZGVj
b2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNl
Q2FwYWJpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpDYXBhYmlsaXR5VmFsdWVPclJhbmdl
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FwYWJpbGl0eVZhbHVlT3JSYW5n
ZTo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlh
U291cmNlQ2VudGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZFN0cmluZ1RvU0hBMSk6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHA6Cisg
ICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjplbmNvZGVDRkRhdGEpOgorICAgICAgICAoV1RGOjpQ
ZXJzaXN0ZW5jZTo6ZGVjb2RlQ0ZEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRl
U3RhdGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6YmluZEJs
b2IpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaDoKKyAgICAgICAg
KiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzKToKKyAgICAg
ICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTV1NjcmlwdFN0b3JhZ2U6OnN0b3JlKToKKwogMjAyMS0wNi0xMSAgQ2hyaXMg
RHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIExhemlseSBjb21wdXRlIFNlY3Vy
aXR5T3JpZ2luOjptX2lzUG90ZW50aWFsbHlUcnVzdHdvcnRoeSBmb3IgcGVyZm9ybWFuY2UKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvSW5pdERhdGFSZWdpc3Ry
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRp
YS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIHN0YXRpYyBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzYW5p
dGl6ZUtleWkKICAgICBhdXRvIG9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAg
YXV0byBraWRzQXJyYXkgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgZm9yIChhdXRvJiBi
dWZmZXIgOiBrZXlJREJ1ZmZlci52YWx1ZSgpKQotICAgICAgICBraWRzQXJyYXktPnB1c2hTdHJp
bmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgp
KSk7CisgICAgICAgIGtpZHNBcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVUb1N0cmlu
ZyhidWZmZXItPmJ5dGVzKCkpKTsKICAgICBvYmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92
ZShraWRzQXJyYXkpKTsKIAogICAgIENTdHJpbmcganNvbkRhdGEgPSBvYmplY3QtPnRvSlNPTlN0
cmluZygpLnV0ZjgoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0Fw
cEhpZ2hsaWdodC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxp
Z2h0L0FwcEhpZ2hsaWdodC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyAr
NTIsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBBcHBIaWdobGlnaHQ6OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
c2l6ZV90PihoaWdobGlnaHQtPnNpemUoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEoaGlnaGxpZ2h0LT5kYXRhKCksIGhpZ2hsaWdodC0+c2l6ZSgpLCAxKTsKKyAgICBlbmNv
ZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YSgqaGlnaGxpZ2h0LCAxKTsKIAogICAgIGVuY29kZXIg
PDwgdGV4dDsKIApAQCAtNzUsNyArNzUsNyBAQCBzdGQ6Om9wdGlvbmFsPEFwcEhpZ2hsaWdodD4g
QXBwSGlnaGxpZ2h0CiAKICAgICBWZWN0b3I8dWludDhfdD4gaGlnaGxpZ2h0OwogICAgIGhpZ2hs
aWdodC5ncm93KCpsZW5ndGgpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERh
dGEoaGlnaGxpZ2h0LmRhdGEoKSwgaGlnaGxpZ2h0LnNpemUoKSwgMSkpCisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShoaWdobGlnaHQsIDEpKQogICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwogCiAgICAgc3RkOjpvcHRpb25hbDxzdGQ6Om9wdGlvbmFsPFN0cmluZz4+
IHRleHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGln
aHRSYW5nZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGln
aGxpZ2h0L0FwcEhpZ2hsaWdodFJhbmdlRGF0YS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFJhbmdlRGF0YS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgUmVmPFNoYXJlZEJ1ZmZlcj4gQXBwSGln
aGxpZ2h0UmFuZ2VEYXRhOgogewogICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2Rl
cjsKICAgICBlbmNvZGVyIDw8ICp0aGlzOwotICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0
ZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgcmV0dXJuIFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCkpOwogfQogCiB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPiB2b2lkIEFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6Tm9kZVBhdGhDb21wb25lbnQ6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAJKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNo
YW5uZWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIE5ldHdvcmtTZW5kUXVl
dWUgUlRDRGF0YUNoYW5uZWw6OmNyZWF0ZU0KICAgICAgICAgaWYgKCFjaGFubmVsLm1faGFuZGxl
ci0+c2VuZFN0cmluZ0RhdGEodXRmOCkpCiAgICAgICAgICAgICBjaGFubmVsLnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3Nh
Z2VMZXZlbDo6RXJyb3IsICJFcnJvciBzZW5kaW5nIHN0cmluZyB0aHJvdWdoIFJUQ0RhdGFDaGFu
bmVsLiJfcyk7CiAgICAgfSwgWyZjaGFubmVsXShhdXRvJiBzcGFuKSB7Ci0gICAgICAgIGlmICgh
Y2hhbm5lbC5tX2hhbmRsZXItPnNlbmRSYXdEYXRhKHNwYW4uZGF0YSgpLCBzcGFuLnNpemUoKSkp
CisgICAgICAgIGlmICghY2hhbm5lbC5tX2hhbmRsZXItPnNlbmRSYXdEYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNwYW4uZGF0YSgpKSwgc3Bhbi5zaXplKCkpKQogICAgICAg
ICAgICAgY2hhbm5lbC5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFkZENvbnNvbGVNZXNzYWdl
KE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAiRXJyb3Igc2VuZGluZyBi
aW5hcnkgZGF0YSB0aHJvdWdoIFJUQ0RhdGFDaGFubmVsLiJfcyk7CiAgICAgfSwgWyZjaGFubmVs
XShFeGNlcHRpb25Db2RlIGVycm9yQ29kZSkgewogICAgICAgICBpZiAoYXV0byogY29udGV4dCA9
IGNoYW5uZWwuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxh
Y2VtZW50Lm1tCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Bs
dWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTUy
LDYgKzUyLDcgQEAKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0NhdGNoU2NvcGUuaD4KICNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CiAjaW1wb3J0IDxvYmpjL3J1bnRp
bWUuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9TcGFuQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi90ZXh0
L0Jhc2U2NC5oPgogCiAjaW1wb3J0IDxwYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaD4KQEAgLTI0
Niw5ICsyNDcsOSBAQCBzdGF0aWMgSlNWYWx1ZSAqanNWYWx1ZVdpdGhEYXRhSW5Db250ZXh0CiAg
ICAgLy8gRklYTUU6IEFkZCBtYWtlQ0ZTdHJpbmcvbWFrZU5TU3RyaW5nIHRvIGF2b2lkIHVubmVj
ZXNzYXJ5IFN0cmluZyBhbGxvY2F0aW9uLgogICAgIFN0cmluZyBkYXRhNjQ7CiAgICAgaWYgKCFt
aW1lVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6Iiwg
bWltZVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoW2RhdGEgYnl0ZXNdLCBbZGF0YSBs
ZW5ndGhdKSk7CisgICAgICAgIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgbWltZVR5cGUs
ICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoYXNCeXRlcyhkYXRhKSkpOwogICAgIGVsc2UKLSAg
ICAgICAgZGF0YTY0ID0gbWFrZVN0cmluZygiZGF0YTp0ZXh0L3BsYWluO2Jhc2U2NCwiLCBiYXNl
NjRFbmNvZGVkKFtkYXRhIGJ5dGVzXSwgW2RhdGEgbGVuZ3RoXSkpOworICAgICAgICBkYXRhNjQg
PSBtYWtlU3RyaW5nKCJkYXRhOnRleHQvcGxhaW47YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoYXNC
eXRlcyhkYXRhKSkpOwogCiAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aE9iamVjdDooaWQp
ZGF0YTY0LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkgaW5Db250ZXh0OmNvbnRleHRdOwogfQpAQCAt
MzQwLDcgKzM0MSw3IEBAIHN0YXRpYyBKU1ZhbHVlICpqc1ZhbHVlV2l0aEFWTWV0YWRhdGFJdGUK
ICAgICAgICAgaWQgdmFsdWUgPSBpdGVtLnZhbHVlOwogICAgICAgICBOU1N0cmluZyAqbWltZVR5
cGUgPSBbW2l0ZW0gZXh0cmFBdHRyaWJ1dGVzXSBvYmplY3RGb3JLZXk6QCJNSU1FdHlwZSJdOwog
ICAgICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TRGF0YSBjbGFzc11dICYmIG1pbWVU
eXBlKSB7Ci0gICAgICAgICAgICBhdXRvIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgU3Ry
aW5nKG1pbWVUeXBlKSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChbdmFsdWUgYnl0ZXNdLCBb
dmFsdWUgbGVuZ3RoXSkpOworICAgICAgICAgICAgYXV0byBkYXRhNjQgPSBtYWtlU3RyaW5nKCJk
YXRhOiIsIFN0cmluZyhtaW1lVHlwZSksICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoYXNCeXRl
cygoTlNEYXRhICopdmFsdWUpKSk7CiAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6
KF9fYnJpZGdlIE5TU3RyaW5nICopZGF0YTY0LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkgZm9yS2V5
OkAidmFsdWUiXTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRP
YmplY3Q6dmFsdWUgZm9yS2V5OkAidmFsdWUiXTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRpY2F0b3JDb29yZGluYXRvci5j
cHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4v
QXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQs
NyBAQCBzdGF0aWMgUmVmPEFycmF5QnVmZmVyPiBwcm9kdWNlQ2xpZW50RGF0CiAgICAgICAgIG9i
amVjdC0+c2V0U3RyaW5nKCJ0eXBlIl9zLCAid2ViYXV0aG4uZ2V0Il9zKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQotICAgIG9iamVjdC0+c2V0U3RyaW5nKCJjaGFsbGVuZ2UiX3MsIGJhc2U2NFVS
TEVuY29kZVRvU3RyaW5nKGNoYWxsZW5nZS5kYXRhKCksIGNoYWxsZW5nZS5sZW5ndGgoKSkpOwor
ICAgIG9iamVjdC0+c2V0U3RyaW5nKCJjaGFsbGVuZ2UiX3MsIGJhc2U2NFVSTEVuY29kZVRvU3Ry
aW5nKGNoYWxsZW5nZS5ieXRlcygpKSk7CiAgICAgb2JqZWN0LT5zZXRTdHJpbmcoIm9yaWdpbiJf
cywgb3JpZ2luLnRvUmF3U3RyaW5nKCkpOwogCiAgICAgYXV0byB1dGY4SlNPTlN0cmluZyA9IG9i
amVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdXRobi9BdXRoZW50aWNhdG9yUmVzcG9uc2VEYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yUmVzcG9uc2VEYXRhLmgJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0
aGVudGljYXRvclJlc3BvbnNlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBA
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiBzdGF0aWMgdm9pZCBlbmNvZGVBcnJheUJ1ZmZlcihF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBBcnJheUJ1ZmZlciYgYnVmZmVyKQogewogICAgIGVuY29k
ZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ1ZmZlci5ieXRlTGVuZ3RoKCkpOwotICAgIGVu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihi
dWZmZXIuZGF0YSgpKSwgYnVmZmVyLmJ5dGVMZW5ndGgoKSwgMSk7CisgICAgZW5jb2Rlci5lbmNv
ZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLmJ5dGVzKCksIDEpOwogfQogCiB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgpAQCAtNzUsNyArNzUsNyBAQCBSZWZQdHI8QXJyYXlCdWZmZXI+IGRlY29kZUFy
cmF5QnVmZmVyKERlCiAgICAgYXV0byBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKGxl
bmd0aC52YWx1ZSgpLCBzaXplb2YodWludDhfdCkpOwogICAgIGlmICghYnVmZmVyKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihidWZmZXItPmRhdGEoKSksIGxlbmd0aC52YWx1ZSgpLCAx
KSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ1ZmZlci0+d3JpdGFi
bGVCeXRlcygpLCAxKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIGJ1ZmZl
cjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3Jl
ZGVudGlhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRo
bi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTQsNyArNTQsNyBAQCBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRw
dXRzIFB1CiB9CiAKIFB1YmxpY0tleUNyZWRlbnRpYWw6OlB1YmxpY0tleUNyZWRlbnRpYWwoUmVm
PEF1dGhlbnRpY2F0b3JSZXNwb25zZT4mJiByZXNwb25zZSkKLSAgICA6IEJhc2ljQ3JlZGVudGlh
bChiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhyZXNwb25zZS0+cmF3SWQoKS0+ZGF0YSgpLCByZXNw
b25zZS0+cmF3SWQoKS0+Ynl0ZUxlbmd0aCgpKSwgVHlwZTo6UHVibGljS2V5LCBEaXNjb3Zlcnk6
OlJlbW90ZSkKKyAgICA6IEJhc2ljQ3JlZGVudGlhbChiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhy
ZXNwb25zZS0+cmF3SWQoKS0+Ynl0ZXMoKSksIFR5cGU6OlB1YmxpY0tleSwgRGlzY292ZXJ5OjpS
ZW1vdGUpCiAgICAgLCBtX3Jlc3BvbnNlKFdURk1vdmUocmVzcG9uc2UpKQogewogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRp
b25PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRo
bi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmgJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENy
ZWF0aW9uT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsOCArMTQxLDggQEAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9u
czo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBycC5p
ZCA8PCBycC5uYW1lIDw8IHJwLmljb247Ci0gICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50
NjRfdD4odXNlci5pZC5sZW5ndGgoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERh
dGEodXNlci5pZC5kYXRhKCksIHVzZXIuaWQubGVuZ3RoKCksIDEpOworICAgIGVuY29kZXIgPDwg
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHVzZXIuaWQuYnl0ZXMoKS5zaXplKCkpOworICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHVzZXIuaWQuYnl0ZXMoKSwgMSk7CiAgICAgZW5jb2Rl
ciA8PCB1c2VyLmRpc3BsYXlOYW1lIDw8IHVzZXIubmFtZSA8PCB1c2VyLmljb24gPDwgcHViS2V5
Q3JlZFBhcmFtcyA8PCB0aW1lb3V0IDw8IGV4Y2x1ZGVDcmVkZW50aWFscyA8PCBhdXRoZW50aWNh
dG9yU2VsZWN0aW9uIDw8IGF0dGVzdGF0aW9uIDw8IGV4dGVuc2lvbnM7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1Ymxp
Y0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsOCBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgog
dm9pZCBQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcjo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCB0eXBlOwotICAgIGVuY29kZXIgPDwgc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KGlkLmxlbmd0aCgpKTsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShpZC5kYXRhKCksIGlkLmxlbmd0aCgpLCAxKTsKKyAgICBlbmNvZGVyIDw8IHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihpZC5ieXRlcygpLnNpemUoKSk7CisgICAgZW5jb2Rlci5lbmNvZGVG
aXhlZExlbmd0aERhdGEoaWQuYnl0ZXMoKSwgMSk7CiAgICAgZW5jb2RlciA8PCB0cmFuc3BvcnRz
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0
SGFuZHNoYWtlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNv
Y2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk3LDE5ICs5NywyMCBAQCBzdGF0aWMgU3RyaW5nIGdlbmVyYXRlU2VjV2Vi
U29ja2V0S2V5KCkKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG5vbmNlU2l6ZSA9IDE2OwogICAg
IHVuc2lnbmVkIGNoYXIga2V5W25vbmNlU2l6ZV07CiAgICAgY3J5cHRvZ3JhcGhpY2FsbHlSYW5k
b21WYWx1ZXMoa2V5LCBub25jZVNpemUpOwotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmlu
ZyhrZXksIG5vbmNlU2l6ZSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGtleSk7
CiB9CiAKIFN0cmluZyBXZWJTb2NrZXRIYW5kc2hha2U6OmdldEV4cGVjdGVkV2ViU29ja2V0QWNj
ZXB0KGNvbnN0IFN0cmluZyYgc2VjV2ViU29ja2V0S2V5KQogewogICAgIGNvbnN0ZXhwciB1aW50
OF90IHdlYlNvY2tldEtleUdVSURbXSA9ICIyNThFQUZBNS1FOTE0LTQ3REEtOTVDQS1DNUFCMERD
ODVCMTEiOworCiAgICAgU0hBMSBzaGExOwotICAgIENTdHJpbmcga2V5RGF0YSA9IHNlY1dlYlNv
Y2tldEtleS5hc2NpaSgpOwotICAgIHNoYTEuYWRkQnl0ZXMoa2V5RGF0YS5kYXRhQXNVSW50OFB0
cigpLCBrZXlEYXRhLmxlbmd0aCgpKTsKLSAgICBzaGExLmFkZEJ5dGVzKHdlYlNvY2tldEtleUdV
SUQsIHN0ZDo6c2l6ZSh3ZWJTb2NrZXRLZXlHVUlEKSAtIDEpOworICAgIHNoYTEuYWRkQnl0ZXMo
c2VjV2ViU29ja2V0S2V5LmFzY2lpKCkuYnl0ZXMoKSk7CisgICAgc2hhMS5hZGRCeXRlcyh3ZWJT
b2NrZXRLZXlHVUlEKTsKKwogICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwogICAgIHNoYTEuY29tcHV0
ZUhhc2goaGFzaCk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGhhc2guZGF0YSgp
LCBTSEExOjpoYXNoU2l6ZSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGhhc2gp
OwogfQogCiBXZWJTb2NrZXRIYW5kc2hha2U6OldlYlNvY2tldEhhbmRzaGFrZShjb25zdCBVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNv
bnN0IFN0cmluZyYgY2xpZW50T3JpZ2luLCBib29sIGFsbG93Q29va2llcykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvV2ViQ29y
ZS54Y3NjaGVtZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai94Y3NoYXJlZGRhdGEveGNzY2hlbWVzL1dlYkNvcmUueGNzY2hlbWUJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3Nj
aGVtZXMvV2ViQ29yZS54Y3NjaGVtZQkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksOSBAQAog
ICAgICAgaWdub3Jlc1BlcnNpc3RlbnRTdGF0ZU9uTGF1bmNoID0gIk5PIgogICAgICAgZGVidWdE
b2N1bWVudFZlcnNpb25pbmcgPSAiWUVTIgogICAgICAgZGVidWdTZXJ2aWNlRXh0ZW5zaW9uID0g
ImludGVybmFsIgotICAgICAgYWxsb3dMb2NhdGlvblNpbXVsYXRpb24gPSAiWUVTIj4KKyAgICAg
IGVuYWJsZUdQVUZyYW1lQ2FwdHVyZU1vZGUgPSAiMyIKKyAgICAgIGFsbG93TG9jYXRpb25TaW11
bGF0aW9uID0gIllFUyIKKyAgICAgIEdQVVByb2ZpbGVyRW5hYmxlZCA9ICJObyI+CiAgICA8L0xh
dW5jaEFjdGlvbj4KICAgIDxQcm9maWxlQWN0aW9uCiAgICAgICBidWlsZENvbmZpZ3VyYXRpb24g
PSAiUmVsZWFzZSIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0J1ZmZlclNvdXJj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0J1ZmZlclNvdXJj
ZS5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9CdWZm
ZXJTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsMTMgQEAgcHVibGljOgogICAg
ICAgICB9LCBtX3ZhcmlhbnQpOwogICAgIH0KIAorICAgIFNwYW48Y29uc3QgdWludDhfdD4gYnl0
ZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQoW10oYXV0byYgYnVm
ZmVyKSAtPiBTcGFuPGNvbnN0IHVpbnQ4X3Q+IHsKKyAgICAgICAgICAgIHJldHVybiBidWZmZXIg
PyBTcGFuPGNvbnN0IHVpbnQ4X3Q+IHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZl
ci0+ZGF0YSgpKSwgYnVmZmVyLT5ieXRlTGVuZ3RoKCkgfSA6IFNwYW48Y29uc3QgdWludDhfdD4g
eyB9OworICAgICAgICB9LCBtX3ZhcmlhbnQpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBWYXJp
YW50VHlwZSBtX3ZhcmlhbnQ7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjQsMTUgKzE2NCwxNSBAQCB2b2lkIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
ZW5jb2RlKEVuY29kCiAKICAgICBpZiAoaGFzQXJyYXkpIHsKICAgICAgICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDx1aW50NjRfdD4obV9hcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXktPnNpemUoKSk7
Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byAmYXJyYXlCdWZmZXJDb250ZW50cyA6ICptX2FycmF5
QnVmZmVyQ29udGVudHNBcnJheSkgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGFycmF5QnVm
ZmVyQ29udGVudHMgOiAqbV9hcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkpIHsKICAgICAgICAgICAg
IGVuY29kZXIgPDwgYXJyYXlCdWZmZXJDb250ZW50cy5zaXplSW5CeXRlcygpOwotICAgICAgICAg
ICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGFycmF5QnVmZmVyQ29udGVudHMuZGF0YSgpKSwgYXJyYXlCdWZmZXJDb250ZW50cy5zaXpl
SW5CeXRlcygpLCAxKTsKKyAgICAgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KGFycmF5QnVmZmVyQ29udGVudHMuYnl0ZXMoKSwgMSk7CiAgICAgICAgIH0KICAgICB9CiAKICNp
ZiBFTkFCTEUoV0VCX1JUQykKICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Piht
X2RldGFjaGVkUlRDRGF0YUNoYW5uZWxzLnNpemUoKSk7Ci0gICAgZm9yIChjb25zdCBhdXRvICZj
aGFubmVsIDogbV9kZXRhY2hlZFJUQ0RhdGFDaGFubmVscykKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IGNoYW5uZWwgOiBtX2RldGFjaGVkUlRDRGF0YUNoYW5uZWxzKQogICAgICAgICBlbmNvZGVyIDw8
ICpjaGFubmVsOwogI2VuZGlmCiB9CkBAIC0yMDYsNyArMjA2LDcgQEAgUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZAogICAgICAgICAgICAgYXV0byBidWZmZXIgPSBHaWdh
Y2FnZTo6dHJ5TWFsbG9jKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJ1ZmZlclNpemUpOwogICAgICAg
ICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihidWZmZXIpLCBidWZmZXJTaXplLCAxKSkgeworICAgICAgICAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgc3RhdGljX2Nhc3Q8c3RkOjpieXRlKj4o
YnVmZmVyKSwgYnVmZmVyU2l6ZSB9LCAxKSkgewogICAgICAgICAgICAgICAgIEdpZ2FjYWdlOjpm
cmVlKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9TZXJpYWxpemVkTkZBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9TZXJpYWxpemVkTkZBLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvU2VyaWFsaXplZE5GQS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBTZXJpYWxpemVkTkZBOjpTZXJpYWxpemVkTkZB
KEZpbGVTeXN0ZW06CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogY29uc3QgVCogU2VyaWFsaXplZE5G
QTo6cG9pbnRlckF0T2Zmc2V0SW5GaWxlKHNpemVfdCBvZmZzZXQpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihtX2ZpbGUuZGF0YSgpKSArIG9mZnNldCk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgVCo+KG1fZmlsZS5kYXRhKCkuZGF0YSgpICsgb2Zmc2V0KTsKIH0KIAogYXV0byBTZXJp
YWxpemVkTkZBOjpub2RlcygpIGNvbnN0IC0+IGNvbnN0IFJhbmdlPEltbXV0YWJsZU5GQU5vZGU+
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNwcAko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlF
Q01hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NywxMCArMTk3LDEwIEBAIGJvb2wgQ3J5cHRv
S2V5RUM6OnBsYXRmb3JtQWRkRmllbGRFbGVtZW4KIAogICAgIGlmIChVTkxJS0VMWSgoc2l6ZSAh
PSBwdWJsaWNLZXlTaXplKSAmJiAoc2l6ZSAhPSBwcml2YXRlS2V5U2l6ZSkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgandrLnggPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhyZXN1bHQu
ZGF0YSgpICsgMSwga2V5U2l6ZUluQnl0ZXMpOwotICAgIGp3ay55ID0gYmFzZTY0VVJMRW5jb2Rl
VG9TdHJpbmcocmVzdWx0LmRhdGEoKSArIGtleVNpemVJbkJ5dGVzICsgMSwga2V5U2l6ZUluQnl0
ZXMpOworICAgIGp3ay54ID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoU3BhbiB7IHJlc3VsdCB9
LnN1YnNwYW4oMSwga2V5U2l6ZUluQnl0ZXMpKTsKKyAgICBqd2sueSA9IGJhc2U2NFVSTEVuY29k
ZVRvU3RyaW5nKFNwYW4geyByZXN1bHQgfS5zdWJzcGFuKDEgKyBrZXlTaXplSW5CeXRlcywga2V5
U2l6ZUluQnl0ZXMpKTsKICAgICBpZiAoc2l6ZSA+IHB1YmxpY0tleVNpemUpCi0gICAgICAgIGp3
ay5kID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcocmVzdWx0LmRhdGEoKSArIHB1YmxpY0tleVNp
emUsIGtleVNpemVJbkJ5dGVzKTsKKyAgICAgICAgandrLmQgPSBiYXNlNjRVUkxFbmNvZGVUb1N0
cmluZyhTcGFuIHsgcmVzdWx0IH0uc3Vic3BhbihwdWJsaWNLZXlTaXplLCBrZXlTaXplSW5CeXRl
cykpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
bWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9tYWMvU2VyaWFsaXplZENyeXB0b0tleVdyYXBNYWMubW0JKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvU2VyaWFsaXplZENyeXB0b0tl
eVdyYXBNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbXBvcnQgPHd0
Zi9DcnlwdG9ncmFwaGljVXRpbGl0aWVzLmg+CiAjaW1wb3J0IDx3dGYvUHJvY2Vzc1ByaXZpbGVn
ZS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL2NmL1NwYW5DRi5o
PgogI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvc3BpL2Nv
Y29hL1NlY3VyaXR5U1BJLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4KQEAgLTE2Nyw3
ICsxNjgsNyBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGZpCiAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+
IGtleURhdGEgPSBhZG9wdENGKGtleURhdGFSZWYpOwotICAgIHJldHVybiBiYXNlNjREZWNvZGUo
Q0ZEYXRhR2V0Qnl0ZVB0cihrZXlEYXRhLmdldCgpKSwgQ0ZEYXRhR2V0TGVuZ3RoKGtleURhdGEu
Z2V0KCkpKTsKKyAgICByZXR1cm4gYmFzZTY0RGVjb2RlKGFzQnl0ZXMoa2V5RGF0YS5nZXQoKSkp
OwogfQogCiBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZGVmYXVsdFdlYkNyeXB0b01h
c3RlcktleSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MDYsNyArMTYwNiw4
IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IE5vZGU6OnNldFRleHRDb250ZW50KGMKIHN0YXRpYyBTSEEx
OjpEaWdlc3QgaGFzaFBvaW50ZXIoY29uc3Qgdm9pZCogcG9pbnRlcikKIHsKICAgICBTSEExIHNo
YTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigm
cG9pbnRlciksIHNpemVvZihwb2ludGVyKSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgJnBv
aW50ZXIsIDEgfSk7CisKICAgICBTSEExOjpEaWdlc3QgZGlnZXN0OwogICAgIHNoYTEuY29tcHV0
ZUhhc2goZGlnZXN0KTsKICAgICByZXR1cm4gZGlnZXN0OwpJbmRleDogU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMzgsNyArMzM4LDcgQEAgdm9pZCBGaWxlUmVhZGVyTG9hZGVyOjpjb252ZXJ0VG9EYXRhVVJM
KAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9zdHJpbmdSZXN1bHQgPSBtYWtlU3Ry
aW5nKCJkYXRhOiIsIG1fZGF0YVR5cGUuaXNFbXB0eSgpID8gImFwcGxpY2F0aW9uL29jdGV0LXN0
cmVhbSIgOiBtX2RhdGFUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKG1fcmF3RGF0YS0+
ZGF0YSgpLCBtX2J5dGVzTG9hZGVkKSk7CisgICAgbV9zdHJpbmdSZXN1bHQgPSBtYWtlU3RyaW5n
KCJkYXRhOiIsIG1fZGF0YVR5cGUuaXNFbXB0eSgpID8gImFwcGxpY2F0aW9uL29jdGV0LXN0cmVh
bSIgOiBtX2RhdGFUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKG1fcmF3RGF0YS0+Ynl0
ZXMoKSkpOwogfQogCiBib29sIEZpbGVSZWFkZXJMb2FkZXI6OmlzQ29tcGxldGVkKCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTmV0d29ya1NlbmRRdWV1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTEgKzUzLDEwIEBAIHZvaWQgTmV0d29ya1NlbmRR
dWV1ZTo6ZW5xdWV1ZShDU3RyaW5nJiYKIHZvaWQgTmV0d29ya1NlbmRRdWV1ZTo6ZW5xdWV1ZShj
b25zdCBKU0M6OkFycmF5QnVmZmVyJiBiaW5hcnlEYXRhLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
bnNpZ25lZCBieXRlTGVuZ3RoKQogewogICAgIGlmIChtX3F1ZXVlLmlzRW1wdHkoKSkgewotICAg
ICAgICBhdXRvKiBkYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJpbmFyeURhdGEu
ZGF0YSgpKTsKLSAgICAgICAgbV93cml0ZVJhd0RhdGEoU3BhbiB7IGRhdGEgKyBieXRlT2Zmc2V0
LCBieXRlTGVuZ3RoIH0pOworICAgICAgICBtX3dyaXRlUmF3RGF0YShiaW5hcnlEYXRhLmJ5dGVz
KCkuc3Vic3BhbihieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgbV9xdWV1ZS5hcHBlbmQoU2hhcmVkQnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8
Y29uc3QgdWludDhfdCo+KGJpbmFyeURhdGEuZGF0YSgpKSArIGJ5dGVPZmZzZXQsIGJ5dGVMZW5n
dGgpKTsKKyAgICBtX3F1ZXVlLmFwcGVuZChTaGFyZWRCdWZmZXI6OmNyZWF0ZShiaW5hcnlEYXRh
LmJ5dGVzKCkuc3Vic3BhbihieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSkpOwogfQogCiB2b2lkIE5l
dHdvcmtTZW5kUXVldWU6OmVucXVldWUoV2ViQ29yZTo6QmxvYiYgYmxvYikKQEAgLTkzLDcgKzky
LDkgQEAgdm9pZCBOZXR3b3JrU2VuZFF1ZXVlOjpwcm9jZXNzTWVzc2FnZXMoKQogICAgICAgICBz
d2l0Y2hPbihtX3F1ZXVlLmZpcnN0KCksIFt0aGlzXShjb25zdCBDU3RyaW5nJiB1dGY4KSB7CiAg
ICAgICAgICAgICBtX3dyaXRlU3RyaW5nKHV0ZjgpOwogICAgICAgICB9LCBbdGhpc10oUmVmPFNo
YXJlZEJ1ZmZlcj4mIGRhdGEpIHsKLSAgICAgICAgICAgIGRhdGEtPmZvckVhY2hTZWdtZW50KG1f
d3JpdGVSYXdEYXRhKTsKKyAgICAgICAgICAgIGRhdGEtPmZvckVhY2hTZWdtZW50KFt0aGlzXShh
dXRvJiBzcGFuKSB7CisgICAgICAgICAgICAgICAgbV93cml0ZVJhd0RhdGEoYXNCeXRlcyhzcGFu
KSk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfSwgW3RoaXMsICZzaG91bGRTdG9wUHJvY2Vz
c2luZ10oVW5pcXVlUmVmPEJsb2JMb2FkZXI+JiBsb2FkZXIpIHsKICAgICAgICAgICAgIGF1dG8g
ZXJyb3JDb2RlID0gbG9hZGVyLT5lcnJvckNvZGUoKTsKICAgICAgICAgICAgIGlmIChsb2FkZXIt
PmlzTG9hZGluZygpIHx8IChlcnJvckNvZGUgJiYgZXJyb3JDb2RlLnZhbHVlKCkgPT0gQWJvcnRF
cnJvcikpIHsKQEAgLTEwMiw3ICsxMDMsNyBAQCB2b2lkIE5ldHdvcmtTZW5kUXVldWU6OnByb2Nl
c3NNZXNzYWdlcygpCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChjb25zdCBhdXRv
JiByZXN1bHQgPSBsb2FkZXItPmFycmF5QnVmZmVyUmVzdWx0KCkpIHsKLSAgICAgICAgICAgICAg
ICBtX3dyaXRlUmF3RGF0YShTcGFuIHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KHJlc3Vs
dC0+ZGF0YSgpKSwgcmVzdWx0LT5ieXRlTGVuZ3RoKCkgfSk7CisgICAgICAgICAgICAgICAgbV93
cml0ZVJhd0RhdGEocmVzdWx0LT5ieXRlcygpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBBU1NFUlQoZXJyb3JDb2RlKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvTmV0d29ya1NlbmRRdWV1ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvTmV0d29ya1NlbmRRdWV1ZS5oCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL05ldHdvcmtTZW5kUXVldWUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDgsNyArNDgsNyBAQCBjbGFzcyBTaGFyZWRCdWZmZXI7CiBjbGFzcyBXRUJDT1JFX0VY
UE9SVCBOZXR3b3JrU2VuZFF1ZXVlIDogcHVibGljIENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVy
IHsKIHB1YmxpYzoKICAgICB1c2luZyBXcml0ZVN0cmluZyA9IEZ1bmN0aW9uPHZvaWQoY29uc3Qg
Q1N0cmluZyYgdXRmOCk+OwotICAgIHVzaW5nIFdyaXRlUmF3RGF0YSA9IEZ1bmN0aW9uPHZvaWQo
Y29uc3QgU3Bhbjxjb25zdCB1aW50OF90PiYpPjsKKyAgICB1c2luZyBXcml0ZVJhd0RhdGEgPSBG
dW5jdGlvbjx2b2lkKGNvbnN0IFNwYW48Y29uc3Qgc3RkOjpieXRlPiYpPjsKICAgICBlbnVtIGNs
YXNzIENvbnRpbnVlIHsgTm8sIFllcyB9OwogICAgIHVzaW5nIFByb2Nlc3NFcnJvciA9IEZ1bmN0
aW9uPENvbnRpbnVlKEV4Y2VwdGlvbkNvZGUpPjsKICAgICBOZXR3b3JrU2VuZFF1ZXVlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmLCBXcml0ZVN0cmluZyYmLCBXcml0ZVJhd0RhdGEmJiwgUHJvY2Vz
c0Vycm9yJiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9y
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3Vw
cG9ydC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9E
T01QYXRjaFN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQsMjggKzM5NCwyMyBAQCBF
eGNlcHRpb25Pcjx2b2lkPiBET01QYXRjaFN1cHBvcnQ6OmlubmVyCiAgICAgcmV0dXJuIHsgfTsK
IH0KIAotc3RhdGljIHZvaWQgYWRkU3RyaW5nVG9TSEExKFNIQTEmIHNoYTEsIGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKQotewotICAgIENTdHJpbmcgY1N0cmluZyA9IHN0cmluZy51dGY4KCk7Ci0gICAg
c2hhMS5hZGRCeXRlcyhjU3RyaW5nLmRhdGFBc1VJbnQ4UHRyKCksIGNTdHJpbmcubGVuZ3RoKCkp
OwotfQotCiBzdGQ6OnVuaXF1ZV9wdHI8RE9NUGF0Y2hTdXBwb3J0OjpEaWdlc3Q+IERPTVBhdGNo
U3VwcG9ydDo6Y3JlYXRlRGlnZXN0KE5vZGUmIG5vZGUsIFVudXNlZE5vZGVzTWFwKiB1bnVzZWRO
b2Rlc01hcCkKIHsKICAgICBhdXRvIGRpZ2VzdCA9IG1ha2VVbmlxdWU8RGlnZXN0PigpOwogICAg
IGRpZ2VzdC0+bm9kZSA9ICZub2RlOworCiAgICAgU0hBMSBzaGExOwogCiAgICAgYXV0byBub2Rl
VHlwZSA9IG5vZGUubm9kZVR5cGUoKTsKLSAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KCZub2RlVHlwZSksIHNpemVvZihub2RlVHlwZSkpOwotICAgIGFk
ZFN0cmluZ1RvU0hBMShzaGExLCBub2RlLm5vZGVOYW1lKCkpOwotICAgIGFkZFN0cmluZ1RvU0hB
MShzaGExLCBub2RlLm5vZGVWYWx1ZSgpKTsKKyAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmbm9k
ZVR5cGUsIDEgfSk7CisgICAgc2hhMS5hZGRCeXRlcyhub2RlLm5vZGVOYW1lKCkudXRmOCgpLmJ5
dGVzKCkpOworICAgIHNoYTEuYWRkQnl0ZXMobm9kZS5ub2RlVmFsdWUoKS51dGY4KCkuYnl0ZXMo
KSk7CiAKICAgICBpZiAobm9kZS5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSkgewog
ICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUuZmlyc3RDaGlsZCgpOwogICAgICAgICB3aGlsZSAo
Y2hpbGQpIHsKICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxEaWdlc3Q+IGNoaWxkSW5mbyA9
IGNyZWF0ZURpZ2VzdCgqY2hpbGQsIHVudXNlZE5vZGVzTWFwKTsKLSAgICAgICAgICAgIGFkZFN0
cmluZ1RvU0hBMShzaGExLCBjaGlsZEluZm8tPnNoYTEpOworICAgICAgICAgICAgc2hhMS5hZGRC
eXRlcyhjaGlsZEluZm8tPnNoYTEudXRmOCgpLmJ5dGVzKCkpOwogICAgICAgICAgICAgY2hpbGQg
PSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAgIGRpZ2VzdC0+Y2hpbGRyZW4uYXBw
ZW5kKFdURk1vdmUoY2hpbGRJbmZvKSk7CiAgICAgICAgIH0KQEAgLTQyNCwxOSArNDE5LDE5IEBA
IHN0ZDo6dW5pcXVlX3B0cjxET01QYXRjaFN1cHBvcnQ6OkRpZ2VzdD4KICAgICAgICAgaWYgKGVs
ZW1lbnQuaGFzQXR0cmlidXRlc1dpdGhvdXRVcGRhdGUoKSkgewogICAgICAgICAgICAgU0hBMSBh
dHRyc1NIQTE7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGF0dHJpYnV0ZSA6IGVsZW1lbnQuYXR0
cmlidXRlc0l0ZXJhdG9yKCkpIHsKLSAgICAgICAgICAgICAgICBhZGRTdHJpbmdUb1NIQTEoYXR0
cnNTSEExLCBhdHRyaWJ1dGUubmFtZSgpLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGFk
ZFN0cmluZ1RvU0hBMShhdHRyc1NIQTEsIGF0dHJpYnV0ZS52YWx1ZSgpKTsKKyAgICAgICAgICAg
ICAgICBhdHRyc1NIQTEuYWRkQnl0ZXMoYXR0cmlidXRlLm5hbWUoKS50b1N0cmluZygpLnV0Zjgo
KS5ieXRlcygpKTsKKyAgICAgICAgICAgICAgICBhdHRyc1NIQTEuYWRkQnl0ZXMoYXR0cmlidXRl
LnZhbHVlKCkuc3RyaW5nKCkudXRmOCgpLmJ5dGVzKCkpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgU0hBMTo6RGlnZXN0IGF0dHJzSGFzaDsKICAgICAgICAgICAgIGF0dHJzU0hBMS5jb21w
dXRlSGFzaChhdHRyc0hhc2gpOwotICAgICAgICAgICAgZGlnZXN0LT5hdHRyc1NIQTEgPSBiYXNl
NjRFbmNvZGVUb1N0cmluZyhhdHRyc0hhc2guZGF0YSgpLCAxMCk7Ci0gICAgICAgICAgICBhZGRT
dHJpbmdUb1NIQTEoc2hhMSwgZGlnZXN0LT5hdHRyc1NIQTEpOworICAgICAgICAgICAgZGlnZXN0
LT5hdHRyc1NIQTEgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhhdHRyc0hhc2gpOworICAgICAgICAg
ICAgc2hhMS5hZGRCeXRlcyhkaWdlc3QtPmF0dHJzU0hBMS51dGY4KCkuYnl0ZXMoKSk7CiAgICAg
ICAgIH0KICAgICB9CiAKICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAgICBzaGExLmNvbXB1dGVI
YXNoKGhhc2gpOwotICAgIGRpZ2VzdC0+c2hhMSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGhhc2gu
ZGF0YSgpLCAxMCk7CisgICAgZGlnZXN0LT5zaGExID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaGFz
aCk7CiAgICAgaWYgKHVudXNlZE5vZGVzTWFwKQogICAgICAgICB1bnVzZWROb2Rlc01hcC0+YWRk
KGRpZ2VzdC0+c2hhMSwgZGlnZXN0LmdldCgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MDIsNyArNjAyLDcgQEAgYm9vbCBJbnNwZWN0b3JGcm9udGVu
ZEhvc3Q6OnNob3dDZXJ0aWZpYwogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEtPmRhdGEoKSwg
ZGF0YS0+c2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyAq
ZGF0YSB9OwogICAgIHN0ZDo6b3B0aW9uYWw8Q2VydGlmaWNhdGVJbmZvPiBjZXJ0aWZpY2F0ZUlu
Zm87CiAgICAgZGVjb2RlciA+PiBjZXJ0aWZpY2F0ZUluZm87CiAgICAgaWYgKCFjZXJ0aWZpY2F0
ZUluZm8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0Rh
dGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVz
b3VyY2VzRGF0YS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsx
MDYsNyBAQCB1bnNpZ25lZCBOZXR3b3JrUmVzb3VyY2VzRGF0YTo6UmVzb3VyY2VECiAgICAgICAg
IG1fY29udGVudCA9IG1fZGVjb2Rlci0+ZGVjb2RlQW5kRmx1c2gobV9kYXRhQnVmZmVyLT5kYXRh
KCksIGRhdGFMZW5ndGgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fYmFzZTY0RW5jb2RlZCA9
IHRydWU7Ci0gICAgICAgIG1fY29udGVudCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKG1fZGF0YUJ1
ZmZlci0+ZGF0YSgpLCBkYXRhTGVuZ3RoKTsKKyAgICAgICAgbV9jb250ZW50ID0gYmFzZTY0RW5j
b2RlVG9TdHJpbmcobV9kYXRhQnVmZmVyLT5ieXRlcygpKTsKICAgICB9CiAKICAgICBtX2RhdGFC
dWZmZXIgPSBudWxscHRyOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JET01BZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjk4LDcgKzE2OTgsNyBAQCBzdGF0aWMgU3RyaW5nIGNvbXB1dGVDb250
ZW50U2VjdXJpdHlQb2xpCiAgICAgYXV0byBjcnlwdG9EaWdlc3QgPSBQQUw6OkNyeXB0b0RpZ2Vz
dDo6Y3JlYXRlKFBBTDo6Q3J5cHRvRGlnZXN0OjpBbGdvcml0aG06OlNIQV8yNTYpOwogICAgIGNy
eXB0b0RpZ2VzdC0+YWRkQnl0ZXMoY29udGVudC5kYXRhKCksIGNvbnRlbnQuc2l6ZSgpKTsKICAg
ICBhdXRvIGRpZ2VzdCA9IGNyeXB0b0RpZ2VzdC0+Y29tcHV0ZUhhc2goKTsKLSAgICByZXR1cm4g
bWFrZVN0cmluZygic2hhMjU2LSIsIGJhc2U2NEVuY29kZWQoZGlnZXN0LmRhdGEoKSwgZGlnZXN0
LnNpemUoKSkpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCJzaGEyNTYtIiwgYmFzZTY0RW5jb2Rl
ZChkaWdlc3QpKTsKIH0KIAogUmVmPFByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFn
ZW50OjpidWlsZE9iamVjdEZvck5vZGUoTm9kZSogbm9kZSwgaW50IGRlcHRoKQpJbmRleDogU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0
d29ya0FnZW50LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzUsNyArMTc1LDcgQEAgUmVmPFByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRGcmFtZT4gYgog
ICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0RnJhbWU6OmNyZWF0ZSgpCiAg
ICAgICAgIC5zZXRPcGNvZGUoZnJhbWUub3BDb2RlKQogICAgICAgICAuc2V0TWFzayhmcmFtZS5t
YXNrZWQpCi0gICAgICAgIC5zZXRQYXlsb2FkRGF0YShmcmFtZS5vcENvZGUgPT0gMSA/IFN0cmlu
Zzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soZnJhbWUucGF5bG9hZCwgZnJhbWUucGF5bG9h
ZExlbmd0aCkgOiBiYXNlNjRFbmNvZGVUb1N0cmluZyhmcmFtZS5wYXlsb2FkLCBmcmFtZS5wYXls
b2FkTGVuZ3RoKSkKKyAgICAgICAgLnNldFBheWxvYWREYXRhKGZyYW1lLm9wQ29kZSA9PSAxID8g
U3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhmcmFtZS5wYXlsb2FkLCBmcmFtZS5w
YXlsb2FkTGVuZ3RoKSA6IGJhc2U2NEVuY29kZVRvU3RyaW5nKFNwYW4geyBmcmFtZS5wYXlsb2Fk
LCBmcmFtZS5wYXlsb2FkTGVuZ3RoIH0pKQogICAgICAgICAuc2V0UGF5bG9hZExlbmd0aChmcmFt
ZS5wYXlsb2FkTGVuZ3RoKQogICAgICAgICAucmVsZWFzZSgpOwogfQpAQCAtNTg5LDcgKzU4OSw3
IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlRGEKICAgICAgICAgLy8g
T2Z0ZW4gdGhlIGRhdGEgaXMgdGV4dCBhbmQgd2Ugd291bGQgaGF2ZSBhIGRlY29kZXIsIGJ1dCBm
b3Igbm9uLXRleHQgd2Ugd29uJ3QgaGF2ZSBhIGRlY29kZXIuCiAgICAgICAgIC8vIFN5bmMgWEhS
cyBtYXkgbm90IGhhdmUgYSBjYWNoZWQgcmVzb3VyY2UsIHdoaWxlIG5vbi1zeW5jIFhIUnMgdXN1
YWxseSB0cmFuc2ZlciBkYXRhIG92ZXIgb24gY29tcGxldGlvbi4KICAgICAgICAgaWYgKG1fbG9h
ZGluZ1hIUlN5bmNocm9ub3VzbHkgJiYgcmVzb3VyY2VEYXRhICYmICFyZXNvdXJjZURhdGEtPmhh
c0J1ZmZlcmVkRGF0YSgpICYmICFyZXNvdXJjZURhdGEtPmNhY2hlZFJlc291cmNlKCkpCi0gICAg
ICAgICAgICBtX3Jlc291cmNlc0RhdGEtPnNldFJlc291cmNlQ29udGVudChyZXF1ZXN0SWQsIGJh
c2U2NEVuY29kZVRvU3RyaW5nKGRhdGEsIGRhdGFMZW5ndGgpLCB0cnVlKTsKKyAgICAgICAgICAg
IG1fcmVzb3VyY2VzRGF0YS0+c2V0UmVzb3VyY2VDb250ZW50KHJlcXVlc3RJZCwgYmFzZTY0RW5j
b2RlVG9TdHJpbmcoU3BhbiB7IGRhdGEsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihkYXRhTGVuZ3Ro
KSB9KSwgdHJ1ZSk7CiAgICAgfQogCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRhdGFSZWNl
aXZlZChyZXF1ZXN0SWQsIHRpbWVzdGFtcCgpLCBkYXRhTGVuZ3RoLCBlbmNvZGVkRGF0YUxlbmd0
aCk7CkBAIC0xMDA1LDcgKzEwMDUsNyBAQCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+
IEluc3BlY3RvCiAKICAgICBXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyIGVuY29kZXI7CiAgICAg
V1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPjo6ZW5jb2Rl
KGVuY29kZXIsIGNlcnRpZmljYXRlLnZhbHVlKCkpOwotICAgIHJldHVybiBiYXNlNjRFbmNvZGVU
b1N0cmluZyhlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgcmV0
dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGVuY29kZXIuYnVmZmVyKCkpOwogfQogCiBXZWJTb2Nr
ZXQqIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6d2ViU29ja2V0Rm9yUmVxdWVzdElkKGNvbnN0IFBy
b3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCkKQEAgLTE0MTAsNyArMTQxMCw3
IEBAIGJvb2wgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpjYWNoZWRSZXNvdXIKICAgICAgICAgfQog
CiAgICAgICAgICpiYXNlNjRFbmNvZGVkID0gdHJ1ZTsKLSAgICAgICAgKnJlc3VsdCA9IGJhc2U2
NEVuY29kZVRvU3RyaW5nKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7CisgICAgICAg
ICpyZXN1bHQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhidWZmZXItPmJ5dGVzKCkpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2Vu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDcgQEAKIAogI2lmIEVOQUJMRShXRUJf
QVJDSElWRSkgJiYgVVNFKENGKQogI2luY2x1ZGUgIkxlZ2FjeVdlYkFyY2hpdmUuaCIKKyNpbmNs
dWRlIDx3dGYvY2YvU3BhbkNGLmg+CiAjZW5kaWYKIAogCkBAIC0xMTMsNyArMTE0LDcgQEAgYm9v
bCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNoYXJlZEJ1ZmZlckNvbgogYm9vbCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OmRhdGFDb250ZW50KGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIHNpemUsIGNv
bnN0IFN0cmluZyYgdGV4dEVuY29kaW5nTmFtZSwgYm9vbCB3aXRoQmFzZTY0RW5jb2RlLCBTdHJp
bmcqIHJlc3VsdCkKIHsKICAgICBpZiAod2l0aEJhc2U2NEVuY29kZSkgewotICAgICAgICAqcmVz
dWx0ID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoZGF0YSwgc2l6ZSk7CisgICAgICAgICpyZXN1bHQg
PSBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgZGF0YSwgc2l6ZSB9KTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCkBAIC0xMTAyLDcgKzExMDMsNyBAQCBQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxTdHJpbmc+IEluc3BlY3RvCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
Q291bGQgbm90IGNyZWF0ZSB3ZWIgYXJjaGl2ZSBmb3IgbWFpbiBmcmFtZSJfcyk7CiAKICAgICBS
ZXRhaW5QdHI8Q0ZEYXRhUmVmPiBidWZmZXIgPSBhcmNoaXZlLT5yYXdEYXRhUmVwcmVzZW50YXRp
b24oKTsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoQ0ZEYXRhR2V0Qnl0ZVB0cihi
dWZmZXIuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgoYnVmZmVyLmdldCgpKSk7CisgICAgcmV0dXJu
IGJhc2U2NEVuY29kZVRvU3RyaW5nKGFzQnl0ZXMoYnVmZmVyLmdldCgpKSk7CiB9CiAjZW5kaWYK
IApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNoaXZl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9N
SFRNTEFyY2hpdmUuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODEs
MTYgKzE4MSwxNCBAQCBSZWY8U2hhcmVkQnVmZmVyPiBNSFRNTEFyY2hpdmU6OmdlbmVyYXRlCiAg
ICAgICAgIG1odG1sRGF0YS0+YXBwZW5kKGFzY2lpU3RyaW5nLmRhdGEoKSwgYXNjaWlTdHJpbmcu
bGVuZ3RoKCkpOwogCiAgICAgICAgIC8vIEZJWE1FOiBpZGVhbGx5IHdlIHdvdWxkIGVuY29kZSB0
aGUgY29udGVudCBhcyBhIHN0cmVhbSB3aXRob3V0IGhhdmluZyB0byBmZXRjaCBpdCBhbGwuCi0g
ICAgICAgIGF1dG8qIGRhdGEgPSByZXNvdXJjZS5kYXRhLT5kYXRhKCk7Ci0gICAgICAgIHNpemVf
dCBkYXRhTGVuZ3RoID0gcmVzb3VyY2UuZGF0YS0+c2l6ZSgpOwogICAgICAgICBpZiAoIXN0cmNt
cChjb250ZW50RW5jb2RpbmcsIHF1b3RlZFByaW50YWJsZSkpIHsKLSAgICAgICAgICAgIGF1dG8g
ZW5jb2RlZERhdGEgPSBxdW90ZWRQcmludGFibGVFbmNvZGUoZGF0YSwgZGF0YUxlbmd0aCk7Cisg
ICAgICAgICAgICBhdXRvIGVuY29kZWREYXRhID0gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKHJlc291
cmNlLmRhdGEtPmJ5dGVzKCkpOwogICAgICAgICAgICAgbWh0bWxEYXRhLT5hcHBlbmQoZW5jb2Rl
ZERhdGEuZGF0YSgpLCBlbmNvZGVkRGF0YS5zaXplKCkpOwogICAgICAgICAgICAgbWh0bWxEYXRh
LT5hcHBlbmQoIlxyXG4iLCAyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VS
VCghc3RyY21wKGNvbnRlbnRFbmNvZGluZywgYmFzZTY0KSk7CiAgICAgICAgICAgICAvLyBXZSBh
cmUgbm90IHNwZWNpZnlpbmcgaW5zZXJ0TEZzID0gdHJ1ZSBiZWxvdyBhcyBpdCB3b3VsZCBjdXQg
dGhlIGxpbmVzIHdpdGggTEZzIGFuZCBNSFRNTCByZXF1aXJlcyBDUkxGcy4KLSAgICAgICAgICAg
IGF1dG8gZW5jb2RlZERhdGEgPSBiYXNlNjRFbmNvZGVUb1ZlY3RvcihkYXRhLCBkYXRhTGVuZ3Ro
KTsKKyAgICAgICAgICAgIGF1dG8gZW5jb2RlZERhdGEgPSBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihy
ZXNvdXJjZS5kYXRhLT5ieXRlcygpKTsKICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBtYXhpbXVt
TGluZUxlbmd0aCA9IDc2OwogICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gMDsKICAgICAgICAg
ICAgIHNpemVfdCBlbmNvZGVkRGF0YUxlbmd0aCA9IGVuY29kZWREYXRhLnNpemUoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MUGFyc2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTFBhcnNl
ci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZl
L21odG1sL01IVE1MUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDcgKzE5NSw3IEBA
IFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IE1IVE1MUGFyc2VyOjpwYXIKICAgICBWZWN0b3I8dWlu
dDhfdD4gZGF0YTsKICAgICBzd2l0Y2ggKG1pbWVIZWFkZXIuY29udGVudFRyYW5zZmVyRW5jb2Rp
bmcoKSkgewogICAgIGNhc2UgTUlNRUhlYWRlcjo6QmFzZTY0OiB7Ci0gICAgICAgIGF1dG8gZGVj
b2RlZERhdGEgPSBiYXNlNjREZWNvZGUoY29udGVudC0+ZGF0YSgpLCBjb250ZW50LT5zaXplKCkp
OworICAgICAgICBhdXRvIGRlY29kZWREYXRhID0gYmFzZTY0RGVjb2RlKGNvbnRlbnQtPmJ5dGVz
KCkpOwogICAgICAgICBpZiAoIWRlY29kZWREYXRhKSB7CiAgICAgICAgICAgICBMT0dfRVJST1Io
IkludmFsaWQgYmFzZTY0IGNvbnRlbnQgZm9yIE1IVE1MIHBhcnQuIik7CiAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKQEAgLTIwNCw3ICsyMDQsNyBAQCBSZWZQdHI8QXJjaGl2ZVJlc291cmNl
PiBNSFRNTFBhcnNlcjo6cGFyCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIE1JTUVI
ZWFkZXI6OlF1b3RlZFByaW50YWJsZToKLSAgICAgICAgZGF0YSA9IHF1b3RlZFByaW50YWJsZURl
Y29kZShjb250ZW50LT5kYXRhKCksIGNvbnRlbnQtPnNpemUoKSk7CisgICAgICAgIGRhdGEgPSBx
dW90ZWRQcmludGFibGVEZWNvZGUoY29udGVudC0+Ynl0ZXMoKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgTUlNRUhlYWRlcjo6U2V2ZW5CaXQ6CiAgICAgY2FzZSBNSU1FSGVhZGVyOjpCaW5h
cnk6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkxvYWRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIEljb25Mb2FkZXI6Om5v
dGlmeUZpbmlzaGVkKENhY2hlZFJlCiAgICAgICAgIGRhdGEgPSBudWxscHRyOwogCiAgICAgY29u
c3RleHByIHVpbnQ4X3QgcGRmTWFnaWNOdW1iZXJbXSA9IHsgJyUnLCAnUCcsICdEJywgJ0YnIH07
Ci0gICAgaWYgKGRhdGEgJiYgZGF0YS0+c3RhcnRzV2l0aChTcGFuIHsgcGRmTWFnaWNOdW1iZXIs
IHN0ZDo6c2l6ZShwZGZNYWdpY051bWJlcikgfSkpIHsKKyAgICBpZiAoZGF0YSAmJiBkYXRhLT5z
dGFydHNXaXRoKHBkZk1hZ2ljTnVtYmVyKSkgewogICAgICAgICBMT0coSWNvbkRhdGFiYXNlLCAi
SWNvbkxvYWRlcjo6ZmluaXNoTG9hZGluZygpIC0gSWdub3JpbmcgaWNvbiBhdCAlcyBiZWNhdXNl
IGl0IGFwcGVhcnMgdG8gYmUgYSBQREYiLCBtX3Jlc291cmNlLT51cmwoKS5zdHJpbmcoKS5hc2Np
aSgpLmRhdGEoKSk7CiAgICAgICAgIGRhdGEgPSBudWxscHRyOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0Jhc2U2NFV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzgsNyArMzgsNyBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IEJhc2U2NFV0aWxpdGllczo6YnRvCiAg
ICAgaWYgKCFzdHJpbmdUb0VuY29kZS5pc0FsbExhdGluMSgpKQogICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZENoYXJhY3RlckVycm9yIH07CiAKLSAgICByZXR1cm4gYmFzZTY0RW5j
b2RlVG9TdHJpbmcoc3RyaW5nVG9FbmNvZGUubGF0aW4xKCkpOworICAgIHJldHVybiBiYXNlNjRF
bmNvZGVUb1N0cmluZyhzdHJpbmdUb0VuY29kZS5sYXRpbjEoKS5ieXRlcygpKTsKIH0KIAogRXhj
ZXB0aW9uT3I8U3RyaW5nPiBCYXNlNjRVdGlsaXRpZXM6OmF0b2IoY29uc3QgU3RyaW5nJiBlbmNv
ZGVkU3RyaW5nKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1c3Rv
bURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9h
cmRDdXN0b21EYXRhLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4
OSw3IEBAIFJlZjxTaGFyZWRCdWZmZXI+IFBhc3RlYm9hcmRDdXN0b21EYXRhOjoKICAgICBlbmNv
ZGVyIDw8IG1fb3JpZ2luOwogICAgIGVuY29kZXIgPDwgc2FtZU9yaWdpbkN1c3RvbVN0cmluZ0Rh
dGEoKTsKICAgICBlbmNvZGVyIDw8IG9yZGVyZWRUeXBlcygpOwotICAgIHJldHVybiBTaGFyZWRC
dWZmZXI6OmNyZWF0ZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7Cisg
ICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCkpOwogfQogCiBQ
YXN0ZWJvYXJkQ3VzdG9tRGF0YSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6ZnJvbVBlcnNpc3RlbmNl
RGVjb2RlcihXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyJiYgZGVjb2RlcikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsMjAgKzM0LDE5IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgog
I2luY2x1ZGUgPHd0Zi91bmljb2RlL1VURjhDb252ZXJzaW9uLmg+CiAKLW5hbWVzcGFjZSBXZWJD
b3JlIHsKKyNpZiBVU0UoQ0YpCisjaW5jbHVkZSA8d3RmL2NmL1NwYW5DRi5oPgorI2VuZGlmCiAK
LVNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBz
aXplKQotewotICAgIGFwcGVuZChkYXRhLCBzaXplKTsKLX0KK25hbWVzcGFjZSBXZWJDb3JlIHsK
IAotU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNp
emUpCitTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0
YSkKIHsKLSAgICBhcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSks
IHNpemUpOworICAgIGFwcGVuZChkYXRhKTsKIH0KIAogU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZm
ZXIoRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmJiBmaWxlRGF0YSkKLSAgICA6IG1fc2l6ZShm
aWxlRGF0YS5zaXplKCkpCisgICAgOiBtX3NpemUoZmlsZURhdGEuZGF0YSgpLnNpemUoKSkKIHsK
ICAgICBtX3NlZ21lbnRzLmFwcGVuZCh7MCwgRGF0YVNlZ21lbnQ6OmNyZWF0ZShXVEZNb3ZlKGZp
bGVEYXRhKSl9KTsKIH0KQEAgLTE4OCwxMyArMTg3LDEzIEBAIHZvaWQgU2hhcmVkQnVmZmVyOjph
cHBlbmQoY29uc3QgU2hhcmVkQnUKICAgICBBU1NFUlQoaW50ZXJuYWxseUNvbnNpc3RlbnQoKSk7
CiB9CiAKLXZvaWQgU2hhcmVkQnVmZmVyOjphcHBlbmQoY29uc3QgdWludDhfdCogZGF0YSwgc2l6
ZV90IGxlbmd0aCkKK3ZvaWQgU2hhcmVkQnVmZmVyOjphcHBlbmQoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGRhdGEpCiB7CiAgICAgQVNTRVJUKCFtX2hhc0JlZW5Db21iaW5lZEludG9PbmVTZWdtZW50
KTsKICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yOwotICAgIHZlY3Rvci5hcHBlbmQoZGF0YSwg
bGVuZ3RoKTsKLSAgICBtX3NlZ21lbnRzLmFwcGVuZCh7bV9zaXplLCBEYXRhU2VnbWVudDo6Y3Jl
YXRlKFdURk1vdmUodmVjdG9yKSl9KTsKLSAgICBtX3NpemUgKz0gbGVuZ3RoOworICAgIHZlY3Rv
ci5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5kYXRhKCkpLCBk
YXRhLnNpemUoKSk7CisgICAgbV9zZWdtZW50cy5hcHBlbmQoeyBtX3NpemUsIERhdGFTZWdtZW50
OjpjcmVhdGUoV1RGTW92ZSh2ZWN0b3IpKSB9KTsKKyAgICBtX3NpemUgKz0gZGF0YS5zaXplKCk7
CiAgICAgQVNTRVJUKGludGVybmFsbHlDb25zaXN0ZW50KCkpOwogfQogCkBAIC0yMzIsNyArMjMx
LDcgQEAgdm9pZCBTaGFyZWRCdWZmZXI6OmZvckVhY2hTZWdtZW50KGNvbnN0IAogICAgICAgICBh
cHBseShTcGFuIHsgc2VnbWVudC5zZWdtZW50LT5kYXRhKCksIHNlZ21lbnQuc2VnbWVudC0+c2l6
ZSgpIH0pOwogfQogCi1ib29sIFNoYXJlZEJ1ZmZlcjo6c3RhcnRzV2l0aChjb25zdCBTcGFuPGNv
bnN0IHVpbnQ4X3Q+JiBwcmVmaXgpIGNvbnN0Citib29sIFNoYXJlZEJ1ZmZlcjo6c3RhcnRzV2l0
aChjb25zdCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4mIHByZWZpeCkgY29uc3QKIHsKICAgICBpZiAo
cHJlZml4LmVtcHR5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjQwLDcgKzIzOSw3IEBA
IGJvb2wgU2hhcmVkQnVmZmVyOjpzdGFydHNXaXRoKGNvbnN0IFNwYW4KICAgICBpZiAoc2l6ZSgp
IDwgcHJlZml4LnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29uc3QgdWlu
dDhfdCogcHJlZml4UHRyID0gcHJlZml4LmRhdGEoKTsKKyAgICBhdXRvKiBwcmVmaXhQdHIgPSBw
cmVmaXguZGF0YSgpOwogICAgIHNpemVfdCByZW1haW5pbmcgPSBwcmVmaXguc2l6ZSgpOwogICAg
IGZvciAoYXV0byYgc2VnbWVudCA6IG1fc2VnbWVudHMpIHsKICAgICAgICAgc2l6ZV90IGFtb3Vu
dFRvQ29tcGFyZVRoaXNUaW1lID0gc3RkOjptaW4ocmVtYWluaW5nLCBzZWdtZW50LnNlZ21lbnQt
PnNpemUoKSk7CkBAIC0zMDEsOSArMzAwLDM4IEBAIGNvbnN0IHVpbnQ4X3QqIFNoYXJlZEJ1ZmZl
cjo6RGF0YVNlZ21lbnQKICNpZiBVU0UoR1NUUkVBTUVSKQogICAgICAgICBbXShjb25zdCBSZWZQ
dHI8R3N0TWFwcGVkT3duZWRCdWZmZXI+JiBkYXRhKSB7IHJldHVybiBkYXRhLT5kYXRhKCk7IH0s
CiAjZW5kaWYKLSAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRh
dGEpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmRhdGEoKSk7IH0K
KyAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuZGF0YSgpLmRhdGEoKSk7
IH0KKyAgICApOworICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIG1faW1tdXRhYmxlRGF0
YSk7Cit9CisKK1NwYW48Y29uc3Qgc3RkOjpieXRlPiBTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50
OjpieXRlcygpIGNvbnN0Cit7CisgICAgYXV0byB2aXNpdG9yID0gV1RGOjptYWtlVmlzaXRvcigK
KyAgICAgICAgW10oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKSB7CisgICAgICAgICAgICBy
ZXR1cm4gYXNCeXRlcyhTcGFuIHsgZGF0YSB9KTsKKyAgICAgICAgfSwKKyNpZiBVU0UoQ0YpCisg
ICAgICAgIFtdKGNvbnN0IFJldGFpblB0cjxDRkRhdGFSZWY+JiBkYXRhKSB7CisgICAgICAgICAg
ICByZXR1cm4gYXNCeXRlcyhkYXRhLmdldCgpKTsKKyAgICAgICAgfSwKKyNlbmRpZgorI2lmIFVT
RShHTElCKQorICAgICAgICBbXShjb25zdCBHUmVmUHRyPEdCeXRlcz4mIGRhdGEpIHsKKyAgICAg
ICAgICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4o
Z19ieXRlc19nZXRfZGF0YShkYXRhLmdldCgpLCBudWxscHRyKSksIGdfYnl0ZXNfZ2V0X3NpemUo
ZGF0YS5nZXQoKSkgfSk7CisgICAgICAgIH0sCisjZW5kaWYKKyNpZiBVU0UoR1NUUkVBTUVSKQor
ICAgICAgICBbXShjb25zdCBSZWZQdHI8R3N0TWFwcGVkT3duZWRCdWZmZXI+JiBkYXRhKSB7Cisg
ICAgICAgICAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXpl
KCkgfSk7CisgICAgICAgIH0sCisjZW5kaWYKKyAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6
TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBkYXRhLmRhdGEoKTsK
KyAgICAgICAgfQogICAgICk7CiAgICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwgbV9pbW11
dGFibGVEYXRhKTsKKwogfQogCiBib29sIFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmNvbnRh
aW5zTWFwcGVkRmlsZURhdGEoKSBjb25zdApAQCAtMzE5LDcgKzM0Nyw3IEBAIHZvaWQgU2hhcmVk
QnVmZmVyOjpoaW50TWVtb3J5Tm90TmVlZGVkU28KIAogV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2Rl
ciBTaGFyZWRCdWZmZXI6OmRlY29kZXIoKSBjb25zdAogewotICAgIHJldHVybiB7IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEoKSksIHNpemUoKSB9OworICAgIHJldHVybiB7
IGJ5dGVzKCkgfTsKIH0KIAogYm9vbCBTaGFyZWRCdWZmZXI6Om9wZXJhdG9yPT0oY29uc3QgU2hh
cmVkQnVmZmVyJiBvdGhlcikgY29uc3QKQEAgLTM4NCw3ICs0MTIsNyBAQCBzaXplX3QgU2hhcmVk
QnVmZmVyOjpEYXRhU2VnbWVudDo6c2l6ZSgpCiAjaWYgVVNFKEdTVFJFQU1FUikKICAgICAgICAg
W10oY29uc3QgUmVmUHRyPEdzdE1hcHBlZE93bmVkQnVmZmVyPiYgZGF0YSkgeyByZXR1cm4gZGF0
YS0+c2l6ZSgpOyB9LAogI2VuZGlmCi0gICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBl
ZEZpbGVEYXRhJiBkYXRhKSB7IHJldHVybiBkYXRhLnNpemUoKTsgfQorICAgICAgICBbXShjb25z
dCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeyByZXR1cm4gZGF0YS5kYXRhKCku
c2l6ZSgpOyB9CiAgICAgKTsKICAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBtX2ltbXV0
YWJsZURhdGEpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw4ICs2NywxMiBAQCBjbGFzcyBTaGFyZWRCdWZmZXJE
YXRhVmlldzsKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIFNoYXJlZEJ1ZmZlciA6IHB1YmxpYyBSZWZD
b3VudGVkPFNoYXJlZEJ1ZmZlcj4gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVm
ZmVyPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcik7IH0KLSAg
ICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNp
emVfdCBzaXplKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihkYXRhLCBzaXpl
KSk7IH0KLSAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IGNoYXIqIGRh
dGEsIHNpemVfdCBzaXplKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihkYXRh
LCBzaXplKSk7IH0KKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKFNwYW48Y29u
c3Qgc3RkOjpieXRlPiBkYXRhKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihk
YXRhKSk7IH0KKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKFNwYW48Y29uc3Qg
dWludDhfdD4gZGF0YSkgeyByZXR1cm4gY3JlYXRlKGFzQnl0ZXMoZGF0YSkpOyB9CisgICAgc3Rh
dGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShTcGFuPGNvbnN0IGNoYXI+IGRhdGEpIHsgcmV0
dXJuIGNyZWF0ZShhc0J5dGVzKGRhdGEpKTsgfQorICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVy
PiBjcmVhdGUoY29uc3Qgc3RkOjpieXRlKiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gY3Jl
YXRlKFNwYW4geyBkYXRhLCBzaXplIH0pOyB9CisgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+
IGNyZWF0ZShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gY3JlYXRl
KFNwYW4geyBkYXRhLCBzaXplIH0pOyB9CisgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNy
ZWF0ZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gY3JlYXRlKFNwYW4g
eyBkYXRhLCBzaXplIH0pOyB9CiAgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShG
aWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIG1hcHBlZEZpbGVEYXRhKSB7IHJldHVybiBhZG9w
dFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihXVEZNb3ZlKG1hcHBlZEZpbGVEYXRhKSkpOyB9CiAKICAg
ICBlbnVtIGNsYXNzIE1heVVzZUZpbGVNYXBwaW5nIDogYm9vbCB7IE5vLCBZZXMgfTsKQEAgLTEw
MSw2ICsxMDUsOCBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IEF1ZGl0IHRoZSBjYWxsIHNpdGVz
IG9mIHRoaXMgZnVuY3Rpb24gYW5kIHJlcGxhY2UgdGhlbSB3aXRoIGl0ZXJhdGlvbiBpZiBwb3Nz
aWJsZS4KICAgICBjb25zdCB1aW50OF90KiBkYXRhKCkgY29uc3Q7CiAgICAgY29uc3QgY2hhciog
ZGF0YUFzQ2hhclB0cigpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KGRhdGEoKSk7IH0KKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25zdCB7
IHJldHVybiBhc0J5dGVzKFNwYW4geyBkYXRhKCksIHNpemUoKSB9KTsgfQorCiAgICAgVmVjdG9y
PHVpbnQ4X3Q+IGNvcHlEYXRhKCkgeyByZXR1cm4geyBkYXRhKCksIHNpemUoKSB9OyB9CiAKICAg
ICAvLyBDb21iaW5lcyBhbGwgdGhlIHNlZ21lbnRzIGludG8gYSBWZWN0b3IgYW5kIHJldHVybnMg
dGhhdCB2ZWN0b3IgYWZ0ZXIgY2xlYXJpbmcgdGhlIFNoYXJlZEJ1ZmZlci4KQEAgLTExNSw4ICsx
MjEsMTIgQEAgcHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXpl
KCk7IH0KIAogICAgIHZvaWQgYXBwZW5kKGNvbnN0IFNoYXJlZEJ1ZmZlciYpOwotICAgIHZvaWQg
YXBwZW5kKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwotICAgIHZvaWQgYXBwZW5kKGNvbnN0IGNo
YXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpIHsgYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KGRhdGEpLCBsZW5ndGgpOyB9CisgICAgdm9pZCBhcHBlbmQoU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+KTsKKyAgICB2b2lkIGFwcGVuZChTcGFuPGNvbnN0IHVpbnQ4X3Q+IGRhdGEpIHsg
YXBwZW5kKGFzQnl0ZXMoZGF0YSkpOyB9CisgICAgdm9pZCBhcHBlbmQoU3Bhbjxjb25zdCBjaGFy
PiBkYXRhKSB7IGFwcGVuZChhc0J5dGVzKGRhdGEpKTsgfQorICAgIHZvaWQgYXBwZW5kKGNvbnN0
IHN0ZDo6Ynl0ZSogZGF0YSwgc2l6ZV90IGxlbmd0aCkgeyBhcHBlbmQoU3BhbiB7IGRhdGEsIGxl
bmd0aCB9KTsgfQorICAgIHZvaWQgYXBwZW5kKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBs
ZW5ndGgpIHsgYXBwZW5kKFNwYW4geyBkYXRhLCBsZW5ndGggfSk7IH0KKyAgICB2b2lkIGFwcGVu
ZChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKSB7IGFwcGVuZChTcGFuIHsgZGF0YSwg
bGVuZ3RoIH0pOyB9CiAgICAgdm9pZCBhcHBlbmQoVmVjdG9yPHVpbnQ4X3Q+JiYpOwogCiAgICAg
dm9pZCBjbGVhcigpOwpAQCAtMTMxLDYgKzE0MSw4IEBAIHB1YmxpYzoKICAgICAgICAgV0VCQ09S
RV9FWFBPUlQgY29uc3QgdWludDhfdCogZGF0YSgpIGNvbnN0OwogICAgICAgICBXRUJDT1JFX0VY
UE9SVCBzaXplX3Qgc2l6ZSgpIGNvbnN0OwogCisgICAgICAgIFdFQkNPUkVfRVhQT1JUIFNwYW48
Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAgICAgICAgIHN0YXRpYyBSZWY8RGF0
YVNlZ21lbnQ+IGNyZWF0ZShWZWN0b3I8dWludDhfdD4mJiBkYXRhKQogICAgICAgICB7CiAgICAg
ICAgICAgICBkYXRhLnNocmlua1RvRml0KCk7CkBAIC0xODcsNyArMTk5LDkgQEAgcHVibGljOgog
ICAgIH07CiAKICAgICB2b2lkIGZvckVhY2hTZWdtZW50KGNvbnN0IEZ1bmN0aW9uPHZvaWQoY29u
c3QgU3Bhbjxjb25zdCB1aW50OF90PiYpPiYpIGNvbnN0OwotICAgIGJvb2wgc3RhcnRzV2l0aChj
b25zdCBTcGFuPGNvbnN0IHVpbnQ4X3Q+JiBwcmVmaXgpIGNvbnN0OworCisgICAgYm9vbCBzdGFy
dHNXaXRoKGNvbnN0IFNwYW48Y29uc3Qgc3RkOjpieXRlPiYgcHJlZml4KSBjb25zdDsKKyAgICBi
b29sIHN0YXJ0c1dpdGgoY29uc3QgU3Bhbjxjb25zdCB1aW50OF90PiYgcHJlZml4KSBjb25zdCB7
IHJldHVybiBzdGFydHNXaXRoKGFzQnl0ZXMocHJlZml4KSk7IH0KIAogICAgIHN0cnVjdCBEYXRh
U2VnbWVudFZlY3RvckVudHJ5IHsKICAgICAgICAgc2l6ZV90IGJlZ2luUG9zaXRpb247CkBAIC0y
MTIsOCArMjI2LDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFNoYXJlZEJ1
ZmZlcigpID0gZGVmYXVsdDsKLSAgICBleHBsaWNpdCBTaGFyZWRCdWZmZXIoY29uc3QgdWludDhf
dCosIHNpemVfdCk7Ci0gICAgZXhwbGljaXQgU2hhcmVkQnVmZmVyKGNvbnN0IGNoYXIqLCBzaXpl
X3QpOworICAgIGV4cGxpY2l0IFNoYXJlZEJ1ZmZlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwog
ICAgIGV4cGxpY2l0IFNoYXJlZEJ1ZmZlcihWZWN0b3I8dWludDhfdD4mJik7CiAgICAgZXhwbGlj
aXQgU2hhcmVkQnVmZmVyKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYpOwogI2lmIFVTRShD
RikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0NBQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL2NvY29hL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgPENvcmVBdWRpby9Db3JlQXVkaW9UeXBl
cy5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
ODAsMTMgKzgxLDEzIEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAog
ewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDhfdCo+KCZtX3N0cmVhbURlc2NyaXB0aW9uKSwgc2l6ZW9mKG1fc3RyZWFtRGVzY3Jp
cHRpb24pLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJm1f
c3RyZWFtRGVzY3JpcHRpb24sIDEgfSwgMSk7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
CiBib29sIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7Ci0gICAgcmV0dXJuIGRl
Y29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZk
ZXNjcmlwdGlvbi5tX3N0cmVhbURlc2NyaXB0aW9uKSwgc2l6ZW9mKGRlc2NyaXB0aW9uLm1fc3Ry
ZWFtRGVzY3JpcHRpb24pLCAxKTsKKyAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0
aERhdGEoU3BhbiB7ICZkZXNjcmlwdGlvbi5tX3N0cmVhbURlc2NyaXB0aW9uLCAxIH0sIDEpOwog
fQogCiBpbmxpbmUgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uIHRvQ0FBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uKGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJL
ZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1l
ZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTgsMTUgKzE5OCwxMyBAQCBzdGF0aWMgUmVmPFNoYXJlZEJ1
ZmZlcj4gZXh0cmFjdEtleWlkc0ZyCiB7CiAgICAgUmVmPFNoYXJlZEJ1ZmZlcj4ga2V5SWRzID0g
U2hhcmVkQnVmZmVyOjpjcmVhdGUoKTsKIAotICAgIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWdu
ZWQ+IGtleUlkc01hcCA9IGV4dHJhY3RLZXlpZHNMb2NhdGlvbkZyb21DZW5jSW5pdERhdGEoaW5p
dERhdGEpOwotICAgIHVuc2lnbmVkIGtleUlkQ291bnQgPSBrZXlJZHNNYXAuZmlyc3Q7Ci0gICAg
dW5zaWduZWQgaW5kZXggPSBrZXlJZHNNYXAuc2Vjb25kOworICAgIGF1dG8gW2tleUlkQ291bnQs
IGluZGV4XSA9IGV4dHJhY3RLZXlpZHNMb2NhdGlvbkZyb21DZW5jSW5pdERhdGEoaW5pdERhdGEp
OwogCiAgICAgLy8gQ2hlY2sgaWYgaW5pdERhdGEgaXMgYSB2YWxpZCBDRU5DIGluaXREYXRhLgog
ICAgIGlmICgha2V5SWRDb3VudCB8fCAhaW5kZXgpCiAgICAgICAgIHJldHVybiBrZXlJZHM7CiAK
LSAgICBhdXRvKiBkYXRhID0gaW5pdERhdGEuZGF0YSgpOworICAgIGF1dG8gZGF0YSA9IGluaXRE
YXRhLmJ5dGVzKCk7CiAKICAgICBhdXRvIG9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgYXV0byBrZXlJZHNBcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKQEAgLTIxOCw3
ICsyMTYsNyBAQCBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gZXh0cmFjdEtleWlkc0ZyCiAgICAg
Ly8gImtpZHMiCiAgICAgLy8gQW4gYXJyYXkgb2Yga2V5IElEcy4gRWFjaCBlbGVtZW50IG9mIHRo
ZSBhcnJheSBpcyB0aGUgYmFzZTY0dXJsIGVuY29kaW5nIG9mIHRoZSBvY3RldCBzZXF1ZW5jZSBj
b250YWluaW5nIHRoZSBrZXkgSUQgdmFsdWUuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGtleUlkQ291bnQ7IGkrKykgewotICAgICAgICBrZXlJZHNBcnJheS0+cHVzaFN0cmluZyhiYXNl
NjRVUkxFbmNvZGVUb1N0cmluZygmZGF0YVtpbmRleF0sIENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5
dGVzKSk7CisgICAgICAgIGtleUlkc0FycmF5LT5wdXNoU3RyaW5nKGJhc2U2NFVSTEVuY29kZVRv
U3RyaW5nKGRhdGEuc3Vic3BhbihpbmRleCwgQ2xlYXJLZXk6OktleUlEU2l6ZUluQnl0ZXMpKSk7
CiAgICAgICAgIGluZGV4ICs9IENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVzOwogICAgIH0KIApA
QCAtMjQ1LDcgKzI0Myw3IEBAIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBleHRyYWN0S2V5SWRG
cm8KICAgICAvLyBUaGUgZm9ybWF0IGlzIGEgSlNPTiBvYmplY3QgY29udGFpbmluZyB0aGUgZm9s
bG93aW5nIG1lbWJlcnM6CiAgICAgLy8gImtpZHMiCiAgICAgLy8gQW4gYXJyYXkgb2Yga2V5IElE
cy4gRWFjaCBlbGVtZW50IG9mIHRoZSBhcnJheSBpcyB0aGUgYmFzZTY0dXJsIGVuY29kaW5nIG9m
IHRoZSBvY3RldCBzZXF1ZW5jZSBjb250YWluaW5nIHRoZSBrZXkgSUQgdmFsdWUuCi0gICAga2V5
SWRzQXJyYXktPnB1c2hTdHJpbmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoaW5pdERhdGEuZGF0
YSgpLCBpbml0RGF0YS5zaXplKCkpKTsKKyAgICBrZXlJZHNBcnJheS0+cHVzaFN0cmluZyhiYXNl
NjRVUkxFbmNvZGVUb1N0cmluZyhpbml0RGF0YS5ieXRlcygpKSk7CiAKICAgICBvYmplY3QtPnNl
dEFycmF5KCJraWRzIiwgV1RGTW92ZShrZXlJZHNBcnJheSkpOwogICAgIENTdHJpbmcganNvbkRh
dGEgPSBvYmplY3QtPnRvSlNPTlN0cmluZygpLnV0ZjgoKTsKQEAgLTU3OCw5ICs1NzYsOCBAQCB2
b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTCiAKICAgICAvLyBDb25zdHJ1
Y3QgdGhlIEtleVN0YXR1c1ZlY3RvciBvYmplY3QsIHJlcHJlc2VudGluZyByZWxlYXNlZCBrZXlz
LCBhbmQgdGhlIG1lc3NhZ2UgaW4gdGhlCiAgICAgLy8gJ2xpY2Vuc2UgcmVsZWFzZScgZm9ybWF0
LgotICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3IgPSBtX2tleVN0b3JlLmFsbEtl
eXNBcyhDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6UmVsZWFzZWQpOwotICAgIFJlZlB0
cjxTaGFyZWRCdWZmZXI+IG1lc3NhZ2U7Ci0gICAgeworICAgIGF1dG8ga2V5U3RhdHVzVmVjdG9y
ID0gbV9rZXlTdG9yZS5hbGxLZXlzQXMoQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlJl
bGVhc2VkKTsKKyAgICBhdXRvIG1lc3NhZ2UgPSBbJl17CiAgICAgICAgIC8vIENvbnN0cnVjdCBK
U09OIHRoYXQgcmVwcmVzZW50cyB0aGUgJ2xpY2Vuc2UgcmVsZWFzZScgZm9ybWF0LCBjcmVhdGlu
ZyBhICdraWRzJyBhcnJheQogICAgICAgICAvLyBvZiBiYXNlNjRVUkwtZW5jb2RlZCBrZXkgSURz
IGZvciBhbGwga2V5cyB0aGF0IHdlcmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2Vzc2lvbi4KICAg
ICAgICAgYXV0byByb290T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKQEAgLTU4OCw3
ICs1ODUsNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTCiAgICAg
ICAgICAgICBhdXRvIGFycmF5ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICAgICAg
Zm9yIChjb25zdCBhdXRvJiBrZXkgOiBtX2tleVN0b3JlKSB7CiAgICAgICAgICAgICAgICAgQVNT
RVJUKGtleS0+aWQoKS5zaXplKCkgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1h
eCgpKTsKLSAgICAgICAgICAgICAgICBhcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVU
b1N0cmluZyhrZXktPmlkKCkuZGF0YSgpLCBrZXktPmlkKCkuc2l6ZSgpKSk7CisgICAgICAgICAg
ICAgICAgYXJyYXktPnB1c2hTdHJpbmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoa2V5LT5pZCgp
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByb290T2JqZWN0LT5zZXRBcnJheSgia2lk
cyIsIFdURk1vdmUoYXJyYXkpKTsKICAgICAgICAgfQpAQCAtNTk2LDExICs1OTMsMTEgQEAgdm9p
ZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlUwogICAgICAgICAvLyBDb3B5IHRo
ZSBKU09OIGRhdGEgaW50byBhIFNoYXJlZEJ1ZmZlciBvYmplY3QuCiAgICAgICAgIFN0cmluZyBt
ZXNzYWdlU3RyaW5nID0gcm9vdE9iamVjdC0+dG9KU09OU3RyaW5nKCk7CiAgICAgICAgIENTdHJp
bmcgbWVzc2FnZUNTdHJpbmcgPSBtZXNzYWdlU3RyaW5nLnV0ZjgoKTsKLSAgICAgICAgbWVzc2Fn
ZSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKG1lc3NhZ2VDU3RyaW5nLmRhdGEoKSwgbWVzc2FnZUNT
dHJpbmcubGVuZ3RoKCkpOwotICAgIH0KKyAgICAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3Jl
YXRlKG1lc3NhZ2VDU3RyaW5nLmRhdGEoKSwgbWVzc2FnZUNTdHJpbmcubGVuZ3RoKCkpOworICAg
IH0oKTsKIAogICAgIG1fa2V5U3RvcmUucmVtb3ZlQWxsS2V5cygpOwotICAgIGRpc3BhdGNoQ2Fs
bGJhY2soV1RGTW92ZShrZXlTdGF0dXNWZWN0b3IpLCBSZWY8U2hhcmVkQnVmZmVyPigqbWVzc2Fn
ZSksIFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVkKTsKKyAgICBkaXNwYXRjaENhbGxiYWNrKFdURk1v
dmUoa2V5U3RhdHVzVmVjdG9yKSwgV1RGTW92ZShtZXNzYWdlKSwgU3VjY2Vzc1ZhbHVlOjpTdWNj
ZWVkZWQpOwogfQogCiB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpzdG9yZVJlY29y
ZE9mS2V5VXNhZ2UoY29uc3QgU3RyaW5nJikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dlbmVyaWMvS2V5ZWREZWNvZGVyR2VuZXJpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9LZXllZERlY29kZXJHZW5lcmljLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9LZXllZERlY29kZXJH
ZW5lcmljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBzdGF0aWMgc3RkOjpv
cHRpb25hbDxTdHJpbmc+IHJlYWRTdHJpbmcoCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygp
OwogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcihzaXplLnZhbHVlKCkpOwotICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLmRhdGEoKSwgc2l6ZS52YWx1ZSgp
KSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBidWZmZXIg
fSkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgYXV0byByZXN1bHQgPSBTdHJp
bmc6OmZyb21VVEY4KGJ1ZmZlci5kYXRhKCksIHNpemUudmFsdWUoKSk7CiAgICAgaWYgKHJlc3Vs
dC5pc051bGwoKSkKQEAgLTExNyw3ICsxMTcsNyBAQCBLZXllZERlY29kZXJHZW5lcmljOjpLZXll
ZERlY29kZXJHZW5lcmljCiAgICAgICAgICAgICBpZiAoIW9rKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcigqc2l6ZSk7Ci0gICAgICAg
ICAgICBvayA9IGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ1ZmZlci5kYXRhKCksICpz
aXplKTsKKyAgICAgICAgICAgIG9rID0gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3Bh
biB7IGJ1ZmZlciB9KTsKICAgICAgICAgICAgIGlmICghb2spCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCktPmFkZCgqa2V5LCBXVEZN
b3ZlKGJ1ZmZlcikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTW9k
ZWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Nb2Rl
bC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Nb2RlbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+CiB2b2lkIE1vZGVsOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsK
ICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHNpemVfdD4obV9kYXRhLT5zaXplKCkpOwotICAg
IGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNp
emUoKSwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEobV9kYXRhLT5ieXRl
cygpLCAxKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KQEAgLTc0LDcgKzc0LDcgQEAg
UmVmUHRyPE1vZGVsPiBNb2RlbDo6ZGVjb2RlKERlY29kZXImIGRlYwogCiAgICAgVmVjdG9yPHVp
bnQ4X3Q+IGRhdGE7CiAgICAgZGF0YS5ncm93KCpsZW5ndGgpOwotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGVGaXhlZExlbmd0aERhdGEoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAxKSkKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGRhdGEsIDEpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBNb2RlbDo6Y3JlYXRlKFNoYXJlZEJ1ZmZlcjo6Y3Jl
YXRlKFdURk1vdmUoZGF0YSkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BpeGVsQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUGl4ZWxCdWZmZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODIs
NyArODIsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIFBpeGVsQnVmZmVyCiAKICAg
ICBlbmNvZGVyIDw8IG1fZm9ybWF0OwogICAgIGVuY29kZXIgPDwgbV9zaXplOwotICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPmJ5dGVMZW5n
dGgoKSwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEobV9kYXRhLT5ieXRl
cygpLCAxKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RkOjpvcHRpb25hbDxQaXhl
bEJ1ZmZlcj4gUGl4ZWxCdWZmZXI6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQpAQCAtMTEzLDcg
KzExMyw3IEBAIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0ZDo6b3B0aW9uYWw8UGkKICAgICBp
ZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIGlmICghZGVj
b2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVzdWx0LT5tX2RhdGEtPmRhdGEoKSwgcmVzdWx0
LT5tX2RhdGEtPmJ5dGVMZW5ndGgoKSwgMSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVk
TGVuZ3RoRGF0YShyZXN1bHQtPm1fZGF0YS0+d3JpdGFibGVCeXRlcygpLCAxKSkKICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZh
aXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3Ry
ZWFtaW5nQVZGT2JqQy5tbQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVh
bWluZ0FWRk9iakMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAKICNpbXBvcnQg
PHd0Zi9GaWxlU3lzdGVtLmg+CiAjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgogI2ltcG9ydCA8
d3RmL0xvZ2dlckhlbHBlci5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1NwYW5Db2NvYS5oPgogI2lt
cG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQu
aD4KICNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KQEAgLTcxNSw3ICs3MTYsNyBAQCB2
b2lkIENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nCiAgICAgICAgIGlkZW50aWZp
ZXIgPSBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTppbml0RGF0YS0+Y3Jl
YXRlTlNEYXRhKCkuZ2V0KCkgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddKTsKICNpZiBI
QVZFKEZBSVJQTEFZU1RSRUFNSU5HX0NFTkNfSU5JVERBVEEpCiAgICAgZWxzZSBpZiAoaW5pdERh
dGFUeXBlID09IEluaXREYXRhUmVnaXN0cnk6OmNlbmNOYW1lKCkpIHsKLSAgICAgICAgYXV0byBw
c3NoU3RyaW5nID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5pdERhdGEtPmRhdGEoKSwgaW5pdERh
dGEtPnNpemUoKSk7CisgICAgICAgIGF1dG8gcHNzaFN0cmluZyA9IGJhc2U2NEVuY29kZVRvU3Ry
aW5nKGluaXREYXRhLT5ieXRlcygpKTsKICAgICAgICAgaW5pdGlhbGl6YXRpb25EYXRhID0gW05T
SlNPTlNlcmlhbGl6YXRpb24gZGF0YVdpdGhKU09OT2JqZWN0OkB7IEAicHNzaCI6IChOU1N0cmlu
ZyopcHNzaFN0cmluZyB9IG9wdGlvbnM6TlNKU09OV3JpdGluZ1ByZXR0eVByaW50ZWQgZXJyb3I6
bmlsXTsKICAgICB9CiAjZW5kaWYKQEAgLTExOTEsMTIgKzExOTIsMTAgQEAgdm9pZCBDRE1JbnN0
YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZwogICAgICAgICB9CiAKICAgICAgICAgYXV0byBy
ZXF1ZXN0SlNPTiA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKLSAgICAgICAgZm9yIChhdXRvJiBy
ZXF1ZXN0RGF0YSA6IHJlcXVlc3RzRGF0YSkgeworICAgICAgICBmb3IgKGF1dG8mIFtrZXlJRCwg
cGF5bG9hZF0gOiByZXF1ZXN0c0RhdGEpIHsKICAgICAgICAgICAgIGF1dG8gZW50cnkgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICAgICAgYXV0byYga2V5SUQgPSByZXF1ZXN0RGF0
YS5maXJzdDsKLSAgICAgICAgICAgIGF1dG8mIHBheWxvYWQgPSByZXF1ZXN0RGF0YS5zZWNvbmQ7
Ci0gICAgICAgICAgICBlbnRyeS0+c2V0U3RyaW5nKCJrZXlJRCIsIGJhc2U2NEVuY29kZVRvU3Ry
aW5nKGtleUlELT5kYXRhKCksIGtleUlELT5zaXplKCkpKTsKLSAgICAgICAgICAgIGVudHJ5LT5z
ZXRTdHJpbmcoInBheWxvYWQiLCBiYXNlNjRFbmNvZGVUb1N0cmluZyhwYXlsb2FkLmdldCgpLmJ5
dGVzLCBwYXlsb2FkLmdldCgpLmxlbmd0aCkpOworICAgICAgICAgICAgZW50cnktPnNldFN0cmlu
Zygia2V5SUQiLCBiYXNlNjRFbmNvZGVUb1N0cmluZyhrZXlJRC0+Ynl0ZXMoKSkpOworICAgICAg
ICAgICAgZW50cnktPnNldFN0cmluZygicGF5bG9hZCIsIGJhc2U2NEVuY29kZVRvU3RyaW5nKGFz
Qnl0ZXMocGF5bG9hZC5nZXQoKSkpKTsKICAgICAgICAgICAgIHJlcXVlc3RKU09OLT5wdXNoT2Jq
ZWN0KFdURk1vdmUoZW50cnkpKTsKICAgICAgICAgfQogICAgICAgICBhdXRvIHJlcXVlc3RCdWZm
ZXIgPSB1dGY4QnVmZmVyKHJlcXVlc3RKU09OLT50b0pTT05TdHJpbmcoKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw3ICsxMzIsNyBAQCBTdHJpbmcgSW1hZ2VCdWZm
ZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YVVSCiAgICAgaWYgKGVuY29kZWRJbWFnZS5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiAiZGF0YTosIjsKIAotICAgIHJldHVybiBtYWtlU3RyaW5nKCJkYXRh
OiIsIG1pbWVUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKGVuY29kZWRJbWFnZS5kYXRh
KCksIGVuY29kZWRJbWFnZS5zaXplKCkpKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygiZGF0YToi
LCBtaW1lVHlwZSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChlbmNvZGVkSW1hZ2UpKTsKIH0K
IAogVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGEoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRm
b3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCBzdGF0aWMgU3RyaW5nIGNy
ZWF0ZVVuaXF1ZUZvbnROYW1lKCkKICAgICBHVUlEIGZvbnRVdWlkOwogICAgIENvQ3JlYXRlR3Vp
ZCgmZm9udFV1aWQpOwogCi0gICAgYXV0byBmb250TmFtZSA9IGJhc2U2NEVuY29kZVRvU3RyaW5n
KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZmb250VXVpZCksIHNpemVvZihmb250VXVpZCkpOwor
ICAgIGF1dG8gZm9udE5hbWUgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgJmZvbnRVdWlk
LCAxIH0pOwogICAgIEFTU0VSVChmb250TmFtZS5sZW5ndGgoKSA8IExGX0ZBQ0VTSVpFKTsKICAg
ICByZXR1cm4gZm9udE5hbWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0
YUNhaXJvLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIFN0cmluZyBjcmVhdGVVbmlxdWVGb250TmFtZSgp
CiAgICAgR1VJRCBmb250VXVpZDsKICAgICBDb0NyZWF0ZUd1aWQoJmZvbnRVdWlkKTsKIAotICAg
IGF1dG8gZm9udE5hbWUgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhyZWludGVycHJldF9jYXN0PGNo
YXIqPigmZm9udFV1aWQpLCBzaXplb2YoZm9udFV1aWQpKTsKKyAgICBhdXRvIGZvbnROYW1lID0g
YmFzZTY0RW5jb2RlVG9TdHJpbmcoU3BhbiB7ICZmb250VXVpZCwgMSB9KTsKICAgICBBU1NFUlQo
Zm9udE5hbWUubGVuZ3RoKCkgPCBMRl9GQUNFU0laRSk7CiAgICAgcmV0dXJuIGZvbnROYW1lOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRvck1hYy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU1NMS2V5R2VuZXJh
dG9yTWFjLm1tCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvU1NMS2V5R2VuZXJhdG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksNyArMjE5LDcg
QEAgc3RhdGljIFN0cmluZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZwogICAgIGlmIChTZWNB
c24xRW5jb2RlSXRlbShjb2RlciwgJnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZSwgc2lnbmVk
UHVibGljS2V5QW5kQ2hhbGxlbmdlVGVtcGxhdGUsICZlbmNvZGVkU2lnbmVkUHVibGljS2V5QW5k
Q2hhbGxlbmdlKSAhPSBub0VycikKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0
dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGVuY29kZWRTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVu
Z2UuRGF0YSwgZW5jb2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZS5MZW5ndGgpOworICAg
IHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgZW5jb2RlZFNpZ25lZFB1YmxpY0tl
eUFuZENoYWxsZW5nZS5EYXRhLCBlbmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlLkxl
bmd0aCB9KTsKIH0KIAogQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2Fw
YWJpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcy5oCShyZXZpc2lvbiAyNzg4MDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291
cmNlQ2FwYWJpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCwxNiArMTE0LDE2IEBAIHBy
aXZhdGU6CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBDYXBhYmlsaXR5VmFsdWVPclJh
bmdlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKLSAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmbV9taW5P
clZhbHVlKSwgc2l6ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZhbHVlVW5pb24pKTsKLSAgICBl
bmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPigmbV9tYXgpLCBzaXplb2YoVmFsdWVVbmlvbiksIGFsaWdub2YoVmFsdWVVbmlvbikpOwor
ICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmbV9taW5PclZhbHVlLCAx
IH0sIGFsaWdub2YoVmFsdWVVbmlvbikpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKFNwYW4geyAmbV9tYXgsIDEgfSwgYWxpZ25vZihWYWx1ZVVuaW9uKSk7CiAgICAgZW5jb2Rl
ciA8PCBtX3R5cGU7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CiBib29sIENhcGFiaWxp
dHlWYWx1ZU9yUmFuZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBDYXBhYmlsaXR5VmFsdWVP
clJhbmdlJiB2YWx1ZU9yUmFuZ2UpCiB7Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2YWx1ZU9yUmFuZ2UubV9taW5P
clZhbHVlKSwgc2l6ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZhbHVlVW5pb24pKQotICAgICAg
ICAmJiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPigmdmFsdWVPclJhbmdlLm1fbWF4KSwgc2l6ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZh
bHVlVW5pb24pKQorICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFu
IHsgJnZhbHVlT3JSYW5nZS5tX21pbk9yVmFsdWUsIDEgfSwgYWxpZ25vZihWYWx1ZVVuaW9uKSkK
KyAgICAgICAgJiYgZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZ2YWx1ZU9y
UmFuZ2UubV9tYXgsIDEgfSwgYWxpZ25vZihWYWx1ZVVuaW9uKSkKICAgICAgICAgJiYgZGVjb2Rl
ci5kZWNvZGUodmFsdWVPclJhbmdlLm1fdHlwZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVk
aWFTb3VyY2VDZW50ZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM5LDEzICsxMzksMTMgQEAgc3RhdGljIHZvaWQgYWRkU3RyaW5nVG9TSEEx
KFNIQTEmIHNoYTEsIAogCiAgICAgaWYgKHN0cmluZy5pczhCaXQoKSAmJiBzdHJpbmcuaXNBbGxB
U0NJSSgpKSB7CiAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbnVsbEJ5dGUgPSAwOwotICAgICAgICBz
aGExLmFkZEJ5dGVzKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAg
ICAgICBzaGExLmFkZEJ5dGVzKCZudWxsQnl0ZSwgMSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMo
U3BhbiB7IHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkgfSk7CisgICAgICAg
IHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZudWxsQnl0ZSwgMSB9KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIGF1dG8gdXRmOCA9IHN0cmluZy51dGY4KCk7Ci0gICAgc2hhMS5hZGRCeXRl
cyh1dGY4LmRhdGFBc1VJbnQ4UHRyKCksIHV0ZjgubGVuZ3RoKCkgKyAxKTsgLy8gSW5jbHVkZSB0
ZXJtaW5hdGluZyBudWxsIGJ5dGUuCisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgdXRmOC5kYXRh
QXNVSW50OFB0cigpLCB1dGY4Lmxlbmd0aCgpICsgMSB9KTsgLy8gSW5jbHVkZSB0ZXJtaW5hdGlu
ZyBudWxsIGJ5dGUuCiB9CiAKIFN0cmluZyBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpoYXNo
U3RyaW5nV2l0aFNhbHQoY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgU3RyaW5nJiBoYXNoU2FsdCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlh
bEJhc2UuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0NyZWRlbnRpYWxCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsOCArOTcsOSBA
QCBib29sIENyZWRlbnRpYWxCYXNlOjpjb21wYXJlKGNvbnN0IENyZWRlCiAKIFN0cmluZyBDcmVk
ZW50aWFsQmFzZTo6c2VyaWFsaXphdGlvbkZvckJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcigpIGNv
bnN0CiB7CisgICAgLy8gRklYTUU6IEFkZCBtYWtlU3RyaW5nIHZhcmlhbnQgdGhhdCBjcmVhdGVz
IGEgdXRmOCBidWZmZXIgZGlyZWN0bHkuCiAgICAgYXV0byBjcmVkZW50aWFsU3RyaW5nRGF0YSA9
IG1ha2VTdHJpbmcobV91c2VyLCAnOicsIG1fcGFzc3dvcmQpLnV0ZjgoKTsKLSAgICByZXR1cm4g
bWFrZVN0cmluZygiQmFzaWMgIiwgYmFzZTY0RW5jb2RlZChjcmVkZW50aWFsU3RyaW5nRGF0YSkp
OworICAgIHJldHVybiBtYWtlU3RyaW5nKCJCYXNpYyAiLCBiYXNlNjRFbmNvZGVkKGNyZWRlbnRp
YWxTdHJpbmdEYXRhLmJ5dGVzKCkpKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5j
cHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvQ2VydGlmaWNhdGVJbmZvQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNyArMjEw
LDcgQEAgc3RhdGljIHZvaWQgZW5jb2RlQ0ZEYXRhKEVuY29kZXImIGVuY29kZQogICAgIGNvbnN0
IHVpbnQ4X3QqIGJ5dGVQdHIgPSBDRkRhdGFHZXRCeXRlUHRyKGRhdGEpOwogCiAgICAgZW5jb2Rl
ciA8PCBsZW5ndGg7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYnl0ZVB0ciwg
c3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShTcGFuIHsgYnl0ZVB0ciwgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpIH0pOwog
fQogCiBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4gZGVjb2RlQ0ZE
YXRhKERlY29kZXImIGRlY29kZXIpCkBAIC0yMjUsNyArMjI1LDcgQEAgc3RhdGljIHN0ZDo6b3B0
aW9uYWw8UmV0YWluUHRyPENGRGF0YVJlZgogICAgIGlmICghcG9pbnRlcikKICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0ZShudWxs
cHRyLCBwb2ludGVyLCAqc2l6ZSkpOworICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0ZShu
dWxscHRyLCByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwb2ludGVyKSwgKnNpemUp
KTsKIH0KIAogI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ2VydGlmaWNhdGVJbmZvLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0NlcnRpZmljYXRlSW5m
by5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvQ2VydGlmaWNhdGVJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAg
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8R1JlZlB0cjxHQnl0ZUFycgogICAgIHN0YXRpYyB2b2lk
IGVuY29kZShFbmNvZGVyICZlbmNvZGVyLCBjb25zdCBHUmVmUHRyPEdCeXRlQXJyYXk+JiBieXRl
QXJyYXkpCiAgICAgewogICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90Pihi
eXRlQXJyYXktPmxlbik7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGJ5
dGVBcnJheS0+ZGF0YSwgYnl0ZUFycmF5LT5sZW4pOworICAgICAgICBlbmNvZGVyLmVuY29kZUZp
eGVkTGVuZ3RoRGF0YShTcGFuIHsgYnl0ZUFycmF5LT5kYXRhLCBieXRlQXJyYXktPmxlbiB9KTsK
ICAgICB9CiAKICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxHUmVmUHRyPEdCeXRlQXJyYXk+PiBk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKQEAgLTg3LDcgKzg3LDcgQEAgdGVtcGxhdGU8PiBzdHJ1
Y3QgQ29kZXI8R1JlZlB0cjxHQnl0ZUFycgogCiAgICAgICAgIEdSZWZQdHI8R0J5dGVBcnJheT4g
Ynl0ZUFycmF5ID0gYWRvcHRHUmVmKGdfYnl0ZV9hcnJheV9zaXplZF9uZXcoKnNpemUpKTsKICAg
ICAgICAgZ19ieXRlX2FycmF5X3NldF9zaXplKGJ5dGVBcnJheS5nZXQoKSwgKnNpemUpOwotICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ5dGVBcnJheS0+ZGF0YSwg
KnNpemUpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4g
eyBieXRlQXJyYXktPmRhdGEsICpzaXplIH0pKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKICAgICAgICAgcmV0dXJuIGJ5dGVBcnJheTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAkocmV2aXNpb24gMjc4
ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OmV4
ZWN1dGVDb21tYW5kKCkKICAgICByZXR1cm4gc3RlcCgpID09IFNRTElURV9ET05FOwogfQogCi1p
bnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kQmxvYihpbnQgaW5kZXgsIFNwYW48Y29uc3QgdWludDhf
dD4gYmxvYikKK2ludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgU3Bhbjxj
b25zdCBzdGQ6OmJ5dGU+IGJsb2IpCiB7CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAgQVNT
RVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkp
OwpAQCAtOTUsNiArOTUsMTEgQEAgaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IoaW50IGlu
ZGV4LAogICAgIHJldHVybiBzcWxpdGUzX2JpbmRfYmxvYihtX3N0YXRlbWVudCwgaW5kZXgsIGJs
b2IuZGF0YSgpLCBibG9iLnNpemUoKSwgU1FMSVRFX1RSQU5TSUVOVCk7CiB9CiAKK2ludCBTUUxp
dGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgU3Bhbjxjb25zdCB1aW50OF90PiBibG9i
KQoreworICAgIHJldHVybiBiaW5kQmxvYihpbmRleCwgYXNCeXRlcyhibG9iKSk7Cit9CisKIGlu
dCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0
KQogewogICAgIC8vIFN0cmluZzo6Y2hhcmFjdGVycygpIHJldHVybnMgMCBmb3IgdGhlIGVtcHR5
IHN0cmluZywgd2hpY2ggU1FMaXRlCkBAIC0xMDcsNyArMTEyLDcgQEAgaW50IFNRTGl0ZVN0YXRl
bWVudDo6YmluZEJsb2IoaW50IGluZGV4LAogICAgIGVsc2UKICAgICAgICAgY2hhcmFjdGVycyA9
IHVwY29udmVydGVkQ2hhcmFjdGVyczsKIAotICAgIHJldHVybiBiaW5kQmxvYihpbmRleCwgU3Bh
biB7IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGNoYXJhY3RlcnMpLCB0ZXh0Lmxl
bmd0aCgpICogc2l6ZW9mKFVDaGFyKSB9KTsKKyAgICByZXR1cm4gYmluZEJsb2IoaW5kZXgsIFNw
YW4geyByZWludGVycHJldF9jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGNoYXJhY3RlcnMpLCB0ZXh0
Lmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSB9KTsKIH0KIAogaW50IFNRTGl0ZVN0YXRlbWVudDo6
YmluZFRleHQoaW50IGluZGV4LCBTdHJpbmdWaWV3IHRleHQpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDYgKzM5LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIH5TUUxp
dGVTdGF0ZW1lbnQoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBTUUxpdGVTdGF0ZW1lbnQoU1FMaXRl
U3RhdGVtZW50JiYpOwogICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIGludCBiaW5kQmxvYihpbnQg
aW5kZXgsIFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJp
bmRCbG9iKGludCBpbmRleCwgU3Bhbjxjb25zdCB1aW50OF90Pik7CiAgICAgV0VCQ09SRV9FWFBP
UlQgaW50IGJpbmRCbG9iKGludCBpbmRleCwgY29uc3QgU3RyaW5nJik7CiAgICAgV0VCQ09SRV9F
WFBPUlQgaW50IGJpbmRUZXh0KGludCBpbmRleCwgU3RyaW5nVmlldyk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuY3BwCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDEyICs1NSw3IEBAIHN0YXRpYyBzaXplX3QgbGVu
Z3RoT2ZMaW5lRW5kaW5nQXRJbmRleCgKICAgICByZXR1cm4gMDsKIH0KIAotVmVjdG9yPHVpbnQ4
X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQot
ewotICAgIHJldHVybiBxdW90ZWRQcmludGFibGVFbmNvZGUoaW5wdXQuZGF0YSgpLCBpbnB1dC5z
aXplKCkpOwotfQotCi1WZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0
IHVpbnQ4X3QqIGlucHV0LCBzaXplX3QgaW5wdXRMZW5ndGgpCitzdGF0aWMgVmVjdG9yPHVpbnQ4
X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGlu
cHV0TGVuZ3RoKQogewogICAgIFZlY3Rvcjx1aW50OF90PiBvdXQ7CiAgICAgb3V0LnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoaW5wdXRMZW5ndGgpOwpAQCAtMTE2LDEyICsxMTEsMTIgQEAgVmVjdG9y
PHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjbwogICAgIHJldHVybiBvdXQ7CiB9CiAK
LVZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBpbnB1dCkKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNvZGUoU3Bhbjxj
b25zdCBzdGQ6OmJ5dGU+IGlucHV0KQogewotICAgIHJldHVybiBxdW90ZWRQcmludGFibGVEZWNv
ZGUoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkpOworICAgIHJldHVybiBxdW90ZWRQcmludGFi
bGVFbmNvZGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0YSgpKSwg
aW5wdXQuc2l6ZSgpKTsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29k
ZShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCkKK3N0YXRpYyBWZWN0b3I8
dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVf
dCBkYXRhTGVuZ3RoKQogewogICAgIFZlY3Rvcjx1aW50OF90PiBvdXQ7CiAgICAgaWYgKCFkYXRh
TGVuZ3RoKQpAQCAtMTU2LDQgKzE1MSw5IEBAIFZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFi
bGVEZWNvZGUoY28KICAgICByZXR1cm4gb3V0OwogfQogCitWZWN0b3I8dWludDhfdD4gcXVvdGVk
UHJpbnRhYmxlRGVjb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCkKK3sKKyAgICByZXR1
cm4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+
KGlucHV0LmRhdGEoKSksIGlucHV0LnNpemUoKSk7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvUXVvdGVkUHJpbnRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuaAkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsMTMgKzMxLDExIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1WZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYpOwotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25z
dCB1aW50OF90Kiwgc2l6ZV90KTsKLQotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURl
Y29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mKTsKLVZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmlu
dGFibGVEZWNvZGUoY29uc3QgdWludDhfdCosIHNpemVfdCk7CitWZWN0b3I8dWludDhfdD4gcXVv
dGVkUHJpbnRhYmxlRW5jb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CitWZWN0b3I8dWludDhf
dD4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0
ZWJvYXJkV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
UGFzdGVib2FyZFdpbi5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDcgKzI1
MSw3IEBAIHN0ZDo6b3B0aW9uYWw8UGFzdGVib2FyZEN1c3RvbURhdGE+IFBhc3QKICAgICAgICAg
aWYgKEhBTkRMRSBjYkRhdGEgPSA6OkdldENsaXBib2FyZERhdGEoQ3VzdG9tRGF0YUNsaXBib2Fy
ZEZvcm1hdCkpIHsKICAgICAgICAgICAgIHNpemVfdCBzaXplID0gR2xvYmFsU2l6ZShjYkRhdGEp
OwogICAgICAgICAgICAgYXV0byBkYXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KEdsb2JhbExv
Y2soY2JEYXRhKSk7Ci0gICAgICAgICAgICBhdXRvIGN1c3RvbURhdGEgPSBQYXN0ZWJvYXJkQ3Vz
dG9tRGF0YTo6ZnJvbVBlcnNpc3RlbmNlRGVjb2Rlcih7ZGF0YSwgc2l6ZX0pOworICAgICAgICAg
ICAgYXV0byBjdXN0b21EYXRhID0gUGFzdGVib2FyZEN1c3RvbURhdGE6OmZyb21QZXJzaXN0ZW5j
ZURlY29kZXIoU3BhbiB7IGRhdGEsIHNpemUgfSk7CiAKICAgICAgICAgICAgIEdsb2JhbFVubG9j
ayhjYkRhdGEpOwogICAgICAgICAgICAgOjpDbG9zZUNsaXBib2FyZCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdp
c3RyYXRpb25EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NTksMTAgKzQ1OSwxMCBAQCBib29sIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpk
b1B1c2hDaGFuZ2VzCiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDYs
IHVwZGF0ZVZpYUNhY2hlVG9TdHJpbmcoZGF0YS5yZWdpc3RyYXRpb24udXBkYXRlVmlhQ2FjaGUp
KSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRleHQo
NywgZGF0YS5zY3JpcHRVUkwuc3RyaW5nKCkpICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwg
aW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCg4LCB3b3JrZXJUeXBlVG9TdHJpbmcoZGF0YS53b3Jr
ZXJUeXBlKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJp
bmRCbG9iKDksIFNwYW4geyBjc3BFbmNvZGVyLmJ1ZmZlcigpLCBjc3BFbmNvZGVyLmJ1ZmZlclNp
emUoKSB9KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+Ymlu
ZEJsb2IoOSwgY3NwRW5jb2Rlci5idWZmZXIoKSkgIT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8
fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDEwLCBkYXRhLnJlZmVycmVyUG9saWN5KSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoMTEsIFNw
YW4geyBzY3JpcHRSZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVyKCksIHNjcmlwdFJlc291cmNlTWFw
RW5jb2Rlci5idWZmZXJTaXplKCkgfSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBpbnNl
cnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDEyLCBTcGFuIHsgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5i
dWZmZXIoKSwgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXJTaXplKCkgfSkgIT0gU1FMSVRF
X09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDExLCBzY3JpcHRS
ZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVyKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwg
aW5zZXJ0U3RhdGVtZW50LT5iaW5kQmxvYigxMiwgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZm
ZXIoKSkgIT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPnN0ZXAo
KSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU2Vydmlj
ZVdvcmtlciwgIkZhaWxlZCB0byBzdG9yZSByZWdpc3RyYXRpb24gZGF0YSBpbnRvIHJlY29yZHMg
dGFibGUgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxh
c3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTUxNyw3ICs1MTcs
NyBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yCiAgICAgICAgIHN0
ZDo6b3B0aW9uYWw8Q29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzPiBjb250ZW50
U2VjdXJpdHlQb2xpY3k7CiAgICAgICAgIGF1dG8gY29udGVudFNlY3VyaXR5UG9saWN5RGF0YVNw
YW4gPSBzcWwtPmNvbHVtbkJsb2JBc1NwYW4oOCk7CiAgICAgICAgIGlmIChjb250ZW50U2VjdXJp
dHlQb2xpY3lEYXRhU3Bhbi5zaXplKCkpIHsKLSAgICAgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6
OkRlY29kZXIgY3NwRGVjb2Rlcihjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhU3Bhbi5kYXRhKCks
IGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGFTcGFuLnNpemUoKSk7CisgICAgICAgICAgICBXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGNzcERlY29kZXIgeyBjb250ZW50U2VjdXJpdHlQb2xpY3lE
YXRhU3BhbiB9OwogICAgICAgICAgICAgY3NwRGVjb2RlciA+PiBjb250ZW50U2VjdXJpdHlQb2xp
Y3k7CiAgICAgICAgICAgICBpZiAoIWNvbnRlbnRTZWN1cml0eVBvbGljeSkgewogICAgICAgICAg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIsICJSZWdpc3RyYXRpb25EYXRh
YmFzZTo6aW1wb3J0UmVjb3JkczogRmFpbGVkIHRvIGRlY29kZSBjb250ZW50U2VjdXJpdHlQb2xp
Y3kiKTsKQEAgLTUzMCw3ICs1MzAsNyBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6Omlt
cG9ydFJlY29yCiAgICAgICAgIEhhc2hNYXA8VVJMLCBTZXJ2aWNlV29ya2VyQ29udGV4dERhdGE6
OkltcG9ydGVkU2NyaXB0PiBzY3JpcHRSZXNvdXJjZU1hcDsKICAgICAgICAgYXV0byBzY3JpcHRS
ZXNvdXJjZU1hcERhdGFTcGFuID0gc3FsLT5jb2x1bW5CbG9iQXNTcGFuKDEwKTsKICAgICAgICAg
aWYgKHNjcmlwdFJlc291cmNlTWFwRGF0YVNwYW4uc2l6ZSgpKSB7Ci0gICAgICAgICAgICBXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyIHNjcmlwdFJlc291cmNlTWFwRGVjb2RlcihzY3JpcHRSZXNv
dXJjZU1hcERhdGFTcGFuLmRhdGEoKSwgc2NyaXB0UmVzb3VyY2VNYXBEYXRhU3Bhbi5zaXplKCkp
OworICAgICAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBzY3JpcHRSZXNvdXJjZU1h
cERlY29kZXIgeyBzY3JpcHRSZXNvdXJjZU1hcERhdGFTcGFuIH07CiAgICAgICAgICAgICBzdGQ6
Om9wdGlvbmFsPEhhc2hNYXA8VVJMLCBJbXBvcnRlZFNjcmlwdEF0dHJpYnV0ZXM+PiBzY3JpcHRS
ZXNvdXJjZU1hcFdpdGhvdXRTY3JpcHRzOwogICAgICAgICAgICAgc2NyaXB0UmVzb3VyY2VNYXBE
ZWNvZGVyID4+IHNjcmlwdFJlc291cmNlTWFwV2l0aG91dFNjcmlwdHM7CiAgICAgICAgICAgICBp
ZiAoIXNjcmlwdFJlc291cmNlTWFwV2l0aG91dFNjcmlwdHMpIHsKQEAgLTU0Myw3ICs1NDMsNyBA
QCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yCiAgICAgICAgIGF1dG8g
Y2VydGlmaWNhdGVJbmZvRGF0YVNwYW4gPSBzcWwtPmNvbHVtbkJsb2JBc1NwYW4oMTEpOwogICAg
ICAgICBzdGQ6Om9wdGlvbmFsPENlcnRpZmljYXRlSW5mbz4gY2VydGlmaWNhdGVJbmZvOwogCi0g
ICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgY2VydGlmaWNhdGVJbmZvRGVjb2Rlcihj
ZXJ0aWZpY2F0ZUluZm9EYXRhU3Bhbi5kYXRhKCksIGNlcnRpZmljYXRlSW5mb0RhdGFTcGFuLnNp
emUoKSk7CisgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgY2VydGlmaWNhdGVJbmZv
RGVjb2RlciB7IGNlcnRpZmljYXRlSW5mb0RhdGFTcGFuIH07CiAgICAgICAgIGNlcnRpZmljYXRl
SW5mb0RlY29kZXIgPj4gY2VydGlmaWNhdGVJbmZvOwogICAgICAgICBpZiAoIWNlcnRpZmljYXRl
SW5mbykgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIlJl
Z2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzOiBGYWlsZWQgdG8gZGVjb2RlIGNlcnRp
ZmljYXRlSW5mbyIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZl
ci9TV1NjcmlwdFN0b3JhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvc2VydmljZS9zZXJ2ZXIvU1dTY3JpcHRTdG9yYWdlLmNwcAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NjcmlwdFN0b3JhZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIFN0cmluZyBTV1NjcmlwdFN0b3Jh
Z2U6OnNoYTJIYXNoKGNvbnN0IFMKICAgICBhdXRvIGlucHV0VXRmOCA9IGlucHV0LnV0ZjgoKTsK
ICAgICBjcnlwdG8tPmFkZEJ5dGVzKGlucHV0VXRmOC5kYXRhKCksIGlucHV0VXRmOC5sZW5ndGgo
KSk7CiAgICAgYXV0byBoYXNoID0gY3J5cHRvLT5jb21wdXRlSGFzaCgpOwotICAgIHJldHVybiBi
YXNlNjRVUkxFbmNvZGVUb1N0cmluZyhoYXNoLmRhdGEoKSwgaGFzaC5zaXplKCkpOworICAgIHJl
dHVybiBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhoYXNoKTsKIH0KIAogU3RyaW5nIFNXU2NyaXB0
U3RvcmFnZTo6c2hhMkhhc2goY29uc3QgVVJMJiBpbnB1dCkgY29uc3QKQEAgLTg2LDkgKzg2LDkg
QEAgU2NyaXB0QnVmZmVyIFNXU2NyaXB0U3RvcmFnZTo6c3RvcmUoY29ucwogICAgIGF1dG8gc2Ny
aXB0UGF0aCA9IHRoaXMtPnNjcmlwdFBhdGgocmVnaXN0cmF0aW9uS2V5LCBzY3JpcHRVUkwpOwog
ICAgIEZpbGVTeXN0ZW06Om1ha2VBbGxEaXJlY3RvcmllcyhGaWxlU3lzdGVtOjpwYXJlbnRQYXRo
KHNjcmlwdFBhdGgpKTsKIAotICAgIGF1dG8gaXRlcmF0ZU92ZXJCdWZmZXJBbmRXcml0ZURhdGEg
PSBbJl0oY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIHdyaXRl
RGF0YSkgewotICAgICAgICBmb3IgKGF1dG8gaXQgPSBzY3JpcHQuYnVmZmVyKCktPmJlZ2luKCk7
IGl0ICE9IHNjcmlwdC5idWZmZXIoKS0+ZW5kKCk7ICsraXQpCi0gICAgICAgICAgICB3cml0ZURh
dGEoaXQtPnNlZ21lbnQtPmRhdGEoKSwgaXQtPnNlZ21lbnQtPnNpemUoKSk7CisgICAgYXV0byBp
dGVyYXRlT3ZlckJ1ZmZlckFuZFdyaXRlRGF0YSA9IFsmXShjb25zdCBGdW5jdGlvbjxib29sKFNw
YW48Y29uc3Qgc3RkOjpieXRlPik+JiB3cml0ZURhdGEpIHsKKyAgICAgICAgZm9yIChhdXRvJiBz
ZWdtZW50RW50cnkgOiAqc2NyaXB0LmJ1ZmZlcigpKQorICAgICAgICAgICAgd3JpdGVEYXRhKHNl
Z21lbnRFbnRyeS5zZWdtZW50LT5ieXRlcygpKTsKICAgICB9OwogCiAgICAgaWYgKCFzaG91bGRV
c2VGaWxlTWFwcGluZyhzY3JpcHQuYnVmZmVyKCktPnNpemUoKSkpIHsKQEAgLTk3LDggKzk3LDgg
QEAgU2NyaXB0QnVmZmVyIFNXU2NyaXB0U3RvcmFnZTo6c3RvcmUoY29ucwogICAgICAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIlNXU2NyaXB0U3RvcmFnZTo6c3RvcmU6
IEZhaWx1cmUgdG8gc3RvcmUgJXMsIEZpbGVTeXN0ZW06Om9wZW5GaWxlKCkgZmFpbGVkIiwgc2Ny
aXB0UGF0aC51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAg
IH0KLSAgICAgICAgaXRlcmF0ZU92ZXJCdWZmZXJBbmRXcml0ZURhdGEoWyZdKGNvbnN0IHVpbnQ4
X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gICAgICAgICAgICBGaWxlU3lzdGVtOjp3cml0ZVRv
RmlsZShoYW5kbGUsIGRhdGEsIHNpemUpOworICAgICAgICBpdGVyYXRlT3ZlckJ1ZmZlckFuZFdy
aXRlRGF0YShbJl0oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpIHsKKyAgICAgICAgICAgIEZp
bGVTeXN0ZW06OndyaXRlVG9GaWxlKGhhbmRsZSwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9KTsKICAgICAgICAgRmlsZVN5c3Rl
bTo6Y2xvc2VGaWxlKGhhbmRsZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw4MSBAQAor
MjAyMS0wNi0xMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRv
cHQgU3BhbiBpbiBtb3JlIHBsYWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL0Nh
Y2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdl
OjpDYWNoZTo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6
ZGVjb2RlUmVjb3JkSGVhZGVyKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNo
ZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6
OkNhY2hlczo6c3RvcmVPcmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNh
Y2hlczo6cmVhZE9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6ZW5jb2Rl
Q2FjaGVOYW1lcyk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6ZGVjb2RlQ2FjaGVz
TmFtZXMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6Om1hcFRvRmlsZSBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Y29tcHV0ZVNIQTEpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaDoKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhY2hlOjpEYXRhOjpEYXRhKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6RGF0YTo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fj
aGU6OkRhdGE6OmFkb3B0TWFwKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVFbnRyeS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6
OmVuY29kZUFzU3RvcmFnZVJlY29yZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6RW50cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQpOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6aGFzaFN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6S2V5Ojpj
b21wdXRlSGFzaCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6S2V5Ojpj
b21wdXRlUGFydGl0aW9uSGFzaCBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNo
ZTo6ZGVjb2RlUmVjb3JkTWV0YURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6
OmVuY29kZVJlY29yZE1ldGFEYXRhKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6U3VicmVzb3VyY2VzRW50cnk6OmVuY29kZUFzU3RvcmFnZVJlY29yZCBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3VicmVzb3VyY2VzRW50cnk6OmRlY29k
ZVN0b3JhZ2VSZWNvcmQpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVyLmg6
CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQ
Qzo6QXJndW1lbnRDb2RlcjxDU3RyaW5nPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1l
bnRDb2RlcjxDU3RyaW5nPjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxT
dHJpbmc+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpkZWNvZGVTdHJpbmdUZXh0KToKKyAgICAg
ICAgKElQQzo6QXJndW1lbnRDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUpOgorICAgICAgICAo
SVBDOjpBcmd1bWVudENvZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29kZSk6CisgICAgICAgICogUGxh
dGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgIChJUEM6OlNpbXBsZUFyZ3VtZW50
Q29kZXI6OmVuY29kZSk6CisgICAgICAgIChJUEM6OlNpbXBsZUFyZ3VtZW50Q29kZXI6OmRlY29k
ZSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FycmF5UmVmZXJlbmNlLmg6CisgICAgICAgICog
UGxhdGZvcm0vSVBDL0RlY29kZXIuY3BwOgorICAgICAgICAoSVBDOjpEZWNvZGVyOjpkZWNvZGVG
aXhlZExlbmd0aERhdGEpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9EZWNvZGVyLmg6CisgICAg
ICAgIChJUEM6OkRlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgICogUGxh
dGZvcm0vSVBDL0VuY29kZXIuY3BwOgorICAgICAgICAoSVBDOjpFbmNvZGVyOjplbmNvZGVGaXhl
ZExlbmd0aERhdGEpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9FbmNvZGVyLmg6CisgICAgICAg
ICogUGxhdGZvcm0vSVBDL1NoYXJlZEJ1ZmZlckNvcHkuY3BwOgorICAgICAgICAoSVBDOjpTaGFy
ZWRCdWZmZXJDb3B5OjplbmNvZGUgY29uc3QpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9TdHJl
YW1Db25uZWN0aW9uRW5jb2Rlci5oOgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuY3BwOgorICAgICAgICAoSVBDOjplbmNvZGVTaGFyZWRCdWZmZXIpOgorICAgICAgICAo
SVBDOjpkZWNvZGVTaGFyZWRCdWZmZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJQ29u
dGVudFJ1bGVMaXN0U3RvcmUuY3BwOgorICAgICAgICAoQVBJOjplbmNvZGVDb250ZW50UnVsZUxp
c3RNZXRhRGF0YSk6CisgICAgICAgIChBUEk6OmdldERhdGEpOgorICAgICAgICAoQVBJOjpkZWNv
ZGVDb250ZW50UnVsZUxpc3RNZXRhRGF0YSk6CisgICAgICAgIChBUEk6OndyaXRlRGF0YVRvRmls
ZSk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpIaXN0b3J5RW50cnlEYXRhRW5jb2Rlcjo6b3BlcmF0b3I8PCk6
CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFFbmNvZGVyOjplbmNvZGVBcml0aG1l
dGljVHlwZSk6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFFbmNvZGVyOjplbmNv
ZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAoV2ViS2l0OjpIaXN0b3J5RW50cnlEYXRhRGVj
b2Rlcjo6b3BlcmF0b3I+Pik6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFEZWNv
ZGVyOjpkZWNvZGVBcml0aG1ldGljVHlwZSk6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRy
eURhdGFEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGlu
Z0FQSTo6ZW5jb2RlVHlwZWRBcnJheSk6CisKIDIwMjEtMDYtMTEgIFJ5YW4gSGFkZGFkICA8cnlh
bmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyNzg3
NTQuCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1
cmVtZW50TWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkp
CisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50
TWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMyw3ICszMjMsNyBAQCB2b2lkIFByaXZh
dGVDbGlja01lYXN1cmVtZW50TWFuYWdlcjo6ZmlyCiAgICAgICAgIGNyeXB0by0+YWRkQnl0ZXMo
cHVibGljS2V5RGF0YS0+ZGF0YSgpLCBwdWJsaWNLZXlEYXRhLT5zaXplKCkpOwogICAgICAgICBh
dXRvIHB1YmxpY0tleURhdGFIYXNoID0gY3J5cHRvLT5jb21wdXRlSGFzaCgpOwogCi0gICAgICAg
IGF1dG8ga2V5SUQgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhwdWJsaWNLZXlEYXRhSGFzaC5k
YXRhKCksIHB1YmxpY0tleURhdGFIYXNoLnNpemUoKSk7CisgICAgICAgIGF1dG8ga2V5SUQgPSBi
YXNlNjRVUkxFbmNvZGVUb1N0cmluZyhwdWJsaWNLZXlEYXRhSGFzaCk7CiAgICAgICAgIGlmIChr
ZXlJRCAhPSBhdHRyaWJ1dGlvbi5zb3VyY2VVbmxpbmthYmxlVG9rZW4oKS0+a2V5SURCYXNlNjRV
UkwpCiAgICAgICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUu
Y3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTY1LDcg
KzU2NSw3IEBAIFN0b3JhZ2U6OlJlY29yZCBDYWNoZTo6ZW5jb2RlKGNvbnN0IFJlY28KIAogICAg
IGVuY29kZXIuZW5jb2RlQ2hlY2tzdW0oKTsKIAotICAgIERhdGEgaGVhZGVyKGVuY29kZXIuYnVm
ZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICBEYXRhIGhlYWRlcihlbmNvZGVyLmJ1
ZmZlcigpKTsKICAgICBEYXRhIGJvZHk7CiAgICAgV1RGOjpzd2l0Y2hPbihyZWNvcmQucmVzcG9u
c2VCb2R5LCBbXShjb25zdCBSZWY8V2ViQ29yZTo6Rm9ybURhdGE+JiBmb3JtRGF0YSkgewogICAg
ICAgICAvLyBGSVhNRTogU3RvcmUgZm9ybSBkYXRhIGJvZHkuCkBAIC02MjgsOSArNjI4LDkgQEAg
c3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RE9NQ2FjaGVFbgogICAgIH19OwogfQogCi1z
dGQ6Om9wdGlvbmFsPENhY2hlOjpEZWNvZGVkUmVjb3JkPiBDYWNoZTo6ZGVjb2RlUmVjb3JkSGVh
ZGVyKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYgc3RvcmFnZSkKK3N0ZDo6b3B0aW9uYWw8Q2FjaGU6
OkRlY29kZWRSZWNvcmQ+IENhY2hlOjpkZWNvZGVSZWNvcmRIZWFkZXIoY29uc3QgU3RvcmFnZTo6
UmVjb3JkJiBzdG9yYWdlRW50cnkpCiB7Ci0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBk
ZWNvZGVyKHN0b3JhZ2UuaGVhZGVyLmRhdGEoKSwgc3RvcmFnZS5oZWFkZXIuc2l6ZSgpKTsKKyAg
ICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyBzdG9yYWdlRW50cnkuaGVhZGVy
LmJ5dGVzKCkgfTsKIAogICAgIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBpbnNlcnRpb25UaW1lOwog
ICAgIGRlY29kZXIgPj4gaW5zZXJ0aW9uVGltZTsKQEAgLTY1MywxNSArNjUzLDE1IEBAIHN0ZDo6
b3B0aW9uYWw8Q2FjaGU6OkRlY29kZWRSZWNvcmQ+IENhY2gKICAgICB9fTsKIH0KIAotc3RkOjpv
cHRpb25hbDxSZWNvcmQ+IENhY2hlOjpkZWNvZGUoY29uc3QgU3RvcmFnZTo6UmVjb3JkJiBzdG9y
YWdlKQorc3RkOjpvcHRpb25hbDxSZWNvcmQ+IENhY2hlOjpkZWNvZGUoY29uc3QgU3RvcmFnZTo6
UmVjb3JkJiBzdG9yYWdlRW50cnkpCiB7Ci0gICAgYXV0byByZXN1bHQgPSBkZWNvZGVSZWNvcmRI
ZWFkZXIoc3RvcmFnZSk7CisgICAgYXV0byByZXN1bHQgPSBkZWNvZGVSZWNvcmRIZWFkZXIoc3Rv
cmFnZUVudHJ5KTsKIAogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwogCiAgICAgYXV0byByZWNvcmQgPSBXVEZNb3ZlKHJlc3VsdC0+cmVjb3JkKTsKLSAgICBy
ZWNvcmQucmVzcG9uc2VCb2R5ID0gV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUoc3RvcmFn
ZS5ib2R5LmRhdGEoKSwgc3RvcmFnZS5ib2R5LnNpemUoKSk7CisgICAgcmVjb3JkLnJlc3BvbnNl
Qm9keSA9IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHN0b3JhZ2VFbnRyeS5ib2R5LmJ5
dGVzKCkpOwogCiAgICAgcmV0dXJuIHJlY29yZDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2lu
ZUNhY2hlcy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA1LDE0ICsxMDUsMTQgQEAgdm9pZCBDYWNoZXM6OnN0b3JlT3JpZ2luKENvbXBsZXRpb25D
YWxsYgogICAgIGVuY29kZXIgPDwgbV9vcmlnaW4uY2xpZW50T3JpZ2luLnByb3RvY29sOwogICAg
IGVuY29kZXIgPDwgbV9vcmlnaW4uY2xpZW50T3JpZ2luLmhvc3Q7CiAgICAgZW5jb2RlciA8PCBt
X29yaWdpbi5jbGllbnRPcmlnaW4ucG9ydDsKLSAgICBtX2VuZ2luZS0+d3JpdGVGaWxlKGNhY2hl
c09yaWdpbkZpbGVuYW1lKG1fcm9vdFBhdGgpLCBEYXRhIHsgZW5jb2Rlci5idWZmZXIoKSwgZW5j
b2Rlci5idWZmZXJTaXplKCkgfSwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKHN0ZDo6b3B0aW9u
YWw8RXJyb3I+JiYgZXJyb3IpIG11dGFibGUgeworICAgIG1fZW5naW5lLT53cml0ZUZpbGUoY2Fj
aGVzT3JpZ2luRmlsZW5hbWUobV9yb290UGF0aCksIERhdGEgeyBlbmNvZGVyLmJ1ZmZlcigpIH0s
IFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildIChzdGQ6Om9wdGlvbmFsPEVycm9yPiYmIGVycm9yKSBt
dXRhYmxlIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShlcnJvcikpOwogICAg
IH0pOwogfQogCiBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gQ2FjaGVzOjpy
ZWFkT3JpZ2luKGNvbnN0IERhdGEmIGRhdGEpCiB7Ci0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVj
b2RlciBkZWNvZGVyKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgV1RGOjpQZXJzaXN0
ZW5jZTo6RGVjb2RlciBkZWNvZGVyIHsgZGF0YS5ieXRlcygpIH07CiAKICAgICBzdGQ6Om9wdGlv
bmFsPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gdG9wT3JpZ2luOwogICAgIGRlY29kZXIg
Pj4gdG9wT3JpZ2luOwpAQCAtNDA0LDEyICs0MDQsMTMgQEAgc3RhdGljIGlubGluZSBEYXRhIGVu
Y29kZUNhY2hlTmFtZXMoY29ucwogICAgICAgICBlbmNvZGVyIDw8IGNhY2hlLnVuaXF1ZU5hbWUo
KTsKICAgICB9CiAKLSAgICByZXR1cm4gRGF0YSB7IGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIu
YnVmZmVyU2l6ZSgpIH07CisgICAgcmV0dXJuIERhdGEgeyBlbmNvZGVyLmJ1ZmZlcigpIH07CiB9
CiAKIHN0YXRpYyBpbmxpbmUgRXhwZWN0ZWQ8VmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmlu
Zz4+LCBFcnJvcj4gZGVjb2RlQ2FjaGVzTmFtZXMoY29uc3QgRGF0YSYgZGF0YSkKIHsKLSAgICBX
VEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgp
KTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyBkYXRhLmJ5dGVzKCkg
fTsKKwogICAgIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGNvdW50OwogICAgIGRlY29kZXIgPj4g
Y291bnQ7CiAgICAgaWYgKCFjb3VudCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcAkocmV2aXNpb24gMjc4
ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVE
YXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBuYW1lc3BhY2UgTmV0d29y
a0NhY2hlIHsKIERhdGEgRGF0YTo6bWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkgY29uc3QK
IHsKICAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlOwotICAgIGF1dG8g
YXBwbHlEYXRhID0gWyZdKGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCosIHNpemVf
dCk+JiBhcHBsaWVyKSB7IGFwcGx5KGFwcGxpZXIpOyB9OworICAgIGF1dG8gYXBwbHlEYXRhID0g
WyZdKGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mIGFwcGxpZXIp
IHsgYXBwbHkoYXBwbGllcik7IH07CiAgICAgYXV0byBtYXBwZWRGaWxlID0gRmlsZVN5c3RlbTo6
bWFwVG9GaWxlKHBhdGgsIHNpemUoKSwgV1RGTW92ZShhcHBseURhdGEpLCAmaGFuZGxlKTsKICAg
ICBpZiAoIW1hcHBlZEZpbGUpCiAgICAgICAgIHJldHVybiB7IH07CkBAIC04Niw5ICs4Niw5IEBA
IERhdGEgYWRvcHRBbmRNYXBGaWxlKEZpbGVTeXN0ZW06OlBsYXRmb3IKIFNIQTE6OkRpZ2VzdCBj
b21wdXRlU0hBMShjb25zdCBEYXRhJiBkYXRhLCBjb25zdCBTYWx0JiBzYWx0KQogewogICAgIFNI
QTEgc2hhMTsKLSAgICBzaGExLmFkZEJ5dGVzKHNhbHQuZGF0YSgpLCBzYWx0LnNpemUoKSk7Ci0g
ICAgZGF0YS5hcHBseShbJnNoYTFdKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7
Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMoZGF0YSwgc2l6ZSk7CisgICAgc2hhMS5hZGRCeXRlcyhz
YWx0KTsKKyAgICBkYXRhLmFwcGx5KFsmc2hhMV0oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEp
IHsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhkYXRhKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CiAjaW5jbHVk
ZSA8d3RmL0Z1bmN0aW9uRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPHd0Zi9TSEExLmg+CisjaW5j
bHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNTQsNiArNTUsMTAgQEAgY2xh
c3MgRGF0YSB7CiBwdWJsaWM6CiAgICAgRGF0YSgpIHsgfQogICAgIERhdGEoY29uc3QgdWludDhf
dCosIHNpemVfdCk7CisgICAgRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKKyAgICAg
ICAgOiBEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuZGF0YSgpKSwg
ZGF0YS5zaXplKCkpCisgICAgeworICAgIH0KIAogICAgIH5EYXRhKCkgeyB9CiAKQEAgLTc0LDEy
ICs3OSwxNSBAQCBwdWJsaWM6CiAKICAgICBjb25zdCB1aW50OF90KiBkYXRhKCkgY29uc3Q7CiAg
ICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKworICAgIFNwYW48Y29u
c3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0IHsgcmV0dXJuIGFzQnl0ZXMoU3BhbiB7IGRhdGEo
KSwgc2l6ZSgpIH0pOyB9CisKICAgICBib29sIGlzTWFwKCkgY29uc3QgeyByZXR1cm4gbV9pc01h
cDsgfQogICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHRyeUNyZWF0ZVNoYXJlZE1lbW9yeSgpIGNv
bnN0OwogCiAgICAgRGF0YSBzdWJyYW5nZShzaXplX3Qgb2Zmc2V0LCBzaXplX3QpIGNvbnN0Owog
Ci0gICAgYm9vbCBhcHBseShjb25zdCBGdW5jdGlvbjxib29sIChjb25zdCB1aW50OF90Kiwgc2l6
ZV90KT4mKSBjb25zdDsKKyAgICBib29sIGFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2wgKFNwYW48
Y29uc3Qgc3RkOjpieXRlPik+JikgY29uc3Q7CiAKICAgICBEYXRhIG1hcFRvRmlsZShjb25zdCBT
dHJpbmcmIHBhdGgpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVEYXRhQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTY5LDEyICs2OSwxMiBAQCBib29s
IERhdGE6OmlzTnVsbCgpIGNvbnN0CiAgICAgcmV0dXJuICFtX2Rpc3BhdGNoRGF0YTsKIH0KIAot
Ym9vbCBEYXRhOjphcHBseShjb25zdCBGdW5jdGlvbjxib29sIChjb25zdCB1aW50OF90Kiwgc2l6
ZV90KT4mIGFwcGxpZXIpIGNvbnN0Citib29sIERhdGE6OmFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJv
b2wgKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+JiBhcHBsaWVyKSBjb25zdAogewogICAgIGlmICgh
bV9zaXplKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIGRpc3BhdGNoX2RhdGFf
YXBwbHkobV9kaXNwYXRjaERhdGEuZ2V0KCksIFsmYXBwbGllcl0oZGlzcGF0Y2hfZGF0YV90LCBz
aXplX3QsIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gICAgICAgIHJldHVybiBh
cHBsaWVyKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgc2l6ZSk7CisgICAgICAg
IHJldHVybiBhcHBsaWVyKFNwYW4geyBzdGF0aWNfY2FzdDxjb25zdCBzdGQ6OmJ5dGUqPihkYXRh
KSwgc2l6ZSB9KTsKICAgICB9KTsKIH0KIApAQCAtOTQsMTQgKzk0LDExIEBAIERhdGEgY29uY2F0
ZW5hdGUoY29uc3QgRGF0YSYgYSwgY29uc3QgRGEKIAogRGF0YSBEYXRhOjphZG9wdE1hcChGaWxl
U3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIG1hcHBlZEZpbGUsIEZpbGVTeXN0ZW06OlBsYXRmb3Jt
RmlsZUhhbmRsZSBmZCkKIHsKLSAgICBzaXplX3Qgc2l6ZSA9IG1hcHBlZEZpbGUuc2l6ZSgpOwot
ICAgIHZvaWQqIG1hcCA9IG1hcHBlZEZpbGUubGVha0hhbmRsZSgpOwotICAgIEFTU0VSVChtYXAp
OwotICAgIEFTU0VSVChtYXAgIT0gTUFQX0ZBSUxFRCk7CisgICAgYXV0byBtYXAgPSBtYXBwZWRG
aWxlLmxlYWtIYW5kbGUoKTsKKyAgICBBU1NFUlQobWFwLmRhdGEoKSk7CisgICAgQVNTRVJUKG1h
cC5kYXRhKCkgIT0gTUFQX0ZBSUxFRCk7CiAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGZkKTsK
LSAgICBhdXRvIGJvZHlNYXAgPSBhZG9wdE9TT2JqZWN0KGRpc3BhdGNoX2RhdGFfY3JlYXRlKG1h
cCwgc2l6ZSwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklU
WV9ERUZBVUxULCAwKSwgW21hcCwgc2l6ZV0gewotICAgICAgICBtdW5tYXAobWFwLCBzaXplKTsK
LSAgICB9KSk7CisgICAgYXV0byBib2R5TWFwID0gYWRvcHRPU09iamVjdChkaXNwYXRjaF9kYXRh
X2NyZWF0ZShtYXAuZGF0YSgpLCBtYXAuc2l6ZSgpLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVl
KERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCBESVNQQVRDSF9EQVRBX0RFU1RS
VUNUT1JfTVVOTUFQKSk7CiAgICAgcmV0dXJuIHsgV1RGTW92ZShib2R5TWFwKSwgRGF0YTo6QmFj
a2luZzo6TWFwIH07CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCShyZXZpc2lvbiAyNzg4MDkp
CisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksMTAgKzk5LDEwIEBAIFN0b3JhZ2U6OlJlY29yZCBF
bnRyeTo6ZW5jb2RlQXNTdG9yYWdlUmUKICAgICAKICAgICBlbmNvZGVyLmVuY29kZUNoZWNrc3Vt
KCk7CiAKLSAgICBEYXRhIGhlYWRlcihlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNp
emUoKSk7CisgICAgRGF0YSBoZWFkZXIgeyBlbmNvZGVyLmJ1ZmZlcigpIH07CiAgICAgRGF0YSBi
b2R5OwogICAgIGlmIChtX2J1ZmZlcikKLSAgICAgICAgYm9keSA9IHsgbV9idWZmZXItPmRhdGEo
KSwgbV9idWZmZXItPnNpemUoKSB9OworICAgICAgICBib2R5ID0geyBtX2J1ZmZlci0+Ynl0ZXMo
KSB9OwogCiAgICAgcmV0dXJuIHsgbV9rZXksIG1fdGltZVN0YW1wLCBoZWFkZXIsIGJvZHksIHsg
fSB9OwogfQpAQCAtMTExLDcgKzExMSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gRW50cnk6
OmRlY29kZVN0b3IKIHsKICAgICBhdXRvIGVudHJ5ID0gbWFrZVVuaXF1ZTxFbnRyeT4oc3RvcmFn
ZUVudHJ5KTsKIAotICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihzdG9yYWdl
RW50cnkuaGVhZGVyLmRhdGEoKSwgc3RvcmFnZUVudHJ5LmhlYWRlci5zaXplKCkpOworICAgIFdU
Rjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlciB7IHN0b3JhZ2VFbnRyeS5oZWFkZXIuYnl0
ZXMoKSB9OwogICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CiAgICAgaWYg
KCFXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlOjpkZWNvZGUoZGVjb2RlciwgcmVzcG9uc2UpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTE5MSw3ICsxOTEsNyBAQCB2b2lkIEVudHJ5Ojpp
bml0aWFsaXplQnVmZmVyRnJvbVN0b3JhZ2VSCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQog
I2VuZGlmCi0gICAgbV9idWZmZXIgPSBXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZShtX3Nv
dXJjZVN0b3JhZ2VSZWNvcmQuYm9keS5kYXRhKCksIG1fc291cmNlU3RvcmFnZVJlY29yZC5ib2R5
LnNpemUoKSk7CisgICAgbV9idWZmZXIgPSBXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZSht
X3NvdXJjZVN0b3JhZ2VSZWNvcmQuYm9keS5ieXRlcygpKTsKIH0KIAogV2ViQ29yZTo6U2hhcmVk
QnVmZmVyKiBFbnRyeTo6YnVmZmVyKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5jcHAJKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlS2V5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTMgKzg4LDEzIEBAIHN0YXRpYyB2b2lk
IGhhc2hTdHJpbmcoU0hBMSYgc2hhMSwgY29uc3QKIAogICAgIGlmIChzdHJpbmcuaXM4Qml0KCkg
JiYgc3RyaW5nLmlzQWxsQVNDSUkoKSkgewogICAgICAgICBjb25zdCB1aW50OF90IG51bGxCeXRl
ID0gMDsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5n
Lmxlbmd0aCgpKTsKLSAgICAgICAgc2hhMS5hZGRCeXRlcygmbnVsbEJ5dGUsIDEpOworICAgICAg
ICBzaGExLmFkZEJ5dGVzKFNwYW4geyBzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0
aCgpIH0pOworICAgICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmbnVsbEJ5dGUsIDEgfSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byBjU3RyaW5nID0gc3RyaW5nLnV0ZjgoKTsK
ICAgICAvLyBJbmNsdWRlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4KLSAgICBzaGExLmFkZEJ5dGVz
KGNTdHJpbmcuZGF0YUFzVUludDhQdHIoKSwgY1N0cmluZy5sZW5ndGgoKSArIDEpOworICAgIHNo
YTEuYWRkQnl0ZXMoU3BhbiB7IGNTdHJpbmcuZGF0YUFzVUludDhQdHIoKSwgY1N0cmluZy5sZW5n
dGgoKSArIDEgfSk7CiB9CiAKIEtleTo6SGFzaFR5cGUgS2V5Ojpjb21wdXRlSGFzaChjb25zdCBT
YWx0JiBzYWx0KSBjb25zdApAQCAtMTAyLDcgKzEwMiw3IEBAIEtleTo6SGFzaFR5cGUgS2V5Ojpj
b21wdXRlSGFzaChjb25zdCBTYWwKICAgICAvLyBXZSBkb24ndCByZWFsbHkgbmVlZCBhIGNyeXB0
b2dyYXBoaWMgaGFzaC4gVGhlIGtleSBpcyBhbHdheXMgdmVyaWZpZWQgYWdhaW5zdCB0aGUgZW50
cnkgaGVhZGVyLgogICAgIC8vIFNIQTEganVzdCBoYXBwZW5zIHRvIGJlIHN1aXRhYmx5IHNpemVk
LCBmYXN0IGFuZCBhdmFpbGFibGUuCiAgICAgU0hBMSBzaGExOwotICAgIHNoYTEuYWRkQnl0ZXMo
c2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKTsKKyAgICBzaGExLmFkZEJ5dGVzKHNhbHQpOwogCiAg
ICAgaGFzaFN0cmluZyhzaGExLCBtX3BhcnRpdGlvbik7CiAgICAgaGFzaFN0cmluZyhzaGExLCBt
X3R5cGUpOwpAQCAtMTE3LDcgKzExNyw3IEBAIEtleTo6SGFzaFR5cGUgS2V5Ojpjb21wdXRlSGFz
aChjb25zdCBTYWwKIEtleTo6SGFzaFR5cGUgS2V5Ojpjb21wdXRlUGFydGl0aW9uSGFzaChjb25z
dCBTYWx0JiBzYWx0KSBjb25zdAogewogICAgIFNIQTEgc2hhMTsKLSAgICBzaGExLmFkZEJ5dGVz
KHNhbHQuZGF0YSgpLCBzYWx0LnNpemUoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhzYWx0KTsKIAog
ICAgIGhhc2hTdHJpbmcoc2hhMSwgbV9wYXJ0aXRpb24pOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFn
ZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1NCw4ICs0
NTQsOCBAQCBzdHJ1Y3QgUmVjb3JkTWV0YURhdGEgewogc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVS
TiBib29sIGRlY29kZVJlY29yZE1ldGFEYXRhKFJlY29yZE1ldGFEYXRhJiBtZXRhRGF0YSwgY29u
c3QgRGF0YSYgZmlsZURhdGEpCiB7CiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgZmls
ZURhdGEuYXBwbHkoWyZtZXRhRGF0YSwgJnN1Y2Nlc3NdKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNp
emVfdCBzaXplKSB7Ci0gICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2Rlcihk
YXRhLCBzaXplKTsKKyAgICBmaWxlRGF0YS5hcHBseShbJm1ldGFEYXRhLCAmc3VjY2Vzc10oU3Bh
bjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpIHsKKyAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVj
b2RlciBkZWNvZGVyKGRhdGEpOwogICAgICAgICAKICAgICAgICAgc3RkOjpvcHRpb25hbDx1bnNp
Z25lZD4gY2FjaGVTdG9yYWdlVmVyc2lvbjsKICAgICAgICAgZGVjb2RlciA+PiBjYWNoZVN0b3Jh
Z2VWZXJzaW9uOwpAQCAtNTg2LDcgKzU4Niw3IEBAIHN0YXRpYyBEYXRhIGVuY29kZVJlY29yZE1l
dGFEYXRhKGNvbnN0IFIKIAogICAgIGVuY29kZXIuZW5jb2RlQ2hlY2tzdW0oKTsKIAotICAgIHJl
dHVybiBEYXRhKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICBy
ZXR1cm4geyBlbmNvZGVyLmJ1ZmZlcigpIH07CiB9CiAKIHN0ZDo6b3B0aW9uYWw8QmxvYlN0b3Jh
Z2U6OkJsb2I+IFN0b3JhZ2U6OnN0b3JlQm9keUFzQmxvYihXcml0ZU9wZXJhdGlvbiYgd3JpdGVP
cGVyYXRpb24pCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcAko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMywx
NCArMTIzLDE0IEBAIFN0b3JhZ2U6OlJlY29yZCBTdWJyZXNvdXJjZXNFbnRyeTo6ZW5jb2QKIAog
ICAgIGVuY29kZXIuZW5jb2RlQ2hlY2tzdW0oKTsKIAotICAgIHJldHVybiB7IG1fa2V5LCBtX3Rp
bWVTdGFtcCwgeyBlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSB9LCB7IH0s
IHsgfX07CisgICAgcmV0dXJuIHsgbV9rZXksIG1fdGltZVN0YW1wLCB7IGVuY29kZXIuYnVmZmVy
KCkgfSwgeyB9LCB7IH19OwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8U3VicmVzb3VyY2VzRW50cnk+
IFN1YnJlc291cmNlc0VudHJ5OjpkZWNvZGVTdG9yYWdlUmVjb3JkKGNvbnN0IFN0b3JhZ2U6OlJl
Y29yZCYgc3RvcmFnZUVudHJ5KQogewogICAgIGF1dG8gZW50cnkgPSBtYWtlVW5pcXVlPFN1YnJl
c291cmNlc0VudHJ5PihzdG9yYWdlRW50cnkpOwogCi0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVj
b2RlciBkZWNvZGVyKHN0b3JhZ2VFbnRyeS5oZWFkZXIuZGF0YSgpLCBzdG9yYWdlRW50cnkuaGVh
ZGVyLnNpemUoKSk7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyIHsgc3Rv
cmFnZUVudHJ5LmhlYWRlci5ieXRlcygpIH07CiAgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8U3Vi
cmVzb3VyY2VJbmZvPj4gc3VicmVzb3VyY2VzOwogICAgIGRlY29kZXIgPj4gc3VicmVzb3VyY2Vz
OwogICAgIGlmICghc3VicmVzb3VyY2VzKQpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9J
UEMvQXJndW1lbnRDb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0v
SVBDL0FyZ3VtZW50Q29kZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9JUEMvQXJndW1lbnRDb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSwxMyArNzks
MTMgQEAgc3RydWN0IEFyZ3VtZW50Q29kZXI8VCwgdHlwZW5hbWUgc3RkOjplbgogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEVuY29kZXI+CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIFQgdmFsdWUpCiAgICAgewotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3Ro
RGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmdmFsdWUpLCBzaXplb2YoVCks
IGFsaWdub2YoVCkpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFu
IHsgJnZhbHVlLCAxIH0pOwogICAgIH0KIAogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFQ+IGRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKICAgICAgICAgVCByZXN1bHQ7Ci0gICAgICAg
IGlmIChkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPigmcmVzdWx0KSwgc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKSkKKyAgICAgICAgaWYgKGRlY29k
ZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmcmVzdWx0LCAxIH0pKQogICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuY3BwCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENv
ZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBBcmd1bWVudENv
ZGVyPENTdHJpbmc+OjplbmNvZGUoRW5jbwogCiAgICAgdWludDMyX3QgbGVuZ3RoID0gc3RyaW5n
Lmxlbmd0aCgpOwogICAgIGVuY29kZXIgPDwgbGVuZ3RoOwotICAgIGVuY29kZXIuZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKHN0cmluZy5kYXRhQXNVSW50OFB0cigpLCBsZW5ndGgsIDEpOworICAgIGVu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0cmluZy5ieXRlcygpKTsKIH0KIAogV0FSTl9V
TlVTRURfUkVUVVJOIGJvb2wgQXJndW1lbnRDb2RlcjxDU3RyaW5nPjo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIsIENTdHJpbmcmIHJlc3VsdCkKQEAgLTEwMyw3ICsxMDMsNyBAQCBXQVJOX1VOVVNF
RF9SRVRVUk4gYm9vbCBBcmd1bWVudENvZGVyPENTCiAKICAgICBjaGFyKiBidWZmZXI7CiAgICAg
Q1N0cmluZyBzdHJpbmcgPSBDU3RyaW5nOjpuZXdVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVy
KTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDhfdCo+KGJ1ZmZlciksIGxlbmd0aCwgMSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgYnVmZmVyLCBsZW5ndGggfSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIHJlc3VsdCA9IHN0cmluZzsKQEAgLTEyMywxMSArMTIzLDcgQEAgdm9p
ZCBBcmd1bWVudENvZGVyPFN0cmluZz46OmVuY29kZShFbmNvZAogICAgIGJvb2wgaXM4Qml0ID0g
c3RyaW5nLmlzOEJpdCgpOwogCiAgICAgZW5jb2RlciA8PCBsZW5ndGggPDwgaXM4Qml0OwotCi0g
ICAgaWYgKGlzOEJpdCkKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3Ry
aW5nLmNoYXJhY3RlcnM4KCksIGxlbmd0aCAqIHNpemVvZihMQ2hhciksIGFsaWdub2YoTENoYXIp
KTsKLSAgICBlbHNlCi0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHN0cmluZy5jaGFyYWN0ZXJzMTYoKSksIGxlbmd0
aCAqIHNpemVvZihVQ2hhciksIGFsaWdub2YoVUNoYXIpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZp
eGVkTGVuZ3RoRGF0YShzdHJpbmcuYnl0ZXMoKSk7CiB9CiB0ZW1wbGF0ZQogdm9pZCBBcmd1bWVu
dENvZGVyPFN0cmluZz46OmVuY29kZTxFbmNvZGVyPihFbmNvZGVyJiwgY29uc3QgU3RyaW5nJik7
CkBAIC0xNDMsNyArMTM5LDcgQEAgc3RhdGljIGlubGluZSBzdGQ6Om9wdGlvbmFsPFN0cmluZz4g
ZGVjbwogICAgIAogICAgIENoYXJhY3RlclR5cGUqIGJ1ZmZlcjsKICAgICBTdHJpbmcgc3RyaW5n
ID0gU3RyaW5nOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+
KGJ1ZmZlciksIGxlbmd0aCAqIHNpemVvZihDaGFyYWN0ZXJUeXBlKSwgYWxpZ25vZihDaGFyYWN0
ZXJUeXBlKSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsg
YnVmZmVyLCBsZW5ndGggfSkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgCiAg
ICAgcmV0dXJuIHN0cmluZzsKQEAgLTE4MSwxMiArMTc3LDEyIEBAIFdBUk5fVU5VU0VEX1JFVFVS
TiBib29sIEFyZ3VtZW50Q29kZXI8U3QKIAogdm9pZCBBcmd1bWVudENvZGVyPFNIQTE6OkRpZ2Vz
dD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTSEExOjpEaWdlc3QmIGRpZ2VzdCkK
IHsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3QuZGF0YSgpLCBzaXpl
b2YoZGlnZXN0KSwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0
KTsKIH0KIAogV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgQXJndW1lbnRDb2RlcjxTSEExOjpEaWdl
c3Q+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgU0hBMTo6RGlnZXN0JiBkaWdlc3QpCiB7Ci0g
ICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNp
emVvZihkaWdlc3QpLCAxKTsKKyAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERh
dGEoZGlnZXN0KTsKIH0KIAogI2lmIEhBVkUoQVVESVRfVE9LRU4pCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgJKHJldmlzaW9uIDI3ODgwOSkKKysr
IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1LDEyICs0NSwxMiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgU2ltcGxl
QXJndW1lCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KICAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVCYgdCkKICAgICB7Ci0gICAgICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+
KCZ0KSwgc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhl
ZExlbmd0aERhdGEoU3BhbiB7ICZ0LCAxIH0pOwogICAgIH0KIAogICAgIHN0YXRpYyBXQVJOX1VO
VVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVCYgdCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9j
YXN0PHVpbnQ4X3QqPigmdCksIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAgIHJldHVy
biBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJnQsIDEgfSk7CiAgICAgfQog
fTsKIApAQCAtNjEsMTMgKzYxLDE0IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBFeHRl
bnQ+IHN0cnUKICAgICB7CiAgICAgICAgIGlmICghRXh0ZW50KQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQ4X3QqPihhcnJheVJlZmVyZW5jZS5kYXRhKCkpLCBhcnJheVJlZmVyZW5jZS5z
aXplKCkgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZp
eGVkTGVuZ3RoRGF0YShTcGFuIHsgYXJyYXlSZWZlcmVuY2UuZGF0YSgpLCBhcnJheVJlZmVyZW5j
ZS5zaXplKCkgfSk7CiAgICAgfQogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEFycmF5UmVmZXJl
bmNlVHlwZT4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewogICAgICAgICBpZiAoIUV4
dGVudCkKICAgICAgICAgICAgIHJldHVybiBBcnJheVJlZmVyZW5jZVR5cGUoKTsKLSAgICAgICAg
Y29uc3QgdWludDhfdCogZGF0YSA9IGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhSZWZlcmVuY2Uo
RXh0ZW50ICogc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKKworICAgICAgICBjb25zdCBhdXRvKiBk
YXRhID0gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aFJlZmVyZW5jZShFeHRlbnQgKiBzaXplb2Yo
VCksIGFsaWdub2YoVCkpOwogICAgICAgICBpZiAoIWRhdGEpCiAgICAgICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwogICAgICAgICByZXR1cm4gQXJyYXlSZWZlcmVuY2VUeXBlKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgVCo+KGRhdGEpLCBFeHRlbnQpOwpAQCAtODIsNyArODMsNyBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQXJndW1lbnRDb2RlCiAgICAgICAgIGVuY29kZXIgPDwg
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KGFycmF5UmVmZXJlbmNlLnNpemUoKSk7CiAgICAgICAgIGlm
ICghYXJyYXlSZWZlcmVuY2Uuc2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBl
bmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihhcnJheVJlZmVyZW5jZS5kYXRhKCkpLCBhcnJheVJlZmVyZW5jZS5zaXplKCkgKiBzaXpl
b2YoVCksIGFsaWdub2YoVCkpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0
YShTcGFuIHsgYXJyYXlSZWZlcmVuY2UuZGF0YSgpLCBhcnJheVJlZmVyZW5jZS5zaXplKCkgfSk7
CiAgICAgfQogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEFycmF5UmVmZXJlbmNlVHlwZT4gZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewpAQCAtOTYsNyArOTcsNyBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgQXJndW1lbnRDb2RlCiAgICAgICAgIGlmIChVTkxJS0VMWShkYXRh
U2l6ZS5oYXNPdmVyZmxvd2VkKCkpKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
IAotICAgICAgICBjb25zdCB1aW50OF90KiBkYXRhID0gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0
aFJlZmVyZW5jZShkYXRhU2l6ZSwgYWxpZ25vZihUKSk7CisgICAgICAgIGNvbnN0IGF1dG8qIGRh
dGEgPSBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoUmVmZXJlbmNlKGRhdGFTaXplLCBhbGlnbm9m
KFQpKTsKICAgICAgICAgaWYgKCFkYXRhKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKICAgICAgICAgcmV0dXJuIEFycmF5UmVmZXJlbmNlVHlwZShyZWludGVycHJldF9jYXN0PGNv
bnN0IFQqPihkYXRhKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihzaXplKSk7CkBAIC00MjMsNyArNDI0
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAgIHN0YXRp
YyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2Fw
YWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiB2ZWN0b3IpCiAgICAgewogICAg
ICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2ZWN0b3Iuc2l6ZSgpKTsKLSAg
ICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OF90Kj4odmVjdG9yLmRhdGEoKSksIHZlY3Rvci5zaXplKCkgKiBzaXplb2YoVCksIGFs
aWdub2YoVCkpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YSh2ZWN0b3Ip
OwogICAgIH0KICAgICAKICAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2Rl
KERlY29kZXImIGRlY29kZXIsIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5k
bGVyLCBtaW5DYXBhY2l0eT4mIHZlY3RvcikKQEAgLTQ0Niw3ICs0NDcsNyBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpCiAgICAgICAgIFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4gdGVtcDsKICAgICAgICAgdGVt
cC5ncm93KHNpemUpOwogCi0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERh
dGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4odGVtcC5kYXRhKCkpLCBzaXplICogc2l6ZW9m
KFQpLCBhbGlnbm9mKFQpKSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3Ro
RGF0YSh0ZW1wKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICB2ZWN0b3Iu
c3dhcCh0ZW1wKTsKQEAgLTQ3Myw3ICs0NzQsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXpl
X3QgaW5saW5lQ2FwYWNpCiAgICAgICAgIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZs
b3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4gdmVjdG9yOwogICAgICAgICB2ZWN0b3IuZ3JvdyhzaXpl
KTsKIAotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCBzaXplICogc2l6ZW9mKFQpLCBhbGln
bm9mKFQpKSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YSh2ZWN0
b3IpKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgICAgICByZXR1cm4g
dmVjdG9yOwpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJyYXlSZWZlcmVuY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9BcnJheVJlZmVyZW5j
ZS5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9BcnJh
eVJlZmVyZW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw4IEBACiAKIG5hbWVzcGFj
ZSBJUEMgewogCisvLyBGSVhNRTogUmVwbGFjZSB3aXRoIDx3dGYvU3Bhbi5oPgorCiBpbmxpbmUg
Y29uc3RleHByIHNpemVfdCBhcnJheVJlZmVyZW5jZUR5bmFtaWNFeHRlbnQgPSBzdGQ6Om51bWVy
aWNfbGltaXRzPHNpemVfdD46Om1heCgpOwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90
IEV4dGVudCA9IGFycmF5UmVmZXJlbmNlRHluYW1pY0V4dGVudD4KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vSVBDL0RlY29kZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDEzICsy
MDYsMTMgQEAgYm9vbCBEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YQogICAgIHJl
dHVybiBhbGlnbmVkQnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihyb3VuZFVwVG9BbGlnbm1l
bnQobV9idWZmZXJQb3MsIGFsaWdubWVudCksIG1fYnVmZmVyLCBtX2J1ZmZlckVuZCwgc2l6ZSk7
CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqIGRhdGEs
IHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50KQorYm9vbCBEZWNvZGVyOjpkZWNvZGVGaXhl
ZExlbmd0aERhdGEoU3BhbjxzdGQ6OmJ5dGU+IGRhdGEsIHNpemVfdCBhbGlnbm1lbnQpCiB7Ci0g
ICAgaWYgKCFhbGlnbkJ1ZmZlclBvc2l0aW9uKGFsaWdubWVudCwgc2l6ZSkpCisgICAgaWYgKCFh
bGlnbkJ1ZmZlclBvc2l0aW9uKGFsaWdubWVudCwgZGF0YS5zaXplKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBtZW1jcHkoZGF0YSwgbV9idWZmZXJQb3MsIHNpemUpOwotICAgIG1f
YnVmZmVyUG9zICs9IHNpemU7CisgICAgbWVtY3B5KGRhdGEuZGF0YSgpLCBtX2J1ZmZlclBvcywg
ZGF0YS5zaXplKCkpOworICAgIG1fYnVmZmVyUG9zICs9IGRhdGEuc2l6ZSgpOwogCiAgICAgcmV0
dXJuIHRydWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5oCShyZXZp
c2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDEzIEBAIHB1YmxpYzoKICAgICBXQVJOX1VOVVNFRF9S
RVRVUk4gYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXJQb3MgIT0gbnVsbHB0
cjsgfQogICAgIHZvaWQgbWFya0ludmFsaWQoKSB7IG1fYnVmZmVyUG9zID0gbnVsbHB0cjsgfQog
Ci0gICAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4
X3QqIGRhdGEsIHNpemVfdCwgc2l6ZV90IGFsaWdubWVudCk7CisgICAgV0FSTl9VTlVTRURfUkVU
VVJOIGJvb2wgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48c3RkOjpieXRlPiwgc2l6ZV90IGFs
aWdubWVudCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFdBUk5fVU5VU0VEX1JF
VFVSTiBib29sIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShUJiYgZGF0YSwgc2l6ZV90IGFsaWdubWVu
dCA9IGFsaWdub2YodHlwZW5hbWUgZGVjbHR5cGUoU3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihkYXRh
KSB9KTo6dmFsdWVfdHlwZSkpCisgICAgeworICAgICAgICByZXR1cm4gZGVjb2RlRml4ZWRMZW5n
dGhEYXRhKGFzV3JpdGFibGVCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pLCBh
bGlnbm1lbnQpOworICAgIH0KIAogICAgIC8vIFRoZSBkYXRhIGluIHRoZSByZXR1cm5lZCBwb2lu
dGVyIGhlcmUgd2lsbCBvbmx5IGJlIHZhbGlkIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIERlY29k
ZXIgb2JqZWN0LgogICAgIC8vIFJldHVybnMgbnVsbHB0ciBvbiBmYWlsdXJlLgpJbmRleDogU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MDIsMTIgKzIwMiwxMiBAQCB1aW50OF90KiBFbmNvZGVyOjpncm93KHNpemVfdCBhbGlnbm1lbnQs
CiAgICAgcmV0dXJuIG1fYnVmZmVyICsgYWxpZ25lZFNpemU7CiB9CiAKLXZvaWQgRW5jb2Rlcjo6
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBz
aXplX3QgYWxpZ25tZW50KQordm9pZCBFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEoU3Bh
bjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEsIHNpemVfdCBhbGlnbm1lbnQpCiB7Ci0gICAgQVNTRVJU
KCEocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGRhdGEpICUgYWxpZ25tZW50KSk7CisgICAg
QVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGRhdGEuZGF0YSgpKSAlIGFsaWdu
bWVudCkpOwogCi0gICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQsIHNpemUpOwot
ICAgIG1lbWNweShidWZmZXIsIGRhdGEsIHNpemUpOworICAgIGF1dG8qIGJ1ZmZlciA9IGdyb3co
YWxpZ25tZW50LCBkYXRhLnNpemUoKSk7CisgICAgbWVtY3B5KGJ1ZmZlciwgZGF0YS5kYXRhKCks
IGRhdGEuc2l6ZSgpKTsKIH0KIAogdm9pZCBFbmNvZGVyOjphZGRBdHRhY2htZW50KEF0dGFjaG1l
bnQmJiBhdHRhY2htZW50KQpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29kZXIuaAko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9TaGFy
ZWRCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRp
b25TZXQuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IAogbmFtZXNwYWNlIElQQyB7CkBAIC02MCw3ICs2MSwxMyBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IHdyYXBGb3JUZXN0aW5nKFVuaXF1ZVJlZjxFbmNvZGVyPiYmKTsKIAotICAgIHZvaWQgZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCwgc2l6ZV90IGFsaWdu
bWVudCk7CisgICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGRhdGEsIHNpemVfdCBhbGlnbm1lbnQpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
KyAgICB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShUJiYgZGF0YSwgc2l6ZV90IGFsaWdubWVu
dCA9IGFsaWdub2YodHlwZW5hbWUgZGVjbHR5cGUoU3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihkYXRh
KSB9KTo6dmFsdWVfdHlwZSkpCisgICAgeworICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEo
YXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pLCBhbGlnbm1lbnQpOworICAg
IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgRW5jb2RlciYgb3BlcmF0b3I8PChU
JiYgdCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1NoYXJlZEJ1ZmZlckNvcHku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1NoYXJlZEJ1ZmZl
ckNvcHkuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQ
Qy9TaGFyZWRCdWZmZXJDb3B5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCB2
b2lkIFNoYXJlZEJ1ZmZlckNvcHk6OmVuY29kZShFbmNvZGVyJiBlCiAgICAgaWYgKCFidWZmZXJT
aXplKQogICAgICAgICByZXR1cm47CiAgICAgZm9yIChhdXRvJiBzZWdtZW50IDogKm1fYnVmZmVy
KQotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShzZWdtZW50LnNlZ21lbnQt
PmRhdGEoKSwgc2VnbWVudC5zZWdtZW50LT5zaXplKCksIDEpOworICAgICAgICBlbmNvZGVyLmVu
Y29kZUZpeGVkTGVuZ3RoRGF0YShzZWdtZW50LnNlZ21lbnQtPmJ5dGVzKCkpOwogfQogCiBzdGQ6
Om9wdGlvbmFsPFNoYXJlZEJ1ZmZlckNvcHk+IFNoYXJlZEJ1ZmZlckNvcHk6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ29u
bmVjdGlvbkVuY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQ
Qy9TdHJlYW1Db25uZWN0aW9uRW5jb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uRW5jb2Rlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgogI2lu
Y2x1ZGUgIk1lc3NhZ2VOYW1lcy5oIgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgSVBDIHsKQEAgLTUzLDIyICs1NCwyOCBA
QCBwdWJsaWM6CiAKICAgICB+U3RyZWFtQ29ubmVjdGlvbkVuY29kZXIoKSA9IGRlZmF1bHQ7CiAK
LSAgICBib29sIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXpl
X3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVudCkKKyAgICBib29sIGVuY29kZUZpeGVkTGVuZ3RoRGF0
YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSwgc2l6ZV90IGFsaWdubWVudCkKICAgICB7CiAg
ICAgICAgIHNpemVfdCBidWZmZXJQb2ludGVyID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihyZWludGVy
cHJldF9jYXN0PGludHB0cl90PihtX2J1ZmZlciArIG1fZW5jb2RlZFNpemUpKTsKICAgICAgICAg
c2l6ZV90IG5ld0J1ZmZlclBvaW50ZXIgPSByb3VuZFVwVG9NdWx0aXBsZU9mKGFsaWdubWVudCwg
YnVmZmVyUG9pbnRlcik7CiAgICAgICAgIGlmIChuZXdCdWZmZXJQb2ludGVyIDwgYnVmZmVyUG9p
bnRlcikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaW50cHRyX3QgYWxpZ25l
ZFNpemUgPSBtX2VuY29kZWRTaXplICsgKG5ld0J1ZmZlclBvaW50ZXIgLSBidWZmZXJQb2ludGVy
KTsKLSAgICAgICAgaWYgKCFyZXNlcnZlKGFsaWduZWRTaXplLCBzaXplKSkKKyAgICAgICAgaWYg
KCFyZXNlcnZlKGFsaWduZWRTaXplLCBkYXRhLnNpemUoKSkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIHVpbnQ4X3QqIGJ1ZmZlciA9IG1fYnVmZmVyICsgYWxpZ25lZFNpemU7
Ci0gICAgICAgIG1lbWNweShidWZmZXIsIGRhdGEsIHNpemUpOwotICAgICAgICBtX2VuY29kZWRT
aXplID0gYWxpZ25lZFNpemUgKyBzaXplOworICAgICAgICBhdXRvKiBidWZmZXIgPSBtX2J1ZmZl
ciArIGFsaWduZWRTaXplOworICAgICAgICBtZW1jcHkoYnVmZmVyLCBkYXRhLmRhdGEoKSwgZGF0
YS5zaXplKCkpOworICAgICAgICBtX2VuY29kZWRTaXplID0gYWxpZ25lZFNpemUgKyBkYXRhLnNp
emUoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KKyAgICB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShUJiYgZGF0YSwgc2l6ZV90IGFs
aWdubWVudCA9IGFsaWdub2YodHlwZW5hbWUgZGVjbHR5cGUoU3BhbiB7IHN0ZDo6Zm9yd2FyZDxU
PihkYXRhKSB9KTo6dmFsdWVfdHlwZSkpCisgICAgeworICAgICAgICBlbmNvZGVGaXhlZExlbmd0
aERhdGEoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pLCBhbGlnbm1lbnQp
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgU3RyZWFtQ29ubmVjdGlv
bkVuY29kZXImIG9wZXJhdG9yPDwoVCYmIHQpCiAgICAgewogICAgICAgICBBcmd1bWVudENvZGVy
PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCB2b2lkPjo6
ZW5jb2RlKCp0aGlzLCBzdGQ6OmZvcndhcmQ8VD4odCkpOwpJbmRleDogU291cmNlL1dlYktpdC9T
aGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDQsNyArMTQ0LDcgQEAgc3RhdGljIHZvaWQgZW5jb2RlU2hhcmVkQnVmZmVy
KEVuY29kZXImIAogICAgIC8vIG92ZXIgdGhlIElQQy4gQ29ubmVjdGlvblVuaXguY3BwIGFscmVh
ZHkgdXNlcyBzaGFyZWQgbWVtb3J5IHRvIHNlbmQgYW55IElQQyBtZXNzYWdlIHRoYXQgaXMKICAg
ICAvLyB0b28gbGFyZ2UuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjA4NTcxLgogICAgIGZvciAoY29uc3QgYXV0byYgZWxlbWVudCA6ICpidWZmZXIpCi0gICAg
ICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGVsZW1lbnQuc2VnbWVudC0+ZGF0YSgp
LCBlbGVtZW50LnNlZ21lbnQtPnNpemUoKSwgMSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKGVsZW1lbnQuc2VnbWVudC0+Ynl0ZXMoKSk7CiAjZWxzZQogICAgIFNoYXJl
ZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKICAgICBhdXRvIHNoYXJlZE1lbW9yeUJ1ZmZlciA9IFNo
YXJlZE1lbW9yeTo6Y29weUJ1ZmZlcigqYnVmZmVyKTsKQEAgLTE4MCw3ICsxODAsNyBAQCBzdGF0
aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlU2hhCiAKICAgICBWZWN0b3I8dWludDhf
dD4gZGF0YTsKICAgICBkYXRhLmdyb3coYnVmZmVyU2l6ZSk7Ci0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZUZpeGVkTGVuZ3RoRGF0YShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksIDEpKQorICAgIGlm
ICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoZGF0YSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoZGF0YSkp
OwpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL0F1eGlsaWFyeVByb2Nlc3NNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL0F1eGlsaWFyeVByb2Nlc3NN
YWMubW0JKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9BdXhp
bGlhcnlQcm9jZXNzTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMjEsNyArMzIxLDcgQEAgc3Rh
dGljIFN0cmluZyBzYW5kYm94RmlsZVBhdGgoY29uc3QgU3RyaQogICAgIGNyeXB0by0+YWRkQnl0
ZXMoaGVhZGVyLmRhdGEoKSwgaGVhZGVyLmxlbmd0aCgpKTsKICAgICBhdXRvIGhhc2ggPSBjcnlw
dG8tPmNvbXB1dGVIYXNoKCk7CiAKLSAgICByZXR1cm4gbWFrZVN0cmluZyhkaXJlY3RvcnlQYXRo
LCAiL0NvbXBpbGVkU2FuZGJveCsiLCBiYXNlNjRVUkxFbmNvZGVkKGhhc2guZGF0YSgpLCBoYXNo
LnNpemUoKSkpOworICAgIHJldHVybiBtYWtlU3RyaW5nKGRpcmVjdG9yeVBhdGgsICIvQ29tcGls
ZWRTYW5kYm94KyIsIGJhc2U2NFVSTEVuY29kZWQoaGFzaCkpOwogfQogCiBzdGF0aWMgYm9vbCBl
bnN1cmVTYW5kYm94Q2FjaGVEaXJlY3RvcnkoY29uc3QgU2FuZGJveEluZm8mIGluZm8pCkluZGV4
OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vV2ViQ29yZUFyZ3VtZW50Q29kZXJzV2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzV2luLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvd2lu
L1dlYkNvcmVBcmd1bWVudENvZGVyc1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDEyICs1
MSwxMiBAQCBzdGQ6Om9wdGlvbmFsPEZvbnRBdHRyaWJ1dGVzPiBBcmd1bWVudENvCiB0ZW1wbGF0
ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPExPR0ZPTlQ+IHsKICAgICBzdGF0aWMgdm9pZCBlbmNv
ZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgTE9HRk9OVCYgbG9nRm9udCkKICAgICB7Ci0gICAg
ICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KCZsb2dGb250KSwgc2l6ZW9mIGxvZ0ZvbnQsIDEpOworICAgICAgICBlbmNvZGVy
LmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJmxvZ0ZvbnQsIDEgfSwgMSk7CiAgICAgfQog
ICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPExPR0ZPTlQ+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQogICAgIHsKICAgICAgICAgTE9HRk9OVCBsb2dGb250OwotICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZsb2dGb250
KSwgc2l6ZW9mKGxvZ0ZvbnQpLCAxKSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVk
TGVuZ3RoRGF0YShTcGFuIHsgJmxvZ0ZvbnQsIDEgfSwgMSkpCiAgICAgICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwogICAgICAgICByZXR1cm4gbG9nRm9udDsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RT
dG9yZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSwxOCAr
MTMxLDIwIEBAIHN0YXRpYyBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YSBlbmNvZGUKICAgICBl
bmNvZGVyIDw8IG1ldGFEYXRhLmNvbmRpdGlvbmVkRmlsdGVyc0J5dGVjb2RlU2l6ZTsKICAgICBl
bmNvZGVyIDw8IG1ldGFEYXRhLmNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbjsKIAotICAgIEFT
U0VSVChlbmNvZGVyLmJ1ZmZlclNpemUoKSA9PSBDb250ZW50UnVsZUxpc3RGaWxlSGVhZGVyU2l6
ZSk7Ci0gICAgcmV0dXJuIFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhKGVuY29kZXIuYnVmZmVy
KCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICBBU1NFUlQoZW5jb2Rlci5idWZmZXIoKS5z
aXplKCkgPT0gQ29udGVudFJ1bGVMaXN0RmlsZUhlYWRlclNpemUpOworICAgIHJldHVybiBXZWJL
aXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YSB7IGVuY29kZXIuYnVmZmVyKCkgfTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gdm9pZCBnZXREYXRhKGNvbnN0IFQmLCBjb25zdCBGdW5jdGlvbjxib29s
KGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYpOwotdGVtcGxhdGU8PiB2b2lkIGdldERhdGEoY29u
c3QgV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGEmIGRhdGEsIGNvbnN0IEZ1bmN0aW9uPGJvb2wo
Y29uc3QgdWludDhfdCosIHNpemVfdCk+JiBmdW5jdGlvbikKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHZvaWQgZ2V0RGF0YShjb25zdCBUJiwgY29uc3QgRnVuY3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0
ZDo6Ynl0ZT4pPiYpOworCit0ZW1wbGF0ZTw+IHZvaWQgZ2V0RGF0YShjb25zdCBXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6RGF0YSYgZGF0YSwgY29uc3QgRnVuY3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0
ZDo6Ynl0ZT4pPiYgZnVuY3Rpb24pCiB7CiAgICAgZGF0YS5hcHBseShmdW5jdGlvbik7CiB9Ci10
ZW1wbGF0ZTw+IHZvaWQgZ2V0RGF0YShjb25zdCBXZWJDb3JlOjpTaGFyZWRCdWZmZXImIGRhdGEs
IGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCosIHNpemVfdCk+JiBmdW5jdGlvbikK
KwordGVtcGxhdGU8PiB2b2lkIGdldERhdGEoY29uc3QgV2ViQ29yZTo6U2hhcmVkQnVmZmVyJiBk
YXRhLCBjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+JiBmdW5jdGlv
bikKIHsKLSAgICBmdW5jdGlvbihkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOworICAgIGZ1bmN0
aW9uKGRhdGEuYnl0ZXMoKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC0xNTAsMTMg
KzE1MiwxMyBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxDb250ZW50UnVsZUxpc3RNZXRhCiB7CiAg
ICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CiAgICAgQ29udGVudFJ1bGVMaXN0TWV0YURhdGEgbWV0
YURhdGE7Ci0gICAgZ2V0RGF0YShmaWxlRGF0YSwgWyZtZXRhRGF0YSwgJnN1Y2Nlc3MsICZmaWxl
RGF0YV0oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKKyAgICBnZXREYXRhKGZp
bGVEYXRhLCBbJm1ldGFEYXRhLCAmc3VjY2VzcywgJmZpbGVEYXRhXShTcGFuPGNvbnN0IHN0ZDo6
Ynl0ZT4gZGF0YSkgewogICAgICAgICAvLyBUaGUgZmlsZSBkYXRhIHNob3VsZCBiZSBtYXBwZWQg
aW50byBvbmUgY29udGludW91cyBtZW1vcnkgc2VnbWVudCBzbyB0aGUgc2l6ZQogICAgICAgICAv
LyBwYXNzZWQgdG8gdGhlIGFwcGxpZXIgc2hvdWxkIGFsd2F5cyBlcXVhbCB0aGUgZGF0YSBzaXpl
LgotICAgICAgICBpZiAoc2l6ZSAhPSBmaWxlRGF0YS5zaXplKCkpCisgICAgICAgIGlmIChkYXRh
LnNpemUoKSAhPSBmaWxlRGF0YS5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOwor
ICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyBkYXRhIH07CiAgICAg
ICAgIAogICAgICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiB2ZXJzaW9uOwogICAgICAgICBk
ZWNvZGVyID4+IHZlcnNpb247CkBAIC0yMjgsOCArMjMwLDggQEAgc3RhdGljIHN0ZDo6b3B0aW9u
YWw8TWFwcGVkRGF0YT4gb3BlbkFuZAogc3RhdGljIGJvb2wgd3JpdGVEYXRhVG9GaWxlKGNvbnN0
IFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhJiBmaWxlRGF0YSwgUGxhdGZvcm1GaWxlSGFuZGxl
IGZkKQogewogICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7Ci0gICAgZmlsZURhdGEuYXBwbHkoW2Zk
LCAmc3VjY2Vzc10oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAg
aWYgKHdyaXRlVG9GaWxlKGZkLCBkYXRhLCBzaXplKSA9PSAtMSkgeworICAgIGZpbGVEYXRhLmFw
cGx5KFtmZCwgJnN1Y2Nlc3NdKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhKSB7CisgICAgICAg
IGlmICh3cml0ZVRvRmlsZShmZCwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKSA9PSAtMSkgewog
ICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2Vi
QXV0aGVudGljYXRpb25QYW5lbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQkocmV2aXNpb24gMjc4
ODA5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRp
Y2F0aW9uUGFuZWwubW0JKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDcgQEAKICNpbXBvcnQg
PHBhbC9jcnlwdG8vQ3J5cHRvRGlnZXN0Lmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KICNp
bXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9TcGFuQ29jb2EuaD4K
ICNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQvQmFz
ZTY0Lmg+CiAKQEAgLTcwLDcgKzcxLDcgQEAgc3RhdGljIFJldGFpblB0cjxOU0RhdGE+IHByb2R1
Y2VDbGllbnREYQogICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6QCJ3ZWJhdXRobi5nZXQi
IGZvcktleTpAInR5cGUiXTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIFtkaWN0aW9uYXJ5
IHNldE9iamVjdDpiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhjaGFsbGVuZ2UuYnl0ZXMsIGNoYWxs
ZW5nZS5sZW5ndGgpIGZvcktleTpAImNoYWxsZW5nZSJdOworICAgIFtkaWN0aW9uYXJ5IHNldE9i
amVjdDpiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhhc0J5dGVzKGNoYWxsZW5nZSkpIGZvcktleTpA
ImNoYWxsZW5nZSJdOwogICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpvcmlnaW4gZm9yS2V5OkAi
b3JpZ2luIl07CiAKICAgICByZXR1cm4gW05TSlNPTlNlcmlhbGl6YXRpb24gZGF0YVdpdGhKU09O
T2JqZWN0OmRpY3Rpb25hcnkuZ2V0KCkgb3B0aW9uczpOU0pTT05Xcml0aW5nU29ydGVkS2V5cyBl
cnJvcjpuaWxdOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRp
b24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsQXV0aGVudGljYXRvci5t
bQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVu
dGljYXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04
NSw3ICs4NSw3IEBAIHN0YXRpYyBpbmxpbmUgSGFzaFNldDxTdHJpbmc+IHByb2R1Y2VIYXMKICAg
ICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0OwogICAgIGZvciAoYXV0byYgY3JlZGVudGlhbERlc2Ny
aXB0b3IgOiBjcmVkZW50aWFsRGVzY3JpcHRvcnMpIHsKICAgICAgICAgaWYgKGVtcHR5VHJhbnNw
b3J0c09yQ29udGFpbihjcmVkZW50aWFsRGVzY3JpcHRvci50cmFuc3BvcnRzLCBBdXRoZW50aWNh
dG9yVHJhbnNwb3J0OjpJbnRlcm5hbCkgJiYgY3JlZGVudGlhbERlc2NyaXB0b3IudHlwZSA9PSBQ
dWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5ICYmIGNyZWRlbnRpYWxEZXNjcmlwdG9y
LmlkVmVjdG9yLnNpemUoKSA9PSBjcmVkZW50aWFsSWRMZW5ndGgpCi0gICAgICAgICAgICByZXN1
bHQuYWRkKGJhc2U2NEVuY29kZVRvU3RyaW5nKGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9y
LmRhdGEoKSwgY3JlZGVudGlhbERlc2NyaXB0b3IuaWRWZWN0b3Iuc2l6ZSgpKSk7CisgICAgICAg
ICAgICByZXN1bHQuYWRkKGJhc2U2NEVuY29kZVRvU3RyaW5nKGNyZWRlbnRpYWxEZXNjcmlwdG9y
LmlkVmVjdG9yKSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0yMzMsNyArMjMz
LDcgQEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6Om1ha2VDcmVkZW50aWFsKAogICAgICAgICBp
ZiAobm90Rm91bmQgIT0gbV9leGlzdGluZ0NyZWRlbnRpYWxzLmZpbmRNYXRjaGluZyhbJmV4Y2x1
ZGVDcmVkZW50aWFsSWRzXSAoYXV0byYgY3JlZGVudGlhbCkgewogICAgICAgICAgICAgYXV0byog
cmF3SWQgPSBjcmVkZW50aWFsLT5yYXdJZCgpOwogICAgICAgICAgICAgQVNTRVJUKHJhd0lkKTsK
LSAgICAgICAgICAgIHJldHVybiBleGNsdWRlQ3JlZGVudGlhbElkcy5jb250YWlucyhiYXNlNjRF
bmNvZGVUb1N0cmluZyhyYXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgpKSk7CisgICAg
ICAgICAgICByZXR1cm4gZXhjbHVkZUNyZWRlbnRpYWxJZHMuY29udGFpbnMoYmFzZTY0RW5jb2Rl
VG9TdHJpbmcocmF3SWQtPmJ5dGVzKCkpKTsKICAgICAgICAgfSkpIHsKICAgICAgICAgICAgIHJl
Y2VpdmVFeGNlcHRpb24oeyBOb3RBbGxvd2VkRXJyb3IsICJBdCBsZWFzdCBvbmUgY3JlZGVudGlh
bCBtYXRjaGVzIGFuIGVudHJ5IG9mIHRoZSBleGNsdWRlQ3JlZGVudGlhbHMgbGlzdCBpbiB0aGUg
cGxhdGZvcm0gYXR0YWNoZWQgYXV0aGVudGljYXRvci4iX3MgfSwgV2ViQXV0aGVudGljYXRpb25T
dGF0dXM6OkxBRXhjbHVkZUNyZWRlbnRpYWxzTWF0Y2hlZCk7CiAgICAgICAgICAgICByZXR1cm47
CkBAIC01MTAsNyArNTEwLDcgQEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6OmdldEFzc2VydGlv
bigpCiAgICAgICAgIH0KIAogICAgICAgICBhdXRvKiByYXdJZCA9IGNyZWRlbnRpYWwtPnJhd0lk
KCk7Ci0gICAgICAgIGlmIChhbGxvd0NyZWRlbnRpYWxJZHMuY29udGFpbnMoYmFzZTY0RW5jb2Rl
VG9TdHJpbmcocmF3SWQtPmRhdGEoKSwgcmF3SWQtPmJ5dGVMZW5ndGgoKSkpKQorICAgICAgICBp
ZiAoYWxsb3dDcmVkZW50aWFsSWRzLmNvbnRhaW5zKGJhc2U2NEVuY29kZVRvU3RyaW5nKHJhd0lk
LT5ieXRlcygpKSkpCiAgICAgICAgICAgICBhc3NlcnRpb25SZXNwb25zZXMudW5jaGVja2VkQXBw
ZW5kKGNyZWRlbnRpYWwuY29weVJlZigpKTsKICAgICB9CiAgICAgaWYgKGFzc2VydGlvblJlc3Bv
bnNlcy5pc0VtcHR5KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhl
bnRpY2F0aW9uL01vY2svTW9ja0xvY2FsQ29ubmVjdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tMb2NhbENvbm5l
Y3Rpb24ubW0JKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0xvY2FsQ29ubmVjdGlvbi5tbQkod29ya2luZyBjb3B5
KQpAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgTW9ja0xvY2FsQ29ubmVjdGlvbjo6ZmlsdGVyUmVz
cG9uc2UKICAgICBmb3IgKDsgaXRyICE9IHJlc3BvbnNlcy5lbmQoKTsgKytpdHIpIHsKICAgICAg
ICAgYXV0byogcmF3SWQgPSBpdHItPmdldCgpLnJhd0lkKCk7CiAgICAgICAgIEFTU0VSVChyYXdJ
ZCk7Ci0gICAgICAgIGF1dG8gcmF3SWRCYXNlNjQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhyYXdJ
ZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgYXV0byByYXdJZEJhc2U2
NCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKHJhd0lkLT5ieXRlcygpKTsKICAgICAgICAgaWYgKHJh
d0lkQmFzZTY0ID09IHByZWZlcnJlZENyZWRlbnRpYWxJZEJhc2U2NCkKICAgICAgICAgICAgIGJy
ZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9MZWdhY3lTZXNz
aW9uU3RhdGVDb2RpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTI5LDcgKzEyOSw3IEBAIHB1YmxpYzoKICAgICAgICAgKnRoaXMg
PDwgbGVuZ3RoOwogCiAgICAgICAgICp0aGlzIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihsZW5n
dGggKiBzaXplb2YoVUNoYXIpKTsKLSAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVk
Q2hhcmFjdGVycygpLmdldCgpKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSwgYWxpZ25vZihVQ2hh
cikpOworICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IFN0cmluZ1ZpZXcodmFs
dWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpLmdldCgpLCBsZW5ndGggfSk7CiAKICAgICAgICAg
cmV0dXJuICp0aGlzOwogICAgIH0KQEAgLTEzNyw3ICsxMzcsNyBAQCBwdWJsaWM6CiAgICAgSGlz
dG9yeUVudHJ5RGF0YUVuY29kZXImIG9wZXJhdG9yPDwoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2
YWx1ZSkKICAgICB7CiAgICAgICAgICp0aGlzIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1
ZS5zaXplKCkpOwotICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEodmFsdWUuZGF0YSgpLCB2
YWx1ZS5zaXplKCksIDEpOworICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEodmFsdWUpOwog
CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CkBAIC0xNDUsNyArMTQ1LDcgQEAgcHVibGlj
OgogICAgIEhpc3RvcnlFbnRyeURhdGFFbmNvZGVyJiBvcGVyYXRvcjw8KGNvbnN0IFZlY3Rvcjxj
aGFyPiYgdmFsdWUpCiAgICAgewogICAgICAgICAqdGhpcyA8PCBzdGF0aWNfY2FzdDx1aW50NjRf
dD4odmFsdWUuc2l6ZSgpKTsKLSAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZhbHVlLmRhdGEoKSksIHZhbHVlLnNpemUoKSwgMSk7
CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YSh2YWx1ZSk7CiAKICAgICAgICAgcmV0dXJu
ICp0aGlzOwogICAgIH0KQEAgLTIwNiwxNyArMjA2LDIzIEBAIHByaXZhdGU6CiAgICAgewogICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYXJpdGhtZXRpYzxUeXBlPjo6dmFsdWUsICIiKTsK
IAotICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4oJnZhbHVlKSwgc2l6ZW9mKHZhbHVlKSwgc2l6ZW9mKHZhbHVlKSk7CisgICAgICAgIGVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJnZhbHVlLCAxIH0sIHNpemVvZih2YWx1ZSkpOwogICAg
ICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCi0gICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERh
dGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGFsaWdubWVudCkK
KyAgICB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0
YSwgdW5zaWduZWQgYWxpZ25tZW50KQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGF0
YSB8fCAhc2l6ZSk7Ci0gICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
PihkYXRhKSAlIGFsaWdubWVudCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChkYXRhLmRhdGEo
KSB8fCAhZGF0YS5zaXplKCkpOworICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4oZGF0YS5kYXRhKCkpICUgYWxpZ25tZW50KSk7CiAKLSAgICAgICAgdWludDhfdCog
YnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQsIHNpemUpOwotICAgICAgICBtZW1jcHkoYnVmZmVyLCBk
YXRhLCBzaXplKTsKKyAgICAgICAgYXV0byogYnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQsIGRhdGEu
c2l6ZSgpKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgp
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCB1bnNpZ25lZCBhbGlnbm1lbnQgPSBhbGlnbm9mKHR5cGVu
YW1lIGRlY2x0eXBlKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSk6OnZhbHVlX3R5cGUp
KQorICAgIHsKKyAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGFzQnl0ZXMoU3BhbiB7IHN0
ZDo6Zm9yd2FyZDxUPihkYXRhKSB9KSwgYWxpZ25tZW50KTsKICAgICB9CiAKICAgICB1aW50OF90
KiBncm93KHVuc2lnbmVkIGFsaWdubWVudCwgc2l6ZV90IHNpemUpCkBAIC02MDEsNyArNjA3LDcg
QEAgcHVibGljOgogCiAgICAgICAgIFVDaGFyKiBidWZmZXI7CiAgICAgICAgIGF1dG8gc3RyaW5n
ID0gU3RyaW5nOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICAgICAg
ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1ZmZlciks
IGxlbmd0aCAqIHNpemVvZihVQ2hhciksIGFsaWdub2YoVUNoYXIpKTsKKyAgICAgICAgZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKFNwYW4geyBidWZmZXIsIGxlbmd0aCB9KTsKIAogICAgICAgICB2YWx1
ZSA9IHN0cmluZzsKICAgICAgICAgcmV0dXJuICp0aGlzOwpAQCAtNzM3LDE3ICs3NDMsMjMgQEAg
cHJpdmF0ZToKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2FyaXRobWV0aWM8VHlwZT46
OnZhbHVlLCAiIik7CiAgICAgICAgIHZhbHVlID0gVHlwZSgpOwogCi0gICAgICAgIGRlY29kZUZp
eGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWUpLCBzaXplb2Yo
dmFsdWUpLCBzaXplb2YodmFsdWUpKTsKKyAgICAgICAgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNw
YW4geyAmdmFsdWUsIDEgfSwgc2l6ZW9mKHZhbHVlKSk7CiAgICAgICAgIHJldHVybiAqdGhpczsK
ICAgICB9CiAKLSAgICB2b2lkIGRlY29kZUZpeGVkTGVuZ3RoRGF0YSh1aW50OF90KiBkYXRhLCBz
aXplX3Qgc2l6ZSwgdW5zaWduZWQgYWxpZ25tZW50KQorICAgIHZvaWQgZGVjb2RlRml4ZWRMZW5n
dGhEYXRhKFNwYW48c3RkOjpieXRlPiBkYXRhLCB1bnNpZ25lZCBhbGlnbm1lbnQpCiAgICAgewot
ICAgICAgICBpZiAoIWFsaWduQnVmZmVyUG9zaXRpb24oYWxpZ25tZW50LCBzaXplKSkKKyAgICAg
ICAgaWYgKCFhbGlnbkJ1ZmZlclBvc2l0aW9uKGFsaWdubWVudCwgZGF0YS5zaXplKCkpKQogICAg
ICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIG1lbWNweShkYXRhLCBtX2J1ZmZlciwgc2l6ZSk7
Ci0gICAgICAgIG1fYnVmZmVyICs9IHNpemU7CisgICAgICAgIG1lbWNweShkYXRhLmRhdGEoKSwg
bV9idWZmZXIsIGRhdGEuc2l6ZSgpKTsKKyAgICAgICAgbV9idWZmZXIgKz0gZGF0YS5zaXplKCk7
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIGRlY29kZUZpeGVk
TGVuZ3RoRGF0YShUJiYgZGF0YSwgdW5zaWduZWQgYWxpZ25tZW50ID0gYWxpZ25vZih0eXBlbmFt
ZSBkZWNsdHlwZShTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pOjp2YWx1ZV90eXBlKSkK
KyAgICB7CisgICAgICAgIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShhc1dyaXRhYmxlQnl0ZXMoU3Bh
biB7IHN0ZDo6Zm9yd2FyZDxUPihkYXRhKSB9KSwgYWxpZ25tZW50KTsKICAgICB9CiAKICAgICBi
b29sIGFsaWduQnVmZmVyUG9zaXRpb24odW5zaWduZWQgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNv
Y2tldENoYW5uZWwuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvTmV0d29yay9XZWJTb2NrZXRDaGFubmVsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTks
OCArNTksOCBAQCBOZXR3b3JrU2VuZFF1ZXVlIFdlYlNvY2tldENoYW5uZWw6OmNyZWF0CiAgICAg
ICAgIGNoYW5uZWwubm90aWZ5U2VuZEZyYW1lKFdlYlNvY2tldEZyYW1lOjpPcENvZGU6Ok9wQ29k
ZVRleHQsIHV0ZjhTdHJpbmcuZGF0YUFzVUludDhQdHIoKSwgdXRmOFN0cmluZy5sZW5ndGgoKSk7
CiAgICAgICAgIGNoYW5uZWwuc2VuZE1lc3NhZ2UoTWVzc2FnZXM6Ok5ldHdvcmtTb2NrZXRDaGFu
bmVsOjpTZW5kU3RyaW5nIHsgSVBDOjpEYXRhUmVmZXJlbmNlIHsgdXRmOFN0cmluZy5kYXRhQXNV
SW50OFB0cigpLCB1dGY4U3RyaW5nLmxlbmd0aCgpIH0gfSwgdXRmOFN0cmluZy5sZW5ndGgoKSk7
CiAgICAgfSwgWyZjaGFubmVsXShhdXRvJiBzcGFuKSB7Ci0gICAgICAgIGNoYW5uZWwubm90aWZ5
U2VuZEZyYW1lKFdlYlNvY2tldEZyYW1lOjpPcENvZGU6Ok9wQ29kZUJpbmFyeSwgc3Bhbi5kYXRh
KCksIHNwYW4uc2l6ZSgpKTsKLSAgICAgICAgY2hhbm5lbC5zZW5kTWVzc2FnZShNZXNzYWdlczo6
TmV0d29ya1NvY2tldENoYW5uZWw6OlNlbmREYXRhIHsgSVBDOjpEYXRhUmVmZXJlbmNlIHsgc3Bh
bi5kYXRhKCksIHNwYW4uc2l6ZSgpIH0gfSwgc3Bhbi5zaXplKCkpOworICAgICAgICBjaGFubmVs
Lm5vdGlmeVNlbmRGcmFtZShXZWJTb2NrZXRGcmFtZTo6T3BDb2RlOjpPcENvZGVCaW5hcnksIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNwYW4uZGF0YSgpKSwgc3Bhbi5zaXplKCkp
OworICAgICAgICBjaGFubmVsLnNlbmRNZXNzYWdlKE1lc3NhZ2VzOjpOZXR3b3JrU29ja2V0Q2hh
bm5lbDo6U2VuZERhdGEgeyBJUEM6OkRhdGFSZWZlcmVuY2UgeyByZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQ4X3QqPihzcGFuLmRhdGEoKSksIHNwYW4uc2l6ZSgpIH0gfSwgc3Bhbi5zaXplKCkp
OwogICAgIH0sIFsmY2hhbm5lbF0oRXhjZXB0aW9uQ29kZSBleGNlcHRpb25Db2RlKSB7CiAgICAg
ICAgIGF1dG8gY29kZSA9IHN0YXRpY19jYXN0PGludD4oZXhjZXB0aW9uQ29kZSk7CiAgICAgICAg
IGNoYW5uZWwuZmFpbChtYWtlU3RyaW5nKCJGYWlsZWQgdG8gbG9hZCBCbG9iOiBleGNlcHRpb24g
Y29kZSA9ICIsIGNvZGUpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0lQQ1Rlc3RpbmdBUEkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDQzLDEyICs0NDMsNyBAQCBKU1ZhbHVlUmVmIEpTU2hhcmVkTWVtb3J5OjpyZWFkQnl0
ZXMoSlNDCiAgICAgcmV0dXJuIHRvUmVmKGpzQXJyYXlCdWZmZXIpOwogfQogCi1zdHJ1Y3QgQXJy
YXlCdWZmZXJEYXRhIHsKLSAgICB2b2lkKiBidWZmZXIgeyBudWxscHRyIH07Ci0gICAgc2l6ZV90
IGxlbmd0aCB7IDAgfTsKLX07Ci0KLXN0YXRpYyBBcnJheUJ1ZmZlckRhdGEgYXJyYXlCdWZmZXJE
YXRhRnJvbVZhbHVlUmVmKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1R5cGVkQXJyYXlUeXBlIHR5
cGUsIEpTVmFsdWVSZWYgdmFsdWVSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3N0YXRpYyBT
cGFuPHN0ZDo6Ynl0ZT4gYXJyYXlCdWZmZXJEYXRhRnJvbVZhbHVlUmVmKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU1R5cGVkQXJyYXlUeXBlIHR5cGUsIEpTVmFsdWVSZWYgdmFsdWVSZWYsIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKIHsKICAgICBhdXRvIG9iamVjdFJlZiA9IEpTVmFsdWVUb09iamVj
dChjb250ZXh0LCB2YWx1ZVJlZiwgZXhjZXB0aW9uKTsKICAgICBpZiAoIW9iamVjdFJlZikKQEAg
LTQ2OSw3ICs0NjQsNyBAQCBzdGF0aWMgQXJyYXlCdWZmZXJEYXRhIGFycmF5QnVmZmVyRGF0YUZy
CiAgICAgZWxzZQogICAgICAgICBsZW5ndGggPSBKU09iamVjdEdldFR5cGVkQXJyYXlCeXRlTGVu
Z3RoKGNvbnRleHQsIG9iamVjdFJlZiwgZXhjZXB0aW9uKTsKIAotICAgIHJldHVybiB7IGJ1ZmZl
ciwgbGVuZ3RoIH07CisgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8c3RkOjpieXRlKj4oYnVmZmVy
KSwgbGVuZ3RoIH07CiB9CiAKIEpTVmFsdWVSZWYgSlNTaGFyZWRNZW1vcnk6OndyaXRlQnl0ZXMo
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQpAQCAtNDg3LDEzICs0ODIsMTMgQEAgSlNWYWx1ZVJlZiBKU1No
YXJlZE1lbW9yeTo6d3JpdGVCeXRlcyhKUwogICAgIH0KIAogICAgIGF1dG8gZGF0YSA9IGFycmF5
QnVmZmVyRGF0YUZyb21WYWx1ZVJlZihjb250ZXh0LCB0eXBlLCBhcmd1bWVudHNbMF0sIGV4Y2Vw
dGlvbik7Ci0gICAgaWYgKCFkYXRhLmJ1ZmZlcikgeworICAgIGlmICghZGF0YS5kYXRhKCkpIHsK
ICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiQ291bGQgbm90
IHJlYWQgdGhlIGJ1ZmZlciJfcyk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKICAgICB9CiAKICAgICBzaXplX3Qgb2Zmc2V0ID0gMDsKLSAgICBzaXplX3Qg
bGVuZ3RoID0gZGF0YS5sZW5ndGg7CisgICAgc2l6ZV90IGxlbmd0aCA9IGRhdGEuc2l6ZSgpOwog
ICAgIHNpemVfdCBzaGFyZWRNZW1vcnlTaXplID0ganNTaGFyZWRNZW1vcnktPm1fc2hhcmVkTWVt
b3J5LT5zaXplKCk7CiAKICAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSB0b0pTKGNvbnRleHQpOwpA
QCAtNTI2LDcgKzUyMSw3IEBAIEpTVmFsdWVSZWYgSlNTaGFyZWRNZW1vcnk6OndyaXRlQnl0ZXMo
SlMKICAgICAgICAgbGVuZ3RoID0gKmxlbmd0aFZhbHVlOwogICAgIH0KIAotICAgIG1lbWNweShz
dGF0aWNfY2FzdDx1aW50OF90Kj4oanNTaGFyZWRNZW1vcnktPm1fc2hhcmVkTWVtb3J5LT5kYXRh
KCkpICsgb2Zmc2V0LCBkYXRhLmJ1ZmZlciwgbGVuZ3RoKTsKKyAgICBtZW1jcHkoc3RhdGljX2Nh
c3Q8dWludDhfdCo+KGpzU2hhcmVkTWVtb3J5LT5tX3NoYXJlZE1lbW9yeS0+ZGF0YSgpKSArIG9m
ZnNldCwgZGF0YS5kYXRhKCksIGxlbmd0aCk7CiAKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7CiB9CkBAIC02ODgsMTAgKzY4MywxMCBAQCBzdGF0aWMgYm9vbCBlbmNv
ZGVUeXBlZEFycmF5KElQQzo6RW5jb2RlCiAgICAgQVNTRVJUKHR5cGUgIT0ga0pTVHlwZWRBcnJh
eVR5cGVOb25lKTsKIAogICAgIGF1dG8gZGF0YSA9IGFycmF5QnVmZmVyRGF0YUZyb21WYWx1ZVJl
Zihjb250ZXh0LCB0eXBlLCB2YWx1ZVJlZiwgZXhjZXB0aW9uKTsKLSAgICBpZiAoIWRhdGEuYnVm
ZmVyKQorICAgIGlmICghZGF0YS5kYXRhKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KGRhdGEuYnVmZmVyKSwgZGF0YS5sZW5ndGgsIDEpOworICAgIGVuY29kZXIuZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKGRhdGEpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0Vudmlyb25tZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL0Vudmlyb25tZW50LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9FbnZpcm9ubWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
Niw3ICsxNTYsNyBAQCBib29sIEVudmlyb25tZW50Ojpjb21wdXRlSXNEZWJ1Z0hlYXBFbmFiCiAg
ICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKIAotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwpJbmRleDogVG9vbHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysgVG9v
bHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMjEtMDYtMTEg
IFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIEFkb3B0IFNwYW4gaW4g
bW9yZSBwbGFjZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyNjg4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFtXSVBdCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBw
b3J0Q2Fpcm8uY3BwOgorICAgICAgICAoY29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQml0bWFwQ29u
dGV4dCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1wU3VwcG9ydENHLmNw
cDoKKyAgICAgICAgKGNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckJpdG1hcENvbnRleHQpOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0Jsb29tRmlsdGVyLmNwcDoKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OmdlbmVyYXRlUmFuZG9tRGlnZXN0cyk6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpURVNUX0YpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkNvbm5lY3Rpb246OndlYlNvY2tldEhhbmRzaGFrZSk6
CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9jYWlyby9UZXN0SW52b2NhdGlvbkNhaXJvLmNw
cDoKKyAgICAgICAgKFdUUjo6Y29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQ2Fpcm9TdXJmYWNlKToK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwOgorICAg
ICAgICAoV1RSOjpjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JDb250ZXh0KToKKwogMjAyMS0wNi0x
MSAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KIAogICAgICAgICBb
V2luXVtEdW1wUmVuZGVyVHJlZV0gLS1uby10aW1lb3V0IHN3aXRjaCBkb2Vzbid0IHdvcmsKSW5k
ZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NhaXJvL1BpeGVsRHVtcFN1cHBvcnRDYWlyby5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2Fpcm8vUGl4ZWxEdW1wU3VwcG9y
dENhaXJvLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2Fp
cm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUs
NyBAQCB2b2lkIGNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckJpdG1hcENvbnRlCiAgICAgU0hBMSBz
aGExOwogICAgIHVuc2lnbmVkIGNoYXIqIGJpdG1hcERhdGEgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyKj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlKSk7CiAgICAgZm9y
ICh1bnNpZ25lZCByb3cgPSAwOyByb3cgPCBwaXhlbHNIaWdoOyByb3crKykgewotICAgICAgICBz
aGExLmFkZEJ5dGVzKGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlKTsKKyAgICAgICAgc2hhMS5h
ZGRCeXRlcyhTcGFuIHsgYml0bWFwRGF0YSwgNCAqIHBpeGVsc1dpZGUgfSk7CiAgICAgICAgIGJp
dG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7CiAgICAgfQogICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwpJ
bmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1wU3VwcG9ydENHLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jZy9QaXhlbER1bXBTdXBwb3J0Q0cuY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jZy9QaXhlbER1bXBT
dXBwb3J0Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxNCArODgsMTQgQEAgdm9pZCBjb21w
dXRlU0hBMUhhc2hTdHJpbmdGb3JCaXRtYXBDb250ZQogICAgICAgICAgICAgdWludDMyX3QgYnVm
ZmVyW3BpeGVsc1dpZGVdOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjb2x1bW4gPSAwOyBj
b2x1bW4gPCBwaXhlbHNXaWRlOyBjb2x1bW4rKykKICAgICAgICAgICAgICAgICBidWZmZXJbY29s
dW1uXSA9IE9TUmVhZExpdHRsZUludDMyKGJpdG1hcERhdGEsIDQgKiBjb2x1bW4pOwotICAgICAg
ICAgICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihidWZm
ZXIpLCA0ICogcGl4ZWxzV2lkZSk7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyBi
dWZmZXIsIHBpeGVsc1dpZGUgfSk7CiAgICAgICAgICAgICBiaXRtYXBEYXRhICs9IGJ5dGVzUGVy
Um93OwogICAgICAgICB9CiAgICAgfSBlbHNlCiAjZW5kaWYKICAgICB7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgcm93ID0gMDsgcm93IDwgcGl4ZWxzSGlnaDsgcm93KyspIHsKLSAgICAgICAgICAg
IHNoYTEuYWRkQnl0ZXMoYml0bWFwRGF0YSwgNCAqIHBpeGVsc1dpZGUpOworICAgICAgICAgICAg
c2hhMS5hZGRCeXRlcyhTcGFuIHsgYml0bWFwRGF0YSwgNCAqIHBpeGVsc1dpZGUgfSk7CiAgICAg
ICAgICAgICBiaXRtYXBEYXRhICs9IGJ5dGVzUGVyUm93OwogICAgICAgICB9CiAgICAgfQpJbmRl
eDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQmxvb21GaWx0ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0Jsb29tRmlsdGVyLmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQmxvb21GaWx0
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHN0YXRpYyBWZWN0b3I8U0hB
MTo6RGlnZXN0PiBnZW5lcmF0ZVJhbmQKICAgICBTSEExIHNoYTE7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGhhc2hDb3VudDsgKytpKSB7CiAgICAgICAgIGRvdWJsZSByYW5kb20gPSBy
YW5kb21OdW1iZXIoKTsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PHVp
bnQ4X3QqPigmcmFuZG9tKSwgc2l6ZW9mKGRvdWJsZSkpOworICAgICAgICBzaGExLmFkZEJ5dGVz
KFNwYW4geyAmcmFuZG9tLCAxIH0pOwogICAgICAgICBTSEExOjpEaWdlc3QgZGlnZXN0OwogICAg
ICAgICBzaGExLmNvbXB1dGVIYXNoKGRpZ2VzdCk7CiAgICAgICAgIGhhc2hlcy5hcHBlbmQoZGln
ZXN0KTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0u
Y3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9G
aWxlU3lzdGVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDggKzEzMyw4IEBAIFRFU1RfRihG
aWxlU3lzdGVtVGVzdCwgTWFwcGluZ0V4aXN0aW5nRmkKICAgICBGaWxlU3lzdGVtOjpNYXBwZWRG
aWxlRGF0YSBtYXBwZWRGaWxlRGF0YSh0ZW1wRmlsZVBhdGgoKSwgRmlsZVN5c3RlbTo6TWFwcGVk
RmlsZU1vZGU6OlNoYXJlZCwgc3VjY2Vzcyk7CiAgICAgRVhQRUNUX1RSVUUoc3VjY2Vzcyk7CiAg
ICAgRVhQRUNUX1RSVUUoISFtYXBwZWRGaWxlRGF0YSk7Ci0gICAgRVhQRUNUX1RSVUUobWFwcGVk
RmlsZURhdGEuc2l6ZSgpID09IHN0cmxlbihGaWxlU3lzdGVtVGVzdERhdGEpKTsKLSAgICBFWFBF
Q1RfVFJVRShzdHJuc3RyKEZpbGVTeXN0ZW1UZXN0RGF0YSwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hh
cio+KG1hcHBlZEZpbGVEYXRhLmRhdGEoKSksIG1hcHBlZEZpbGVEYXRhLnNpemUoKSkpOworICAg
IEVYUEVDVF9UUlVFKG1hcHBlZEZpbGVEYXRhLmRhdGEoKS5zaXplKCkgPT0gc3RybGVuKEZpbGVT
eXN0ZW1UZXN0RGF0YSkpOworICAgIEVYUEVDVF9UUlVFKHN0cm5zdHIoRmlsZVN5c3RlbVRlc3RE
YXRhLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihtYXBwZWRGaWxlRGF0YS5kYXRhKCku
ZGF0YSgpKSwgbWFwcGVkRmlsZURhdGEuZGF0YSgpLnNpemUoKSkpOwogfQogCiBURVNUX0YoRmls
ZVN5c3RlbVRlc3QsIE1hcHBpbmdFeGlzdGluZ0VtcHR5RmlsZSkKSW5kZXg6IFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL1NIQTEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL1NIQTEuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9TSEExLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgs
NyBAQCBzdGF0aWMgdm9pZCBleHBlY3RTSEExKENTdHJpbmcgaW5wdXQsIGluCiB7CiAgICAgU0hB
MSBzaGExOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVwZWF0OyArK2kpCi0gICAgICAgIHNo
YTEuYWRkQnl0ZXMoaW5wdXQpOworICAgICAgICBzaGExLmFkZEJ5dGVzKGlucHV0LmJ5dGVzKCkp
OwogICAgIENTdHJpbmcgYWN0dWFsID0gc2hhMS5jb21wdXRlSGV4RGlnZXN0KCk7CiAKICAgICBB
U1NFUlRfRVEoZXhwZWN0ZWQubGVuZ3RoKCksIGFjdHVhbC5sZW5ndGgoKSk7CkluZGV4OiBUb29s
cy9UZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
VGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCShyZXZpc2lvbiAyNzg4MDkpCisrKyBU
b29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW0JKHdvcmtpbmcgY29weSkKQEAg
LTM0MCwxMSArMzQwLDExIEBAIHZvaWQgQ29ubmVjdGlvbjo6d2ViU29ja2V0SGFuZHNoYWtlKENv
bXAKIAogICAgICAgICAgICAgY29uc3RleHByIGF1dG8qIHdlYlNvY2tldEtleUdVSUQgPSAiMjU4
RUFGQTUtRTkxNC00N0RBLTk1Q0EtQzVBQjBEQzg1QjExIjsKICAgICAgICAgICAgIFNIQTEgc2hh
MTsKLSAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90Kj4oa2V5QmVnaW4pLCBrZXlFbmQgLSBrZXlCZWdpbik7Ci0gICAgICAgICAgICBzaGExLmFk
ZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHdlYlNvY2tldEtleUdVSUQp
LCBzdHJsZW4od2ViU29ja2V0S2V5R1VJRCkpOworICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhT
cGFuIHsga2V5QmVnaW4sIGtleUVuZCB9KTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3Bh
biB7IHdlYlNvY2tldEtleUdVSUQsIHN0cmxlbih3ZWJTb2NrZXRLZXlHVUlEKSB9KTsKICAgICAg
ICAgICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwogICAgICAgICAgICAgc2hhMS5jb21wdXRlSGFzaCho
YXNoKTsKLSAgICAgICAgICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhoYXNoLmRhdGEo
KSwgU0hBMTo6aGFzaFNpemUpOworICAgICAgICAgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3Ry
aW5nKGhhc2gpOwogICAgICAgICB9OwogCiAgICAgICAgIGNvbm5lY3Rpb24uc2VuZChIVFRQUmVz
cG9uc2UoMTAxLCB7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZv
Y2F0aW9uQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2Fp
cm8vVGVzdEludm9jYXRpb25DYWlyby5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvY2Fpcm8vVGVzdEludm9jYXRpb25DYWlyby5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUyLDcgKzUyLDcgQEAgc3RhdGljIHZvaWQgY29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9y
Q2FpcgogICAgIFNIQTEgc2hhMTsKICAgICB1bnNpZ25lZCBjaGFyKiBiaXRtYXBEYXRhID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3Vy
ZmFjZSkpOwogICAgIGZvciAoc2l6ZV90IHJvdyA9IDA7IHJvdyA8IHBpeGVsc0hpZ2g7ICsrcm93
KSB7Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMoYml0bWFwRGF0YSwgNCAqIHBpeGVsc1dpZGUpOwor
ICAgICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyBiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lkZSB9
KTsKICAgICAgICAgYml0bWFwRGF0YSArPSBieXRlc1BlclJvdzsKICAgICB9CiAgICAgU0hBMTo6
RGlnZXN0IGhhc2g7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0
aW9uQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2cvVGVzdElu
dm9jYXRpb25DRy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvY2cvVGVzdEludm9jYXRpb25DRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcg
QEAgdm9pZCBjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JDb250ZXh0KENHQwogI2VuZGlmCiAgICAg
ewogICAgICAgICBmb3IgKHVuc2lnbmVkIHJvdyA9IDA7IHJvdyA8IHBpeGVsc0hpZ2g7IHJvdysr
KSB7Ci0gICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRl
KTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IGJpdG1hcERhdGEsIDQgKiBwaXhl
bHNXaWRlIH0pOwogICAgICAgICAgICAgYml0bWFwRGF0YSArPSBieXRlc1BlclJvdzsKICAgICAg
ICAgfQogICAgIH0K
</data>
<flag name="commit-queue"
          id="453036"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431292</attachid>
            <date>2021-06-13 15:54:41 -0700</date>
            <delta_ts>2021-06-13 16:03:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226887-20210613155440.patch</filename>
            <type>text/plain</type>
            <size>200710</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBA
CisyMDIxLTA2LTEyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogQVBJL0pTU2NyaXB0Lm1tOgorICAg
ICAgICAoK1tKU1NjcmlwdCBzY3JpcHRPZlR5cGU6bWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTp3
aXRoU291cmNlVVJMOmFuZEJ5dGVjb2RlQ2FjaGU6aW5WaXJ0dWFsTWFjaGluZTplcnJvcjpdKToK
KyAgICAgICAgKC1bSlNTY3JpcHQgcmVhZENhY2hlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHdy
aXRlQ2FjaGU6XSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9ja0hhc2g6OkNvZGVCbG9ja0hhc2gpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHA6CisgICAgICAgIChJbnNw
ZWN0b3I6OmJhY2tlbmRDb21tYW5kc0hhc2gpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZm
ZXIuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJDb250ZW50czo6d3JpdGFibGVCeXRlcyk6
CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyQ29udGVudHM6OmJ5dGVzIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6QXJyYXlCdWZmZXI6OndyaXRhYmxlQnl0ZXMpOgorICAgICAgICAoSlNDOjpBcnJh
eUJ1ZmZlcjo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
Lmg6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6d3JpdGFibGVCeXRlcyk6CisgICAg
ICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRp
bWUvQ2FjaGVQYXlsb2FkLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVQYXlsb2FkOjptYWtlTWFw
cGVkUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6bWFrZU1hbGxvY1BheWxv
YWQpOgorICAgICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6Om1ha2VFbXB0eVBheWxvYWQpOgorICAg
ICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6OkNhY2hlUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNh
Y2hlUGF5bG9hZDo6ZnJlZURhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVQYXlsb2FkLmg6
CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6ZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlUGF5bG9hZDo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6
Q2FjaGVQYXlsb2FkKToKKyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKToKKwogMjAyMS0w
Ni0xMSAgUGF0cmljayBBbmdsZSAgPHBhbmdsZUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogQWRkIGluc3RydW1lbnRhdGlvbiB0byBub2RlIGRlc3RydWN0aW9uIGZvciBJbnNw
ZWN0b3JET01BZ2VudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMTMgKzEzNCwxMyBAQCArIChpbnN0YW5jZXR5cGUpc2Ny
aXB0T2ZUeXBlOihKU1NjcmlwdFR5CiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4g
Y3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJGaWxlIGF0IHBhdGggJUAg
Y291bGQgbm90IGJlIG1hcHBlZC4iLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihzeXN0ZW1QYXRo
KV0sIGVycm9yKTsKIAotICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCkpKQor
ICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmlsZURhdGEuZGF0YSgpLnNpemUoKSkpCiAg
ICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIk5v
dCBhbGwgY2hhcmFjdGVycyBpbiBmaWxlIGF0ICVAIGFyZSBBU0NJSS4iLCBzdGF0aWNfY2FzdDxO
U1N0cmluZyAqPihzeXN0ZW1QYXRoKV0sIGVycm9yKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gYWRv
cHROUyhbW0pTU2NyaXB0IGFsbG9jXSBpbml0XSk7CiAgICAgcmVzdWx0LT5tX3ZpcnR1YWxNYWNo
aW5lID0gdm07CiAgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOwotICAgIHJlc3VsdC0+bV9zb3Vy
Y2UgPSBTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcoYml0d2lzZV9jYXN0
PGNvbnN0IExDaGFyKj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpKSk7CisgICAg
cmVzdWx0LT5tX3NvdXJjZSA9IFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWlu
ZyhiaXR3aXNlX2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmls
ZURhdGEuZGF0YSgpLnNpemUoKSkpOwogICAgIHJlc3VsdC0+bV9tYXBwZWRTb3VyY2UgPSBXVEZN
b3ZlKGZpbGVEYXRhKTsKICAgICByZXN1bHQtPm1fc291cmNlVVJMID0gc291cmNlVVJMOwogICAg
IHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7CkBAIC0xNjgsMjQgKzE2OCwyMyBAQCAt
ICh2b2lkKXJlYWRDYWNoZQogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgY29uc3QgdWludDhfdCogZmlsZURhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihtYXBwZWRGaWxlLmRhdGEoKSk7Ci0gICAgdW5zaWduZWQgZmlsZVRvdGFsU2l6ZSA9IG1h
cHBlZEZpbGUuc2l6ZSgpOworICAgIGF1dG8gZmlsZURhdGEgPSBtYXBwZWRGaWxlLmRhdGEoKTsK
IAogICAgIC8vIEVuc3VyZSB3ZSBhdCBsZWFzdCBoYXZlIGEgU0hBMTo6RGlnZXN0IHRvIHJlYWQu
Ci0gICAgaWYgKGZpbGVUb3RhbFNpemUgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgeworICAgIGlm
IChmaWxlRGF0YS5zaXplKCkgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgewogICAgICAgICBGaWxl
U3lzdGVtOjpkZWxldGVGaWxlKGNhY2hlRmlsZW5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgdW5zaWduZWQgZmlsZURhdGFTaXplID0gZmlsZVRvdGFsU2l6ZSAtIHNpemVvZihT
SEExOjpEaWdlc3QpOworICAgIHVuc2lnbmVkIGZpbGVEYXRhU2l6ZSA9IGZpbGVEYXRhLnNpemUo
KSAtIHNpemVvZihTSEExOjpEaWdlc3QpOwogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFz
aDsKICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhmaWxlRGF0YSwgZmlsZURhdGFT
aXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKGZpbGVEYXRhLmZpcnN0KGZpbGVEYXRhU2l6ZSkpOwog
ICAgIHNoYTEuY29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2VzdCBm
aWxlSGFzaDsKLSAgICBtZW1jcHkoJmZpbGVIYXNoLCBmaWxlRGF0YSArIGZpbGVEYXRhU2l6ZSwg
c2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOworICAgIG1lbWNweSgmZmlsZUhhc2gsIGZpbGVEYXRhLmRh
dGEoKSArIGZpbGVEYXRhU2l6ZSwgc2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOwogCiAgICAgaWYgKGNv
bXB1dGVkSGFzaCAhPSBmaWxlSGFzaCkgewogICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxl
KGNhY2hlRmlsZW5hbWUpOwpAQCAtMzQzLDcgKzM0Miw3IEBAIC0gKEJPT0wpd3JpdGVDYWNoZToo
U3RyaW5nJillcnJvcgogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFzaDsKICAgICBTSEEx
IHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhtX2NhY2hlZEJ5dGVjb2RlLT5kYXRhKCksIG1fY2Fj
aGVkQnl0ZWNvZGUtPnNpemUoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgbV9jYWNoZWRC
eXRlY29kZS0+ZGF0YSgpLCBtX2NhY2hlZEJ5dGVjb2RlLT5zaXplKCkgfSk7CiAgICAgc2hhMS5j
b21wdXRlSGFzaChjb21wdXRlZEhhc2gpOwogICAgIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKHRl
bXBGRCwgY29tcHV0ZWRIYXNoLmRhdGEoKSwgc2l6ZW9mKGNvbXB1dGVkSGFzaCkpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0hhc2guY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgQ29kZUJsb2Nr
SGFzaDo6Q29kZUJsb2NrSGFzaChjb25zdCBTb3VyYwogICAgIEFTU0VSVChzb3VyY2VDb2RlLmxl
bmd0aCgpID49IDApOwogICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhTb3VyY2VDb2RlTGVuZ3Ro
VG9IYXNoID0gNTAwICogTUI7CiAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzb3VyY2VD
b2RlLmxlbmd0aCgpKSA8IG1heFNvdXJjZUNvZGVMZW5ndGhUb0hhc2gpCi0gICAgICAgIHNoYTEu
YWRkQnl0ZXMoc291cmNlQ29kZS50b1VURjgoKSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoc291
cmNlQ29kZS50b1VURjgoKS5ieXRlcygpKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gSnVzdCBo
YXNoIHdpdGggdGhlIGxlbmd0aCBhbmQgc2FtcGxlcyBvZiB0aGUgc291cmNlIHN0cmluZyBpbnN0
ZWFkLgogICAgICAgICBTdHJpbmdWaWV3IHN0ciA9IHNvdXJjZUNvZGUucHJvdmlkZXIoKS0+c291
cmNlKCk7CkBAIC02MiwxMCArNjIsMTAgQEAgQ29kZUJsb2NrSGFzaDo6Q29kZUJsb2NrSGFzaChj
b25zdCBTb3VyYwogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHIubGVuZ3RoKCk7CiAgICAg
ICAgIHVuc2lnbmVkIHN0ZXAgPSAobGVuZ3RoID4+IDEwKSArIDE7CiAKLSAgICAgICAgc2hhMS5h
ZGRCeXRlcyhiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KCZsZW5ndGgpLCBzaXplb2YobGVuZ3RoKSk7
CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZsZW5ndGgsIDEgfSk7CiAgICAgICAgIGRv
IHsKICAgICAgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IHN0cltpbmRleF07Ci0gICAgICAgICAg
ICBzaGExLmFkZEJ5dGVzKGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oJmNoYXJhY3RlciksIHNpemVv
ZihjaGFyYWN0ZXIpKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZjaGFyYWN0
ZXIsIDEgfSk7CiAgICAgICAgICAgICBvbGRJbmRleCA9IGluZGV4OwogICAgICAgICAgICAgaW5k
ZXggKz0gc3RlcDsKICAgICAgICAgfSB3aGlsZSAoaW5kZXggPiBvbGRJbmRleCAmJiBpbmRleCA8
IGxlbmd0aCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VIYXNo
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VI
YXNoLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BhcnNlSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiBQYXJzZUhhc2g6OlBhcnNlSGFzaChjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VD
b2RlKQogewogICAgIFNIQTEgc2hhMTsKLSAgICBzaGExLmFkZEJ5dGVzKHNvdXJjZUNvZGUudG9V
VEY4KCkpOworICAgIHNoYTEuYWRkQnl0ZXMoc291cmNlQ29kZS50b1VURjgoKS5ieXRlcygpKTsK
ICAgICBTSEExOjpEaWdlc3QgZGlnZXN0OwogICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsK
ICAgICB1bnNpZ25lZCBoYXNoID0gZGlnZXN0WzBdIHwgKGRpZ2VzdFsxXSA8PCA4KSB8IChkaWdl
c3RbMl0gPDwgMTYpIHwgKGRpZ2VzdFszXSA8PCAyNCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1JlbW90ZUluc3BlY3RvclV0aWxzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1Jl
bW90ZUluc3BlY3RvclV0aWxzLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgY29uc3QgQ1N0cmluZyYgYmFja2VuZENv
bW1hbmRzSGFzaCgpCiAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSA9IGdfYnl0ZXNfZ2V0X2Rh
dGEoYnl0ZXMuZ2V0KCksICZkYXRhU2l6ZSk7CiAgICAgICAgIEFTU0VSVChkYXRhU2l6ZSk7CiAg
ICAgICAgIFNIQTEgc2hhMTsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhzdGF0aWNfY2FzdDxjb25z
dCB1aW50OF90Kj4oZGF0YSksIGRhdGFTaXplKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFu
IHsgc3RhdGljX2Nhc3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSksIGRhdGFTaXplIH0pOwogICAg
ICAgICBoZXhEaWdlc3QgPSBzaGExLmNvbXB1dGVIZXhEaWdlc3QoKTsKICAgICB9CiAgICAgcmV0
dXJuIGhleERpZ2VzdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogI2luY2x1ZGUgPHd0Zi9QYWNrZWRSZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZl
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtODAsNyAr
ODEsMTAgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBt
X2RhdGEuZ2V0TWF5QmVOdWxsKHNpemVJbkJ5dGVzKCkpOyB9CiAgICAgdW5zaWduZWQgc2l6ZUlu
Qnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX3NpemVJbkJ5dGVzOyB9Ci0gICAgCisKKyAgICBTcGFu
PHN0ZDo6Ynl0ZT4gd3JpdGFibGVCeXRlcygpIHsgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8c3RkOjpi
eXRlKj4oZGF0YSgpKSwgc2l6ZUluQnl0ZXMoKSB9OyB9CisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4geyBzdGF0aWNfY2FzdDxjb25zdCBzdGQ6OmJ5dGUq
PihkYXRhKCkpLCBzaXplSW5CeXRlcygpIH07IH0KKwogICAgIGJvb2wgaXNTaGFyZWQoKSBjb25z
dCB7IHJldHVybiBtX3NoYXJlZDsgfQogICAgIAogcHJpdmF0ZToKQEAgLTEyNyw3ICsxMzEsOSBA
QCBwdWJsaWM6CiAgICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKICAgICBpbmxpbmUgY29uc3Qgdm9p
ZCogZGF0YSgpIGNvbnN0OwogICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7
Ci0gICAgCisgICAgaW5saW5lIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCk7CisgICAg
aW5saW5lIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAgICAgdm9pZCBt
YWtlU2hhcmVkKCk7CiAgICAgdm9pZCBzZXRTaGFyaW5nTW9kZShBcnJheUJ1ZmZlclNoYXJpbmdN
b2RlKTsKICAgICBpbmxpbmUgYm9vbCBpc1NoYXJlZCgpIGNvbnN0OwpAQCAtMTk3LDYgKzIwMywx
NiBAQCB1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJu
IG1fY29udGVudHMuc2l6ZUluQnl0ZXMoKTsKIH0KIAorU3BhbjxzdGQ6OmJ5dGU+IEFycmF5QnVm
ZmVyOjp3cml0YWJsZUJ5dGVzKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZW50cy53cml0YWJsZUJ5
dGVzKCk7Cit9CisKK1NwYW48Y29uc3Qgc3RkOjpieXRlPiBBcnJheUJ1ZmZlcjo6Ynl0ZXMoKSBj
b25zdAoreworICAgIHJldHVybiBtX2NvbnRlbnRzLmJ5dGVzKCk7Cit9CisKIGJvb2wgQXJyYXlC
dWZmZXI6OmlzU2hhcmVkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb250ZW50cy5pc1NoYXJl
ZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZm
ZXJWaWV3LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4Niw5IEBAIHB1
YmxpYzoKIAogICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVM
ZW5ndGg7IH0KIAorICAgIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCkgeyByZXR1cm4g
eyBzdGF0aWNfY2FzdDxzdGQ6OmJ5dGUqPihkYXRhKCkpLCBieXRlTGVuZ3RoKCkgfTsgfQorICAg
IFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0IHsgcmV0dXJuIHsgc3RhdGljX2Nh
c3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSgpKSwgYnl0ZUxlbmd0aCgpIH07IH0KKwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0RGV0YWNoYWJsZShib29sKTsKICAgICBib29sIGlzRGV0
YWNoYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNEZXRhY2hhYmxlOyB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlUGF5bG9hZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsMjcgKzMwLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogCiBD
YWNoZVBheWxvYWQgQ2FjaGVQYXlsb2FkOjptYWtlTWFwcGVkUGF5bG9hZChGaWxlU3lzdGVtOjpN
YXBwZWRGaWxlRGF0YSYmIGRhdGEpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZCh0cnVlLCBk
YXRhLmxlYWtIYW5kbGUoKSwgZGF0YS5zaXplKCkpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQo
dHJ1ZSwgZGF0YS5sZWFrSGFuZGxlKCkpOwogfQogCiBDYWNoZVBheWxvYWQgQ2FjaGVQYXlsb2Fk
OjptYWtlTWFsbG9jUGF5bG9hZChNYWxsb2NQdHI8dWludDhfdCwgVk1NYWxsb2M+JiYgZGF0YSwg
c2l6ZV90IHNpemUpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZChmYWxzZSwgZGF0YS5sZWFr
UHRyKCksIHNpemUpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQoZmFsc2UsIGFzV3JpdGFibGVC
eXRlcyhTcGFuIHsgZGF0YS5sZWFrUHRyKCksIHNpemUgfSkpOwogfQogCiBDYWNoZVBheWxvYWQg
Q2FjaGVQYXlsb2FkOjptYWtlRW1wdHlQYXlsb2FkKCkKIHsKLSAgICByZXR1cm4gQ2FjaGVQYXls
b2FkKHRydWUsIG51bGxwdHIsIDApOworICAgIHJldHVybiBDYWNoZVBheWxvYWQodHJ1ZSwgeyB9
KTsKIH0KIAogQ2FjaGVQYXlsb2FkOjpDYWNoZVBheWxvYWQoQ2FjaGVQYXlsb2FkJiYgb3RoZXIp
CiB7Ci0gICAgbV9tYXBwZWQgPSBvdGhlci5tX21hcHBlZDsKLSAgICBtX3NpemUgPSBvdGhlci5t
X3NpemU7Ci0gICAgbV9kYXRhID0gb3RoZXIubV9kYXRhOwotICAgIG90aGVyLm1fbWFwcGVkID0g
ZmFsc2U7Ci0gICAgb3RoZXIubV9kYXRhID0gbnVsbHB0cjsKLSAgICBvdGhlci5tX3NpemUgPSAw
OworICAgIG1fbWFwcGVkID0gc3RkOjpleGNoYW5nZShvdGhlci5tX21hcHBlZCwgZmFsc2UpOwor
ICAgIG1fZGF0YSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLCB7IH0pOwogfQogCiBDYWNo
ZVBheWxvYWQ6On5DYWNoZVBheWxvYWQoKQpAQCAtNjcsMTIgKzYzLDEzIEBAIENhY2hlUGF5bG9h
ZCYgQ2FjaGVQYXlsb2FkOjpvcGVyYXRvcj0oQ2EKIAogdm9pZCBDYWNoZVBheWxvYWQ6OmZyZWVE
YXRhKCkKIHsKLSAgICBpZiAoIW1fZGF0YSkKKyAgICBpZiAoIW1fZGF0YS5kYXRhKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBpZiAobV9tYXBwZWQpIHsKLSAgICAgICAgRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1fZGF0YSwgbV9zaXplKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZmFzdEZy
ZWUobV9kYXRhKTsKKworICAgIGlmIChtX21hcHBlZCkKKyAgICAgICAgRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1fZGF0YSk7CisgICAgZWxzZQorICAgICAgICBmYXN0RnJlZShtX2RhdGEu
ZGF0YSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHd0Zi9GaWxlU3lz
dGVtLmg+CiAjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MSwyMiArNDIsMjAgQEAgcHVibGljOgogICAgIEpT
X0VYUE9SVF9QUklWQVRFIH5DYWNoZVBheWxvYWQoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBD
YWNoZVBheWxvYWQmIG9wZXJhdG9yPShDYWNoZVBheWxvYWQmJiBvdGhlcik7CiAKLSAgICBjb25z
dCB1aW50OF90KiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBjb25zdCB1aW50OF90KiBkYXRhKCkg
Y29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9kYXRhLmRhdGEoKSk7
IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5zaXplKCk7IH0KIAog
cHJpdmF0ZToKLSAgICBDYWNoZVBheWxvYWQoYm9vbCBtYXBwZWQsIHZvaWQqIGRhdGEsIHNpemVf
dCBzaXplKQorICAgIENhY2hlUGF5bG9hZChib29sIG1hcHBlZCwgU3BhbjxzdGQ6OmJ5dGU+IGRh
dGEpCiAgICAgICAgIDogbV9tYXBwZWQobWFwcGVkKQotICAgICAgICAsIG1fc2l6ZShzaXplKQot
ICAgICAgICAsIG1fZGF0YShzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGF0YSkpCisgICAgICAgICwg
bV9kYXRhKGRhdGEpCiAgICAgewogICAgIH0KIAogICAgIHZvaWQgZnJlZURhdGEoKTsKIAogICAg
IGJvb2wgbV9tYXBwZWQ7Ci0gICAgc2l6ZV90IG1fc2l6ZTsKLSAgICB1aW50OF90KiBtX2RhdGE7
CisgICAgU3BhbjxzdGQ6OmJ5dGU+IG1fZGF0YTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1Bh
cnNlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNyArMjYxLDcg
QEAgYXV0byBTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKGNvbnN0IHVpbgogICAgIH0KIAogICAg
IGlmIChVTkxJS0VMWShPcHRpb25zOjp1c2VFYWdlcldlYkFzc2VtYmx5TW9kdWxlSGFzaGluZygp
KSkKLSAgICAgICAgbV9oYXNoZXIuYWRkQnl0ZXMoYnl0ZXMsIGJ5dGVzU2l6ZSk7CisgICAgICAg
IG1faGFzaGVyLmFkZEJ5dGVzKFNwYW4geyBieXRlcywgYnl0ZXNTaXplIH0pOwogCiAgICAgc2l6
ZV90IG9mZnNldEluQnl0ZXMgPSAwOwogICAgIHdoaWxlICh0cnVlKSB7CkluZGV4OiBTb3VyY2Uv
V1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw2OCBAQAorMjAyMS0wNi0xMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgQWRvcHQgU3BhbiBpbiBtb3JlIHBsYWNlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIFdURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmNwcDoKKyAgICAg
ICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjp+TWFwcGVkRmlsZURhdGEp
OgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6TWFwcGVkRmlsZURhdGE6Om1hcEZpbGVI
YW5kbGUpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6dW5tYXBWaWV3T2ZGaWxlKToK
KyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Om1hcFRvRmlsZSk6CisgICAgICAgICogd3Rm
L0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVE
YXRhOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6
Ok1hcHBlZEZpbGVEYXRhOjpkYXRhIGNvbnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUlt
cGw6Ok1hcHBlZEZpbGVEYXRhOjpsZWFrSGFuZGxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3Rl
bUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YSk6CisgICAgICAgIChXVEY6OkZp
bGVTeXN0ZW1JbXBsOjpNYXBwZWRGaWxlRGF0YTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6
RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpzaXplIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1NIQTEuY3BwOgorICAgICAgICAoV1RG
OjpTSEExOjphZGRCeXRlcyk6CisgICAgICAgIChXVEY6OlNIQTE6OmZpbmFsaXplKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6U0hBMTo6cHJvY2Vzc0Jsb2NrKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6U0hBMTo6cmVzZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTSEExOjpoZXhEaWdl
c3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTSEExOjpjb21wdXRlSGV4RGlnZXN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3dGYvU0hBMS5oOgorICAgICAgICAoV1RGOjpTSEExOjphZGRCeXRl
cyk6CisgICAgICAgICogd3RmL1ZlY3Rvci5oOgorICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZS9Q
ZXJzaXN0ZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPENT
dHJpbmc+OjplbmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8Q1N0cmlu
Zz46OmRlY29kZSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTdHJpbmc+Ojpl
bmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVjb2RlU3RyaW5nVGV4dCk6Cisg
ICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUpOgor
ICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKToK
KyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oOgorICAgICAgICAq
IHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5jcHA6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyOjpEZWNvZGVyKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6
OkRlY29kZXI6OmJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFkKToKKyAgICAgICAgKFdURjo6UGVy
c2lzdGVuY2U6OkRlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjp2ZXJpZnlDaGVja3N1bSk6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyOjp+RGVjb2Rlcik6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3Bl
cnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmg6CisgICAgICAgICogd3RmL3BlcnNpc3RlbmNl
L1BlcnNpc3RlbnRFbmNvZGVyLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29k
ZXI6Omdyb3cpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6dXBkYXRlQ2hl
Y2tzdW1Gb3JEYXRhKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6OmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjpl
bmNvZGVOdW1iZXIpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6ZW5jb2Rl
Q2hlY2tzdW0pOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6RW5jb2Rlcik6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjp+RW5jb2Rlcik6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmg6
CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjpidWZmZXIgY29uc3QpOgorICAg
ICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIp
OgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6YnVmZmVyU2l6ZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL3RleHQvQmFzZTY0Lmg6CisgICAgICAgIChXVEY6OmJh
c2U2NEVuY29kZVRvVmVjdG9yKToKKyAgICAgICAgKFdURjo6YmFzZTY0RW5jb2RlVG9TdHJpbmcp
OgorICAgICAgICAqIHd0Zi90ZXh0L0NTdHJpbmcuaDoKKwogMjAyMS0wNi0xMSAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgV2Vha0hhc2hNYXAKSW5kZXg6
IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtNjkyLDYgKzY5Miw4IEBACiAJCUFEODlCNkI5MUU2NDE1MEYwMDkwNzA3RiAvKiBN
ZW1vcnlQcmVzc3VyZUhhbmRsZXJDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IE1lbW9yeVByZXNzdXJlSGFuZGxlckNvY29hLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBREYyQ0U2NDFFMzlGMTA2MDA2ODg5REIgLyogTWVtb3J5Rm9vdHBy
aW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lbW9yeUZvb3RwcmludC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREYyQ0U2NTFFMzlGMTA2MDA2ODg5REIg
LyogTWVtb3J5Rm9vdHByaW50Q29jb2EuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTWVtb3J5Rm9vdHByaW50Q29jb2EuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlCQzcwMEI0NDI2NzY2ODM0MDA0OUVERjIgLyogU3BhbkNvY29hLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNwYW5Db2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzcwMEI0
NTI2NzY2OUMxMDA0OUVERjIgLyogU3BhbkNGLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwYW5DRi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0EzMEM3RjI2NkQzMDM0MDAwRDIzMEMgLyog
U3Bhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTcGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyQkNGQzNFMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5ndWFnZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYW5ndWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyQkNGQzNGMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5ndWFnZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYW5ndWFnZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtODQwLDYgKzg0Miw3IEBACiAJCQkJQzJCQ0ZDNDExRjYxRDYxNjAwQzky
MjJDIC8qIExhbmd1YWdlQ0YuY3BwICovLAogCQkJCTJDREVEMEVFMTgxMTVDMzgwMDREQkE3MCAv
KiBSdW5Mb29wQ0YuY3BwICovLAogCQkJCUEzRUU1QzNCMjFGRkFDN0MwMEZBQkQ2MSAvKiBTY2hl
ZHVsZVBhaXJDRi5jcHAgKi8sCisJCQkJQkM3MDBCNDUyNjc2NjlDMTAwNDlFREYyIC8qIFNwYW5D
Ri5oICovLAogCQkJCTFBRkRFNjQ3MTk1MjAxQzMwMEM0OEZGQSAvKiBUeXBlQ2FzdHNDRi5oICov
LAogCQkJCTVDMUYwNTk0MjE2NDM3QjMwMDM5MzAyQyAvKiBVUkxDRi5jcHAgKi8sCiAJCQkpOwpA
QCAtMTU4MSw2ICsxNTg0LDcgQEAKIAkJCQkxQ0E4NUNBODI0MUIwQjI2MDA3MUMyRjUgLyogUnVu
dGltZUFwcGxpY2F0aW9uQ2hlY2tzQ29jb2EuY3BwICovLAogCQkJCTFDQTg1Q0E3MjQxQjBCMTEw
MDcxQzJGNSAvKiBSdW50aW1lQXBwbGljYXRpb25DaGVja3NDb2NvYS5oICovLAogCQkJCUEzMEQ0
MTJDMUYwREUwQkEwMEI3MTk1NCAvKiBTb2Z0TGlua2luZy5oICovLAorCQkJCUJDNzAwQjQ0MjY3
NjY4MzQwMDQ5RURGMiAvKiBTcGFuQ29jb2EuaCAqLywKIAkJCQlFQjYxRURDNjI0MDlDQ0MwMDAx
RUZFMzYgLyogU3lzdGVtVHJhY2luZ0NvY29hLmNwcCAqLywKIAkJCQk1Q0MwRUU4NjIxNjJCQzIy
MDBBMUE4NDIgLyogVVJMQ29jb2EubW0gKi8sCiAJCQkJOTMyNDE2NTcyNDNCQzJFNTAwMzJGQUFF
IC8qIFZlY3RvckNvY29hLmggKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxOSw5ICszMTksOSBAQCBib29sIGV4Y2x1ZGVGcm9tQmFja3VwKGNvbnN0IFN0cmluZyYp
CiAKIE1hcHBlZEZpbGVEYXRhOjp+TWFwcGVkRmlsZURhdGEoKQogewotICAgIGlmICghbV9maWxl
RGF0YSkKKyAgICBpZiAoIW1fZmlsZURhdGEuZGF0YSgpKQogICAgICAgICByZXR1cm47Ci0gICAg
dW5tYXBWaWV3T2ZGaWxlKG1fZmlsZURhdGEsIG1fZmlsZVNpemUpOworICAgIHVubWFwVmlld09m
RmlsZShtX2ZpbGVEYXRhKTsKIH0KIAogTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKGNv
bnN0IFN0cmluZyYgZmlsZVBhdGgsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUsIGJvb2wmIHN1Y2Nl
c3MpCkBAIC0zODMsMTQgKzM4MywxMyBAQCBib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFu
ZGxlKFBsYXRmCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBtX2ZpbGVEYXRh
ID0gZGF0YTsKLSAgICBtX2ZpbGVTaXplID0gc2l6ZTsKKyAgICBtX2ZpbGVEYXRhID0gU3BhbiB7
IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpieXRlKj4oZGF0YSksIHNpemUgfTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCB1bm1hcFZpZXdPZkZpbGUodm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6
ZSkKK2Jvb2wgdW5tYXBWaWV3T2ZGaWxlKFNwYW48c3RkOjpieXRlPiBkYXRhKQogewotICAgIHJl
dHVybiAhbXVubWFwKGJ1ZmZlciwgc2l6ZSk7CisgICAgcmV0dXJuICFtdW5tYXAoZGF0YS5kYXRh
KCksIGRhdGEuc2l6ZSgpKTsKIH0KIAogI2VuZGlmCkBAIC00MzgsNyArNDM3LDcgQEAgU3RyaW5n
IGNyZWF0ZVRlbXBvcmFyeVppcEFyY2hpdmUoY29uc3QgUwogfQogI2VuZGlmCiAKLU1hcHBlZEZp
bGVEYXRhIG1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIHNpemVfdCBieXRlc1NpemUsIEZ1
bmN0aW9uPHZvaWQoY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4m
KT4mJiBhcHBseSwgUGxhdGZvcm1GaWxlSGFuZGxlKiBvdXRwdXRIYW5kbGUpCitNYXBwZWRGaWxl
RGF0YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBzaXplX3QgYnl0ZXNTaXplLCBGdW5j
dGlvbjx2b2lkKGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mKT4m
JiBhcHBseSwgUGxhdGZvcm1GaWxlSGFuZGxlKiBvdXRwdXRIYW5kbGUpCiB7CiAgICAgY29uc3Rl
eHByIGJvb2wgZmFpbElmRmlsZUV4aXN0cyA9IHRydWU7CiAgICAgYXV0byBoYW5kbGUgPSBGaWxl
U3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWRXcml0
ZSwgRmlsZVN5c3RlbTo6RmlsZUFjY2Vzc1Blcm1pc3Npb246OlVzZXIsIGZhaWxJZkZpbGVFeGlz
dHMpOwpAQCAtNDU1LDEyICs0NTQsMTIgQEAgTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxlKGNvbnN0
IFN0cmluZyYgcAogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIHZvaWQqIG1hcCA9
IGNvbnN0X2Nhc3Q8dm9pZCo+KG1hcHBlZEZpbGUuZGF0YSgpKTsKLSAgICB1aW50OF90KiBtYXBE
YXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1hcCk7CisgICAgYXV0byBtYXAgPSBtYXBwZWRG
aWxlLmRhdGEoKS5kYXRhKCk7CisgICAgYXV0byBtYXBEYXRhID0gbWFwOwogCi0gICAgYXBwbHko
WyZtYXBEYXRhXShjb25zdCB1aW50OF90KiBjaHVuaywgc2l6ZV90IGNodW5rU2l6ZSkgewotICAg
ICAgICBtZW1jcHkobWFwRGF0YSwgY2h1bmssIGNodW5rU2l6ZSk7Ci0gICAgICAgIG1hcERhdGEg
Kz0gY2h1bmtTaXplOworICAgIGFwcGx5KFsmbWFwRGF0YV0oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+
IGNodW5rKSB7CisgICAgICAgIG1lbWNweShtYXBEYXRhLCBjaHVuay5kYXRhKCksIGNodW5rLnNp
emUoKSk7CisgICAgICAgIG1hcERhdGEgKz0gY2h1bmsuc2l6ZSgpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9KTsKIApJbmRleDogU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICsz
NCw3IEBACiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KQEAgLTIxMCw3ICsyMTEsNyBAQCBXVEZfRVhQT1JUX1BSSVZBVEUg
U3RyaW5nIHJlYWxQYXRoKGNvbnN0CiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc1NhZmVUb1Vz
ZU1lbW9yeU1hcEZvclBhdGgoY29uc3QgU3RyaW5nJik7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBtYWtlU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChjb25zdCBTdHJpbmcmKTsKIAotV1RGX0VY
UE9SVF9QUklWQVRFIGJvb2wgdW5tYXBWaWV3T2ZGaWxlKHZvaWQqIGJ1ZmZlciwgc2l6ZV90KTsK
K1dURl9FWFBPUlRfUFJJVkFURSBib29sIHVubWFwVmlld09mRmlsZShTcGFuPHN0ZDo6Ynl0ZT4p
OwogCiBjbGFzcyBNYXBwZWRGaWxlRGF0YSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CkBAIC0yMjMsMTcgKzIyNCwxNSBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5N
YXBwZWRGaWxlRGF0YSgpOwogICAgIE1hcHBlZEZpbGVEYXRhJiBvcGVyYXRvcj0oTWFwcGVkRmls
ZURhdGEmJik7CiAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
ISFtX2ZpbGVEYXRhOyB9Ci0gICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZmlsZURhdGE7IH0KLSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9maWxlU2l6
ZTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fZmls
ZURhdGEuZGF0YSgpOyB9CisgICAgU3BhbjxzdGQ6OmJ5dGU+IGRhdGEoKSBjb25zdCB7IHJldHVy
biBtX2ZpbGVEYXRhOyB9CiAKLSAgICB2b2lkKiBsZWFrSGFuZGxlKCkgeyByZXR1cm4gc3RkOjpl
eGNoYW5nZShtX2ZpbGVEYXRhLCBudWxscHRyKTsgfQorICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBT
cGFuPHN0ZDo6Ynl0ZT4gbGVha0hhbmRsZSgpIHsgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9maWxl
RGF0YSwgeyB9KTsgfQogCiBwcml2YXRlOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIG1h
cEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBGaWxlT3Blbk1vZGUsIE1hcHBlZEZpbGVN
b2RlKTsKIAotICAgIHZvaWQqIG1fZmlsZURhdGEgeyBudWxscHRyIH07Ci0gICAgdW5zaWduZWQg
bV9maWxlU2l6ZSB7IDAgfTsKKyAgICBTcGFuPHN0ZDo6Ynl0ZT4gbV9maWxlRGF0YTsKIH07CiAK
IGlubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGxhdGZvcm1GaWxlSGFuZGxl
IGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUgbWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKQEAgLTI0Nywy
MSArMjQ2LDE5IEBAIGlubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGwKIH0K
IAogaW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShNYXBwZWRGaWxlRGF0YSYm
IG90aGVyKQotICAgIDogbV9maWxlRGF0YShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEs
IG51bGxwdHIpKQotICAgICwgbV9maWxlU2l6ZShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZVNp
emUsIDApKQorICAgIDogbV9maWxlRGF0YShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEs
IHsgfSkpCiB7CiB9CiAKIGlubGluZSBNYXBwZWRGaWxlRGF0YSYgTWFwcGVkRmlsZURhdGE6Om9w
ZXJhdG9yPShNYXBwZWRGaWxlRGF0YSYmIG90aGVyKQogewotICAgIG1fZmlsZURhdGEgPSBzdGQ6
OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEsIG51bGxwdHIpOwotICAgIG1fZmlsZVNpemUgPSBz
dGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZVNpemUsIDApOworICAgIG1fZmlsZURhdGEgPSBzdGQ6
OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEsIHsgfSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQog
CiAvLyBUaGlzIGNyZWF0ZXMgdGhlIGRlc3RpbmF0aW9uIGZpbGUsIG1hcHMgaXQsIHdyaXRlIHRo
ZSBwcm92aWRlZCBkYXRhIHRvIGl0IGFuZCByZXR1cm5zIHRoZSBtYXBwZWQgZmlsZS4KIC8vIFRo
aXMgZnVuY3Rpb24gZmFpbHMgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIGZpbGUgYXQgdGhlIGRlc3Rp
bmF0aW9uIHBhdGguCi1XVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVuY3Rpb248dm9pZChjb25z
dCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYpPiYmIGFwcGx5LCBQbGF0
Zm9ybUZpbGVIYW5kbGUqID0gbnVsbHB0cik7CitXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmls
ZURhdGEgbWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVu
Y3Rpb248dm9pZChjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+Jik+
JiYgYXBwbHksIFBsYXRmb3JtRmlsZUhhbmRsZSogPSBudWxscHRyKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgRmlsZVN5c3RlbUltcGwKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93
dGYvU0hBMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU0hBMS5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL1NIQTEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NiwxMCArNDYsMTAgQEAgU0hBMTo6U0hBMSgpCiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNM
QVJBVElPTlNfRU5ECiB9CiAKLXZvaWQgU0hBMTo6YWRkQnl0ZXMoY29uc3QgdWludDhfdCogaW5w
dXQsIHNpemVfdCBsZW5ndGgpCit2b2lkIFNIQTE6OmFkZEJ5dGVzKFNwYW48Y29uc3Qgc3RkOjpi
eXRlPiBpbnB1dCkKIHsKICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgot
ICAgIENDX1NIQTFfVXBkYXRlKCZtX2NvbnRleHQsIGlucHV0LCBsZW5ndGgpOworICAgIENDX1NI
QTFfVXBkYXRlKCZtX2NvbnRleHQsIGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpKTsKICAgICBB
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIH0KIApAQCAtMTAxLDExICsxMDEsMTEg
QEAgU0hBMTo6U0hBMSgpCiAgICAgcmVzZXQoKTsKIH0KIAotdm9pZCBTSEExOjphZGRCeXRlcyhj
b25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGxlbmd0aCkKK3ZvaWQgU0hBMTo6YWRkQnl0ZXMo
U3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQogewotICAgIHdoaWxlIChsZW5ndGgtLSkgewor
ICAgIGZvciAoYXV0byBieXRlIDogaW5wdXQpIHsKICAgICAgICAgQVNTRVJUKG1fY3Vyc29yIDwg
NjQpOwotICAgICAgICBtX2J1ZmZlclttX2N1cnNvcisrXSA9ICppbnB1dCsrOworICAgICAgICBt
X2J1ZmZlclttX2N1cnNvcisrXSA9IHN0ZDo6dG9faW50ZWdlcjx1aW50OF90PihieXRlKTsKICAg
ICAgICAgKyttX3RvdGFsQnl0ZXM7CiAgICAgICAgIGlmIChtX2N1cnNvciA9PSA2NCkKICAgICAg
ICAgICAgIHByb2Nlc3NCbG9jaygpOwpJbmRleDogU291cmNlL1dURi93dGYvU0hBMS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NIQTEuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dURi93dGYvU0hBMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgPGFycmF5PgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAt
NDUsMTUgKzQ2LDExIEBAIGNsYXNzIFNIQTEgewogcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBTSEExKCk7CiAKLSAgICB2b2lkIGFkZEJ5dGVzKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
aW5wdXQpCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkQnl0ZXMoU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkZEJ5dGVzKFQmJiBk
YXRhKQogICAgIHsKLSAgICAgICAgYWRkQnl0ZXMoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkp
OworICAgICAgICByZXR1cm4gYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+
KGRhdGEpIH0pKTsKICAgICB9Ci0gICAgdm9pZCBhZGRCeXRlcyhjb25zdCBDU3RyaW5nJiBpbnB1
dCkKLSAgICB7Ci0gICAgICAgIGFkZEJ5dGVzKGlucHV0LmRhdGFBc1VJbnQ4UHRyKCksIGlucHV0
Lmxlbmd0aCgpKTsKLSAgICB9Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkQnl0ZXMo
Y29uc3QgdWludDhfdCogaW5wdXQsIHNpemVfdCBsZW5ndGgpOwogCiAgICAgLy8gU2l6ZSBvZiB0
aGUgU0hBMSBoYXNoCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBjb25zdGV4cHIgc2l6
ZV90IGhhc2hTaXplID0gMjA7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dURi93dGYvVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxMyw2ICs2MTMsNyBAQCBw
cml2YXRlOgogCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBUIFZhbHVlVHlwZTsKKyAgICB0eXBlZGVm
IFQgdmFsdWVfdHlwZTsKIAogICAgIHR5cGVkZWYgVCogaXRlcmF0b3I7CiAgICAgdHlwZWRlZiBj
b25zdCBUKiBjb25zdF9pdGVyYXRvcjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL2NmL1NwYW5DRi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL2NmL1NwYW5DRi5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XVEYvd3RmL2NmL1NwYW5DRi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPENvcmVGb3VuZGF0
aW9uL0NvcmVGb3VuZGF0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KKworbmFtZXNwYWNl
IFdURiB7CisKK2lubGluZSBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYXNCeXRlcyhDRkRhdGFSZWYg
ZGF0YSkKK3sKKyAgICByZXR1cm4geyByZWludGVycHJldF9jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+
KENGRGF0YUdldEJ5dGVQdHIoZGF0YSkpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KENGRGF0YUdldExl
bmd0aChkYXRhKSkgfTsKK30KKworfQorCit1c2luZyBXVEY6OmFzQnl0ZXM7CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9jb2NvYS9TcGFuQ29jb2EuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9jb2NvYS9TcGFuQ29jb2EuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9jb2Nv
YS9TcGFuQ29jb2EuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNp
bmNsdWRlIDx3dGYvU3Bhbi5oPgorCituYW1lc3BhY2UgV1RGIHsKKworaW5saW5lIFNwYW48Y29u
c3Qgc3RkOjpieXRlPiBhc0J5dGVzKE5TRGF0YSAqZGF0YSkKK3sKKyAgICByZXR1cm4geyByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxlbmd0aCB9
OworfQorCit9CisKK3VzaW5nIFdURjo6YXNCeXRlczsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3Bl
cnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIENvZGVyPENTdHJpbmc+OjplbmNvZGUoRW5j
b2RlciYgZW5jCiAKICAgICB1aW50MzJfdCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAg
ZW5jb2RlciA8PCBsZW5ndGg7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3Ry
aW5nLmRhdGFBc1VJbnQ4UHRyKCksIGxlbmd0aCk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoc3RyaW5nLmJ5dGVzKCkpOwogfQogCiBzdGQ6Om9wdGlvbmFsPENTdHJpbmc+IENv
ZGVyPENTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKQEAgLTc4LDcgKzc4LDcgQEAg
c3RkOjpvcHRpb25hbDxDU3RyaW5nPiBDb2RlcjxDU3RyaW5nPjo6ZAogCiAgICAgY2hhciogYnVm
ZmVyOwogICAgIENTdHJpbmcgc3RyaW5nID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZCgqbGVu
Z3RoLCBidWZmZXIpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgKmxlbmd0aCkpCisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgcmVpbnRlcnByZXRfY2FzdDxzdGQ6OmJ5
dGUqPihidWZmZXIpLCAqbGVuZ3RoIH0pKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owog
CiAgICAgcmV0dXJuIHN0cmluZzsKQEAgLTk2LDExICs5Niw3IEBAIHZvaWQgQ29kZXI8U3RyaW5n
Pjo6ZW5jb2RlKEVuY29kZXImIGVuY28KICAgICBib29sIGlzOEJpdCA9IHN0cmluZy5pczhCaXQo
KTsKIAogICAgIGVuY29kZXIgPDwgbGVuZ3RoIDw8IGlzOEJpdDsKLQotICAgIGlmIChpczhCaXQp
Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0cmluZy5jaGFyYWN0ZXJz
OCgpLCBsZW5ndGgpOwotICAgIGVsc2UKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnMx
NigpKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoc3RyaW5nLmJ5dGVzKCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KQEAgLTExMiw3ICsxMDgsNyBAQCBzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8
U3RyaW5nPiBkZWNvCiAKICAgICBDaGFyYWN0ZXJUeXBlKiBidWZmZXI7CiAgICAgU3RyaW5nIHN0
cmluZyA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihidWZmZXIpLCBsZW5ndGggKiBzaXplb2YoQ2hhcmFjdGVyVHlwZSkpKQorICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8c3Rk
OjpieXRlKj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJhY3RlclR5cGUpIH0pKQogICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIAogICAgIHJldHVybiBzdHJpbmc7CkBAIC0x
NDIsMTMgKzEzOCwxMyBAQCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gQ29kZXI8U3RyaW5nPjo6ZGVj
CiAKIHZvaWQgQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQogewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpKTsKKyAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3QpOwogfQogCiBzdGQ6Om9wdGlvbmFsPFNIQTE6OkRpZ2Vz
dD4gQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAg
U0hBMTo6RGlnZXN0IHRtcDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHRtcC5kYXRhKCksIHNpemVvZih0bXApKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKHRtcCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgcmV0dXJu
IHRtcDsKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2Rl
cnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50
Q29kZXJzLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNl
L1BlcnNpc3RlbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYg
dmVjdG9yKQogICAgIHsKICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
dmVjdG9yLnNpemUoKSk7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6
ZSgpICogc2l6ZW9mKFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEo
dmVjdG9yKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5Pj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCkBAIC0xNzMsNyArMTcz
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAgICAgICBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IHRlbXA7CiAgICAgICAgIHRlbXAuZ3JvdyhzaXplKTsK
IAotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KHRlbXAuZGF0YSgpKSwgc2l6ZSAqIHNpemVvZihUKSkpCisgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEodGVtcCkpCiAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgICAgIHJldHVybiB0ZW1wOwpJbmRleDogU291cmNl
L1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmNwcAkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29k
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyMyArMzEsMjEgQEAKIG5hbWVzcGFjZSBXVEYg
ewogbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAotRGVjb2Rlcjo6RGVjb2Rlcihjb25zdCB1aW50
OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKQotICAgIDogbV9idWZmZXIoYnVmZmVyKQot
ICAgICwgbV9idWZmZXJQb3NpdGlvbihidWZmZXIpCi0gICAgLCBtX2J1ZmZlckVuZChidWZmZXIg
KyBidWZmZXJTaXplKQorRGVjb2Rlcjo6RGVjb2RlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnVm
ZmVyKQorICAgIDogbV9idWZmZXIoYnVmZmVyLmRhdGEoKSkKKyAgICAsIG1fYnVmZmVyUG9zaXRp
b24oYnVmZmVyLmRhdGEoKSkKKyAgICAsIG1fYnVmZmVyRW5kKGJ1ZmZlci5kYXRhKCkgKyBidWZm
ZXIuc2l6ZSgpKQogewogfQogCi1EZWNvZGVyOjp+RGVjb2RlcigpCi17Ci19CitEZWNvZGVyOjp+
RGVjb2RlcigpID0gZGVmYXVsdDsKIAogYm9vbCBEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdo
VG9Db250YWluKHNpemVfdCBzaXplKSBjb25zdAogewogICAgIHJldHVybiBzaXplIDw9IHN0YXRp
Y19jYXN0PHNpemVfdD4obV9idWZmZXJFbmQgLSBtX2J1ZmZlclBvc2l0aW9uKTsKIH0KIAotY29u
c3QgdWludDhfdCogRGVjb2Rlcjo6YnVmZmVyUG9pbnRlckZvckRpcmVjdFJlYWQoc2l6ZV90IHNp
emUpCitjb25zdCBzdGQ6OmJ5dGUqIERlY29kZXI6OmJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFk
KHNpemVfdCBzaXplKQogewogICAgIGlmICghYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihz
aXplKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC01NSwxNiArNTMsMTYgQEAgY29uc3Qg
dWludDhfdCogRGVjb2Rlcjo6YnVmZmVyUG9pbnRlckZvcgogICAgIGF1dG8gZGF0YSA9IG1fYnVm
ZmVyUG9zaXRpb247CiAgICAgbV9idWZmZXJQb3NpdGlvbiArPSBzaXplOwogCi0gICAgRW5jb2Rl
cjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgZGF0YSwgc2l6ZSk7CisgICAgRW5jb2Rl
cjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgU3BhbiB7IGRhdGEsIHNpemUgfSk7CiAg
ICAgcmV0dXJuIGRhdGE7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQorYm9vbCBEZWNvZGVyOjpkZWNvZGVGaXhlZExl
bmd0aERhdGEoU3BhbjxzdGQ6OmJ5dGU+IGRhdGEpCiB7Ci0gICAgYXV0byBidWZmZXIgPSBidWZm
ZXJQb2ludGVyRm9yRGlyZWN0UmVhZChzaXplKTsKKyAgICBhdXRvIGJ1ZmZlciA9IGJ1ZmZlclBv
aW50ZXJGb3JEaXJlY3RSZWFkKGRhdGEuc2l6ZSgpKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIG1lbWNweShkYXRhLCBidWZmZXIsIHNpemUpOworICAgIG1l
bWNweShkYXRhLmRhdGEoKSwgYnVmZmVyLCBkYXRhLnNpemUoKSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTEzOSw3ICsxMzcsNyBAQCBib29sIERlY29kZXI6OnZlcmlmeUNoZWNrc3VtKCkK
ICAgICBtX3NoYTEuY29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2Vz
dCBzYXZlZEhhc2g7Ci0gICAgaWYgKCFkZWNvZGVGaXhlZExlbmd0aERhdGEoc2F2ZWRIYXNoLmRh
dGEoKSwgc2l6ZW9mKHNhdmVkSGFzaCkpKQorICAgIGlmICghZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHNhdmVkSGFzaCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBjb21wdXRl
ZEhhc2ggPT0gc2F2ZWRIYXNoOwpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVy
c2lzdGVudERlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5j
ZS9QZXJzaXN0ZW50RGVjb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0
Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw3IEBACiAKICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9T
SEExLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2Uv
UGVyc2lzdGVudENvZGVyLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMzUsNyArMzYsMTIgQEAg
bmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIGNsYXNzIERlY29kZXIgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyKGNv
bnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IERlY29kZXIoVCYmIGRhdGEpCisgICAgICAgIDogRGVjb2RlciB7IGFzQnl0ZXMo
U3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihkYXRhKSB9KSB9CisgICAgeworICAgIH0KKworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIH5EZWNvZGVyKCk7CiAKICAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3Qg
eyByZXR1cm4gbV9idWZmZXJFbmQgLSBtX2J1ZmZlcjsgfQpAQCAtNDMsNyArNDksMTEgQEAgcHVi
bGljOgogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIHZl
cmlmeUNoZWNrc3VtKCk7CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgV0FSTl9VTlVTRURfUkVU
VVJOIGJvb2wgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqLCBzaXplX3QpOworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVGaXhlZExlbmd0
aERhdGEoU3BhbjxzdGQ6OmJ5dGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIGRl
Y29kZUZpeGVkTGVuZ3RoRGF0YShUJiYgZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNv
ZGVGaXhlZExlbmd0aERhdGEoYXNXcml0YWJsZUJ5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4o
ZGF0YSkgfSkpOworICAgIH0KIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVy
YXRvcj4+KHN0ZDo6b3B0aW9uYWw8Ym9vbD4mKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVj
b2RlciYgb3BlcmF0b3I+PihzdGQ6Om9wdGlvbmFsPHVpbnQ4X3Q+Jik7CkBAIC04NCw3ICs5NCw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG51bUVsZW1lbnRzIDw9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8c2l6ZV90Pjo6bWF4KCkgLyBzaXplb2YoVCkgJiYgYnVmZmVySXNMYXJnZUVub3VnaFRv
Q29udGFpbihudW1FbGVtZW50cyAqIHNpemVvZihUKSk7CiAgICAgfQogCi0gICAgV1RGX0VYUE9S
VF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBjb25zdCB1aW50OF90KiBidWZmZXJQb2ludGVy
Rm9yRGlyZWN0UmVhZChzaXplX3QgbnVtQnl0ZXMpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBX
QVJOX1VOVVNFRF9SRVRVUk4gY29uc3Qgc3RkOjpieXRlKiBidWZmZXJQb2ludGVyRm9yRGlyZWN0
UmVhZChzaXplX3QgbnVtQnl0ZXMpOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSVBD
RGVjb2RlciA9IGZhbHNlOwogCkBAIC05Miw5ICsxMDIsOSBAQCBwcml2YXRlOgogICAgIFdURl9F
WFBPUlRfUFJJVkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBidWZmZXJJc0xhcmdlRW5vdWdo
VG9Db250YWluKHNpemVfdCkgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4gRGVj
b2RlciYgZGVjb2RlTnVtYmVyKHN0ZDo6b3B0aW9uYWw8VHlwZT4mKTsKIAotICAgIGNvbnN0IHVp
bnQ4X3QqIG1fYnVmZmVyOwotICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyUG9zaXRpb247Ci0g
ICAgY29uc3QgdWludDhfdCogbV9idWZmZXJFbmQ7CisgICAgY29uc3Qgc3RkOjpieXRlKiBtX2J1
ZmZlcjsKKyAgICBjb25zdCBzdGQ6OmJ5dGUqIG1fYnVmZmVyUG9zaXRpb247CisgICAgY29uc3Qg
c3RkOjpieXRlKiBtX2J1ZmZlckVuZDsKIAogICAgIFNIQTEgbV9zaGExOwogfTsKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRF
bmNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMzQgKzMxLDM0IEBACiBuYW1lc3BhY2Ug
V1RGIHsKIG5hbWVzcGFjZSBQZXJzaXN0ZW5jZSB7CiAKLUVuY29kZXI6OkVuY29kZXIoKQotewot
fQotCi1FbmNvZGVyOjp+RW5jb2RlcigpCi17Ci19CitFbmNvZGVyOjpFbmNvZGVyKCkgPSBkZWZh
dWx0OworRW5jb2Rlcjo6fkVuY29kZXIoKSA9IGRlZmF1bHQ7CiAKLXVpbnQ4X3QqIEVuY29kZXI6
Omdyb3coc2l6ZV90IHNpemUpCitzdGQ6OmJ5dGUqIEVuY29kZXI6Omdyb3coc2l6ZV90IHNpemUp
CiB7CiAgICAgc2l6ZV90IG5ld1Bvc2l0aW9uID0gbV9idWZmZXIuc2l6ZSgpOwogICAgIG1fYnVm
ZmVyLmdyb3cobV9idWZmZXIuc2l6ZSgpICsgc2l6ZSk7CiAgICAgcmV0dXJuIG1fYnVmZmVyLmRh
dGEoKSArIG5ld1Bvc2l0aW9uOwogfQogCi12b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9y
RGF0YShTSEExJiBzaGExLCBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3ZvaWQg
RW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmIHNoYTEsIFNwYW48Y29uc3QgdWlu
dDhfdD4gZGF0YSkKK3sKKyAgICByZXR1cm4gdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKHNoYTEsIGFz
Qnl0ZXMoZGF0YSkpOworfQorCit2b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yRGF0YShT
SEExJiBzaGExLCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKICAgICBhdXRvIHR5cGVT
YWx0ID0gU2FsdDx1aW50OF90Kj46OnZhbHVlOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7Ci0gICAgc2hh
MS5hZGRCeXRlcyhkYXRhLCBzaXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmdHlwZVNh
bHQsIDEgfSk7CisgICAgc2hhMS5hZGRCeXRlcyhkYXRhKTsKIH0KIAotdm9pZCBFbmNvZGVyOjpl
bmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCit2
b2lkIEVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
ZGF0YSkKIHsKLSAgICB1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhLCBzaXplKTsK
KyAgICB1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhKTsKIAotICAgIHVpbnQ4X3Qq
IGJ1ZmZlciA9IGdyb3coc2l6ZSk7Ci0gICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7Cisg
ICAgYXV0byogYnVmZmVyID0gZ3JvdyhkYXRhLnNpemUoKSk7CisgICAgbWVtY3B5KGJ1ZmZlciwg
ZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4K
QEAgLTY2LDcgKzY2LDcgQEAgRW5jb2RlciYgRW5jb2Rlcjo6ZW5jb2RlTnVtYmVyKFR5cGUgdmFs
dQogewogICAgIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKG1fc2hhMSwgdmFsdWUp
OwogCi0gICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhzaXplb2YoVHlwZSkpOworICAgIGF1dG8q
IGJ1ZmZlciA9IGdyb3coc2l6ZW9mKFR5cGUpKTsKICAgICBtZW1jcHkoYnVmZmVyLCAmdmFsdWUs
IHNpemVvZihUeXBlKSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQpAQCAtMTI1LDcgKzEyNSw3IEBA
IHZvaWQgRW5jb2Rlcjo6ZW5jb2RlQ2hlY2tzdW0oKQogewogICAgIFNIQTE6OkRpZ2VzdCBoYXNo
OwogICAgIG1fc2hhMS5jb21wdXRlSGFzaChoYXNoKTsKLSAgICBlbmNvZGVGaXhlZExlbmd0aERh
dGEoaGFzaC5kYXRhKCksIGhhc2guc2l6ZSgpKTsKKyAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEo
aGFzaCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3Rl
bnRFbmNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVy
c2lzdGVudEVuY29kZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvcGVy
c2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcs
NyBAQAogCiAjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvU0hBMS5o
PgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1
ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaD4KIApAQCAtNDMsNyArNDQsMTEg
QEAgcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSB+RW5jb2RlcigpOwogCiAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlQ2hlY2tzdW0oKTsKLSAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCosIHNpemVfdCk7
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48
Y29uc3Qgc3RkOjpieXRlPik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBlbmNvZGVG
aXhlZExlbmd0aERhdGEoVCYmIGRhdGEpCisgICAgeworICAgICAgICBlbmNvZGVGaXhlZExlbmd0
aERhdGEoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pKTsKKyAgICB9CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZW51bTxU
Pjo6dmFsdWU+KiA9IG51bGxwdHI+CiAgICAgRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBUJiB0
KQpAQCAtNzAsMjMgKzc1LDIyIEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRW5j
b2RlciYgb3BlcmF0b3I8PChmbG9hdCk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIEVuY29kZXIm
IG9wZXJhdG9yPDwoZG91YmxlKTsKIAotICAgIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlcigpIGNvbnN0
IHsgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKTsgfQotICAgIHNpemVfdCBidWZmZXJTaXplKCkgY29u
c3QgeyByZXR1cm4gbV9idWZmZXIuc2l6ZSgpOyB9Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBjb25zdCB1aW50OF90Kiwg
c2l6ZV90KTsKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnVmZmVyKCkgY29uc3QgeyByZXR1
cm4gbV9idWZmZXI7IH0KKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQg
dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBTcGFuPGNvbnN0IHVpbnQ4X3Q+KTsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEm
LCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPiBz
dGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZvck51bWJlcihTSEExJiwgVHlwZSk7CiAKICAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNJUENFbmNvZGVyID0gZmFsc2U7CiAKIHByaXZhdGU6Ci0K
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiBFbmNvZGVyJiBlbmNvZGVOdW1iZXIoVHlwZSk7
CiAKLSAgICB1aW50OF90KiBncm93KHNpemVfdCk7CisgICAgc3RkOjpieXRlKiBncm93KHNpemVf
dCk7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4gc3RydWN0IFNhbHQ7CiAKLSAgICBW
ZWN0b3I8dWludDhfdCwgNDA5Nj4gbV9idWZmZXI7CisgICAgVmVjdG9yPHN0ZDo6Ynl0ZSwgNDA5
Nj4gbV9idWZmZXI7CiAgICAgU0hBMSBtX3NoYTE7CiB9OwogCkBAIC0xMDYsOCArMTEwLDggQEAg
dGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+CiB2b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9y
TnVtYmVyKFNIQTEmIHNoYTEsIFR5cGUgdmFsdWUpCiB7CiAgICAgYXV0byB0eXBlU2FsdCA9IFNh
bHQ8VHlwZT46OnZhbHVlOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7Ci0gICAgc2hhMS5hZGRCeXRlcyhy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWUpLCBzaXplb2YodmFsdWUpKTsKKyAgICBz
aGExLmFkZEJ5dGVzKFNwYW4geyAmdHlwZVNhbHQsIDEgfSk7CisgICAgc2hhMS5hZGRCeXRlcyhT
cGFuIHsgJnZhbHVlLCAxIH0pOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jh
c2U2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0MCwzOSArMTQwLDM5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IHN0YXRpYyAKICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSAn
PSc7CiB9CiAKLXN0YXRpYyBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoY29u
c3QgdWludDhfdCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0
RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKK3N0YXRpYyBWZWN0b3I8
dWludDhfdD4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0
LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewotICAg
IGF1dG8gZGVzdGluYXRpb25MZW5ndGggPSBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShpbnB1
dExlbmd0aCwgcG9saWN5KTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uTGVuZ3RoID0gY2FsY3VsYXRl
QmFzZTY0RW5jb2RlZFNpemUoaW5wdXQuc2l6ZSgpLCBwb2xpY3kpOwogICAgIGlmICghZGVzdGlu
YXRpb25MZW5ndGgpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBWZWN0b3I8dWludDhfdD4g
ZGVzdGluYXRpb25WZWN0b3IoZGVzdGluYXRpb25MZW5ndGgpOwotICAgIGJhc2U2NEVuY29kZUlu
dGVybmFsKGlucHV0RGF0YUJ1ZmZlciwgaW5wdXRMZW5ndGgsIGRlc3RpbmF0aW9uVmVjdG9yLmRh
dGEoKSwgZGVzdGluYXRpb25MZW5ndGgsIHBvbGljeSwgbWFwKTsKKyAgICBiYXNlNjRFbmNvZGVJ
bnRlcm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBp
bnB1dC5zaXplKCksIGRlc3RpbmF0aW9uVmVjdG9yLmRhdGEoKSwgZGVzdGluYXRpb25MZW5ndGgs
IHBvbGljeSwgbWFwKTsKICAgICByZXR1cm4gZGVzdGluYXRpb25WZWN0b3I7CiB9CiAKLXZvaWQg
YmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRM
ZW5ndGgsIFVDaGFyKiBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9u
TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQor
dm9pZCBiYXNlNjRFbmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0LCBVQ2hhciogZGVz
dGluYXRpb25EYXRhQnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkxlbmd0aCwgQmFzZTY0RW5j
b2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKICAgICBpZiAoIWRlc3Rp
bmF0aW9uTGVuZ3RoKQogICAgICAgICByZXR1cm47Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwo
c3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3Ro
LCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7
CisgICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRl
c3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7CiB9CiAKLXZvaWQgYmFzZTY0RW5jb2RlKGNv
bnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIExDaGFyKiBk
ZXN0aW5hdGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uTGVuZ3RoLCBCYXNlNjRF
bmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordm9pZCBiYXNlNjRFbmNv
ZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0LCBMQ2hhciogZGVzdGluYXRpb25EYXRhQnVm
ZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkxlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGlj
eSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKICAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQog
ICAgICAgICByZXR1cm47Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29u
c3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvbkRh
dGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7CisgICAgYmFzZTY0RW5j
b2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0YSgp
KSwgaW5wdXQuc2l6ZSgpLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3Ro
LCBwb2xpY3ksIG1hcCk7CiB9CiAKLVZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rv
cihjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNl
NjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQorVmVjdG9yPHVpbnQ4
X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwgQmFz
ZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1
cm4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0
RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2
NEVuY29kZUludGVybmFsKGlucHV0LCBwb2xpY3ksIG1hcCk7CiB9CiAKLVN0cmluZyBiYXNlNjRF
bmNvZGVUb1N0cmluZyhjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0
TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQor
U3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwg
QmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBy
ZXR1cm4gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKGlucHV0RGF0YUJ1ZmZlciwgaW5wdXRMZW5n
dGgsIHBvbGljeSwgbWFwKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChp
bnB1dCwgcG9saWN5LCBtYXApKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIHN0
ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGVJbnRlcm5hbChjb25zdCBU
KiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBPcHRpb25TZXQ8QmFzZTY0
RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKQEAgLTI1NCw4NCAr
MjU0LDI3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBzdGQ6Om9wdGlvbmEKICAgICBy
ZXR1cm4gZGVzdGluYXRpb247CiB9CiAKLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjREZWNvZGUoY29uc3QgU3RyaW5nJiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9w
dGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgdW5zaWduZWQgbGVu
Z3RoID0gaW5wdXQubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGggfHwgaW5wdXQuaXM4Qml0KCkp
Ci0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgp
LCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFs
KGlucHV0LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7Ci19Ci0KLXN0ZDo6
b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3RyaW5nVmlldyBpbnB1dCwg
T3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBt
YXApCi17Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7Ci0gICAgaWYgKCFs
ZW5ndGggfHwgaW5wdXQuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRl
cm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7Ci0gICAgcmV0
dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIG9w
dGlvbnMsIG1hcCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRE
ZWNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29k
ZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgaWYgKGlucHV0
LnNpemUoKSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKLSAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5w
dXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIG9wdGlvbnMsIG1hcCk7Ci19Ci0KLXN0ZDo6b3B0aW9u
YWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1
dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1h
cCBtYXApCitzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKFNwYW48
Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9w
dGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7CiAgICAgaWYgKGlucHV0LnNpemUoKSA+IHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpLCBvcHRpb25zLCBt
YXApOwogfQogCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNv
bnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgT3B0aW9uU2V0PEJhc2U2NERlY29k
ZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgcmV0dXJuIGJh
c2U2NERlY29kZUludGVybmFsKGRhdGEsIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKLX0KLQotc3Rk
OjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBjaGFyKiBkYXRh
LCB1bnNpZ25lZCBsZW5ndGgsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRpb25z
LCBCYXNlNjREZWNvZGVNYXAgbWFwKQotewotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5h
bChyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oZGF0YSksIGxlbmd0aCwgb3B0aW9ucywg
bWFwKTsKLX0KLQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29k
ZShjb25zdCBTdHJpbmcmIGlucHV0KQorc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJh
c2U2NERlY29kZShjb25zdCBTdHJpbmcmIGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0
aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKICAgICB1bnNpZ25lZCBsZW5n
dGggPSBpbnB1dC5sZW5ndGgoKTsKICAgICBpZiAoIWxlbmd0aCB8fCBpbnB1dC5pczhCaXQoKSkK
LSAgICAgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnM4KCks
IGxlbmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7Ci0gICAgcmV0dXJuIGJhc2U2NERl
Y29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIHsgfSwgQmFzZTY0RGVj
b2RlTWFwOjpVUkwpOworICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQu
Y2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOworICAgIHJldHVybiBiYXNlNjRE
ZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXAp
OwogfQogCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFN0
cmluZ1ZpZXcgaW5wdXQpCitzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVj
b2RlKFN0cmluZ1ZpZXcgaW5wdXQsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRp
b25zLCBCYXNlNjREZWNvZGVNYXAgbWFwKQogewogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0
Lmxlbmd0aCgpOwogICAgIGlmICghbGVuZ3RoIHx8IGlucHV0LmlzOEJpdCgpKQotICAgICAgICBy
ZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCB7
IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJu
YWwoaW5wdXQuY2hhcmFjdGVyczE2KCksIGxlbmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVS
TCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUo
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKLXsKLSAgICBpZiAoaW5wdXQuc2l6ZSgpID4g
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQotICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5kYXRhKCks
IGlucHV0LnNpemUoKSwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7Ci19Ci0KLXN0ZDo6b3B0
aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+
JiBpbnB1dCkKLXsKLSAgICBpZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHJldHVy
biBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihp
bnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCksIHsgfSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOwot
fQotCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0
IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gYmFzZTY0RGVj
b2RlSW50ZXJuYWwoZGF0YSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKLX0K
LQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBj
aGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUlu
dGVybmFsKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBsZW5ndGgsIHsg
fSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOworICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50
ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOworICAgIHJl
dHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBv
cHRpb25zLCBtYXApOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL3RleHQvQmFzZTY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9CYXNl
NjQuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCkBAIC01Niw1NCArNTcsMzUgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBtYXhpbXVtQmFzZTY0TAogLy8gUmF0aGVyIHRoYW4gYmVpbmcgcGVyZmVjdGx5IHByZWNp
c2UsIHRoaXMgaXMgYSBiaXQgY29uc2VydmF0aXZlLgogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBtYXhpbXVtQmFzZTY0RW5jb2RlcklucHV0QnVmZmVyU2l6ZSA9IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSAvIDc3ICogNzYgLyA0ICogMyAtIDI7CiAKLVdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQsIFVDaGFyKiwg
dW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJ
bnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci1X
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVk
LCBMQ2hhciosIHVuc2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xp
Y3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRl
ZmF1bHQpOworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2RlKFNwYW48Y29uc3Qg
c3RkOjpieXRlPiwgVUNoYXIqIGRlc3RpbmF0aW9uQnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlv
bkJ1ZmZlclNpemUsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9O
b3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7
CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+LCBMQ2hhciogZGVzdGluYXRpb25CdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uQnVmZmVy
U2l6ZSwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2Vy
dExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKIAotV1RG
X0VYUE9SVF9QUklWQVRFIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25z
dCB2b2lkKiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGlj
eTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVm
YXVsdCk7Ci1WZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05v
dEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsK
LVZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8Y2hhcj4m
LCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZz
LCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwotVmVjdG9yPHVp
bnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IENTdHJpbmcmLCBCYXNlNjRFbmNvZGVQ
b2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVN
YXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwotCi1XVEZfRVhQT1JUX1BSSVZBVEUgU3Ry
aW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgQmFzZTY0RW5j
b2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5j
b2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKLVN0cmluZyBiYXNlNjRFbmNvZGVU
b1N0cmluZyhjb25zdCBWZWN0b3I8dWludDhfdD4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNl
NjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRF
bmNvZGVNYXA6OkRlZmF1bHQpOwotU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IFZl
Y3RvcjxjaGFyPiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9O
b3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7
Ci1TdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgQ1N0cmluZyYsIEJhc2U2NEVuY29k
ZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29k
ZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgVmVj
dG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKFNwYW48Y29uc3Qgc3RkOjpieXRlPiwg
QmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywg
QmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihUJiYsIEJhc2U2
NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2
NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CiAKK1dURl9FWFBPUlRfUFJJ
VkFURSBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+LCBC
YXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBC
YXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKFQmJiwgQmFzZTY0RW5jb2RlUG9s
aWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFw
ID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKKworV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6
b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1h
cCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpv
cHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBTdHJpbmcmLCBPcHRp
b25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2
NERlY29kZU1hcDo6RGVmYXVsdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxW
ZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShTdHJpbmdWaWV3LCBPcHRpb25TZXQ8QmFzZTY0
RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6
RGVmYXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGJhc2U2NERlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mLCBPcHRpb25TZXQ8QmFzZTY0
RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6
RGVmYXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGJhc2U2NERlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mLCBPcHRpb25TZXQ8QmFzZTY0RGVj
b2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVm
YXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+
IGJhc2U2NERlY29kZShjb25zdCB1aW50OF90KiwgdW5zaWduZWQsIE9wdGlvblNldDxCYXNlNjRE
ZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpE
ZWZhdWx0KTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90
Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCwgT3B0aW9uU2V0PEJhc2U2NERl
Y29kZU9wdGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRl
ZmF1bHQpOwotCi1pbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJh
c2U2NEVuY29kZU1hcCBtYXApCi17Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlu
cHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7Ci19Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25z
dF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+PiwgU3RyaW5nPiAmJiAhc3RkOjppc19zYW1l
X3Y8c3RkOjpyZW1vdmVfY29uc3RfdDxzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxUPj4sIFN0cmlu
Z1ZpZXc+PiogPSBudWxscHRyPgorc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2
NERlY29kZShUJiYsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0
RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKIAotaW5saW5lIFZlY3Rvcjx1
aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBC
YXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordGVtcGxhdGU8
dHlwZW5hbWUgVD4gVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKFQmJiBpbnB1
dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAg
ICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCks
IHBvbGljeSwgbWFwKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoYXNCeXRlcyhT
cGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGlucHV0KSB9KSwgcG9saWN5LCBtYXApOwogfQogCi1pbmxp
bmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IENTdHJpbmcmIGlu
cHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordGVt
cGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKFQmJiBpbnB1dCwg
QmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBy
ZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwg
cG9saWN5LCBtYXApOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhhc0J5dGVzKFNw
YW4geyBzdGQ6OmZvcndhcmQ8VD4oaW5wdXQpIH0pLCBwb2xpY3ksIG1hcCk7CiB9CiAKLWlubGlu
ZSBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1
dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZV92PHN0ZDo6cmVt
b3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmc+ICYmICFzdGQ6
OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+
PiwgU3RyaW5nVmlldz4+Kj4KK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRE
ZWNvZGUoVCYmIGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywg
QmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmco
aW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSwgbWFwKTsKLX0KLQotaW5saW5lIFN0
cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBCYXNl
NjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQotewotICAgIHJldHVy
biBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5
LCBtYXApOwotfQotCi1pbmxpbmUgU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IENT
dHJpbmcmIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAg
bWFwKQotewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlu
cHV0Lmxlbmd0aCgpLCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZShhc0J5
dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oaW5wdXQpIH0pLCBvcHRpb25zLCBtYXApOwogfQog
CiAKQEAgLTExMiw2MSArOTQsNTcgQEAgaW5saW5lIFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmlu
Zyhjb25zdAogLy8gVGhpcyBmb3JtYXQgdXNlcyAnLScgYW5kICdfJyBpbnN0ZWFkIG9mICcrJyBh
bmQgJy8nIHJlc3BlY3RpdmVseS4KIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAK
LVZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihjb25zdCB2b2lkKiwgdW5z
aWduZWQpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9y
KGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRv
VmVjdG9yKGNvbnN0IENTdHJpbmcmKTsKK1ZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVU
b1ZlY3RvcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVj
dG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKFQmJik7CiAKLVN0cmluZyBiYXNl
NjRVUkxFbmNvZGVUb1N0cmluZyhjb25zdCB2b2lkKiwgdW5zaWduZWQpOwotU3RyaW5nIGJhc2U2
NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOwotU3RyaW5nIGJhc2U2
NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotU3RyaW5nIGJhc2U2NFVS
TEVuY29kZVRvU3RyaW5nKGNvbnN0IENTdHJpbmcmKTsKK1N0cmluZyBiYXNlNjRVUkxFbmNvZGVU
b1N0cmluZyhTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3Ry
aW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKFQmJik7CiAKLVdURl9FWFBPUlRfUFJJVkFURSBz
dGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFN0cmlu
ZyYpOwotV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjRVUkxEZWNvZGUoU3RyaW5nVmlldyk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRp
b25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBWZWN0b3I8dWludDhf
dD4mKTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4g
YmFzZTY0VVJMRGVjb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotV1RGX0VYUE9SVF9QUklWQVRF
IHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgdWlu
dDhfdCosIHVuc2lnbmVkKTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rv
cjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCk7CitzdGQ6
Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFNwYW48Y29uc3Qgc3Rk
OjpieXRlPik7CitzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2Rl
KGNvbnN0IFN0cmluZyYpOworc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVS
TERlY29kZShTdHJpbmdWaWV3KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lm
X3Q8IXN0ZDo6aXNfc2FtZV92PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJl
bmNlX3Q8VD4+LCBTdHJpbmc+ICYmICFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90
PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+PiwgU3RyaW5nVmlldz4+KiA9IG51bGxwdHI+Citz
dGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFQmJik7CiAKLWlu
bGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3Qgdm9pZCog
aW5wdXQsIHVuc2lnbmVkIGxlbmd0aCkKK2lubGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJM
RW5jb2RlVG9WZWN0b3IoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQogewotICAgIHJldHVy
biBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dCwgbGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3k6
OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1Zl
Y3RvcihpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJM
KTsKIH0KIAotaW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihj
b25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVjdG9y
PHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKFQmJiBpbnB1dCkKIHsKLSAgICByZXR1
cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJhc2U2
NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJh
c2U2NEVuY29kZVRvVmVjdG9yKHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCksIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBWZWN0b3I8dWlu
dDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCkK
K2lubGluZSBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRh
KCksIGlucHV0LnNpemUoKSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1h
cDo6VVJMKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5wdXQsIEJhc2U2NEVu
Y29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBWZWN0
b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgQ1N0cmluZyYgaW5wdXQp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoVCYm
IGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRhKCks
IGlucHV0Lmxlbmd0aCgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFw
OjpVUkwpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhzdGQ6OmZvcndhcmQ8VD4o
aW5wdXQpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwog
fQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqIGlu
cHV0LCB1bnNpZ25lZCBsZW5ndGgpCitpbmxpbmUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGJhc2U2NFVSTERlY29kZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCiB7Ci0gICAg
cmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LCBsZW5ndGgsIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29k
ZShpbnB1dCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBTdHJpbmcg
YmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKK2lu
bGluZSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0
IFN0cmluZyYgaW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0
LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5j
b2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjREZWNvZGUoaW5wdXQsIHsgfSwgQmFzZTY0
RGVjb2RlTWFwOjpVUkwpOwogfQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3Ry
aW5nKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW5wdXQpCitpbmxpbmUgc3RkOjpvcHRpb25hbDxWZWN0
b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShTdHJpbmdWaWV3IGlucHV0KQogewotICAgIHJl
dHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgQmFz
ZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKKyAgICByZXR1cm4g
YmFzZTY0RGVjb2RlKGlucHV0LCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKIH0KIAotaW5s
aW5lIFN0cmluZyBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhjb25zdCBDU3RyaW5nJiBpbnB1dCkK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZV92PHN0
ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmc+ICYm
ICFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5j
ZV90PFQ+PiwgU3RyaW5nVmlldz4+Kj4KK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjRVUkxEZWNvZGUoVCYmIGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0
cmluZyhpbnB1dC5kYXRhKCksIGlucHV0Lmxlbmd0aCgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVS
TCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjRVUkxEZWNvZGUoYXNC
eXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGlucHV0KSB9KSk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBpbmxpbmUgYm9vbCBpc0Jhc2U2NE9yQmFzZTY0
VVJMQ2hhcmFjdGVyKENoYXJhY3RlclR5cGUgYykKQEAgLTIwOCw1NyArMTg2LDM2IEBAIGlubGlu
ZSB1bnNpZ25lZCBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2kKIH0KIAogc3RydWN0IEJhc2U2NFNw
ZWNpZmljYXRpb24gewotICAgIGNvbnN0IHZvaWQqIGlucHV0RGF0YTsKLSAgICB1bnNpZ25lZCBp
bnB1dExlbmd0aDsKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXREYXRhOwogICAgIEJh
c2U2NEVuY29kZVBvbGljeSBwb2xpY3k7CiAgICAgQmFzZTY0RW5jb2RlTWFwIG1hcDsKIH07CiAK
LWlubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NEVuY29kZWQoY29uc3Qgdm9pZCogaW5w
dXREYXRhLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9
IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCBtYXAg
PSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpCi17Ci0gICAgcmV0dXJuIHsgaW5wdXREYXRhLCBp
bnB1dExlbmd0aCwgcG9saWN5LCBtYXAgfTsKLX0KLQotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRp
b24gYmFzZTY0RW5jb2RlZChjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0LCBCYXNlNjRFbmNv
ZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcykKLXsK
LSAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9s
aWN5KTsKLX0KLQotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChjb25z
dCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0
RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcykKLXsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2Rl
ZChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5KTsKLX0KLQotaW5saW5lIEJhc2U2
NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChjb25zdCBDU3RyaW5nJiBpbnB1dCwgQmFzZTY0
RW5jb2RlUG9saWN5IHBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMp
Ci17Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgo
KSwgcG9saWN5KTsKLX0KLQotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5j
b2RlZChjb25zdCB2b2lkKiBpbnB1dERhdGEsIHVuc2lnbmVkIGlucHV0TGVuZ3RoKQoraW5saW5l
IEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
aW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRv
Tm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgbWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZh
dWx0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0RGF0YSwgaW5wdXRMZW5ndGgs
IEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0
dXJuIHsgaW5wdXQsIHBvbGljeSwgbWFwIH07CiB9CiAKLWlubGluZSBCYXNlNjRTcGVjaWZpY2F0
aW9uIGJhc2U2NFVSTEVuY29kZWQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChUJiYgaW5w
dXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90
SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgbWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0
KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgp
LCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJl
dHVybiBiYXNlNjRFbmNvZGVkKGFzQnl0ZXMoU3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCkg
fSksIHBvbGljeSwgbWFwKTsKIH0KIAotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0
VVJMRW5jb2RlZChjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0KQoraW5saW5lIEJhc2U2NFNwZWNp
ZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCiB7
Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJh
c2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJu
IGJhc2U2NEVuY29kZWQoaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNv
ZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NFVSTEVu
Y29kZWQoY29uc3QgQ1N0cmluZyYgaW5wdXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBCYXNlNjRT
cGVjaWZpY2F0aW9uIGJhc2U2NFVSTEVuY29kZWQoVCYmIGlucHV0KQogewotICAgIHJldHVybiBi
YXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29k
ZWQoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGlucHV0KSB9KSwgQmFzZTY0RW5jb2Rl
UG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKIH0KIAogdGVtcGxhdGU8PiBjbGFz
cyBTdHJpbmdUeXBlQWRhcHRlcjxCYXNlNjRTcGVjaWZpY2F0aW9uPiB7CiBwdWJsaWM6CiAgICAg
U3RyaW5nVHlwZUFkYXB0ZXIoY29uc3QgQmFzZTY0U3BlY2lmaWNhdGlvbiYgYmFzZTY0KQogICAg
ICAgICA6IG1fYmFzZTY0IHsgYmFzZTY0IH0KLSAgICAgICAgLCBtX2VuY29kZWRMZW5ndGggeyBj
YWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShiYXNlNjQuaW5wdXRMZW5ndGgsIGJhc2U2NC5wb2xp
Y3kpIH0KKyAgICAgICAgLCBtX2VuY29kZWRMZW5ndGggeyBjYWxjdWxhdGVCYXNlNjRFbmNvZGVk
U2l6ZShiYXNlNjQuaW5wdXREYXRhLnNpemUoKSwgYmFzZTY0LnBvbGljeSkgfQogICAgIHsKICAg
ICB9CiAKQEAgLTI2Nyw3ICsyMjQsNyBAQCBwdWJsaWM6CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiB2b2lkIHdyaXRlVG8oQ2hhcmFjdGVyVHlwZSogZGVzdGluYXRpb24p
IGNvbnN0CiAgICAgewotICAgICAgICBiYXNlNjRFbmNvZGUobV9iYXNlNjQuaW5wdXREYXRhLCBt
X2Jhc2U2NC5pbnB1dExlbmd0aCwgZGVzdGluYXRpb24sIG1fZW5jb2RlZExlbmd0aCwgbV9iYXNl
NjQucG9saWN5LCBtX2Jhc2U2NC5tYXApOworICAgICAgICBiYXNlNjRFbmNvZGUobV9iYXNlNjQu
aW5wdXREYXRhLCBkZXN0aW5hdGlvbiwgbV9lbmNvZGVkTGVuZ3RoLCBtX2Jhc2U2NC5wb2xpY3ks
IG1fYmFzZTY0Lm1hcCk7CiAgICAgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dURi93dGYv
dGV4dC9DU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9DU3RyaW5n
LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMu
aD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvU3Bhbi5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtMzksOSArNDAsMTEg
QEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoQwogY2xhc3MgQ1N0cmlu
Z0J1ZmZlciBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPENTdHJpbmdCdWZmZXI+IHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihDU3RyaW5nQnVmZmVy
KTsKIHB1YmxpYzoKLSAgICBjb25zdCBjaGFyKiBkYXRhKCkgeyByZXR1cm4gbXV0YWJsZURhdGEo
KTsgfQorICAgIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PENT
dHJpbmdCdWZmZXIqPih0aGlzKS0+bXV0YWJsZURhdGEoKTsgfQogICAgIHNpemVfdCBsZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQogCisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+
IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4gYXNCeXRlcyhTcGFuIHsgZGF0YSgpLCBsZW5ndGgoKSB9
KTsgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDU3RyaW5nOwogCkBAIC02Niw2ICs2
OSwyMCBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBDU3RyaW5nIG5l
d1VuaW5pdGlhbGl6ZWQoc2l6ZV90IGxlbmd0aCwgY2hhciomIGNoYXJhY3RlckJ1ZmZlcik7CiAg
ICAgQ1N0cmluZyhIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IG1fYnVmZmVyKEhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSkgeyB9CiAKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fYnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIG1f
YnVmZmVyLT5ieXRlcygpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFNwYW48
c3RkOjpieXRlPiBtdXRhYmxlQnl0ZXMoKQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8gbXV0YWJs
ZURhdGEgPSB0aGlzLT5tdXRhYmxlRGF0YSgpKQorICAgICAgICAgICAgcmV0dXJuIGFzV3JpdGFi
bGVCeXRlcyhTcGFuIHsgbXV0YWJsZURhdGEsIG1fYnVmZmVyLT5sZW5ndGgoKSB9KTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICB9CisKICAgICBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3QKICAg
ICB7CiAgICAgICAgIHJldHVybiBtX2J1ZmZlciA/IG1fYnVmZmVyLT5kYXRhKCkgOiBudWxscHRy
OwpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5
NCw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBMQ2hhciogY2hhcmFjdGVyczgoKSBjb25zdDsKICAg
ICBjb25zdCBVQ2hhciogY2hhcmFjdGVyczE2KCkgY29uc3Q7CiAKKyAgICBTcGFuPGNvbnN0IHN0
ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25zdDsKKwogICAgIGJvb2wgaXNBbGxBU0NJSSgpIGNvbnN0Owog
CiAgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CkBAIC00MjQsNiArNDI2LDEzIEBAIGlubGlu
ZSBjb25zdCBVQ2hhciogU3RyaW5nVmlldzo6Y2hhcmFjdGUKICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgVUNoYXIqPihtX2NoYXJhY3RlcnMpOwogfQogCitpbmxpbmUgU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+IFN0cmluZ1ZpZXc6OmJ5dGVzKCkgY29uc3QKK3sKKyAgICBpZiAoaXM4Qml0KCkp
CisgICAgICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSB9
KTsKKyAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgY2hhcmFjdGVyczE2KCksIGxlbmd0aCgpIH0p
OworfQorCiBpbmxpbmUgYm9vbCBTdHJpbmdWaWV3Ojppc0FsbEFTQ0lJKCkgY29uc3QKIHsKICAg
ICBpZiAoaXM4Qml0KCkpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHJldmlzaW9uIDI3
ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPHd0Zi9G
dW5jdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQVND
SUlMaXRlcmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvSW50ZWdlclRvU3RyaW5nQ29udmVyc2lv
bi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KQEAgLTEzNCw2ICsxMzUsNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiAhbV9pbXBsIHx8IG1f
aW1wbC0+aXM4Qml0KCk7IH0KIAogICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5sZW5ndGgoKSAqIChpczhCaXQoKSA/IHNpemVvZihMQ2hh
cikgOiBzaXplb2YoVUNoYXIpKSA6IDA7IH0KKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0
ZXMoKSBjb25zdDsKIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBDU3RyaW5nIGFzY2lpKCkgY29u
c3Q7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIENTdHJpbmcgbGF0aW4xKCkgY29uc3Q7CkBAIC00
ODMsNiArNDg1LDE2IEBAIHRlbXBsYXRlPD4gaW5saW5lIGNvbnN0IFVDaGFyKiBTdHJpbmc6OmMK
ICAgICByZXR1cm4gY2hhcmFjdGVyczE2KCk7CiB9CiAKK2lubGluZSBTcGFuPGNvbnN0IHN0ZDo6
Ynl0ZT4gU3RyaW5nOjpieXRlcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ltcGwpCisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICBpZiAobV9pbXBsLT5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJu
IGFzQnl0ZXMoU3BhbiB7IG1faW1wbC0+Y2hhcmFjdGVyczgoKSwgbV9pbXBsLT5sZW5ndGgoKSB9
KTsKKyAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgbV9pbXBsLT5jaGFyYWN0ZXJzMTYoKSwgbV9p
bXBsLT5sZW5ndGgoKSB9KTsKK30KKwogaW5saW5lIFVDaGFyIFN0cmluZzo6Y2hhcmFjdGVyQXQo
dW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ltcGwgfHwgaW5kZXggPj0gbV9p
bXBsLT5sZW5ndGgoKSkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzYzLDkgKzM2Myw5IEBAIFN0cmluZyBjcmVhdGVUZW1wb3JhcnlE
aXJlY3RvcnkoKQogICAgIH0pOwogfQogCi1ib29sIHVubWFwVmlld09mRmlsZSh2b2lkKiBidWZm
ZXIsIHNpemVfdCkKK2Jvb2wgdW5tYXBWaWV3T2ZGaWxlKFNwYW48c3RkOjpieXRlPiBkYXRhKQog
ewotICAgIHJldHVybiBVbm1hcFZpZXdPZkZpbGUoYnVmZmVyKTsKKyAgICByZXR1cm4gVW5tYXBW
aWV3T2ZGaWxlKGRhdGEuZGF0YSgpKTsKIH0KIAogYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmls
ZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBGaWxlT3Blbk1vZGUgb3Blbk1vZGUs
IE1hcHBlZEZpbGVNb2RlKQpAQCAtMzc0LDcgKzM3NCw3IEBAIGJvb2wgTWFwcGVkRmlsZURhdGE6
Om1hcEZpbGVIYW5kbGUoUGxhdGYKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byBz
aXplID0gZmlsZVNpemUoaGFuZGxlKTsKLSAgICBpZiAoIXNpemUgfHwgKnNpemUgPiBzdGQ6Om51
bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIHx8ICpzaXplID4gc3RkOjpudW1lcmljX2xpbWl0
czxkZWNsdHlwZShtX2ZpbGVTaXplKT46Om1heCgpKSB7CisgICAgaWYgKCFzaXplIHx8ICpzaXpl
ID4gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSB8fCAqc2l6ZSA+IHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZGVjbHR5cGUobV9maWxlRGF0YS5zaXplKCkpPjo6bWF4KCkpIHsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNDAzLDExICs0MDMsMTIgQEAgYm9vbCBNYXBw
ZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0ZgogICAgIGlmICghbWFwcGluZykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9maWxlRGF0YSA9IE1hcFZpZXdPZkZpbGUobWFwcGlu
ZywgZGVzaXJlZEFjY2VzcywgMCwgMCwgKnNpemUpOworICAgIGF1dG8gZGF0YSA9IE1hcFZpZXdP
ZkZpbGUobWFwcGluZywgZGVzaXJlZEFjY2VzcywgMCwgMCwgKnNpemUpOwogICAgIENsb3NlSGFu
ZGxlKG1hcHBpbmcpOwotICAgIGlmICghbV9maWxlRGF0YSkKKyAgICBpZiAoIWRhdGEpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2ZpbGVTaXplID0gKnNpemU7CisKKyAgICBtX2ZpbGVE
YXRhID0gU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpieXRlKj4oZGF0YSksICpzaXplIH07
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgw
IEBACisyMDIxLTA2LTExICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAg
ICBBZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogTW9kdWxlcy9oaWdobGlnaHQv
QXBwSGlnaGxpZ2h0Lmg6CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHQ6OmVuY29kZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHQ6OmRlY29kZSk6CisgICAgICAg
ICogTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6dG9TaGFyZWRCdWZmZXIgY29uc3QpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvclJlc3BvbnNlRGF0YS5oOgor
ICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlQXJyYXlCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
ZGVjb2RlQXJyYXlCdWZmZXIpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oOgorICAgICAgICAoV2ViQ29yZTo6UHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmg6CisgICAgICAgIChX
ZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcjo6ZW5jb2RlIGNvbnN0KToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRXZWJTb2NrZXRBY2Nl
cHQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0J1ZmZlclNvdXJjZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6QnVmZmVyU291cmNlOjpieXRlcyBjb25zdCk6CisgICAgICAgICogYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmRlY29kZSk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvU2VyaWFsaXpl
ZE5GQS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6U2VyaWFsaXpl
ZE5GQTo6cG9pbnRlckF0T2Zmc2V0SW5GaWxlIGNvbnN0KToKKyAgICAgICAgKiBjcnlwdG8vbWFj
L1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
QW5kU3RvcmVNYXN0ZXJLZXkpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Omhhc2hQb2ludGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBhdGNoU3VwcG9ydDo6Y3JlYXRlRGlnZXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OmFkZFN0cmluZ1RvU0hBMSk6IERlbGV0ZWQuCisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZpY2F0ZSk6CisgICAgICAgICogaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yTmV0d29ya0FnZW50OjpnZXRTZXJpYWxpemVkQ2VydGlmaWNhdGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpjcmVhdGVTaGFyZWRCdWZmZXIgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRC
dWZmZXI6OlNoYXJlZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmFw
cGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpkYXRh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmJ5
dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6ZGVjb2RlciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpzaXplIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZGVjb2RlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Nb2RlbC5oOgorICAgICAgICAoV2ViQ29yZTo6TW9kZWw6OmVuY29k
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNb2RlbDo6ZGVjb2RlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6UGl4ZWxC
dWZmZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6ZGVj
b2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNl
Q2FwYWJpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpDYXBhYmlsaXR5VmFsdWVPclJhbmdl
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FwYWJpbGl0eVZhbHVlT3JSYW5n
ZTo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlh
U291cmNlQ2VudGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZFN0cmluZ1RvU0hBMSk6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHA6Cisg
ICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjplbmNvZGVDRkRhdGEpOgorICAgICAgICAoV1RGOjpQ
ZXJzaXN0ZW5jZTo6ZGVjb2RlQ0ZEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRl
U3RhdGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6YmluZEJs
b2IpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaDoKKyAgICAgICAg
KiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzKToKKyAgICAg
ICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTV1NjcmlwdFN0b3JhZ2U6OnN0b3JlKToKKwogMjAyMS0wNi0xMSAgQ2hyaXMg
RHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIExhemlseSBjb21wdXRlIFNlY3Vy
aXR5T3JpZ2luOjptX2lzUG90ZW50aWFsbHlUcnVzdHdvcnRoeSBmb3IgcGVyZm9ybWFuY2UKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvSW5pdERhdGFSZWdpc3Ry
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRp
YS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIHN0YXRpYyBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzYW5p
dGl6ZUtleWkKICAgICBhdXRvIG9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAg
YXV0byBraWRzQXJyYXkgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgZm9yIChhdXRvJiBi
dWZmZXIgOiBrZXlJREJ1ZmZlci52YWx1ZSgpKQotICAgICAgICBraWRzQXJyYXktPnB1c2hTdHJp
bmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgp
KSk7CisgICAgICAgIGtpZHNBcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVUb1N0cmlu
ZyhidWZmZXItPmJ5dGVzKCkpKTsKICAgICBvYmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92
ZShraWRzQXJyYXkpKTsKIAogICAgIENTdHJpbmcganNvbkRhdGEgPSBvYmplY3QtPnRvSlNPTlN0
cmluZygpLnV0ZjgoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0Fw
cEhpZ2hsaWdodC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxp
Z2h0L0FwcEhpZ2hsaWdodC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyAr
NTIsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBBcHBIaWdobGlnaHQ6OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
c2l6ZV90PihoaWdobGlnaHQtPnNpemUoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEoaGlnaGxpZ2h0LT5kYXRhKCksIGhpZ2hsaWdodC0+c2l6ZSgpLCAxKTsKKyAgICBlbmNv
ZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YSgqaGlnaGxpZ2h0LCAxKTsKIAogICAgIGVuY29kZXIg
PDwgdGV4dDsKIApAQCAtNzUsNyArNzUsNyBAQCBzdGQ6Om9wdGlvbmFsPEFwcEhpZ2hsaWdodD4g
QXBwSGlnaGxpZ2h0CiAKICAgICBWZWN0b3I8dWludDhfdD4gaGlnaGxpZ2h0OwogICAgIGhpZ2hs
aWdodC5ncm93KCpsZW5ndGgpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERh
dGEoaGlnaGxpZ2h0LmRhdGEoKSwgaGlnaGxpZ2h0LnNpemUoKSwgMSkpCisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShoaWdobGlnaHQsIDEpKQogICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwogCiAgICAgc3RkOjpvcHRpb25hbDxzdGQ6Om9wdGlvbmFsPFN0cmluZz4+
IHRleHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGln
aHRSYW5nZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGln
aGxpZ2h0L0FwcEhpZ2hsaWdodFJhbmdlRGF0YS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFJhbmdlRGF0YS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgUmVmPFNoYXJlZEJ1ZmZlcj4gQXBwSGln
aGxpZ2h0UmFuZ2VEYXRhOgogewogICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2Rl
cjsKICAgICBlbmNvZGVyIDw8ICp0aGlzOwotICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0
ZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgcmV0dXJuIFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCkpOwogfQogCiB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPiB2b2lkIEFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6Tm9kZVBhdGhDb21wb25lbnQ6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAJKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNo
YW5uZWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIE5ldHdvcmtTZW5kUXVl
dWUgUlRDRGF0YUNoYW5uZWw6OmNyZWF0ZU0KICAgICAgICAgaWYgKCFjaGFubmVsLm1faGFuZGxl
ci0+c2VuZFN0cmluZ0RhdGEodXRmOCkpCiAgICAgICAgICAgICBjaGFubmVsLnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3Nh
Z2VMZXZlbDo6RXJyb3IsICJFcnJvciBzZW5kaW5nIHN0cmluZyB0aHJvdWdoIFJUQ0RhdGFDaGFu
bmVsLiJfcyk7CiAgICAgfSwgWyZjaGFubmVsXShhdXRvJiBzcGFuKSB7Ci0gICAgICAgIGlmICgh
Y2hhbm5lbC5tX2hhbmRsZXItPnNlbmRSYXdEYXRhKHNwYW4uZGF0YSgpLCBzcGFuLnNpemUoKSkp
CisgICAgICAgIGlmICghY2hhbm5lbC5tX2hhbmRsZXItPnNlbmRSYXdEYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNwYW4uZGF0YSgpKSwgc3Bhbi5zaXplKCkpKQogICAgICAg
ICAgICAgY2hhbm5lbC5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFkZENvbnNvbGVNZXNzYWdl
KE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAiRXJyb3Igc2VuZGluZyBi
aW5hcnkgZGF0YSB0aHJvdWdoIFJUQ0RhdGFDaGFubmVsLiJfcyk7CiAgICAgfSwgWyZjaGFubmVs
XShFeGNlcHRpb25Db2RlIGVycm9yQ29kZSkgewogICAgICAgICBpZiAoYXV0byogY29udGV4dCA9
IGNoYW5uZWwuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxh
Y2VtZW50Lm1tCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Bs
dWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTUy
LDYgKzUyLDcgQEAKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0NhdGNoU2NvcGUuaD4KICNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CiAjaW1wb3J0IDxvYmpjL3J1bnRp
bWUuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9TcGFuQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi90ZXh0
L0Jhc2U2NC5oPgogCiAjaW1wb3J0IDxwYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaD4KQEAgLTI0
Niw5ICsyNDcsOSBAQCBzdGF0aWMgSlNWYWx1ZSAqanNWYWx1ZVdpdGhEYXRhSW5Db250ZXh0CiAg
ICAgLy8gRklYTUU6IEFkZCBtYWtlQ0ZTdHJpbmcvbWFrZU5TU3RyaW5nIHRvIGF2b2lkIHVubmVj
ZXNzYXJ5IFN0cmluZyBhbGxvY2F0aW9uLgogICAgIFN0cmluZyBkYXRhNjQ7CiAgICAgaWYgKCFt
aW1lVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6Iiwg
bWltZVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoW2RhdGEgYnl0ZXNdLCBbZGF0YSBs
ZW5ndGhdKSk7CisgICAgICAgIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgbWltZVR5cGUs
ICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoYXNCeXRlcyhkYXRhKSkpOwogICAgIGVsc2UKLSAg
ICAgICAgZGF0YTY0ID0gbWFrZVN0cmluZygiZGF0YTp0ZXh0L3BsYWluO2Jhc2U2NCwiLCBiYXNl
NjRFbmNvZGVkKFtkYXRhIGJ5dGVzXSwgW2RhdGEgbGVuZ3RoXSkpOworICAgICAgICBkYXRhNjQg
PSBtYWtlU3RyaW5nKCJkYXRhOnRleHQvcGxhaW47YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoYXNC
eXRlcyhkYXRhKSkpOwogCiAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aE9iamVjdDooaWQp
ZGF0YTY0LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkgaW5Db250ZXh0OmNvbnRleHRdOwogfQpAQCAt
MzQwLDcgKzM0MSw3IEBAIHN0YXRpYyBKU1ZhbHVlICpqc1ZhbHVlV2l0aEFWTWV0YWRhdGFJdGUK
ICAgICAgICAgaWQgdmFsdWUgPSBpdGVtLnZhbHVlOwogICAgICAgICBOU1N0cmluZyAqbWltZVR5
cGUgPSBbW2l0ZW0gZXh0cmFBdHRyaWJ1dGVzXSBvYmplY3RGb3JLZXk6QCJNSU1FdHlwZSJdOwog
ICAgICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TRGF0YSBjbGFzc11dICYmIG1pbWVU
eXBlKSB7Ci0gICAgICAgICAgICBhdXRvIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgU3Ry
aW5nKG1pbWVUeXBlKSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChbdmFsdWUgYnl0ZXNdLCBb
dmFsdWUgbGVuZ3RoXSkpOworICAgICAgICAgICAgYXV0byBkYXRhNjQgPSBtYWtlU3RyaW5nKCJk
YXRhOiIsIFN0cmluZyhtaW1lVHlwZSksICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoYXNCeXRl
cygoTlNEYXRhICopdmFsdWUpKSk7CiAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6
KF9fYnJpZGdlIE5TU3RyaW5nICopZGF0YTY0LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkgZm9yS2V5
OkAidmFsdWUiXTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRP
YmplY3Q6dmFsdWUgZm9yS2V5OkAidmFsdWUiXTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRpY2F0b3JDb29yZGluYXRvci5j
cHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4v
QXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQs
NyBAQCBzdGF0aWMgUmVmPEFycmF5QnVmZmVyPiBwcm9kdWNlQ2xpZW50RGF0CiAgICAgICAgIG9i
amVjdC0+c2V0U3RyaW5nKCJ0eXBlIl9zLCAid2ViYXV0aG4uZ2V0Il9zKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQotICAgIG9iamVjdC0+c2V0U3RyaW5nKCJjaGFsbGVuZ2UiX3MsIGJhc2U2NFVS
TEVuY29kZVRvU3RyaW5nKGNoYWxsZW5nZS5kYXRhKCksIGNoYWxsZW5nZS5sZW5ndGgoKSkpOwor
ICAgIG9iamVjdC0+c2V0U3RyaW5nKCJjaGFsbGVuZ2UiX3MsIGJhc2U2NFVSTEVuY29kZVRvU3Ry
aW5nKGNoYWxsZW5nZS5ieXRlcygpKSk7CiAgICAgb2JqZWN0LT5zZXRTdHJpbmcoIm9yaWdpbiJf
cywgb3JpZ2luLnRvUmF3U3RyaW5nKCkpOwogCiAgICAgYXV0byB1dGY4SlNPTlN0cmluZyA9IG9i
amVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdXRobi9BdXRoZW50aWNhdG9yUmVzcG9uc2VEYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yUmVzcG9uc2VEYXRhLmgJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0
aGVudGljYXRvclJlc3BvbnNlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBA
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiBzdGF0aWMgdm9pZCBlbmNvZGVBcnJheUJ1ZmZlcihF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBBcnJheUJ1ZmZlciYgYnVmZmVyKQogewogICAgIGVuY29k
ZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ1ZmZlci5ieXRlTGVuZ3RoKCkpOwotICAgIGVu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihi
dWZmZXIuZGF0YSgpKSwgYnVmZmVyLmJ5dGVMZW5ndGgoKSwgMSk7CisgICAgZW5jb2Rlci5lbmNv
ZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLmJ5dGVzKCksIDEpOwogfQogCiB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgpAQCAtNzUsNyArNzUsNyBAQCBSZWZQdHI8QXJyYXlCdWZmZXI+IGRlY29kZUFy
cmF5QnVmZmVyKERlCiAgICAgYXV0byBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKGxl
bmd0aC52YWx1ZSgpLCBzaXplb2YodWludDhfdCkpOwogICAgIGlmICghYnVmZmVyKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihidWZmZXItPmRhdGEoKSksIGxlbmd0aC52YWx1ZSgpLCAx
KSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ1ZmZlci0+d3JpdGFi
bGVCeXRlcygpLCAxKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIGJ1ZmZl
cjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3Jl
ZGVudGlhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRo
bi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTQsNyArNTQsNyBAQCBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRw
dXRzIFB1CiB9CiAKIFB1YmxpY0tleUNyZWRlbnRpYWw6OlB1YmxpY0tleUNyZWRlbnRpYWwoUmVm
PEF1dGhlbnRpY2F0b3JSZXNwb25zZT4mJiByZXNwb25zZSkKLSAgICA6IEJhc2ljQ3JlZGVudGlh
bChiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhyZXNwb25zZS0+cmF3SWQoKS0+ZGF0YSgpLCByZXNw
b25zZS0+cmF3SWQoKS0+Ynl0ZUxlbmd0aCgpKSwgVHlwZTo6UHVibGljS2V5LCBEaXNjb3Zlcnk6
OlJlbW90ZSkKKyAgICA6IEJhc2ljQ3JlZGVudGlhbChiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhy
ZXNwb25zZS0+cmF3SWQoKS0+Ynl0ZXMoKSksIFR5cGU6OlB1YmxpY0tleSwgRGlzY292ZXJ5OjpS
ZW1vdGUpCiAgICAgLCBtX3Jlc3BvbnNlKFdURk1vdmUocmVzcG9uc2UpKQogewogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRp
b25PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRo
bi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmgJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENy
ZWF0aW9uT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsOCArMTQxLDggQEAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9u
czo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBycC5p
ZCA8PCBycC5uYW1lIDw8IHJwLmljb247Ci0gICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50
NjRfdD4odXNlci5pZC5sZW5ndGgoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERh
dGEodXNlci5pZC5kYXRhKCksIHVzZXIuaWQubGVuZ3RoKCksIDEpOworICAgIGVuY29kZXIgPDwg
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHVzZXIuaWQuYnl0ZXMoKS5zaXplKCkpOworICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHVzZXIuaWQuYnl0ZXMoKSwgMSk7CiAgICAgZW5jb2Rl
ciA8PCB1c2VyLmRpc3BsYXlOYW1lIDw8IHVzZXIubmFtZSA8PCB1c2VyLmljb24gPDwgcHViS2V5
Q3JlZFBhcmFtcyA8PCB0aW1lb3V0IDw8IGV4Y2x1ZGVDcmVkZW50aWFscyA8PCBhdXRoZW50aWNh
dG9yU2VsZWN0aW9uIDw8IGF0dGVzdGF0aW9uIDw8IGV4dGVuc2lvbnM7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1Ymxp
Y0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsOCBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgog
dm9pZCBQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcjo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCB0eXBlOwotICAgIGVuY29kZXIgPDwgc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KGlkLmxlbmd0aCgpKTsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShpZC5kYXRhKCksIGlkLmxlbmd0aCgpLCAxKTsKKyAgICBlbmNvZGVyIDw8IHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihpZC5ieXRlcygpLnNpemUoKSk7CisgICAgZW5jb2Rlci5lbmNvZGVG
aXhlZExlbmd0aERhdGEoaWQuYnl0ZXMoKSwgMSk7CiAgICAgZW5jb2RlciA8PCB0cmFuc3BvcnRz
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0
SGFuZHNoYWtlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNv
Y2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk3LDE5ICs5NywyMCBAQCBzdGF0aWMgU3RyaW5nIGdlbmVyYXRlU2VjV2Vi
U29ja2V0S2V5KCkKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG5vbmNlU2l6ZSA9IDE2OwogICAg
IHVuc2lnbmVkIGNoYXIga2V5W25vbmNlU2l6ZV07CiAgICAgY3J5cHRvZ3JhcGhpY2FsbHlSYW5k
b21WYWx1ZXMoa2V5LCBub25jZVNpemUpOwotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmlu
ZyhrZXksIG5vbmNlU2l6ZSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGtleSk7
CiB9CiAKIFN0cmluZyBXZWJTb2NrZXRIYW5kc2hha2U6OmdldEV4cGVjdGVkV2ViU29ja2V0QWNj
ZXB0KGNvbnN0IFN0cmluZyYgc2VjV2ViU29ja2V0S2V5KQogewogICAgIGNvbnN0ZXhwciB1aW50
OF90IHdlYlNvY2tldEtleUdVSURbXSA9ICIyNThFQUZBNS1FOTE0LTQ3REEtOTVDQS1DNUFCMERD
ODVCMTEiOworCiAgICAgU0hBMSBzaGExOwotICAgIENTdHJpbmcga2V5RGF0YSA9IHNlY1dlYlNv
Y2tldEtleS5hc2NpaSgpOwotICAgIHNoYTEuYWRkQnl0ZXMoa2V5RGF0YS5kYXRhQXNVSW50OFB0
cigpLCBrZXlEYXRhLmxlbmd0aCgpKTsKLSAgICBzaGExLmFkZEJ5dGVzKHdlYlNvY2tldEtleUdV
SUQsIHN0ZDo6c2l6ZSh3ZWJTb2NrZXRLZXlHVUlEKSAtIDEpOworICAgIHNoYTEuYWRkQnl0ZXMo
c2VjV2ViU29ja2V0S2V5LmFzY2lpKCkuYnl0ZXMoKSk7CisgICAgc2hhMS5hZGRCeXRlcyh3ZWJT
b2NrZXRLZXlHVUlEKTsKKwogICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwogICAgIHNoYTEuY29tcHV0
ZUhhc2goaGFzaCk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGhhc2guZGF0YSgp
LCBTSEExOjpoYXNoU2l6ZSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGhhc2gp
OwogfQogCiBXZWJTb2NrZXRIYW5kc2hha2U6OldlYlNvY2tldEhhbmRzaGFrZShjb25zdCBVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNv
bnN0IFN0cmluZyYgY2xpZW50T3JpZ2luLCBib29sIGFsbG93Q29va2llcykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvV2ViQ29y
ZS54Y3NjaGVtZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai94Y3NoYXJlZGRhdGEveGNzY2hlbWVzL1dlYkNvcmUueGNzY2hlbWUJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3Nj
aGVtZXMvV2ViQ29yZS54Y3NjaGVtZQkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksOSBAQAog
ICAgICAgaWdub3Jlc1BlcnNpc3RlbnRTdGF0ZU9uTGF1bmNoID0gIk5PIgogICAgICAgZGVidWdE
b2N1bWVudFZlcnNpb25pbmcgPSAiWUVTIgogICAgICAgZGVidWdTZXJ2aWNlRXh0ZW5zaW9uID0g
ImludGVybmFsIgotICAgICAgYWxsb3dMb2NhdGlvblNpbXVsYXRpb24gPSAiWUVTIj4KKyAgICAg
IGVuYWJsZUdQVUZyYW1lQ2FwdHVyZU1vZGUgPSAiMyIKKyAgICAgIGFsbG93TG9jYXRpb25TaW11
bGF0aW9uID0gIllFUyIKKyAgICAgIEdQVVByb2ZpbGVyRW5hYmxlZCA9ICJObyI+CiAgICA8L0xh
dW5jaEFjdGlvbj4KICAgIDxQcm9maWxlQWN0aW9uCiAgICAgICBidWlsZENvbmZpZ3VyYXRpb24g
PSAiUmVsZWFzZSIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0J1ZmZlclNvdXJj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0J1ZmZlclNvdXJj
ZS5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9CdWZm
ZXJTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsMTMgQEAgcHVibGljOgogICAg
ICAgICB9LCBtX3ZhcmlhbnQpOwogICAgIH0KIAorICAgIFNwYW48Y29uc3QgdWludDhfdD4gYnl0
ZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQoW10oYXV0byYgYnVm
ZmVyKSAtPiBTcGFuPGNvbnN0IHVpbnQ4X3Q+IHsKKyAgICAgICAgICAgIHJldHVybiBidWZmZXIg
PyBTcGFuPGNvbnN0IHVpbnQ4X3Q+IHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZl
ci0+ZGF0YSgpKSwgYnVmZmVyLT5ieXRlTGVuZ3RoKCkgfSA6IFNwYW48Y29uc3QgdWludDhfdD4g
eyB9OworICAgICAgICB9LCBtX3ZhcmlhbnQpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBWYXJp
YW50VHlwZSBtX3ZhcmlhbnQ7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjQsMTUgKzE2NCwxNSBAQCB2b2lkIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
ZW5jb2RlKEVuY29kCiAKICAgICBpZiAoaGFzQXJyYXkpIHsKICAgICAgICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDx1aW50NjRfdD4obV9hcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXktPnNpemUoKSk7
Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byAmYXJyYXlCdWZmZXJDb250ZW50cyA6ICptX2FycmF5
QnVmZmVyQ29udGVudHNBcnJheSkgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGFycmF5QnVm
ZmVyQ29udGVudHMgOiAqbV9hcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkpIHsKICAgICAgICAgICAg
IGVuY29kZXIgPDwgYXJyYXlCdWZmZXJDb250ZW50cy5zaXplSW5CeXRlcygpOwotICAgICAgICAg
ICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGFycmF5QnVmZmVyQ29udGVudHMuZGF0YSgpKSwgYXJyYXlCdWZmZXJDb250ZW50cy5zaXpl
SW5CeXRlcygpLCAxKTsKKyAgICAgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KGFycmF5QnVmZmVyQ29udGVudHMuYnl0ZXMoKSwgMSk7CiAgICAgICAgIH0KICAgICB9CiAKICNp
ZiBFTkFCTEUoV0VCX1JUQykKICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Piht
X2RldGFjaGVkUlRDRGF0YUNoYW5uZWxzLnNpemUoKSk7Ci0gICAgZm9yIChjb25zdCBhdXRvICZj
aGFubmVsIDogbV9kZXRhY2hlZFJUQ0RhdGFDaGFubmVscykKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IGNoYW5uZWwgOiBtX2RldGFjaGVkUlRDRGF0YUNoYW5uZWxzKQogICAgICAgICBlbmNvZGVyIDw8
ICpjaGFubmVsOwogI2VuZGlmCiB9CkBAIC0yMDYsNyArMjA2LDcgQEAgUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZAogICAgICAgICAgICAgYXV0byBidWZmZXIgPSBHaWdh
Y2FnZTo6dHJ5TWFsbG9jKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJ1ZmZlclNpemUpOwogICAgICAg
ICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihidWZmZXIpLCBidWZmZXJTaXplLCAxKSkgeworICAgICAgICAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgc3RhdGljX2Nhc3Q8c3RkOjpieXRlKj4o
YnVmZmVyKSwgYnVmZmVyU2l6ZSB9LCAxKSkgewogICAgICAgICAgICAgICAgIEdpZ2FjYWdlOjpm
cmVlKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9TZXJpYWxpemVkTkZBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9TZXJpYWxpemVkTkZBLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvU2VyaWFsaXplZE5GQS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBTZXJpYWxpemVkTkZBOjpTZXJpYWxpemVkTkZB
KEZpbGVTeXN0ZW06CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogY29uc3QgVCogU2VyaWFsaXplZE5G
QTo6cG9pbnRlckF0T2Zmc2V0SW5GaWxlKHNpemVfdCBvZmZzZXQpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihtX2ZpbGUuZGF0YSgpKSArIG9mZnNldCk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgVCo+KG1fZmlsZS5kYXRhKCkuZGF0YSgpICsgb2Zmc2V0KTsKIH0KIAogYXV0byBTZXJp
YWxpemVkTkZBOjpub2RlcygpIGNvbnN0IC0+IGNvbnN0IFJhbmdlPEltbXV0YWJsZU5GQU5vZGU+
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNwcAko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlF
Q01hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NywxMCArMTk3LDEwIEBAIGJvb2wgQ3J5cHRv
S2V5RUM6OnBsYXRmb3JtQWRkRmllbGRFbGVtZW4KIAogICAgIGlmIChVTkxJS0VMWSgoc2l6ZSAh
PSBwdWJsaWNLZXlTaXplKSAmJiAoc2l6ZSAhPSBwcml2YXRlS2V5U2l6ZSkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgandrLnggPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhyZXN1bHQu
ZGF0YSgpICsgMSwga2V5U2l6ZUluQnl0ZXMpOwotICAgIGp3ay55ID0gYmFzZTY0VVJMRW5jb2Rl
VG9TdHJpbmcocmVzdWx0LmRhdGEoKSArIGtleVNpemVJbkJ5dGVzICsgMSwga2V5U2l6ZUluQnl0
ZXMpOworICAgIGp3ay54ID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoU3BhbiB7IHJlc3VsdCB9
LnN1YnNwYW4oMSwga2V5U2l6ZUluQnl0ZXMpKTsKKyAgICBqd2sueSA9IGJhc2U2NFVSTEVuY29k
ZVRvU3RyaW5nKFNwYW4geyByZXN1bHQgfS5zdWJzcGFuKDEgKyBrZXlTaXplSW5CeXRlcywga2V5
U2l6ZUluQnl0ZXMpKTsKICAgICBpZiAoc2l6ZSA+IHB1YmxpY0tleVNpemUpCi0gICAgICAgIGp3
ay5kID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcocmVzdWx0LmRhdGEoKSArIHB1YmxpY0tleVNp
emUsIGtleVNpemVJbkJ5dGVzKTsKKyAgICAgICAgandrLmQgPSBiYXNlNjRVUkxFbmNvZGVUb1N0
cmluZyhTcGFuIHsgcmVzdWx0IH0uc3Vic3BhbihwdWJsaWNLZXlTaXplLCBrZXlTaXplSW5CeXRl
cykpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
bWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9tYWMvU2VyaWFsaXplZENyeXB0b0tleVdyYXBNYWMubW0JKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvU2VyaWFsaXplZENyeXB0b0tl
eVdyYXBNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbXBvcnQgPHd0
Zi9DcnlwdG9ncmFwaGljVXRpbGl0aWVzLmg+CiAjaW1wb3J0IDx3dGYvUHJvY2Vzc1ByaXZpbGVn
ZS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL2NmL1NwYW5DRi5o
PgogI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvc3BpL2Nv
Y29hL1NlY3VyaXR5U1BJLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4KQEAgLTE2Nyw3
ICsxNjgsNyBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGZpCiAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+
IGtleURhdGEgPSBhZG9wdENGKGtleURhdGFSZWYpOwotICAgIHJldHVybiBiYXNlNjREZWNvZGUo
Q0ZEYXRhR2V0Qnl0ZVB0cihrZXlEYXRhLmdldCgpKSwgQ0ZEYXRhR2V0TGVuZ3RoKGtleURhdGEu
Z2V0KCkpKTsKKyAgICByZXR1cm4gYmFzZTY0RGVjb2RlKGFzQnl0ZXMoa2V5RGF0YS5nZXQoKSkp
OwogfQogCiBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZGVmYXVsdFdlYkNyeXB0b01h
c3RlcktleSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MDYsNyArMTYwNiw4
IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IE5vZGU6OnNldFRleHRDb250ZW50KGMKIHN0YXRpYyBTSEEx
OjpEaWdlc3QgaGFzaFBvaW50ZXIoY29uc3Qgdm9pZCogcG9pbnRlcikKIHsKICAgICBTSEExIHNo
YTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigm
cG9pbnRlciksIHNpemVvZihwb2ludGVyKSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgJnBv
aW50ZXIsIDEgfSk7CisKICAgICBTSEExOjpEaWdlc3QgZGlnZXN0OwogICAgIHNoYTEuY29tcHV0
ZUhhc2goZGlnZXN0KTsKICAgICByZXR1cm4gZGlnZXN0OwpJbmRleDogU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMzgsNyArMzM4LDcgQEAgdm9pZCBGaWxlUmVhZGVyTG9hZGVyOjpjb252ZXJ0VG9EYXRhVVJM
KAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9zdHJpbmdSZXN1bHQgPSBtYWtlU3Ry
aW5nKCJkYXRhOiIsIG1fZGF0YVR5cGUuaXNFbXB0eSgpID8gImFwcGxpY2F0aW9uL29jdGV0LXN0
cmVhbSIgOiBtX2RhdGFUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKG1fcmF3RGF0YS0+
ZGF0YSgpLCBtX2J5dGVzTG9hZGVkKSk7CisgICAgbV9zdHJpbmdSZXN1bHQgPSBtYWtlU3RyaW5n
KCJkYXRhOiIsIG1fZGF0YVR5cGUuaXNFbXB0eSgpID8gImFwcGxpY2F0aW9uL29jdGV0LXN0cmVh
bSIgOiBtX2RhdGFUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKG1fcmF3RGF0YS0+Ynl0
ZXMoKSkpOwogfQogCiBib29sIEZpbGVSZWFkZXJMb2FkZXI6OmlzQ29tcGxldGVkKCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTmV0d29ya1NlbmRRdWV1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTEgKzUzLDEwIEBAIHZvaWQgTmV0d29ya1NlbmRR
dWV1ZTo6ZW5xdWV1ZShDU3RyaW5nJiYKIHZvaWQgTmV0d29ya1NlbmRRdWV1ZTo6ZW5xdWV1ZShj
b25zdCBKU0M6OkFycmF5QnVmZmVyJiBiaW5hcnlEYXRhLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
bnNpZ25lZCBieXRlTGVuZ3RoKQogewogICAgIGlmIChtX3F1ZXVlLmlzRW1wdHkoKSkgewotICAg
ICAgICBhdXRvKiBkYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJpbmFyeURhdGEu
ZGF0YSgpKTsKLSAgICAgICAgbV93cml0ZVJhd0RhdGEoU3BhbiB7IGRhdGEgKyBieXRlT2Zmc2V0
LCBieXRlTGVuZ3RoIH0pOworICAgICAgICBtX3dyaXRlUmF3RGF0YShiaW5hcnlEYXRhLmJ5dGVz
KCkuc3Vic3BhbihieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgbV9xdWV1ZS5hcHBlbmQoU2hhcmVkQnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8
Y29uc3QgdWludDhfdCo+KGJpbmFyeURhdGEuZGF0YSgpKSArIGJ5dGVPZmZzZXQsIGJ5dGVMZW5n
dGgpKTsKKyAgICBtX3F1ZXVlLmFwcGVuZChTaGFyZWRCdWZmZXI6OmNyZWF0ZShiaW5hcnlEYXRh
LmJ5dGVzKCkuc3Vic3BhbihieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSkpOwogfQogCiB2b2lkIE5l
dHdvcmtTZW5kUXVldWU6OmVucXVldWUoV2ViQ29yZTo6QmxvYiYgYmxvYikKQEAgLTkzLDcgKzky
LDkgQEAgdm9pZCBOZXR3b3JrU2VuZFF1ZXVlOjpwcm9jZXNzTWVzc2FnZXMoKQogICAgICAgICBz
d2l0Y2hPbihtX3F1ZXVlLmZpcnN0KCksIFt0aGlzXShjb25zdCBDU3RyaW5nJiB1dGY4KSB7CiAg
ICAgICAgICAgICBtX3dyaXRlU3RyaW5nKHV0ZjgpOwogICAgICAgICB9LCBbdGhpc10oUmVmPFNo
YXJlZEJ1ZmZlcj4mIGRhdGEpIHsKLSAgICAgICAgICAgIGRhdGEtPmZvckVhY2hTZWdtZW50KG1f
d3JpdGVSYXdEYXRhKTsKKyAgICAgICAgICAgIGRhdGEtPmZvckVhY2hTZWdtZW50KFt0aGlzXShh
dXRvJiBzcGFuKSB7CisgICAgICAgICAgICAgICAgbV93cml0ZVJhd0RhdGEoYXNCeXRlcyhzcGFu
KSk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfSwgW3RoaXMsICZzaG91bGRTdG9wUHJvY2Vz
c2luZ10oVW5pcXVlUmVmPEJsb2JMb2FkZXI+JiBsb2FkZXIpIHsKICAgICAgICAgICAgIGF1dG8g
ZXJyb3JDb2RlID0gbG9hZGVyLT5lcnJvckNvZGUoKTsKICAgICAgICAgICAgIGlmIChsb2FkZXIt
PmlzTG9hZGluZygpIHx8IChlcnJvckNvZGUgJiYgZXJyb3JDb2RlLnZhbHVlKCkgPT0gQWJvcnRF
cnJvcikpIHsKQEAgLTEwMiw3ICsxMDMsNyBAQCB2b2lkIE5ldHdvcmtTZW5kUXVldWU6OnByb2Nl
c3NNZXNzYWdlcygpCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChjb25zdCBhdXRv
JiByZXN1bHQgPSBsb2FkZXItPmFycmF5QnVmZmVyUmVzdWx0KCkpIHsKLSAgICAgICAgICAgICAg
ICBtX3dyaXRlUmF3RGF0YShTcGFuIHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KHJlc3Vs
dC0+ZGF0YSgpKSwgcmVzdWx0LT5ieXRlTGVuZ3RoKCkgfSk7CisgICAgICAgICAgICAgICAgbV93
cml0ZVJhd0RhdGEocmVzdWx0LT5ieXRlcygpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBBU1NFUlQoZXJyb3JDb2RlKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvTmV0d29ya1NlbmRRdWV1ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvTmV0d29ya1NlbmRRdWV1ZS5oCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL05ldHdvcmtTZW5kUXVldWUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDgsNyArNDgsNyBAQCBjbGFzcyBTaGFyZWRCdWZmZXI7CiBjbGFzcyBXRUJDT1JFX0VY
UE9SVCBOZXR3b3JrU2VuZFF1ZXVlIDogcHVibGljIENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVy
IHsKIHB1YmxpYzoKICAgICB1c2luZyBXcml0ZVN0cmluZyA9IEZ1bmN0aW9uPHZvaWQoY29uc3Qg
Q1N0cmluZyYgdXRmOCk+OwotICAgIHVzaW5nIFdyaXRlUmF3RGF0YSA9IEZ1bmN0aW9uPHZvaWQo
Y29uc3QgU3Bhbjxjb25zdCB1aW50OF90PiYpPjsKKyAgICB1c2luZyBXcml0ZVJhd0RhdGEgPSBG
dW5jdGlvbjx2b2lkKGNvbnN0IFNwYW48Y29uc3Qgc3RkOjpieXRlPiYpPjsKICAgICBlbnVtIGNs
YXNzIENvbnRpbnVlIHsgTm8sIFllcyB9OwogICAgIHVzaW5nIFByb2Nlc3NFcnJvciA9IEZ1bmN0
aW9uPENvbnRpbnVlKEV4Y2VwdGlvbkNvZGUpPjsKICAgICBOZXR3b3JrU2VuZFF1ZXVlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmLCBXcml0ZVN0cmluZyYmLCBXcml0ZVJhd0RhdGEmJiwgUHJvY2Vz
c0Vycm9yJiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9y
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3Vw
cG9ydC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9E
T01QYXRjaFN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQsMjggKzM5NCwyMyBAQCBF
eGNlcHRpb25Pcjx2b2lkPiBET01QYXRjaFN1cHBvcnQ6OmlubmVyCiAgICAgcmV0dXJuIHsgfTsK
IH0KIAotc3RhdGljIHZvaWQgYWRkU3RyaW5nVG9TSEExKFNIQTEmIHNoYTEsIGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKQotewotICAgIENTdHJpbmcgY1N0cmluZyA9IHN0cmluZy51dGY4KCk7Ci0gICAg
c2hhMS5hZGRCeXRlcyhjU3RyaW5nLmRhdGFBc1VJbnQ4UHRyKCksIGNTdHJpbmcubGVuZ3RoKCkp
OwotfQotCiBzdGQ6OnVuaXF1ZV9wdHI8RE9NUGF0Y2hTdXBwb3J0OjpEaWdlc3Q+IERPTVBhdGNo
U3VwcG9ydDo6Y3JlYXRlRGlnZXN0KE5vZGUmIG5vZGUsIFVudXNlZE5vZGVzTWFwKiB1bnVzZWRO
b2Rlc01hcCkKIHsKICAgICBhdXRvIGRpZ2VzdCA9IG1ha2VVbmlxdWU8RGlnZXN0PigpOwogICAg
IGRpZ2VzdC0+bm9kZSA9ICZub2RlOworCiAgICAgU0hBMSBzaGExOwogCiAgICAgYXV0byBub2Rl
VHlwZSA9IG5vZGUubm9kZVR5cGUoKTsKLSAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KCZub2RlVHlwZSksIHNpemVvZihub2RlVHlwZSkpOwotICAgIGFk
ZFN0cmluZ1RvU0hBMShzaGExLCBub2RlLm5vZGVOYW1lKCkpOwotICAgIGFkZFN0cmluZ1RvU0hB
MShzaGExLCBub2RlLm5vZGVWYWx1ZSgpKTsKKyAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmbm9k
ZVR5cGUsIDEgfSk7CisgICAgc2hhMS5hZGRCeXRlcyhub2RlLm5vZGVOYW1lKCkudXRmOCgpLmJ5
dGVzKCkpOworICAgIHNoYTEuYWRkQnl0ZXMobm9kZS5ub2RlVmFsdWUoKS51dGY4KCkuYnl0ZXMo
KSk7CiAKICAgICBpZiAobm9kZS5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSkgewog
ICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUuZmlyc3RDaGlsZCgpOwogICAgICAgICB3aGlsZSAo
Y2hpbGQpIHsKICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxEaWdlc3Q+IGNoaWxkSW5mbyA9
IGNyZWF0ZURpZ2VzdCgqY2hpbGQsIHVudXNlZE5vZGVzTWFwKTsKLSAgICAgICAgICAgIGFkZFN0
cmluZ1RvU0hBMShzaGExLCBjaGlsZEluZm8tPnNoYTEpOworICAgICAgICAgICAgc2hhMS5hZGRC
eXRlcyhjaGlsZEluZm8tPnNoYTEudXRmOCgpLmJ5dGVzKCkpOwogICAgICAgICAgICAgY2hpbGQg
PSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAgIGRpZ2VzdC0+Y2hpbGRyZW4uYXBw
ZW5kKFdURk1vdmUoY2hpbGRJbmZvKSk7CiAgICAgICAgIH0KQEAgLTQyNCwxOSArNDE5LDE5IEBA
IHN0ZDo6dW5pcXVlX3B0cjxET01QYXRjaFN1cHBvcnQ6OkRpZ2VzdD4KICAgICAgICAgaWYgKGVs
ZW1lbnQuaGFzQXR0cmlidXRlc1dpdGhvdXRVcGRhdGUoKSkgewogICAgICAgICAgICAgU0hBMSBh
dHRyc1NIQTE7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGF0dHJpYnV0ZSA6IGVsZW1lbnQuYXR0
cmlidXRlc0l0ZXJhdG9yKCkpIHsKLSAgICAgICAgICAgICAgICBhZGRTdHJpbmdUb1NIQTEoYXR0
cnNTSEExLCBhdHRyaWJ1dGUubmFtZSgpLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGFk
ZFN0cmluZ1RvU0hBMShhdHRyc1NIQTEsIGF0dHJpYnV0ZS52YWx1ZSgpKTsKKyAgICAgICAgICAg
ICAgICBhdHRyc1NIQTEuYWRkQnl0ZXMoYXR0cmlidXRlLm5hbWUoKS50b1N0cmluZygpLnV0Zjgo
KS5ieXRlcygpKTsKKyAgICAgICAgICAgICAgICBhdHRyc1NIQTEuYWRkQnl0ZXMoYXR0cmlidXRl
LnZhbHVlKCkuc3RyaW5nKCkudXRmOCgpLmJ5dGVzKCkpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgU0hBMTo6RGlnZXN0IGF0dHJzSGFzaDsKICAgICAgICAgICAgIGF0dHJzU0hBMS5jb21w
dXRlSGFzaChhdHRyc0hhc2gpOwotICAgICAgICAgICAgZGlnZXN0LT5hdHRyc1NIQTEgPSBiYXNl
NjRFbmNvZGVUb1N0cmluZyhhdHRyc0hhc2guZGF0YSgpLCAxMCk7Ci0gICAgICAgICAgICBhZGRT
dHJpbmdUb1NIQTEoc2hhMSwgZGlnZXN0LT5hdHRyc1NIQTEpOworICAgICAgICAgICAgZGlnZXN0
LT5hdHRyc1NIQTEgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhhdHRyc0hhc2gpOworICAgICAgICAg
ICAgc2hhMS5hZGRCeXRlcyhkaWdlc3QtPmF0dHJzU0hBMS51dGY4KCkuYnl0ZXMoKSk7CiAgICAg
ICAgIH0KICAgICB9CiAKICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAgICBzaGExLmNvbXB1dGVI
YXNoKGhhc2gpOwotICAgIGRpZ2VzdC0+c2hhMSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGhhc2gu
ZGF0YSgpLCAxMCk7CisgICAgZGlnZXN0LT5zaGExID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaGFz
aCk7CiAgICAgaWYgKHVudXNlZE5vZGVzTWFwKQogICAgICAgICB1bnVzZWROb2Rlc01hcC0+YWRk
KGRpZ2VzdC0+c2hhMSwgZGlnZXN0LmdldCgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MDIsNyArNjAyLDcgQEAgYm9vbCBJbnNwZWN0b3JGcm9udGVu
ZEhvc3Q6OnNob3dDZXJ0aWZpYwogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEtPmRhdGEoKSwg
ZGF0YS0+c2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyAq
ZGF0YSB9OwogICAgIHN0ZDo6b3B0aW9uYWw8Q2VydGlmaWNhdGVJbmZvPiBjZXJ0aWZpY2F0ZUlu
Zm87CiAgICAgZGVjb2RlciA+PiBjZXJ0aWZpY2F0ZUluZm87CiAgICAgaWYgKCFjZXJ0aWZpY2F0
ZUluZm8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0Rh
dGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVz
b3VyY2VzRGF0YS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsx
MDYsNyBAQCB1bnNpZ25lZCBOZXR3b3JrUmVzb3VyY2VzRGF0YTo6UmVzb3VyY2VECiAgICAgICAg
IG1fY29udGVudCA9IG1fZGVjb2Rlci0+ZGVjb2RlQW5kRmx1c2gobV9kYXRhQnVmZmVyLT5kYXRh
KCksIGRhdGFMZW5ndGgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fYmFzZTY0RW5jb2RlZCA9
IHRydWU7Ci0gICAgICAgIG1fY29udGVudCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKG1fZGF0YUJ1
ZmZlci0+ZGF0YSgpLCBkYXRhTGVuZ3RoKTsKKyAgICAgICAgbV9jb250ZW50ID0gYmFzZTY0RW5j
b2RlVG9TdHJpbmcobV9kYXRhQnVmZmVyLT5ieXRlcygpKTsKICAgICB9CiAKICAgICBtX2RhdGFC
dWZmZXIgPSBudWxscHRyOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JET01BZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjk4LDcgKzE2OTgsNyBAQCBzdGF0aWMgU3RyaW5nIGNvbXB1dGVDb250
ZW50U2VjdXJpdHlQb2xpCiAgICAgYXV0byBjcnlwdG9EaWdlc3QgPSBQQUw6OkNyeXB0b0RpZ2Vz
dDo6Y3JlYXRlKFBBTDo6Q3J5cHRvRGlnZXN0OjpBbGdvcml0aG06OlNIQV8yNTYpOwogICAgIGNy
eXB0b0RpZ2VzdC0+YWRkQnl0ZXMoY29udGVudC5kYXRhKCksIGNvbnRlbnQuc2l6ZSgpKTsKICAg
ICBhdXRvIGRpZ2VzdCA9IGNyeXB0b0RpZ2VzdC0+Y29tcHV0ZUhhc2goKTsKLSAgICByZXR1cm4g
bWFrZVN0cmluZygic2hhMjU2LSIsIGJhc2U2NEVuY29kZWQoZGlnZXN0LmRhdGEoKSwgZGlnZXN0
LnNpemUoKSkpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCJzaGEyNTYtIiwgYmFzZTY0RW5jb2Rl
ZChkaWdlc3QpKTsKIH0KIAogUmVmPFByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFn
ZW50OjpidWlsZE9iamVjdEZvck5vZGUoTm9kZSogbm9kZSwgaW50IGRlcHRoKQpJbmRleDogU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0
d29ya0FnZW50LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzUsNyArMTc1LDcgQEAgUmVmPFByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRGcmFtZT4gYgog
ICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0RnJhbWU6OmNyZWF0ZSgpCiAg
ICAgICAgIC5zZXRPcGNvZGUoZnJhbWUub3BDb2RlKQogICAgICAgICAuc2V0TWFzayhmcmFtZS5t
YXNrZWQpCi0gICAgICAgIC5zZXRQYXlsb2FkRGF0YShmcmFtZS5vcENvZGUgPT0gMSA/IFN0cmlu
Zzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soZnJhbWUucGF5bG9hZCwgZnJhbWUucGF5bG9h
ZExlbmd0aCkgOiBiYXNlNjRFbmNvZGVUb1N0cmluZyhmcmFtZS5wYXlsb2FkLCBmcmFtZS5wYXls
b2FkTGVuZ3RoKSkKKyAgICAgICAgLnNldFBheWxvYWREYXRhKGZyYW1lLm9wQ29kZSA9PSAxID8g
U3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhmcmFtZS5wYXlsb2FkLCBmcmFtZS5w
YXlsb2FkTGVuZ3RoKSA6IGJhc2U2NEVuY29kZVRvU3RyaW5nKFNwYW4geyBmcmFtZS5wYXlsb2Fk
LCBmcmFtZS5wYXlsb2FkTGVuZ3RoIH0pKQogICAgICAgICAuc2V0UGF5bG9hZExlbmd0aChmcmFt
ZS5wYXlsb2FkTGVuZ3RoKQogICAgICAgICAucmVsZWFzZSgpOwogfQpAQCAtNTg5LDcgKzU4OSw3
IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlRGEKICAgICAgICAgLy8g
T2Z0ZW4gdGhlIGRhdGEgaXMgdGV4dCBhbmQgd2Ugd291bGQgaGF2ZSBhIGRlY29kZXIsIGJ1dCBm
b3Igbm9uLXRleHQgd2Ugd29uJ3QgaGF2ZSBhIGRlY29kZXIuCiAgICAgICAgIC8vIFN5bmMgWEhS
cyBtYXkgbm90IGhhdmUgYSBjYWNoZWQgcmVzb3VyY2UsIHdoaWxlIG5vbi1zeW5jIFhIUnMgdXN1
YWxseSB0cmFuc2ZlciBkYXRhIG92ZXIgb24gY29tcGxldGlvbi4KICAgICAgICAgaWYgKG1fbG9h
ZGluZ1hIUlN5bmNocm9ub3VzbHkgJiYgcmVzb3VyY2VEYXRhICYmICFyZXNvdXJjZURhdGEtPmhh
c0J1ZmZlcmVkRGF0YSgpICYmICFyZXNvdXJjZURhdGEtPmNhY2hlZFJlc291cmNlKCkpCi0gICAg
ICAgICAgICBtX3Jlc291cmNlc0RhdGEtPnNldFJlc291cmNlQ29udGVudChyZXF1ZXN0SWQsIGJh
c2U2NEVuY29kZVRvU3RyaW5nKGRhdGEsIGRhdGFMZW5ndGgpLCB0cnVlKTsKKyAgICAgICAgICAg
IG1fcmVzb3VyY2VzRGF0YS0+c2V0UmVzb3VyY2VDb250ZW50KHJlcXVlc3RJZCwgYmFzZTY0RW5j
b2RlVG9TdHJpbmcoU3BhbiB7IGRhdGEsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihkYXRhTGVuZ3Ro
KSB9KSwgdHJ1ZSk7CiAgICAgfQogCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRhdGFSZWNl
aXZlZChyZXF1ZXN0SWQsIHRpbWVzdGFtcCgpLCBkYXRhTGVuZ3RoLCBlbmNvZGVkRGF0YUxlbmd0
aCk7CkBAIC0xMDA1LDcgKzEwMDUsNyBAQCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+
IEluc3BlY3RvCiAKICAgICBXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyIGVuY29kZXI7CiAgICAg
V1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPjo6ZW5jb2Rl
KGVuY29kZXIsIGNlcnRpZmljYXRlLnZhbHVlKCkpOwotICAgIHJldHVybiBiYXNlNjRFbmNvZGVU
b1N0cmluZyhlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgcmV0
dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGVuY29kZXIuYnVmZmVyKCkpOwogfQogCiBXZWJTb2Nr
ZXQqIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6d2ViU29ja2V0Rm9yUmVxdWVzdElkKGNvbnN0IFBy
b3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCkKQEAgLTE0MTAsNyArMTQxMCw3
IEBAIGJvb2wgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpjYWNoZWRSZXNvdXIKICAgICAgICAgfQog
CiAgICAgICAgICpiYXNlNjRFbmNvZGVkID0gdHJ1ZTsKLSAgICAgICAgKnJlc3VsdCA9IGJhc2U2
NEVuY29kZVRvU3RyaW5nKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7CisgICAgICAg
ICpyZXN1bHQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhidWZmZXItPmJ5dGVzKCkpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2Vu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDcgQEAKIAogI2lmIEVOQUJMRShXRUJf
QVJDSElWRSkgJiYgVVNFKENGKQogI2luY2x1ZGUgIkxlZ2FjeVdlYkFyY2hpdmUuaCIKKyNpbmNs
dWRlIDx3dGYvY2YvU3BhbkNGLmg+CiAjZW5kaWYKIAogCkBAIC0xMTMsNyArMTE0LDcgQEAgYm9v
bCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNoYXJlZEJ1ZmZlckNvbgogYm9vbCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OmRhdGFDb250ZW50KGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIHNpemUsIGNv
bnN0IFN0cmluZyYgdGV4dEVuY29kaW5nTmFtZSwgYm9vbCB3aXRoQmFzZTY0RW5jb2RlLCBTdHJp
bmcqIHJlc3VsdCkKIHsKICAgICBpZiAod2l0aEJhc2U2NEVuY29kZSkgewotICAgICAgICAqcmVz
dWx0ID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoZGF0YSwgc2l6ZSk7CisgICAgICAgICpyZXN1bHQg
PSBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgZGF0YSwgc2l6ZSB9KTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCkBAIC0xMTAyLDcgKzExMDMsNyBAQCBQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxTdHJpbmc+IEluc3BlY3RvCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
Q291bGQgbm90IGNyZWF0ZSB3ZWIgYXJjaGl2ZSBmb3IgbWFpbiBmcmFtZSJfcyk7CiAKICAgICBS
ZXRhaW5QdHI8Q0ZEYXRhUmVmPiBidWZmZXIgPSBhcmNoaXZlLT5yYXdEYXRhUmVwcmVzZW50YXRp
b24oKTsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoQ0ZEYXRhR2V0Qnl0ZVB0cihi
dWZmZXIuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgoYnVmZmVyLmdldCgpKSk7CisgICAgcmV0dXJu
IGJhc2U2NEVuY29kZVRvU3RyaW5nKGFzQnl0ZXMoYnVmZmVyLmdldCgpKSk7CiB9CiAjZW5kaWYK
IApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNoaXZl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9N
SFRNTEFyY2hpdmUuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODEs
MTYgKzE4MSwxNCBAQCBSZWY8U2hhcmVkQnVmZmVyPiBNSFRNTEFyY2hpdmU6OmdlbmVyYXRlCiAg
ICAgICAgIG1odG1sRGF0YS0+YXBwZW5kKGFzY2lpU3RyaW5nLmRhdGEoKSwgYXNjaWlTdHJpbmcu
bGVuZ3RoKCkpOwogCiAgICAgICAgIC8vIEZJWE1FOiBpZGVhbGx5IHdlIHdvdWxkIGVuY29kZSB0
aGUgY29udGVudCBhcyBhIHN0cmVhbSB3aXRob3V0IGhhdmluZyB0byBmZXRjaCBpdCBhbGwuCi0g
ICAgICAgIGF1dG8qIGRhdGEgPSByZXNvdXJjZS5kYXRhLT5kYXRhKCk7Ci0gICAgICAgIHNpemVf
dCBkYXRhTGVuZ3RoID0gcmVzb3VyY2UuZGF0YS0+c2l6ZSgpOwogICAgICAgICBpZiAoIXN0cmNt
cChjb250ZW50RW5jb2RpbmcsIHF1b3RlZFByaW50YWJsZSkpIHsKLSAgICAgICAgICAgIGF1dG8g
ZW5jb2RlZERhdGEgPSBxdW90ZWRQcmludGFibGVFbmNvZGUoZGF0YSwgZGF0YUxlbmd0aCk7Cisg
ICAgICAgICAgICBhdXRvIGVuY29kZWREYXRhID0gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKHJlc291
cmNlLmRhdGEtPmJ5dGVzKCkpOwogICAgICAgICAgICAgbWh0bWxEYXRhLT5hcHBlbmQoZW5jb2Rl
ZERhdGEuZGF0YSgpLCBlbmNvZGVkRGF0YS5zaXplKCkpOwogICAgICAgICAgICAgbWh0bWxEYXRh
LT5hcHBlbmQoIlxyXG4iLCAyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VS
VCghc3RyY21wKGNvbnRlbnRFbmNvZGluZywgYmFzZTY0KSk7CiAgICAgICAgICAgICAvLyBXZSBh
cmUgbm90IHNwZWNpZnlpbmcgaW5zZXJ0TEZzID0gdHJ1ZSBiZWxvdyBhcyBpdCB3b3VsZCBjdXQg
dGhlIGxpbmVzIHdpdGggTEZzIGFuZCBNSFRNTCByZXF1aXJlcyBDUkxGcy4KLSAgICAgICAgICAg
IGF1dG8gZW5jb2RlZERhdGEgPSBiYXNlNjRFbmNvZGVUb1ZlY3RvcihkYXRhLCBkYXRhTGVuZ3Ro
KTsKKyAgICAgICAgICAgIGF1dG8gZW5jb2RlZERhdGEgPSBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihy
ZXNvdXJjZS5kYXRhLT5ieXRlcygpKTsKICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBtYXhpbXVt
TGluZUxlbmd0aCA9IDc2OwogICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gMDsKICAgICAgICAg
ICAgIHNpemVfdCBlbmNvZGVkRGF0YUxlbmd0aCA9IGVuY29kZWREYXRhLnNpemUoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MUGFyc2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTFBhcnNl
ci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZl
L21odG1sL01IVE1MUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDcgKzE5NSw3IEBA
IFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IE1IVE1MUGFyc2VyOjpwYXIKICAgICBWZWN0b3I8dWlu
dDhfdD4gZGF0YTsKICAgICBzd2l0Y2ggKG1pbWVIZWFkZXIuY29udGVudFRyYW5zZmVyRW5jb2Rp
bmcoKSkgewogICAgIGNhc2UgTUlNRUhlYWRlcjo6QmFzZTY0OiB7Ci0gICAgICAgIGF1dG8gZGVj
b2RlZERhdGEgPSBiYXNlNjREZWNvZGUoY29udGVudC0+ZGF0YSgpLCBjb250ZW50LT5zaXplKCkp
OworICAgICAgICBhdXRvIGRlY29kZWREYXRhID0gYmFzZTY0RGVjb2RlKGNvbnRlbnQtPmJ5dGVz
KCkpOwogICAgICAgICBpZiAoIWRlY29kZWREYXRhKSB7CiAgICAgICAgICAgICBMT0dfRVJST1Io
IkludmFsaWQgYmFzZTY0IGNvbnRlbnQgZm9yIE1IVE1MIHBhcnQuIik7CiAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKQEAgLTIwNCw3ICsyMDQsNyBAQCBSZWZQdHI8QXJjaGl2ZVJlc291cmNl
PiBNSFRNTFBhcnNlcjo6cGFyCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIE1JTUVI
ZWFkZXI6OlF1b3RlZFByaW50YWJsZToKLSAgICAgICAgZGF0YSA9IHF1b3RlZFByaW50YWJsZURl
Y29kZShjb250ZW50LT5kYXRhKCksIGNvbnRlbnQtPnNpemUoKSk7CisgICAgICAgIGRhdGEgPSBx
dW90ZWRQcmludGFibGVEZWNvZGUoY29udGVudC0+Ynl0ZXMoKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgTUlNRUhlYWRlcjo6U2V2ZW5CaXQ6CiAgICAgY2FzZSBNSU1FSGVhZGVyOjpCaW5h
cnk6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkxvYWRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIEljb25Mb2FkZXI6Om5v
dGlmeUZpbmlzaGVkKENhY2hlZFJlCiAgICAgICAgIGRhdGEgPSBudWxscHRyOwogCiAgICAgY29u
c3RleHByIHVpbnQ4X3QgcGRmTWFnaWNOdW1iZXJbXSA9IHsgJyUnLCAnUCcsICdEJywgJ0YnIH07
Ci0gICAgaWYgKGRhdGEgJiYgZGF0YS0+c3RhcnRzV2l0aChTcGFuIHsgcGRmTWFnaWNOdW1iZXIs
IHN0ZDo6c2l6ZShwZGZNYWdpY051bWJlcikgfSkpIHsKKyAgICBpZiAoZGF0YSAmJiBkYXRhLT5z
dGFydHNXaXRoKHBkZk1hZ2ljTnVtYmVyKSkgewogICAgICAgICBMT0coSWNvbkRhdGFiYXNlLCAi
SWNvbkxvYWRlcjo6ZmluaXNoTG9hZGluZygpIC0gSWdub3JpbmcgaWNvbiBhdCAlcyBiZWNhdXNl
IGl0IGFwcGVhcnMgdG8gYmUgYSBQREYiLCBtX3Jlc291cmNlLT51cmwoKS5zdHJpbmcoKS5hc2Np
aSgpLmRhdGEoKSk7CiAgICAgICAgIGRhdGEgPSBudWxscHRyOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0Jhc2U2NFV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzgsNyArMzgsNyBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IEJhc2U2NFV0aWxpdGllczo6YnRvCiAg
ICAgaWYgKCFzdHJpbmdUb0VuY29kZS5pc0FsbExhdGluMSgpKQogICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZENoYXJhY3RlckVycm9yIH07CiAKLSAgICByZXR1cm4gYmFzZTY0RW5j
b2RlVG9TdHJpbmcoc3RyaW5nVG9FbmNvZGUubGF0aW4xKCkpOworICAgIHJldHVybiBiYXNlNjRF
bmNvZGVUb1N0cmluZyhzdHJpbmdUb0VuY29kZS5sYXRpbjEoKS5ieXRlcygpKTsKIH0KIAogRXhj
ZXB0aW9uT3I8U3RyaW5nPiBCYXNlNjRVdGlsaXRpZXM6OmF0b2IoY29uc3QgU3RyaW5nJiBlbmNv
ZGVkU3RyaW5nKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1c3Rv
bURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9h
cmRDdXN0b21EYXRhLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4
OSw3IEBAIFJlZjxTaGFyZWRCdWZmZXI+IFBhc3RlYm9hcmRDdXN0b21EYXRhOjoKICAgICBlbmNv
ZGVyIDw8IG1fb3JpZ2luOwogICAgIGVuY29kZXIgPDwgc2FtZU9yaWdpbkN1c3RvbVN0cmluZ0Rh
dGEoKTsKICAgICBlbmNvZGVyIDw8IG9yZGVyZWRUeXBlcygpOwotICAgIHJldHVybiBTaGFyZWRC
dWZmZXI6OmNyZWF0ZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7Cisg
ICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCkpOwogfQogCiBQ
YXN0ZWJvYXJkQ3VzdG9tRGF0YSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6ZnJvbVBlcnNpc3RlbmNl
RGVjb2RlcihXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyJiYgZGVjb2RlcikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsMjAgKzM0LDE5IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgog
I2luY2x1ZGUgPHd0Zi91bmljb2RlL1VURjhDb252ZXJzaW9uLmg+CiAKLW5hbWVzcGFjZSBXZWJD
b3JlIHsKKyNpZiBVU0UoQ0YpCisjaW5jbHVkZSA8d3RmL2NmL1NwYW5DRi5oPgorI2VuZGlmCiAK
LVNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBz
aXplKQotewotICAgIGFwcGVuZChkYXRhLCBzaXplKTsKLX0KK25hbWVzcGFjZSBXZWJDb3JlIHsK
IAotU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNp
emUpCitTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0
YSkKIHsKLSAgICBhcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSks
IHNpemUpOworICAgIGFwcGVuZChkYXRhKTsKIH0KIAogU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZm
ZXIoRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmJiBmaWxlRGF0YSkKLSAgICA6IG1fc2l6ZShm
aWxlRGF0YS5zaXplKCkpCisgICAgOiBtX3NpemUoZmlsZURhdGEuZGF0YSgpLnNpemUoKSkKIHsK
ICAgICBtX3NlZ21lbnRzLmFwcGVuZCh7MCwgRGF0YVNlZ21lbnQ6OmNyZWF0ZShXVEZNb3ZlKGZp
bGVEYXRhKSl9KTsKIH0KQEAgLTE4OCwxMyArMTg3LDEzIEBAIHZvaWQgU2hhcmVkQnVmZmVyOjph
cHBlbmQoY29uc3QgU2hhcmVkQnUKICAgICBBU1NFUlQoaW50ZXJuYWxseUNvbnNpc3RlbnQoKSk7
CiB9CiAKLXZvaWQgU2hhcmVkQnVmZmVyOjphcHBlbmQoY29uc3QgdWludDhfdCogZGF0YSwgc2l6
ZV90IGxlbmd0aCkKK3ZvaWQgU2hhcmVkQnVmZmVyOjphcHBlbmQoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGRhdGEpCiB7CiAgICAgQVNTRVJUKCFtX2hhc0JlZW5Db21iaW5lZEludG9PbmVTZWdtZW50
KTsKICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yOwotICAgIHZlY3Rvci5hcHBlbmQoZGF0YSwg
bGVuZ3RoKTsKLSAgICBtX3NlZ21lbnRzLmFwcGVuZCh7bV9zaXplLCBEYXRhU2VnbWVudDo6Y3Jl
YXRlKFdURk1vdmUodmVjdG9yKSl9KTsKLSAgICBtX3NpemUgKz0gbGVuZ3RoOworICAgIHZlY3Rv
ci5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5kYXRhKCkpLCBk
YXRhLnNpemUoKSk7CisgICAgbV9zZWdtZW50cy5hcHBlbmQoeyBtX3NpemUsIERhdGFTZWdtZW50
OjpjcmVhdGUoV1RGTW92ZSh2ZWN0b3IpKSB9KTsKKyAgICBtX3NpemUgKz0gZGF0YS5zaXplKCk7
CiAgICAgQVNTRVJUKGludGVybmFsbHlDb25zaXN0ZW50KCkpOwogfQogCkBAIC0yMzIsNyArMjMx
LDcgQEAgdm9pZCBTaGFyZWRCdWZmZXI6OmZvckVhY2hTZWdtZW50KGNvbnN0IAogICAgICAgICBh
cHBseShTcGFuIHsgc2VnbWVudC5zZWdtZW50LT5kYXRhKCksIHNlZ21lbnQuc2VnbWVudC0+c2l6
ZSgpIH0pOwogfQogCi1ib29sIFNoYXJlZEJ1ZmZlcjo6c3RhcnRzV2l0aChjb25zdCBTcGFuPGNv
bnN0IHVpbnQ4X3Q+JiBwcmVmaXgpIGNvbnN0Citib29sIFNoYXJlZEJ1ZmZlcjo6c3RhcnRzV2l0
aChjb25zdCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4mIHByZWZpeCkgY29uc3QKIHsKICAgICBpZiAo
cHJlZml4LmVtcHR5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjQwLDcgKzIzOSw3IEBA
IGJvb2wgU2hhcmVkQnVmZmVyOjpzdGFydHNXaXRoKGNvbnN0IFNwYW4KICAgICBpZiAoc2l6ZSgp
IDwgcHJlZml4LnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29uc3QgdWlu
dDhfdCogcHJlZml4UHRyID0gcHJlZml4LmRhdGEoKTsKKyAgICBhdXRvKiBwcmVmaXhQdHIgPSBw
cmVmaXguZGF0YSgpOwogICAgIHNpemVfdCByZW1haW5pbmcgPSBwcmVmaXguc2l6ZSgpOwogICAg
IGZvciAoYXV0byYgc2VnbWVudCA6IG1fc2VnbWVudHMpIHsKICAgICAgICAgc2l6ZV90IGFtb3Vu
dFRvQ29tcGFyZVRoaXNUaW1lID0gc3RkOjptaW4ocmVtYWluaW5nLCBzZWdtZW50LnNlZ21lbnQt
PnNpemUoKSk7CkBAIC0zMDEsOSArMzAwLDM4IEBAIGNvbnN0IHVpbnQ4X3QqIFNoYXJlZEJ1ZmZl
cjo6RGF0YVNlZ21lbnQKICNpZiBVU0UoR1NUUkVBTUVSKQogICAgICAgICBbXShjb25zdCBSZWZQ
dHI8R3N0TWFwcGVkT3duZWRCdWZmZXI+JiBkYXRhKSB7IHJldHVybiBkYXRhLT5kYXRhKCk7IH0s
CiAjZW5kaWYKLSAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRh
dGEpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmRhdGEoKSk7IH0K
KyAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuZGF0YSgpLmRhdGEoKSk7
IH0KKyAgICApOworICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIG1faW1tdXRhYmxlRGF0
YSk7Cit9CisKK1NwYW48Y29uc3Qgc3RkOjpieXRlPiBTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50
OjpieXRlcygpIGNvbnN0Cit7CisgICAgYXV0byB2aXNpdG9yID0gV1RGOjptYWtlVmlzaXRvcigK
KyAgICAgICAgW10oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKSB7CisgICAgICAgICAgICBy
ZXR1cm4gYXNCeXRlcyhTcGFuIHsgZGF0YSB9KTsKKyAgICAgICAgfSwKKyNpZiBVU0UoQ0YpCisg
ICAgICAgIFtdKGNvbnN0IFJldGFpblB0cjxDRkRhdGFSZWY+JiBkYXRhKSB7CisgICAgICAgICAg
ICByZXR1cm4gYXNCeXRlcyhkYXRhLmdldCgpKTsKKyAgICAgICAgfSwKKyNlbmRpZgorI2lmIFVT
RShHTElCKQorICAgICAgICBbXShjb25zdCBHUmVmUHRyPEdCeXRlcz4mIGRhdGEpIHsKKyAgICAg
ICAgICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4o
Z19ieXRlc19nZXRfZGF0YShkYXRhLmdldCgpLCBudWxscHRyKSksIGdfYnl0ZXNfZ2V0X3NpemUo
ZGF0YS5nZXQoKSkgfSk7CisgICAgICAgIH0sCisjZW5kaWYKKyNpZiBVU0UoR1NUUkVBTUVSKQor
ICAgICAgICBbXShjb25zdCBSZWZQdHI8R3N0TWFwcGVkT3duZWRCdWZmZXI+JiBkYXRhKSB7Cisg
ICAgICAgICAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXpl
KCkgfSk7CisgICAgICAgIH0sCisjZW5kaWYKKyAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6
TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBkYXRhLmRhdGEoKTsK
KyAgICAgICAgfQogICAgICk7CiAgICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwgbV9pbW11
dGFibGVEYXRhKTsKKwogfQogCiBib29sIFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmNvbnRh
aW5zTWFwcGVkRmlsZURhdGEoKSBjb25zdApAQCAtMzE5LDcgKzM0Nyw3IEBAIHZvaWQgU2hhcmVk
QnVmZmVyOjpoaW50TWVtb3J5Tm90TmVlZGVkU28KIAogV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2Rl
ciBTaGFyZWRCdWZmZXI6OmRlY29kZXIoKSBjb25zdAogewotICAgIHJldHVybiB7IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEoKSksIHNpemUoKSB9OworICAgIHJldHVybiB7
IGJ5dGVzKCkgfTsKIH0KIAogYm9vbCBTaGFyZWRCdWZmZXI6Om9wZXJhdG9yPT0oY29uc3QgU2hh
cmVkQnVmZmVyJiBvdGhlcikgY29uc3QKQEAgLTM4NCw3ICs0MTIsNyBAQCBzaXplX3QgU2hhcmVk
QnVmZmVyOjpEYXRhU2VnbWVudDo6c2l6ZSgpCiAjaWYgVVNFKEdTVFJFQU1FUikKICAgICAgICAg
W10oY29uc3QgUmVmUHRyPEdzdE1hcHBlZE93bmVkQnVmZmVyPiYgZGF0YSkgeyByZXR1cm4gZGF0
YS0+c2l6ZSgpOyB9LAogI2VuZGlmCi0gICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBl
ZEZpbGVEYXRhJiBkYXRhKSB7IHJldHVybiBkYXRhLnNpemUoKTsgfQorICAgICAgICBbXShjb25z
dCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeyByZXR1cm4gZGF0YS5kYXRhKCku
c2l6ZSgpOyB9CiAgICAgKTsKICAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBtX2ltbXV0
YWJsZURhdGEpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw4ICs2NywxMiBAQCBjbGFzcyBTaGFyZWRCdWZmZXJE
YXRhVmlldzsKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIFNoYXJlZEJ1ZmZlciA6IHB1YmxpYyBSZWZD
b3VudGVkPFNoYXJlZEJ1ZmZlcj4gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVm
ZmVyPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcik7IH0KLSAg
ICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNp
emVfdCBzaXplKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihkYXRhLCBzaXpl
KSk7IH0KLSAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IGNoYXIqIGRh
dGEsIHNpemVfdCBzaXplKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihkYXRh
LCBzaXplKSk7IH0KKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKFNwYW48Y29u
c3Qgc3RkOjpieXRlPiBkYXRhKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihk
YXRhKSk7IH0KKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKFNwYW48Y29uc3Qg
dWludDhfdD4gZGF0YSkgeyByZXR1cm4gY3JlYXRlKGFzQnl0ZXMoZGF0YSkpOyB9CisgICAgc3Rh
dGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShTcGFuPGNvbnN0IGNoYXI+IGRhdGEpIHsgcmV0
dXJuIGNyZWF0ZShhc0J5dGVzKGRhdGEpKTsgfQorICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVy
PiBjcmVhdGUoY29uc3Qgc3RkOjpieXRlKiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gY3Jl
YXRlKFNwYW4geyBkYXRhLCBzaXplIH0pOyB9CisgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+
IGNyZWF0ZShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gY3JlYXRl
KFNwYW4geyBkYXRhLCBzaXplIH0pOyB9CisgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNy
ZWF0ZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gY3JlYXRlKFNwYW4g
eyBkYXRhLCBzaXplIH0pOyB9CiAgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShG
aWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIG1hcHBlZEZpbGVEYXRhKSB7IHJldHVybiBhZG9w
dFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihXVEZNb3ZlKG1hcHBlZEZpbGVEYXRhKSkpOyB9CiAKICAg
ICBlbnVtIGNsYXNzIE1heVVzZUZpbGVNYXBwaW5nIDogYm9vbCB7IE5vLCBZZXMgfTsKQEAgLTEw
MSw2ICsxMDUsOCBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IEF1ZGl0IHRoZSBjYWxsIHNpdGVz
IG9mIHRoaXMgZnVuY3Rpb24gYW5kIHJlcGxhY2UgdGhlbSB3aXRoIGl0ZXJhdGlvbiBpZiBwb3Nz
aWJsZS4KICAgICBjb25zdCB1aW50OF90KiBkYXRhKCkgY29uc3Q7CiAgICAgY29uc3QgY2hhciog
ZGF0YUFzQ2hhclB0cigpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KGRhdGEoKSk7IH0KKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25zdCB7
IHJldHVybiBhc0J5dGVzKFNwYW4geyBkYXRhKCksIHNpemUoKSB9KTsgfQorCiAgICAgVmVjdG9y
PHVpbnQ4X3Q+IGNvcHlEYXRhKCkgeyByZXR1cm4geyBkYXRhKCksIHNpemUoKSB9OyB9CiAKICAg
ICAvLyBDb21iaW5lcyBhbGwgdGhlIHNlZ21lbnRzIGludG8gYSBWZWN0b3IgYW5kIHJldHVybnMg
dGhhdCB2ZWN0b3IgYWZ0ZXIgY2xlYXJpbmcgdGhlIFNoYXJlZEJ1ZmZlci4KQEAgLTExNSw4ICsx
MjEsMTIgQEAgcHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXpl
KCk7IH0KIAogICAgIHZvaWQgYXBwZW5kKGNvbnN0IFNoYXJlZEJ1ZmZlciYpOwotICAgIHZvaWQg
YXBwZW5kKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwotICAgIHZvaWQgYXBwZW5kKGNvbnN0IGNo
YXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpIHsgYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KGRhdGEpLCBsZW5ndGgpOyB9CisgICAgdm9pZCBhcHBlbmQoU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+KTsKKyAgICB2b2lkIGFwcGVuZChTcGFuPGNvbnN0IHVpbnQ4X3Q+IGRhdGEpIHsg
YXBwZW5kKGFzQnl0ZXMoZGF0YSkpOyB9CisgICAgdm9pZCBhcHBlbmQoU3Bhbjxjb25zdCBjaGFy
PiBkYXRhKSB7IGFwcGVuZChhc0J5dGVzKGRhdGEpKTsgfQorICAgIHZvaWQgYXBwZW5kKGNvbnN0
IHN0ZDo6Ynl0ZSogZGF0YSwgc2l6ZV90IGxlbmd0aCkgeyBhcHBlbmQoU3BhbiB7IGRhdGEsIGxl
bmd0aCB9KTsgfQorICAgIHZvaWQgYXBwZW5kKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBs
ZW5ndGgpIHsgYXBwZW5kKFNwYW4geyBkYXRhLCBsZW5ndGggfSk7IH0KKyAgICB2b2lkIGFwcGVu
ZChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKSB7IGFwcGVuZChTcGFuIHsgZGF0YSwg
bGVuZ3RoIH0pOyB9CiAgICAgdm9pZCBhcHBlbmQoVmVjdG9yPHVpbnQ4X3Q+JiYpOwogCiAgICAg
dm9pZCBjbGVhcigpOwpAQCAtMTMxLDYgKzE0MSw4IEBAIHB1YmxpYzoKICAgICAgICAgV0VCQ09S
RV9FWFBPUlQgY29uc3QgdWludDhfdCogZGF0YSgpIGNvbnN0OwogICAgICAgICBXRUJDT1JFX0VY
UE9SVCBzaXplX3Qgc2l6ZSgpIGNvbnN0OwogCisgICAgICAgIFdFQkNPUkVfRVhQT1JUIFNwYW48
Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAgICAgICAgIHN0YXRpYyBSZWY8RGF0
YVNlZ21lbnQ+IGNyZWF0ZShWZWN0b3I8dWludDhfdD4mJiBkYXRhKQogICAgICAgICB7CiAgICAg
ICAgICAgICBkYXRhLnNocmlua1RvRml0KCk7CkBAIC0xODcsNyArMTk5LDkgQEAgcHVibGljOgog
ICAgIH07CiAKICAgICB2b2lkIGZvckVhY2hTZWdtZW50KGNvbnN0IEZ1bmN0aW9uPHZvaWQoY29u
c3QgU3Bhbjxjb25zdCB1aW50OF90PiYpPiYpIGNvbnN0OwotICAgIGJvb2wgc3RhcnRzV2l0aChj
b25zdCBTcGFuPGNvbnN0IHVpbnQ4X3Q+JiBwcmVmaXgpIGNvbnN0OworCisgICAgYm9vbCBzdGFy
dHNXaXRoKGNvbnN0IFNwYW48Y29uc3Qgc3RkOjpieXRlPiYgcHJlZml4KSBjb25zdDsKKyAgICBi
b29sIHN0YXJ0c1dpdGgoY29uc3QgU3Bhbjxjb25zdCB1aW50OF90PiYgcHJlZml4KSBjb25zdCB7
IHJldHVybiBzdGFydHNXaXRoKGFzQnl0ZXMocHJlZml4KSk7IH0KIAogICAgIHN0cnVjdCBEYXRh
U2VnbWVudFZlY3RvckVudHJ5IHsKICAgICAgICAgc2l6ZV90IGJlZ2luUG9zaXRpb247CkBAIC0y
MTIsOCArMjI2LDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFNoYXJlZEJ1
ZmZlcigpID0gZGVmYXVsdDsKLSAgICBleHBsaWNpdCBTaGFyZWRCdWZmZXIoY29uc3QgdWludDhf
dCosIHNpemVfdCk7Ci0gICAgZXhwbGljaXQgU2hhcmVkQnVmZmVyKGNvbnN0IGNoYXIqLCBzaXpl
X3QpOworICAgIGV4cGxpY2l0IFNoYXJlZEJ1ZmZlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwog
ICAgIGV4cGxpY2l0IFNoYXJlZEJ1ZmZlcihWZWN0b3I8dWludDhfdD4mJik7CiAgICAgZXhwbGlj
aXQgU2hhcmVkQnVmZmVyKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYpOwogI2lmIFVTRShD
RikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0NBQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL2NvY29hL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgPENvcmVBdWRpby9Db3JlQXVkaW9UeXBl
cy5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
ODAsMTMgKzgxLDEzIEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAog
ewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDhfdCo+KCZtX3N0cmVhbURlc2NyaXB0aW9uKSwgc2l6ZW9mKG1fc3RyZWFtRGVzY3Jp
cHRpb24pLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJm1f
c3RyZWFtRGVzY3JpcHRpb24sIDEgfSwgMSk7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
CiBib29sIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7Ci0gICAgcmV0dXJuIGRl
Y29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZk
ZXNjcmlwdGlvbi5tX3N0cmVhbURlc2NyaXB0aW9uKSwgc2l6ZW9mKGRlc2NyaXB0aW9uLm1fc3Ry
ZWFtRGVzY3JpcHRpb24pLCAxKTsKKyAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0
aERhdGEoU3BhbiB7ICZkZXNjcmlwdGlvbi5tX3N0cmVhbURlc2NyaXB0aW9uLCAxIH0sIDEpOwog
fQogCiBpbmxpbmUgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uIHRvQ0FBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uKGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJL
ZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1l
ZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTgsMTUgKzE5OCwxMyBAQCBzdGF0aWMgUmVmPFNoYXJlZEJ1
ZmZlcj4gZXh0cmFjdEtleWlkc0ZyCiB7CiAgICAgUmVmPFNoYXJlZEJ1ZmZlcj4ga2V5SWRzID0g
U2hhcmVkQnVmZmVyOjpjcmVhdGUoKTsKIAotICAgIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWdu
ZWQ+IGtleUlkc01hcCA9IGV4dHJhY3RLZXlpZHNMb2NhdGlvbkZyb21DZW5jSW5pdERhdGEoaW5p
dERhdGEpOwotICAgIHVuc2lnbmVkIGtleUlkQ291bnQgPSBrZXlJZHNNYXAuZmlyc3Q7Ci0gICAg
dW5zaWduZWQgaW5kZXggPSBrZXlJZHNNYXAuc2Vjb25kOworICAgIGF1dG8gW2tleUlkQ291bnQs
IGluZGV4XSA9IGV4dHJhY3RLZXlpZHNMb2NhdGlvbkZyb21DZW5jSW5pdERhdGEoaW5pdERhdGEp
OwogCiAgICAgLy8gQ2hlY2sgaWYgaW5pdERhdGEgaXMgYSB2YWxpZCBDRU5DIGluaXREYXRhLgog
ICAgIGlmICgha2V5SWRDb3VudCB8fCAhaW5kZXgpCiAgICAgICAgIHJldHVybiBrZXlJZHM7CiAK
LSAgICBhdXRvKiBkYXRhID0gaW5pdERhdGEuZGF0YSgpOworICAgIGF1dG8gZGF0YSA9IGluaXRE
YXRhLmJ5dGVzKCk7CiAKICAgICBhdXRvIG9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgYXV0byBrZXlJZHNBcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKQEAgLTIxOCw3
ICsyMTYsNyBAQCBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gZXh0cmFjdEtleWlkc0ZyCiAgICAg
Ly8gImtpZHMiCiAgICAgLy8gQW4gYXJyYXkgb2Yga2V5IElEcy4gRWFjaCBlbGVtZW50IG9mIHRo
ZSBhcnJheSBpcyB0aGUgYmFzZTY0dXJsIGVuY29kaW5nIG9mIHRoZSBvY3RldCBzZXF1ZW5jZSBj
b250YWluaW5nIHRoZSBrZXkgSUQgdmFsdWUuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGtleUlkQ291bnQ7IGkrKykgewotICAgICAgICBrZXlJZHNBcnJheS0+cHVzaFN0cmluZyhiYXNl
NjRVUkxFbmNvZGVUb1N0cmluZygmZGF0YVtpbmRleF0sIENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5
dGVzKSk7CisgICAgICAgIGtleUlkc0FycmF5LT5wdXNoU3RyaW5nKGJhc2U2NFVSTEVuY29kZVRv
U3RyaW5nKGRhdGEuc3Vic3BhbihpbmRleCwgQ2xlYXJLZXk6OktleUlEU2l6ZUluQnl0ZXMpKSk7
CiAgICAgICAgIGluZGV4ICs9IENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVzOwogICAgIH0KIApA
QCAtMjQ1LDcgKzI0Myw3IEBAIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBleHRyYWN0S2V5SWRG
cm8KICAgICAvLyBUaGUgZm9ybWF0IGlzIGEgSlNPTiBvYmplY3QgY29udGFpbmluZyB0aGUgZm9s
bG93aW5nIG1lbWJlcnM6CiAgICAgLy8gImtpZHMiCiAgICAgLy8gQW4gYXJyYXkgb2Yga2V5IElE
cy4gRWFjaCBlbGVtZW50IG9mIHRoZSBhcnJheSBpcyB0aGUgYmFzZTY0dXJsIGVuY29kaW5nIG9m
IHRoZSBvY3RldCBzZXF1ZW5jZSBjb250YWluaW5nIHRoZSBrZXkgSUQgdmFsdWUuCi0gICAga2V5
SWRzQXJyYXktPnB1c2hTdHJpbmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoaW5pdERhdGEuZGF0
YSgpLCBpbml0RGF0YS5zaXplKCkpKTsKKyAgICBrZXlJZHNBcnJheS0+cHVzaFN0cmluZyhiYXNl
NjRVUkxFbmNvZGVUb1N0cmluZyhpbml0RGF0YS5ieXRlcygpKSk7CiAKICAgICBvYmplY3QtPnNl
dEFycmF5KCJraWRzIiwgV1RGTW92ZShrZXlJZHNBcnJheSkpOwogICAgIENTdHJpbmcganNvbkRh
dGEgPSBvYmplY3QtPnRvSlNPTlN0cmluZygpLnV0ZjgoKTsKQEAgLTU3OCw5ICs1NzYsOCBAQCB2
b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTCiAKICAgICAvLyBDb25zdHJ1
Y3QgdGhlIEtleVN0YXR1c1ZlY3RvciBvYmplY3QsIHJlcHJlc2VudGluZyByZWxlYXNlZCBrZXlz
LCBhbmQgdGhlIG1lc3NhZ2UgaW4gdGhlCiAgICAgLy8gJ2xpY2Vuc2UgcmVsZWFzZScgZm9ybWF0
LgotICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3IgPSBtX2tleVN0b3JlLmFsbEtl
eXNBcyhDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6UmVsZWFzZWQpOwotICAgIFJlZlB0
cjxTaGFyZWRCdWZmZXI+IG1lc3NhZ2U7Ci0gICAgeworICAgIGF1dG8ga2V5U3RhdHVzVmVjdG9y
ID0gbV9rZXlTdG9yZS5hbGxLZXlzQXMoQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlJl
bGVhc2VkKTsKKyAgICBhdXRvIG1lc3NhZ2UgPSBbJl17CiAgICAgICAgIC8vIENvbnN0cnVjdCBK
U09OIHRoYXQgcmVwcmVzZW50cyB0aGUgJ2xpY2Vuc2UgcmVsZWFzZScgZm9ybWF0LCBjcmVhdGlu
ZyBhICdraWRzJyBhcnJheQogICAgICAgICAvLyBvZiBiYXNlNjRVUkwtZW5jb2RlZCBrZXkgSURz
IGZvciBhbGwga2V5cyB0aGF0IHdlcmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2Vzc2lvbi4KICAg
ICAgICAgYXV0byByb290T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKQEAgLTU4OCw3
ICs1ODUsNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTCiAgICAg
ICAgICAgICBhdXRvIGFycmF5ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICAgICAg
Zm9yIChjb25zdCBhdXRvJiBrZXkgOiBtX2tleVN0b3JlKSB7CiAgICAgICAgICAgICAgICAgQVNT
RVJUKGtleS0+aWQoKS5zaXplKCkgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1h
eCgpKTsKLSAgICAgICAgICAgICAgICBhcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVU
b1N0cmluZyhrZXktPmlkKCkuZGF0YSgpLCBrZXktPmlkKCkuc2l6ZSgpKSk7CisgICAgICAgICAg
ICAgICAgYXJyYXktPnB1c2hTdHJpbmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoa2V5LT5pZCgp
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByb290T2JqZWN0LT5zZXRBcnJheSgia2lk
cyIsIFdURk1vdmUoYXJyYXkpKTsKICAgICAgICAgfQpAQCAtNTk2LDExICs1OTMsMTEgQEAgdm9p
ZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlUwogICAgICAgICAvLyBDb3B5IHRo
ZSBKU09OIGRhdGEgaW50byBhIFNoYXJlZEJ1ZmZlciBvYmplY3QuCiAgICAgICAgIFN0cmluZyBt
ZXNzYWdlU3RyaW5nID0gcm9vdE9iamVjdC0+dG9KU09OU3RyaW5nKCk7CiAgICAgICAgIENTdHJp
bmcgbWVzc2FnZUNTdHJpbmcgPSBtZXNzYWdlU3RyaW5nLnV0ZjgoKTsKLSAgICAgICAgbWVzc2Fn
ZSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKG1lc3NhZ2VDU3RyaW5nLmRhdGEoKSwgbWVzc2FnZUNT
dHJpbmcubGVuZ3RoKCkpOwotICAgIH0KKyAgICAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3Jl
YXRlKG1lc3NhZ2VDU3RyaW5nLmRhdGEoKSwgbWVzc2FnZUNTdHJpbmcubGVuZ3RoKCkpOworICAg
IH0oKTsKIAogICAgIG1fa2V5U3RvcmUucmVtb3ZlQWxsS2V5cygpOwotICAgIGRpc3BhdGNoQ2Fs
bGJhY2soV1RGTW92ZShrZXlTdGF0dXNWZWN0b3IpLCBSZWY8U2hhcmVkQnVmZmVyPigqbWVzc2Fn
ZSksIFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVkKTsKKyAgICBkaXNwYXRjaENhbGxiYWNrKFdURk1v
dmUoa2V5U3RhdHVzVmVjdG9yKSwgV1RGTW92ZShtZXNzYWdlKSwgU3VjY2Vzc1ZhbHVlOjpTdWNj
ZWVkZWQpOwogfQogCiB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpzdG9yZVJlY29y
ZE9mS2V5VXNhZ2UoY29uc3QgU3RyaW5nJikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dlbmVyaWMvS2V5ZWREZWNvZGVyR2VuZXJpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9LZXllZERlY29kZXJHZW5lcmljLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9LZXllZERlY29kZXJH
ZW5lcmljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBzdGF0aWMgc3RkOjpv
cHRpb25hbDxTdHJpbmc+IHJlYWRTdHJpbmcoCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygp
OwogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcihzaXplLnZhbHVlKCkpOwotICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLmRhdGEoKSwgc2l6ZS52YWx1ZSgp
KSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBidWZmZXIg
fSkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgYXV0byByZXN1bHQgPSBTdHJp
bmc6OmZyb21VVEY4KGJ1ZmZlci5kYXRhKCksIHNpemUudmFsdWUoKSk7CiAgICAgaWYgKHJlc3Vs
dC5pc051bGwoKSkKQEAgLTExNyw3ICsxMTcsNyBAQCBLZXllZERlY29kZXJHZW5lcmljOjpLZXll
ZERlY29kZXJHZW5lcmljCiAgICAgICAgICAgICBpZiAoIW9rKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcigqc2l6ZSk7Ci0gICAgICAg
ICAgICBvayA9IGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ1ZmZlci5kYXRhKCksICpz
aXplKTsKKyAgICAgICAgICAgIG9rID0gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3Bh
biB7IGJ1ZmZlciB9KTsKICAgICAgICAgICAgIGlmICghb2spCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCktPmFkZCgqa2V5LCBXVEZN
b3ZlKGJ1ZmZlcikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTW9k
ZWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Nb2Rl
bC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Nb2RlbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+CiB2b2lkIE1vZGVsOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsK
ICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHNpemVfdD4obV9kYXRhLT5zaXplKCkpOwotICAg
IGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNp
emUoKSwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEobV9kYXRhLT5ieXRl
cygpLCAxKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KQEAgLTc0LDcgKzc0LDcgQEAg
UmVmUHRyPE1vZGVsPiBNb2RlbDo6ZGVjb2RlKERlY29kZXImIGRlYwogCiAgICAgVmVjdG9yPHVp
bnQ4X3Q+IGRhdGE7CiAgICAgZGF0YS5ncm93KCpsZW5ndGgpOwotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGVGaXhlZExlbmd0aERhdGEoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAxKSkKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGRhdGEsIDEpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBNb2RlbDo6Y3JlYXRlKFNoYXJlZEJ1ZmZlcjo6Y3Jl
YXRlKFdURk1vdmUoZGF0YSkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BpeGVsQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUGl4ZWxCdWZmZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODIs
NyArODIsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIFBpeGVsQnVmZmVyCiAKICAg
ICBlbmNvZGVyIDw8IG1fZm9ybWF0OwogICAgIGVuY29kZXIgPDwgbV9zaXplOwotICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPmJ5dGVMZW5n
dGgoKSwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEobV9kYXRhLT5ieXRl
cygpLCAxKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RkOjpvcHRpb25hbDxQaXhl
bEJ1ZmZlcj4gUGl4ZWxCdWZmZXI6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQpAQCAtMTEzLDcg
KzExMyw3IEBAIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0ZDo6b3B0aW9uYWw8UGkKICAgICBp
ZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIGlmICghZGVj
b2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVzdWx0LT5tX2RhdGEtPmRhdGEoKSwgcmVzdWx0
LT5tX2RhdGEtPmJ5dGVMZW5ndGgoKSwgMSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVk
TGVuZ3RoRGF0YShyZXN1bHQtPm1fZGF0YS0+d3JpdGFibGVCeXRlcygpLCAxKSkKICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZh
aXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3Ry
ZWFtaW5nQVZGT2JqQy5tbQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVh
bWluZ0FWRk9iakMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAKICNpbXBvcnQg
PHd0Zi9GaWxlU3lzdGVtLmg+CiAjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgogI2ltcG9ydCA8
d3RmL0xvZ2dlckhlbHBlci5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1NwYW5Db2NvYS5oPgogI2lt
cG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQu
aD4KICNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KQEAgLTcxNSw3ICs3MTYsNyBAQCB2
b2lkIENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nCiAgICAgICAgIGlkZW50aWZp
ZXIgPSBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTppbml0RGF0YS0+Y3Jl
YXRlTlNEYXRhKCkuZ2V0KCkgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddKTsKICNpZiBI
QVZFKEZBSVJQTEFZU1RSRUFNSU5HX0NFTkNfSU5JVERBVEEpCiAgICAgZWxzZSBpZiAoaW5pdERh
dGFUeXBlID09IEluaXREYXRhUmVnaXN0cnk6OmNlbmNOYW1lKCkpIHsKLSAgICAgICAgYXV0byBw
c3NoU3RyaW5nID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5pdERhdGEtPmRhdGEoKSwgaW5pdERh
dGEtPnNpemUoKSk7CisgICAgICAgIGF1dG8gcHNzaFN0cmluZyA9IGJhc2U2NEVuY29kZVRvU3Ry
aW5nKGluaXREYXRhLT5ieXRlcygpKTsKICAgICAgICAgaW5pdGlhbGl6YXRpb25EYXRhID0gW05T
SlNPTlNlcmlhbGl6YXRpb24gZGF0YVdpdGhKU09OT2JqZWN0OkB7IEAicHNzaCI6IChOU1N0cmlu
ZyopcHNzaFN0cmluZyB9IG9wdGlvbnM6TlNKU09OV3JpdGluZ1ByZXR0eVByaW50ZWQgZXJyb3I6
bmlsXTsKICAgICB9CiAjZW5kaWYKQEAgLTExOTEsMTIgKzExOTIsMTAgQEAgdm9pZCBDRE1JbnN0
YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZwogICAgICAgICB9CiAKICAgICAgICAgYXV0byBy
ZXF1ZXN0SlNPTiA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKLSAgICAgICAgZm9yIChhdXRvJiBy
ZXF1ZXN0RGF0YSA6IHJlcXVlc3RzRGF0YSkgeworICAgICAgICBmb3IgKGF1dG8mIFtrZXlJRCwg
cGF5bG9hZF0gOiByZXF1ZXN0c0RhdGEpIHsKICAgICAgICAgICAgIGF1dG8gZW50cnkgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICAgICAgYXV0byYga2V5SUQgPSByZXF1ZXN0RGF0
YS5maXJzdDsKLSAgICAgICAgICAgIGF1dG8mIHBheWxvYWQgPSByZXF1ZXN0RGF0YS5zZWNvbmQ7
Ci0gICAgICAgICAgICBlbnRyeS0+c2V0U3RyaW5nKCJrZXlJRCIsIGJhc2U2NEVuY29kZVRvU3Ry
aW5nKGtleUlELT5kYXRhKCksIGtleUlELT5zaXplKCkpKTsKLSAgICAgICAgICAgIGVudHJ5LT5z
ZXRTdHJpbmcoInBheWxvYWQiLCBiYXNlNjRFbmNvZGVUb1N0cmluZyhwYXlsb2FkLmdldCgpLmJ5
dGVzLCBwYXlsb2FkLmdldCgpLmxlbmd0aCkpOworICAgICAgICAgICAgZW50cnktPnNldFN0cmlu
Zygia2V5SUQiLCBiYXNlNjRFbmNvZGVUb1N0cmluZyhrZXlJRC0+Ynl0ZXMoKSkpOworICAgICAg
ICAgICAgZW50cnktPnNldFN0cmluZygicGF5bG9hZCIsIGJhc2U2NEVuY29kZVRvU3RyaW5nKGFz
Qnl0ZXMocGF5bG9hZC5nZXQoKSkpKTsKICAgICAgICAgICAgIHJlcXVlc3RKU09OLT5wdXNoT2Jq
ZWN0KFdURk1vdmUoZW50cnkpKTsKICAgICAgICAgfQogICAgICAgICBhdXRvIHJlcXVlc3RCdWZm
ZXIgPSB1dGY4QnVmZmVyKHJlcXVlc3RKU09OLT50b0pTT05TdHJpbmcoKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw3ICsxMzIsNyBAQCBTdHJpbmcgSW1hZ2VCdWZm
ZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YVVSCiAgICAgaWYgKGVuY29kZWRJbWFnZS5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiAiZGF0YTosIjsKIAotICAgIHJldHVybiBtYWtlU3RyaW5nKCJkYXRh
OiIsIG1pbWVUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKGVuY29kZWRJbWFnZS5kYXRh
KCksIGVuY29kZWRJbWFnZS5zaXplKCkpKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygiZGF0YToi
LCBtaW1lVHlwZSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChlbmNvZGVkSW1hZ2UpKTsKIH0K
IAogVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGEoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRm
b3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCBzdGF0aWMgU3RyaW5nIGNy
ZWF0ZVVuaXF1ZUZvbnROYW1lKCkKICAgICBHVUlEIGZvbnRVdWlkOwogICAgIENvQ3JlYXRlR3Vp
ZCgmZm9udFV1aWQpOwogCi0gICAgYXV0byBmb250TmFtZSA9IGJhc2U2NEVuY29kZVRvU3RyaW5n
KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZmb250VXVpZCksIHNpemVvZihmb250VXVpZCkpOwor
ICAgIGF1dG8gZm9udE5hbWUgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgJmZvbnRVdWlk
LCAxIH0pOwogICAgIEFTU0VSVChmb250TmFtZS5sZW5ndGgoKSA8IExGX0ZBQ0VTSVpFKTsKICAg
ICByZXR1cm4gZm9udE5hbWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0
YUNhaXJvLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIFN0cmluZyBjcmVhdGVVbmlxdWVGb250TmFtZSgp
CiAgICAgR1VJRCBmb250VXVpZDsKICAgICBDb0NyZWF0ZUd1aWQoJmZvbnRVdWlkKTsKIAotICAg
IGF1dG8gZm9udE5hbWUgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhyZWludGVycHJldF9jYXN0PGNo
YXIqPigmZm9udFV1aWQpLCBzaXplb2YoZm9udFV1aWQpKTsKKyAgICBhdXRvIGZvbnROYW1lID0g
YmFzZTY0RW5jb2RlVG9TdHJpbmcoU3BhbiB7ICZmb250VXVpZCwgMSB9KTsKICAgICBBU1NFUlQo
Zm9udE5hbWUubGVuZ3RoKCkgPCBMRl9GQUNFU0laRSk7CiAgICAgcmV0dXJuIGZvbnROYW1lOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRvck1hYy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU1NMS2V5R2VuZXJh
dG9yTWFjLm1tCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvU1NMS2V5R2VuZXJhdG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksNyArMjE5LDcg
QEAgc3RhdGljIFN0cmluZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZwogICAgIGlmIChTZWNB
c24xRW5jb2RlSXRlbShjb2RlciwgJnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZSwgc2lnbmVk
UHVibGljS2V5QW5kQ2hhbGxlbmdlVGVtcGxhdGUsICZlbmNvZGVkU2lnbmVkUHVibGljS2V5QW5k
Q2hhbGxlbmdlKSAhPSBub0VycikKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0
dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGVuY29kZWRTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVu
Z2UuRGF0YSwgZW5jb2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZS5MZW5ndGgpOworICAg
IHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgZW5jb2RlZFNpZ25lZFB1YmxpY0tl
eUFuZENoYWxsZW5nZS5EYXRhLCBlbmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlLkxl
bmd0aCB9KTsKIH0KIAogQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2Fw
YWJpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcy5oCShyZXZpc2lvbiAyNzg4MDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291
cmNlQ2FwYWJpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCwxNiArMTE0LDE2IEBAIHBy
aXZhdGU6CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBDYXBhYmlsaXR5VmFsdWVPclJh
bmdlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKLSAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmbV9taW5P
clZhbHVlKSwgc2l6ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZhbHVlVW5pb24pKTsKLSAgICBl
bmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPigmbV9tYXgpLCBzaXplb2YoVmFsdWVVbmlvbiksIGFsaWdub2YoVmFsdWVVbmlvbikpOwor
ICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmbV9taW5PclZhbHVlLCAx
IH0sIGFsaWdub2YoVmFsdWVVbmlvbikpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKFNwYW4geyAmbV9tYXgsIDEgfSwgYWxpZ25vZihWYWx1ZVVuaW9uKSk7CiAgICAgZW5jb2Rl
ciA8PCBtX3R5cGU7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CiBib29sIENhcGFiaWxp
dHlWYWx1ZU9yUmFuZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBDYXBhYmlsaXR5VmFsdWVP
clJhbmdlJiB2YWx1ZU9yUmFuZ2UpCiB7Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2YWx1ZU9yUmFuZ2UubV9taW5P
clZhbHVlKSwgc2l6ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZhbHVlVW5pb24pKQotICAgICAg
ICAmJiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPigmdmFsdWVPclJhbmdlLm1fbWF4KSwgc2l6ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZh
bHVlVW5pb24pKQorICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFu
IHsgJnZhbHVlT3JSYW5nZS5tX21pbk9yVmFsdWUsIDEgfSwgYWxpZ25vZihWYWx1ZVVuaW9uKSkK
KyAgICAgICAgJiYgZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZ2YWx1ZU9y
UmFuZ2UubV9tYXgsIDEgfSwgYWxpZ25vZihWYWx1ZVVuaW9uKSkKICAgICAgICAgJiYgZGVjb2Rl
ci5kZWNvZGUodmFsdWVPclJhbmdlLm1fdHlwZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVk
aWFTb3VyY2VDZW50ZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM5LDEzICsxMzksMTMgQEAgc3RhdGljIHZvaWQgYWRkU3RyaW5nVG9TSEEx
KFNIQTEmIHNoYTEsIAogCiAgICAgaWYgKHN0cmluZy5pczhCaXQoKSAmJiBzdHJpbmcuaXNBbGxB
U0NJSSgpKSB7CiAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbnVsbEJ5dGUgPSAwOwotICAgICAgICBz
aGExLmFkZEJ5dGVzKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAg
ICAgICBzaGExLmFkZEJ5dGVzKCZudWxsQnl0ZSwgMSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMo
U3BhbiB7IHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkgfSk7CisgICAgICAg
IHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZudWxsQnl0ZSwgMSB9KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIGF1dG8gdXRmOCA9IHN0cmluZy51dGY4KCk7Ci0gICAgc2hhMS5hZGRCeXRl
cyh1dGY4LmRhdGFBc1VJbnQ4UHRyKCksIHV0ZjgubGVuZ3RoKCkgKyAxKTsgLy8gSW5jbHVkZSB0
ZXJtaW5hdGluZyBudWxsIGJ5dGUuCisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgdXRmOC5kYXRh
QXNVSW50OFB0cigpLCB1dGY4Lmxlbmd0aCgpICsgMSB9KTsgLy8gSW5jbHVkZSB0ZXJtaW5hdGlu
ZyBudWxsIGJ5dGUuCiB9CiAKIFN0cmluZyBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpoYXNo
U3RyaW5nV2l0aFNhbHQoY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgU3RyaW5nJiBoYXNoU2FsdCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlh
bEJhc2UuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0NyZWRlbnRpYWxCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsOCArOTcsOSBA
QCBib29sIENyZWRlbnRpYWxCYXNlOjpjb21wYXJlKGNvbnN0IENyZWRlCiAKIFN0cmluZyBDcmVk
ZW50aWFsQmFzZTo6c2VyaWFsaXphdGlvbkZvckJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcigpIGNv
bnN0CiB7CisgICAgLy8gRklYTUU6IEFkZCBtYWtlU3RyaW5nIHZhcmlhbnQgdGhhdCBjcmVhdGVz
IGEgdXRmOCBidWZmZXIgZGlyZWN0bHkuCiAgICAgYXV0byBjcmVkZW50aWFsU3RyaW5nRGF0YSA9
IG1ha2VTdHJpbmcobV91c2VyLCAnOicsIG1fcGFzc3dvcmQpLnV0ZjgoKTsKLSAgICByZXR1cm4g
bWFrZVN0cmluZygiQmFzaWMgIiwgYmFzZTY0RW5jb2RlZChjcmVkZW50aWFsU3RyaW5nRGF0YSkp
OworICAgIHJldHVybiBtYWtlU3RyaW5nKCJCYXNpYyAiLCBiYXNlNjRFbmNvZGVkKGNyZWRlbnRp
YWxTdHJpbmdEYXRhLmJ5dGVzKCkpKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5j
cHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvQ2VydGlmaWNhdGVJbmZvQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNyArMjEw
LDcgQEAgc3RhdGljIHZvaWQgZW5jb2RlQ0ZEYXRhKEVuY29kZXImIGVuY29kZQogICAgIGNvbnN0
IHVpbnQ4X3QqIGJ5dGVQdHIgPSBDRkRhdGFHZXRCeXRlUHRyKGRhdGEpOwogCiAgICAgZW5jb2Rl
ciA8PCBsZW5ndGg7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYnl0ZVB0ciwg
c3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShTcGFuIHsgYnl0ZVB0ciwgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpIH0pOwog
fQogCiBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4gZGVjb2RlQ0ZE
YXRhKERlY29kZXImIGRlY29kZXIpCkBAIC0yMjUsNyArMjI1LDcgQEAgc3RhdGljIHN0ZDo6b3B0
aW9uYWw8UmV0YWluUHRyPENGRGF0YVJlZgogICAgIGlmICghcG9pbnRlcikKICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0ZShudWxs
cHRyLCBwb2ludGVyLCAqc2l6ZSkpOworICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0ZShu
dWxscHRyLCByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwb2ludGVyKSwgKnNpemUp
KTsKIH0KIAogI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ2VydGlmaWNhdGVJbmZvLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0NlcnRpZmljYXRlSW5m
by5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvQ2VydGlmaWNhdGVJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAg
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8R1JlZlB0cjxHQnl0ZUFycgogICAgIHN0YXRpYyB2b2lk
IGVuY29kZShFbmNvZGVyICZlbmNvZGVyLCBjb25zdCBHUmVmUHRyPEdCeXRlQXJyYXk+JiBieXRl
QXJyYXkpCiAgICAgewogICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90Pihi
eXRlQXJyYXktPmxlbik7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGJ5
dGVBcnJheS0+ZGF0YSwgYnl0ZUFycmF5LT5sZW4pOworICAgICAgICBlbmNvZGVyLmVuY29kZUZp
eGVkTGVuZ3RoRGF0YShTcGFuIHsgYnl0ZUFycmF5LT5kYXRhLCBieXRlQXJyYXktPmxlbiB9KTsK
ICAgICB9CiAKICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxHUmVmUHRyPEdCeXRlQXJyYXk+PiBk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKQEAgLTg3LDcgKzg3LDcgQEAgdGVtcGxhdGU8PiBzdHJ1
Y3QgQ29kZXI8R1JlZlB0cjxHQnl0ZUFycgogCiAgICAgICAgIEdSZWZQdHI8R0J5dGVBcnJheT4g
Ynl0ZUFycmF5ID0gYWRvcHRHUmVmKGdfYnl0ZV9hcnJheV9zaXplZF9uZXcoKnNpemUpKTsKICAg
ICAgICAgZ19ieXRlX2FycmF5X3NldF9zaXplKGJ5dGVBcnJheS5nZXQoKSwgKnNpemUpOwotICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ5dGVBcnJheS0+ZGF0YSwg
KnNpemUpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4g
eyBieXRlQXJyYXktPmRhdGEsICpzaXplIH0pKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKICAgICAgICAgcmV0dXJuIGJ5dGVBcnJheTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAkocmV2aXNpb24gMjc4
ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OmV4
ZWN1dGVDb21tYW5kKCkKICAgICByZXR1cm4gc3RlcCgpID09IFNRTElURV9ET05FOwogfQogCi1p
bnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kQmxvYihpbnQgaW5kZXgsIFNwYW48Y29uc3QgdWludDhf
dD4gYmxvYikKK2ludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgU3Bhbjxj
b25zdCBzdGQ6OmJ5dGU+IGJsb2IpCiB7CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAgQVNT
RVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkp
OwpAQCAtOTUsNiArOTUsMTEgQEAgaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IoaW50IGlu
ZGV4LAogICAgIHJldHVybiBzcWxpdGUzX2JpbmRfYmxvYihtX3N0YXRlbWVudCwgaW5kZXgsIGJs
b2IuZGF0YSgpLCBibG9iLnNpemUoKSwgU1FMSVRFX1RSQU5TSUVOVCk7CiB9CiAKK2ludCBTUUxp
dGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgU3Bhbjxjb25zdCB1aW50OF90PiBibG9i
KQoreworICAgIHJldHVybiBiaW5kQmxvYihpbmRleCwgYXNCeXRlcyhibG9iKSk7Cit9CisKIGlu
dCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0
KQogewogICAgIC8vIFN0cmluZzo6Y2hhcmFjdGVycygpIHJldHVybnMgMCBmb3IgdGhlIGVtcHR5
IHN0cmluZywgd2hpY2ggU1FMaXRlCkBAIC0xMDcsNyArMTEyLDcgQEAgaW50IFNRTGl0ZVN0YXRl
bWVudDo6YmluZEJsb2IoaW50IGluZGV4LAogICAgIGVsc2UKICAgICAgICAgY2hhcmFjdGVycyA9
IHVwY29udmVydGVkQ2hhcmFjdGVyczsKIAotICAgIHJldHVybiBiaW5kQmxvYihpbmRleCwgU3Bh
biB7IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGNoYXJhY3RlcnMpLCB0ZXh0Lmxl
bmd0aCgpICogc2l6ZW9mKFVDaGFyKSB9KTsKKyAgICByZXR1cm4gYmluZEJsb2IoaW5kZXgsIFNw
YW4geyByZWludGVycHJldF9jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGNoYXJhY3RlcnMpLCB0ZXh0
Lmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSB9KTsKIH0KIAogaW50IFNRTGl0ZVN0YXRlbWVudDo6
YmluZFRleHQoaW50IGluZGV4LCBTdHJpbmdWaWV3IHRleHQpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDYgKzM5LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIH5TUUxp
dGVTdGF0ZW1lbnQoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBTUUxpdGVTdGF0ZW1lbnQoU1FMaXRl
U3RhdGVtZW50JiYpOwogICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIGludCBiaW5kQmxvYihpbnQg
aW5kZXgsIFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJp
bmRCbG9iKGludCBpbmRleCwgU3Bhbjxjb25zdCB1aW50OF90Pik7CiAgICAgV0VCQ09SRV9FWFBP
UlQgaW50IGJpbmRCbG9iKGludCBpbmRleCwgY29uc3QgU3RyaW5nJik7CiAgICAgV0VCQ09SRV9F
WFBPUlQgaW50IGJpbmRUZXh0KGludCBpbmRleCwgU3RyaW5nVmlldyk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuY3BwCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDEyICs1NSw3IEBAIHN0YXRpYyBzaXplX3QgbGVu
Z3RoT2ZMaW5lRW5kaW5nQXRJbmRleCgKICAgICByZXR1cm4gMDsKIH0KIAotVmVjdG9yPHVpbnQ4
X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQot
ewotICAgIHJldHVybiBxdW90ZWRQcmludGFibGVFbmNvZGUoaW5wdXQuZGF0YSgpLCBpbnB1dC5z
aXplKCkpOwotfQotCi1WZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0
IHVpbnQ4X3QqIGlucHV0LCBzaXplX3QgaW5wdXRMZW5ndGgpCitzdGF0aWMgVmVjdG9yPHVpbnQ4
X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGlu
cHV0TGVuZ3RoKQogewogICAgIFZlY3Rvcjx1aW50OF90PiBvdXQ7CiAgICAgb3V0LnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoaW5wdXRMZW5ndGgpOwpAQCAtMTE2LDEyICsxMTEsMTIgQEAgVmVjdG9y
PHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjbwogICAgIHJldHVybiBvdXQ7CiB9CiAK
LVZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBpbnB1dCkKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNvZGUoU3Bhbjxj
b25zdCBzdGQ6OmJ5dGU+IGlucHV0KQogewotICAgIHJldHVybiBxdW90ZWRQcmludGFibGVEZWNv
ZGUoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkpOworICAgIHJldHVybiBxdW90ZWRQcmludGFi
bGVFbmNvZGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0YSgpKSwg
aW5wdXQuc2l6ZSgpKTsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29k
ZShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCkKK3N0YXRpYyBWZWN0b3I8
dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVf
dCBkYXRhTGVuZ3RoKQogewogICAgIFZlY3Rvcjx1aW50OF90PiBvdXQ7CiAgICAgaWYgKCFkYXRh
TGVuZ3RoKQpAQCAtMTU2LDQgKzE1MSw5IEBAIFZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFi
bGVEZWNvZGUoY28KICAgICByZXR1cm4gb3V0OwogfQogCitWZWN0b3I8dWludDhfdD4gcXVvdGVk
UHJpbnRhYmxlRGVjb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCkKK3sKKyAgICByZXR1
cm4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+
KGlucHV0LmRhdGEoKSksIGlucHV0LnNpemUoKSk7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvUXVvdGVkUHJpbnRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuaAkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsMTMgKzMxLDExIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1WZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYpOwotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25z
dCB1aW50OF90Kiwgc2l6ZV90KTsKLQotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURl
Y29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mKTsKLVZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmlu
dGFibGVEZWNvZGUoY29uc3QgdWludDhfdCosIHNpemVfdCk7CitWZWN0b3I8dWludDhfdD4gcXVv
dGVkUHJpbnRhYmxlRW5jb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CitWZWN0b3I8dWludDhf
dD4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0
ZWJvYXJkV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
UGFzdGVib2FyZFdpbi5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDcgKzI1
MSw3IEBAIHN0ZDo6b3B0aW9uYWw8UGFzdGVib2FyZEN1c3RvbURhdGE+IFBhc3QKICAgICAgICAg
aWYgKEhBTkRMRSBjYkRhdGEgPSA6OkdldENsaXBib2FyZERhdGEoQ3VzdG9tRGF0YUNsaXBib2Fy
ZEZvcm1hdCkpIHsKICAgICAgICAgICAgIHNpemVfdCBzaXplID0gR2xvYmFsU2l6ZShjYkRhdGEp
OwogICAgICAgICAgICAgYXV0byBkYXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KEdsb2JhbExv
Y2soY2JEYXRhKSk7Ci0gICAgICAgICAgICBhdXRvIGN1c3RvbURhdGEgPSBQYXN0ZWJvYXJkQ3Vz
dG9tRGF0YTo6ZnJvbVBlcnNpc3RlbmNlRGVjb2Rlcih7ZGF0YSwgc2l6ZX0pOworICAgICAgICAg
ICAgYXV0byBjdXN0b21EYXRhID0gUGFzdGVib2FyZEN1c3RvbURhdGE6OmZyb21QZXJzaXN0ZW5j
ZURlY29kZXIoU3BhbiB7IGRhdGEsIHNpemUgfSk7CiAKICAgICAgICAgICAgIEdsb2JhbFVubG9j
ayhjYkRhdGEpOwogICAgICAgICAgICAgOjpDbG9zZUNsaXBib2FyZCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdp
c3RyYXRpb25EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NTksMTAgKzQ1OSwxMCBAQCBib29sIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpk
b1B1c2hDaGFuZ2VzCiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDYs
IHVwZGF0ZVZpYUNhY2hlVG9TdHJpbmcoZGF0YS5yZWdpc3RyYXRpb24udXBkYXRlVmlhQ2FjaGUp
KSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRleHQo
NywgZGF0YS5zY3JpcHRVUkwuc3RyaW5nKCkpICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwg
aW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCg4LCB3b3JrZXJUeXBlVG9TdHJpbmcoZGF0YS53b3Jr
ZXJUeXBlKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJp
bmRCbG9iKDksIFNwYW4geyBjc3BFbmNvZGVyLmJ1ZmZlcigpLCBjc3BFbmNvZGVyLmJ1ZmZlclNp
emUoKSB9KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+Ymlu
ZEJsb2IoOSwgY3NwRW5jb2Rlci5idWZmZXIoKSkgIT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8
fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDEwLCBkYXRhLnJlZmVycmVyUG9saWN5KSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoMTEsIFNw
YW4geyBzY3JpcHRSZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVyKCksIHNjcmlwdFJlc291cmNlTWFw
RW5jb2Rlci5idWZmZXJTaXplKCkgfSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBpbnNl
cnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDEyLCBTcGFuIHsgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5i
dWZmZXIoKSwgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXJTaXplKCkgfSkgIT0gU1FMSVRF
X09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDExLCBzY3JpcHRS
ZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVyKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwg
aW5zZXJ0U3RhdGVtZW50LT5iaW5kQmxvYigxMiwgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZm
ZXIoKSkgIT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPnN0ZXAo
KSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU2Vydmlj
ZVdvcmtlciwgIkZhaWxlZCB0byBzdG9yZSByZWdpc3RyYXRpb24gZGF0YSBpbnRvIHJlY29yZHMg
dGFibGUgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxh
c3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTUxNyw3ICs1MTcs
NyBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yCiAgICAgICAgIHN0
ZDo6b3B0aW9uYWw8Q29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzPiBjb250ZW50
U2VjdXJpdHlQb2xpY3k7CiAgICAgICAgIGF1dG8gY29udGVudFNlY3VyaXR5UG9saWN5RGF0YVNw
YW4gPSBzcWwtPmNvbHVtbkJsb2JBc1NwYW4oOCk7CiAgICAgICAgIGlmIChjb250ZW50U2VjdXJp
dHlQb2xpY3lEYXRhU3Bhbi5zaXplKCkpIHsKLSAgICAgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6
OkRlY29kZXIgY3NwRGVjb2Rlcihjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhU3Bhbi5kYXRhKCks
IGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGFTcGFuLnNpemUoKSk7CisgICAgICAgICAgICBXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGNzcERlY29kZXIgeyBjb250ZW50U2VjdXJpdHlQb2xpY3lE
YXRhU3BhbiB9OwogICAgICAgICAgICAgY3NwRGVjb2RlciA+PiBjb250ZW50U2VjdXJpdHlQb2xp
Y3k7CiAgICAgICAgICAgICBpZiAoIWNvbnRlbnRTZWN1cml0eVBvbGljeSkgewogICAgICAgICAg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIsICJSZWdpc3RyYXRpb25EYXRh
YmFzZTo6aW1wb3J0UmVjb3JkczogRmFpbGVkIHRvIGRlY29kZSBjb250ZW50U2VjdXJpdHlQb2xp
Y3kiKTsKQEAgLTUzMCw3ICs1MzAsNyBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6Omlt
cG9ydFJlY29yCiAgICAgICAgIEhhc2hNYXA8VVJMLCBTZXJ2aWNlV29ya2VyQ29udGV4dERhdGE6
OkltcG9ydGVkU2NyaXB0PiBzY3JpcHRSZXNvdXJjZU1hcDsKICAgICAgICAgYXV0byBzY3JpcHRS
ZXNvdXJjZU1hcERhdGFTcGFuID0gc3FsLT5jb2x1bW5CbG9iQXNTcGFuKDEwKTsKICAgICAgICAg
aWYgKHNjcmlwdFJlc291cmNlTWFwRGF0YVNwYW4uc2l6ZSgpKSB7Ci0gICAgICAgICAgICBXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyIHNjcmlwdFJlc291cmNlTWFwRGVjb2RlcihzY3JpcHRSZXNv
dXJjZU1hcERhdGFTcGFuLmRhdGEoKSwgc2NyaXB0UmVzb3VyY2VNYXBEYXRhU3Bhbi5zaXplKCkp
OworICAgICAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBzY3JpcHRSZXNvdXJjZU1h
cERlY29kZXIgeyBzY3JpcHRSZXNvdXJjZU1hcERhdGFTcGFuIH07CiAgICAgICAgICAgICBzdGQ6
Om9wdGlvbmFsPEhhc2hNYXA8VVJMLCBJbXBvcnRlZFNjcmlwdEF0dHJpYnV0ZXM+PiBzY3JpcHRS
ZXNvdXJjZU1hcFdpdGhvdXRTY3JpcHRzOwogICAgICAgICAgICAgc2NyaXB0UmVzb3VyY2VNYXBE
ZWNvZGVyID4+IHNjcmlwdFJlc291cmNlTWFwV2l0aG91dFNjcmlwdHM7CiAgICAgICAgICAgICBp
ZiAoIXNjcmlwdFJlc291cmNlTWFwV2l0aG91dFNjcmlwdHMpIHsKQEAgLTU0Myw3ICs1NDMsNyBA
QCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yCiAgICAgICAgIGF1dG8g
Y2VydGlmaWNhdGVJbmZvRGF0YVNwYW4gPSBzcWwtPmNvbHVtbkJsb2JBc1NwYW4oMTEpOwogICAg
ICAgICBzdGQ6Om9wdGlvbmFsPENlcnRpZmljYXRlSW5mbz4gY2VydGlmaWNhdGVJbmZvOwogCi0g
ICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgY2VydGlmaWNhdGVJbmZvRGVjb2Rlcihj
ZXJ0aWZpY2F0ZUluZm9EYXRhU3Bhbi5kYXRhKCksIGNlcnRpZmljYXRlSW5mb0RhdGFTcGFuLnNp
emUoKSk7CisgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgY2VydGlmaWNhdGVJbmZv
RGVjb2RlciB7IGNlcnRpZmljYXRlSW5mb0RhdGFTcGFuIH07CiAgICAgICAgIGNlcnRpZmljYXRl
SW5mb0RlY29kZXIgPj4gY2VydGlmaWNhdGVJbmZvOwogICAgICAgICBpZiAoIWNlcnRpZmljYXRl
SW5mbykgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIlJl
Z2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzOiBGYWlsZWQgdG8gZGVjb2RlIGNlcnRp
ZmljYXRlSW5mbyIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZl
ci9TV1NjcmlwdFN0b3JhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvc2VydmljZS9zZXJ2ZXIvU1dTY3JpcHRTdG9yYWdlLmNwcAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NjcmlwdFN0b3JhZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIFN0cmluZyBTV1NjcmlwdFN0b3Jh
Z2U6OnNoYTJIYXNoKGNvbnN0IFMKICAgICBhdXRvIGlucHV0VXRmOCA9IGlucHV0LnV0ZjgoKTsK
ICAgICBjcnlwdG8tPmFkZEJ5dGVzKGlucHV0VXRmOC5kYXRhKCksIGlucHV0VXRmOC5sZW5ndGgo
KSk7CiAgICAgYXV0byBoYXNoID0gY3J5cHRvLT5jb21wdXRlSGFzaCgpOwotICAgIHJldHVybiBi
YXNlNjRVUkxFbmNvZGVUb1N0cmluZyhoYXNoLmRhdGEoKSwgaGFzaC5zaXplKCkpOworICAgIHJl
dHVybiBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhoYXNoKTsKIH0KIAogU3RyaW5nIFNXU2NyaXB0
U3RvcmFnZTo6c2hhMkhhc2goY29uc3QgVVJMJiBpbnB1dCkgY29uc3QKQEAgLTg2LDkgKzg2LDkg
QEAgU2NyaXB0QnVmZmVyIFNXU2NyaXB0U3RvcmFnZTo6c3RvcmUoY29ucwogICAgIGF1dG8gc2Ny
aXB0UGF0aCA9IHRoaXMtPnNjcmlwdFBhdGgocmVnaXN0cmF0aW9uS2V5LCBzY3JpcHRVUkwpOwog
ICAgIEZpbGVTeXN0ZW06Om1ha2VBbGxEaXJlY3RvcmllcyhGaWxlU3lzdGVtOjpwYXJlbnRQYXRo
KHNjcmlwdFBhdGgpKTsKIAotICAgIGF1dG8gaXRlcmF0ZU92ZXJCdWZmZXJBbmRXcml0ZURhdGEg
PSBbJl0oY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIHdyaXRl
RGF0YSkgewotICAgICAgICBmb3IgKGF1dG8gaXQgPSBzY3JpcHQuYnVmZmVyKCktPmJlZ2luKCk7
IGl0ICE9IHNjcmlwdC5idWZmZXIoKS0+ZW5kKCk7ICsraXQpCi0gICAgICAgICAgICB3cml0ZURh
dGEoaXQtPnNlZ21lbnQtPmRhdGEoKSwgaXQtPnNlZ21lbnQtPnNpemUoKSk7CisgICAgYXV0byBp
dGVyYXRlT3ZlckJ1ZmZlckFuZFdyaXRlRGF0YSA9IFsmXShjb25zdCBGdW5jdGlvbjxib29sKFNw
YW48Y29uc3Qgc3RkOjpieXRlPik+JiB3cml0ZURhdGEpIHsKKyAgICAgICAgZm9yIChhdXRvJiBz
ZWdtZW50RW50cnkgOiAqc2NyaXB0LmJ1ZmZlcigpKQorICAgICAgICAgICAgd3JpdGVEYXRhKHNl
Z21lbnRFbnRyeS5zZWdtZW50LT5ieXRlcygpKTsKICAgICB9OwogCiAgICAgaWYgKCFzaG91bGRV
c2VGaWxlTWFwcGluZyhzY3JpcHQuYnVmZmVyKCktPnNpemUoKSkpIHsKQEAgLTk3LDggKzk3LDgg
QEAgU2NyaXB0QnVmZmVyIFNXU2NyaXB0U3RvcmFnZTo6c3RvcmUoY29ucwogICAgICAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIlNXU2NyaXB0U3RvcmFnZTo6c3RvcmU6
IEZhaWx1cmUgdG8gc3RvcmUgJXMsIEZpbGVTeXN0ZW06Om9wZW5GaWxlKCkgZmFpbGVkIiwgc2Ny
aXB0UGF0aC51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAg
IH0KLSAgICAgICAgaXRlcmF0ZU92ZXJCdWZmZXJBbmRXcml0ZURhdGEoWyZdKGNvbnN0IHVpbnQ4
X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gICAgICAgICAgICBGaWxlU3lzdGVtOjp3cml0ZVRv
RmlsZShoYW5kbGUsIGRhdGEsIHNpemUpOworICAgICAgICBpdGVyYXRlT3ZlckJ1ZmZlckFuZFdy
aXRlRGF0YShbJl0oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpIHsKKyAgICAgICAgICAgIEZp
bGVTeXN0ZW06OndyaXRlVG9GaWxlKGhhbmRsZSwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9KTsKICAgICAgICAgRmlsZVN5c3Rl
bTo6Y2xvc2VGaWxlKGhhbmRsZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw4MSBAQAor
MjAyMS0wNi0xMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRv
cHQgU3BhbiBpbiBtb3JlIHBsYWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL0Nh
Y2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdl
OjpDYWNoZTo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6
ZGVjb2RlUmVjb3JkSGVhZGVyKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNo
ZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6
OkNhY2hlczo6c3RvcmVPcmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNh
Y2hlczo6cmVhZE9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6ZW5jb2Rl
Q2FjaGVOYW1lcyk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6ZGVjb2RlQ2FjaGVz
TmFtZXMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6Om1hcFRvRmlsZSBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Y29tcHV0ZVNIQTEpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaDoKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhY2hlOjpEYXRhOjpEYXRhKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6RGF0YTo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fj
aGU6OkRhdGE6OmFkb3B0TWFwKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVFbnRyeS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6
OmVuY29kZUFzU3RvcmFnZVJlY29yZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6RW50cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQpOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6aGFzaFN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6S2V5Ojpj
b21wdXRlSGFzaCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6S2V5Ojpj
b21wdXRlUGFydGl0aW9uSGFzaCBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNo
ZTo6ZGVjb2RlUmVjb3JkTWV0YURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6
OmVuY29kZVJlY29yZE1ldGFEYXRhKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6U3VicmVzb3VyY2VzRW50cnk6OmVuY29kZUFzU3RvcmFnZVJlY29yZCBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3VicmVzb3VyY2VzRW50cnk6OmRlY29k
ZVN0b3JhZ2VSZWNvcmQpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVyLmg6
CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQ
Qzo6QXJndW1lbnRDb2RlcjxDU3RyaW5nPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1l
bnRDb2RlcjxDU3RyaW5nPjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxT
dHJpbmc+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpkZWNvZGVTdHJpbmdUZXh0KToKKyAgICAg
ICAgKElQQzo6QXJndW1lbnRDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUpOgorICAgICAgICAo
SVBDOjpBcmd1bWVudENvZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29kZSk6CisgICAgICAgICogUGxh
dGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgIChJUEM6OlNpbXBsZUFyZ3VtZW50
Q29kZXI6OmVuY29kZSk6CisgICAgICAgIChJUEM6OlNpbXBsZUFyZ3VtZW50Q29kZXI6OmRlY29k
ZSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FycmF5UmVmZXJlbmNlLmg6CisgICAgICAgICog
UGxhdGZvcm0vSVBDL0RlY29kZXIuY3BwOgorICAgICAgICAoSVBDOjpEZWNvZGVyOjpkZWNvZGVG
aXhlZExlbmd0aERhdGEpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9EZWNvZGVyLmg6CisgICAg
ICAgIChJUEM6OkRlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgICogUGxh
dGZvcm0vSVBDL0VuY29kZXIuY3BwOgorICAgICAgICAoSVBDOjpFbmNvZGVyOjplbmNvZGVGaXhl
ZExlbmd0aERhdGEpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9FbmNvZGVyLmg6CisgICAgICAg
ICogUGxhdGZvcm0vSVBDL1NoYXJlZEJ1ZmZlckNvcHkuY3BwOgorICAgICAgICAoSVBDOjpTaGFy
ZWRCdWZmZXJDb3B5OjplbmNvZGUgY29uc3QpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9TdHJl
YW1Db25uZWN0aW9uRW5jb2Rlci5oOgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuY3BwOgorICAgICAgICAoSVBDOjplbmNvZGVTaGFyZWRCdWZmZXIpOgorICAgICAgICAo
SVBDOjpkZWNvZGVTaGFyZWRCdWZmZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJQ29u
dGVudFJ1bGVMaXN0U3RvcmUuY3BwOgorICAgICAgICAoQVBJOjplbmNvZGVDb250ZW50UnVsZUxp
c3RNZXRhRGF0YSk6CisgICAgICAgIChBUEk6OmdldERhdGEpOgorICAgICAgICAoQVBJOjpkZWNv
ZGVDb250ZW50UnVsZUxpc3RNZXRhRGF0YSk6CisgICAgICAgIChBUEk6OndyaXRlRGF0YVRvRmls
ZSk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpIaXN0b3J5RW50cnlEYXRhRW5jb2Rlcjo6b3BlcmF0b3I8PCk6
CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFFbmNvZGVyOjplbmNvZGVBcml0aG1l
dGljVHlwZSk6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFFbmNvZGVyOjplbmNv
ZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAoV2ViS2l0OjpIaXN0b3J5RW50cnlEYXRhRGVj
b2Rlcjo6b3BlcmF0b3I+Pik6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFEZWNv
ZGVyOjpkZWNvZGVBcml0aG1ldGljVHlwZSk6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRy
eURhdGFEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGlu
Z0FQSTo6ZW5jb2RlVHlwZWRBcnJheSk6CisKIDIwMjEtMDYtMTEgIFJ5YW4gSGFkZGFkICA8cnlh
bmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyNzg3
NTQuCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1
cmVtZW50TWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkp
CisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50
TWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMyw3ICszMjMsNyBAQCB2b2lkIFByaXZh
dGVDbGlja01lYXN1cmVtZW50TWFuYWdlcjo6ZmlyCiAgICAgICAgIGNyeXB0by0+YWRkQnl0ZXMo
cHVibGljS2V5RGF0YS0+ZGF0YSgpLCBwdWJsaWNLZXlEYXRhLT5zaXplKCkpOwogICAgICAgICBh
dXRvIHB1YmxpY0tleURhdGFIYXNoID0gY3J5cHRvLT5jb21wdXRlSGFzaCgpOwogCi0gICAgICAg
IGF1dG8ga2V5SUQgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhwdWJsaWNLZXlEYXRhSGFzaC5k
YXRhKCksIHB1YmxpY0tleURhdGFIYXNoLnNpemUoKSk7CisgICAgICAgIGF1dG8ga2V5SUQgPSBi
YXNlNjRVUkxFbmNvZGVUb1N0cmluZyhwdWJsaWNLZXlEYXRhSGFzaCk7CiAgICAgICAgIGlmIChr
ZXlJRCAhPSBhdHRyaWJ1dGlvbi5zb3VyY2VVbmxpbmthYmxlVG9rZW4oKS0+a2V5SURCYXNlNjRV
UkwpCiAgICAgICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUu
Y3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTY1LDcg
KzU2NSw3IEBAIFN0b3JhZ2U6OlJlY29yZCBDYWNoZTo6ZW5jb2RlKGNvbnN0IFJlY28KIAogICAg
IGVuY29kZXIuZW5jb2RlQ2hlY2tzdW0oKTsKIAotICAgIERhdGEgaGVhZGVyKGVuY29kZXIuYnVm
ZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICBEYXRhIGhlYWRlcihlbmNvZGVyLmJ1
ZmZlcigpKTsKICAgICBEYXRhIGJvZHk7CiAgICAgV1RGOjpzd2l0Y2hPbihyZWNvcmQucmVzcG9u
c2VCb2R5LCBbXShjb25zdCBSZWY8V2ViQ29yZTo6Rm9ybURhdGE+JiBmb3JtRGF0YSkgewogICAg
ICAgICAvLyBGSVhNRTogU3RvcmUgZm9ybSBkYXRhIGJvZHkuCkBAIC02MjgsOSArNjI4LDkgQEAg
c3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RE9NQ2FjaGVFbgogICAgIH19OwogfQogCi1z
dGQ6Om9wdGlvbmFsPENhY2hlOjpEZWNvZGVkUmVjb3JkPiBDYWNoZTo6ZGVjb2RlUmVjb3JkSGVh
ZGVyKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYgc3RvcmFnZSkKK3N0ZDo6b3B0aW9uYWw8Q2FjaGU6
OkRlY29kZWRSZWNvcmQ+IENhY2hlOjpkZWNvZGVSZWNvcmRIZWFkZXIoY29uc3QgU3RvcmFnZTo6
UmVjb3JkJiBzdG9yYWdlRW50cnkpCiB7Ci0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBk
ZWNvZGVyKHN0b3JhZ2UuaGVhZGVyLmRhdGEoKSwgc3RvcmFnZS5oZWFkZXIuc2l6ZSgpKTsKKyAg
ICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyBzdG9yYWdlRW50cnkuaGVhZGVy
IH07CiAKICAgICBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gaW5zZXJ0aW9uVGltZTsKICAgICBkZWNv
ZGVyID4+IGluc2VydGlvblRpbWU7CkBAIC02NTMsMTUgKzY1MywxNSBAQCBzdGQ6Om9wdGlvbmFs
PENhY2hlOjpEZWNvZGVkUmVjb3JkPiBDYWNoCiAgICAgfX07CiB9CiAKLXN0ZDo6b3B0aW9uYWw8
UmVjb3JkPiBDYWNoZTo6ZGVjb2RlKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYgc3RvcmFnZSkKK3N0
ZDo6b3B0aW9uYWw8UmVjb3JkPiBDYWNoZTo6ZGVjb2RlKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYg
c3RvcmFnZUVudHJ5KQogewotICAgIGF1dG8gcmVzdWx0ID0gZGVjb2RlUmVjb3JkSGVhZGVyKHN0
b3JhZ2UpOworICAgIGF1dG8gcmVzdWx0ID0gZGVjb2RlUmVjb3JkSGVhZGVyKHN0b3JhZ2VFbnRy
eSk7CiAKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAog
ICAgIGF1dG8gcmVjb3JkID0gV1RGTW92ZShyZXN1bHQtPnJlY29yZCk7Ci0gICAgcmVjb3JkLnJl
c3BvbnNlQm9keSA9IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHN0b3JhZ2UuYm9keS5k
YXRhKCksIHN0b3JhZ2UuYm9keS5zaXplKCkpOworICAgIHJlY29yZC5yZXNwb25zZUJvZHkgPSBX
ZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZShzdG9yYWdlRW50cnkuYm9keSk7CiAKICAgICBy
ZXR1cm4gcmVjb3JkOwogfQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNo
ZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsMTQgKzEwNSwx
NCBAQCB2b2lkIENhY2hlczo6c3RvcmVPcmlnaW4oQ29tcGxldGlvbkNhbGxiCiAgICAgZW5jb2Rl
ciA8PCBtX29yaWdpbi5jbGllbnRPcmlnaW4ucHJvdG9jb2w7CiAgICAgZW5jb2RlciA8PCBtX29y
aWdpbi5jbGllbnRPcmlnaW4uaG9zdDsKICAgICBlbmNvZGVyIDw8IG1fb3JpZ2luLmNsaWVudE9y
aWdpbi5wb3J0OwotICAgIG1fZW5naW5lLT53cml0ZUZpbGUoY2FjaGVzT3JpZ2luRmlsZW5hbWUo
bV9yb290UGF0aCksIERhdGEgeyBlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUo
KSB9LCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoc3RkOjpvcHRpb25hbDxFcnJvcj4mJiBlcnJv
cikgbXV0YWJsZSB7CisgICAgbV9lbmdpbmUtPndyaXRlRmlsZShjYWNoZXNPcmlnaW5GaWxlbmFt
ZShtX3Jvb3RQYXRoKSwgRGF0YSB7IGVuY29kZXIuYnVmZmVyKCkgfSwgW3Byb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0gKHN0ZDo6b3B0aW9uYWw8RXJyb3I+JiYgZXJyb3IpIG11dGFibGUgewogICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGVycm9yKSk7CiAgICAgfSk7CiB9CiAKIHN0ZDo6
b3B0aW9uYWw8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiBDYWNoZXM6OnJlYWRPcmlnaW4oY29uc3Qg
RGF0YSYgZGF0YSkKIHsKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0
YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRl
Y29kZXIgeyBkYXRhIH07CiAKICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlNlY3VyaXR5T3Jp
Z2luRGF0YT4gdG9wT3JpZ2luOwogICAgIGRlY29kZXIgPj4gdG9wT3JpZ2luOwpAQCAtNDA0LDEy
ICs0MDQsMTMgQEAgc3RhdGljIGlubGluZSBEYXRhIGVuY29kZUNhY2hlTmFtZXMoY29ucwogICAg
ICAgICBlbmNvZGVyIDw8IGNhY2hlLnVuaXF1ZU5hbWUoKTsKICAgICB9CiAKLSAgICByZXR1cm4g
RGF0YSB7IGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpIH07CisgICAgcmV0
dXJuIERhdGEgeyBlbmNvZGVyLmJ1ZmZlcigpIH07CiB9CiAKIHN0YXRpYyBpbmxpbmUgRXhwZWN0
ZWQ8VmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+LCBFcnJvcj4gZGVjb2RlQ2FjaGVz
TmFtZXMoY29uc3QgRGF0YSYgZGF0YSkKIHsKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVy
IGRlY29kZXIoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNl
OjpEZWNvZGVyIGRlY29kZXIgeyBkYXRhIH07CisKICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90
PiBjb3VudDsKICAgICBkZWNvZGVyID4+IGNvdW50OwogICAgIGlmICghY291bnQpCkluZGV4OiBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRGF0YS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcg
KzQyLDcgQEAgbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiBEYXRhIERhdGE6Om1hcFRvRmlsZShj
b25zdCBTdHJpbmcmIHBhdGgpIGNvbnN0CiB7CiAgICAgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxl
SGFuZGxlIGhhbmRsZTsKLSAgICBhdXRvIGFwcGx5RGF0YSA9IFsmXShjb25zdCBGdW5jdGlvbjxi
b29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYgYXBwbGllcikgeyBhcHBseShhcHBsaWVyKTsg
fTsKKyAgICBhdXRvIGFwcGx5RGF0YSA9IFsmXShjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29u
c3Qgc3RkOjpieXRlPik+JiBhcHBsaWVyKSB7IGFwcGx5KGFwcGxpZXIpOyB9OwogICAgIGF1dG8g
bWFwcGVkRmlsZSA9IEZpbGVTeXN0ZW06Om1hcFRvRmlsZShwYXRoLCBzaXplKCksIFdURk1vdmUo
YXBwbHlEYXRhKSwgJmhhbmRsZSk7CiAgICAgaWYgKCFtYXBwZWRGaWxlKQogICAgICAgICByZXR1
cm4geyB9OwpAQCAtODYsOSArODYsOSBAQCBEYXRhIGFkb3B0QW5kTWFwRmlsZShGaWxlU3lzdGVt
OjpQbGF0Zm9yCiBTSEExOjpEaWdlc3QgY29tcHV0ZVNIQTEoY29uc3QgRGF0YSYgZGF0YSwgY29u
c3QgU2FsdCYgc2FsdCkKIHsKICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhzYWx0
LmRhdGEoKSwgc2FsdC5zaXplKCkpOwotICAgIGRhdGEuYXBwbHkoWyZzaGExXShjb25zdCB1aW50
OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgewotICAgICAgICBzaGExLmFkZEJ5dGVzKGRhdGEsIHNp
emUpOworICAgIHNoYTEuYWRkQnl0ZXMoc2FsdCk7CisgICAgZGF0YS5hcHBseShbJnNoYTFdKFNw
YW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhKSB7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoZGF0YSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0pOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaAkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDx3
dGYvRmlsZVN5c3RlbS5oPgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbkRpc3BhdGNoZXIuaD4KICNp
bmNsdWRlIDx3dGYvU0hBMS5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3Rm
L1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKQEAgLTUyLDggKzUzLDE0IEBAIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCiBjbGFzcyBE
YXRhIHsKIHB1YmxpYzoKKyAgICB1c2luZyB2YWx1ZV90eXBlID0gdWludDhfdDsKKwogICAgIERh
dGEoKSB7IH0KICAgICBEYXRhKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOworICAgIERhdGEoU3Bh
bjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpCisgICAgICAgIDogRGF0YShyZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKQorICAgIHsKKyAgICB9
CiAKICAgICB+RGF0YSgpIHsgfQogCkBAIC03NCwxMiArODEsMTMgQEAgcHVibGljOgogCiAgICAg
Y29uc3QgdWludDhfdCogZGF0YSgpIGNvbnN0OwogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaXplOyB9CisKICAgICBib29sIGlzTWFwKCkgY29uc3QgeyByZXR1cm4gbV9pc01h
cDsgfQogICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHRyeUNyZWF0ZVNoYXJlZE1lbW9yeSgpIGNv
bnN0OwogCiAgICAgRGF0YSBzdWJyYW5nZShzaXplX3Qgb2Zmc2V0LCBzaXplX3QpIGNvbnN0Owog
Ci0gICAgYm9vbCBhcHBseShjb25zdCBGdW5jdGlvbjxib29sIChjb25zdCB1aW50OF90Kiwgc2l6
ZV90KT4mKSBjb25zdDsKKyAgICBib29sIGFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2wgKFNwYW48
Y29uc3Qgc3RkOjpieXRlPik+JikgY29uc3Q7CiAKICAgICBEYXRhIG1hcFRvRmlsZShjb25zdCBT
dHJpbmcmIHBhdGgpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVEYXRhQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTY5LDEyICs2OSwxMiBAQCBib29s
IERhdGE6OmlzTnVsbCgpIGNvbnN0CiAgICAgcmV0dXJuICFtX2Rpc3BhdGNoRGF0YTsKIH0KIAot
Ym9vbCBEYXRhOjphcHBseShjb25zdCBGdW5jdGlvbjxib29sIChjb25zdCB1aW50OF90Kiwgc2l6
ZV90KT4mIGFwcGxpZXIpIGNvbnN0Citib29sIERhdGE6OmFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJv
b2wgKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+JiBhcHBsaWVyKSBjb25zdAogewogICAgIGlmICgh
bV9zaXplKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIGRpc3BhdGNoX2RhdGFf
YXBwbHkobV9kaXNwYXRjaERhdGEuZ2V0KCksIFsmYXBwbGllcl0oZGlzcGF0Y2hfZGF0YV90LCBz
aXplX3QsIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gICAgICAgIHJldHVybiBh
cHBsaWVyKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgc2l6ZSk7CisgICAgICAg
IHJldHVybiBhcHBsaWVyKFNwYW4geyBzdGF0aWNfY2FzdDxjb25zdCBzdGQ6OmJ5dGUqPihkYXRh
KSwgc2l6ZSB9KTsKICAgICB9KTsKIH0KIApAQCAtOTQsMTQgKzk0LDExIEBAIERhdGEgY29uY2F0
ZW5hdGUoY29uc3QgRGF0YSYgYSwgY29uc3QgRGEKIAogRGF0YSBEYXRhOjphZG9wdE1hcChGaWxl
U3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIG1hcHBlZEZpbGUsIEZpbGVTeXN0ZW06OlBsYXRmb3Jt
RmlsZUhhbmRsZSBmZCkKIHsKLSAgICBzaXplX3Qgc2l6ZSA9IG1hcHBlZEZpbGUuc2l6ZSgpOwot
ICAgIHZvaWQqIG1hcCA9IG1hcHBlZEZpbGUubGVha0hhbmRsZSgpOwotICAgIEFTU0VSVChtYXAp
OwotICAgIEFTU0VSVChtYXAgIT0gTUFQX0ZBSUxFRCk7CisgICAgYXV0byBtYXAgPSBtYXBwZWRG
aWxlLmxlYWtIYW5kbGUoKTsKKyAgICBBU1NFUlQobWFwLmRhdGEoKSk7CisgICAgQVNTRVJUKG1h
cC5kYXRhKCkgIT0gTUFQX0ZBSUxFRCk7CiAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGZkKTsK
LSAgICBhdXRvIGJvZHlNYXAgPSBhZG9wdE9TT2JqZWN0KGRpc3BhdGNoX2RhdGFfY3JlYXRlKG1h
cCwgc2l6ZSwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklU
WV9ERUZBVUxULCAwKSwgW21hcCwgc2l6ZV0gewotICAgICAgICBtdW5tYXAobWFwLCBzaXplKTsK
LSAgICB9KSk7CisgICAgYXV0byBib2R5TWFwID0gYWRvcHRPU09iamVjdChkaXNwYXRjaF9kYXRh
X2NyZWF0ZShtYXAuZGF0YSgpLCBtYXAuc2l6ZSgpLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVl
KERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCBESVNQQVRDSF9EQVRBX0RFU1RS
VUNUT1JfTVVOTUFQKSk7CiAgICAgcmV0dXJuIHsgV1RGTW92ZShib2R5TWFwKSwgRGF0YTo6QmFj
a2luZzo6TWFwIH07CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCShyZXZpc2lvbiAyNzg4MDkp
CisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksMTAgKzk5LDEwIEBAIFN0b3JhZ2U6OlJlY29yZCBF
bnRyeTo6ZW5jb2RlQXNTdG9yYWdlUmUKICAgICAKICAgICBlbmNvZGVyLmVuY29kZUNoZWNrc3Vt
KCk7CiAKLSAgICBEYXRhIGhlYWRlcihlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNp
emUoKSk7CisgICAgRGF0YSBoZWFkZXIgeyBlbmNvZGVyLmJ1ZmZlcigpIH07CiAgICAgRGF0YSBi
b2R5OwogICAgIGlmIChtX2J1ZmZlcikKLSAgICAgICAgYm9keSA9IHsgbV9idWZmZXItPmRhdGEo
KSwgbV9idWZmZXItPnNpemUoKSB9OworICAgICAgICBib2R5ID0geyBtX2J1ZmZlci0+Ynl0ZXMo
KSB9OwogCiAgICAgcmV0dXJuIHsgbV9rZXksIG1fdGltZVN0YW1wLCBoZWFkZXIsIGJvZHksIHsg
fSB9OwogfQpAQCAtMTExLDcgKzExMSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gRW50cnk6
OmRlY29kZVN0b3IKIHsKICAgICBhdXRvIGVudHJ5ID0gbWFrZVVuaXF1ZTxFbnRyeT4oc3RvcmFn
ZUVudHJ5KTsKIAotICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihzdG9yYWdl
RW50cnkuaGVhZGVyLmRhdGEoKSwgc3RvcmFnZUVudHJ5LmhlYWRlci5zaXplKCkpOworICAgIFdU
Rjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlciB7IHN0b3JhZ2VFbnRyeS5oZWFkZXIgfTsK
ICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwogICAgIGlmICghV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZTo6ZGVjb2RlKGRlY29kZXIsIHJlc3BvbnNlKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC0xOTEsNyArMTkxLDcgQEAgdm9pZCBFbnRyeTo6aW5pdGlhbGl6
ZUJ1ZmZlckZyb21TdG9yYWdlUgogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgot
ICAgIG1fYnVmZmVyID0gV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUobV9zb3VyY2VTdG9y
YWdlUmVjb3JkLmJvZHkuZGF0YSgpLCBtX3NvdXJjZVN0b3JhZ2VSZWNvcmQuYm9keS5zaXplKCkp
OworICAgIG1fYnVmZmVyID0gV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUobV9zb3VyY2VT
dG9yYWdlUmVjb3JkLmJvZHkpOwogfQogCiBXZWJDb3JlOjpTaGFyZWRCdWZmZXIqIEVudHJ5Ojpi
dWZmZXIoKSBjb25zdApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVLZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04OCwxMyArODgsMTMgQEAgc3RhdGljIHZvaWQgaGFzaFN0cmluZyhTSEEx
JiBzaGExLCBjb25zdAogCiAgICAgaWYgKHN0cmluZy5pczhCaXQoKSAmJiBzdHJpbmcuaXNBbGxB
U0NJSSgpKSB7CiAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbnVsbEJ5dGUgPSAwOwotICAgICAgICBz
aGExLmFkZEJ5dGVzKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAg
ICAgICBzaGExLmFkZEJ5dGVzKCZudWxsQnl0ZSwgMSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMo
U3BhbiB7IHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkgfSk7CisgICAgICAg
IHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZudWxsQnl0ZSwgMSB9KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBhdXRvIGNTdHJpbmcgPSBzdHJpbmcudXRmOCgpOwogICAgIC8vIEluY2x1ZGUg
dGVybWluYXRpbmcgbnVsbCBieXRlLgotICAgIHNoYTEuYWRkQnl0ZXMoY1N0cmluZy5kYXRhQXNV
SW50OFB0cigpLCBjU3RyaW5nLmxlbmd0aCgpICsgMSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFu
IHsgY1N0cmluZy5kYXRhQXNVSW50OFB0cigpLCBjU3RyaW5nLmxlbmd0aCgpICsgMSB9KTsKIH0K
IAogS2V5OjpIYXNoVHlwZSBLZXk6OmNvbXB1dGVIYXNoKGNvbnN0IFNhbHQmIHNhbHQpIGNvbnN0
CkBAIC0xMDIsNyArMTAyLDcgQEAgS2V5OjpIYXNoVHlwZSBLZXk6OmNvbXB1dGVIYXNoKGNvbnN0
IFNhbAogICAgIC8vIFdlIGRvbid0IHJlYWxseSBuZWVkIGEgY3J5cHRvZ3JhcGhpYyBoYXNoLiBU
aGUga2V5IGlzIGFsd2F5cyB2ZXJpZmllZCBhZ2FpbnN0IHRoZSBlbnRyeSBoZWFkZXIuCiAgICAg
Ly8gU0hBMSBqdXN0IGhhcHBlbnMgdG8gYmUgc3VpdGFibHkgc2l6ZWQsIGZhc3QgYW5kIGF2YWls
YWJsZS4KICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhzYWx0LmRhdGEoKSwgc2Fs
dC5zaXplKCkpOworICAgIHNoYTEuYWRkQnl0ZXMoc2FsdCk7CiAKICAgICBoYXNoU3RyaW5nKHNo
YTEsIG1fcGFydGl0aW9uKTsKICAgICBoYXNoU3RyaW5nKHNoYTEsIG1fdHlwZSk7CkBAIC0xMTcs
NyArMTE3LDcgQEAgS2V5OjpIYXNoVHlwZSBLZXk6OmNvbXB1dGVIYXNoKGNvbnN0IFNhbAogS2V5
OjpIYXNoVHlwZSBLZXk6OmNvbXB1dGVQYXJ0aXRpb25IYXNoKGNvbnN0IFNhbHQmIHNhbHQpIGNv
bnN0CiB7CiAgICAgU0hBMSBzaGExOwotICAgIHNoYTEuYWRkQnl0ZXMoc2FsdC5kYXRhKCksIHNh
bHQuc2l6ZSgpKTsKKyAgICBzaGExLmFkZEJ5dGVzKHNhbHQpOwogCiAgICAgaGFzaFN0cmluZyhz
aGExLCBtX3BhcnRpdGlvbik7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVTdG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU0LDggKzQ1NCw4IEBAIHN0cnVjdCBS
ZWNvcmRNZXRhRGF0YSB7CiBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlUmVj
b3JkTWV0YURhdGEoUmVjb3JkTWV0YURhdGEmIG1ldGFEYXRhLCBjb25zdCBEYXRhJiBmaWxlRGF0
YSkKIHsKICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBmaWxlRGF0YS5hcHBseShbJm1l
dGFEYXRhLCAmc3VjY2Vzc10oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAg
ICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOworICAg
IGZpbGVEYXRhLmFwcGx5KFsmbWV0YURhdGEsICZzdWNjZXNzXShTcGFuPGNvbnN0IHN0ZDo6Ynl0
ZT4gZGF0YSkgeworICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyBk
YXRhIH07CiAgICAgICAgIAogICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBjYWNoZVN0
b3JhZ2VWZXJzaW9uOwogICAgICAgICBkZWNvZGVyID4+IGNhY2hlU3RvcmFnZVZlcnNpb247CkBA
IC01ODYsNyArNTg2LDcgQEAgc3RhdGljIERhdGEgZW5jb2RlUmVjb3JkTWV0YURhdGEoY29uc3Qg
UgogCiAgICAgZW5jb2Rlci5lbmNvZGVDaGVja3N1bSgpOwogCi0gICAgcmV0dXJuIERhdGEoZW5j
b2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOworICAgIHJldHVybiB7IGVuY29k
ZXIuYnVmZmVyKCkgfTsKIH0KIAogc3RkOjpvcHRpb25hbDxCbG9iU3RvcmFnZTo6QmxvYj4gU3Rv
cmFnZTo6c3RvcmVCb2R5QXNCbG9iKFdyaXRlT3BlcmF0aW9uJiB3cml0ZU9wZXJhdGlvbikKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVz
b3VyY2VzRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1
YnJlc291cmNlc0VudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDE0ICsxMjMsMTQgQEAg
U3RvcmFnZTo6UmVjb3JkIFN1YnJlc291cmNlc0VudHJ5OjplbmNvZAogCiAgICAgZW5jb2Rlci5l
bmNvZGVDaGVja3N1bSgpOwogCi0gICAgcmV0dXJuIHsgbV9rZXksIG1fdGltZVN0YW1wLCB7IGVu
Y29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpIH0sIHsgfSwgeyB9fTsKKyAgICBy
ZXR1cm4geyBtX2tleSwgbV90aW1lU3RhbXAsIHsgZW5jb2Rlci5idWZmZXIoKSB9LCB7IH0sIHsg
fX07CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTdWJyZXNvdXJjZXNFbnRyeT4gU3VicmVzb3VyY2Vz
RW50cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQoY29uc3QgU3RvcmFnZTo6UmVjb3JkJiBzdG9yYWdl
RW50cnkpCiB7CiAgICAgYXV0byBlbnRyeSA9IG1ha2VVbmlxdWU8U3VicmVzb3VyY2VzRW50cnk+
KHN0b3JhZ2VFbnRyeSk7CiAKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIo
c3RvcmFnZUVudHJ5LmhlYWRlci5kYXRhKCksIHN0b3JhZ2VFbnRyeS5oZWFkZXIuc2l6ZSgpKTsK
KyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyBzdG9yYWdlRW50cnkuaGVh
ZGVyIH07CiAgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8U3VicmVzb3VyY2VJbmZvPj4gc3VicmVz
b3VyY2VzOwogICAgIGRlY29kZXIgPj4gc3VicmVzb3VyY2VzOwogICAgIGlmICghc3VicmVzb3Vy
Y2VzKQpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2Rlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXIuaAko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRD
b2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSwxMyArNzksMTMgQEAgc3RydWN0IEFyZ3VtZW50
Q29kZXI8VCwgdHlwZW5hbWUgc3RkOjplbgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+
CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIFQgdmFsdWUpCiAgICAg
ewotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQ4X3QqPigmdmFsdWUpLCBzaXplb2YoVCksIGFsaWdub2YoVCkpOworICAgICAg
ICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJnZhbHVlLCAxIH0pOwogICAg
IH0KIAogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFQ+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQogICAgIHsKICAgICAgICAgVCByZXN1bHQ7Ci0gICAgICAgIGlmIChkZWNvZGVyLmRlY29kZUZp
eGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmcmVzdWx0KSwgc2l6ZW9m
KFQpLCBhbGlnbm9mKFQpKSkKKyAgICAgICAgaWYgKGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhE
YXRhKFNwYW4geyAmcmVzdWx0LCAxIH0pKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBT
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBBcmd1bWVudENvZGVyPENTdHJpbmc+OjplbmNvZGUo
RW5jbwogCiAgICAgdWludDMyX3QgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwogICAgIGVuY29k
ZXIgPDwgbGVuZ3RoOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0cmluZy5k
YXRhQXNVSW50OFB0cigpLCBsZW5ndGgsIDEpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKHN0cmluZy5ieXRlcygpKTsKIH0KIAogV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgQXJn
dW1lbnRDb2RlcjxDU3RyaW5nPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIENTdHJpbmcmIHJl
c3VsdCkKQEAgLTEwMyw3ICsxMDMsNyBAQCBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBBcmd1bWVu
dENvZGVyPENTCiAKICAgICBjaGFyKiBidWZmZXI7CiAgICAgQ1N0cmluZyBzdHJpbmcgPSBDU3Ry
aW5nOjpuZXdVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1ZmZlciks
IGxlbmd0aCwgMSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFu
IHsgYnVmZmVyLCBsZW5ndGggfSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJlc3Vs
dCA9IHN0cmluZzsKQEAgLTEyMywxMSArMTIzLDcgQEAgdm9pZCBBcmd1bWVudENvZGVyPFN0cmlu
Zz46OmVuY29kZShFbmNvZAogICAgIGJvb2wgaXM4Qml0ID0gc3RyaW5nLmlzOEJpdCgpOwogCiAg
ICAgZW5jb2RlciA8PCBsZW5ndGggPDwgaXM4Qml0OwotCi0gICAgaWYgKGlzOEJpdCkKLSAgICAg
ICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RyaW5nLmNoYXJhY3RlcnM4KCksIGxl
bmd0aCAqIHNpemVvZihMQ2hhciksIGFsaWdub2YoTENoYXIpKTsKLSAgICBlbHNlCi0gICAgICAg
IGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KHN0cmluZy5jaGFyYWN0ZXJzMTYoKSksIGxlbmd0aCAqIHNpemVvZihVQ2hhciksIGFs
aWdub2YoVUNoYXIpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShzdHJpbmcu
Ynl0ZXMoKSk7CiB9CiB0ZW1wbGF0ZQogdm9pZCBBcmd1bWVudENvZGVyPFN0cmluZz46OmVuY29k
ZTxFbmNvZGVyPihFbmNvZGVyJiwgY29uc3QgU3RyaW5nJik7CkBAIC0xNDMsNyArMTM5LDcgQEAg
c3RhdGljIGlubGluZSBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gZGVjbwogICAgIAogICAgIENoYXJh
Y3RlclR5cGUqIGJ1ZmZlcjsKICAgICBTdHJpbmcgc3RyaW5nID0gU3RyaW5nOjpjcmVhdGVVbmlu
aXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1ZmZlciksIGxlbmd0aCAqIHNp
emVvZihDaGFyYWN0ZXJUeXBlKSwgYWxpZ25vZihDaGFyYWN0ZXJUeXBlKSkpCisgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgYnVmZmVyLCBsZW5ndGggfSkpCiAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgCiAgICAgcmV0dXJuIHN0cmluZzsKQEAg
LTE4MSwxMiArMTc3LDEyIEBAIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIEFyZ3VtZW50Q29kZXI8
U3QKIAogdm9pZCBBcmd1bWVudENvZGVyPFNIQTE6OkRpZ2VzdD46OmVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBTSEExOjpEaWdlc3QmIGRpZ2VzdCkKIHsKLSAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3QuZGF0YSgpLCBzaXplb2YoZGlnZXN0KSwgMSk7CisgICAg
ZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0KTsKIH0KIAogV0FSTl9VTlVTRURf
UkVUVVJOIGJvb2wgQXJndW1lbnRDb2RlcjxTSEExOjpEaWdlc3Q+OjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlciwgU0hBMTo6RGlnZXN0JiBkaWdlc3QpCiB7Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpLCAxKTsKKyAg
ICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0KTsKIH0KIAogI2lm
IEhBVkUoQVVESVRfVE9LRU4pCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1
bWVudENvZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Fy
Z3VtZW50Q29kZXJzLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEyICs0NSwxMiBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgU2ltcGxlQXJndW1lCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRW5jb2Rlcj4KICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rl
ciwgY29uc3QgVCYgdCkKICAgICB7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZ0KSwgc2l6ZW9mKFQpLCBhbGln
bm9mKFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZ0
LCAxIH0pOwogICAgIH0KIAogICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlciwgVCYgdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBkZWNvZGVy
LmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdCksIHNp
emVvZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVk
TGVuZ3RoRGF0YShTcGFuIHsgJnQsIDEgfSk7CiAgICAgfQogfTsKIApAQCAtNjEsMTMgKzYxLDE0
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBFeHRlbnQ+IHN0cnUKICAgICB7CiAgICAg
ICAgIGlmICghRXh0ZW50KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBlbmNvZGVyLmVu
Y29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihhcnJh
eVJlZmVyZW5jZS5kYXRhKCkpLCBhcnJheVJlZmVyZW5jZS5zaXplKCkgKiBzaXplb2YoVCksIGFs
aWdub2YoVCkpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsg
YXJyYXlSZWZlcmVuY2UuZGF0YSgpLCBhcnJheVJlZmVyZW5jZS5zaXplKCkgfSk7CiAgICAgfQog
ICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEFycmF5UmVmZXJlbmNlVHlwZT4gZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCiAgICAgewogICAgICAgICBpZiAoIUV4dGVudCkKICAgICAgICAgICAgIHJl
dHVybiBBcnJheVJlZmVyZW5jZVR5cGUoKTsKLSAgICAgICAgY29uc3QgdWludDhfdCogZGF0YSA9
IGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhSZWZlcmVuY2UoRXh0ZW50ICogc2l6ZW9mKFQpLCBh
bGlnbm9mKFQpKTsKKworICAgICAgICBjb25zdCBhdXRvKiBkYXRhID0gZGVjb2Rlci5kZWNvZGVG
aXhlZExlbmd0aFJlZmVyZW5jZShFeHRlbnQgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpOwogICAg
ICAgICBpZiAoIWRhdGEpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAg
ICByZXR1cm4gQXJyYXlSZWZlcmVuY2VUeXBlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KGRh
dGEpLCBFeHRlbnQpOwpAQCAtODIsNyArODMsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQXJndW1lbnRDb2RlCiAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KGFycmF5UmVmZXJlbmNlLnNpemUoKSk7CiAgICAgICAgIGlmICghYXJyYXlSZWZlcmVuY2Uuc2l6
ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihhcnJheVJlZmVyZW5jZS5k
YXRhKCkpLCBhcnJheVJlZmVyZW5jZS5zaXplKCkgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpOwor
ICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgYXJyYXlSZWZlcmVu
Y2UuZGF0YSgpLCBhcnJheVJlZmVyZW5jZS5zaXplKCkgfSk7CiAgICAgfQogICAgIHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPEFycmF5UmVmZXJlbmNlVHlwZT4gZGVjb2RlKERlY29kZXImIGRlY29kZXIp
CiAgICAgewpAQCAtOTYsNyArOTcsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQXJn
dW1lbnRDb2RlCiAgICAgICAgIGlmIChVTkxJS0VMWShkYXRhU2l6ZS5oYXNPdmVyZmxvd2VkKCkp
KQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgICAgICBjb25zdCB1aW50
OF90KiBkYXRhID0gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aFJlZmVyZW5jZShkYXRhU2l6ZSwg
YWxpZ25vZihUKSk7CisgICAgICAgIGNvbnN0IGF1dG8qIGRhdGEgPSBkZWNvZGVyLmRlY29kZUZp
eGVkTGVuZ3RoUmVmZXJlbmNlKGRhdGFTaXplLCBhbGlnbm9mKFQpKTsKICAgICAgICAgaWYgKCFk
YXRhKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAgICAgcmV0dXJuIEFy
cmF5UmVmZXJlbmNlVHlwZShyZWludGVycHJldF9jYXN0PGNvbnN0IFQqPihkYXRhKSwgc3RhdGlj
X2Nhc3Q8c2l6ZV90PihzaXplKSk7CkBAIC00MjMsNyArNDI0LDcgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
ciwgbWluQ2FwYWNpdHk+JiB2ZWN0b3IpCiAgICAgewogICAgICAgICBlbmNvZGVyIDw8IHN0YXRp
Y19jYXN0PHVpbnQ2NF90Pih2ZWN0b3Iuc2l6ZSgpKTsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVG
aXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4odmVjdG9yLmRh
dGEoKSksIHZlY3Rvci5zaXplKCkgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpOworICAgICAgICBl
bmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YSh2ZWN0b3IpOwogICAgIH0KICAgICAKICAgICBz
dGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mIHZl
Y3RvcikKQEAgLTQ0Niw3ICs0NDcsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpCiAgICAgICAgIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5k
bGVyLCBtaW5DYXBhY2l0eT4gdGVtcDsKICAgICAgICAgdGVtcC5ncm93KHNpemUpOwogCi0gICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4odGVtcC5kYXRhKCkpLCBzaXplICogc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKSkKKyAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YSh0ZW1wKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICB2ZWN0b3Iuc3dhcCh0ZW1wKTsKQEAgLTQ3Myw3
ICs0NzQsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpCiAgICAg
ICAgIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0
eT4gdmVjdG9yOwogICAgICAgICB2ZWN0b3IuZ3JvdyhzaXplKTsKIAotICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHZl
Y3Rvci5kYXRhKCkpLCBzaXplICogc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKSkKKyAgICAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YSh2ZWN0b3IpKQogICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgICAgICByZXR1cm4gdmVjdG9yOwpJbmRleDogU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJyYXlSZWZlcmVuY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9BcnJheVJlZmVyZW5jZS5oCShyZXZpc2lvbiAyNzg4MDkp
CisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9BcnJheVJlZmVyZW5jZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2ICszMCw4IEBACiAKIG5hbWVzcGFjZSBJUEMgewogCisvLyBGSVhNRTog
UmVwbGFjZSB3aXRoIDx3dGYvU3Bhbi5oPgorCiBpbmxpbmUgY29uc3RleHByIHNpemVfdCBhcnJh
eVJlZmVyZW5jZUR5bmFtaWNFeHRlbnQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1h
eCgpOwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IEV4dGVudCA9IGFycmF5UmVmZXJl
bmNlRHluYW1pY0V4dGVudD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29k
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIu
Y3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNv
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDEzICsyMDYsMTMgQEAgYm9vbCBEZWNvZGVy
OjpidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YQogICAgIHJldHVybiBhbGlnbmVkQnVmZmVySXNM
YXJnZUVub3VnaFRvQ29udGFpbihyb3VuZFVwVG9BbGlnbm1lbnQobV9idWZmZXJQb3MsIGFsaWdu
bWVudCksIG1fYnVmZmVyLCBtX2J1ZmZlckVuZCwgc2l6ZSk7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6
ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBzaXplX3Qg
YWxpZ25tZW50KQorYm9vbCBEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbjxzdGQ6
OmJ5dGU+IGRhdGEsIHNpemVfdCBhbGlnbm1lbnQpCiB7Ci0gICAgaWYgKCFhbGlnbkJ1ZmZlclBv
c2l0aW9uKGFsaWdubWVudCwgc2l6ZSkpCisgICAgaWYgKCFhbGlnbkJ1ZmZlclBvc2l0aW9uKGFs
aWdubWVudCwgZGF0YS5zaXplKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtZW1j
cHkoZGF0YSwgbV9idWZmZXJQb3MsIHNpemUpOwotICAgIG1fYnVmZmVyUG9zICs9IHNpemU7Cisg
ICAgbWVtY3B5KGRhdGEuZGF0YSgpLCBtX2J1ZmZlclBvcywgZGF0YS5zaXplKCkpOworICAgIG1f
YnVmZmVyUG9zICs9IGRhdGEuc2l6ZSgpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcg
Kzc5LDEzIEBAIHB1YmxpYzoKICAgICBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBpc1ZhbGlkKCkg
Y29uc3QgeyByZXR1cm4gbV9idWZmZXJQb3MgIT0gbnVsbHB0cjsgfQogICAgIHZvaWQgbWFya0lu
dmFsaWQoKSB7IG1fYnVmZmVyUG9zID0gbnVsbHB0cjsgfQogCi0gICAgV0FSTl9VTlVTRURfUkVU
VVJOIGJvb2wgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqIGRhdGEsIHNpemVfdCwgc2l6
ZV90IGFsaWdubWVudCk7CisgICAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKFNwYW48c3RkOjpieXRlPiwgc2l6ZV90IGFsaWdubWVudCk7CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZUZpeGVk
TGVuZ3RoRGF0YShUJiYgZGF0YSwgc2l6ZV90IGFsaWdubWVudCA9IGFsaWdub2YodHlwZW5hbWUg
ZGVjbHR5cGUoU3BhbihzdGQ6OmRlY2x2YWw8VD4oKSkpOjp2YWx1ZV90eXBlKSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBkZWNvZGVGaXhlZExlbmd0aERhdGEoYXNXcml0YWJsZUJ5dGVzKFNwYW4g
eyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSksIGFsaWdubWVudCk7CisgICAgfQogCiAgICAgLy8g
VGhlIGRhdGEgaW4gdGhlIHJldHVybmVkIHBvaW50ZXIgaGVyZSB3aWxsIG9ubHkgYmUgdmFsaWQg
Zm9yIHRoZSBsaWZldGltZSBvZiB0aGUgRGVjb2RlciBvYmplY3QuCiAgICAgLy8gUmV0dXJucyBu
dWxscHRyIG9uIGZhaWx1cmUuCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNv
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVy
LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5j
b2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiwxMiArMjAyLDEyIEBAIHVpbnQ4X3QqIEVu
Y29kZXI6Omdyb3coc2l6ZV90IGFsaWdubWVudCwKICAgICByZXR1cm4gbV9idWZmZXIgKyBhbGln
bmVkU2l6ZTsKIH0KIAotdm9pZCBFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3Qg
dWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQpCit2b2lkIEVuY29k
ZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSwgc2l6
ZV90IGFsaWdubWVudCkKIHsKLSAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4oZGF0YSkgJSBhbGlnbm1lbnQpKTsKKyAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4oZGF0YS5kYXRhKCkpICUgYWxpZ25tZW50KSk7CiAKLSAgICB1aW50OF90KiBidWZm
ZXIgPSBncm93KGFsaWdubWVudCwgc2l6ZSk7Ci0gICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6
ZSk7CisgICAgYXV0byogYnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQsIGRhdGEuc2l6ZSgpKTsKKyAg
ICBtZW1jcHkoYnVmZmVyLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwogfQogCiB2b2lkIEVu
Y29kZXI6OmFkZEF0dGFjaG1lbnQoQXR0YWNobWVudCYmIGF0dGFjaG1lbnQpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMx
LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorI2luY2x1ZGUgPHd0Zi9TcGFu
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSVBDIHsKQEAgLTYwLDcg
KzYxLDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgd3JhcEZvclRlc3RpbmcoVW5pcXVlUmVmPEVu
Y29kZXI+JiYpOwogCi0gICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhf
dCogZGF0YSwgc2l6ZV90LCBzaXplX3QgYWxpZ25tZW50KTsKKyAgICB2b2lkIGVuY29kZUZpeGVk
TGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSwgc2l6ZV90IGFsaWdubWVudCk7
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKFQmJiBkYXRhLCBzaXplX3QgYWxpZ25tZW50ID0gYWxpZ25vZih0eXBlbmFtZSBkZWNsdHlw
ZShTcGFuKHN0ZDo6ZGVjbHZhbDxUPigpKSk6OnZhbHVlX3R5cGUpKQorICAgIHsKKyAgICAgICAg
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGFzQnl0ZXMoU3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihkYXRh
KSB9KSwgYWxpZ25tZW50KTsKKyAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAg
IEVuY29kZXImIG9wZXJhdG9yPDwoVCYmIHQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0lQQy9TaGFyZWRCdWZmZXJDb3B5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0lQQy9TaGFyZWRCdWZmZXJDb3B5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU2hhcmVkQnVmZmVyQ29weS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDcgKzQzLDcgQEAgdm9pZCBTaGFyZWRCdWZmZXJDb3B5OjplbmNvZGUoRW5jb2Rl
ciYgZQogICAgIGlmICghYnVmZmVyU2l6ZSkKICAgICAgICAgcmV0dXJuOwogICAgIGZvciAoYXV0
byYgc2VnbWVudCA6ICptX2J1ZmZlcikKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEoc2VnbWVudC5zZWdtZW50LT5kYXRhKCksIHNlZ21lbnQuc2VnbWVudC0+c2l6ZSgpLCAx
KTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc2VnbWVudC5zZWdtZW50
LT5ieXRlcygpKTsKIH0KIAogc3RkOjpvcHRpb25hbDxTaGFyZWRCdWZmZXJDb3B5PiBTaGFyZWRC
dWZmZXJDb3B5OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25FbmNvZGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlvbkVuY29kZXIuaAkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlv
bkVuY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAi
QXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJNZXNzYWdlTmFtZXMuaCIKKyNpbmNsdWRlIDx3
dGYvU3Bhbi5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIElQ
QyB7CkBAIC01MywyMiArNTQsMjggQEAgcHVibGljOgogCiAgICAgflN0cmVhbUNvbm5lY3Rpb25F
bmNvZGVyKCkgPSBkZWZhdWx0OwogCi0gICAgYm9vbCBlbmNvZGVGaXhlZExlbmd0aERhdGEoY29u
c3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQpCisgICAgYm9v
bCBlbmNvZGVGaXhlZExlbmd0aERhdGEoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEsIHNpemVf
dCBhbGlnbm1lbnQpCiAgICAgewogICAgICAgICBzaXplX3QgYnVmZmVyUG9pbnRlciA9IHN0YXRp
Y19jYXN0PHNpemVfdD4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9idWZmZXIgKyBtX2Vu
Y29kZWRTaXplKSk7CiAgICAgICAgIHNpemVfdCBuZXdCdWZmZXJQb2ludGVyID0gcm91bmRVcFRv
TXVsdGlwbGVPZihhbGlnbm1lbnQsIGJ1ZmZlclBvaW50ZXIpOwogICAgICAgICBpZiAobmV3QnVm
ZmVyUG9pbnRlciA8IGJ1ZmZlclBvaW50ZXIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIGludHB0cl90IGFsaWduZWRTaXplID0gbV9lbmNvZGVkU2l6ZSArIChuZXdCdWZmZXJQ
b2ludGVyIC0gYnVmZmVyUG9pbnRlcik7Ci0gICAgICAgIGlmICghcmVzZXJ2ZShhbGlnbmVkU2l6
ZSwgc2l6ZSkpCisgICAgICAgIGlmICghcmVzZXJ2ZShhbGlnbmVkU2l6ZSwgZGF0YS5zaXplKCkp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB1aW50OF90KiBidWZmZXIgPSBt
X2J1ZmZlciArIGFsaWduZWRTaXplOwotICAgICAgICBtZW1jcHkoYnVmZmVyLCBkYXRhLCBzaXpl
KTsKLSAgICAgICAgbV9lbmNvZGVkU2l6ZSA9IGFsaWduZWRTaXplICsgc2l6ZTsKKyAgICAgICAg
YXV0byogYnVmZmVyID0gbV9idWZmZXIgKyBhbGlnbmVkU2l6ZTsKKyAgICAgICAgbWVtY3B5KGJ1
ZmZlciwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICAgICAgbV9lbmNvZGVkU2l6ZSA9
IGFsaWduZWRTaXplICsgZGF0YS5zaXplKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERh
dGEoVCYmIGRhdGEsIHNpemVfdCBhbGlnbm1lbnQgPSBhbGlnbm9mKHR5cGVuYW1lIGRlY2x0eXBl
KFNwYW4oc3RkOjpkZWNsdmFsPFQ+KCkpKTo6dmFsdWVfdHlwZSkpCisgICAgeworICAgICAgICBl
bmNvZGVGaXhlZExlbmd0aERhdGEoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEp
IH0pLCBhbGlnbm1lbnQpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAg
U3RyZWFtQ29ubmVjdGlvbkVuY29kZXImIG9wZXJhdG9yPDwoVCYmIHQpCiAgICAgewogICAgICAg
ICBBcmd1bWVudENvZGVyPHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNl
X3Q8VD4+LCB2b2lkPjo6ZW5jb2RlKCp0aGlzLCBzdGQ6OmZvcndhcmQ8VD4odCkpOwpJbmRleDog
U291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCShyZXZp
c2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2Rl
cnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNyArMTQ0LDcgQEAgc3RhdGljIHZvaWQgZW5j
b2RlU2hhcmVkQnVmZmVyKEVuY29kZXImIAogICAgIC8vIG92ZXIgdGhlIElQQy4gQ29ubmVjdGlv
blVuaXguY3BwIGFscmVhZHkgdXNlcyBzaGFyZWQgbWVtb3J5IHRvIHNlbmQgYW55IElQQyBtZXNz
YWdlIHRoYXQgaXMKICAgICAvLyB0b28gbGFyZ2UuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjA4NTcxLgogICAgIGZvciAoY29uc3QgYXV0byYgZWxlbWVudCA6
ICpidWZmZXIpCi0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGVsZW1lbnQu
c2VnbWVudC0+ZGF0YSgpLCBlbGVtZW50LnNlZ21lbnQtPnNpemUoKSwgMSk7CisgICAgICAgIGVu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGVsZW1lbnQuc2VnbWVudC0+Ynl0ZXMoKSk7CiAj
ZWxzZQogICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKICAgICBhdXRvIHNoYXJlZE1l
bW9yeUJ1ZmZlciA9IFNoYXJlZE1lbW9yeTo6Y29weUJ1ZmZlcigqYnVmZmVyKTsKQEAgLTE4MCw3
ICsxODAsNyBAQCBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlU2hhCiAKICAg
ICBWZWN0b3I8dWludDhfdD4gZGF0YTsKICAgICBkYXRhLmdyb3coYnVmZmVyU2l6ZSk7Ci0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShkYXRhLmRhdGEoKSwgZGF0YS5zaXpl
KCksIDEpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoZGF0YSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRl
KFdURk1vdmUoZGF0YSkpOwpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL0F1eGlsaWFy
eVByb2Nlc3NNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL0F1
eGlsaWFyeVByb2Nlc3NNYWMubW0JKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQv
U2hhcmVkL21hYy9BdXhpbGlhcnlQcm9jZXNzTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMjEs
NyArMzIxLDcgQEAgc3RhdGljIFN0cmluZyBzYW5kYm94RmlsZVBhdGgoY29uc3QgU3RyaQogICAg
IGNyeXB0by0+YWRkQnl0ZXMoaGVhZGVyLmRhdGEoKSwgaGVhZGVyLmxlbmd0aCgpKTsKICAgICBh
dXRvIGhhc2ggPSBjcnlwdG8tPmNvbXB1dGVIYXNoKCk7CiAKLSAgICByZXR1cm4gbWFrZVN0cmlu
ZyhkaXJlY3RvcnlQYXRoLCAiL0NvbXBpbGVkU2FuZGJveCsiLCBiYXNlNjRVUkxFbmNvZGVkKGhh
c2guZGF0YSgpLCBoYXNoLnNpemUoKSkpOworICAgIHJldHVybiBtYWtlU3RyaW5nKGRpcmVjdG9y
eVBhdGgsICIvQ29tcGlsZWRTYW5kYm94KyIsIGJhc2U2NFVSTEVuY29kZWQoaGFzaCkpOwogfQog
CiBzdGF0aWMgYm9vbCBlbnN1cmVTYW5kYm94Q2FjaGVEaXJlY3RvcnkoY29uc3QgU2FuZGJveElu
Zm8mIGluZm8pCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vV2ViQ29yZUFyZ3VtZW50
Q29kZXJzV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzV2luLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dl
YktpdC9TaGFyZWQvd2luL1dlYkNvcmVBcmd1bWVudENvZGVyc1dpbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUxLDEyICs1MSwxMiBAQCBzdGQ6Om9wdGlvbmFsPEZvbnRBdHRyaWJ1dGVzPiBBcmd1
bWVudENvCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPExPR0ZPTlQ+IHsKICAgICBz
dGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgTE9HRk9OVCYgbG9nRm9u
dCkKICAgICB7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZsb2dGb250KSwgc2l6ZW9mIGxvZ0ZvbnQsIDEpOwor
ICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJmxvZ0ZvbnQsIDEg
fSwgMSk7CiAgICAgfQogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPExPR0ZPTlQ+IGRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKICAgICAgICAgTE9HRk9OVCBsb2dGb250OwotICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDhfdCo+KCZsb2dGb250KSwgc2l6ZW9mKGxvZ0ZvbnQpLCAxKSkKKyAgICAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJmxvZ0ZvbnQsIDEgfSwgMSkpCiAgICAg
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAgICByZXR1cm4gbG9nRm9udDsKICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0
U3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElD
b250ZW50UnVsZUxpc3RTdG9yZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEzMSwxOCArMTMxLDIwIEBAIHN0YXRpYyBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0
YSBlbmNvZGUKICAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmNvbmRpdGlvbmVkRmlsdGVyc0J5dGVj
b2RlU2l6ZTsKICAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmNvbmRpdGlvbnNBcHBseU9ubHlUb0Rv
bWFpbjsKIAotICAgIEFTU0VSVChlbmNvZGVyLmJ1ZmZlclNpemUoKSA9PSBDb250ZW50UnVsZUxp
c3RGaWxlSGVhZGVyU2l6ZSk7Ci0gICAgcmV0dXJuIFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRh
KGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICBBU1NFUlQoZW5j
b2Rlci5idWZmZXIoKS5zaXplKCkgPT0gQ29udGVudFJ1bGVMaXN0RmlsZUhlYWRlclNpemUpOwor
ICAgIHJldHVybiBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YSB7IGVuY29kZXIuYnVmZmVyKCkg
fTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBnZXREYXRhKGNvbnN0IFQmLCBjb25z
dCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYpOwotdGVtcGxhdGU8PiB2
b2lkIGdldERhdGEoY29uc3QgV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGEmIGRhdGEsIGNvbnN0
IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCosIHNpemVfdCk+JiBmdW5jdGlvbikKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHZvaWQgZ2V0RGF0YShjb25zdCBUJiwgY29uc3QgRnVuY3Rpb248Ym9v
bChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYpOworCit0ZW1wbGF0ZTw+IHZvaWQgZ2V0RGF0YShj
b25zdCBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YSYgZGF0YSwgY29uc3QgRnVuY3Rpb248Ym9v
bChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYgZnVuY3Rpb24pCiB7CiAgICAgZGF0YS5hcHBseShm
dW5jdGlvbik7CiB9Ci10ZW1wbGF0ZTw+IHZvaWQgZ2V0RGF0YShjb25zdCBXZWJDb3JlOjpTaGFy
ZWRCdWZmZXImIGRhdGEsIGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCosIHNpemVf
dCk+JiBmdW5jdGlvbikKKwordGVtcGxhdGU8PiB2b2lkIGdldERhdGEoY29uc3QgV2ViQ29yZTo6
U2hhcmVkQnVmZmVyJiBkYXRhLCBjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpi
eXRlPik+JiBmdW5jdGlvbikKIHsKLSAgICBmdW5jdGlvbihkYXRhLmRhdGEoKSwgZGF0YS5zaXpl
KCkpOworICAgIGZ1bmN0aW9uKGRhdGEuYnl0ZXMoKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CkBAIC0xNTAsMTMgKzE1MiwxMyBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxDb250ZW50UnVs
ZUxpc3RNZXRhCiB7CiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CiAgICAgQ29udGVudFJ1bGVM
aXN0TWV0YURhdGEgbWV0YURhdGE7Ci0gICAgZ2V0RGF0YShmaWxlRGF0YSwgWyZtZXRhRGF0YSwg
JnN1Y2Nlc3MsICZmaWxlRGF0YV0oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsK
KyAgICBnZXREYXRhKGZpbGVEYXRhLCBbJm1ldGFEYXRhLCAmc3VjY2VzcywgJmZpbGVEYXRhXShT
cGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkgewogICAgICAgICAvLyBUaGUgZmlsZSBkYXRhIHNo
b3VsZCBiZSBtYXBwZWQgaW50byBvbmUgY29udGludW91cyBtZW1vcnkgc2VnbWVudCBzbyB0aGUg
c2l6ZQogICAgICAgICAvLyBwYXNzZWQgdG8gdGhlIGFwcGxpZXIgc2hvdWxkIGFsd2F5cyBlcXVh
bCB0aGUgZGF0YSBzaXplLgotICAgICAgICBpZiAoc2l6ZSAhPSBmaWxlRGF0YS5zaXplKCkpCisg
ICAgICAgIGlmIChkYXRhLnNpemUoKSAhPSBmaWxlRGF0YS5zaXplKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVy
KGRhdGEsIHNpemUpOworICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIg
eyBkYXRhIH07CiAgICAgICAgIAogICAgICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiB2ZXJz
aW9uOwogICAgICAgICBkZWNvZGVyID4+IHZlcnNpb247CkBAIC0yMjgsOCArMjMwLDggQEAgc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8TWFwcGVkRGF0YT4gb3BlbkFuZAogc3RhdGljIGJvb2wgd3JpdGVE
YXRhVG9GaWxlKGNvbnN0IFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhJiBmaWxlRGF0YSwgUGxh
dGZvcm1GaWxlSGFuZGxlIGZkKQogewogICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7Ci0gICAgZmls
ZURhdGEuYXBwbHkoW2ZkLCAmc3VjY2Vzc10oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNp
emUpIHsKLSAgICAgICAgaWYgKHdyaXRlVG9GaWxlKGZkLCBkYXRhLCBzaXplKSA9PSAtMSkgewor
ICAgIGZpbGVEYXRhLmFwcGx5KFtmZCwgJnN1Y2Nlc3NdKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBk
YXRhKSB7CisgICAgICAgIGlmICh3cml0ZVRvRmlsZShmZCwgZGF0YS5kYXRhKCksIGRhdGEuc2l6
ZSgpKSA9PSAtMSkgewogICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5t
bQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0JKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1
LDcgQEAKICNpbXBvcnQgPHBhbC9jcnlwdG8vQ3J5cHRvRGlnZXN0Lmg+CiAjaW1wb3J0IDx3dGYv
QmxvY2tQdHIuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9jb2Nv
YS9TcGFuQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogI2ltcG9y
dCA8d3RmL3RleHQvQmFzZTY0Lmg+CiAKQEAgLTcwLDcgKzcxLDcgQEAgc3RhdGljIFJldGFpblB0
cjxOU0RhdGE+IHByb2R1Y2VDbGllbnREYQogICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6
QCJ3ZWJhdXRobi5nZXQiIGZvcktleTpAInR5cGUiXTsKICAgICAgICAgYnJlYWs7CiAgICAgfQot
ICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhjaGFsbGVu
Z2UuYnl0ZXMsIGNoYWxsZW5nZS5sZW5ndGgpIGZvcktleTpAImNoYWxsZW5nZSJdOworICAgIFtk
aWN0aW9uYXJ5IHNldE9iamVjdDpiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhhc0J5dGVzKGNoYWxs
ZW5nZSkpIGZvcktleTpAImNoYWxsZW5nZSJdOwogICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpv
cmlnaW4gZm9yS2V5OkAib3JpZ2luIl07CiAKICAgICByZXR1cm4gW05TSlNPTlNlcmlhbGl6YXRp
b24gZGF0YVdpdGhKU09OT2JqZWN0OmRpY3Rpb25hcnkuZ2V0KCkgb3B0aW9uczpOU0pTT05Xcml0
aW5nU29ydGVkS2V5cyBlcnJvcjpuaWxdOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2Fs
QXV0aGVudGljYXRvci5tbQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIHN0YXRpYyBpbmxpbmUgSGFzaFNldDxTdHJpbmc+
IHByb2R1Y2VIYXMKICAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0OwogICAgIGZvciAoYXV0byYg
Y3JlZGVudGlhbERlc2NyaXB0b3IgOiBjcmVkZW50aWFsRGVzY3JpcHRvcnMpIHsKICAgICAgICAg
aWYgKGVtcHR5VHJhbnNwb3J0c09yQ29udGFpbihjcmVkZW50aWFsRGVzY3JpcHRvci50cmFuc3Bv
cnRzLCBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpJbnRlcm5hbCkgJiYgY3JlZGVudGlhbERlc2Ny
aXB0b3IudHlwZSA9PSBQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5ICYmIGNyZWRl
bnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9yLnNpemUoKSA9PSBjcmVkZW50aWFsSWRMZW5ndGgpCi0g
ICAgICAgICAgICByZXN1bHQuYWRkKGJhc2U2NEVuY29kZVRvU3RyaW5nKGNyZWRlbnRpYWxEZXNj
cmlwdG9yLmlkVmVjdG9yLmRhdGEoKSwgY3JlZGVudGlhbERlc2NyaXB0b3IuaWRWZWN0b3Iuc2l6
ZSgpKSk7CisgICAgICAgICAgICByZXN1bHQuYWRkKGJhc2U2NEVuY29kZVRvU3RyaW5nKGNyZWRl
bnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9yKSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9
CkBAIC0yMzMsNyArMjMzLDcgQEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6Om1ha2VDcmVkZW50
aWFsKAogICAgICAgICBpZiAobm90Rm91bmQgIT0gbV9leGlzdGluZ0NyZWRlbnRpYWxzLmZpbmRN
YXRjaGluZyhbJmV4Y2x1ZGVDcmVkZW50aWFsSWRzXSAoYXV0byYgY3JlZGVudGlhbCkgewogICAg
ICAgICAgICAgYXV0byogcmF3SWQgPSBjcmVkZW50aWFsLT5yYXdJZCgpOwogICAgICAgICAgICAg
QVNTRVJUKHJhd0lkKTsKLSAgICAgICAgICAgIHJldHVybiBleGNsdWRlQ3JlZGVudGlhbElkcy5j
b250YWlucyhiYXNlNjRFbmNvZGVUb1N0cmluZyhyYXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxl
bmd0aCgpKSk7CisgICAgICAgICAgICByZXR1cm4gZXhjbHVkZUNyZWRlbnRpYWxJZHMuY29udGFp
bnMoYmFzZTY0RW5jb2RlVG9TdHJpbmcocmF3SWQtPmJ5dGVzKCkpKTsKICAgICAgICAgfSkpIHsK
ICAgICAgICAgICAgIHJlY2VpdmVFeGNlcHRpb24oeyBOb3RBbGxvd2VkRXJyb3IsICJBdCBsZWFz
dCBvbmUgY3JlZGVudGlhbCBtYXRjaGVzIGFuIGVudHJ5IG9mIHRoZSBleGNsdWRlQ3JlZGVudGlh
bHMgbGlzdCBpbiB0aGUgcGxhdGZvcm0gYXR0YWNoZWQgYXV0aGVudGljYXRvci4iX3MgfSwgV2Vi
QXV0aGVudGljYXRpb25TdGF0dXM6OkxBRXhjbHVkZUNyZWRlbnRpYWxzTWF0Y2hlZCk7CiAgICAg
ICAgICAgICByZXR1cm47CkBAIC01MTAsNyArNTEwLDcgQEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0
b3I6OmdldEFzc2VydGlvbigpCiAgICAgICAgIH0KIAogICAgICAgICBhdXRvKiByYXdJZCA9IGNy
ZWRlbnRpYWwtPnJhd0lkKCk7Ci0gICAgICAgIGlmIChhbGxvd0NyZWRlbnRpYWxJZHMuY29udGFp
bnMoYmFzZTY0RW5jb2RlVG9TdHJpbmcocmF3SWQtPmRhdGEoKSwgcmF3SWQtPmJ5dGVMZW5ndGgo
KSkpKQorICAgICAgICBpZiAoYWxsb3dDcmVkZW50aWFsSWRzLmNvbnRhaW5zKGJhc2U2NEVuY29k
ZVRvU3RyaW5nKHJhd0lkLT5ieXRlcygpKSkpCiAgICAgICAgICAgICBhc3NlcnRpb25SZXNwb25z
ZXMudW5jaGVja2VkQXBwZW5kKGNyZWRlbnRpYWwuY29weVJlZigpKTsKICAgICB9CiAgICAgaWYg
KGFzc2VydGlvblJlc3BvbnNlcy5pc0VtcHR5KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0xvY2FsQ29ubmVjdGlvbi5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2Nr
L01vY2tMb2NhbENvbm5lY3Rpb24ubW0JKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0xvY2FsQ29ubmVjdGlvbi5t
bQkod29ya2luZyBjb3B5KQpAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgTW9ja0xvY2FsQ29ubmVj
dGlvbjo6ZmlsdGVyUmVzcG9uc2UKICAgICBmb3IgKDsgaXRyICE9IHJlc3BvbnNlcy5lbmQoKTsg
KytpdHIpIHsKICAgICAgICAgYXV0byogcmF3SWQgPSBpdHItPmdldCgpLnJhd0lkKCk7CiAgICAg
ICAgIEFTU0VSVChyYXdJZCk7Ci0gICAgICAgIGF1dG8gcmF3SWRCYXNlNjQgPSBiYXNlNjRFbmNv
ZGVUb1N0cmluZyhyYXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAg
YXV0byByYXdJZEJhc2U2NCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKHJhd0lkLT5ieXRlcygpKTsK
ICAgICAgICAgaWYgKHJhd0lkQmFzZTY0ID09IHByZWZlcnJlZENyZWRlbnRpYWxJZEJhc2U2NCkK
ICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL21hYy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvTGVnYWN5U2Vzc2lvblN0
YXRlQ29kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDcgKzEyOSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgKnRoaXMgPDwgbGVuZ3RoOwogCiAgICAgICAgICp0aGlzIDw8IHN0YXRpY19jYXN0
PHVpbnQ2NF90PihsZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKLSAgICAgICAgZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KFN0cmluZ1ZpZXcodmFs
dWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpLmdldCgpKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFy
KSwgYWxpZ25vZihVQ2hhcikpOworICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7
IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpLmdldCgpLCBsZW5ndGgg
fSk7CiAKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KQEAgLTEzNyw3ICsxMzcsNyBAQCBw
dWJsaWM6CiAgICAgSGlzdG9yeUVudHJ5RGF0YUVuY29kZXImIG9wZXJhdG9yPDwoY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiB2YWx1ZSkKICAgICB7CiAgICAgICAgICp0aGlzIDw8IHN0YXRpY19jYXN0
PHVpbnQ2NF90Pih2YWx1ZS5zaXplKCkpOwotICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEo
dmFsdWUuZGF0YSgpLCB2YWx1ZS5zaXplKCksIDEpOworICAgICAgICBlbmNvZGVGaXhlZExlbmd0
aERhdGEodmFsdWUpOwogCiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CkBAIC0xNDUsNyAr
MTQ1LDcgQEAgcHVibGljOgogICAgIEhpc3RvcnlFbnRyeURhdGFFbmNvZGVyJiBvcGVyYXRvcjw8
KGNvbnN0IFZlY3RvcjxjaGFyPiYgdmFsdWUpCiAgICAgewogICAgICAgICAqdGhpcyA8PCBzdGF0
aWNfY2FzdDx1aW50NjRfdD4odmFsdWUuc2l6ZSgpKTsKLSAgICAgICAgZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZhbHVlLmRhdGEoKSksIHZh
bHVlLnNpemUoKSwgMSk7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YSh2YWx1ZSk7CiAK
ICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KQEAgLTIwNiwxNyArMjA2LDIzIEBAIHByaXZh
dGU6CiAgICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYXJpdGhtZXRpYzxUeXBl
Pjo6dmFsdWUsICIiKTsKIAotICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oJnZhbHVlKSwgc2l6ZW9mKHZhbHVlKSwgc2l6ZW9mKHZhbHVlKSk7
CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJnZhbHVlLCAxIH0sIHNpemVv
Zih2YWx1ZSkpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCi0gICAgdm9pZCBlbmNv
ZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIHVuc2ln
bmVkIGFsaWdubWVudCkKKyAgICB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0
IHN0ZDo6Ynl0ZT4gZGF0YSwgdW5zaWduZWQgYWxpZ25tZW50KQogICAgIHsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQoZGF0YSB8fCAhc2l6ZSk7Ci0gICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90PihkYXRhKSAlIGFsaWdubWVudCkpOworICAgICAgICBSRUxFQVNFX0FT
U0VSVChkYXRhLmRhdGEoKSB8fCAhZGF0YS5zaXplKCkpOworICAgICAgICBBU1NFUlQoIShyZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZGF0YS5kYXRhKCkpICUgYWxpZ25tZW50KSk7CiAKLSAg
ICAgICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQsIHNpemUpOwotICAgICAgICBt
ZW1jcHkoYnVmZmVyLCBkYXRhLCBzaXplKTsKKyAgICAgICAgYXV0byogYnVmZmVyID0gZ3Jvdyhh
bGlnbm1lbnQsIGRhdGEuc2l6ZSgpKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciwgZGF0YS5kYXRh
KCksIGRhdGEuc2l6ZSgpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAg
IHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCB1bnNpZ25lZCBhbGlnbm1lbnQg
PSBhbGlnbm9mKHR5cGVuYW1lIGRlY2x0eXBlKFNwYW4oc3RkOjpkZWNsdmFsPFQ+KCkpKTo6dmFs
dWVfdHlwZSkpCisgICAgeworICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEoYXNCeXRlcyhT
cGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pLCBhbGlnbm1lbnQpOwogICAgIH0KIAogICAg
IHVpbnQ4X3QqIGdyb3codW5zaWduZWQgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKQEAgLTYwMSw3
ICs2MDcsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgVUNoYXIqIGJ1ZmZlcjsKICAgICAgICAgYXV0
byBzdHJpbmcgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwot
ICAgICAgICBkZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4o
YnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSwgYWxpZ25vZihVQ2hhcikpOworICAgICAg
ICBkZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IGJ1ZmZlciwgbGVuZ3RoIH0pOwogCiAgICAg
ICAgIHZhbHVlID0gc3RyaW5nOwogICAgICAgICByZXR1cm4gKnRoaXM7CkBAIC03MzcsMTcgKzc0
MywyMyBAQCBwcml2YXRlOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYXJpdGhtZXRp
YzxUeXBlPjo6dmFsdWUsICIiKTsKICAgICAgICAgdmFsdWUgPSBUeXBlKCk7CiAKLSAgICAgICAg
ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2YWx1ZSks
IHNpemVvZih2YWx1ZSksIHNpemVvZih2YWx1ZSkpOworICAgICAgICBkZWNvZGVGaXhlZExlbmd0
aERhdGEoU3BhbiB7ICZ2YWx1ZSwgMSB9LCBzaXplb2YodmFsdWUpKTsKICAgICAgICAgcmV0dXJu
ICp0aGlzOwogICAgIH0KIAotICAgIHZvaWQgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3Qq
IGRhdGEsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBhbGlnbm1lbnQpCisgICAgdm9pZCBkZWNvZGVG
aXhlZExlbmd0aERhdGEoU3BhbjxzdGQ6OmJ5dGU+IGRhdGEsIHVuc2lnbmVkIGFsaWdubWVudCkK
ICAgICB7Ci0gICAgICAgIGlmICghYWxpZ25CdWZmZXJQb3NpdGlvbihhbGlnbm1lbnQsIHNpemUp
KQorICAgICAgICBpZiAoIWFsaWduQnVmZmVyUG9zaXRpb24oYWxpZ25tZW50LCBkYXRhLnNpemUo
KSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbWVtY3B5KGRhdGEsIG1fYnVmZmVy
LCBzaXplKTsKLSAgICAgICAgbV9idWZmZXIgKz0gc2l6ZTsKKyAgICAgICAgbWVtY3B5KGRhdGEu
ZGF0YSgpLCBtX2J1ZmZlciwgZGF0YS5zaXplKCkpOworICAgICAgICBtX2J1ZmZlciArPSBkYXRh
LnNpemUoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCB1bnNpZ25lZCBhbGlnbm1lbnQgPSBhbGlnbm9m
KHR5cGVuYW1lIGRlY2x0eXBlKFNwYW4oc3RkOjpkZWNsdmFsPFQ+KCkpKTo6dmFsdWVfdHlwZSkp
CisgICAgeworICAgICAgICBkZWNvZGVGaXhlZExlbmd0aERhdGEoYXNXcml0YWJsZUJ5dGVzKFNw
YW4geyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSksIGFsaWdubWVudCk7CiAgICAgfQogCiAgICAg
Ym9vbCBhbGlnbkJ1ZmZlclBvc2l0aW9uKHVuc2lnbmVkIGFsaWdubWVudCwgc2l6ZV90IHNpemUp
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRDaGFubmVs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJT
b2NrZXRDaGFubmVsLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5
LDggKzU5LDggQEAgTmV0d29ya1NlbmRRdWV1ZSBXZWJTb2NrZXRDaGFubmVsOjpjcmVhdAogICAg
ICAgICBjaGFubmVsLm5vdGlmeVNlbmRGcmFtZShXZWJTb2NrZXRGcmFtZTo6T3BDb2RlOjpPcENv
ZGVUZXh0LCB1dGY4U3RyaW5nLmRhdGFBc1VJbnQ4UHRyKCksIHV0ZjhTdHJpbmcubGVuZ3RoKCkp
OwogICAgICAgICBjaGFubmVsLnNlbmRNZXNzYWdlKE1lc3NhZ2VzOjpOZXR3b3JrU29ja2V0Q2hh
bm5lbDo6U2VuZFN0cmluZyB7IElQQzo6RGF0YVJlZmVyZW5jZSB7IHV0ZjhTdHJpbmcuZGF0YUFz
VUludDhQdHIoKSwgdXRmOFN0cmluZy5sZW5ndGgoKSB9IH0sIHV0ZjhTdHJpbmcubGVuZ3RoKCkp
OwogICAgIH0sIFsmY2hhbm5lbF0oYXV0byYgc3BhbikgewotICAgICAgICBjaGFubmVsLm5vdGlm
eVNlbmRGcmFtZShXZWJTb2NrZXRGcmFtZTo6T3BDb2RlOjpPcENvZGVCaW5hcnksIHNwYW4uZGF0
YSgpLCBzcGFuLnNpemUoKSk7Ci0gICAgICAgIGNoYW5uZWwuc2VuZE1lc3NhZ2UoTWVzc2FnZXM6
Ok5ldHdvcmtTb2NrZXRDaGFubmVsOjpTZW5kRGF0YSB7IElQQzo6RGF0YVJlZmVyZW5jZSB7IHNw
YW4uZGF0YSgpLCBzcGFuLnNpemUoKSB9IH0sIHNwYW4uc2l6ZSgpKTsKKyAgICAgICAgY2hhbm5l
bC5ub3RpZnlTZW5kRnJhbWUoV2ViU29ja2V0RnJhbWU6Ok9wQ29kZTo6T3BDb2RlQmluYXJ5LCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzcGFuLmRhdGEoKSksIHNwYW4uc2l6ZSgp
KTsKKyAgICAgICAgY2hhbm5lbC5zZW5kTWVzc2FnZShNZXNzYWdlczo6TmV0d29ya1NvY2tldENo
YW5uZWw6OlNlbmREYXRhIHsgSVBDOjpEYXRhUmVmZXJlbmNlIHsgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50OF90Kj4oc3Bhbi5kYXRhKCkpLCBzcGFuLnNpemUoKSB9IH0sIHNwYW4uc2l6ZSgp
KTsKICAgICB9LCBbJmNoYW5uZWxdKEV4Y2VwdGlvbkNvZGUgZXhjZXB0aW9uQ29kZSkgewogICAg
ICAgICBhdXRvIGNvZGUgPSBzdGF0aWNfY2FzdDxpbnQ+KGV4Y2VwdGlvbkNvZGUpOwogICAgICAg
ICBjaGFubmVsLmZhaWwobWFrZVN0cmluZygiRmFpbGVkIHRvIGxvYWQgQmxvYjogZXhjZXB0aW9u
IGNvZGUgPSAiLCBjb2RlKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9JUENUZXN0aW5nQVBJLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0MywxMiArNDQzLDcgQEAgSlNWYWx1ZVJlZiBKU1NoYXJlZE1lbW9yeTo6cmVhZEJ5
dGVzKEpTQwogICAgIHJldHVybiB0b1JlZihqc0FycmF5QnVmZmVyKTsKIH0KIAotc3RydWN0IEFy
cmF5QnVmZmVyRGF0YSB7Ci0gICAgdm9pZCogYnVmZmVyIHsgbnVsbHB0ciB9OwotICAgIHNpemVf
dCBsZW5ndGggeyAwIH07Ci19OwotCi1zdGF0aWMgQXJyYXlCdWZmZXJEYXRhIGFycmF5QnVmZmVy
RGF0YUZyb21WYWx1ZVJlZihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNUeXBlZEFycmF5VHlwZSB0
eXBlLCBKU1ZhbHVlUmVmIHZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCitzdGF0aWMg
U3BhbjxzdGQ6OmJ5dGU+IGFycmF5QnVmZmVyRGF0YUZyb21WYWx1ZVJlZihKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNUeXBlZEFycmF5VHlwZSB0eXBlLCBKU1ZhbHVlUmVmIHZhbHVlUmVmLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgYXV0byBvYmplY3RSZWYgPSBKU1ZhbHVlVG9PYmpl
Y3QoY29udGV4dCwgdmFsdWVSZWYsIGV4Y2VwdGlvbik7CiAgICAgaWYgKCFvYmplY3RSZWYpCkBA
IC00NjksNyArNDY0LDcgQEAgc3RhdGljIEFycmF5QnVmZmVyRGF0YSBhcnJheUJ1ZmZlckRhdGFG
cgogICAgIGVsc2UKICAgICAgICAgbGVuZ3RoID0gSlNPYmplY3RHZXRUeXBlZEFycmF5Qnl0ZUxl
bmd0aChjb250ZXh0LCBvYmplY3RSZWYsIGV4Y2VwdGlvbik7CiAKLSAgICByZXR1cm4geyBidWZm
ZXIsIGxlbmd0aCB9OworICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHN0ZDo6Ynl0ZSo+KGJ1ZmZl
ciksIGxlbmd0aCB9OwogfQogCiBKU1ZhbHVlUmVmIEpTU2hhcmVkTWVtb3J5Ojp3cml0ZUJ5dGVz
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKQEAgLTQ4NywxMyArNDgyLDEzIEBAIEpTVmFsdWVSZWYgSlNT
aGFyZWRNZW1vcnk6OndyaXRlQnl0ZXMoSlMKICAgICB9CiAKICAgICBhdXRvIGRhdGEgPSBhcnJh
eUJ1ZmZlckRhdGFGcm9tVmFsdWVSZWYoY29udGV4dCwgdHlwZSwgYXJndW1lbnRzWzBdLCBleGNl
cHRpb24pOwotICAgIGlmICghZGF0YS5idWZmZXIpIHsKKyAgICBpZiAoIWRhdGEuZGF0YSgpKSB7
CiAgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIkNvdWxkIG5v
dCByZWFkIHRoZSBidWZmZXIiX3MpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7CiAgICAgfQogCiAgICAgc2l6ZV90IG9mZnNldCA9IDA7Ci0gICAgc2l6ZV90
IGxlbmd0aCA9IGRhdGEubGVuZ3RoOworICAgIHNpemVfdCBsZW5ndGggPSBkYXRhLnNpemUoKTsK
ICAgICBzaXplX3Qgc2hhcmVkTWVtb3J5U2l6ZSA9IGpzU2hhcmVkTWVtb3J5LT5tX3NoYXJlZE1l
bW9yeS0+c2l6ZSgpOwogCiAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjb250ZXh0KTsK
QEAgLTUyNiw3ICs1MjEsNyBAQCBKU1ZhbHVlUmVmIEpTU2hhcmVkTWVtb3J5Ojp3cml0ZUJ5dGVz
KEpTCiAgICAgICAgIGxlbmd0aCA9ICpsZW5ndGhWYWx1ZTsKICAgICB9CiAKLSAgICBtZW1jcHko
c3RhdGljX2Nhc3Q8dWludDhfdCo+KGpzU2hhcmVkTWVtb3J5LT5tX3NoYXJlZE1lbW9yeS0+ZGF0
YSgpKSArIG9mZnNldCwgZGF0YS5idWZmZXIsIGxlbmd0aCk7CisgICAgbWVtY3B5KHN0YXRpY19j
YXN0PHVpbnQ4X3QqPihqc1NoYXJlZE1lbW9yeS0+bV9zaGFyZWRNZW1vcnktPmRhdGEoKSkgKyBv
ZmZzZXQsIGRhdGEuZGF0YSgpLCBsZW5ndGgpOwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOwogfQpAQCAtNjg4LDEwICs2ODMsMTAgQEAgc3RhdGljIGJvb2wgZW5j
b2RlVHlwZWRBcnJheShJUEM6OkVuY29kZQogICAgIEFTU0VSVCh0eXBlICE9IGtKU1R5cGVkQXJy
YXlUeXBlTm9uZSk7CiAKICAgICBhdXRvIGRhdGEgPSBhcnJheUJ1ZmZlckRhdGFGcm9tVmFsdWVS
ZWYoY29udGV4dCwgdHlwZSwgdmFsdWVSZWYsIGV4Y2VwdGlvbik7Ci0gICAgaWYgKCFkYXRhLmJ1
ZmZlcikKKyAgICBpZiAoIWRhdGEuZGF0YSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQ4X3QqPihkYXRhLmJ1ZmZlciksIGRhdGEubGVuZ3RoLCAxKTsKKyAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShkYXRhKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9FbnZpcm9ubWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9FbnZpcm9ubWVudC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvRW52aXJvbm1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTYsNyArMTU2LDcgQEAgYm9vbCBFbnZpcm9ubWVudDo6Y29tcHV0ZUlzRGVidWdIZWFwRW5hYgog
ICAgIHJldHVybiB0cnVlOwogI2VuZGlmCiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IHRydWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKSW5kZXg6IFRvb2xzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODgwOSkKKysrIFRv
b2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDIxLTA2LTEx
ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBBZG9wdCBTcGFuIGlu
IG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBbV0lQXQorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2Fpcm8vUGl4ZWxEdW1wU3Vw
cG9ydENhaXJvLmNwcDoKKyAgICAgICAgKGNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckJpdG1hcENv
bnRleHQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRDRy5j
cHA6CisgICAgICAgIChjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JCaXRtYXBDb250ZXh0KToKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9CbG9vbUZpbHRlci5jcHA6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpnZW5lcmF0ZVJhbmRvbURpZ2VzdHMpOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6VEVTVF9GKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW06
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9uOjp3ZWJTb2NrZXRIYW5kc2hha2Up
OgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvY2Fpcm8vVGVzdEludm9jYXRpb25DYWlyby5j
cHA6CisgICAgICAgIChXVFI6OmNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckNhaXJvU3VyZmFjZSk6
CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcDoKKyAg
ICAgICAgKFdUUjo6Y29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQ29udGV4dCk6CisKIDIwMjEtMDYt
MTEgIEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAg
W1dpbl1bRHVtcFJlbmRlclRyZWVdIC0tbm8tdGltZW91dCBzd2l0Y2ggZG9lc24ndCB3b3JrCklu
ZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fpcm8uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NhaXJvL1BpeGVsRHVtcFN1cHBv
cnRDYWlyby5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nh
aXJvL1BpeGVsRHVtcFN1cHBvcnRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1
LDcgQEAgdm9pZCBjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JCaXRtYXBDb250ZQogICAgIFNIQTEg
c2hhMTsKICAgICB1bnNpZ25lZCBjaGFyKiBiaXRtYXBEYXRhID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZSkpOwogICAgIGZv
ciAodW5zaWduZWQgcm93ID0gMDsgcm93IDwgcGl4ZWxzSGlnaDsgcm93KyspIHsKLSAgICAgICAg
c2hhMS5hZGRCeXRlcyhiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lkZSk7CisgICAgICAgIHNoYTEu
YWRkQnl0ZXMoU3BhbiB7IGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlIH0pOwogICAgICAgICBi
aXRtYXBEYXRhICs9IGJ5dGVzUGVyUm93OwogICAgIH0KICAgICBTSEExOjpEaWdlc3QgaGFzaDsK
SW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRDRy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1wU3VwcG9ydENHLmNw
cAkocmV2aXNpb24gMjc4ODA5KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1w
U3VwcG9ydENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTQgKzg4LDE0IEBAIHZvaWQgY29t
cHV0ZVNIQTFIYXNoU3RyaW5nRm9yQml0bWFwQ29udGUKICAgICAgICAgICAgIHVpbnQzMl90IGJ1
ZmZlcltwaXhlbHNXaWRlXTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY29sdW1uID0gMDsg
Y29sdW1uIDwgcGl4ZWxzV2lkZTsgY29sdW1uKyspCiAgICAgICAgICAgICAgICAgYnVmZmVyW2Nv
bHVtbl0gPSBPU1JlYWRMaXR0bGVJbnQzMihiaXRtYXBEYXRhLCA0ICogY29sdW1uKTsKLSAgICAg
ICAgICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYnVm
ZmVyKSwgNCAqIHBpeGVsc1dpZGUpOworICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsg
YnVmZmVyLCBwaXhlbHNXaWRlIH0pOwogICAgICAgICAgICAgYml0bWFwRGF0YSArPSBieXRlc1Bl
clJvdzsKICAgICAgICAgfQogICAgIH0gZWxzZQogI2VuZGlmCiAgICAgewogICAgICAgICBmb3Ig
KHVuc2lnbmVkIHJvdyA9IDA7IHJvdyA8IHBpeGVsc0hpZ2g7IHJvdysrKSB7Ci0gICAgICAgICAg
ICBzaGExLmFkZEJ5dGVzKGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlKTsKKyAgICAgICAgICAg
IHNoYTEuYWRkQnl0ZXMoU3BhbiB7IGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlIH0pOwogICAg
ICAgICAgICAgYml0bWFwRGF0YSArPSBieXRlc1BlclJvdzsKICAgICAgICAgfQogICAgIH0KSW5k
ZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0Jsb29tRmlsdGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9CbG9vbUZpbHRlci5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0Jsb29tRmls
dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBzdGF0aWMgVmVjdG9yPFNI
QTE6OkRpZ2VzdD4gZ2VuZXJhdGVSYW5kCiAgICAgU0hBMSBzaGExOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBoYXNoQ291bnQ7ICsraSkgewogICAgICAgICBkb3VibGUgcmFuZG9tID0g
cmFuZG9tTnVtYmVyKCk7Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4oJnJhbmRvbSksIHNpemVvZihkb3VibGUpKTsKKyAgICAgICAgc2hhMS5hZGRCeXRl
cyhTcGFuIHsgJnJhbmRvbSwgMSB9KTsKICAgICAgICAgU0hBMTo6RGlnZXN0IGRpZ2VzdDsKICAg
ICAgICAgc2hhMS5jb21wdXRlSGFzaChkaWdlc3QpOwogICAgICAgICBoYXNoZXMuYXBwZW5kKGRp
Z2VzdCk7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVt
LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYv
RmlsZVN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw4ICsxMzMsOCBAQCBURVNUX0Yo
RmlsZVN5c3RlbVRlc3QsIE1hcHBpbmdFeGlzdGluZ0ZpCiAgICAgRmlsZVN5c3RlbTo6TWFwcGVk
RmlsZURhdGEgbWFwcGVkRmlsZURhdGEodGVtcEZpbGVQYXRoKCksIEZpbGVTeXN0ZW06Ok1hcHBl
ZEZpbGVNb2RlOjpTaGFyZWQsIHN1Y2Nlc3MpOwogICAgIEVYUEVDVF9UUlVFKHN1Y2Nlc3MpOwog
ICAgIEVYUEVDVF9UUlVFKCEhbWFwcGVkRmlsZURhdGEpOwotICAgIEVYUEVDVF9UUlVFKG1hcHBl
ZEZpbGVEYXRhLnNpemUoKSA9PSBzdHJsZW4oRmlsZVN5c3RlbVRlc3REYXRhKSk7Ci0gICAgRVhQ
RUNUX1RSVUUoc3RybnN0cihGaWxlU3lzdGVtVGVzdERhdGEsIHN0YXRpY19jYXN0PGNvbnN0IGNo
YXIqPihtYXBwZWRGaWxlRGF0YS5kYXRhKCkpLCBtYXBwZWRGaWxlRGF0YS5zaXplKCkpKTsKKyAg
ICBFWFBFQ1RfVFJVRShtYXBwZWRGaWxlRGF0YS5kYXRhKCkuc2l6ZSgpID09IHN0cmxlbihGaWxl
U3lzdGVtVGVzdERhdGEpKTsKKyAgICBFWFBFQ1RfVFJVRShzdHJuc3RyKEZpbGVTeXN0ZW1UZXN0
RGF0YSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4obWFwcGVkRmlsZURhdGEuZGF0YSgp
LmRhdGEoKSksIG1hcHBlZEZpbGVEYXRhLmRhdGEoKS5zaXplKCkpKTsKIH0KIAogVEVTVF9GKEZp
bGVTeXN0ZW1UZXN0LCBNYXBwaW5nRXhpc3RpbmdFbXB0eUZpbGUpCkluZGV4OiBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9TSEExLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9TSEExLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvU0hBMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4
LDcgQEAgc3RhdGljIHZvaWQgZXhwZWN0U0hBMShDU3RyaW5nIGlucHV0LCBpbgogewogICAgIFNI
QTEgc2hhMTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcGVhdDsgKytpKQotICAgICAgICBz
aGExLmFkZEJ5dGVzKGlucHV0KTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhpbnB1dC5ieXRlcygp
KTsKICAgICBDU3RyaW5nIGFjdHVhbCA9IHNoYTEuY29tcHV0ZUhleERpZ2VzdCgpOwogCiAgICAg
QVNTRVJUX0VRKGV4cGVjdGVkLmxlbmd0aCgpLCBhY3R1YWwubGVuZ3RoKCkpOwpJbmRleDogVG9v
bHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbQkocmV2aXNpb24gMjc4ODA5KQorKysg
VG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zNDAsMTEgKzM0MCwxMSBAQCB2b2lkIENvbm5lY3Rpb246OndlYlNvY2tldEhhbmRzaGFrZShD
b21wCiAKICAgICAgICAgICAgIGNvbnN0ZXhwciBhdXRvKiB3ZWJTb2NrZXRLZXlHVUlEID0gIjI1
OEVBRkE1LUU5MTQtNDdEQS05NUNBLUM1QUIwREM4NUIxMSI7CiAgICAgICAgICAgICBTSEExIHNo
YTE7Ci0gICAgICAgICAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KGtleUJlZ2luKSwga2V5RW5kIC0ga2V5QmVnaW4pOwotICAgICAgICAgICAgc2hhMS5h
ZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih3ZWJTb2NrZXRLZXlHVUlE
KSwgc3RybGVuKHdlYlNvY2tldEtleUdVSUQpKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMo
U3BhbiB7IGtleUJlZ2luLCBrZXlFbmQgfSk7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKFNw
YW4geyB3ZWJTb2NrZXRLZXlHVUlELCBzdHJsZW4od2ViU29ja2V0S2V5R1VJRCkgfSk7CiAgICAg
ICAgICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAgICAgICAgICAgIHNoYTEuY29tcHV0ZUhhc2go
aGFzaCk7Ci0gICAgICAgICAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaGFzaC5kYXRh
KCksIFNIQTE6Omhhc2hTaXplKTsKKyAgICAgICAgICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0
cmluZyhoYXNoKTsKICAgICAgICAgfTsKIAogICAgICAgICBjb25uZWN0aW9uLnNlbmQoSFRUUFJl
c3BvbnNlKDEwMSwgewpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jYWlyby9UZXN0SW52
b2NhdGlvbkNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2Nh
aXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVTSEExSGFzaFN0cmluZ0Zv
ckNhaXIKICAgICBTSEExIHNoYTE7CiAgICAgdW5zaWduZWQgY2hhciogYml0bWFwRGF0YSA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1
cmZhY2UpKTsKICAgICBmb3IgKHNpemVfdCByb3cgPSAwOyByb3cgPCBwaXhlbHNIaWdoOyArK3Jv
dykgewotICAgICAgICBzaGExLmFkZEJ5dGVzKGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlKTsK
KyAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgYml0bWFwRGF0YSwgNCAqIHBpeGVsc1dpZGUg
fSk7CiAgICAgICAgIGJpdG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7CiAgICAgfQogICAgIFNIQTE6
OkRpZ2VzdCBoYXNoOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2Nh
dGlvbkNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJ
bnZvY2F0aW9uQ0cuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3
IEBAIHZvaWQgY29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQ29udGV4dChDR0MKICNlbmRpZgogICAg
IHsKICAgICAgICAgZm9yICh1bnNpZ25lZCByb3cgPSAwOyByb3cgPCBwaXhlbHNIaWdoOyByb3cr
KykgewotICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lk
ZSk7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyBiaXRtYXBEYXRhLCA0ICogcGl4
ZWxzV2lkZSB9KTsKICAgICAgICAgICAgIGJpdG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7CiAgICAg
ICAgIH0KICAgICB9Cg==
</data>
<flag name="commit-queue"
          id="453032"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431293</attachid>
            <date>2021-06-13 16:00:38 -0700</date>
            <delta_ts>2021-06-13 18:01:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226887-20210613160037.patch</filename>
            <type>text/plain</type>
            <size>201070</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBA
CisyMDIxLTA2LTEyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogQVBJL0pTU2NyaXB0Lm1tOgorICAg
ICAgICAoK1tKU1NjcmlwdCBzY3JpcHRPZlR5cGU6bWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTp3
aXRoU291cmNlVVJMOmFuZEJ5dGVjb2RlQ2FjaGU6aW5WaXJ0dWFsTWFjaGluZTplcnJvcjpdKToK
KyAgICAgICAgKC1bSlNTY3JpcHQgcmVhZENhY2hlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHdy
aXRlQ2FjaGU6XSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9ja0hhc2g6OkNvZGVCbG9ja0hhc2gpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHA6CisgICAgICAgIChJbnNw
ZWN0b3I6OmJhY2tlbmRDb21tYW5kc0hhc2gpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZm
ZXIuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJDb250ZW50czo6d3JpdGFibGVCeXRlcyk6
CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyQ29udGVudHM6OmJ5dGVzIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6QXJyYXlCdWZmZXI6OndyaXRhYmxlQnl0ZXMpOgorICAgICAgICAoSlNDOjpBcnJh
eUJ1ZmZlcjo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
Lmg6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6d3JpdGFibGVCeXRlcyk6CisgICAg
ICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRp
bWUvQ2FjaGVQYXlsb2FkLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVQYXlsb2FkOjptYWtlTWFw
cGVkUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6bWFrZU1hbGxvY1BheWxv
YWQpOgorICAgICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6Om1ha2VFbXB0eVBheWxvYWQpOgorICAg
ICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6OkNhY2hlUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNh
Y2hlUGF5bG9hZDo6ZnJlZURhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVQYXlsb2FkLmg6
CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6ZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlUGF5bG9hZDo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6
Q2FjaGVQYXlsb2FkKToKKyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKToKKwogMjAyMS0w
Ni0xMSAgUGF0cmljayBBbmdsZSAgPHBhbmdsZUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogQWRkIGluc3RydW1lbnRhdGlvbiB0byBub2RlIGRlc3RydWN0aW9uIGZvciBJbnNw
ZWN0b3JET01BZ2VudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMTMgKzEzNCwxMyBAQCArIChpbnN0YW5jZXR5cGUpc2Ny
aXB0T2ZUeXBlOihKU1NjcmlwdFR5CiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4g
Y3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJGaWxlIGF0IHBhdGggJUAg
Y291bGQgbm90IGJlIG1hcHBlZC4iLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihzeXN0ZW1QYXRo
KV0sIGVycm9yKTsKIAotICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCkpKQor
ICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmlsZURhdGEuZGF0YSgpLnNpemUoKSkpCiAg
ICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIk5v
dCBhbGwgY2hhcmFjdGVycyBpbiBmaWxlIGF0ICVAIGFyZSBBU0NJSS4iLCBzdGF0aWNfY2FzdDxO
U1N0cmluZyAqPihzeXN0ZW1QYXRoKV0sIGVycm9yKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gYWRv
cHROUyhbW0pTU2NyaXB0IGFsbG9jXSBpbml0XSk7CiAgICAgcmVzdWx0LT5tX3ZpcnR1YWxNYWNo
aW5lID0gdm07CiAgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOwotICAgIHJlc3VsdC0+bV9zb3Vy
Y2UgPSBTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcoYml0d2lzZV9jYXN0
PGNvbnN0IExDaGFyKj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpKSk7CisgICAg
cmVzdWx0LT5tX3NvdXJjZSA9IFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWlu
ZyhiaXR3aXNlX2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmls
ZURhdGEuZGF0YSgpLnNpemUoKSkpOwogICAgIHJlc3VsdC0+bV9tYXBwZWRTb3VyY2UgPSBXVEZN
b3ZlKGZpbGVEYXRhKTsKICAgICByZXN1bHQtPm1fc291cmNlVVJMID0gc291cmNlVVJMOwogICAg
IHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7CkBAIC0xNjgsMjQgKzE2OCwyMyBAQCAt
ICh2b2lkKXJlYWRDYWNoZQogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgY29uc3QgdWludDhfdCogZmlsZURhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihtYXBwZWRGaWxlLmRhdGEoKSk7Ci0gICAgdW5zaWduZWQgZmlsZVRvdGFsU2l6ZSA9IG1h
cHBlZEZpbGUuc2l6ZSgpOworICAgIGF1dG8gZmlsZURhdGEgPSBtYXBwZWRGaWxlLmRhdGEoKTsK
IAogICAgIC8vIEVuc3VyZSB3ZSBhdCBsZWFzdCBoYXZlIGEgU0hBMTo6RGlnZXN0IHRvIHJlYWQu
Ci0gICAgaWYgKGZpbGVUb3RhbFNpemUgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgeworICAgIGlm
IChmaWxlRGF0YS5zaXplKCkgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgewogICAgICAgICBGaWxl
U3lzdGVtOjpkZWxldGVGaWxlKGNhY2hlRmlsZW5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgdW5zaWduZWQgZmlsZURhdGFTaXplID0gZmlsZVRvdGFsU2l6ZSAtIHNpemVvZihT
SEExOjpEaWdlc3QpOworICAgIHVuc2lnbmVkIGZpbGVEYXRhU2l6ZSA9IGZpbGVEYXRhLnNpemUo
KSAtIHNpemVvZihTSEExOjpEaWdlc3QpOwogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFz
aDsKICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhmaWxlRGF0YSwgZmlsZURhdGFT
aXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKGZpbGVEYXRhLmZpcnN0KGZpbGVEYXRhU2l6ZSkpOwog
ICAgIHNoYTEuY29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2VzdCBm
aWxlSGFzaDsKLSAgICBtZW1jcHkoJmZpbGVIYXNoLCBmaWxlRGF0YSArIGZpbGVEYXRhU2l6ZSwg
c2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOworICAgIG1lbWNweSgmZmlsZUhhc2gsIGZpbGVEYXRhLmRh
dGEoKSArIGZpbGVEYXRhU2l6ZSwgc2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOwogCiAgICAgaWYgKGNv
bXB1dGVkSGFzaCAhPSBmaWxlSGFzaCkgewogICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxl
KGNhY2hlRmlsZW5hbWUpOwpAQCAtMzQzLDcgKzM0Miw3IEBAIC0gKEJPT0wpd3JpdGVDYWNoZToo
U3RyaW5nJillcnJvcgogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFzaDsKICAgICBTSEEx
IHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhtX2NhY2hlZEJ5dGVjb2RlLT5kYXRhKCksIG1fY2Fj
aGVkQnl0ZWNvZGUtPnNpemUoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgbV9jYWNoZWRC
eXRlY29kZS0+ZGF0YSgpLCBtX2NhY2hlZEJ5dGVjb2RlLT5zaXplKCkgfSk7CiAgICAgc2hhMS5j
b21wdXRlSGFzaChjb21wdXRlZEhhc2gpOwogICAgIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKHRl
bXBGRCwgY29tcHV0ZWRIYXNoLmRhdGEoKSwgc2l6ZW9mKGNvbXB1dGVkSGFzaCkpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0hhc2guY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgQ29kZUJsb2Nr
SGFzaDo6Q29kZUJsb2NrSGFzaChjb25zdCBTb3VyYwogICAgIEFTU0VSVChzb3VyY2VDb2RlLmxl
bmd0aCgpID49IDApOwogICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhTb3VyY2VDb2RlTGVuZ3Ro
VG9IYXNoID0gNTAwICogTUI7CiAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzb3VyY2VD
b2RlLmxlbmd0aCgpKSA8IG1heFNvdXJjZUNvZGVMZW5ndGhUb0hhc2gpCi0gICAgICAgIHNoYTEu
YWRkQnl0ZXMoc291cmNlQ29kZS50b1VURjgoKSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoc291
cmNlQ29kZS50b1VURjgoKS5ieXRlcygpKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gSnVzdCBo
YXNoIHdpdGggdGhlIGxlbmd0aCBhbmQgc2FtcGxlcyBvZiB0aGUgc291cmNlIHN0cmluZyBpbnN0
ZWFkLgogICAgICAgICBTdHJpbmdWaWV3IHN0ciA9IHNvdXJjZUNvZGUucHJvdmlkZXIoKS0+c291
cmNlKCk7CkBAIC02MiwxMCArNjIsMTAgQEAgQ29kZUJsb2NrSGFzaDo6Q29kZUJsb2NrSGFzaChj
b25zdCBTb3VyYwogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHIubGVuZ3RoKCk7CiAgICAg
ICAgIHVuc2lnbmVkIHN0ZXAgPSAobGVuZ3RoID4+IDEwKSArIDE7CiAKLSAgICAgICAgc2hhMS5h
ZGRCeXRlcyhiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KCZsZW5ndGgpLCBzaXplb2YobGVuZ3RoKSk7
CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZsZW5ndGgsIDEgfSk7CiAgICAgICAgIGRv
IHsKICAgICAgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IHN0cltpbmRleF07Ci0gICAgICAgICAg
ICBzaGExLmFkZEJ5dGVzKGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oJmNoYXJhY3RlciksIHNpemVv
ZihjaGFyYWN0ZXIpKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZjaGFyYWN0
ZXIsIDEgfSk7CiAgICAgICAgICAgICBvbGRJbmRleCA9IGluZGV4OwogICAgICAgICAgICAgaW5k
ZXggKz0gc3RlcDsKICAgICAgICAgfSB3aGlsZSAoaW5kZXggPiBvbGRJbmRleCAmJiBpbmRleCA8
IGxlbmd0aCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VIYXNo
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VI
YXNoLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BhcnNlSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiBQYXJzZUhhc2g6OlBhcnNlSGFzaChjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VD
b2RlKQogewogICAgIFNIQTEgc2hhMTsKLSAgICBzaGExLmFkZEJ5dGVzKHNvdXJjZUNvZGUudG9V
VEY4KCkpOworICAgIHNoYTEuYWRkQnl0ZXMoc291cmNlQ29kZS50b1VURjgoKS5ieXRlcygpKTsK
ICAgICBTSEExOjpEaWdlc3QgZGlnZXN0OwogICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsK
ICAgICB1bnNpZ25lZCBoYXNoID0gZGlnZXN0WzBdIHwgKGRpZ2VzdFsxXSA8PCA4KSB8IChkaWdl
c3RbMl0gPDwgMTYpIHwgKGRpZ2VzdFszXSA8PCAyNCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1JlbW90ZUluc3BlY3RvclV0aWxzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1Jl
bW90ZUluc3BlY3RvclV0aWxzLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgY29uc3QgQ1N0cmluZyYgYmFja2VuZENv
bW1hbmRzSGFzaCgpCiAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSA9IGdfYnl0ZXNfZ2V0X2Rh
dGEoYnl0ZXMuZ2V0KCksICZkYXRhU2l6ZSk7CiAgICAgICAgIEFTU0VSVChkYXRhU2l6ZSk7CiAg
ICAgICAgIFNIQTEgc2hhMTsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhzdGF0aWNfY2FzdDxjb25z
dCB1aW50OF90Kj4oZGF0YSksIGRhdGFTaXplKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFu
IHsgc3RhdGljX2Nhc3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSksIGRhdGFTaXplIH0pOwogICAg
ICAgICBoZXhEaWdlc3QgPSBzaGExLmNvbXB1dGVIZXhEaWdlc3QoKTsKICAgICB9CiAgICAgcmV0
dXJuIGhleERpZ2VzdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogI2luY2x1ZGUgPHd0Zi9QYWNrZWRSZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZl
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtODAsNyAr
ODEsMTAgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBt
X2RhdGEuZ2V0TWF5QmVOdWxsKHNpemVJbkJ5dGVzKCkpOyB9CiAgICAgdW5zaWduZWQgc2l6ZUlu
Qnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX3NpemVJbkJ5dGVzOyB9Ci0gICAgCisKKyAgICBTcGFu
PHN0ZDo6Ynl0ZT4gd3JpdGFibGVCeXRlcygpIHsgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8c3RkOjpi
eXRlKj4oZGF0YSgpKSwgc2l6ZUluQnl0ZXMoKSB9OyB9CisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4geyBzdGF0aWNfY2FzdDxjb25zdCBzdGQ6OmJ5dGUq
PihkYXRhKCkpLCBzaXplSW5CeXRlcygpIH07IH0KKwogICAgIGJvb2wgaXNTaGFyZWQoKSBjb25z
dCB7IHJldHVybiBtX3NoYXJlZDsgfQogICAgIAogcHJpdmF0ZToKQEAgLTEyNyw3ICsxMzEsOSBA
QCBwdWJsaWM6CiAgICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKICAgICBpbmxpbmUgY29uc3Qgdm9p
ZCogZGF0YSgpIGNvbnN0OwogICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7
Ci0gICAgCisgICAgaW5saW5lIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCk7CisgICAg
aW5saW5lIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAgICAgdm9pZCBt
YWtlU2hhcmVkKCk7CiAgICAgdm9pZCBzZXRTaGFyaW5nTW9kZShBcnJheUJ1ZmZlclNoYXJpbmdN
b2RlKTsKICAgICBpbmxpbmUgYm9vbCBpc1NoYXJlZCgpIGNvbnN0OwpAQCAtMTk3LDYgKzIwMywx
NiBAQCB1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJu
IG1fY29udGVudHMuc2l6ZUluQnl0ZXMoKTsKIH0KIAorU3BhbjxzdGQ6OmJ5dGU+IEFycmF5QnVm
ZmVyOjp3cml0YWJsZUJ5dGVzKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZW50cy53cml0YWJsZUJ5
dGVzKCk7Cit9CisKK1NwYW48Y29uc3Qgc3RkOjpieXRlPiBBcnJheUJ1ZmZlcjo6Ynl0ZXMoKSBj
b25zdAoreworICAgIHJldHVybiBtX2NvbnRlbnRzLmJ5dGVzKCk7Cit9CisKIGJvb2wgQXJyYXlC
dWZmZXI6OmlzU2hhcmVkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb250ZW50cy5pc1NoYXJl
ZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZm
ZXJWaWV3LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4Niw5IEBAIHB1
YmxpYzoKIAogICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVM
ZW5ndGg7IH0KIAorICAgIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCkgeyByZXR1cm4g
eyBzdGF0aWNfY2FzdDxzdGQ6OmJ5dGUqPihkYXRhKCkpLCBieXRlTGVuZ3RoKCkgfTsgfQorICAg
IFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0IHsgcmV0dXJuIHsgc3RhdGljX2Nh
c3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSgpKSwgYnl0ZUxlbmd0aCgpIH07IH0KKwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0RGV0YWNoYWJsZShib29sKTsKICAgICBib29sIGlzRGV0
YWNoYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNEZXRhY2hhYmxlOyB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlUGF5bG9hZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsMjcgKzMwLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogCiBD
YWNoZVBheWxvYWQgQ2FjaGVQYXlsb2FkOjptYWtlTWFwcGVkUGF5bG9hZChGaWxlU3lzdGVtOjpN
YXBwZWRGaWxlRGF0YSYmIGRhdGEpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZCh0cnVlLCBk
YXRhLmxlYWtIYW5kbGUoKSwgZGF0YS5zaXplKCkpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQo
dHJ1ZSwgZGF0YS5sZWFrSGFuZGxlKCkpOwogfQogCiBDYWNoZVBheWxvYWQgQ2FjaGVQYXlsb2Fk
OjptYWtlTWFsbG9jUGF5bG9hZChNYWxsb2NQdHI8dWludDhfdCwgVk1NYWxsb2M+JiYgZGF0YSwg
c2l6ZV90IHNpemUpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZChmYWxzZSwgZGF0YS5sZWFr
UHRyKCksIHNpemUpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQoZmFsc2UsIGFzV3JpdGFibGVC
eXRlcyhTcGFuIHsgZGF0YS5sZWFrUHRyKCksIHNpemUgfSkpOwogfQogCiBDYWNoZVBheWxvYWQg
Q2FjaGVQYXlsb2FkOjptYWtlRW1wdHlQYXlsb2FkKCkKIHsKLSAgICByZXR1cm4gQ2FjaGVQYXls
b2FkKHRydWUsIG51bGxwdHIsIDApOworICAgIHJldHVybiBDYWNoZVBheWxvYWQodHJ1ZSwgeyB9
KTsKIH0KIAogQ2FjaGVQYXlsb2FkOjpDYWNoZVBheWxvYWQoQ2FjaGVQYXlsb2FkJiYgb3RoZXIp
CiB7Ci0gICAgbV9tYXBwZWQgPSBvdGhlci5tX21hcHBlZDsKLSAgICBtX3NpemUgPSBvdGhlci5t
X3NpemU7Ci0gICAgbV9kYXRhID0gb3RoZXIubV9kYXRhOwotICAgIG90aGVyLm1fbWFwcGVkID0g
ZmFsc2U7Ci0gICAgb3RoZXIubV9kYXRhID0gbnVsbHB0cjsKLSAgICBvdGhlci5tX3NpemUgPSAw
OworICAgIG1fbWFwcGVkID0gc3RkOjpleGNoYW5nZShvdGhlci5tX21hcHBlZCwgZmFsc2UpOwor
ICAgIG1fZGF0YSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLCB7IH0pOwogfQogCiBDYWNo
ZVBheWxvYWQ6On5DYWNoZVBheWxvYWQoKQpAQCAtNjcsMTIgKzYzLDEzIEBAIENhY2hlUGF5bG9h
ZCYgQ2FjaGVQYXlsb2FkOjpvcGVyYXRvcj0oQ2EKIAogdm9pZCBDYWNoZVBheWxvYWQ6OmZyZWVE
YXRhKCkKIHsKLSAgICBpZiAoIW1fZGF0YSkKKyAgICBpZiAoIW1fZGF0YS5kYXRhKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBpZiAobV9tYXBwZWQpIHsKLSAgICAgICAgRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1fZGF0YSwgbV9zaXplKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZmFzdEZy
ZWUobV9kYXRhKTsKKworICAgIGlmIChtX21hcHBlZCkKKyAgICAgICAgRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1fZGF0YSk7CisgICAgZWxzZQorICAgICAgICBmYXN0RnJlZShtX2RhdGEu
ZGF0YSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHd0Zi9GaWxlU3lz
dGVtLmg+CiAjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MSwyMiArNDIsMjAgQEAgcHVibGljOgogICAgIEpT
X0VYUE9SVF9QUklWQVRFIH5DYWNoZVBheWxvYWQoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBD
YWNoZVBheWxvYWQmIG9wZXJhdG9yPShDYWNoZVBheWxvYWQmJiBvdGhlcik7CiAKLSAgICBjb25z
dCB1aW50OF90KiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBjb25zdCB1aW50OF90KiBkYXRhKCkg
Y29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9kYXRhLmRhdGEoKSk7
IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5zaXplKCk7IH0KIAog
cHJpdmF0ZToKLSAgICBDYWNoZVBheWxvYWQoYm9vbCBtYXBwZWQsIHZvaWQqIGRhdGEsIHNpemVf
dCBzaXplKQorICAgIENhY2hlUGF5bG9hZChib29sIG1hcHBlZCwgU3BhbjxzdGQ6OmJ5dGU+IGRh
dGEpCiAgICAgICAgIDogbV9tYXBwZWQobWFwcGVkKQotICAgICAgICAsIG1fc2l6ZShzaXplKQot
ICAgICAgICAsIG1fZGF0YShzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGF0YSkpCisgICAgICAgICwg
bV9kYXRhKGRhdGEpCiAgICAgewogICAgIH0KIAogICAgIHZvaWQgZnJlZURhdGEoKTsKIAogICAg
IGJvb2wgbV9tYXBwZWQ7Ci0gICAgc2l6ZV90IG1fc2l6ZTsKLSAgICB1aW50OF90KiBtX2RhdGE7
CisgICAgU3BhbjxzdGQ6OmJ5dGU+IG1fZGF0YTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1Bh
cnNlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNyArMjYxLDcg
QEAgYXV0byBTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKGNvbnN0IHVpbgogICAgIH0KIAogICAg
IGlmIChVTkxJS0VMWShPcHRpb25zOjp1c2VFYWdlcldlYkFzc2VtYmx5TW9kdWxlSGFzaGluZygp
KSkKLSAgICAgICAgbV9oYXNoZXIuYWRkQnl0ZXMoYnl0ZXMsIGJ5dGVzU2l6ZSk7CisgICAgICAg
IG1faGFzaGVyLmFkZEJ5dGVzKFNwYW4geyBieXRlcywgYnl0ZXNTaXplIH0pOwogCiAgICAgc2l6
ZV90IG9mZnNldEluQnl0ZXMgPSAwOwogICAgIHdoaWxlICh0cnVlKSB7CkluZGV4OiBTb3VyY2Uv
V1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw2OCBAQAorMjAyMS0wNi0xMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgQWRvcHQgU3BhbiBpbiBtb3JlIHBsYWNlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIFdURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmNwcDoKKyAgICAg
ICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjp+TWFwcGVkRmlsZURhdGEp
OgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6TWFwcGVkRmlsZURhdGE6Om1hcEZpbGVI
YW5kbGUpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6dW5tYXBWaWV3T2ZGaWxlKToK
KyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Om1hcFRvRmlsZSk6CisgICAgICAgICogd3Rm
L0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVE
YXRhOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6
Ok1hcHBlZEZpbGVEYXRhOjpkYXRhIGNvbnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUlt
cGw6Ok1hcHBlZEZpbGVEYXRhOjpsZWFrSGFuZGxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3Rl
bUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YSk6CisgICAgICAgIChXVEY6OkZp
bGVTeXN0ZW1JbXBsOjpNYXBwZWRGaWxlRGF0YTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6
RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpzaXplIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1NIQTEuY3BwOgorICAgICAgICAoV1RG
OjpTSEExOjphZGRCeXRlcyk6CisgICAgICAgIChXVEY6OlNIQTE6OmZpbmFsaXplKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6U0hBMTo6cHJvY2Vzc0Jsb2NrKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6U0hBMTo6cmVzZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTSEExOjpoZXhEaWdl
c3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTSEExOjpjb21wdXRlSGV4RGlnZXN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3dGYvU0hBMS5oOgorICAgICAgICAoV1RGOjpTSEExOjphZGRCeXRl
cyk6CisgICAgICAgICogd3RmL1ZlY3Rvci5oOgorICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZS9Q
ZXJzaXN0ZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPENT
dHJpbmc+OjplbmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8Q1N0cmlu
Zz46OmRlY29kZSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTdHJpbmc+Ojpl
bmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVjb2RlU3RyaW5nVGV4dCk6Cisg
ICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUpOgor
ICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKToK
KyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oOgorICAgICAgICAq
IHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5jcHA6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyOjpEZWNvZGVyKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6
OkRlY29kZXI6OmJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFkKToKKyAgICAgICAgKFdURjo6UGVy
c2lzdGVuY2U6OkRlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjp2ZXJpZnlDaGVja3N1bSk6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyOjp+RGVjb2Rlcik6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3Bl
cnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmg6CisgICAgICAgICogd3RmL3BlcnNpc3RlbmNl
L1BlcnNpc3RlbnRFbmNvZGVyLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29k
ZXI6Omdyb3cpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6dXBkYXRlQ2hl
Y2tzdW1Gb3JEYXRhKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6OmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjpl
bmNvZGVOdW1iZXIpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6ZW5jb2Rl
Q2hlY2tzdW0pOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6RW5jb2Rlcik6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjp+RW5jb2Rlcik6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmg6
CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjpidWZmZXIgY29uc3QpOgorICAg
ICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIp
OgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6YnVmZmVyU2l6ZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL3RleHQvQmFzZTY0Lmg6CisgICAgICAgIChXVEY6OmJh
c2U2NEVuY29kZVRvVmVjdG9yKToKKyAgICAgICAgKFdURjo6YmFzZTY0RW5jb2RlVG9TdHJpbmcp
OgorICAgICAgICAqIHd0Zi90ZXh0L0NTdHJpbmcuaDoKKwogMjAyMS0wNi0xMSAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgV2Vha0hhc2hNYXAKSW5kZXg6
IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtNjkyLDYgKzY5Miw4IEBACiAJCUFEODlCNkI5MUU2NDE1MEYwMDkwNzA3RiAvKiBN
ZW1vcnlQcmVzc3VyZUhhbmRsZXJDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IE1lbW9yeVByZXNzdXJlSGFuZGxlckNvY29hLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBREYyQ0U2NDFFMzlGMTA2MDA2ODg5REIgLyogTWVtb3J5Rm9vdHBy
aW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lbW9yeUZvb3RwcmludC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREYyQ0U2NTFFMzlGMTA2MDA2ODg5REIg
LyogTWVtb3J5Rm9vdHByaW50Q29jb2EuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTWVtb3J5Rm9vdHByaW50Q29jb2EuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlCQzcwMEI0NDI2NzY2ODM0MDA0OUVERjIgLyogU3BhbkNvY29hLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNwYW5Db2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzcwMEI0
NTI2NzY2OUMxMDA0OUVERjIgLyogU3BhbkNGLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwYW5DRi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0EzMEM3RjI2NkQzMDM0MDAwRDIzMEMgLyog
U3Bhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTcGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyQkNGQzNFMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5ndWFnZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYW5ndWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyQkNGQzNGMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5ndWFnZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYW5ndWFnZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtODQwLDYgKzg0Miw3IEBACiAJCQkJQzJCQ0ZDNDExRjYxRDYxNjAwQzky
MjJDIC8qIExhbmd1YWdlQ0YuY3BwICovLAogCQkJCTJDREVEMEVFMTgxMTVDMzgwMDREQkE3MCAv
KiBSdW5Mb29wQ0YuY3BwICovLAogCQkJCUEzRUU1QzNCMjFGRkFDN0MwMEZBQkQ2MSAvKiBTY2hl
ZHVsZVBhaXJDRi5jcHAgKi8sCisJCQkJQkM3MDBCNDUyNjc2NjlDMTAwNDlFREYyIC8qIFNwYW5D
Ri5oICovLAogCQkJCTFBRkRFNjQ3MTk1MjAxQzMwMEM0OEZGQSAvKiBUeXBlQ2FzdHNDRi5oICov
LAogCQkJCTVDMUYwNTk0MjE2NDM3QjMwMDM5MzAyQyAvKiBVUkxDRi5jcHAgKi8sCiAJCQkpOwpA
QCAtMTU4MSw2ICsxNTg0LDcgQEAKIAkJCQkxQ0E4NUNBODI0MUIwQjI2MDA3MUMyRjUgLyogUnVu
dGltZUFwcGxpY2F0aW9uQ2hlY2tzQ29jb2EuY3BwICovLAogCQkJCTFDQTg1Q0E3MjQxQjBCMTEw
MDcxQzJGNSAvKiBSdW50aW1lQXBwbGljYXRpb25DaGVja3NDb2NvYS5oICovLAogCQkJCUEzMEQ0
MTJDMUYwREUwQkEwMEI3MTk1NCAvKiBTb2Z0TGlua2luZy5oICovLAorCQkJCUJDNzAwQjQ0MjY3
NjY4MzQwMDQ5RURGMiAvKiBTcGFuQ29jb2EuaCAqLywKIAkJCQlFQjYxRURDNjI0MDlDQ0MwMDAx
RUZFMzYgLyogU3lzdGVtVHJhY2luZ0NvY29hLmNwcCAqLywKIAkJCQk1Q0MwRUU4NjIxNjJCQzIy
MDBBMUE4NDIgLyogVVJMQ29jb2EubW0gKi8sCiAJCQkJOTMyNDE2NTcyNDNCQzJFNTAwMzJGQUFF
IC8qIFZlY3RvckNvY29hLmggKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxOSw5ICszMTksOSBAQCBib29sIGV4Y2x1ZGVGcm9tQmFja3VwKGNvbnN0IFN0cmluZyYp
CiAKIE1hcHBlZEZpbGVEYXRhOjp+TWFwcGVkRmlsZURhdGEoKQogewotICAgIGlmICghbV9maWxl
RGF0YSkKKyAgICBpZiAoIW1fZmlsZURhdGEuZGF0YSgpKQogICAgICAgICByZXR1cm47Ci0gICAg
dW5tYXBWaWV3T2ZGaWxlKG1fZmlsZURhdGEsIG1fZmlsZVNpemUpOworICAgIHVubWFwVmlld09m
RmlsZShtX2ZpbGVEYXRhKTsKIH0KIAogTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKGNv
bnN0IFN0cmluZyYgZmlsZVBhdGgsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUsIGJvb2wmIHN1Y2Nl
c3MpCkBAIC0zODMsMTQgKzM4MywxMyBAQCBib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFu
ZGxlKFBsYXRmCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBtX2ZpbGVEYXRh
ID0gZGF0YTsKLSAgICBtX2ZpbGVTaXplID0gc2l6ZTsKKyAgICBtX2ZpbGVEYXRhID0gU3BhbiB7
IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpieXRlKj4oZGF0YSksIHNpemUgfTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCB1bm1hcFZpZXdPZkZpbGUodm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6
ZSkKK2Jvb2wgdW5tYXBWaWV3T2ZGaWxlKFNwYW48c3RkOjpieXRlPiBkYXRhKQogewotICAgIHJl
dHVybiAhbXVubWFwKGJ1ZmZlciwgc2l6ZSk7CisgICAgcmV0dXJuICFtdW5tYXAoZGF0YS5kYXRh
KCksIGRhdGEuc2l6ZSgpKTsKIH0KIAogI2VuZGlmCkBAIC00MzgsNyArNDM3LDcgQEAgU3RyaW5n
IGNyZWF0ZVRlbXBvcmFyeVppcEFyY2hpdmUoY29uc3QgUwogfQogI2VuZGlmCiAKLU1hcHBlZEZp
bGVEYXRhIG1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIHNpemVfdCBieXRlc1NpemUsIEZ1
bmN0aW9uPHZvaWQoY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4m
KT4mJiBhcHBseSwgUGxhdGZvcm1GaWxlSGFuZGxlKiBvdXRwdXRIYW5kbGUpCitNYXBwZWRGaWxl
RGF0YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBzaXplX3QgYnl0ZXNTaXplLCBGdW5j
dGlvbjx2b2lkKGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mKT4m
JiBhcHBseSwgUGxhdGZvcm1GaWxlSGFuZGxlKiBvdXRwdXRIYW5kbGUpCiB7CiAgICAgY29uc3Rl
eHByIGJvb2wgZmFpbElmRmlsZUV4aXN0cyA9IHRydWU7CiAgICAgYXV0byBoYW5kbGUgPSBGaWxl
U3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWRXcml0
ZSwgRmlsZVN5c3RlbTo6RmlsZUFjY2Vzc1Blcm1pc3Npb246OlVzZXIsIGZhaWxJZkZpbGVFeGlz
dHMpOwpAQCAtNDU1LDEyICs0NTQsMTIgQEAgTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxlKGNvbnN0
IFN0cmluZyYgcAogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIHZvaWQqIG1hcCA9
IGNvbnN0X2Nhc3Q8dm9pZCo+KG1hcHBlZEZpbGUuZGF0YSgpKTsKLSAgICB1aW50OF90KiBtYXBE
YXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1hcCk7CisgICAgYXV0byBtYXAgPSBtYXBwZWRG
aWxlLmRhdGEoKS5kYXRhKCk7CisgICAgYXV0byBtYXBEYXRhID0gbWFwOwogCi0gICAgYXBwbHko
WyZtYXBEYXRhXShjb25zdCB1aW50OF90KiBjaHVuaywgc2l6ZV90IGNodW5rU2l6ZSkgewotICAg
ICAgICBtZW1jcHkobWFwRGF0YSwgY2h1bmssIGNodW5rU2l6ZSk7Ci0gICAgICAgIG1hcERhdGEg
Kz0gY2h1bmtTaXplOworICAgIGFwcGx5KFsmbWFwRGF0YV0oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+
IGNodW5rKSB7CisgICAgICAgIG1lbWNweShtYXBEYXRhLCBjaHVuay5kYXRhKCksIGNodW5rLnNp
emUoKSk7CisgICAgICAgIG1hcERhdGEgKz0gY2h1bmsuc2l6ZSgpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9KTsKIApJbmRleDogU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICsz
NCw3IEBACiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KQEAgLTIxMCw3ICsyMTEsNyBAQCBXVEZfRVhQT1JUX1BSSVZBVEUg
U3RyaW5nIHJlYWxQYXRoKGNvbnN0CiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc1NhZmVUb1Vz
ZU1lbW9yeU1hcEZvclBhdGgoY29uc3QgU3RyaW5nJik7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBtYWtlU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChjb25zdCBTdHJpbmcmKTsKIAotV1RGX0VY
UE9SVF9QUklWQVRFIGJvb2wgdW5tYXBWaWV3T2ZGaWxlKHZvaWQqIGJ1ZmZlciwgc2l6ZV90KTsK
K1dURl9FWFBPUlRfUFJJVkFURSBib29sIHVubWFwVmlld09mRmlsZShTcGFuPHN0ZDo6Ynl0ZT4p
OwogCiBjbGFzcyBNYXBwZWRGaWxlRGF0YSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CkBAIC0yMjMsMTcgKzIyNCwxNSBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5N
YXBwZWRGaWxlRGF0YSgpOwogICAgIE1hcHBlZEZpbGVEYXRhJiBvcGVyYXRvcj0oTWFwcGVkRmls
ZURhdGEmJik7CiAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
ISFtX2ZpbGVEYXRhOyB9Ci0gICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZmlsZURhdGE7IH0KLSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9maWxlU2l6
ZTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fZmls
ZURhdGEuZGF0YSgpOyB9CisgICAgU3BhbjxzdGQ6OmJ5dGU+IGRhdGEoKSBjb25zdCB7IHJldHVy
biBtX2ZpbGVEYXRhOyB9CiAKLSAgICB2b2lkKiBsZWFrSGFuZGxlKCkgeyByZXR1cm4gc3RkOjpl
eGNoYW5nZShtX2ZpbGVEYXRhLCBudWxscHRyKTsgfQorICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBT
cGFuPHN0ZDo6Ynl0ZT4gbGVha0hhbmRsZSgpIHsgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9maWxl
RGF0YSwgeyB9KTsgfQogCiBwcml2YXRlOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIG1h
cEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBGaWxlT3Blbk1vZGUsIE1hcHBlZEZpbGVN
b2RlKTsKIAotICAgIHZvaWQqIG1fZmlsZURhdGEgeyBudWxscHRyIH07Ci0gICAgdW5zaWduZWQg
bV9maWxlU2l6ZSB7IDAgfTsKKyAgICBTcGFuPHN0ZDo6Ynl0ZT4gbV9maWxlRGF0YTsKIH07CiAK
IGlubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGxhdGZvcm1GaWxlSGFuZGxl
IGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUgbWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKQEAgLTI0Nywy
MSArMjQ2LDE5IEBAIGlubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGwKIH0K
IAogaW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShNYXBwZWRGaWxlRGF0YSYm
IG90aGVyKQotICAgIDogbV9maWxlRGF0YShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEs
IG51bGxwdHIpKQotICAgICwgbV9maWxlU2l6ZShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZVNp
emUsIDApKQorICAgIDogbV9maWxlRGF0YShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEs
IHsgfSkpCiB7CiB9CiAKIGlubGluZSBNYXBwZWRGaWxlRGF0YSYgTWFwcGVkRmlsZURhdGE6Om9w
ZXJhdG9yPShNYXBwZWRGaWxlRGF0YSYmIG90aGVyKQogewotICAgIG1fZmlsZURhdGEgPSBzdGQ6
OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEsIG51bGxwdHIpOwotICAgIG1fZmlsZVNpemUgPSBz
dGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZVNpemUsIDApOworICAgIG1fZmlsZURhdGEgPSBzdGQ6
OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEsIHsgfSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQog
CiAvLyBUaGlzIGNyZWF0ZXMgdGhlIGRlc3RpbmF0aW9uIGZpbGUsIG1hcHMgaXQsIHdyaXRlIHRo
ZSBwcm92aWRlZCBkYXRhIHRvIGl0IGFuZCByZXR1cm5zIHRoZSBtYXBwZWQgZmlsZS4KIC8vIFRo
aXMgZnVuY3Rpb24gZmFpbHMgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIGZpbGUgYXQgdGhlIGRlc3Rp
bmF0aW9uIHBhdGguCi1XVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVuY3Rpb248dm9pZChjb25z
dCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYpPiYmIGFwcGx5LCBQbGF0
Zm9ybUZpbGVIYW5kbGUqID0gbnVsbHB0cik7CitXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmls
ZURhdGEgbWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVu
Y3Rpb248dm9pZChjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+Jik+
JiYgYXBwbHksIFBsYXRmb3JtRmlsZUhhbmRsZSogPSBudWxscHRyKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgRmlsZVN5c3RlbUltcGwKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93
dGYvU0hBMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU0hBMS5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL1NIQTEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NiwxMCArNDYsMTAgQEAgU0hBMTo6U0hBMSgpCiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNM
QVJBVElPTlNfRU5ECiB9CiAKLXZvaWQgU0hBMTo6YWRkQnl0ZXMoY29uc3QgdWludDhfdCogaW5w
dXQsIHNpemVfdCBsZW5ndGgpCit2b2lkIFNIQTE6OmFkZEJ5dGVzKFNwYW48Y29uc3Qgc3RkOjpi
eXRlPiBpbnB1dCkKIHsKICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgot
ICAgIENDX1NIQTFfVXBkYXRlKCZtX2NvbnRleHQsIGlucHV0LCBsZW5ndGgpOworICAgIENDX1NI
QTFfVXBkYXRlKCZtX2NvbnRleHQsIGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpKTsKICAgICBB
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIH0KIApAQCAtMTAxLDExICsxMDEsMTEg
QEAgU0hBMTo6U0hBMSgpCiAgICAgcmVzZXQoKTsKIH0KIAotdm9pZCBTSEExOjphZGRCeXRlcyhj
b25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGxlbmd0aCkKK3ZvaWQgU0hBMTo6YWRkQnl0ZXMo
U3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQogewotICAgIHdoaWxlIChsZW5ndGgtLSkgewor
ICAgIGZvciAoYXV0byBieXRlIDogaW5wdXQpIHsKICAgICAgICAgQVNTRVJUKG1fY3Vyc29yIDwg
NjQpOwotICAgICAgICBtX2J1ZmZlclttX2N1cnNvcisrXSA9ICppbnB1dCsrOworICAgICAgICBt
X2J1ZmZlclttX2N1cnNvcisrXSA9IHN0ZDo6dG9faW50ZWdlcjx1aW50OF90PihieXRlKTsKICAg
ICAgICAgKyttX3RvdGFsQnl0ZXM7CiAgICAgICAgIGlmIChtX2N1cnNvciA9PSA2NCkKICAgICAg
ICAgICAgIHByb2Nlc3NCbG9jaygpOwpJbmRleDogU291cmNlL1dURi93dGYvU0hBMS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NIQTEuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dURi93dGYvU0hBMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgPGFycmF5PgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAt
NDUsMTUgKzQ2LDExIEBAIGNsYXNzIFNIQTEgewogcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBTSEExKCk7CiAKLSAgICB2b2lkIGFkZEJ5dGVzKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
aW5wdXQpCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkQnl0ZXMoU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkZEJ5dGVzKFQmJiBk
YXRhKQogICAgIHsKLSAgICAgICAgYWRkQnl0ZXMoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkp
OworICAgICAgICByZXR1cm4gYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+
KGRhdGEpIH0pKTsKICAgICB9Ci0gICAgdm9pZCBhZGRCeXRlcyhjb25zdCBDU3RyaW5nJiBpbnB1
dCkKLSAgICB7Ci0gICAgICAgIGFkZEJ5dGVzKGlucHV0LmRhdGFBc1VJbnQ4UHRyKCksIGlucHV0
Lmxlbmd0aCgpKTsKLSAgICB9Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkQnl0ZXMo
Y29uc3QgdWludDhfdCogaW5wdXQsIHNpemVfdCBsZW5ndGgpOwogCiAgICAgLy8gU2l6ZSBvZiB0
aGUgU0hBMSBoYXNoCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBjb25zdGV4cHIgc2l6
ZV90IGhhc2hTaXplID0gMjA7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dURi93dGYvVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxMyw2ICs2MTMsNyBAQCBw
cml2YXRlOgogCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBUIFZhbHVlVHlwZTsKKyAgICB0eXBlZGVm
IFQgdmFsdWVfdHlwZTsKIAogICAgIHR5cGVkZWYgVCogaXRlcmF0b3I7CiAgICAgdHlwZWRlZiBj
b25zdCBUKiBjb25zdF9pdGVyYXRvcjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL2NmL1NwYW5DRi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL2NmL1NwYW5DRi5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XVEYvd3RmL2NmL1NwYW5DRi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPENvcmVGb3VuZGF0
aW9uL0NvcmVGb3VuZGF0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KKworbmFtZXNwYWNl
IFdURiB7CisKK2lubGluZSBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYXNCeXRlcyhDRkRhdGFSZWYg
ZGF0YSkKK3sKKyAgICByZXR1cm4geyByZWludGVycHJldF9jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+
KENGRGF0YUdldEJ5dGVQdHIoZGF0YSkpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KENGRGF0YUdldExl
bmd0aChkYXRhKSkgfTsKK30KKworfQorCit1c2luZyBXVEY6OmFzQnl0ZXM7CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9jb2NvYS9TcGFuQ29jb2EuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9jb2NvYS9TcGFuQ29jb2EuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9jb2Nv
YS9TcGFuQ29jb2EuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNp
bmNsdWRlIDx3dGYvU3Bhbi5oPgorCituYW1lc3BhY2UgV1RGIHsKKworaW5saW5lIFNwYW48Y29u
c3Qgc3RkOjpieXRlPiBhc0J5dGVzKE5TRGF0YSAqZGF0YSkKK3sKKyAgICByZXR1cm4geyByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxlbmd0aCB9
OworfQorCit9CisKK3VzaW5nIFdURjo6YXNCeXRlczsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3Bl
cnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIENvZGVyPENTdHJpbmc+OjplbmNvZGUoRW5j
b2RlciYgZW5jCiAKICAgICB1aW50MzJfdCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAg
ZW5jb2RlciA8PCBsZW5ndGg7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3Ry
aW5nLmRhdGFBc1VJbnQ4UHRyKCksIGxlbmd0aCk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoc3RyaW5nLmJ5dGVzKCkpOwogfQogCiBzdGQ6Om9wdGlvbmFsPENTdHJpbmc+IENv
ZGVyPENTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKQEAgLTc4LDcgKzc4LDcgQEAg
c3RkOjpvcHRpb25hbDxDU3RyaW5nPiBDb2RlcjxDU3RyaW5nPjo6ZAogCiAgICAgY2hhciogYnVm
ZmVyOwogICAgIENTdHJpbmcgc3RyaW5nID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZCgqbGVu
Z3RoLCBidWZmZXIpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgKmxlbmd0aCkpCisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgcmVpbnRlcnByZXRfY2FzdDxzdGQ6OmJ5
dGUqPihidWZmZXIpLCAqbGVuZ3RoIH0pKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owog
CiAgICAgcmV0dXJuIHN0cmluZzsKQEAgLTk2LDExICs5Niw3IEBAIHZvaWQgQ29kZXI8U3RyaW5n
Pjo6ZW5jb2RlKEVuY29kZXImIGVuY28KICAgICBib29sIGlzOEJpdCA9IHN0cmluZy5pczhCaXQo
KTsKIAogICAgIGVuY29kZXIgPDwgbGVuZ3RoIDw8IGlzOEJpdDsKLQotICAgIGlmIChpczhCaXQp
Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0cmluZy5jaGFyYWN0ZXJz
OCgpLCBsZW5ndGgpOwotICAgIGVsc2UKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnMx
NigpKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoc3RyaW5nLmJ5dGVzKCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KQEAgLTExMiw3ICsxMDgsNyBAQCBzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8
U3RyaW5nPiBkZWNvCiAKICAgICBDaGFyYWN0ZXJUeXBlKiBidWZmZXI7CiAgICAgU3RyaW5nIHN0
cmluZyA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihidWZmZXIpLCBsZW5ndGggKiBzaXplb2YoQ2hhcmFjdGVyVHlwZSkpKQorICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8c3Rk
OjpieXRlKj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJhY3RlclR5cGUpIH0pKQogICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIAogICAgIHJldHVybiBzdHJpbmc7CkBAIC0x
NDIsMTMgKzEzOCwxMyBAQCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gQ29kZXI8U3RyaW5nPjo6ZGVj
CiAKIHZvaWQgQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQogewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpKTsKKyAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3QpOwogfQogCiBzdGQ6Om9wdGlvbmFsPFNIQTE6OkRpZ2Vz
dD4gQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAg
U0hBMTo6RGlnZXN0IHRtcDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHRtcC5kYXRhKCksIHNpemVvZih0bXApKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKHRtcCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgcmV0dXJu
IHRtcDsKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2Rl
cnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50
Q29kZXJzLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNl
L1BlcnNpc3RlbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYg
dmVjdG9yKQogICAgIHsKICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
dmVjdG9yLnNpemUoKSk7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6
ZSgpICogc2l6ZW9mKFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEo
dmVjdG9yKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5Pj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCkBAIC0xNzMsNyArMTcz
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAgICAgICBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IHRlbXA7CiAgICAgICAgIHRlbXAuZ3JvdyhzaXplKTsK
IAotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KHRlbXAuZGF0YSgpKSwgc2l6ZSAqIHNpemVvZihUKSkpCisgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEodGVtcCkpCiAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgICAgIHJldHVybiB0ZW1wOwpJbmRleDogU291cmNl
L1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmNwcAkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29k
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyMyArMzEsMjEgQEAKIG5hbWVzcGFjZSBXVEYg
ewogbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAotRGVjb2Rlcjo6RGVjb2Rlcihjb25zdCB1aW50
OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKQotICAgIDogbV9idWZmZXIoYnVmZmVyKQot
ICAgICwgbV9idWZmZXJQb3NpdGlvbihidWZmZXIpCi0gICAgLCBtX2J1ZmZlckVuZChidWZmZXIg
KyBidWZmZXJTaXplKQorRGVjb2Rlcjo6RGVjb2RlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnVm
ZmVyKQorICAgIDogbV9idWZmZXIoYnVmZmVyLmRhdGEoKSkKKyAgICAsIG1fYnVmZmVyUG9zaXRp
b24oYnVmZmVyLmRhdGEoKSkKKyAgICAsIG1fYnVmZmVyRW5kKGJ1ZmZlci5kYXRhKCkgKyBidWZm
ZXIuc2l6ZSgpKQogewogfQogCi1EZWNvZGVyOjp+RGVjb2RlcigpCi17Ci19CitEZWNvZGVyOjp+
RGVjb2RlcigpID0gZGVmYXVsdDsKIAogYm9vbCBEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdo
VG9Db250YWluKHNpemVfdCBzaXplKSBjb25zdAogewogICAgIHJldHVybiBzaXplIDw9IHN0YXRp
Y19jYXN0PHNpemVfdD4obV9idWZmZXJFbmQgLSBtX2J1ZmZlclBvc2l0aW9uKTsKIH0KIAotY29u
c3QgdWludDhfdCogRGVjb2Rlcjo6YnVmZmVyUG9pbnRlckZvckRpcmVjdFJlYWQoc2l6ZV90IHNp
emUpCitjb25zdCBzdGQ6OmJ5dGUqIERlY29kZXI6OmJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFk
KHNpemVfdCBzaXplKQogewogICAgIGlmICghYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihz
aXplKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC01NSwxNiArNTMsMTYgQEAgY29uc3Qg
dWludDhfdCogRGVjb2Rlcjo6YnVmZmVyUG9pbnRlckZvcgogICAgIGF1dG8gZGF0YSA9IG1fYnVm
ZmVyUG9zaXRpb247CiAgICAgbV9idWZmZXJQb3NpdGlvbiArPSBzaXplOwogCi0gICAgRW5jb2Rl
cjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgZGF0YSwgc2l6ZSk7CisgICAgRW5jb2Rl
cjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgU3BhbiB7IGRhdGEsIHNpemUgfSk7CiAg
ICAgcmV0dXJuIGRhdGE7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQorYm9vbCBEZWNvZGVyOjpkZWNvZGVGaXhlZExl
bmd0aERhdGEoU3BhbjxzdGQ6OmJ5dGU+IGRhdGEpCiB7Ci0gICAgYXV0byBidWZmZXIgPSBidWZm
ZXJQb2ludGVyRm9yRGlyZWN0UmVhZChzaXplKTsKKyAgICBhdXRvIGJ1ZmZlciA9IGJ1ZmZlclBv
aW50ZXJGb3JEaXJlY3RSZWFkKGRhdGEuc2l6ZSgpKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIG1lbWNweShkYXRhLCBidWZmZXIsIHNpemUpOworICAgIG1l
bWNweShkYXRhLmRhdGEoKSwgYnVmZmVyLCBkYXRhLnNpemUoKSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTEzOSw3ICsxMzcsNyBAQCBib29sIERlY29kZXI6OnZlcmlmeUNoZWNrc3VtKCkK
ICAgICBtX3NoYTEuY29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2Vz
dCBzYXZlZEhhc2g7Ci0gICAgaWYgKCFkZWNvZGVGaXhlZExlbmd0aERhdGEoc2F2ZWRIYXNoLmRh
dGEoKSwgc2l6ZW9mKHNhdmVkSGFzaCkpKQorICAgIGlmICghZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHNhdmVkSGFzaCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBjb21wdXRl
ZEhhc2ggPT0gc2F2ZWRIYXNoOwpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVy
c2lzdGVudERlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5j
ZS9QZXJzaXN0ZW50RGVjb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0
Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw3IEBACiAKICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9T
SEExLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2Uv
UGVyc2lzdGVudENvZGVyLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMzUsNyArMzYsMTIgQEAg
bmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIGNsYXNzIERlY29kZXIgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyKGNv
bnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IERlY29kZXIoVCYmIGRhdGEpCisgICAgICAgIDogRGVjb2RlciB7IGFzQnl0ZXMo
U3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihkYXRhKSB9KSB9CisgICAgeworICAgIH0KKworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIH5EZWNvZGVyKCk7CiAKICAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3Qg
eyByZXR1cm4gbV9idWZmZXJFbmQgLSBtX2J1ZmZlcjsgfQpAQCAtNDMsNyArNDksMTEgQEAgcHVi
bGljOgogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIHZl
cmlmeUNoZWNrc3VtKCk7CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgV0FSTl9VTlVTRURfUkVU
VVJOIGJvb2wgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqLCBzaXplX3QpOworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVGaXhlZExlbmd0
aERhdGEoU3BhbjxzdGQ6OmJ5dGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIGRl
Y29kZUZpeGVkTGVuZ3RoRGF0YShUJiYgZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNv
ZGVGaXhlZExlbmd0aERhdGEoYXNXcml0YWJsZUJ5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4o
ZGF0YSkgfSkpOworICAgIH0KIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVy
YXRvcj4+KHN0ZDo6b3B0aW9uYWw8Ym9vbD4mKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVj
b2RlciYgb3BlcmF0b3I+PihzdGQ6Om9wdGlvbmFsPHVpbnQ4X3Q+Jik7CkBAIC04NCw3ICs5NCw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG51bUVsZW1lbnRzIDw9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8c2l6ZV90Pjo6bWF4KCkgLyBzaXplb2YoVCkgJiYgYnVmZmVySXNMYXJnZUVub3VnaFRv
Q29udGFpbihudW1FbGVtZW50cyAqIHNpemVvZihUKSk7CiAgICAgfQogCi0gICAgV1RGX0VYUE9S
VF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBjb25zdCB1aW50OF90KiBidWZmZXJQb2ludGVy
Rm9yRGlyZWN0UmVhZChzaXplX3QgbnVtQnl0ZXMpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBX
QVJOX1VOVVNFRF9SRVRVUk4gY29uc3Qgc3RkOjpieXRlKiBidWZmZXJQb2ludGVyRm9yRGlyZWN0
UmVhZChzaXplX3QgbnVtQnl0ZXMpOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSVBD
RGVjb2RlciA9IGZhbHNlOwogCkBAIC05Miw5ICsxMDIsOSBAQCBwcml2YXRlOgogICAgIFdURl9F
WFBPUlRfUFJJVkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBidWZmZXJJc0xhcmdlRW5vdWdo
VG9Db250YWluKHNpemVfdCkgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4gRGVj
b2RlciYgZGVjb2RlTnVtYmVyKHN0ZDo6b3B0aW9uYWw8VHlwZT4mKTsKIAotICAgIGNvbnN0IHVp
bnQ4X3QqIG1fYnVmZmVyOwotICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyUG9zaXRpb247Ci0g
ICAgY29uc3QgdWludDhfdCogbV9idWZmZXJFbmQ7CisgICAgY29uc3Qgc3RkOjpieXRlKiBtX2J1
ZmZlcjsKKyAgICBjb25zdCBzdGQ6OmJ5dGUqIG1fYnVmZmVyUG9zaXRpb247CisgICAgY29uc3Qg
c3RkOjpieXRlKiBtX2J1ZmZlckVuZDsKIAogICAgIFNIQTEgbV9zaGExOwogfTsKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRF
bmNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMzQgKzMxLDM0IEBACiBuYW1lc3BhY2Ug
V1RGIHsKIG5hbWVzcGFjZSBQZXJzaXN0ZW5jZSB7CiAKLUVuY29kZXI6OkVuY29kZXIoKQotewot
fQotCi1FbmNvZGVyOjp+RW5jb2RlcigpCi17Ci19CitFbmNvZGVyOjpFbmNvZGVyKCkgPSBkZWZh
dWx0OworRW5jb2Rlcjo6fkVuY29kZXIoKSA9IGRlZmF1bHQ7CiAKLXVpbnQ4X3QqIEVuY29kZXI6
Omdyb3coc2l6ZV90IHNpemUpCitzdGQ6OmJ5dGUqIEVuY29kZXI6Omdyb3coc2l6ZV90IHNpemUp
CiB7CiAgICAgc2l6ZV90IG5ld1Bvc2l0aW9uID0gbV9idWZmZXIuc2l6ZSgpOwogICAgIG1fYnVm
ZmVyLmdyb3cobV9idWZmZXIuc2l6ZSgpICsgc2l6ZSk7CiAgICAgcmV0dXJuIG1fYnVmZmVyLmRh
dGEoKSArIG5ld1Bvc2l0aW9uOwogfQogCi12b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9y
RGF0YShTSEExJiBzaGExLCBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3ZvaWQg
RW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmIHNoYTEsIFNwYW48Y29uc3QgdWlu
dDhfdD4gZGF0YSkKK3sKKyAgICByZXR1cm4gdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKHNoYTEsIGFz
Qnl0ZXMoZGF0YSkpOworfQorCit2b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yRGF0YShT
SEExJiBzaGExLCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKICAgICBhdXRvIHR5cGVT
YWx0ID0gU2FsdDx1aW50OF90Kj46OnZhbHVlOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7Ci0gICAgc2hh
MS5hZGRCeXRlcyhkYXRhLCBzaXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmdHlwZVNh
bHQsIDEgfSk7CisgICAgc2hhMS5hZGRCeXRlcyhkYXRhKTsKIH0KIAotdm9pZCBFbmNvZGVyOjpl
bmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCit2
b2lkIEVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
ZGF0YSkKIHsKLSAgICB1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhLCBzaXplKTsK
KyAgICB1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhKTsKIAotICAgIHVpbnQ4X3Qq
IGJ1ZmZlciA9IGdyb3coc2l6ZSk7Ci0gICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7Cisg
ICAgYXV0byogYnVmZmVyID0gZ3JvdyhkYXRhLnNpemUoKSk7CisgICAgbWVtY3B5KGJ1ZmZlciwg
ZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4K
QEAgLTY2LDcgKzY2LDcgQEAgRW5jb2RlciYgRW5jb2Rlcjo6ZW5jb2RlTnVtYmVyKFR5cGUgdmFs
dQogewogICAgIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKG1fc2hhMSwgdmFsdWUp
OwogCi0gICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhzaXplb2YoVHlwZSkpOworICAgIGF1dG8q
IGJ1ZmZlciA9IGdyb3coc2l6ZW9mKFR5cGUpKTsKICAgICBtZW1jcHkoYnVmZmVyLCAmdmFsdWUs
IHNpemVvZihUeXBlKSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQpAQCAtMTI1LDcgKzEyNSw3IEBA
IHZvaWQgRW5jb2Rlcjo6ZW5jb2RlQ2hlY2tzdW0oKQogewogICAgIFNIQTE6OkRpZ2VzdCBoYXNo
OwogICAgIG1fc2hhMS5jb21wdXRlSGFzaChoYXNoKTsKLSAgICBlbmNvZGVGaXhlZExlbmd0aERh
dGEoaGFzaC5kYXRhKCksIGhhc2guc2l6ZSgpKTsKKyAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEo
aGFzaCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3Rl
bnRFbmNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVy
c2lzdGVudEVuY29kZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvcGVy
c2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcs
NyBAQAogCiAjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvU0hBMS5o
PgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1
ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaD4KIApAQCAtNDMsNyArNDQsMTEg
QEAgcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSB+RW5jb2RlcigpOwogCiAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlQ2hlY2tzdW0oKTsKLSAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCosIHNpemVfdCk7
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48
Y29uc3Qgc3RkOjpieXRlPik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBlbmNvZGVG
aXhlZExlbmd0aERhdGEoVCYmIGRhdGEpCisgICAgeworICAgICAgICBlbmNvZGVGaXhlZExlbmd0
aERhdGEoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pKTsKKyAgICB9CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZW51bTxU
Pjo6dmFsdWU+KiA9IG51bGxwdHI+CiAgICAgRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBUJiB0
KQpAQCAtNzAsMjMgKzc1LDIyIEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRW5j
b2RlciYgb3BlcmF0b3I8PChmbG9hdCk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIEVuY29kZXIm
IG9wZXJhdG9yPDwoZG91YmxlKTsKIAotICAgIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlcigpIGNvbnN0
IHsgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKTsgfQotICAgIHNpemVfdCBidWZmZXJTaXplKCkgY29u
c3QgeyByZXR1cm4gbV9idWZmZXIuc2l6ZSgpOyB9Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBjb25zdCB1aW50OF90Kiwg
c2l6ZV90KTsKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnVmZmVyKCkgY29uc3QgeyByZXR1
cm4gbV9idWZmZXI7IH0KKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQg
dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBTcGFuPGNvbnN0IHVpbnQ4X3Q+KTsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEm
LCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPiBz
dGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZvck51bWJlcihTSEExJiwgVHlwZSk7CiAKICAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNJUENFbmNvZGVyID0gZmFsc2U7CiAKIHByaXZhdGU6Ci0K
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiBFbmNvZGVyJiBlbmNvZGVOdW1iZXIoVHlwZSk7
CiAKLSAgICB1aW50OF90KiBncm93KHNpemVfdCk7CisgICAgc3RkOjpieXRlKiBncm93KHNpemVf
dCk7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4gc3RydWN0IFNhbHQ7CiAKLSAgICBW
ZWN0b3I8dWludDhfdCwgNDA5Nj4gbV9idWZmZXI7CisgICAgVmVjdG9yPHN0ZDo6Ynl0ZSwgNDA5
Nj4gbV9idWZmZXI7CiAgICAgU0hBMSBtX3NoYTE7CiB9OwogCkBAIC0xMDYsOCArMTEwLDggQEAg
dGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+CiB2b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9y
TnVtYmVyKFNIQTEmIHNoYTEsIFR5cGUgdmFsdWUpCiB7CiAgICAgYXV0byB0eXBlU2FsdCA9IFNh
bHQ8VHlwZT46OnZhbHVlOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7Ci0gICAgc2hhMS5hZGRCeXRlcyhy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWUpLCBzaXplb2YodmFsdWUpKTsKKyAgICBz
aGExLmFkZEJ5dGVzKFNwYW4geyAmdHlwZVNhbHQsIDEgfSk7CisgICAgc2hhMS5hZGRCeXRlcyhT
cGFuIHsgJnZhbHVlLCAxIH0pOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jh
c2U2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0MCwzOSArMTQwLDM5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IHN0YXRpYyAKICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSAn
PSc7CiB9CiAKLXN0YXRpYyBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoY29u
c3QgdWludDhfdCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0
RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKK3N0YXRpYyBWZWN0b3I8
dWludDhfdD4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0
LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewotICAg
IGF1dG8gZGVzdGluYXRpb25MZW5ndGggPSBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShpbnB1
dExlbmd0aCwgcG9saWN5KTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uTGVuZ3RoID0gY2FsY3VsYXRl
QmFzZTY0RW5jb2RlZFNpemUoaW5wdXQuc2l6ZSgpLCBwb2xpY3kpOwogICAgIGlmICghZGVzdGlu
YXRpb25MZW5ndGgpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBWZWN0b3I8dWludDhfdD4g
ZGVzdGluYXRpb25WZWN0b3IoZGVzdGluYXRpb25MZW5ndGgpOwotICAgIGJhc2U2NEVuY29kZUlu
dGVybmFsKGlucHV0RGF0YUJ1ZmZlciwgaW5wdXRMZW5ndGgsIGRlc3RpbmF0aW9uVmVjdG9yLmRh
dGEoKSwgZGVzdGluYXRpb25MZW5ndGgsIHBvbGljeSwgbWFwKTsKKyAgICBiYXNlNjRFbmNvZGVJ
bnRlcm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBp
bnB1dC5zaXplKCksIGRlc3RpbmF0aW9uVmVjdG9yLmRhdGEoKSwgZGVzdGluYXRpb25MZW5ndGgs
IHBvbGljeSwgbWFwKTsKICAgICByZXR1cm4gZGVzdGluYXRpb25WZWN0b3I7CiB9CiAKLXZvaWQg
YmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRM
ZW5ndGgsIFVDaGFyKiBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9u
TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQor
dm9pZCBiYXNlNjRFbmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0LCBVQ2hhciogZGVz
dGluYXRpb25EYXRhQnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkxlbmd0aCwgQmFzZTY0RW5j
b2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKICAgICBpZiAoIWRlc3Rp
bmF0aW9uTGVuZ3RoKQogICAgICAgICByZXR1cm47Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwo
c3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3Ro
LCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7
CisgICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRl
c3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7CiB9CiAKLXZvaWQgYmFzZTY0RW5jb2RlKGNv
bnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIExDaGFyKiBk
ZXN0aW5hdGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uTGVuZ3RoLCBCYXNlNjRF
bmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordm9pZCBiYXNlNjRFbmNv
ZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0LCBMQ2hhciogZGVzdGluYXRpb25EYXRhQnVm
ZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkxlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGlj
eSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKICAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQog
ICAgICAgICByZXR1cm47Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29u
c3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvbkRh
dGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7CisgICAgYmFzZTY0RW5j
b2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0YSgp
KSwgaW5wdXQuc2l6ZSgpLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3Ro
LCBwb2xpY3ksIG1hcCk7CiB9CiAKLVZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rv
cihjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNl
NjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQorVmVjdG9yPHVpbnQ4
X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwgQmFz
ZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1
cm4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0
RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2
NEVuY29kZUludGVybmFsKGlucHV0LCBwb2xpY3ksIG1hcCk7CiB9CiAKLVN0cmluZyBiYXNlNjRF
bmNvZGVUb1N0cmluZyhjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0
TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQor
U3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwg
QmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBy
ZXR1cm4gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKGlucHV0RGF0YUJ1ZmZlciwgaW5wdXRMZW5n
dGgsIHBvbGljeSwgbWFwKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChp
bnB1dCwgcG9saWN5LCBtYXApKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIHN0
ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGVJbnRlcm5hbChjb25zdCBU
KiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBPcHRpb25TZXQ8QmFzZTY0
RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKQEAgLTI1NCw4NCAr
MjU0LDI3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBzdGQ6Om9wdGlvbmEKICAgICBy
ZXR1cm4gZGVzdGluYXRpb247CiB9CiAKLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjREZWNvZGUoY29uc3QgU3RyaW5nJiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9w
dGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgdW5zaWduZWQgbGVu
Z3RoID0gaW5wdXQubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGggfHwgaW5wdXQuaXM4Qml0KCkp
Ci0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgp
LCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFs
KGlucHV0LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7Ci19Ci0KLXN0ZDo6
b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3RyaW5nVmlldyBpbnB1dCwg
T3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBt
YXApCi17Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7Ci0gICAgaWYgKCFs
ZW5ndGggfHwgaW5wdXQuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRl
cm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7Ci0gICAgcmV0
dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIG9w
dGlvbnMsIG1hcCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRE
ZWNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29k
ZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgaWYgKGlucHV0
LnNpemUoKSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKLSAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5w
dXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIG9wdGlvbnMsIG1hcCk7Ci19Ci0KLXN0ZDo6b3B0aW9u
YWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1
dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1h
cCBtYXApCitzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKFNwYW48
Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9w
dGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7CiAgICAgaWYgKGlucHV0LnNpemUoKSA+IHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpLCBvcHRpb25zLCBt
YXApOwogfQogCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNv
bnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgT3B0aW9uU2V0PEJhc2U2NERlY29k
ZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgcmV0dXJuIGJh
c2U2NERlY29kZUludGVybmFsKGRhdGEsIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKLX0KLQotc3Rk
OjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBjaGFyKiBkYXRh
LCB1bnNpZ25lZCBsZW5ndGgsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRpb25z
LCBCYXNlNjREZWNvZGVNYXAgbWFwKQotewotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5h
bChyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oZGF0YSksIGxlbmd0aCwgb3B0aW9ucywg
bWFwKTsKLX0KLQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29k
ZShjb25zdCBTdHJpbmcmIGlucHV0KQorc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJh
c2U2NERlY29kZShjb25zdCBTdHJpbmcmIGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0
aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKICAgICB1bnNpZ25lZCBsZW5n
dGggPSBpbnB1dC5sZW5ndGgoKTsKICAgICBpZiAoIWxlbmd0aCB8fCBpbnB1dC5pczhCaXQoKSkK
LSAgICAgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnM4KCks
IGxlbmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7Ci0gICAgcmV0dXJuIGJhc2U2NERl
Y29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIHsgfSwgQmFzZTY0RGVj
b2RlTWFwOjpVUkwpOworICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQu
Y2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOworICAgIHJldHVybiBiYXNlNjRE
ZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXAp
OwogfQogCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFN0
cmluZ1ZpZXcgaW5wdXQpCitzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVj
b2RlKFN0cmluZ1ZpZXcgaW5wdXQsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRp
b25zLCBCYXNlNjREZWNvZGVNYXAgbWFwKQogewogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0
Lmxlbmd0aCgpOwogICAgIGlmICghbGVuZ3RoIHx8IGlucHV0LmlzOEJpdCgpKQotICAgICAgICBy
ZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCB7
IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJu
YWwoaW5wdXQuY2hhcmFjdGVyczE2KCksIGxlbmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVS
TCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUo
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKLXsKLSAgICBpZiAoaW5wdXQuc2l6ZSgpID4g
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQotICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5kYXRhKCks
IGlucHV0LnNpemUoKSwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7Ci19Ci0KLXN0ZDo6b3B0
aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+
JiBpbnB1dCkKLXsKLSAgICBpZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHJldHVy
biBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihp
bnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCksIHsgfSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOwot
fQotCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0
IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gYmFzZTY0RGVj
b2RlSW50ZXJuYWwoZGF0YSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKLX0K
LQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBj
aGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUlu
dGVybmFsKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBsZW5ndGgsIHsg
fSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOworICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50
ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOworICAgIHJl
dHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBv
cHRpb25zLCBtYXApOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL3RleHQvQmFzZTY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9CYXNl
NjQuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCkBAIC01Niw1NCArNTcsMzUgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBtYXhpbXVtQmFzZTY0TAogLy8gUmF0aGVyIHRoYW4gYmVpbmcgcGVyZmVjdGx5IHByZWNp
c2UsIHRoaXMgaXMgYSBiaXQgY29uc2VydmF0aXZlLgogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBtYXhpbXVtQmFzZTY0RW5jb2RlcklucHV0QnVmZmVyU2l6ZSA9IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSAvIDc3ICogNzYgLyA0ICogMyAtIDI7CiAKLVdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQsIFVDaGFyKiwg
dW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJ
bnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci1X
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVk
LCBMQ2hhciosIHVuc2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xp
Y3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRl
ZmF1bHQpOworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2RlKFNwYW48Y29uc3Qg
c3RkOjpieXRlPiwgVUNoYXIqIGRlc3RpbmF0aW9uQnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlv
bkJ1ZmZlclNpemUsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9O
b3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7
CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+LCBMQ2hhciogZGVzdGluYXRpb25CdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uQnVmZmVy
U2l6ZSwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2Vy
dExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKIAotV1RG
X0VYUE9SVF9QUklWQVRFIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25z
dCB2b2lkKiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGlj
eTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVm
YXVsdCk7Ci1WZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05v
dEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsK
LVZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8Y2hhcj4m
LCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZz
LCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwotVmVjdG9yPHVp
bnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IENTdHJpbmcmLCBCYXNlNjRFbmNvZGVQ
b2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVN
YXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwotCi1XVEZfRVhQT1JUX1BSSVZBVEUgU3Ry
aW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgQmFzZTY0RW5j
b2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5j
b2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKLVN0cmluZyBiYXNlNjRFbmNvZGVU
b1N0cmluZyhjb25zdCBWZWN0b3I8dWludDhfdD4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNl
NjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRF
bmNvZGVNYXA6OkRlZmF1bHQpOwotU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IFZl
Y3RvcjxjaGFyPiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9O
b3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7
Ci1TdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgQ1N0cmluZyYsIEJhc2U2NEVuY29k
ZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29k
ZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgVmVj
dG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKFNwYW48Y29uc3Qgc3RkOjpieXRlPiwg
QmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywg
QmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihUJiYsIEJhc2U2
NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2
NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CiAKK1dURl9FWFBPUlRfUFJJ
VkFURSBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+LCBC
YXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBC
YXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKFQmJiwgQmFzZTY0RW5jb2RlUG9s
aWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFw
ID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKKworV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6
b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1h
cCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpv
cHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBTdHJpbmcmLCBPcHRp
b25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2
NERlY29kZU1hcDo6RGVmYXVsdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxW
ZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShTdHJpbmdWaWV3LCBPcHRpb25TZXQ8QmFzZTY0
RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6
RGVmYXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGJhc2U2NERlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mLCBPcHRpb25TZXQ8QmFzZTY0
RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6
RGVmYXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGJhc2U2NERlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mLCBPcHRpb25TZXQ8QmFzZTY0RGVj
b2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVm
YXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+
IGJhc2U2NERlY29kZShjb25zdCB1aW50OF90KiwgdW5zaWduZWQsIE9wdGlvblNldDxCYXNlNjRE
ZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpE
ZWZhdWx0KTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90
Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCwgT3B0aW9uU2V0PEJhc2U2NERl
Y29kZU9wdGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRl
ZmF1bHQpOwotCi1pbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJh
c2U2NEVuY29kZU1hcCBtYXApCi17Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlu
cHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7Ci19Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25z
dF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+PiwgU3RyaW5nPiAmJiAhc3RkOjppc19zYW1l
X3Y8c3RkOjpyZW1vdmVfY29uc3RfdDxzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxUPj4sIFN0cmlu
Z1ZpZXc+PiogPSBudWxscHRyPgorc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2
NERlY29kZShUJiYsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0
RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKIAotaW5saW5lIFZlY3Rvcjx1
aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBC
YXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordGVtcGxhdGU8
dHlwZW5hbWUgVD4gVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKFQmJiBpbnB1
dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAg
ICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCks
IHBvbGljeSwgbWFwKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoYXNCeXRlcyhT
cGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGlucHV0KSB9KSwgcG9saWN5LCBtYXApOwogfQogCi1pbmxp
bmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IENTdHJpbmcmIGlu
cHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordGVt
cGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKFQmJiBpbnB1dCwg
QmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBy
ZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwg
cG9saWN5LCBtYXApOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhhc0J5dGVzKFNw
YW4geyBzdGQ6OmZvcndhcmQ8VD4oaW5wdXQpIH0pLCBwb2xpY3ksIG1hcCk7CiB9CiAKLWlubGlu
ZSBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1
dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZV92PHN0ZDo6cmVt
b3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmc+ICYmICFzdGQ6
OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+
PiwgU3RyaW5nVmlldz4+Kj4KK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRE
ZWNvZGUoVCYmIGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywg
QmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmco
aW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSwgbWFwKTsKLX0KLQotaW5saW5lIFN0
cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBCYXNl
NjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQotewotICAgIHJldHVy
biBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5
LCBtYXApOwotfQotCi1pbmxpbmUgU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IENT
dHJpbmcmIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAg
bWFwKQotewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlu
cHV0Lmxlbmd0aCgpLCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZShhc0J5
dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oaW5wdXQpIH0pLCBvcHRpb25zLCBtYXApOwogfQog
CiAKQEAgLTExMiw2MSArOTQsNTcgQEAgaW5saW5lIFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmlu
Zyhjb25zdAogLy8gVGhpcyBmb3JtYXQgdXNlcyAnLScgYW5kICdfJyBpbnN0ZWFkIG9mICcrJyBh
bmQgJy8nIHJlc3BlY3RpdmVseS4KIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAK
LVZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihjb25zdCB2b2lkKiwgdW5z
aWduZWQpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9y
KGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRv
VmVjdG9yKGNvbnN0IENTdHJpbmcmKTsKK1ZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVU
b1ZlY3RvcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVj
dG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKFQmJik7CiAKLVN0cmluZyBiYXNl
NjRVUkxFbmNvZGVUb1N0cmluZyhjb25zdCB2b2lkKiwgdW5zaWduZWQpOwotU3RyaW5nIGJhc2U2
NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOwotU3RyaW5nIGJhc2U2
NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotU3RyaW5nIGJhc2U2NFVS
TEVuY29kZVRvU3RyaW5nKGNvbnN0IENTdHJpbmcmKTsKK1N0cmluZyBiYXNlNjRVUkxFbmNvZGVU
b1N0cmluZyhTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3Ry
aW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKFQmJik7CiAKLVdURl9FWFBPUlRfUFJJVkFURSBz
dGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFN0cmlu
ZyYpOwotV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjRVUkxEZWNvZGUoU3RyaW5nVmlldyk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRp
b25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBWZWN0b3I8dWludDhf
dD4mKTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4g
YmFzZTY0VVJMRGVjb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotV1RGX0VYUE9SVF9QUklWQVRF
IHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgdWlu
dDhfdCosIHVuc2lnbmVkKTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rv
cjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCk7CitzdGQ6
Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFNwYW48Y29uc3Qgc3Rk
OjpieXRlPik7CitzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2Rl
KGNvbnN0IFN0cmluZyYpOworc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVS
TERlY29kZShTdHJpbmdWaWV3KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lm
X3Q8IXN0ZDo6aXNfc2FtZV92PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJl
bmNlX3Q8VD4+LCBTdHJpbmc+ICYmICFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90
PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+PiwgU3RyaW5nVmlldz4+KiA9IG51bGxwdHI+Citz
dGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFQmJik7CiAKLWlu
bGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3Qgdm9pZCog
aW5wdXQsIHVuc2lnbmVkIGxlbmd0aCkKK2lubGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJM
RW5jb2RlVG9WZWN0b3IoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQogewotICAgIHJldHVy
biBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dCwgbGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3k6
OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1Zl
Y3RvcihpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJM
KTsKIH0KIAotaW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihj
b25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVjdG9y
PHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKFQmJiBpbnB1dCkKIHsKLSAgICByZXR1
cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJhc2U2
NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJh
c2U2NEVuY29kZVRvVmVjdG9yKHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCksIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBWZWN0b3I8dWlu
dDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCkK
K2lubGluZSBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRh
KCksIGlucHV0LnNpemUoKSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1h
cDo6VVJMKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5wdXQsIEJhc2U2NEVu
Y29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBWZWN0
b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgQ1N0cmluZyYgaW5wdXQp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoVCYm
IGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRhKCks
IGlucHV0Lmxlbmd0aCgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFw
OjpVUkwpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhzdGQ6OmZvcndhcmQ8VD4o
aW5wdXQpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwog
fQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqIGlu
cHV0LCB1bnNpZ25lZCBsZW5ndGgpCitpbmxpbmUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGJhc2U2NFVSTERlY29kZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCiB7Ci0gICAg
cmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LCBsZW5ndGgsIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29k
ZShpbnB1dCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBTdHJpbmcg
YmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKK2lu
bGluZSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0
IFN0cmluZyYgaW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0
LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5j
b2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjREZWNvZGUoaW5wdXQsIHsgfSwgQmFzZTY0
RGVjb2RlTWFwOjpVUkwpOwogfQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3Ry
aW5nKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW5wdXQpCitpbmxpbmUgc3RkOjpvcHRpb25hbDxWZWN0
b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShTdHJpbmdWaWV3IGlucHV0KQogewotICAgIHJl
dHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgQmFz
ZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKKyAgICByZXR1cm4g
YmFzZTY0RGVjb2RlKGlucHV0LCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKIH0KIAotaW5s
aW5lIFN0cmluZyBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhjb25zdCBDU3RyaW5nJiBpbnB1dCkK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZV92PHN0
ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmc+ICYm
ICFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5j
ZV90PFQ+PiwgU3RyaW5nVmlldz4+Kj4KK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjRVUkxEZWNvZGUoVCYmIGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0
cmluZyhpbnB1dC5kYXRhKCksIGlucHV0Lmxlbmd0aCgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVS
TCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjRVUkxEZWNvZGUoYXNC
eXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGlucHV0KSB9KSk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBpbmxpbmUgYm9vbCBpc0Jhc2U2NE9yQmFzZTY0
VVJMQ2hhcmFjdGVyKENoYXJhY3RlclR5cGUgYykKQEAgLTIwOCw1NyArMTg2LDM2IEBAIGlubGlu
ZSB1bnNpZ25lZCBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2kKIH0KIAogc3RydWN0IEJhc2U2NFNw
ZWNpZmljYXRpb24gewotICAgIGNvbnN0IHZvaWQqIGlucHV0RGF0YTsKLSAgICB1bnNpZ25lZCBp
bnB1dExlbmd0aDsKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXREYXRhOwogICAgIEJh
c2U2NEVuY29kZVBvbGljeSBwb2xpY3k7CiAgICAgQmFzZTY0RW5jb2RlTWFwIG1hcDsKIH07CiAK
LWlubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NEVuY29kZWQoY29uc3Qgdm9pZCogaW5w
dXREYXRhLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9
IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCBtYXAg
PSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpCi17Ci0gICAgcmV0dXJuIHsgaW5wdXREYXRhLCBp
bnB1dExlbmd0aCwgcG9saWN5LCBtYXAgfTsKLX0KLQotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRp
b24gYmFzZTY0RW5jb2RlZChjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0LCBCYXNlNjRFbmNv
ZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcykKLXsK
LSAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9s
aWN5KTsKLX0KLQotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChjb25z
dCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0
RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcykKLXsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2Rl
ZChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5KTsKLX0KLQotaW5saW5lIEJhc2U2
NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChjb25zdCBDU3RyaW5nJiBpbnB1dCwgQmFzZTY0
RW5jb2RlUG9saWN5IHBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMp
Ci17Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgo
KSwgcG9saWN5KTsKLX0KLQotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5j
b2RlZChjb25zdCB2b2lkKiBpbnB1dERhdGEsIHVuc2lnbmVkIGlucHV0TGVuZ3RoKQoraW5saW5l
IEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
aW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRv
Tm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgbWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZh
dWx0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0RGF0YSwgaW5wdXRMZW5ndGgs
IEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0
dXJuIHsgaW5wdXQsIHBvbGljeSwgbWFwIH07CiB9CiAKLWlubGluZSBCYXNlNjRTcGVjaWZpY2F0
aW9uIGJhc2U2NFVSTEVuY29kZWQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChUJiYgaW5w
dXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90
SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgbWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0
KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgp
LCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJl
dHVybiBiYXNlNjRFbmNvZGVkKGFzQnl0ZXMoU3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCkg
fSksIHBvbGljeSwgbWFwKTsKIH0KIAotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0
VVJMRW5jb2RlZChjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0KQoraW5saW5lIEJhc2U2NFNwZWNp
ZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCiB7
Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJh
c2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJu
IGJhc2U2NEVuY29kZWQoaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNv
ZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NFVSTEVu
Y29kZWQoY29uc3QgQ1N0cmluZyYgaW5wdXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBCYXNlNjRT
cGVjaWZpY2F0aW9uIGJhc2U2NFVSTEVuY29kZWQoVCYmIGlucHV0KQogewotICAgIHJldHVybiBi
YXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29k
ZWQoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGlucHV0KSB9KSwgQmFzZTY0RW5jb2Rl
UG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKIH0KIAogdGVtcGxhdGU8PiBjbGFz
cyBTdHJpbmdUeXBlQWRhcHRlcjxCYXNlNjRTcGVjaWZpY2F0aW9uPiB7CiBwdWJsaWM6CiAgICAg
U3RyaW5nVHlwZUFkYXB0ZXIoY29uc3QgQmFzZTY0U3BlY2lmaWNhdGlvbiYgYmFzZTY0KQogICAg
ICAgICA6IG1fYmFzZTY0IHsgYmFzZTY0IH0KLSAgICAgICAgLCBtX2VuY29kZWRMZW5ndGggeyBj
YWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShiYXNlNjQuaW5wdXRMZW5ndGgsIGJhc2U2NC5wb2xp
Y3kpIH0KKyAgICAgICAgLCBtX2VuY29kZWRMZW5ndGggeyBjYWxjdWxhdGVCYXNlNjRFbmNvZGVk
U2l6ZShiYXNlNjQuaW5wdXREYXRhLnNpemUoKSwgYmFzZTY0LnBvbGljeSkgfQogICAgIHsKICAg
ICB9CiAKQEAgLTI2Nyw3ICsyMjQsNyBAQCBwdWJsaWM6CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiB2b2lkIHdyaXRlVG8oQ2hhcmFjdGVyVHlwZSogZGVzdGluYXRpb24p
IGNvbnN0CiAgICAgewotICAgICAgICBiYXNlNjRFbmNvZGUobV9iYXNlNjQuaW5wdXREYXRhLCBt
X2Jhc2U2NC5pbnB1dExlbmd0aCwgZGVzdGluYXRpb24sIG1fZW5jb2RlZExlbmd0aCwgbV9iYXNl
NjQucG9saWN5LCBtX2Jhc2U2NC5tYXApOworICAgICAgICBiYXNlNjRFbmNvZGUobV9iYXNlNjQu
aW5wdXREYXRhLCBkZXN0aW5hdGlvbiwgbV9lbmNvZGVkTGVuZ3RoLCBtX2Jhc2U2NC5wb2xpY3ks
IG1fYmFzZTY0Lm1hcCk7CiAgICAgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dURi93dGYv
dGV4dC9DU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9DU3RyaW5n
LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMu
aD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvU3Bhbi5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtMzksOSArNDAsMTEg
QEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoQwogY2xhc3MgQ1N0cmlu
Z0J1ZmZlciBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPENTdHJpbmdCdWZmZXI+IHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihDU3RyaW5nQnVmZmVy
KTsKIHB1YmxpYzoKLSAgICBjb25zdCBjaGFyKiBkYXRhKCkgeyByZXR1cm4gbXV0YWJsZURhdGEo
KTsgfQorICAgIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PENT
dHJpbmdCdWZmZXIqPih0aGlzKS0+bXV0YWJsZURhdGEoKTsgfQogICAgIHNpemVfdCBsZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQogCisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+
IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4gYXNCeXRlcyhTcGFuIHsgZGF0YSgpLCBsZW5ndGgoKSB9
KTsgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDU3RyaW5nOwogCkBAIC02Niw2ICs2
OSwyMCBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBDU3RyaW5nIG5l
d1VuaW5pdGlhbGl6ZWQoc2l6ZV90IGxlbmd0aCwgY2hhciomIGNoYXJhY3RlckJ1ZmZlcik7CiAg
ICAgQ1N0cmluZyhIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IG1fYnVmZmVyKEhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSkgeyB9CiAKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fYnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIG1f
YnVmZmVyLT5ieXRlcygpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFNwYW48
c3RkOjpieXRlPiBtdXRhYmxlQnl0ZXMoKQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8gbXV0YWJs
ZURhdGEgPSB0aGlzLT5tdXRhYmxlRGF0YSgpKQorICAgICAgICAgICAgcmV0dXJuIGFzV3JpdGFi
bGVCeXRlcyhTcGFuIHsgbXV0YWJsZURhdGEsIG1fYnVmZmVyLT5sZW5ndGgoKSB9KTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICB9CisKICAgICBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3QKICAg
ICB7CiAgICAgICAgIHJldHVybiBtX2J1ZmZlciA/IG1fYnVmZmVyLT5kYXRhKCkgOiBudWxscHRy
OwpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5
NCw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBMQ2hhciogY2hhcmFjdGVyczgoKSBjb25zdDsKICAg
ICBjb25zdCBVQ2hhciogY2hhcmFjdGVyczE2KCkgY29uc3Q7CiAKKyAgICBTcGFuPGNvbnN0IHN0
ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25zdDsKKwogICAgIGJvb2wgaXNBbGxBU0NJSSgpIGNvbnN0Owog
CiAgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CkBAIC00MjQsNiArNDI2LDEzIEBAIGlubGlu
ZSBjb25zdCBVQ2hhciogU3RyaW5nVmlldzo6Y2hhcmFjdGUKICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgVUNoYXIqPihtX2NoYXJhY3RlcnMpOwogfQogCitpbmxpbmUgU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+IFN0cmluZ1ZpZXc6OmJ5dGVzKCkgY29uc3QKK3sKKyAgICBpZiAoaXM4Qml0KCkp
CisgICAgICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSB9
KTsKKyAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgY2hhcmFjdGVyczE2KCksIGxlbmd0aCgpIH0p
OworfQorCiBpbmxpbmUgYm9vbCBTdHJpbmdWaWV3Ojppc0FsbEFTQ0lJKCkgY29uc3QKIHsKICAg
ICBpZiAoaXM4Qml0KCkpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHJldmlzaW9uIDI3
ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPHd0Zi9G
dW5jdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQVND
SUlMaXRlcmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvSW50ZWdlclRvU3RyaW5nQ29udmVyc2lv
bi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KQEAgLTEzNCw2ICsxMzUsNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiAhbV9pbXBsIHx8IG1f
aW1wbC0+aXM4Qml0KCk7IH0KIAogICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5sZW5ndGgoKSAqIChpczhCaXQoKSA/IHNpemVvZihMQ2hh
cikgOiBzaXplb2YoVUNoYXIpKSA6IDA7IH0KKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0
ZXMoKSBjb25zdDsKIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBDU3RyaW5nIGFzY2lpKCkgY29u
c3Q7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIENTdHJpbmcgbGF0aW4xKCkgY29uc3Q7CkBAIC00
ODMsNiArNDg1LDE2IEBAIHRlbXBsYXRlPD4gaW5saW5lIGNvbnN0IFVDaGFyKiBTdHJpbmc6OmMK
ICAgICByZXR1cm4gY2hhcmFjdGVyczE2KCk7CiB9CiAKK2lubGluZSBTcGFuPGNvbnN0IHN0ZDo6
Ynl0ZT4gU3RyaW5nOjpieXRlcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ltcGwpCisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICBpZiAobV9pbXBsLT5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJu
IGFzQnl0ZXMoU3BhbiB7IG1faW1wbC0+Y2hhcmFjdGVyczgoKSwgbV9pbXBsLT5sZW5ndGgoKSB9
KTsKKyAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgbV9pbXBsLT5jaGFyYWN0ZXJzMTYoKSwgbV9p
bXBsLT5sZW5ndGgoKSB9KTsKK30KKwogaW5saW5lIFVDaGFyIFN0cmluZzo6Y2hhcmFjdGVyQXQo
dW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ltcGwgfHwgaW5kZXggPj0gbV9p
bXBsLT5sZW5ndGgoKSkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzYzLDkgKzM2Myw5IEBAIFN0cmluZyBjcmVhdGVUZW1wb3JhcnlE
aXJlY3RvcnkoKQogICAgIH0pOwogfQogCi1ib29sIHVubWFwVmlld09mRmlsZSh2b2lkKiBidWZm
ZXIsIHNpemVfdCkKK2Jvb2wgdW5tYXBWaWV3T2ZGaWxlKFNwYW48c3RkOjpieXRlPiBkYXRhKQog
ewotICAgIHJldHVybiBVbm1hcFZpZXdPZkZpbGUoYnVmZmVyKTsKKyAgICByZXR1cm4gVW5tYXBW
aWV3T2ZGaWxlKGRhdGEuZGF0YSgpKTsKIH0KIAogYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmls
ZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBGaWxlT3Blbk1vZGUgb3Blbk1vZGUs
IE1hcHBlZEZpbGVNb2RlKQpAQCAtMzc0LDcgKzM3NCw3IEBAIGJvb2wgTWFwcGVkRmlsZURhdGE6
Om1hcEZpbGVIYW5kbGUoUGxhdGYKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byBz
aXplID0gZmlsZVNpemUoaGFuZGxlKTsKLSAgICBpZiAoIXNpemUgfHwgKnNpemUgPiBzdGQ6Om51
bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIHx8ICpzaXplID4gc3RkOjpudW1lcmljX2xpbWl0
czxkZWNsdHlwZShtX2ZpbGVTaXplKT46Om1heCgpKSB7CisgICAgaWYgKCFzaXplIHx8ICpzaXpl
ID4gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSB8fCAqc2l6ZSA+IHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZGVjbHR5cGUobV9maWxlRGF0YS5zaXplKCkpPjo6bWF4KCkpIHsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNDAzLDExICs0MDMsMTIgQEAgYm9vbCBNYXBw
ZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0ZgogICAgIGlmICghbWFwcGluZykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9maWxlRGF0YSA9IE1hcFZpZXdPZkZpbGUobWFwcGlu
ZywgZGVzaXJlZEFjY2VzcywgMCwgMCwgKnNpemUpOworICAgIGF1dG8gZGF0YSA9IE1hcFZpZXdP
ZkZpbGUobWFwcGluZywgZGVzaXJlZEFjY2VzcywgMCwgMCwgKnNpemUpOwogICAgIENsb3NlSGFu
ZGxlKG1hcHBpbmcpOwotICAgIGlmICghbV9maWxlRGF0YSkKKyAgICBpZiAoIWRhdGEpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2ZpbGVTaXplID0gKnNpemU7CisKKyAgICBtX2ZpbGVE
YXRhID0gU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpieXRlKj4oZGF0YSksICpzaXplIH07
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgw
IEBACisyMDIxLTA2LTExICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAg
ICBBZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogTW9kdWxlcy9oaWdobGlnaHQv
QXBwSGlnaGxpZ2h0Lmg6CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHQ6OmVuY29kZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHQ6OmRlY29kZSk6CisgICAgICAg
ICogTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6dG9TaGFyZWRCdWZmZXIgY29uc3QpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvclJlc3BvbnNlRGF0YS5oOgor
ICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlQXJyYXlCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
ZGVjb2RlQXJyYXlCdWZmZXIpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oOgorICAgICAgICAoV2ViQ29yZTo6UHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmg6CisgICAgICAgIChX
ZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcjo6ZW5jb2RlIGNvbnN0KToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRXZWJTb2NrZXRBY2Nl
cHQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0J1ZmZlclNvdXJjZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6QnVmZmVyU291cmNlOjpieXRlcyBjb25zdCk6CisgICAgICAgICogYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmRlY29kZSk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvU2VyaWFsaXpl
ZE5GQS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6U2VyaWFsaXpl
ZE5GQTo6cG9pbnRlckF0T2Zmc2V0SW5GaWxlIGNvbnN0KToKKyAgICAgICAgKiBjcnlwdG8vbWFj
L1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
QW5kU3RvcmVNYXN0ZXJLZXkpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Omhhc2hQb2ludGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBhdGNoU3VwcG9ydDo6Y3JlYXRlRGlnZXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OmFkZFN0cmluZ1RvU0hBMSk6IERlbGV0ZWQuCisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZpY2F0ZSk6CisgICAgICAgICogaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yTmV0d29ya0FnZW50OjpnZXRTZXJpYWxpemVkQ2VydGlmaWNhdGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpjcmVhdGVTaGFyZWRCdWZmZXIgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRC
dWZmZXI6OlNoYXJlZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmFw
cGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpkYXRh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmJ5
dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6ZGVjb2RlciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpzaXplIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZGVjb2RlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Nb2RlbC5oOgorICAgICAgICAoV2ViQ29yZTo6TW9kZWw6OmVuY29k
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNb2RlbDo6ZGVjb2RlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6UGl4ZWxC
dWZmZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6ZGVj
b2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNl
Q2FwYWJpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpDYXBhYmlsaXR5VmFsdWVPclJhbmdl
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FwYWJpbGl0eVZhbHVlT3JSYW5n
ZTo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlh
U291cmNlQ2VudGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZFN0cmluZ1RvU0hBMSk6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHA6Cisg
ICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjplbmNvZGVDRkRhdGEpOgorICAgICAgICAoV1RGOjpQ
ZXJzaXN0ZW5jZTo6ZGVjb2RlQ0ZEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRl
U3RhdGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6YmluZEJs
b2IpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaDoKKyAgICAgICAg
KiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzKToKKyAgICAg
ICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTV1NjcmlwdFN0b3JhZ2U6OnN0b3JlKToKKwogMjAyMS0wNi0xMSAgQ2hyaXMg
RHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIExhemlseSBjb21wdXRlIFNlY3Vy
aXR5T3JpZ2luOjptX2lzUG90ZW50aWFsbHlUcnVzdHdvcnRoeSBmb3IgcGVyZm9ybWFuY2UKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvSW5pdERhdGFSZWdpc3Ry
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRp
YS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIHN0YXRpYyBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzYW5p
dGl6ZUtleWkKICAgICBhdXRvIG9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAg
YXV0byBraWRzQXJyYXkgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgZm9yIChhdXRvJiBi
dWZmZXIgOiBrZXlJREJ1ZmZlci52YWx1ZSgpKQotICAgICAgICBraWRzQXJyYXktPnB1c2hTdHJp
bmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgp
KSk7CisgICAgICAgIGtpZHNBcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVUb1N0cmlu
ZyhidWZmZXItPmJ5dGVzKCkpKTsKICAgICBvYmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92
ZShraWRzQXJyYXkpKTsKIAogICAgIENTdHJpbmcganNvbkRhdGEgPSBvYmplY3QtPnRvSlNPTlN0
cmluZygpLnV0ZjgoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0Fw
cEhpZ2hsaWdodC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxp
Z2h0L0FwcEhpZ2hsaWdodC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyAr
NTIsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBBcHBIaWdobGlnaHQ6OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
c2l6ZV90PihoaWdobGlnaHQtPnNpemUoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEoaGlnaGxpZ2h0LT5kYXRhKCksIGhpZ2hsaWdodC0+c2l6ZSgpLCAxKTsKKyAgICBlbmNv
ZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YSgqaGlnaGxpZ2h0LCAxKTsKIAogICAgIGVuY29kZXIg
PDwgdGV4dDsKIApAQCAtNzUsNyArNzUsNyBAQCBzdGQ6Om9wdGlvbmFsPEFwcEhpZ2hsaWdodD4g
QXBwSGlnaGxpZ2h0CiAKICAgICBWZWN0b3I8dWludDhfdD4gaGlnaGxpZ2h0OwogICAgIGhpZ2hs
aWdodC5ncm93KCpsZW5ndGgpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERh
dGEoaGlnaGxpZ2h0LmRhdGEoKSwgaGlnaGxpZ2h0LnNpemUoKSwgMSkpCisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShoaWdobGlnaHQsIDEpKQogICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwogCiAgICAgc3RkOjpvcHRpb25hbDxzdGQ6Om9wdGlvbmFsPFN0cmluZz4+
IHRleHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGln
aHRSYW5nZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGln
aGxpZ2h0L0FwcEhpZ2hsaWdodFJhbmdlRGF0YS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFJhbmdlRGF0YS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgUmVmPFNoYXJlZEJ1ZmZlcj4gQXBwSGln
aGxpZ2h0UmFuZ2VEYXRhOgogewogICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2Rl
cjsKICAgICBlbmNvZGVyIDw8ICp0aGlzOwotICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0
ZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgcmV0dXJuIFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCkpOwogfQogCiB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPiB2b2lkIEFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6Tm9kZVBhdGhDb21wb25lbnQ6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAJKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNo
YW5uZWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIE5ldHdvcmtTZW5kUXVl
dWUgUlRDRGF0YUNoYW5uZWw6OmNyZWF0ZU0KICAgICAgICAgaWYgKCFjaGFubmVsLm1faGFuZGxl
ci0+c2VuZFN0cmluZ0RhdGEodXRmOCkpCiAgICAgICAgICAgICBjaGFubmVsLnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3Nh
Z2VMZXZlbDo6RXJyb3IsICJFcnJvciBzZW5kaW5nIHN0cmluZyB0aHJvdWdoIFJUQ0RhdGFDaGFu
bmVsLiJfcyk7CiAgICAgfSwgWyZjaGFubmVsXShhdXRvJiBzcGFuKSB7Ci0gICAgICAgIGlmICgh
Y2hhbm5lbC5tX2hhbmRsZXItPnNlbmRSYXdEYXRhKHNwYW4uZGF0YSgpLCBzcGFuLnNpemUoKSkp
CisgICAgICAgIGlmICghY2hhbm5lbC5tX2hhbmRsZXItPnNlbmRSYXdEYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNwYW4uZGF0YSgpKSwgc3Bhbi5zaXplKCkpKQogICAgICAg
ICAgICAgY2hhbm5lbC5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFkZENvbnNvbGVNZXNzYWdl
KE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAiRXJyb3Igc2VuZGluZyBi
aW5hcnkgZGF0YSB0aHJvdWdoIFJUQ0RhdGFDaGFubmVsLiJfcyk7CiAgICAgfSwgWyZjaGFubmVs
XShFeGNlcHRpb25Db2RlIGVycm9yQ29kZSkgewogICAgICAgICBpZiAoYXV0byogY29udGV4dCA9
IGNoYW5uZWwuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxh
Y2VtZW50Lm1tCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Bs
dWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTUy
LDYgKzUyLDcgQEAKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0NhdGNoU2NvcGUuaD4KICNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CiAjaW1wb3J0IDxvYmpjL3J1bnRp
bWUuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9TcGFuQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi90ZXh0
L0Jhc2U2NC5oPgogCiAjaW1wb3J0IDxwYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaD4KQEAgLTI0
Niw5ICsyNDcsOSBAQCBzdGF0aWMgSlNWYWx1ZSAqanNWYWx1ZVdpdGhEYXRhSW5Db250ZXh0CiAg
ICAgLy8gRklYTUU6IEFkZCBtYWtlQ0ZTdHJpbmcvbWFrZU5TU3RyaW5nIHRvIGF2b2lkIHVubmVj
ZXNzYXJ5IFN0cmluZyBhbGxvY2F0aW9uLgogICAgIFN0cmluZyBkYXRhNjQ7CiAgICAgaWYgKCFt
aW1lVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6Iiwg
bWltZVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoW2RhdGEgYnl0ZXNdLCBbZGF0YSBs
ZW5ndGhdKSk7CisgICAgICAgIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgbWltZVR5cGUs
ICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoYXNCeXRlcyhkYXRhKSkpOwogICAgIGVsc2UKLSAg
ICAgICAgZGF0YTY0ID0gbWFrZVN0cmluZygiZGF0YTp0ZXh0L3BsYWluO2Jhc2U2NCwiLCBiYXNl
NjRFbmNvZGVkKFtkYXRhIGJ5dGVzXSwgW2RhdGEgbGVuZ3RoXSkpOworICAgICAgICBkYXRhNjQg
PSBtYWtlU3RyaW5nKCJkYXRhOnRleHQvcGxhaW47YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoYXNC
eXRlcyhkYXRhKSkpOwogCiAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aE9iamVjdDooaWQp
ZGF0YTY0LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkgaW5Db250ZXh0OmNvbnRleHRdOwogfQpAQCAt
MzQwLDcgKzM0MSw3IEBAIHN0YXRpYyBKU1ZhbHVlICpqc1ZhbHVlV2l0aEFWTWV0YWRhdGFJdGUK
ICAgICAgICAgaWQgdmFsdWUgPSBpdGVtLnZhbHVlOwogICAgICAgICBOU1N0cmluZyAqbWltZVR5
cGUgPSBbW2l0ZW0gZXh0cmFBdHRyaWJ1dGVzXSBvYmplY3RGb3JLZXk6QCJNSU1FdHlwZSJdOwog
ICAgICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TRGF0YSBjbGFzc11dICYmIG1pbWVU
eXBlKSB7Ci0gICAgICAgICAgICBhdXRvIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgU3Ry
aW5nKG1pbWVUeXBlKSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChbdmFsdWUgYnl0ZXNdLCBb
dmFsdWUgbGVuZ3RoXSkpOworICAgICAgICAgICAgYXV0byBkYXRhNjQgPSBtYWtlU3RyaW5nKCJk
YXRhOiIsIFN0cmluZyhtaW1lVHlwZSksICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoYXNCeXRl
cygoTlNEYXRhICopdmFsdWUpKSk7CiAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6
KF9fYnJpZGdlIE5TU3RyaW5nICopZGF0YTY0LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkgZm9yS2V5
OkAidmFsdWUiXTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRP
YmplY3Q6dmFsdWUgZm9yS2V5OkAidmFsdWUiXTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRpY2F0b3JDb29yZGluYXRvci5j
cHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4v
QXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQs
NyBAQCBzdGF0aWMgUmVmPEFycmF5QnVmZmVyPiBwcm9kdWNlQ2xpZW50RGF0CiAgICAgICAgIG9i
amVjdC0+c2V0U3RyaW5nKCJ0eXBlIl9zLCAid2ViYXV0aG4uZ2V0Il9zKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQotICAgIG9iamVjdC0+c2V0U3RyaW5nKCJjaGFsbGVuZ2UiX3MsIGJhc2U2NFVS
TEVuY29kZVRvU3RyaW5nKGNoYWxsZW5nZS5kYXRhKCksIGNoYWxsZW5nZS5sZW5ndGgoKSkpOwor
ICAgIG9iamVjdC0+c2V0U3RyaW5nKCJjaGFsbGVuZ2UiX3MsIGJhc2U2NFVSTEVuY29kZVRvU3Ry
aW5nKGNoYWxsZW5nZS5ieXRlcygpKSk7CiAgICAgb2JqZWN0LT5zZXRTdHJpbmcoIm9yaWdpbiJf
cywgb3JpZ2luLnRvUmF3U3RyaW5nKCkpOwogCiAgICAgYXV0byB1dGY4SlNPTlN0cmluZyA9IG9i
amVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdXRobi9BdXRoZW50aWNhdG9yUmVzcG9uc2VEYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yUmVzcG9uc2VEYXRhLmgJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0
aGVudGljYXRvclJlc3BvbnNlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBA
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiBzdGF0aWMgdm9pZCBlbmNvZGVBcnJheUJ1ZmZlcihF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBBcnJheUJ1ZmZlciYgYnVmZmVyKQogewogICAgIGVuY29k
ZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ1ZmZlci5ieXRlTGVuZ3RoKCkpOwotICAgIGVu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihi
dWZmZXIuZGF0YSgpKSwgYnVmZmVyLmJ5dGVMZW5ndGgoKSwgMSk7CisgICAgZW5jb2Rlci5lbmNv
ZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLmJ5dGVzKCksIDEpOwogfQogCiB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgpAQCAtNzUsNyArNzUsNyBAQCBSZWZQdHI8QXJyYXlCdWZmZXI+IGRlY29kZUFy
cmF5QnVmZmVyKERlCiAgICAgYXV0byBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKGxl
bmd0aC52YWx1ZSgpLCBzaXplb2YodWludDhfdCkpOwogICAgIGlmICghYnVmZmVyKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihidWZmZXItPmRhdGEoKSksIGxlbmd0aC52YWx1ZSgpLCAx
KSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ1ZmZlci0+d3JpdGFi
bGVCeXRlcygpLCAxKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIGJ1ZmZl
cjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3Jl
ZGVudGlhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRo
bi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTQsNyArNTQsNyBAQCBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRw
dXRzIFB1CiB9CiAKIFB1YmxpY0tleUNyZWRlbnRpYWw6OlB1YmxpY0tleUNyZWRlbnRpYWwoUmVm
PEF1dGhlbnRpY2F0b3JSZXNwb25zZT4mJiByZXNwb25zZSkKLSAgICA6IEJhc2ljQ3JlZGVudGlh
bChiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhyZXNwb25zZS0+cmF3SWQoKS0+ZGF0YSgpLCByZXNw
b25zZS0+cmF3SWQoKS0+Ynl0ZUxlbmd0aCgpKSwgVHlwZTo6UHVibGljS2V5LCBEaXNjb3Zlcnk6
OlJlbW90ZSkKKyAgICA6IEJhc2ljQ3JlZGVudGlhbChiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhy
ZXNwb25zZS0+cmF3SWQoKS0+Ynl0ZXMoKSksIFR5cGU6OlB1YmxpY0tleSwgRGlzY292ZXJ5OjpS
ZW1vdGUpCiAgICAgLCBtX3Jlc3BvbnNlKFdURk1vdmUocmVzcG9uc2UpKQogewogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRp
b25PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRo
bi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmgJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENy
ZWF0aW9uT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsOCArMTQxLDggQEAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9u
czo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBycC5p
ZCA8PCBycC5uYW1lIDw8IHJwLmljb247Ci0gICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50
NjRfdD4odXNlci5pZC5sZW5ndGgoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERh
dGEodXNlci5pZC5kYXRhKCksIHVzZXIuaWQubGVuZ3RoKCksIDEpOworICAgIGVuY29kZXIgPDwg
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHVzZXIuaWQuYnl0ZXMoKS5zaXplKCkpOworICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHVzZXIuaWQuYnl0ZXMoKSwgMSk7CiAgICAgZW5jb2Rl
ciA8PCB1c2VyLmRpc3BsYXlOYW1lIDw8IHVzZXIubmFtZSA8PCB1c2VyLmljb24gPDwgcHViS2V5
Q3JlZFBhcmFtcyA8PCB0aW1lb3V0IDw8IGV4Y2x1ZGVDcmVkZW50aWFscyA8PCBhdXRoZW50aWNh
dG9yU2VsZWN0aW9uIDw8IGF0dGVzdGF0aW9uIDw8IGV4dGVuc2lvbnM7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1Ymxp
Y0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsOCBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgog
dm9pZCBQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcjo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCB0eXBlOwotICAgIGVuY29kZXIgPDwgc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KGlkLmxlbmd0aCgpKTsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShpZC5kYXRhKCksIGlkLmxlbmd0aCgpLCAxKTsKKyAgICBlbmNvZGVyIDw8IHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihpZC5ieXRlcygpLnNpemUoKSk7CisgICAgZW5jb2Rlci5lbmNvZGVG
aXhlZExlbmd0aERhdGEoaWQuYnl0ZXMoKSwgMSk7CiAgICAgZW5jb2RlciA8PCB0cmFuc3BvcnRz
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0
SGFuZHNoYWtlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNv
Y2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk3LDE5ICs5NywyMCBAQCBzdGF0aWMgU3RyaW5nIGdlbmVyYXRlU2VjV2Vi
U29ja2V0S2V5KCkKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG5vbmNlU2l6ZSA9IDE2OwogICAg
IHVuc2lnbmVkIGNoYXIga2V5W25vbmNlU2l6ZV07CiAgICAgY3J5cHRvZ3JhcGhpY2FsbHlSYW5k
b21WYWx1ZXMoa2V5LCBub25jZVNpemUpOwotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmlu
ZyhrZXksIG5vbmNlU2l6ZSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGtleSk7
CiB9CiAKIFN0cmluZyBXZWJTb2NrZXRIYW5kc2hha2U6OmdldEV4cGVjdGVkV2ViU29ja2V0QWNj
ZXB0KGNvbnN0IFN0cmluZyYgc2VjV2ViU29ja2V0S2V5KQogewogICAgIGNvbnN0ZXhwciB1aW50
OF90IHdlYlNvY2tldEtleUdVSURbXSA9ICIyNThFQUZBNS1FOTE0LTQ3REEtOTVDQS1DNUFCMERD
ODVCMTEiOworCiAgICAgU0hBMSBzaGExOwotICAgIENTdHJpbmcga2V5RGF0YSA9IHNlY1dlYlNv
Y2tldEtleS5hc2NpaSgpOwotICAgIHNoYTEuYWRkQnl0ZXMoa2V5RGF0YS5kYXRhQXNVSW50OFB0
cigpLCBrZXlEYXRhLmxlbmd0aCgpKTsKLSAgICBzaGExLmFkZEJ5dGVzKHdlYlNvY2tldEtleUdV
SUQsIHN0ZDo6c2l6ZSh3ZWJTb2NrZXRLZXlHVUlEKSAtIDEpOworICAgIHNoYTEuYWRkQnl0ZXMo
c2VjV2ViU29ja2V0S2V5LmFzY2lpKCkuYnl0ZXMoKSk7CisgICAgc2hhMS5hZGRCeXRlcyh3ZWJT
b2NrZXRLZXlHVUlEKTsKKwogICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwogICAgIHNoYTEuY29tcHV0
ZUhhc2goaGFzaCk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGhhc2guZGF0YSgp
LCBTSEExOjpoYXNoU2l6ZSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGhhc2gp
OwogfQogCiBXZWJTb2NrZXRIYW5kc2hha2U6OldlYlNvY2tldEhhbmRzaGFrZShjb25zdCBVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNv
bnN0IFN0cmluZyYgY2xpZW50T3JpZ2luLCBib29sIGFsbG93Q29va2llcykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvV2ViQ29y
ZS54Y3NjaGVtZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai94Y3NoYXJlZGRhdGEveGNzY2hlbWVzL1dlYkNvcmUueGNzY2hlbWUJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3Nj
aGVtZXMvV2ViQ29yZS54Y3NjaGVtZQkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksOSBAQAog
ICAgICAgaWdub3Jlc1BlcnNpc3RlbnRTdGF0ZU9uTGF1bmNoID0gIk5PIgogICAgICAgZGVidWdE
b2N1bWVudFZlcnNpb25pbmcgPSAiWUVTIgogICAgICAgZGVidWdTZXJ2aWNlRXh0ZW5zaW9uID0g
ImludGVybmFsIgotICAgICAgYWxsb3dMb2NhdGlvblNpbXVsYXRpb24gPSAiWUVTIj4KKyAgICAg
IGVuYWJsZUdQVUZyYW1lQ2FwdHVyZU1vZGUgPSAiMyIKKyAgICAgIGFsbG93TG9jYXRpb25TaW11
bGF0aW9uID0gIllFUyIKKyAgICAgIEdQVVByb2ZpbGVyRW5hYmxlZCA9ICJObyI+CiAgICA8L0xh
dW5jaEFjdGlvbj4KICAgIDxQcm9maWxlQWN0aW9uCiAgICAgICBidWlsZENvbmZpZ3VyYXRpb24g
PSAiUmVsZWFzZSIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0J1ZmZlclNvdXJj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0J1ZmZlclNvdXJj
ZS5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9CdWZm
ZXJTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsMTMgQEAgcHVibGljOgogICAg
ICAgICB9LCBtX3ZhcmlhbnQpOwogICAgIH0KIAorICAgIFNwYW48Y29uc3QgdWludDhfdD4gYnl0
ZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQoW10oYXV0byYgYnVm
ZmVyKSAtPiBTcGFuPGNvbnN0IHVpbnQ4X3Q+IHsKKyAgICAgICAgICAgIHJldHVybiBidWZmZXIg
PyBTcGFuPGNvbnN0IHVpbnQ4X3Q+IHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZl
ci0+ZGF0YSgpKSwgYnVmZmVyLT5ieXRlTGVuZ3RoKCkgfSA6IFNwYW48Y29uc3QgdWludDhfdD4g
eyB9OworICAgICAgICB9LCBtX3ZhcmlhbnQpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBWYXJp
YW50VHlwZSBtX3ZhcmlhbnQ7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjQsMTUgKzE2NCwxNSBAQCB2b2lkIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
ZW5jb2RlKEVuY29kCiAKICAgICBpZiAoaGFzQXJyYXkpIHsKICAgICAgICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDx1aW50NjRfdD4obV9hcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXktPnNpemUoKSk7
Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byAmYXJyYXlCdWZmZXJDb250ZW50cyA6ICptX2FycmF5
QnVmZmVyQ29udGVudHNBcnJheSkgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGFycmF5QnVm
ZmVyQ29udGVudHMgOiAqbV9hcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkpIHsKICAgICAgICAgICAg
IGVuY29kZXIgPDwgYXJyYXlCdWZmZXJDb250ZW50cy5zaXplSW5CeXRlcygpOwotICAgICAgICAg
ICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGFycmF5QnVmZmVyQ29udGVudHMuZGF0YSgpKSwgYXJyYXlCdWZmZXJDb250ZW50cy5zaXpl
SW5CeXRlcygpLCAxKTsKKyAgICAgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KGFycmF5QnVmZmVyQ29udGVudHMuYnl0ZXMoKSwgMSk7CiAgICAgICAgIH0KICAgICB9CiAKICNp
ZiBFTkFCTEUoV0VCX1JUQykKICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Piht
X2RldGFjaGVkUlRDRGF0YUNoYW5uZWxzLnNpemUoKSk7Ci0gICAgZm9yIChjb25zdCBhdXRvICZj
aGFubmVsIDogbV9kZXRhY2hlZFJUQ0RhdGFDaGFubmVscykKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IGNoYW5uZWwgOiBtX2RldGFjaGVkUlRDRGF0YUNoYW5uZWxzKQogICAgICAgICBlbmNvZGVyIDw8
ICpjaGFubmVsOwogI2VuZGlmCiB9CkBAIC0yMDYsNyArMjA2LDcgQEAgUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZAogICAgICAgICAgICAgYXV0byBidWZmZXIgPSBHaWdh
Y2FnZTo6dHJ5TWFsbG9jKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJ1ZmZlclNpemUpOwogICAgICAg
ICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihidWZmZXIpLCBidWZmZXJTaXplLCAxKSkgeworICAgICAgICAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgc3RhdGljX2Nhc3Q8c3RkOjpieXRlKj4o
YnVmZmVyKSwgYnVmZmVyU2l6ZSB9LCAxKSkgewogICAgICAgICAgICAgICAgIEdpZ2FjYWdlOjpm
cmVlKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9TZXJpYWxpemVkTkZBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9TZXJpYWxpemVkTkZBLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvU2VyaWFsaXplZE5GQS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBTZXJpYWxpemVkTkZBOjpTZXJpYWxpemVkTkZB
KEZpbGVTeXN0ZW06CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogY29uc3QgVCogU2VyaWFsaXplZE5G
QTo6cG9pbnRlckF0T2Zmc2V0SW5GaWxlKHNpemVfdCBvZmZzZXQpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihtX2ZpbGUuZGF0YSgpKSArIG9mZnNldCk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgVCo+KG1fZmlsZS5kYXRhKCkuZGF0YSgpICsgb2Zmc2V0KTsKIH0KIAogYXV0byBTZXJp
YWxpemVkTkZBOjpub2RlcygpIGNvbnN0IC0+IGNvbnN0IFJhbmdlPEltbXV0YWJsZU5GQU5vZGU+
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNwcAko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlF
Q01hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NywxMCArMTk3LDEwIEBAIGJvb2wgQ3J5cHRv
S2V5RUM6OnBsYXRmb3JtQWRkRmllbGRFbGVtZW4KIAogICAgIGlmIChVTkxJS0VMWSgoc2l6ZSAh
PSBwdWJsaWNLZXlTaXplKSAmJiAoc2l6ZSAhPSBwcml2YXRlS2V5U2l6ZSkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgandrLnggPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhyZXN1bHQu
ZGF0YSgpICsgMSwga2V5U2l6ZUluQnl0ZXMpOwotICAgIGp3ay55ID0gYmFzZTY0VVJMRW5jb2Rl
VG9TdHJpbmcocmVzdWx0LmRhdGEoKSArIGtleVNpemVJbkJ5dGVzICsgMSwga2V5U2l6ZUluQnl0
ZXMpOworICAgIGp3ay54ID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoU3BhbiB7IHJlc3VsdCB9
LnN1YnNwYW4oMSwga2V5U2l6ZUluQnl0ZXMpKTsKKyAgICBqd2sueSA9IGJhc2U2NFVSTEVuY29k
ZVRvU3RyaW5nKFNwYW4geyByZXN1bHQgfS5zdWJzcGFuKDEgKyBrZXlTaXplSW5CeXRlcywga2V5
U2l6ZUluQnl0ZXMpKTsKICAgICBpZiAoc2l6ZSA+IHB1YmxpY0tleVNpemUpCi0gICAgICAgIGp3
ay5kID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcocmVzdWx0LmRhdGEoKSArIHB1YmxpY0tleVNp
emUsIGtleVNpemVJbkJ5dGVzKTsKKyAgICAgICAgandrLmQgPSBiYXNlNjRVUkxFbmNvZGVUb1N0
cmluZyhTcGFuIHsgcmVzdWx0IH0uc3Vic3BhbihwdWJsaWNLZXlTaXplLCBrZXlTaXplSW5CeXRl
cykpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
bWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9tYWMvU2VyaWFsaXplZENyeXB0b0tleVdyYXBNYWMubW0JKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvU2VyaWFsaXplZENyeXB0b0tl
eVdyYXBNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbXBvcnQgPHd0
Zi9DcnlwdG9ncmFwaGljVXRpbGl0aWVzLmg+CiAjaW1wb3J0IDx3dGYvUHJvY2Vzc1ByaXZpbGVn
ZS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL2NmL1NwYW5DRi5o
PgogI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvc3BpL2Nv
Y29hL1NlY3VyaXR5U1BJLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4KQEAgLTE2Nyw3
ICsxNjgsNyBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGZpCiAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+
IGtleURhdGEgPSBhZG9wdENGKGtleURhdGFSZWYpOwotICAgIHJldHVybiBiYXNlNjREZWNvZGUo
Q0ZEYXRhR2V0Qnl0ZVB0cihrZXlEYXRhLmdldCgpKSwgQ0ZEYXRhR2V0TGVuZ3RoKGtleURhdGEu
Z2V0KCkpKTsKKyAgICByZXR1cm4gYmFzZTY0RGVjb2RlKGFzQnl0ZXMoa2V5RGF0YS5nZXQoKSkp
OwogfQogCiBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZGVmYXVsdFdlYkNyeXB0b01h
c3RlcktleSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MDYsNyArMTYwNiw4
IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IE5vZGU6OnNldFRleHRDb250ZW50KGMKIHN0YXRpYyBTSEEx
OjpEaWdlc3QgaGFzaFBvaW50ZXIoY29uc3Qgdm9pZCogcG9pbnRlcikKIHsKICAgICBTSEExIHNo
YTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigm
cG9pbnRlciksIHNpemVvZihwb2ludGVyKSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgJnBv
aW50ZXIsIDEgfSk7CisKICAgICBTSEExOjpEaWdlc3QgZGlnZXN0OwogICAgIHNoYTEuY29tcHV0
ZUhhc2goZGlnZXN0KTsKICAgICByZXR1cm4gZGlnZXN0OwpJbmRleDogU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMzgsNyArMzM4LDcgQEAgdm9pZCBGaWxlUmVhZGVyTG9hZGVyOjpjb252ZXJ0VG9EYXRhVVJM
KAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9zdHJpbmdSZXN1bHQgPSBtYWtlU3Ry
aW5nKCJkYXRhOiIsIG1fZGF0YVR5cGUuaXNFbXB0eSgpID8gImFwcGxpY2F0aW9uL29jdGV0LXN0
cmVhbSIgOiBtX2RhdGFUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKG1fcmF3RGF0YS0+
ZGF0YSgpLCBtX2J5dGVzTG9hZGVkKSk7CisgICAgbV9zdHJpbmdSZXN1bHQgPSBtYWtlU3RyaW5n
KCJkYXRhOiIsIG1fZGF0YVR5cGUuaXNFbXB0eSgpID8gImFwcGxpY2F0aW9uL29jdGV0LXN0cmVh
bSIgOiBtX2RhdGFUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKG1fcmF3RGF0YS0+Ynl0
ZXMoKSkpOwogfQogCiBib29sIEZpbGVSZWFkZXJMb2FkZXI6OmlzQ29tcGxldGVkKCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTmV0d29ya1NlbmRRdWV1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTEgKzUzLDEwIEBAIHZvaWQgTmV0d29ya1NlbmRR
dWV1ZTo6ZW5xdWV1ZShDU3RyaW5nJiYKIHZvaWQgTmV0d29ya1NlbmRRdWV1ZTo6ZW5xdWV1ZShj
b25zdCBKU0M6OkFycmF5QnVmZmVyJiBiaW5hcnlEYXRhLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
bnNpZ25lZCBieXRlTGVuZ3RoKQogewogICAgIGlmIChtX3F1ZXVlLmlzRW1wdHkoKSkgewotICAg
ICAgICBhdXRvKiBkYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJpbmFyeURhdGEu
ZGF0YSgpKTsKLSAgICAgICAgbV93cml0ZVJhd0RhdGEoU3BhbiB7IGRhdGEgKyBieXRlT2Zmc2V0
LCBieXRlTGVuZ3RoIH0pOworICAgICAgICBtX3dyaXRlUmF3RGF0YShiaW5hcnlEYXRhLmJ5dGVz
KCkuc3Vic3BhbihieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgbV9xdWV1ZS5hcHBlbmQoU2hhcmVkQnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8
Y29uc3QgdWludDhfdCo+KGJpbmFyeURhdGEuZGF0YSgpKSArIGJ5dGVPZmZzZXQsIGJ5dGVMZW5n
dGgpKTsKKyAgICBtX3F1ZXVlLmFwcGVuZChTaGFyZWRCdWZmZXI6OmNyZWF0ZShiaW5hcnlEYXRh
LmJ5dGVzKCkuc3Vic3BhbihieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSkpOwogfQogCiB2b2lkIE5l
dHdvcmtTZW5kUXVldWU6OmVucXVldWUoV2ViQ29yZTo6QmxvYiYgYmxvYikKQEAgLTkzLDcgKzky
LDkgQEAgdm9pZCBOZXR3b3JrU2VuZFF1ZXVlOjpwcm9jZXNzTWVzc2FnZXMoKQogICAgICAgICBz
d2l0Y2hPbihtX3F1ZXVlLmZpcnN0KCksIFt0aGlzXShjb25zdCBDU3RyaW5nJiB1dGY4KSB7CiAg
ICAgICAgICAgICBtX3dyaXRlU3RyaW5nKHV0ZjgpOwogICAgICAgICB9LCBbdGhpc10oUmVmPFNo
YXJlZEJ1ZmZlcj4mIGRhdGEpIHsKLSAgICAgICAgICAgIGRhdGEtPmZvckVhY2hTZWdtZW50KG1f
d3JpdGVSYXdEYXRhKTsKKyAgICAgICAgICAgIGRhdGEtPmZvckVhY2hTZWdtZW50KFt0aGlzXShh
dXRvJiBzcGFuKSB7CisgICAgICAgICAgICAgICAgbV93cml0ZVJhd0RhdGEoYXNCeXRlcyhzcGFu
KSk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfSwgW3RoaXMsICZzaG91bGRTdG9wUHJvY2Vz
c2luZ10oVW5pcXVlUmVmPEJsb2JMb2FkZXI+JiBsb2FkZXIpIHsKICAgICAgICAgICAgIGF1dG8g
ZXJyb3JDb2RlID0gbG9hZGVyLT5lcnJvckNvZGUoKTsKICAgICAgICAgICAgIGlmIChsb2FkZXIt
PmlzTG9hZGluZygpIHx8IChlcnJvckNvZGUgJiYgZXJyb3JDb2RlLnZhbHVlKCkgPT0gQWJvcnRF
cnJvcikpIHsKQEAgLTEwMiw3ICsxMDMsNyBAQCB2b2lkIE5ldHdvcmtTZW5kUXVldWU6OnByb2Nl
c3NNZXNzYWdlcygpCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChjb25zdCBhdXRv
JiByZXN1bHQgPSBsb2FkZXItPmFycmF5QnVmZmVyUmVzdWx0KCkpIHsKLSAgICAgICAgICAgICAg
ICBtX3dyaXRlUmF3RGF0YShTcGFuIHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KHJlc3Vs
dC0+ZGF0YSgpKSwgcmVzdWx0LT5ieXRlTGVuZ3RoKCkgfSk7CisgICAgICAgICAgICAgICAgbV93
cml0ZVJhd0RhdGEocmVzdWx0LT5ieXRlcygpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBBU1NFUlQoZXJyb3JDb2RlKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvTmV0d29ya1NlbmRRdWV1ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvTmV0d29ya1NlbmRRdWV1ZS5oCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL05ldHdvcmtTZW5kUXVldWUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDgsNyArNDgsNyBAQCBjbGFzcyBTaGFyZWRCdWZmZXI7CiBjbGFzcyBXRUJDT1JFX0VY
UE9SVCBOZXR3b3JrU2VuZFF1ZXVlIDogcHVibGljIENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVy
IHsKIHB1YmxpYzoKICAgICB1c2luZyBXcml0ZVN0cmluZyA9IEZ1bmN0aW9uPHZvaWQoY29uc3Qg
Q1N0cmluZyYgdXRmOCk+OwotICAgIHVzaW5nIFdyaXRlUmF3RGF0YSA9IEZ1bmN0aW9uPHZvaWQo
Y29uc3QgU3Bhbjxjb25zdCB1aW50OF90PiYpPjsKKyAgICB1c2luZyBXcml0ZVJhd0RhdGEgPSBG
dW5jdGlvbjx2b2lkKGNvbnN0IFNwYW48Y29uc3Qgc3RkOjpieXRlPiYpPjsKICAgICBlbnVtIGNs
YXNzIENvbnRpbnVlIHsgTm8sIFllcyB9OwogICAgIHVzaW5nIFByb2Nlc3NFcnJvciA9IEZ1bmN0
aW9uPENvbnRpbnVlKEV4Y2VwdGlvbkNvZGUpPjsKICAgICBOZXR3b3JrU2VuZFF1ZXVlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmLCBXcml0ZVN0cmluZyYmLCBXcml0ZVJhd0RhdGEmJiwgUHJvY2Vz
c0Vycm9yJiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9y
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3Vw
cG9ydC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9E
T01QYXRjaFN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQsMjggKzM5NCwyMyBAQCBF
eGNlcHRpb25Pcjx2b2lkPiBET01QYXRjaFN1cHBvcnQ6OmlubmVyCiAgICAgcmV0dXJuIHsgfTsK
IH0KIAotc3RhdGljIHZvaWQgYWRkU3RyaW5nVG9TSEExKFNIQTEmIHNoYTEsIGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKQotewotICAgIENTdHJpbmcgY1N0cmluZyA9IHN0cmluZy51dGY4KCk7Ci0gICAg
c2hhMS5hZGRCeXRlcyhjU3RyaW5nLmRhdGFBc1VJbnQ4UHRyKCksIGNTdHJpbmcubGVuZ3RoKCkp
OwotfQotCiBzdGQ6OnVuaXF1ZV9wdHI8RE9NUGF0Y2hTdXBwb3J0OjpEaWdlc3Q+IERPTVBhdGNo
U3VwcG9ydDo6Y3JlYXRlRGlnZXN0KE5vZGUmIG5vZGUsIFVudXNlZE5vZGVzTWFwKiB1bnVzZWRO
b2Rlc01hcCkKIHsKICAgICBhdXRvIGRpZ2VzdCA9IG1ha2VVbmlxdWU8RGlnZXN0PigpOwogICAg
IGRpZ2VzdC0+bm9kZSA9ICZub2RlOworCiAgICAgU0hBMSBzaGExOwogCiAgICAgYXV0byBub2Rl
VHlwZSA9IG5vZGUubm9kZVR5cGUoKTsKLSAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KCZub2RlVHlwZSksIHNpemVvZihub2RlVHlwZSkpOwotICAgIGFk
ZFN0cmluZ1RvU0hBMShzaGExLCBub2RlLm5vZGVOYW1lKCkpOwotICAgIGFkZFN0cmluZ1RvU0hB
MShzaGExLCBub2RlLm5vZGVWYWx1ZSgpKTsKKyAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmbm9k
ZVR5cGUsIDEgfSk7CisgICAgc2hhMS5hZGRCeXRlcyhub2RlLm5vZGVOYW1lKCkudXRmOCgpLmJ5
dGVzKCkpOworICAgIHNoYTEuYWRkQnl0ZXMobm9kZS5ub2RlVmFsdWUoKS51dGY4KCkuYnl0ZXMo
KSk7CiAKICAgICBpZiAobm9kZS5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSkgewog
ICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUuZmlyc3RDaGlsZCgpOwogICAgICAgICB3aGlsZSAo
Y2hpbGQpIHsKICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxEaWdlc3Q+IGNoaWxkSW5mbyA9
IGNyZWF0ZURpZ2VzdCgqY2hpbGQsIHVudXNlZE5vZGVzTWFwKTsKLSAgICAgICAgICAgIGFkZFN0
cmluZ1RvU0hBMShzaGExLCBjaGlsZEluZm8tPnNoYTEpOworICAgICAgICAgICAgc2hhMS5hZGRC
eXRlcyhjaGlsZEluZm8tPnNoYTEudXRmOCgpLmJ5dGVzKCkpOwogICAgICAgICAgICAgY2hpbGQg
PSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAgIGRpZ2VzdC0+Y2hpbGRyZW4uYXBw
ZW5kKFdURk1vdmUoY2hpbGRJbmZvKSk7CiAgICAgICAgIH0KQEAgLTQyNCwxOSArNDE5LDE5IEBA
IHN0ZDo6dW5pcXVlX3B0cjxET01QYXRjaFN1cHBvcnQ6OkRpZ2VzdD4KICAgICAgICAgaWYgKGVs
ZW1lbnQuaGFzQXR0cmlidXRlc1dpdGhvdXRVcGRhdGUoKSkgewogICAgICAgICAgICAgU0hBMSBh
dHRyc1NIQTE7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGF0dHJpYnV0ZSA6IGVsZW1lbnQuYXR0
cmlidXRlc0l0ZXJhdG9yKCkpIHsKLSAgICAgICAgICAgICAgICBhZGRTdHJpbmdUb1NIQTEoYXR0
cnNTSEExLCBhdHRyaWJ1dGUubmFtZSgpLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGFk
ZFN0cmluZ1RvU0hBMShhdHRyc1NIQTEsIGF0dHJpYnV0ZS52YWx1ZSgpKTsKKyAgICAgICAgICAg
ICAgICBhdHRyc1NIQTEuYWRkQnl0ZXMoYXR0cmlidXRlLm5hbWUoKS50b1N0cmluZygpLnV0Zjgo
KS5ieXRlcygpKTsKKyAgICAgICAgICAgICAgICBhdHRyc1NIQTEuYWRkQnl0ZXMoYXR0cmlidXRl
LnZhbHVlKCkuc3RyaW5nKCkudXRmOCgpLmJ5dGVzKCkpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgU0hBMTo6RGlnZXN0IGF0dHJzSGFzaDsKICAgICAgICAgICAgIGF0dHJzU0hBMS5jb21w
dXRlSGFzaChhdHRyc0hhc2gpOwotICAgICAgICAgICAgZGlnZXN0LT5hdHRyc1NIQTEgPSBiYXNl
NjRFbmNvZGVUb1N0cmluZyhhdHRyc0hhc2guZGF0YSgpLCAxMCk7Ci0gICAgICAgICAgICBhZGRT
dHJpbmdUb1NIQTEoc2hhMSwgZGlnZXN0LT5hdHRyc1NIQTEpOworICAgICAgICAgICAgZGlnZXN0
LT5hdHRyc1NIQTEgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhhdHRyc0hhc2gpOworICAgICAgICAg
ICAgc2hhMS5hZGRCeXRlcyhkaWdlc3QtPmF0dHJzU0hBMS51dGY4KCkuYnl0ZXMoKSk7CiAgICAg
ICAgIH0KICAgICB9CiAKICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAgICBzaGExLmNvbXB1dGVI
YXNoKGhhc2gpOwotICAgIGRpZ2VzdC0+c2hhMSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGhhc2gu
ZGF0YSgpLCAxMCk7CisgICAgZGlnZXN0LT5zaGExID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaGFz
aCk7CiAgICAgaWYgKHVudXNlZE5vZGVzTWFwKQogICAgICAgICB1bnVzZWROb2Rlc01hcC0+YWRk
KGRpZ2VzdC0+c2hhMSwgZGlnZXN0LmdldCgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MDIsNyArNjAyLDcgQEAgYm9vbCBJbnNwZWN0b3JGcm9udGVu
ZEhvc3Q6OnNob3dDZXJ0aWZpYwogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEtPmRhdGEoKSwg
ZGF0YS0+c2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyAq
ZGF0YSB9OwogICAgIHN0ZDo6b3B0aW9uYWw8Q2VydGlmaWNhdGVJbmZvPiBjZXJ0aWZpY2F0ZUlu
Zm87CiAgICAgZGVjb2RlciA+PiBjZXJ0aWZpY2F0ZUluZm87CiAgICAgaWYgKCFjZXJ0aWZpY2F0
ZUluZm8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0Rh
dGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVz
b3VyY2VzRGF0YS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsx
MDYsNyBAQCB1bnNpZ25lZCBOZXR3b3JrUmVzb3VyY2VzRGF0YTo6UmVzb3VyY2VECiAgICAgICAg
IG1fY29udGVudCA9IG1fZGVjb2Rlci0+ZGVjb2RlQW5kRmx1c2gobV9kYXRhQnVmZmVyLT5kYXRh
KCksIGRhdGFMZW5ndGgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fYmFzZTY0RW5jb2RlZCA9
IHRydWU7Ci0gICAgICAgIG1fY29udGVudCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKG1fZGF0YUJ1
ZmZlci0+ZGF0YSgpLCBkYXRhTGVuZ3RoKTsKKyAgICAgICAgbV9jb250ZW50ID0gYmFzZTY0RW5j
b2RlVG9TdHJpbmcobV9kYXRhQnVmZmVyLT5ieXRlcygpKTsKICAgICB9CiAKICAgICBtX2RhdGFC
dWZmZXIgPSBudWxscHRyOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JET01BZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjk4LDcgKzE2OTgsNyBAQCBzdGF0aWMgU3RyaW5nIGNvbXB1dGVDb250
ZW50U2VjdXJpdHlQb2xpCiAgICAgYXV0byBjcnlwdG9EaWdlc3QgPSBQQUw6OkNyeXB0b0RpZ2Vz
dDo6Y3JlYXRlKFBBTDo6Q3J5cHRvRGlnZXN0OjpBbGdvcml0aG06OlNIQV8yNTYpOwogICAgIGNy
eXB0b0RpZ2VzdC0+YWRkQnl0ZXMoY29udGVudC5kYXRhKCksIGNvbnRlbnQuc2l6ZSgpKTsKICAg
ICBhdXRvIGRpZ2VzdCA9IGNyeXB0b0RpZ2VzdC0+Y29tcHV0ZUhhc2goKTsKLSAgICByZXR1cm4g
bWFrZVN0cmluZygic2hhMjU2LSIsIGJhc2U2NEVuY29kZWQoZGlnZXN0LmRhdGEoKSwgZGlnZXN0
LnNpemUoKSkpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCJzaGEyNTYtIiwgYmFzZTY0RW5jb2Rl
ZChkaWdlc3QpKTsKIH0KIAogUmVmPFByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFn
ZW50OjpidWlsZE9iamVjdEZvck5vZGUoTm9kZSogbm9kZSwgaW50IGRlcHRoKQpJbmRleDogU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0
d29ya0FnZW50LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzUsNyArMTc1LDcgQEAgUmVmPFByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRGcmFtZT4gYgog
ICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0RnJhbWU6OmNyZWF0ZSgpCiAg
ICAgICAgIC5zZXRPcGNvZGUoZnJhbWUub3BDb2RlKQogICAgICAgICAuc2V0TWFzayhmcmFtZS5t
YXNrZWQpCi0gICAgICAgIC5zZXRQYXlsb2FkRGF0YShmcmFtZS5vcENvZGUgPT0gMSA/IFN0cmlu
Zzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soZnJhbWUucGF5bG9hZCwgZnJhbWUucGF5bG9h
ZExlbmd0aCkgOiBiYXNlNjRFbmNvZGVUb1N0cmluZyhmcmFtZS5wYXlsb2FkLCBmcmFtZS5wYXls
b2FkTGVuZ3RoKSkKKyAgICAgICAgLnNldFBheWxvYWREYXRhKGZyYW1lLm9wQ29kZSA9PSAxID8g
U3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhmcmFtZS5wYXlsb2FkLCBmcmFtZS5w
YXlsb2FkTGVuZ3RoKSA6IGJhc2U2NEVuY29kZVRvU3RyaW5nKFNwYW4geyBmcmFtZS5wYXlsb2Fk
LCBmcmFtZS5wYXlsb2FkTGVuZ3RoIH0pKQogICAgICAgICAuc2V0UGF5bG9hZExlbmd0aChmcmFt
ZS5wYXlsb2FkTGVuZ3RoKQogICAgICAgICAucmVsZWFzZSgpOwogfQpAQCAtNTg5LDcgKzU4OSw3
IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlRGEKICAgICAgICAgLy8g
T2Z0ZW4gdGhlIGRhdGEgaXMgdGV4dCBhbmQgd2Ugd291bGQgaGF2ZSBhIGRlY29kZXIsIGJ1dCBm
b3Igbm9uLXRleHQgd2Ugd29uJ3QgaGF2ZSBhIGRlY29kZXIuCiAgICAgICAgIC8vIFN5bmMgWEhS
cyBtYXkgbm90IGhhdmUgYSBjYWNoZWQgcmVzb3VyY2UsIHdoaWxlIG5vbi1zeW5jIFhIUnMgdXN1
YWxseSB0cmFuc2ZlciBkYXRhIG92ZXIgb24gY29tcGxldGlvbi4KICAgICAgICAgaWYgKG1fbG9h
ZGluZ1hIUlN5bmNocm9ub3VzbHkgJiYgcmVzb3VyY2VEYXRhICYmICFyZXNvdXJjZURhdGEtPmhh
c0J1ZmZlcmVkRGF0YSgpICYmICFyZXNvdXJjZURhdGEtPmNhY2hlZFJlc291cmNlKCkpCi0gICAg
ICAgICAgICBtX3Jlc291cmNlc0RhdGEtPnNldFJlc291cmNlQ29udGVudChyZXF1ZXN0SWQsIGJh
c2U2NEVuY29kZVRvU3RyaW5nKGRhdGEsIGRhdGFMZW5ndGgpLCB0cnVlKTsKKyAgICAgICAgICAg
IG1fcmVzb3VyY2VzRGF0YS0+c2V0UmVzb3VyY2VDb250ZW50KHJlcXVlc3RJZCwgYmFzZTY0RW5j
b2RlVG9TdHJpbmcoU3BhbiB7IGRhdGEsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihkYXRhTGVuZ3Ro
KSB9KSwgdHJ1ZSk7CiAgICAgfQogCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRhdGFSZWNl
aXZlZChyZXF1ZXN0SWQsIHRpbWVzdGFtcCgpLCBkYXRhTGVuZ3RoLCBlbmNvZGVkRGF0YUxlbmd0
aCk7CkBAIC0xMDA1LDcgKzEwMDUsNyBAQCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+
IEluc3BlY3RvCiAKICAgICBXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyIGVuY29kZXI7CiAgICAg
V1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPjo6ZW5jb2Rl
KGVuY29kZXIsIGNlcnRpZmljYXRlLnZhbHVlKCkpOwotICAgIHJldHVybiBiYXNlNjRFbmNvZGVU
b1N0cmluZyhlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgcmV0
dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGVuY29kZXIuYnVmZmVyKCkpOwogfQogCiBXZWJTb2Nr
ZXQqIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6d2ViU29ja2V0Rm9yUmVxdWVzdElkKGNvbnN0IFBy
b3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCkKQEAgLTE0MTAsNyArMTQxMCw3
IEBAIGJvb2wgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpjYWNoZWRSZXNvdXIKICAgICAgICAgfQog
CiAgICAgICAgICpiYXNlNjRFbmNvZGVkID0gdHJ1ZTsKLSAgICAgICAgKnJlc3VsdCA9IGJhc2U2
NEVuY29kZVRvU3RyaW5nKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7CisgICAgICAg
ICpyZXN1bHQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhidWZmZXItPmJ5dGVzKCkpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2Vu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDcgQEAKIAogI2lmIEVOQUJMRShXRUJf
QVJDSElWRSkgJiYgVVNFKENGKQogI2luY2x1ZGUgIkxlZ2FjeVdlYkFyY2hpdmUuaCIKKyNpbmNs
dWRlIDx3dGYvY2YvU3BhbkNGLmg+CiAjZW5kaWYKIAogCkBAIC0xMTMsNyArMTE0LDcgQEAgYm9v
bCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNoYXJlZEJ1ZmZlckNvbgogYm9vbCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OmRhdGFDb250ZW50KGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIHNpemUsIGNv
bnN0IFN0cmluZyYgdGV4dEVuY29kaW5nTmFtZSwgYm9vbCB3aXRoQmFzZTY0RW5jb2RlLCBTdHJp
bmcqIHJlc3VsdCkKIHsKICAgICBpZiAod2l0aEJhc2U2NEVuY29kZSkgewotICAgICAgICAqcmVz
dWx0ID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoZGF0YSwgc2l6ZSk7CisgICAgICAgICpyZXN1bHQg
PSBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgZGF0YSwgc2l6ZSB9KTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCkBAIC0xMTAyLDcgKzExMDMsNyBAQCBQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxTdHJpbmc+IEluc3BlY3RvCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
Q291bGQgbm90IGNyZWF0ZSB3ZWIgYXJjaGl2ZSBmb3IgbWFpbiBmcmFtZSJfcyk7CiAKICAgICBS
ZXRhaW5QdHI8Q0ZEYXRhUmVmPiBidWZmZXIgPSBhcmNoaXZlLT5yYXdEYXRhUmVwcmVzZW50YXRp
b24oKTsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoQ0ZEYXRhR2V0Qnl0ZVB0cihi
dWZmZXIuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgoYnVmZmVyLmdldCgpKSk7CisgICAgcmV0dXJu
IGJhc2U2NEVuY29kZVRvU3RyaW5nKGFzQnl0ZXMoYnVmZmVyLmdldCgpKSk7CiB9CiAjZW5kaWYK
IApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNoaXZl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9N
SFRNTEFyY2hpdmUuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODEs
MTYgKzE4MSwxNCBAQCBSZWY8U2hhcmVkQnVmZmVyPiBNSFRNTEFyY2hpdmU6OmdlbmVyYXRlCiAg
ICAgICAgIG1odG1sRGF0YS0+YXBwZW5kKGFzY2lpU3RyaW5nLmRhdGEoKSwgYXNjaWlTdHJpbmcu
bGVuZ3RoKCkpOwogCiAgICAgICAgIC8vIEZJWE1FOiBpZGVhbGx5IHdlIHdvdWxkIGVuY29kZSB0
aGUgY29udGVudCBhcyBhIHN0cmVhbSB3aXRob3V0IGhhdmluZyB0byBmZXRjaCBpdCBhbGwuCi0g
ICAgICAgIGF1dG8qIGRhdGEgPSByZXNvdXJjZS5kYXRhLT5kYXRhKCk7Ci0gICAgICAgIHNpemVf
dCBkYXRhTGVuZ3RoID0gcmVzb3VyY2UuZGF0YS0+c2l6ZSgpOwogICAgICAgICBpZiAoIXN0cmNt
cChjb250ZW50RW5jb2RpbmcsIHF1b3RlZFByaW50YWJsZSkpIHsKLSAgICAgICAgICAgIGF1dG8g
ZW5jb2RlZERhdGEgPSBxdW90ZWRQcmludGFibGVFbmNvZGUoZGF0YSwgZGF0YUxlbmd0aCk7Cisg
ICAgICAgICAgICBhdXRvIGVuY29kZWREYXRhID0gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKHJlc291
cmNlLmRhdGEtPmJ5dGVzKCkpOwogICAgICAgICAgICAgbWh0bWxEYXRhLT5hcHBlbmQoZW5jb2Rl
ZERhdGEuZGF0YSgpLCBlbmNvZGVkRGF0YS5zaXplKCkpOwogICAgICAgICAgICAgbWh0bWxEYXRh
LT5hcHBlbmQoIlxyXG4iLCAyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VS
VCghc3RyY21wKGNvbnRlbnRFbmNvZGluZywgYmFzZTY0KSk7CiAgICAgICAgICAgICAvLyBXZSBh
cmUgbm90IHNwZWNpZnlpbmcgaW5zZXJ0TEZzID0gdHJ1ZSBiZWxvdyBhcyBpdCB3b3VsZCBjdXQg
dGhlIGxpbmVzIHdpdGggTEZzIGFuZCBNSFRNTCByZXF1aXJlcyBDUkxGcy4KLSAgICAgICAgICAg
IGF1dG8gZW5jb2RlZERhdGEgPSBiYXNlNjRFbmNvZGVUb1ZlY3RvcihkYXRhLCBkYXRhTGVuZ3Ro
KTsKKyAgICAgICAgICAgIGF1dG8gZW5jb2RlZERhdGEgPSBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihy
ZXNvdXJjZS5kYXRhLT5ieXRlcygpKTsKICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBtYXhpbXVt
TGluZUxlbmd0aCA9IDc2OwogICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gMDsKICAgICAgICAg
ICAgIHNpemVfdCBlbmNvZGVkRGF0YUxlbmd0aCA9IGVuY29kZWREYXRhLnNpemUoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MUGFyc2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTFBhcnNl
ci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZl
L21odG1sL01IVE1MUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDcgKzE5NSw3IEBA
IFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IE1IVE1MUGFyc2VyOjpwYXIKICAgICBWZWN0b3I8dWlu
dDhfdD4gZGF0YTsKICAgICBzd2l0Y2ggKG1pbWVIZWFkZXIuY29udGVudFRyYW5zZmVyRW5jb2Rp
bmcoKSkgewogICAgIGNhc2UgTUlNRUhlYWRlcjo6QmFzZTY0OiB7Ci0gICAgICAgIGF1dG8gZGVj
b2RlZERhdGEgPSBiYXNlNjREZWNvZGUoY29udGVudC0+ZGF0YSgpLCBjb250ZW50LT5zaXplKCkp
OworICAgICAgICBhdXRvIGRlY29kZWREYXRhID0gYmFzZTY0RGVjb2RlKGNvbnRlbnQtPmJ5dGVz
KCkpOwogICAgICAgICBpZiAoIWRlY29kZWREYXRhKSB7CiAgICAgICAgICAgICBMT0dfRVJST1Io
IkludmFsaWQgYmFzZTY0IGNvbnRlbnQgZm9yIE1IVE1MIHBhcnQuIik7CiAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKQEAgLTIwNCw3ICsyMDQsNyBAQCBSZWZQdHI8QXJjaGl2ZVJlc291cmNl
PiBNSFRNTFBhcnNlcjo6cGFyCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIE1JTUVI
ZWFkZXI6OlF1b3RlZFByaW50YWJsZToKLSAgICAgICAgZGF0YSA9IHF1b3RlZFByaW50YWJsZURl
Y29kZShjb250ZW50LT5kYXRhKCksIGNvbnRlbnQtPnNpemUoKSk7CisgICAgICAgIGRhdGEgPSBx
dW90ZWRQcmludGFibGVEZWNvZGUoY29udGVudC0+Ynl0ZXMoKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgTUlNRUhlYWRlcjo6U2V2ZW5CaXQ6CiAgICAgY2FzZSBNSU1FSGVhZGVyOjpCaW5h
cnk6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkxvYWRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIEljb25Mb2FkZXI6Om5v
dGlmeUZpbmlzaGVkKENhY2hlZFJlCiAgICAgICAgIGRhdGEgPSBudWxscHRyOwogCiAgICAgY29u
c3RleHByIHVpbnQ4X3QgcGRmTWFnaWNOdW1iZXJbXSA9IHsgJyUnLCAnUCcsICdEJywgJ0YnIH07
Ci0gICAgaWYgKGRhdGEgJiYgZGF0YS0+c3RhcnRzV2l0aChTcGFuIHsgcGRmTWFnaWNOdW1iZXIs
IHN0ZDo6c2l6ZShwZGZNYWdpY051bWJlcikgfSkpIHsKKyAgICBpZiAoZGF0YSAmJiBkYXRhLT5z
dGFydHNXaXRoKHBkZk1hZ2ljTnVtYmVyKSkgewogICAgICAgICBMT0coSWNvbkRhdGFiYXNlLCAi
SWNvbkxvYWRlcjo6ZmluaXNoTG9hZGluZygpIC0gSWdub3JpbmcgaWNvbiBhdCAlcyBiZWNhdXNl
IGl0IGFwcGVhcnMgdG8gYmUgYSBQREYiLCBtX3Jlc291cmNlLT51cmwoKS5zdHJpbmcoKS5hc2Np
aSgpLmRhdGEoKSk7CiAgICAgICAgIGRhdGEgPSBudWxscHRyOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0Jhc2U2NFV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzgsNyArMzgsNyBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IEJhc2U2NFV0aWxpdGllczo6YnRvCiAg
ICAgaWYgKCFzdHJpbmdUb0VuY29kZS5pc0FsbExhdGluMSgpKQogICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZENoYXJhY3RlckVycm9yIH07CiAKLSAgICByZXR1cm4gYmFzZTY0RW5j
b2RlVG9TdHJpbmcoc3RyaW5nVG9FbmNvZGUubGF0aW4xKCkpOworICAgIHJldHVybiBiYXNlNjRF
bmNvZGVUb1N0cmluZyhzdHJpbmdUb0VuY29kZS5sYXRpbjEoKS5ieXRlcygpKTsKIH0KIAogRXhj
ZXB0aW9uT3I8U3RyaW5nPiBCYXNlNjRVdGlsaXRpZXM6OmF0b2IoY29uc3QgU3RyaW5nJiBlbmNv
ZGVkU3RyaW5nKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1c3Rv
bURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9h
cmRDdXN0b21EYXRhLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4
OSw3IEBAIFJlZjxTaGFyZWRCdWZmZXI+IFBhc3RlYm9hcmRDdXN0b21EYXRhOjoKICAgICBlbmNv
ZGVyIDw8IG1fb3JpZ2luOwogICAgIGVuY29kZXIgPDwgc2FtZU9yaWdpbkN1c3RvbVN0cmluZ0Rh
dGEoKTsKICAgICBlbmNvZGVyIDw8IG9yZGVyZWRUeXBlcygpOwotICAgIHJldHVybiBTaGFyZWRC
dWZmZXI6OmNyZWF0ZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7Cisg
ICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCkpOwogfQogCiBQ
YXN0ZWJvYXJkQ3VzdG9tRGF0YSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6ZnJvbVBlcnNpc3RlbmNl
RGVjb2RlcihXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyJiYgZGVjb2RlcikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsMjAgKzM0LDE5IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgog
I2luY2x1ZGUgPHd0Zi91bmljb2RlL1VURjhDb252ZXJzaW9uLmg+CiAKLW5hbWVzcGFjZSBXZWJD
b3JlIHsKKyNpZiBVU0UoQ0YpCisjaW5jbHVkZSA8d3RmL2NmL1NwYW5DRi5oPgorI2VuZGlmCiAK
LVNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBz
aXplKQotewotICAgIGFwcGVuZChkYXRhLCBzaXplKTsKLX0KK25hbWVzcGFjZSBXZWJDb3JlIHsK
IAotU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNp
emUpCitTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0
YSkKIHsKLSAgICBhcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSks
IHNpemUpOworICAgIGFwcGVuZChkYXRhKTsKIH0KIAogU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZm
ZXIoRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmJiBmaWxlRGF0YSkKLSAgICA6IG1fc2l6ZShm
aWxlRGF0YS5zaXplKCkpCisgICAgOiBtX3NpemUoZmlsZURhdGEuZGF0YSgpLnNpemUoKSkKIHsK
ICAgICBtX3NlZ21lbnRzLmFwcGVuZCh7MCwgRGF0YVNlZ21lbnQ6OmNyZWF0ZShXVEZNb3ZlKGZp
bGVEYXRhKSl9KTsKIH0KQEAgLTE4OCwxMyArMTg3LDEzIEBAIHZvaWQgU2hhcmVkQnVmZmVyOjph
cHBlbmQoY29uc3QgU2hhcmVkQnUKICAgICBBU1NFUlQoaW50ZXJuYWxseUNvbnNpc3RlbnQoKSk7
CiB9CiAKLXZvaWQgU2hhcmVkQnVmZmVyOjphcHBlbmQoY29uc3QgdWludDhfdCogZGF0YSwgc2l6
ZV90IGxlbmd0aCkKK3ZvaWQgU2hhcmVkQnVmZmVyOjphcHBlbmQoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGRhdGEpCiB7CiAgICAgQVNTRVJUKCFtX2hhc0JlZW5Db21iaW5lZEludG9PbmVTZWdtZW50
KTsKICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yOwotICAgIHZlY3Rvci5hcHBlbmQoZGF0YSwg
bGVuZ3RoKTsKLSAgICBtX3NlZ21lbnRzLmFwcGVuZCh7bV9zaXplLCBEYXRhU2VnbWVudDo6Y3Jl
YXRlKFdURk1vdmUodmVjdG9yKSl9KTsKLSAgICBtX3NpemUgKz0gbGVuZ3RoOworICAgIHZlY3Rv
ci5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5kYXRhKCkpLCBk
YXRhLnNpemUoKSk7CisgICAgbV9zZWdtZW50cy5hcHBlbmQoeyBtX3NpemUsIERhdGFTZWdtZW50
OjpjcmVhdGUoV1RGTW92ZSh2ZWN0b3IpKSB9KTsKKyAgICBtX3NpemUgKz0gZGF0YS5zaXplKCk7
CiAgICAgQVNTRVJUKGludGVybmFsbHlDb25zaXN0ZW50KCkpOwogfQogCkBAIC0yMzIsNyArMjMx
LDcgQEAgdm9pZCBTaGFyZWRCdWZmZXI6OmZvckVhY2hTZWdtZW50KGNvbnN0IAogICAgICAgICBh
cHBseShTcGFuIHsgc2VnbWVudC5zZWdtZW50LT5kYXRhKCksIHNlZ21lbnQuc2VnbWVudC0+c2l6
ZSgpIH0pOwogfQogCi1ib29sIFNoYXJlZEJ1ZmZlcjo6c3RhcnRzV2l0aChjb25zdCBTcGFuPGNv
bnN0IHVpbnQ4X3Q+JiBwcmVmaXgpIGNvbnN0Citib29sIFNoYXJlZEJ1ZmZlcjo6c3RhcnRzV2l0
aChjb25zdCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4mIHByZWZpeCkgY29uc3QKIHsKICAgICBpZiAo
cHJlZml4LmVtcHR5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjQwLDcgKzIzOSw3IEBA
IGJvb2wgU2hhcmVkQnVmZmVyOjpzdGFydHNXaXRoKGNvbnN0IFNwYW4KICAgICBpZiAoc2l6ZSgp
IDwgcHJlZml4LnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29uc3QgdWlu
dDhfdCogcHJlZml4UHRyID0gcHJlZml4LmRhdGEoKTsKKyAgICBhdXRvKiBwcmVmaXhQdHIgPSBw
cmVmaXguZGF0YSgpOwogICAgIHNpemVfdCByZW1haW5pbmcgPSBwcmVmaXguc2l6ZSgpOwogICAg
IGZvciAoYXV0byYgc2VnbWVudCA6IG1fc2VnbWVudHMpIHsKICAgICAgICAgc2l6ZV90IGFtb3Vu
dFRvQ29tcGFyZVRoaXNUaW1lID0gc3RkOjptaW4ocmVtYWluaW5nLCBzZWdtZW50LnNlZ21lbnQt
PnNpemUoKSk7CkBAIC0zMDEsOSArMzAwLDM4IEBAIGNvbnN0IHVpbnQ4X3QqIFNoYXJlZEJ1ZmZl
cjo6RGF0YVNlZ21lbnQKICNpZiBVU0UoR1NUUkVBTUVSKQogICAgICAgICBbXShjb25zdCBSZWZQ
dHI8R3N0TWFwcGVkT3duZWRCdWZmZXI+JiBkYXRhKSB7IHJldHVybiBkYXRhLT5kYXRhKCk7IH0s
CiAjZW5kaWYKLSAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRh
dGEpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmRhdGEoKSk7IH0K
KyAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuZGF0YSgpLmRhdGEoKSk7
IH0KKyAgICApOworICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIG1faW1tdXRhYmxlRGF0
YSk7Cit9CisKK1NwYW48Y29uc3Qgc3RkOjpieXRlPiBTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50
OjpieXRlcygpIGNvbnN0Cit7CisgICAgYXV0byB2aXNpdG9yID0gV1RGOjptYWtlVmlzaXRvcigK
KyAgICAgICAgW10oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKSB7CisgICAgICAgICAgICBy
ZXR1cm4gYXNCeXRlcyhTcGFuIHsgZGF0YSB9KTsKKyAgICAgICAgfSwKKyNpZiBVU0UoQ0YpCisg
ICAgICAgIFtdKGNvbnN0IFJldGFpblB0cjxDRkRhdGFSZWY+JiBkYXRhKSB7CisgICAgICAgICAg
ICByZXR1cm4gYXNCeXRlcyhkYXRhLmdldCgpKTsKKyAgICAgICAgfSwKKyNlbmRpZgorI2lmIFVT
RShHTElCKQorICAgICAgICBbXShjb25zdCBHUmVmUHRyPEdCeXRlcz4mIGRhdGEpIHsKKyAgICAg
ICAgICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4o
Z19ieXRlc19nZXRfZGF0YShkYXRhLmdldCgpLCBudWxscHRyKSksIGdfYnl0ZXNfZ2V0X3NpemUo
ZGF0YS5nZXQoKSkgfSk7CisgICAgICAgIH0sCisjZW5kaWYKKyNpZiBVU0UoR1NUUkVBTUVSKQor
ICAgICAgICBbXShjb25zdCBSZWZQdHI8R3N0TWFwcGVkT3duZWRCdWZmZXI+JiBkYXRhKSB7Cisg
ICAgICAgICAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXpl
KCkgfSk7CisgICAgICAgIH0sCisjZW5kaWYKKyAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6
TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBkYXRhLmRhdGEoKTsK
KyAgICAgICAgfQogICAgICk7CiAgICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwgbV9pbW11
dGFibGVEYXRhKTsKKwogfQogCiBib29sIFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmNvbnRh
aW5zTWFwcGVkRmlsZURhdGEoKSBjb25zdApAQCAtMzE5LDcgKzM0Nyw3IEBAIHZvaWQgU2hhcmVk
QnVmZmVyOjpoaW50TWVtb3J5Tm90TmVlZGVkU28KIAogV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2Rl
ciBTaGFyZWRCdWZmZXI6OmRlY29kZXIoKSBjb25zdAogewotICAgIHJldHVybiB7IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEoKSksIHNpemUoKSB9OworICAgIHJldHVybiB7
IGJ5dGVzKCkgfTsKIH0KIAogYm9vbCBTaGFyZWRCdWZmZXI6Om9wZXJhdG9yPT0oY29uc3QgU2hh
cmVkQnVmZmVyJiBvdGhlcikgY29uc3QKQEAgLTM4NCw3ICs0MTIsNyBAQCBzaXplX3QgU2hhcmVk
QnVmZmVyOjpEYXRhU2VnbWVudDo6c2l6ZSgpCiAjaWYgVVNFKEdTVFJFQU1FUikKICAgICAgICAg
W10oY29uc3QgUmVmUHRyPEdzdE1hcHBlZE93bmVkQnVmZmVyPiYgZGF0YSkgeyByZXR1cm4gZGF0
YS0+c2l6ZSgpOyB9LAogI2VuZGlmCi0gICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBl
ZEZpbGVEYXRhJiBkYXRhKSB7IHJldHVybiBkYXRhLnNpemUoKTsgfQorICAgICAgICBbXShjb25z
dCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeyByZXR1cm4gZGF0YS5kYXRhKCku
c2l6ZSgpOyB9CiAgICAgKTsKICAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBtX2ltbXV0
YWJsZURhdGEpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw4ICs2NywxMiBAQCBjbGFzcyBTaGFyZWRCdWZmZXJE
YXRhVmlldzsKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIFNoYXJlZEJ1ZmZlciA6IHB1YmxpYyBSZWZD
b3VudGVkPFNoYXJlZEJ1ZmZlcj4gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVm
ZmVyPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcik7IH0KLSAg
ICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNp
emVfdCBzaXplKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihkYXRhLCBzaXpl
KSk7IH0KLSAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IGNoYXIqIGRh
dGEsIHNpemVfdCBzaXplKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihkYXRh
LCBzaXplKSk7IH0KKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKFNwYW48Y29u
c3Qgc3RkOjpieXRlPiBkYXRhKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihk
YXRhKSk7IH0KKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKFNwYW48Y29uc3Qg
dWludDhfdD4gZGF0YSkgeyByZXR1cm4gY3JlYXRlKGFzQnl0ZXMoZGF0YSkpOyB9CisgICAgc3Rh
dGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShTcGFuPGNvbnN0IGNoYXI+IGRhdGEpIHsgcmV0
dXJuIGNyZWF0ZShhc0J5dGVzKGRhdGEpKTsgfQorICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVy
PiBjcmVhdGUoY29uc3Qgc3RkOjpieXRlKiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gY3Jl
YXRlKFNwYW4geyBkYXRhLCBzaXplIH0pOyB9CisgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+
IGNyZWF0ZShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gY3JlYXRl
KFNwYW4geyBkYXRhLCBzaXplIH0pOyB9CisgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNy
ZWF0ZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gY3JlYXRlKFNwYW4g
eyBkYXRhLCBzaXplIH0pOyB9CiAgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShG
aWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIG1hcHBlZEZpbGVEYXRhKSB7IHJldHVybiBhZG9w
dFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihXVEZNb3ZlKG1hcHBlZEZpbGVEYXRhKSkpOyB9CiAKICAg
ICBlbnVtIGNsYXNzIE1heVVzZUZpbGVNYXBwaW5nIDogYm9vbCB7IE5vLCBZZXMgfTsKQEAgLTEw
MSw2ICsxMDUsOCBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IEF1ZGl0IHRoZSBjYWxsIHNpdGVz
IG9mIHRoaXMgZnVuY3Rpb24gYW5kIHJlcGxhY2UgdGhlbSB3aXRoIGl0ZXJhdGlvbiBpZiBwb3Nz
aWJsZS4KICAgICBjb25zdCB1aW50OF90KiBkYXRhKCkgY29uc3Q7CiAgICAgY29uc3QgY2hhciog
ZGF0YUFzQ2hhclB0cigpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KGRhdGEoKSk7IH0KKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25zdCB7
IHJldHVybiBhc0J5dGVzKFNwYW4geyBkYXRhKCksIHNpemUoKSB9KTsgfQorCiAgICAgVmVjdG9y
PHVpbnQ4X3Q+IGNvcHlEYXRhKCkgeyByZXR1cm4geyBkYXRhKCksIHNpemUoKSB9OyB9CiAKICAg
ICAvLyBDb21iaW5lcyBhbGwgdGhlIHNlZ21lbnRzIGludG8gYSBWZWN0b3IgYW5kIHJldHVybnMg
dGhhdCB2ZWN0b3IgYWZ0ZXIgY2xlYXJpbmcgdGhlIFNoYXJlZEJ1ZmZlci4KQEAgLTExNSw4ICsx
MjEsMTIgQEAgcHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXpl
KCk7IH0KIAogICAgIHZvaWQgYXBwZW5kKGNvbnN0IFNoYXJlZEJ1ZmZlciYpOwotICAgIHZvaWQg
YXBwZW5kKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwotICAgIHZvaWQgYXBwZW5kKGNvbnN0IGNo
YXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpIHsgYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KGRhdGEpLCBsZW5ndGgpOyB9CisgICAgdm9pZCBhcHBlbmQoU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+KTsKKyAgICB2b2lkIGFwcGVuZChTcGFuPGNvbnN0IHVpbnQ4X3Q+IGRhdGEpIHsg
YXBwZW5kKGFzQnl0ZXMoZGF0YSkpOyB9CisgICAgdm9pZCBhcHBlbmQoU3Bhbjxjb25zdCBjaGFy
PiBkYXRhKSB7IGFwcGVuZChhc0J5dGVzKGRhdGEpKTsgfQorICAgIHZvaWQgYXBwZW5kKGNvbnN0
IHN0ZDo6Ynl0ZSogZGF0YSwgc2l6ZV90IGxlbmd0aCkgeyBhcHBlbmQoU3BhbiB7IGRhdGEsIGxl
bmd0aCB9KTsgfQorICAgIHZvaWQgYXBwZW5kKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBs
ZW5ndGgpIHsgYXBwZW5kKFNwYW4geyBkYXRhLCBsZW5ndGggfSk7IH0KKyAgICB2b2lkIGFwcGVu
ZChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKSB7IGFwcGVuZChTcGFuIHsgZGF0YSwg
bGVuZ3RoIH0pOyB9CiAgICAgdm9pZCBhcHBlbmQoVmVjdG9yPHVpbnQ4X3Q+JiYpOwogCiAgICAg
dm9pZCBjbGVhcigpOwpAQCAtMTMxLDYgKzE0MSw4IEBAIHB1YmxpYzoKICAgICAgICAgV0VCQ09S
RV9FWFBPUlQgY29uc3QgdWludDhfdCogZGF0YSgpIGNvbnN0OwogICAgICAgICBXRUJDT1JFX0VY
UE9SVCBzaXplX3Qgc2l6ZSgpIGNvbnN0OwogCisgICAgICAgIFdFQkNPUkVfRVhQT1JUIFNwYW48
Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAgICAgICAgIHN0YXRpYyBSZWY8RGF0
YVNlZ21lbnQ+IGNyZWF0ZShWZWN0b3I8dWludDhfdD4mJiBkYXRhKQogICAgICAgICB7CiAgICAg
ICAgICAgICBkYXRhLnNocmlua1RvRml0KCk7CkBAIC0xODcsNyArMTk5LDkgQEAgcHVibGljOgog
ICAgIH07CiAKICAgICB2b2lkIGZvckVhY2hTZWdtZW50KGNvbnN0IEZ1bmN0aW9uPHZvaWQoY29u
c3QgU3Bhbjxjb25zdCB1aW50OF90PiYpPiYpIGNvbnN0OwotICAgIGJvb2wgc3RhcnRzV2l0aChj
b25zdCBTcGFuPGNvbnN0IHVpbnQ4X3Q+JiBwcmVmaXgpIGNvbnN0OworCisgICAgYm9vbCBzdGFy
dHNXaXRoKGNvbnN0IFNwYW48Y29uc3Qgc3RkOjpieXRlPiYgcHJlZml4KSBjb25zdDsKKyAgICBi
b29sIHN0YXJ0c1dpdGgoY29uc3QgU3Bhbjxjb25zdCB1aW50OF90PiYgcHJlZml4KSBjb25zdCB7
IHJldHVybiBzdGFydHNXaXRoKGFzQnl0ZXMocHJlZml4KSk7IH0KIAogICAgIHN0cnVjdCBEYXRh
U2VnbWVudFZlY3RvckVudHJ5IHsKICAgICAgICAgc2l6ZV90IGJlZ2luUG9zaXRpb247CkBAIC0y
MTIsOCArMjI2LDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFNoYXJlZEJ1
ZmZlcigpID0gZGVmYXVsdDsKLSAgICBleHBsaWNpdCBTaGFyZWRCdWZmZXIoY29uc3QgdWludDhf
dCosIHNpemVfdCk7Ci0gICAgZXhwbGljaXQgU2hhcmVkQnVmZmVyKGNvbnN0IGNoYXIqLCBzaXpl
X3QpOworICAgIGV4cGxpY2l0IFNoYXJlZEJ1ZmZlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwog
ICAgIGV4cGxpY2l0IFNoYXJlZEJ1ZmZlcihWZWN0b3I8dWludDhfdD4mJik7CiAgICAgZXhwbGlj
aXQgU2hhcmVkQnVmZmVyKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYpOwogI2lmIFVTRShD
RikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0NBQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL2NvY29hL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgPENvcmVBdWRpby9Db3JlQXVkaW9UeXBl
cy5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
ODAsMTMgKzgxLDEzIEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAog
ewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDhfdCo+KCZtX3N0cmVhbURlc2NyaXB0aW9uKSwgc2l6ZW9mKG1fc3RyZWFtRGVzY3Jp
cHRpb24pLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJm1f
c3RyZWFtRGVzY3JpcHRpb24sIDEgfSwgMSk7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
CiBib29sIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7Ci0gICAgcmV0dXJuIGRl
Y29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZk
ZXNjcmlwdGlvbi5tX3N0cmVhbURlc2NyaXB0aW9uKSwgc2l6ZW9mKGRlc2NyaXB0aW9uLm1fc3Ry
ZWFtRGVzY3JpcHRpb24pLCAxKTsKKyAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0
aERhdGEoU3BhbiB7ICZkZXNjcmlwdGlvbi5tX3N0cmVhbURlc2NyaXB0aW9uLCAxIH0sIDEpOwog
fQogCiBpbmxpbmUgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uIHRvQ0FBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uKGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJL
ZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1l
ZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTgsMTUgKzE5OCwxMyBAQCBzdGF0aWMgUmVmPFNoYXJlZEJ1
ZmZlcj4gZXh0cmFjdEtleWlkc0ZyCiB7CiAgICAgUmVmPFNoYXJlZEJ1ZmZlcj4ga2V5SWRzID0g
U2hhcmVkQnVmZmVyOjpjcmVhdGUoKTsKIAotICAgIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWdu
ZWQ+IGtleUlkc01hcCA9IGV4dHJhY3RLZXlpZHNMb2NhdGlvbkZyb21DZW5jSW5pdERhdGEoaW5p
dERhdGEpOwotICAgIHVuc2lnbmVkIGtleUlkQ291bnQgPSBrZXlJZHNNYXAuZmlyc3Q7Ci0gICAg
dW5zaWduZWQgaW5kZXggPSBrZXlJZHNNYXAuc2Vjb25kOworICAgIGF1dG8gW2tleUlkQ291bnQs
IGluZGV4XSA9IGV4dHJhY3RLZXlpZHNMb2NhdGlvbkZyb21DZW5jSW5pdERhdGEoaW5pdERhdGEp
OwogCiAgICAgLy8gQ2hlY2sgaWYgaW5pdERhdGEgaXMgYSB2YWxpZCBDRU5DIGluaXREYXRhLgog
ICAgIGlmICgha2V5SWRDb3VudCB8fCAhaW5kZXgpCiAgICAgICAgIHJldHVybiBrZXlJZHM7CiAK
LSAgICBhdXRvKiBkYXRhID0gaW5pdERhdGEuZGF0YSgpOworICAgIGF1dG8gZGF0YSA9IGluaXRE
YXRhLmJ5dGVzKCk7CiAKICAgICBhdXRvIG9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgYXV0byBrZXlJZHNBcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKQEAgLTIxOCw3
ICsyMTYsNyBAQCBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gZXh0cmFjdEtleWlkc0ZyCiAgICAg
Ly8gImtpZHMiCiAgICAgLy8gQW4gYXJyYXkgb2Yga2V5IElEcy4gRWFjaCBlbGVtZW50IG9mIHRo
ZSBhcnJheSBpcyB0aGUgYmFzZTY0dXJsIGVuY29kaW5nIG9mIHRoZSBvY3RldCBzZXF1ZW5jZSBj
b250YWluaW5nIHRoZSBrZXkgSUQgdmFsdWUuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGtleUlkQ291bnQ7IGkrKykgewotICAgICAgICBrZXlJZHNBcnJheS0+cHVzaFN0cmluZyhiYXNl
NjRVUkxFbmNvZGVUb1N0cmluZygmZGF0YVtpbmRleF0sIENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5
dGVzKSk7CisgICAgICAgIGtleUlkc0FycmF5LT5wdXNoU3RyaW5nKGJhc2U2NFVSTEVuY29kZVRv
U3RyaW5nKGRhdGEuc3Vic3BhbihpbmRleCwgQ2xlYXJLZXk6OktleUlEU2l6ZUluQnl0ZXMpKSk7
CiAgICAgICAgIGluZGV4ICs9IENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVzOwogICAgIH0KIApA
QCAtMjQ1LDcgKzI0Myw3IEBAIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBleHRyYWN0S2V5SWRG
cm8KICAgICAvLyBUaGUgZm9ybWF0IGlzIGEgSlNPTiBvYmplY3QgY29udGFpbmluZyB0aGUgZm9s
bG93aW5nIG1lbWJlcnM6CiAgICAgLy8gImtpZHMiCiAgICAgLy8gQW4gYXJyYXkgb2Yga2V5IElE
cy4gRWFjaCBlbGVtZW50IG9mIHRoZSBhcnJheSBpcyB0aGUgYmFzZTY0dXJsIGVuY29kaW5nIG9m
IHRoZSBvY3RldCBzZXF1ZW5jZSBjb250YWluaW5nIHRoZSBrZXkgSUQgdmFsdWUuCi0gICAga2V5
SWRzQXJyYXktPnB1c2hTdHJpbmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoaW5pdERhdGEuZGF0
YSgpLCBpbml0RGF0YS5zaXplKCkpKTsKKyAgICBrZXlJZHNBcnJheS0+cHVzaFN0cmluZyhiYXNl
NjRVUkxFbmNvZGVUb1N0cmluZyhpbml0RGF0YS5ieXRlcygpKSk7CiAKICAgICBvYmplY3QtPnNl
dEFycmF5KCJraWRzIiwgV1RGTW92ZShrZXlJZHNBcnJheSkpOwogICAgIENTdHJpbmcganNvbkRh
dGEgPSBvYmplY3QtPnRvSlNPTlN0cmluZygpLnV0ZjgoKTsKQEAgLTU3OCw5ICs1NzYsOCBAQCB2
b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTCiAKICAgICAvLyBDb25zdHJ1
Y3QgdGhlIEtleVN0YXR1c1ZlY3RvciBvYmplY3QsIHJlcHJlc2VudGluZyByZWxlYXNlZCBrZXlz
LCBhbmQgdGhlIG1lc3NhZ2UgaW4gdGhlCiAgICAgLy8gJ2xpY2Vuc2UgcmVsZWFzZScgZm9ybWF0
LgotICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3IgPSBtX2tleVN0b3JlLmFsbEtl
eXNBcyhDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6UmVsZWFzZWQpOwotICAgIFJlZlB0
cjxTaGFyZWRCdWZmZXI+IG1lc3NhZ2U7Ci0gICAgeworICAgIGF1dG8ga2V5U3RhdHVzVmVjdG9y
ID0gbV9rZXlTdG9yZS5hbGxLZXlzQXMoQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlJl
bGVhc2VkKTsKKyAgICBhdXRvIG1lc3NhZ2UgPSBbJl17CiAgICAgICAgIC8vIENvbnN0cnVjdCBK
U09OIHRoYXQgcmVwcmVzZW50cyB0aGUgJ2xpY2Vuc2UgcmVsZWFzZScgZm9ybWF0LCBjcmVhdGlu
ZyBhICdraWRzJyBhcnJheQogICAgICAgICAvLyBvZiBiYXNlNjRVUkwtZW5jb2RlZCBrZXkgSURz
IGZvciBhbGwga2V5cyB0aGF0IHdlcmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2Vzc2lvbi4KICAg
ICAgICAgYXV0byByb290T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKQEAgLTU4OCw3
ICs1ODUsNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTCiAgICAg
ICAgICAgICBhdXRvIGFycmF5ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICAgICAg
Zm9yIChjb25zdCBhdXRvJiBrZXkgOiBtX2tleVN0b3JlKSB7CiAgICAgICAgICAgICAgICAgQVNT
RVJUKGtleS0+aWQoKS5zaXplKCkgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1h
eCgpKTsKLSAgICAgICAgICAgICAgICBhcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVU
b1N0cmluZyhrZXktPmlkKCkuZGF0YSgpLCBrZXktPmlkKCkuc2l6ZSgpKSk7CisgICAgICAgICAg
ICAgICAgYXJyYXktPnB1c2hTdHJpbmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoa2V5LT5pZCgp
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByb290T2JqZWN0LT5zZXRBcnJheSgia2lk
cyIsIFdURk1vdmUoYXJyYXkpKTsKICAgICAgICAgfQpAQCAtNTk2LDExICs1OTMsMTEgQEAgdm9p
ZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlUwogICAgICAgICAvLyBDb3B5IHRo
ZSBKU09OIGRhdGEgaW50byBhIFNoYXJlZEJ1ZmZlciBvYmplY3QuCiAgICAgICAgIFN0cmluZyBt
ZXNzYWdlU3RyaW5nID0gcm9vdE9iamVjdC0+dG9KU09OU3RyaW5nKCk7CiAgICAgICAgIENTdHJp
bmcgbWVzc2FnZUNTdHJpbmcgPSBtZXNzYWdlU3RyaW5nLnV0ZjgoKTsKLSAgICAgICAgbWVzc2Fn
ZSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKG1lc3NhZ2VDU3RyaW5nLmRhdGEoKSwgbWVzc2FnZUNT
dHJpbmcubGVuZ3RoKCkpOwotICAgIH0KKyAgICAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3Jl
YXRlKG1lc3NhZ2VDU3RyaW5nLmRhdGEoKSwgbWVzc2FnZUNTdHJpbmcubGVuZ3RoKCkpOworICAg
IH0oKTsKIAogICAgIG1fa2V5U3RvcmUucmVtb3ZlQWxsS2V5cygpOwotICAgIGRpc3BhdGNoQ2Fs
bGJhY2soV1RGTW92ZShrZXlTdGF0dXNWZWN0b3IpLCBSZWY8U2hhcmVkQnVmZmVyPigqbWVzc2Fn
ZSksIFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVkKTsKKyAgICBkaXNwYXRjaENhbGxiYWNrKFdURk1v
dmUoa2V5U3RhdHVzVmVjdG9yKSwgV1RGTW92ZShtZXNzYWdlKSwgU3VjY2Vzc1ZhbHVlOjpTdWNj
ZWVkZWQpOwogfQogCiB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpzdG9yZVJlY29y
ZE9mS2V5VXNhZ2UoY29uc3QgU3RyaW5nJikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dlbmVyaWMvS2V5ZWREZWNvZGVyR2VuZXJpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9LZXllZERlY29kZXJHZW5lcmljLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9LZXllZERlY29kZXJH
ZW5lcmljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBzdGF0aWMgc3RkOjpv
cHRpb25hbDxTdHJpbmc+IHJlYWRTdHJpbmcoCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygp
OwogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcihzaXplLnZhbHVlKCkpOwotICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLmRhdGEoKSwgc2l6ZS52YWx1ZSgp
KSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBidWZmZXIg
fSkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgYXV0byByZXN1bHQgPSBTdHJp
bmc6OmZyb21VVEY4KGJ1ZmZlci5kYXRhKCksIHNpemUudmFsdWUoKSk7CiAgICAgaWYgKHJlc3Vs
dC5pc051bGwoKSkKQEAgLTg4LDcgKzg4LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEtleWVkRGVjb2Rl
cj4gS2V5ZWREZWNvZAogCiBLZXllZERlY29kZXJHZW5lcmljOjpLZXllZERlY29kZXJHZW5lcmlj
KGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQogewotICAgIFdURjo6UGVyc2lzdGVu
Y2U6OkRlY29kZXIgZGVjb2RlcihkYXRhLCBzaXplKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpE
ZWNvZGVyIGRlY29kZXIoU3BhbiB7IGRhdGEsIHNpemUgfSk7CiAKICAgICBtX3Jvb3REaWN0aW9u
YXJ5ID0gbWFrZVVuaXF1ZTxEaWN0aW9uYXJ5PigpOwogICAgIG1fZGljdGlvbmFyeVN0YWNrLmFw
cGVuZChtX3Jvb3REaWN0aW9uYXJ5LmdldCgpKTsKQEAgLTExNyw3ICsxMTcsNyBAQCBLZXllZERl
Y29kZXJHZW5lcmljOjpLZXllZERlY29kZXJHZW5lcmljCiAgICAgICAgICAgICBpZiAoIW9rKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZl
cigqc2l6ZSk7Ci0gICAgICAgICAgICBvayA9IGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KGJ1ZmZlci5kYXRhKCksICpzaXplKTsKKyAgICAgICAgICAgIG9rID0gZGVjb2Rlci5kZWNvZGVG
aXhlZExlbmd0aERhdGEoU3BhbiB7IGJ1ZmZlciB9KTsKICAgICAgICAgICAgIGlmICghb2spCiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBtX2RpY3Rpb25hcnlTdGFjay5sYXN0
KCktPmFkZCgqa2V5LCBXVEZNb3ZlKGJ1ZmZlcikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTW9kZWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Nb2RlbC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Nb2RlbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3
IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIE1vZGVsOjplbmNvZGUoRW5jb2RlciYg
ZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHNpemVfdD4obV9k
YXRhLT5zaXplKCkpOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKG1fZGF0YS0+
ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEobV9kYXRhLT5ieXRlcygpLCAxKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4K
QEAgLTc0LDcgKzc0LDcgQEAgUmVmUHRyPE1vZGVsPiBNb2RlbDo6ZGVjb2RlKERlY29kZXImIGRl
YwogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CiAgICAgZGF0YS5ncm93KCpsZW5ndGgpOwot
ICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoZGF0YS5kYXRhKCksIGRhdGEu
c2l6ZSgpLCAxKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGRhdGEs
IDEpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBNb2RlbDo6Y3JlYXRl
KFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoZGF0YSkpKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuaAkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IFBpeGVsQnVmZmVyCiAKICAgICBlbmNvZGVyIDw8IG1fZm9ybWF0OwogICAgIGVuY29kZXIgPDwg
bV9zaXplOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKG1fZGF0YS0+ZGF0YSgp
LCBtX2RhdGEtPmJ5dGVMZW5ndGgoKSwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEobV9kYXRhLT5ieXRlcygpLCAxKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gUGl4ZWxCdWZmZXI6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQpAQCAtMTEzLDcgKzExMyw3IEBAIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0ZDo6
b3B0aW9uYWw8UGkKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKIAotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVzdWx0LT5tX2Rh
dGEtPmRhdGEoKSwgcmVzdWx0LT5tX2RhdGEtPmJ5dGVMZW5ndGgoKSwgMSkpCisgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZXN1bHQtPm1fZGF0YS0+d3JpdGFibGVCeXRl
cygpLCAxKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgIHJldHVybiByZXN1
bHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1J
bnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5z
dGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQzLDYg
KzQzLDcgQEAKICNpbXBvcnQgPHd0Zi9GaWxlU3lzdGVtLmg+CiAjaW1wb3J0IDx3dGYvSlNPTlZh
bHVlcy5oPgogI2ltcG9ydCA8d3RmL0xvZ2dlckhlbHBlci5oPgorI2ltcG9ydCA8d3RmL2NvY29h
L1NwYW5Db2NvYS5oPgogI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0
IDx3dGYvdGV4dC9CYXNlNjQuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KQEAg
LTcxNSw3ICs3MTYsNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5n
CiAgICAgICAgIGlkZW50aWZpZXIgPSBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRo
RGF0YTppbml0RGF0YS0+Y3JlYXRlTlNEYXRhKCkuZ2V0KCkgZW5jb2Rpbmc6TlNVVEY4U3RyaW5n
RW5jb2RpbmddKTsKICNpZiBIQVZFKEZBSVJQTEFZU1RSRUFNSU5HX0NFTkNfSU5JVERBVEEpCiAg
ICAgZWxzZSBpZiAoaW5pdERhdGFUeXBlID09IEluaXREYXRhUmVnaXN0cnk6OmNlbmNOYW1lKCkp
IHsKLSAgICAgICAgYXV0byBwc3NoU3RyaW5nID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5pdERh
dGEtPmRhdGEoKSwgaW5pdERhdGEtPnNpemUoKSk7CisgICAgICAgIGF1dG8gcHNzaFN0cmluZyA9
IGJhc2U2NEVuY29kZVRvU3RyaW5nKGluaXREYXRhLT5ieXRlcygpKTsKICAgICAgICAgaW5pdGlh
bGl6YXRpb25EYXRhID0gW05TSlNPTlNlcmlhbGl6YXRpb24gZGF0YVdpdGhKU09OT2JqZWN0OkB7
IEAicHNzaCI6IChOU1N0cmluZyopcHNzaFN0cmluZyB9IG9wdGlvbnM6TlNKU09OV3JpdGluZ1By
ZXR0eVByaW50ZWQgZXJyb3I6bmlsXTsKICAgICB9CiAjZW5kaWYKQEAgLTExOTEsMTIgKzExOTIs
MTAgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZwogICAgICAgICB9
CiAKICAgICAgICAgYXV0byByZXF1ZXN0SlNPTiA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKLSAg
ICAgICAgZm9yIChhdXRvJiByZXF1ZXN0RGF0YSA6IHJlcXVlc3RzRGF0YSkgeworICAgICAgICBm
b3IgKGF1dG8mIFtrZXlJRCwgcGF5bG9hZF0gOiByZXF1ZXN0c0RhdGEpIHsKICAgICAgICAgICAg
IGF1dG8gZW50cnkgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICAgICAgYXV0byYg
a2V5SUQgPSByZXF1ZXN0RGF0YS5maXJzdDsKLSAgICAgICAgICAgIGF1dG8mIHBheWxvYWQgPSBy
ZXF1ZXN0RGF0YS5zZWNvbmQ7Ci0gICAgICAgICAgICBlbnRyeS0+c2V0U3RyaW5nKCJrZXlJRCIs
IGJhc2U2NEVuY29kZVRvU3RyaW5nKGtleUlELT5kYXRhKCksIGtleUlELT5zaXplKCkpKTsKLSAg
ICAgICAgICAgIGVudHJ5LT5zZXRTdHJpbmcoInBheWxvYWQiLCBiYXNlNjRFbmNvZGVUb1N0cmlu
ZyhwYXlsb2FkLmdldCgpLmJ5dGVzLCBwYXlsb2FkLmdldCgpLmxlbmd0aCkpOworICAgICAgICAg
ICAgZW50cnktPnNldFN0cmluZygia2V5SUQiLCBiYXNlNjRFbmNvZGVUb1N0cmluZyhrZXlJRC0+
Ynl0ZXMoKSkpOworICAgICAgICAgICAgZW50cnktPnNldFN0cmluZygicGF5bG9hZCIsIGJhc2U2
NEVuY29kZVRvU3RyaW5nKGFzQnl0ZXMocGF5bG9hZC5nZXQoKSkpKTsKICAgICAgICAgICAgIHJl
cXVlc3RKU09OLT5wdXNoT2JqZWN0KFdURk1vdmUoZW50cnkpKTsKICAgICAgICAgfQogICAgICAg
ICBhdXRvIHJlcXVlc3RCdWZmZXIgPSB1dGY4QnVmZmVyKHJlcXVlc3RKU09OLT50b0pTT05TdHJp
bmcoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw3ICsxMzIsNyBA
QCBTdHJpbmcgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YVVSCiAgICAgaWYgKGVuY29k
ZWRJbWFnZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAiZGF0YTosIjsKIAotICAgIHJldHVy
biBtYWtlU3RyaW5nKCJkYXRhOiIsIG1pbWVUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVk
KGVuY29kZWRJbWFnZS5kYXRhKCksIGVuY29kZWRJbWFnZS5zaXplKCkpKTsKKyAgICByZXR1cm4g
bWFrZVN0cmluZygiZGF0YToiLCBtaW1lVHlwZSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChl
bmNvZGVkSW1hZ2UpKTsKIH0KIAogVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+
IHF1YWxpdHkpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCShyZXZp
c2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBA
QCBzdGF0aWMgU3RyaW5nIGNyZWF0ZVVuaXF1ZUZvbnROYW1lKCkKICAgICBHVUlEIGZvbnRVdWlk
OwogICAgIENvQ3JlYXRlR3VpZCgmZm9udFV1aWQpOwogCi0gICAgYXV0byBmb250TmFtZSA9IGJh
c2U2NEVuY29kZVRvU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZmb250VXVpZCksIHNp
emVvZihmb250VXVpZCkpOworICAgIGF1dG8gZm9udE5hbWUgPSBiYXNlNjRFbmNvZGVUb1N0cmlu
ZyhTcGFuIHsgJmZvbnRVdWlkLCAxIH0pOwogICAgIEFTU0VSVChmb250TmFtZS5sZW5ndGgoKSA8
IExGX0ZBQ0VTSVpFKTsKICAgICByZXR1cm4gZm9udE5hbWU7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWly
by5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIFN0cmluZyBjcmVh
dGVVbmlxdWVGb250TmFtZSgpCiAgICAgR1VJRCBmb250VXVpZDsKICAgICBDb0NyZWF0ZUd1aWQo
JmZvbnRVdWlkKTsKIAotICAgIGF1dG8gZm9udE5hbWUgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhy
ZWludGVycHJldF9jYXN0PGNoYXIqPigmZm9udFV1aWQpLCBzaXplb2YoZm9udFV1aWQpKTsKKyAg
ICBhdXRvIGZvbnROYW1lID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoU3BhbiB7ICZmb250VXVpZCwg
MSB9KTsKICAgICBBU1NFUlQoZm9udE5hbWUubGVuZ3RoKCkgPCBMRl9GQUNFU0laRSk7CiAgICAg
cmV0dXJuIGZvbnROYW1lOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NT
TEtleUdlbmVyYXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvU1NMS2V5R2VuZXJhdG9yTWFjLm1tCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvU1NMS2V5R2VuZXJhdG9yTWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yMTksNyArMjE5LDcgQEAgc3RhdGljIFN0cmluZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFs
bGVuZwogICAgIGlmIChTZWNBc24xRW5jb2RlSXRlbShjb2RlciwgJnNpZ25lZFB1YmxpY0tleUFu
ZENoYWxsZW5nZSwgc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlVGVtcGxhdGUsICZlbmNvZGVk
U2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlKSAhPSBub0VycikKICAgICAgICAgcmV0dXJuIFN0
cmluZygpOwogCi0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGVuY29kZWRTaWduZWRQ
dWJsaWNLZXlBbmRDaGFsbGVuZ2UuRGF0YSwgZW5jb2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxs
ZW5nZS5MZW5ndGgpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgZW5j
b2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZS5EYXRhLCBlbmNvZGVkU2lnbmVkUHVibGlj
S2V5QW5kQ2hhbGxlbmdlLkxlbmd0aCB9KTsKIH0KIAogQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJB
VElPTlNfRU5ECkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFs
dGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcy5o
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9SZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEx
NCwxNiArMTE0LDE2IEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBD
YXBhYmlsaXR5VmFsdWVPclJhbmdlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsK
LSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPigmbV9taW5PclZhbHVlKSwgc2l6ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZh
bHVlVW5pb24pKTsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmbV9tYXgpLCBzaXplb2YoVmFsdWVVbmlvbiksIGFsaWdu
b2YoVmFsdWVVbmlvbikpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4g
eyAmbV9taW5PclZhbHVlLCAxIH0sIGFsaWdub2YoVmFsdWVVbmlvbikpOworICAgIGVuY29kZXIu
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmbV9tYXgsIDEgfSwgYWxpZ25vZihWYWx1ZVVu
aW9uKSk7CiAgICAgZW5jb2RlciA8PCBtX3R5cGU7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+CiBib29sIENhcGFiaWxpdHlWYWx1ZU9yUmFuZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
LCBDYXBhYmlsaXR5VmFsdWVPclJhbmdlJiB2YWx1ZU9yUmFuZ2UpCiB7Ci0gICAgcmV0dXJuIGRl
Y29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2
YWx1ZU9yUmFuZ2UubV9taW5PclZhbHVlKSwgc2l6ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZh
bHVlVW5pb24pKQotICAgICAgICAmJiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWlu
dGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWVPclJhbmdlLm1fbWF4KSwgc2l6ZW9mKFZhbHVl
VW5pb24pLCBhbGlnbm9mKFZhbHVlVW5pb24pKQorICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZp
eGVkTGVuZ3RoRGF0YShTcGFuIHsgJnZhbHVlT3JSYW5nZS5tX21pbk9yVmFsdWUsIDEgfSwgYWxp
Z25vZihWYWx1ZVVuaW9uKSkKKyAgICAgICAgJiYgZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERh
dGEoU3BhbiB7ICZ2YWx1ZU9yUmFuZ2UubV9tYXgsIDEgfSwgYWxpZ25vZihWYWx1ZVVuaW9uKSkK
ICAgICAgICAgJiYgZGVjb2Rlci5kZWNvZGUodmFsdWVPclJhbmdlLm1fdHlwZSk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3Vy
Y2VDZW50ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDEzICsxMzksMTMgQEAgc3RhdGljIHZv
aWQgYWRkU3RyaW5nVG9TSEExKFNIQTEmIHNoYTEsIAogCiAgICAgaWYgKHN0cmluZy5pczhCaXQo
KSAmJiBzdHJpbmcuaXNBbGxBU0NJSSgpKSB7CiAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbnVsbEJ5
dGUgPSAwOwotICAgICAgICBzaGExLmFkZEJ5dGVzKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJp
bmcubGVuZ3RoKCkpOwotICAgICAgICBzaGExLmFkZEJ5dGVzKCZudWxsQnl0ZSwgMSk7CisgICAg
ICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVu
Z3RoKCkgfSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZudWxsQnl0ZSwgMSB9KTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGF1dG8gdXRmOCA9IHN0cmluZy51dGY4KCk7
Ci0gICAgc2hhMS5hZGRCeXRlcyh1dGY4LmRhdGFBc1VJbnQ4UHRyKCksIHV0ZjgubGVuZ3RoKCkg
KyAxKTsgLy8gSW5jbHVkZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUuCisgICAgc2hhMS5hZGRCeXRl
cyhTcGFuIHsgdXRmOC5kYXRhQXNVSW50OFB0cigpLCB1dGY4Lmxlbmd0aCgpICsgMSB9KTsgLy8g
SW5jbHVkZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUuCiB9CiAKIFN0cmluZyBSZWFsdGltZU1lZGlh
U291cmNlQ2VudGVyOjpoYXNoU3RyaW5nV2l0aFNhbHQoY29uc3QgU3RyaW5nJiBpZCwgY29uc3Qg
U3RyaW5nJiBoYXNoU2FsdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Q3JlZGVudGlhbEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxCYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTcsOCArOTcsOSBAQCBib29sIENyZWRlbnRpYWxCYXNlOjpjb21wYXJlKGNvbnN0IENy
ZWRlCiAKIFN0cmluZyBDcmVkZW50aWFsQmFzZTo6c2VyaWFsaXphdGlvbkZvckJhc2ljQXV0aG9y
aXphdGlvbkhlYWRlcigpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6IEFkZCBtYWtlU3RyaW5nIHZh
cmlhbnQgdGhhdCBjcmVhdGVzIGEgdXRmOCBidWZmZXIgZGlyZWN0bHkuCiAgICAgYXV0byBjcmVk
ZW50aWFsU3RyaW5nRGF0YSA9IG1ha2VTdHJpbmcobV91c2VyLCAnOicsIG1fcGFzc3dvcmQpLnV0
ZjgoKTsKLSAgICByZXR1cm4gbWFrZVN0cmluZygiQmFzaWMgIiwgYmFzZTY0RW5jb2RlZChjcmVk
ZW50aWFsU3RyaW5nRGF0YSkpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCJCYXNpYyAiLCBiYXNl
NjRFbmNvZGVkKGNyZWRlbnRpYWxTdHJpbmdEYXRhLmJ5dGVzKCkpKTsKIH0KIAogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0
aWZpY2F0ZUluZm9DRk5ldC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY2YvQ2VydGlmaWNhdGVJbmZvQ0ZOZXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMTAsNyArMjEwLDcgQEAgc3RhdGljIHZvaWQgZW5jb2RlQ0ZEYXRhKEVuY29kZXIm
IGVuY29kZQogICAgIGNvbnN0IHVpbnQ4X3QqIGJ5dGVQdHIgPSBDRkRhdGFHZXRCeXRlUHRyKGRh
dGEpOwogCiAgICAgZW5jb2RlciA8PCBsZW5ndGg7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoYnl0ZVB0ciwgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpKTsKKyAgICBlbmNv
ZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgYnl0ZVB0ciwgc3RhdGljX2Nhc3Q8c2l6
ZV90PihsZW5ndGgpIH0pOwogfQogCiBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXRhaW5QdHI8Q0ZE
YXRhUmVmPj4gZGVjb2RlQ0ZEYXRhKERlY29kZXImIGRlY29kZXIpCkBAIC0yMjUsNyArMjI1LDcg
QEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0YWluUHRyPENGRGF0YVJlZgogICAgIGlmICghcG9p
bnRlcikKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHJldHVybiBhZG9wdENG
KENGRGF0YUNyZWF0ZShudWxscHRyLCBwb2ludGVyLCAqc2l6ZSkpOworICAgIHJldHVybiBhZG9w
dENGKENGRGF0YUNyZWF0ZShudWxscHRyLCByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3Qq
Pihwb2ludGVyKSwgKnNpemUpKTsKIH0KIAogI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJ
T04pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ2VydGlmaWNh
dGVJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL0NlcnRpZmljYXRlSW5mby5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ2VydGlmaWNhdGVJbmZvLmgJKHdvcmtpbmcgY29weSkK
QEAgLTc1LDcgKzc1LDcgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8R1JlZlB0cjxHQnl0ZUFy
cgogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyICZlbmNvZGVyLCBjb25zdCBHUmVmUHRy
PEdCeXRlQXJyYXk+JiBieXRlQXJyYXkpCiAgICAgewogICAgICAgICBlbmNvZGVyIDw8IHN0YXRp
Y19jYXN0PHVpbnQzMl90PihieXRlQXJyYXktPmxlbik7Ci0gICAgICAgIGVuY29kZXIuZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKGJ5dGVBcnJheS0+ZGF0YSwgYnl0ZUFycmF5LT5sZW4pOworICAgICAg
ICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgYnl0ZUFycmF5LT5kYXRhLCBi
eXRlQXJyYXktPmxlbiB9KTsKICAgICB9CiAKICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxHUmVm
UHRyPEdCeXRlQXJyYXk+PiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKQEAgLTg3LDcgKzg3LDcg
QEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8R1JlZlB0cjxHQnl0ZUFycgogCiAgICAgICAgIEdS
ZWZQdHI8R0J5dGVBcnJheT4gYnl0ZUFycmF5ID0gYWRvcHRHUmVmKGdfYnl0ZV9hcnJheV9zaXpl
ZF9uZXcoKnNpemUpKTsKICAgICAgICAgZ19ieXRlX2FycmF5X3NldF9zaXplKGJ5dGVBcnJheS5n
ZXQoKSwgKnNpemUpOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KGJ5dGVBcnJheS0+ZGF0YSwgKnNpemUpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4
ZWRMZW5ndGhEYXRhKFNwYW4geyBieXRlQXJyYXktPmRhdGEsICpzaXplIH0pKQogICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAgICAgcmV0dXJuIGJ5dGVBcnJheTsKICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50
LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NR
TGl0ZVN0YXRlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgYm9vbCBT
UUxpdGVTdGF0ZW1lbnQ6OmV4ZWN1dGVDb21tYW5kKCkKICAgICByZXR1cm4gc3RlcCgpID09IFNR
TElURV9ET05FOwogfQogCi1pbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kQmxvYihpbnQgaW5kZXgs
IFNwYW48Y29uc3QgdWludDhfdD4gYmxvYikKK2ludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9i
KGludCBpbmRleCwgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGJsb2IpCiB7CiAgICAgQVNTRVJUKGlu
ZGV4ID4gMCk7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPD0gYmlu
ZFBhcmFtZXRlckNvdW50KCkpOwpAQCAtOTUsNiArOTUsMTEgQEAgaW50IFNRTGl0ZVN0YXRlbWVu
dDo6YmluZEJsb2IoaW50IGluZGV4LAogICAgIHJldHVybiBzcWxpdGUzX2JpbmRfYmxvYihtX3N0
YXRlbWVudCwgaW5kZXgsIGJsb2IuZGF0YSgpLCBibG9iLnNpemUoKSwgU1FMSVRFX1RSQU5TSUVO
VCk7CiB9CiAKK2ludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgU3Bhbjxj
b25zdCB1aW50OF90PiBibG9iKQoreworICAgIHJldHVybiBiaW5kQmxvYihpbmRleCwgYXNCeXRl
cyhibG9iKSk7Cit9CisKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwg
Y29uc3QgU3RyaW5nJiB0ZXh0KQogewogICAgIC8vIFN0cmluZzo6Y2hhcmFjdGVycygpIHJldHVy
bnMgMCBmb3IgdGhlIGVtcHR5IHN0cmluZywgd2hpY2ggU1FMaXRlCkBAIC0xMDcsNyArMTEyLDcg
QEAgaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IoaW50IGluZGV4LAogICAgIGVsc2UKICAg
ICAgICAgY2hhcmFjdGVycyA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKIAotICAgIHJldHVybiBi
aW5kQmxvYihpbmRleCwgU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGNo
YXJhY3RlcnMpLCB0ZXh0Lmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSB9KTsKKyAgICByZXR1cm4g
YmluZEJsb2IoaW5kZXgsIFNwYW4geyByZWludGVycHJldF9jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+
KGNoYXJhY3RlcnMpLCB0ZXh0Lmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSB9KTsKIH0KIAogaW50
IFNRTGl0ZVN0YXRlbWVudDo6YmluZFRleHQoaW50IGluZGV4LCBTdHJpbmdWaWV3IHRleHQpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3Rh
dGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAgcHVibGljOgogICAgIFdF
QkNPUkVfRVhQT1JUIH5TUUxpdGVTdGF0ZW1lbnQoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBTUUxp
dGVTdGF0ZW1lbnQoU1FMaXRlU3RhdGVtZW50JiYpOwogICAgIAorICAgIFdFQkNPUkVfRVhQT1JU
IGludCBiaW5kQmxvYihpbnQgaW5kZXgsIFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgV0VC
Q09SRV9FWFBPUlQgaW50IGJpbmRCbG9iKGludCBpbmRleCwgU3Bhbjxjb25zdCB1aW50OF90Pik7
CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJpbmRCbG9iKGludCBpbmRleCwgY29uc3QgU3RyaW5n
Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJpbmRUZXh0KGludCBpbmRleCwgU3RyaW5nVmll
dyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmlu
dGFibGUuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1F1b3RlZFByaW50YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDEyICs1NSw3IEBA
IHN0YXRpYyBzaXplX3QgbGVuZ3RoT2ZMaW5lRW5kaW5nQXRJbmRleCgKICAgICByZXR1cm4gMDsK
IH0KIAotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCBWZWN0b3I8
dWludDhfdD4mIGlucHV0KQotewotICAgIHJldHVybiBxdW90ZWRQcmludGFibGVFbmNvZGUoaW5w
dXQuZGF0YSgpLCBpbnB1dC5zaXplKCkpOwotfQotCi1WZWN0b3I8dWludDhfdD4gcXVvdGVkUHJp
bnRhYmxlRW5jb2RlKGNvbnN0IHVpbnQ4X3QqIGlucHV0LCBzaXplX3QgaW5wdXRMZW5ndGgpCitz
dGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCB1aW50OF90
KiBpbnB1dCwgc2l6ZV90IGlucHV0TGVuZ3RoKQogewogICAgIFZlY3Rvcjx1aW50OF90PiBvdXQ7
CiAgICAgb3V0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoaW5wdXRMZW5ndGgpOwpAQCAtMTE2LDEy
ICsxMTEsMTIgQEAgVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjbwogICAg
IHJldHVybiBvdXQ7CiB9CiAKLVZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUo
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmlu
dGFibGVFbmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQogewotICAgIHJldHVybiBx
dW90ZWRQcmludGFibGVEZWNvZGUoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkpOworICAgIHJl
dHVybiBxdW90ZWRQcmludGFibGVFbmNvZGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpKTsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+IHF1
b3RlZFByaW50YWJsZURlY29kZShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0
aCkKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0IHVp
bnQ4X3QqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3RoKQogewogICAgIFZlY3Rvcjx1aW50OF90PiBv
dXQ7CiAgICAgaWYgKCFkYXRhTGVuZ3RoKQpAQCAtMTU2LDQgKzE1MSw5IEBAIFZlY3Rvcjx1aW50
OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY28KICAgICByZXR1cm4gb3V0OwogfQogCitWZWN0
b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBp
bnB1dCkKK3sKKyAgICByZXR1cm4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KGlucHV0LmRhdGEoKSksIGlucHV0LnNpemUoKSk7Cit9CisKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVvdGVkUHJpbnRhYmxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUu
aAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90
ZWRQcmludGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTMgKzMxLDExIEBACiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1WZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxl
RW5jb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOwotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFBy
aW50YWJsZUVuY29kZShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKLQotVmVjdG9yPHVpbnQ4X3Q+
IHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mKTsKLVZlY3Rvcjx1
aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgdWludDhfdCosIHNpemVfdCk7CitW
ZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRl
Pik7CitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKFNwYW48Y29uc3Qgc3Rk
OjpieXRlPik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjUxLDcgKzI1MSw3IEBAIHN0ZDo6b3B0aW9uYWw8UGFzdGVib2FyZEN1c3RvbURh
dGE+IFBhc3QKICAgICAgICAgaWYgKEhBTkRMRSBjYkRhdGEgPSA6OkdldENsaXBib2FyZERhdGEo
Q3VzdG9tRGF0YUNsaXBib2FyZEZvcm1hdCkpIHsKICAgICAgICAgICAgIHNpemVfdCBzaXplID0g
R2xvYmFsU2l6ZShjYkRhdGEpOwogICAgICAgICAgICAgYXV0byBkYXRhID0gc3RhdGljX2Nhc3Q8
dWludDhfdCo+KEdsb2JhbExvY2soY2JEYXRhKSk7Ci0gICAgICAgICAgICBhdXRvIGN1c3RvbURh
dGEgPSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6ZnJvbVBlcnNpc3RlbmNlRGVjb2Rlcih7ZGF0YSwg
c2l6ZX0pOworICAgICAgICAgICAgYXV0byBjdXN0b21EYXRhID0gUGFzdGVib2FyZEN1c3RvbURh
dGE6OmZyb21QZXJzaXN0ZW5jZURlY29kZXIoU3BhbiB7IGRhdGEsIHNpemUgfSk7CiAKICAgICAg
ICAgICAgIEdsb2JhbFVubG9jayhjYkRhdGEpOwogICAgICAgICAgICAgOjpDbG9zZUNsaXBib2Fy
ZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3Ry
YXRpb25EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9z
ZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0
YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTksMTAgKzQ1OSwxMCBAQCBib29sIFJlZ2lz
dHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2VzCiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0
ZW1lbnQtPmJpbmRUZXh0KDYsIHVwZGF0ZVZpYUNhY2hlVG9TdHJpbmcoZGF0YS5yZWdpc3RyYXRp
b24udXBkYXRlVmlhQ2FjaGUpKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAgIHx8IGluc2VydFN0
YXRlbWVudC0+YmluZFRleHQoNywgZGF0YS5zY3JpcHRVUkwuc3RyaW5nKCkpICE9IFNRTElURV9P
SwogICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCg4LCB3b3JrZXJUeXBl
VG9TdHJpbmcoZGF0YS53b3JrZXJUeXBlKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBp
bnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDksIFNwYW4geyBjc3BFbmNvZGVyLmJ1ZmZlcigpLCBj
c3BFbmNvZGVyLmJ1ZmZlclNpemUoKSB9KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGlu
c2VydFN0YXRlbWVudC0+YmluZEJsb2IoOSwgY3NwRW5jb2Rlci5idWZmZXIoKSkgIT0gU1FMSVRF
X09LCiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDEwLCBkYXRhLnJl
ZmVycmVyUG9saWN5KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVu
dC0+YmluZEJsb2IoMTEsIFNwYW4geyBzY3JpcHRSZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVyKCks
IHNjcmlwdFJlc291cmNlTWFwRW5jb2Rlci5idWZmZXJTaXplKCkgfSkgIT0gU1FMSVRFX09LCi0g
ICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDEyLCBTcGFuIHsgY2VydGlm
aWNhdGVJbmZvRW5jb2Rlci5idWZmZXIoKSwgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXJT
aXplKCkgfSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJp
bmRCbG9iKDExLCBzY3JpcHRSZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVyKCkpICE9IFNRTElURV9P
SworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kQmxvYigxMiwgY2VydGlmaWNh
dGVJbmZvRW5jb2Rlci5idWZmZXIoKSkgIT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8fCBpbnNl
cnRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIkZhaWxlZCB0byBzdG9yZSByZWdpc3RyYXRpb24g
ZGF0YSBpbnRvIHJlY29yZHMgdGFibGUgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9y
KCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTUxNyw3ICs1MTcsNyBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9y
dFJlY29yCiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9u
c2VIZWFkZXJzPiBjb250ZW50U2VjdXJpdHlQb2xpY3k7CiAgICAgICAgIGF1dG8gY29udGVudFNl
Y3VyaXR5UG9saWN5RGF0YVNwYW4gPSBzcWwtPmNvbHVtbkJsb2JBc1NwYW4oOCk7CiAgICAgICAg
IGlmIChjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhU3Bhbi5zaXplKCkpIHsKLSAgICAgICAgICAg
IFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgY3NwRGVjb2Rlcihjb250ZW50U2VjdXJpdHlQb2xp
Y3lEYXRhU3Bhbi5kYXRhKCksIGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGFTcGFuLnNpemUoKSk7
CisgICAgICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGNzcERlY29kZXIgeyBjb250
ZW50U2VjdXJpdHlQb2xpY3lEYXRhU3BhbiB9OwogICAgICAgICAgICAgY3NwRGVjb2RlciA+PiBj
b250ZW50U2VjdXJpdHlQb2xpY3k7CiAgICAgICAgICAgICBpZiAoIWNvbnRlbnRTZWN1cml0eVBv
bGljeSkgewogICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIs
ICJSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3JkczogRmFpbGVkIHRvIGRlY29kZSBj
b250ZW50U2VjdXJpdHlQb2xpY3kiKTsKQEAgLTUzMCw3ICs1MzAsNyBAQCBTdHJpbmcgUmVnaXN0
cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yCiAgICAgICAgIEhhc2hNYXA8VVJMLCBTZXJ2aWNl
V29ya2VyQ29udGV4dERhdGE6OkltcG9ydGVkU2NyaXB0PiBzY3JpcHRSZXNvdXJjZU1hcDsKICAg
ICAgICAgYXV0byBzY3JpcHRSZXNvdXJjZU1hcERhdGFTcGFuID0gc3FsLT5jb2x1bW5CbG9iQXNT
cGFuKDEwKTsKICAgICAgICAgaWYgKHNjcmlwdFJlc291cmNlTWFwRGF0YVNwYW4uc2l6ZSgpKSB7
Ci0gICAgICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIHNjcmlwdFJlc291cmNlTWFw
RGVjb2RlcihzY3JpcHRSZXNvdXJjZU1hcERhdGFTcGFuLmRhdGEoKSwgc2NyaXB0UmVzb3VyY2VN
YXBEYXRhU3Bhbi5zaXplKCkpOworICAgICAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2Rl
ciBzY3JpcHRSZXNvdXJjZU1hcERlY29kZXIgeyBzY3JpcHRSZXNvdXJjZU1hcERhdGFTcGFuIH07
CiAgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPEhhc2hNYXA8VVJMLCBJbXBvcnRlZFNjcmlwdEF0
dHJpYnV0ZXM+PiBzY3JpcHRSZXNvdXJjZU1hcFdpdGhvdXRTY3JpcHRzOwogICAgICAgICAgICAg
c2NyaXB0UmVzb3VyY2VNYXBEZWNvZGVyID4+IHNjcmlwdFJlc291cmNlTWFwV2l0aG91dFNjcmlw
dHM7CiAgICAgICAgICAgICBpZiAoIXNjcmlwdFJlc291cmNlTWFwV2l0aG91dFNjcmlwdHMpIHsK
QEAgLTU0Myw3ICs1NDMsNyBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJl
Y29yCiAgICAgICAgIGF1dG8gY2VydGlmaWNhdGVJbmZvRGF0YVNwYW4gPSBzcWwtPmNvbHVtbkJs
b2JBc1NwYW4oMTEpOwogICAgICAgICBzdGQ6Om9wdGlvbmFsPENlcnRpZmljYXRlSW5mbz4gY2Vy
dGlmaWNhdGVJbmZvOwogCi0gICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgY2VydGlm
aWNhdGVJbmZvRGVjb2RlcihjZXJ0aWZpY2F0ZUluZm9EYXRhU3Bhbi5kYXRhKCksIGNlcnRpZmlj
YXRlSW5mb0RhdGFTcGFuLnNpemUoKSk7CisgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29k
ZXIgY2VydGlmaWNhdGVJbmZvRGVjb2RlciB7IGNlcnRpZmljYXRlSW5mb0RhdGFTcGFuIH07CiAg
ICAgICAgIGNlcnRpZmljYXRlSW5mb0RlY29kZXIgPj4gY2VydGlmaWNhdGVJbmZvOwogICAgICAg
ICBpZiAoIWNlcnRpZmljYXRlSW5mbykgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Io
U2VydmljZVdvcmtlciwgIlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzOiBGYWls
ZWQgdG8gZGVjb2RlIGNlcnRpZmljYXRlSW5mbyIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvd29y
a2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NjcmlwdFN0b3JhZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTY3JpcHRTdG9yYWdlLmNwcAko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZl
ci9TV1NjcmlwdFN0b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIFN0
cmluZyBTV1NjcmlwdFN0b3JhZ2U6OnNoYTJIYXNoKGNvbnN0IFMKICAgICBhdXRvIGlucHV0VXRm
OCA9IGlucHV0LnV0ZjgoKTsKICAgICBjcnlwdG8tPmFkZEJ5dGVzKGlucHV0VXRmOC5kYXRhKCks
IGlucHV0VXRmOC5sZW5ndGgoKSk7CiAgICAgYXV0byBoYXNoID0gY3J5cHRvLT5jb21wdXRlSGFz
aCgpOwotICAgIHJldHVybiBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhoYXNoLmRhdGEoKSwgaGFz
aC5zaXplKCkpOworICAgIHJldHVybiBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhoYXNoKTsKIH0K
IAogU3RyaW5nIFNXU2NyaXB0U3RvcmFnZTo6c2hhMkhhc2goY29uc3QgVVJMJiBpbnB1dCkgY29u
c3QKQEAgLTg2LDkgKzg2LDkgQEAgU2NyaXB0QnVmZmVyIFNXU2NyaXB0U3RvcmFnZTo6c3RvcmUo
Y29ucwogICAgIGF1dG8gc2NyaXB0UGF0aCA9IHRoaXMtPnNjcmlwdFBhdGgocmVnaXN0cmF0aW9u
S2V5LCBzY3JpcHRVUkwpOwogICAgIEZpbGVTeXN0ZW06Om1ha2VBbGxEaXJlY3RvcmllcyhGaWxl
U3lzdGVtOjpwYXJlbnRQYXRoKHNjcmlwdFBhdGgpKTsKIAotICAgIGF1dG8gaXRlcmF0ZU92ZXJC
dWZmZXJBbmRXcml0ZURhdGEgPSBbJl0oY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90
Kiwgc2l6ZV90KT4mIHdyaXRlRGF0YSkgewotICAgICAgICBmb3IgKGF1dG8gaXQgPSBzY3JpcHQu
YnVmZmVyKCktPmJlZ2luKCk7IGl0ICE9IHNjcmlwdC5idWZmZXIoKS0+ZW5kKCk7ICsraXQpCi0g
ICAgICAgICAgICB3cml0ZURhdGEoaXQtPnNlZ21lbnQtPmRhdGEoKSwgaXQtPnNlZ21lbnQtPnNp
emUoKSk7CisgICAgYXV0byBpdGVyYXRlT3ZlckJ1ZmZlckFuZFdyaXRlRGF0YSA9IFsmXShjb25z
dCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+JiB3cml0ZURhdGEpIHsKKyAg
ICAgICAgZm9yIChhdXRvJiBzZWdtZW50RW50cnkgOiAqc2NyaXB0LmJ1ZmZlcigpKQorICAgICAg
ICAgICAgd3JpdGVEYXRhKHNlZ21lbnRFbnRyeS5zZWdtZW50LT5ieXRlcygpKTsKICAgICB9Owog
CiAgICAgaWYgKCFzaG91bGRVc2VGaWxlTWFwcGluZyhzY3JpcHQuYnVmZmVyKCktPnNpemUoKSkp
IHsKQEAgLTk3LDggKzk3LDggQEAgU2NyaXB0QnVmZmVyIFNXU2NyaXB0U3RvcmFnZTo6c3RvcmUo
Y29ucwogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIlNXU2Ny
aXB0U3RvcmFnZTo6c3RvcmU6IEZhaWx1cmUgdG8gc3RvcmUgJXMsIEZpbGVTeXN0ZW06Om9wZW5G
aWxlKCkgZmFpbGVkIiwgc2NyaXB0UGF0aC51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgICAgIH0KLSAgICAgICAgaXRlcmF0ZU92ZXJCdWZmZXJBbmRXcml0ZURh
dGEoWyZdKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gICAgICAgICAgICBG
aWxlU3lzdGVtOjp3cml0ZVRvRmlsZShoYW5kbGUsIGRhdGEsIHNpemUpOworICAgICAgICBpdGVy
YXRlT3ZlckJ1ZmZlckFuZFdyaXRlRGF0YShbJl0oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEp
IHsKKyAgICAgICAgICAgIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKGhhbmRsZSwgZGF0YS5kYXRh
KCksIGRhdGEuc2l6ZSgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9KTsK
ICAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGhhbmRsZSk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSw4MSBAQAorMjAyMS0wNi0xMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRvcHQgU3BhbiBpbiBtb3JlIHBsYWNlcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6Q2Fj
aGVTdG9yYWdlOjpDYWNoZTo6ZGVjb2RlUmVjb3JkSGVhZGVyKToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6c3RvcmVPcmlnaW4pOgorICAgICAgICAoV2ViS2l0
OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVhZE9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OkNh
Y2hlU3RvcmFnZTo6ZW5jb2RlQ2FjaGVOYW1lcyk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3Rv
cmFnZTo6ZGVjb2RlQ2FjaGVzTmFtZXMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZURhdGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRh
dGE6Om1hcFRvRmlsZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Y29t
cHV0ZVNIQTEpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURh
dGEuaDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhOjpEYXRhKToKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW06CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YTo6YXBwbHkgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6OmFkb3B0TWFwKToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6RW50cnk6OmVuY29kZUFzU3RvcmFnZVJlY29yZCBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQpOgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5jcHA6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6aGFzaFN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6S2V5Ojpjb21wdXRlSGFzaCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6S2V5Ojpjb21wdXRlUGFydGl0aW9uSGFzaCBjb25zdCk6CisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6ZGVjb2RlUmVjb3JkTWV0YURhdGEpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FjaGU6OmVuY29kZVJlY29yZE1ldGFEYXRhKToKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3VicmVzb3VyY2VzRW50cnk6OmVuY29kZUFzU3Rv
cmFnZVJlY29yZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3VicmVz
b3VyY2VzRW50cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQpOgorICAgICAgICAqIFBsYXRmb3JtL0lQ
Qy9Bcmd1bWVudENvZGVyLmg6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJz
LmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxDU3RyaW5nPjo6ZW5jb2RlKToKKyAg
ICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxDU3RyaW5nPjo6ZGVjb2RlKToKKyAgICAgICAgKElQ
Qzo6QXJndW1lbnRDb2RlcjxTdHJpbmc+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpkZWNvZGVT
dHJpbmdUZXh0KToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxTSEExOjpEaWdlc3Q+Ojpl
bmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29k
ZSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgIChJ
UEM6OlNpbXBsZUFyZ3VtZW50Q29kZXI6OmVuY29kZSk6CisgICAgICAgIChJUEM6OlNpbXBsZUFy
Z3VtZW50Q29kZXI6OmRlY29kZSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FycmF5UmVmZXJl
bmNlLmg6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0RlY29kZXIuY3BwOgorICAgICAgICAoSVBD
OjpEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAqIFBsYXRmb3JtL0lQ
Qy9EZWNvZGVyLmg6CisgICAgICAgIChJUEM6OkRlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0
YSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0VuY29kZXIuY3BwOgorICAgICAgICAoSVBDOjpF
bmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9F
bmNvZGVyLmg6CisgICAgICAgICogUGxhdGZvcm0vSVBDL1NoYXJlZEJ1ZmZlckNvcHkuY3BwOgor
ICAgICAgICAoSVBDOjpTaGFyZWRCdWZmZXJDb3B5OjplbmNvZGUgY29uc3QpOgorICAgICAgICAq
IFBsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uRW5jb2Rlci5oOgorICAgICAgICAqIFNoYXJl
ZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoSVBDOjplbmNvZGVTaGFyZWRC
dWZmZXIpOgorICAgICAgICAoSVBDOjpkZWNvZGVTaGFyZWRCdWZmZXIpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuY3BwOgorICAgICAgICAoQVBJOjpl
bmNvZGVDb250ZW50UnVsZUxpc3RNZXRhRGF0YSk6CisgICAgICAgIChBUEk6OmdldERhdGEpOgor
ICAgICAgICAoQVBJOjpkZWNvZGVDb250ZW50UnVsZUxpc3RNZXRhRGF0YSk6CisgICAgICAgIChB
UEk6OndyaXRlRGF0YVRvRmlsZSk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9MZWdhY3lTZXNz
aW9uU3RhdGVDb2RpbmcuY3BwOgorICAgICAgICAoV2ViS2l0OjpIaXN0b3J5RW50cnlEYXRhRW5j
b2Rlcjo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFFbmNv
ZGVyOjplbmNvZGVBcml0aG1ldGljVHlwZSk6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRy
eURhdGFFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAoV2ViS2l0OjpI
aXN0b3J5RW50cnlEYXRhRGVjb2Rlcjo6b3BlcmF0b3I+Pik6CisgICAgICAgIChXZWJLaXQ6Okhp
c3RvcnlFbnRyeURhdGFEZWNvZGVyOjpkZWNvZGVBcml0aG1ldGljVHlwZSk6CisgICAgICAgIChX
ZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6ZW5jb2RlVHlwZWRBcnJheSk6CisKIDIwMjEtMDYtMTEg
IFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCwgcmV2ZXJ0aW5nIHIyNzg3NTQuCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXIuY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZh
dGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMyw3ICsz
MjMsNyBAQCB2b2lkIFByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlcjo6ZmlyCiAgICAgICAg
IGNyeXB0by0+YWRkQnl0ZXMocHVibGljS2V5RGF0YS0+ZGF0YSgpLCBwdWJsaWNLZXlEYXRhLT5z
aXplKCkpOwogICAgICAgICBhdXRvIHB1YmxpY0tleURhdGFIYXNoID0gY3J5cHRvLT5jb21wdXRl
SGFzaCgpOwogCi0gICAgICAgIGF1dG8ga2V5SUQgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhw
dWJsaWNLZXlEYXRhSGFzaC5kYXRhKCksIHB1YmxpY0tleURhdGFIYXNoLnNpemUoKSk7CisgICAg
ICAgIGF1dG8ga2V5SUQgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhwdWJsaWNLZXlEYXRhSGFz
aCk7CiAgICAgICAgIGlmIChrZXlJRCAhPSBhdHRyaWJ1dGlvbi5zb3VyY2VVbmxpbmthYmxlVG9r
ZW4oKS0+a2V5SURCYXNlNjRVUkwpCiAgICAgICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVT
dG9yYWdlRW5naW5lQ2FjaGUuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTY1LDcgKzU2NSw3IEBAIFN0b3JhZ2U6OlJlY29yZCBDYWNoZTo6ZW5jb2Rl
KGNvbnN0IFJlY28KIAogICAgIGVuY29kZXIuZW5jb2RlQ2hlY2tzdW0oKTsKIAotICAgIERhdGEg
aGVhZGVyKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICBEYXRh
IGhlYWRlcihlbmNvZGVyLmJ1ZmZlcigpKTsKICAgICBEYXRhIGJvZHk7CiAgICAgV1RGOjpzd2l0
Y2hPbihyZWNvcmQucmVzcG9uc2VCb2R5LCBbXShjb25zdCBSZWY8V2ViQ29yZTo6Rm9ybURhdGE+
JiBmb3JtRGF0YSkgewogICAgICAgICAvLyBGSVhNRTogU3RvcmUgZm9ybSBkYXRhIGJvZHkuCkBA
IC02MjgsOSArNjI4LDkgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RE9NQ2FjaGVF
bgogICAgIH19OwogfQogCi1zdGQ6Om9wdGlvbmFsPENhY2hlOjpEZWNvZGVkUmVjb3JkPiBDYWNo
ZTo6ZGVjb2RlUmVjb3JkSGVhZGVyKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYgc3RvcmFnZSkKK3N0
ZDo6b3B0aW9uYWw8Q2FjaGU6OkRlY29kZWRSZWNvcmQ+IENhY2hlOjpkZWNvZGVSZWNvcmRIZWFk
ZXIoY29uc3QgU3RvcmFnZTo6UmVjb3JkJiBzdG9yYWdlRW50cnkpCiB7Ci0gICAgV1RGOjpQZXJz
aXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKHN0b3JhZ2UuaGVhZGVyLmRhdGEoKSwgc3RvcmFnZS5o
ZWFkZXIuc2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyBz
dG9yYWdlRW50cnkuaGVhZGVyIH07CiAKICAgICBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gaW5zZXJ0
aW9uVGltZTsKICAgICBkZWNvZGVyID4+IGluc2VydGlvblRpbWU7CkBAIC02NTMsMTUgKzY1Mywx
NSBAQCBzdGQ6Om9wdGlvbmFsPENhY2hlOjpEZWNvZGVkUmVjb3JkPiBDYWNoCiAgICAgfX07CiB9
CiAKLXN0ZDo6b3B0aW9uYWw8UmVjb3JkPiBDYWNoZTo6ZGVjb2RlKGNvbnN0IFN0b3JhZ2U6OlJl
Y29yZCYgc3RvcmFnZSkKK3N0ZDo6b3B0aW9uYWw8UmVjb3JkPiBDYWNoZTo6ZGVjb2RlKGNvbnN0
IFN0b3JhZ2U6OlJlY29yZCYgc3RvcmFnZUVudHJ5KQogewotICAgIGF1dG8gcmVzdWx0ID0gZGVj
b2RlUmVjb3JkSGVhZGVyKHN0b3JhZ2UpOworICAgIGF1dG8gcmVzdWx0ID0gZGVjb2RlUmVjb3Jk
SGVhZGVyKHN0b3JhZ2VFbnRyeSk7CiAKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKIAogICAgIGF1dG8gcmVjb3JkID0gV1RGTW92ZShyZXN1bHQtPnJlY29y
ZCk7Ci0gICAgcmVjb3JkLnJlc3BvbnNlQm9keSA9IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3Jl
YXRlKHN0b3JhZ2UuYm9keS5kYXRhKCksIHN0b3JhZ2UuYm9keS5zaXplKCkpOworICAgIHJlY29y
ZC5yZXNwb25zZUJvZHkgPSBXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZShzdG9yYWdlRW50
cnkuYm9keSk7CiAKICAgICByZXR1cm4gcmVjb3JkOwogfQpJbmRleDogU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5n
aW5lQ2FjaGVzLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDUsMTQgKzEwNSwxNCBAQCB2b2lkIENhY2hlczo6c3RvcmVPcmlnaW4oQ29tcGxldGlv
bkNhbGxiCiAgICAgZW5jb2RlciA8PCBtX29yaWdpbi5jbGllbnRPcmlnaW4ucHJvdG9jb2w7CiAg
ICAgZW5jb2RlciA8PCBtX29yaWdpbi5jbGllbnRPcmlnaW4uaG9zdDsKICAgICBlbmNvZGVyIDw8
IG1fb3JpZ2luLmNsaWVudE9yaWdpbi5wb3J0OwotICAgIG1fZW5naW5lLT53cml0ZUZpbGUoY2Fj
aGVzT3JpZ2luRmlsZW5hbWUobV9yb290UGF0aCksIERhdGEgeyBlbmNvZGVyLmJ1ZmZlcigpLCBl
bmNvZGVyLmJ1ZmZlclNpemUoKSB9LCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoc3RkOjpvcHRp
b25hbDxFcnJvcj4mJiBlcnJvcikgbXV0YWJsZSB7CisgICAgbV9lbmdpbmUtPndyaXRlRmlsZShj
YWNoZXNPcmlnaW5GaWxlbmFtZShtX3Jvb3RQYXRoKSwgRGF0YSB7IGVuY29kZXIuYnVmZmVyKCkg
fSwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKHN0ZDo6b3B0aW9uYWw8RXJyb3I+JiYgZXJyb3Ip
IG11dGFibGUgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGVycm9yKSk7CiAg
ICAgfSk7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiBDYWNoZXM6
OnJlYWRPcmlnaW4oY29uc3QgRGF0YSYgZGF0YSkKIHsKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpE
ZWNvZGVyIGRlY29kZXIoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNp
c3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyBkYXRhIH07CiAKICAgICBzdGQ6Om9wdGlvbmFsPFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gdG9wT3JpZ2luOwogICAgIGRlY29kZXIgPj4gdG9w
T3JpZ2luOwpAQCAtNDA0LDEyICs0MDQsMTMgQEAgc3RhdGljIGlubGluZSBEYXRhIGVuY29kZUNh
Y2hlTmFtZXMoY29ucwogICAgICAgICBlbmNvZGVyIDw8IGNhY2hlLnVuaXF1ZU5hbWUoKTsKICAg
ICB9CiAKLSAgICByZXR1cm4gRGF0YSB7IGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVy
U2l6ZSgpIH07CisgICAgcmV0dXJuIERhdGEgeyBlbmNvZGVyLmJ1ZmZlcigpIH07CiB9CiAKIHN0
YXRpYyBpbmxpbmUgRXhwZWN0ZWQ8VmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+LCBF
cnJvcj4gZGVjb2RlQ2FjaGVzTmFtZXMoY29uc3QgRGF0YSYgZGF0YSkKIHsKLSAgICBXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAg
ICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyBkYXRhIH07CisKICAgICBzdGQ6
Om9wdGlvbmFsPHVpbnQ2NF90PiBjb3VudDsKICAgICBkZWNvZGVyID4+IGNvdW50OwogICAgIGlm
ICghY291bnQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiBEYXRh
IERhdGE6Om1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpIGNvbnN0CiB7CiAgICAgRmlsZVN5
c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZTsKLSAgICBhdXRvIGFwcGx5RGF0YSA9IFsm
XShjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYgYXBwbGllcikg
eyBhcHBseShhcHBsaWVyKTsgfTsKKyAgICBhdXRvIGFwcGx5RGF0YSA9IFsmXShjb25zdCBGdW5j
dGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+JiBhcHBsaWVyKSB7IGFwcGx5KGFwcGxp
ZXIpOyB9OwogICAgIGF1dG8gbWFwcGVkRmlsZSA9IEZpbGVTeXN0ZW06Om1hcFRvRmlsZShwYXRo
LCBzaXplKCksIFdURk1vdmUoYXBwbHlEYXRhKSwgJmhhbmRsZSk7CiAgICAgaWYgKCFtYXBwZWRG
aWxlKQogICAgICAgICByZXR1cm4geyB9OwpAQCAtODYsOSArODYsOSBAQCBEYXRhIGFkb3B0QW5k
TWFwRmlsZShGaWxlU3lzdGVtOjpQbGF0Zm9yCiBTSEExOjpEaWdlc3QgY29tcHV0ZVNIQTEoY29u
c3QgRGF0YSYgZGF0YSwgY29uc3QgU2FsdCYgc2FsdCkKIHsKICAgICBTSEExIHNoYTE7Ci0gICAg
c2hhMS5hZGRCeXRlcyhzYWx0LmRhdGEoKSwgc2FsdC5zaXplKCkpOwotICAgIGRhdGEuYXBwbHko
WyZzaGExXShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgewotICAgICAgICBzaGEx
LmFkZEJ5dGVzKGRhdGEsIHNpemUpOworICAgIHNoYTEuYWRkQnl0ZXMoc2FsdCk7CisgICAgZGF0
YS5hcHBseShbJnNoYTFdKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhKSB7CisgICAgICAgIHNo
YTEuYWRkQnl0ZXMoZGF0YSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0pOwogCkluZGV4
OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZURhdGEuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4
LDcgQEAKICNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlv
bkRpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDx3dGYvU0hBMS5oPgorI2luY2x1ZGUgPHd0Zi9TcGFu
Lmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTUyLDggKzUzLDE0IEBAIG5hbWVzcGFjZSBOZXR3b3Jr
Q2FjaGUgewogCiBjbGFzcyBEYXRhIHsKIHB1YmxpYzoKKyAgICB1c2luZyB2YWx1ZV90eXBlID0g
dWludDhfdDsKKwogICAgIERhdGEoKSB7IH0KICAgICBEYXRhKGNvbnN0IHVpbnQ4X3QqLCBzaXpl
X3QpOworICAgIERhdGEoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpCisgICAgICAgIDogRGF0
YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6
ZSgpKQorICAgIHsKKyAgICB9CiAKICAgICB+RGF0YSgpIHsgfQogCkBAIC03NCwxMiArODEsMTMg
QEAgcHVibGljOgogCiAgICAgY29uc3QgdWludDhfdCogZGF0YSgpIGNvbnN0OwogICAgIHNpemVf
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKICAgICBib29sIGlzTWFwKCkgY29u
c3QgeyByZXR1cm4gbV9pc01hcDsgfQogICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHRyeUNyZWF0
ZVNoYXJlZE1lbW9yeSgpIGNvbnN0OwogCiAgICAgRGF0YSBzdWJyYW5nZShzaXplX3Qgb2Zmc2V0
LCBzaXplX3QpIGNvbnN0OwogCi0gICAgYm9vbCBhcHBseShjb25zdCBGdW5jdGlvbjxib29sIChj
b25zdCB1aW50OF90Kiwgc2l6ZV90KT4mKSBjb25zdDsKKyAgICBib29sIGFwcGx5KGNvbnN0IEZ1
bmN0aW9uPGJvb2wgKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+JikgY29uc3Q7CiAKICAgICBEYXRh
IG1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURh
dGFDb2NvYS5tbQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTY5
LDEyICs2OSwxMiBAQCBib29sIERhdGE6OmlzTnVsbCgpIGNvbnN0CiAgICAgcmV0dXJuICFtX2Rp
c3BhdGNoRGF0YTsKIH0KIAotYm9vbCBEYXRhOjphcHBseShjb25zdCBGdW5jdGlvbjxib29sIChj
b25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIGFwcGxpZXIpIGNvbnN0Citib29sIERhdGE6OmFwcGx5
KGNvbnN0IEZ1bmN0aW9uPGJvb2wgKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+JiBhcHBsaWVyKSBj
b25zdAogewogICAgIGlmICghbV9zaXplKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0
dXJuIGRpc3BhdGNoX2RhdGFfYXBwbHkobV9kaXNwYXRjaERhdGEuZ2V0KCksIFsmYXBwbGllcl0o
ZGlzcGF0Y2hfZGF0YV90LCBzaXplX3QsIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKSB7
Ci0gICAgICAgIHJldHVybiBhcHBsaWVyKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRh
KSwgc2l6ZSk7CisgICAgICAgIHJldHVybiBhcHBsaWVyKFNwYW4geyBzdGF0aWNfY2FzdDxjb25z
dCBzdGQ6OmJ5dGUqPihkYXRhKSwgc2l6ZSB9KTsKICAgICB9KTsKIH0KIApAQCAtOTQsMTQgKzk0
LDExIEBAIERhdGEgY29uY2F0ZW5hdGUoY29uc3QgRGF0YSYgYSwgY29uc3QgRGEKIAogRGF0YSBE
YXRhOjphZG9wdE1hcChGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIG1hcHBlZEZpbGUsIEZp
bGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmZCkKIHsKLSAgICBzaXplX3Qgc2l6ZSA9IG1h
cHBlZEZpbGUuc2l6ZSgpOwotICAgIHZvaWQqIG1hcCA9IG1hcHBlZEZpbGUubGVha0hhbmRsZSgp
OwotICAgIEFTU0VSVChtYXApOwotICAgIEFTU0VSVChtYXAgIT0gTUFQX0ZBSUxFRCk7CisgICAg
YXV0byBtYXAgPSBtYXBwZWRGaWxlLmxlYWtIYW5kbGUoKTsKKyAgICBBU1NFUlQobWFwLmRhdGEo
KSk7CisgICAgQVNTRVJUKG1hcC5kYXRhKCkgIT0gTUFQX0ZBSUxFRCk7CiAgICAgRmlsZVN5c3Rl
bTo6Y2xvc2VGaWxlKGZkKTsKLSAgICBhdXRvIGJvZHlNYXAgPSBhZG9wdE9TT2JqZWN0KGRpc3Bh
dGNoX2RhdGFfY3JlYXRlKG1hcCwgc2l6ZSwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQ
QVRDSF9RVUVVRV9QUklPUklUWV9ERUZBVUxULCAwKSwgW21hcCwgc2l6ZV0gewotICAgICAgICBt
dW5tYXAobWFwLCBzaXplKTsKLSAgICB9KSk7CisgICAgYXV0byBib2R5TWFwID0gYWRvcHRPU09i
amVjdChkaXNwYXRjaF9kYXRhX2NyZWF0ZShtYXAuZGF0YSgpLCBtYXAuc2l6ZSgpLCBkaXNwYXRj
aF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCBE
SVNQQVRDSF9EQVRBX0RFU1RSVUNUT1JfTVVOTUFQKSk7CiAgICAgcmV0dXJuIHsgV1RGTW92ZShi
b2R5TWFwKSwgRGF0YTo6QmFja2luZzo6TWFwIH07CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZUVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksMTAgKzk5LDEwIEBA
IFN0b3JhZ2U6OlJlY29yZCBFbnRyeTo6ZW5jb2RlQXNTdG9yYWdlUmUKICAgICAKICAgICBlbmNv
ZGVyLmVuY29kZUNoZWNrc3VtKCk7CiAKLSAgICBEYXRhIGhlYWRlcihlbmNvZGVyLmJ1ZmZlcigp
LCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgRGF0YSBoZWFkZXIgeyBlbmNvZGVyLmJ1ZmZl
cigpIH07CiAgICAgRGF0YSBib2R5OwogICAgIGlmIChtX2J1ZmZlcikKLSAgICAgICAgYm9keSA9
IHsgbV9idWZmZXItPmRhdGEoKSwgbV9idWZmZXItPnNpemUoKSB9OworICAgICAgICBib2R5ID0g
eyBtX2J1ZmZlci0+Ynl0ZXMoKSB9OwogCiAgICAgcmV0dXJuIHsgbV9rZXksIG1fdGltZVN0YW1w
LCBoZWFkZXIsIGJvZHksIHsgfSB9OwogfQpAQCAtMTExLDcgKzExMSw3IEBAIHN0ZDo6dW5pcXVl
X3B0cjxFbnRyeT4gRW50cnk6OmRlY29kZVN0b3IKIHsKICAgICBhdXRvIGVudHJ5ID0gbWFrZVVu
aXF1ZTxFbnRyeT4oc3RvcmFnZUVudHJ5KTsKIAotICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29k
ZXIgZGVjb2RlcihzdG9yYWdlRW50cnkuaGVhZGVyLmRhdGEoKSwgc3RvcmFnZUVudHJ5LmhlYWRl
ci5zaXplKCkpOworICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlciB7IHN0b3Jh
Z2VFbnRyeS5oZWFkZXIgfTsKICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNl
OwogICAgIGlmICghV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZTo6ZGVjb2RlKGRlY29kZXIsIHJl
c3BvbnNlKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xOTEsNyArMTkxLDcgQEAgdm9p
ZCBFbnRyeTo6aW5pdGlhbGl6ZUJ1ZmZlckZyb21TdG9yYWdlUgogICAgICAgICAgICAgcmV0dXJu
OwogICAgIH0KICNlbmRpZgotICAgIG1fYnVmZmVyID0gV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpj
cmVhdGUobV9zb3VyY2VTdG9yYWdlUmVjb3JkLmJvZHkuZGF0YSgpLCBtX3NvdXJjZVN0b3JhZ2VS
ZWNvcmQuYm9keS5zaXplKCkpOworICAgIG1fYnVmZmVyID0gV2ViQ29yZTo6U2hhcmVkQnVmZmVy
OjpjcmVhdGUobV9zb3VyY2VTdG9yYWdlUmVjb3JkLmJvZHkpOwogfQogCiBXZWJDb3JlOjpTaGFy
ZWRCdWZmZXIqIEVudHJ5OjpidWZmZXIoKSBjb25zdApJbmRleDogU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmNwcAkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVLZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxMyArODgsMTMgQEAgc3RhdGljIHZv
aWQgaGFzaFN0cmluZyhTSEExJiBzaGExLCBjb25zdAogCiAgICAgaWYgKHN0cmluZy5pczhCaXQo
KSAmJiBzdHJpbmcuaXNBbGxBU0NJSSgpKSB7CiAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbnVsbEJ5
dGUgPSAwOwotICAgICAgICBzaGExLmFkZEJ5dGVzKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJp
bmcubGVuZ3RoKCkpOwotICAgICAgICBzaGExLmFkZEJ5dGVzKCZudWxsQnl0ZSwgMSk7CisgICAg
ICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVu
Z3RoKCkgfSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZudWxsQnl0ZSwgMSB9KTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvIGNTdHJpbmcgPSBzdHJpbmcudXRmOCgp
OwogICAgIC8vIEluY2x1ZGUgdGVybWluYXRpbmcgbnVsbCBieXRlLgotICAgIHNoYTEuYWRkQnl0
ZXMoY1N0cmluZy5kYXRhQXNVSW50OFB0cigpLCBjU3RyaW5nLmxlbmd0aCgpICsgMSk7CisgICAg
c2hhMS5hZGRCeXRlcyhTcGFuIHsgY1N0cmluZy5kYXRhQXNVSW50OFB0cigpLCBjU3RyaW5nLmxl
bmd0aCgpICsgMSB9KTsKIH0KIAogS2V5OjpIYXNoVHlwZSBLZXk6OmNvbXB1dGVIYXNoKGNvbnN0
IFNhbHQmIHNhbHQpIGNvbnN0CkBAIC0xMDIsNyArMTAyLDcgQEAgS2V5OjpIYXNoVHlwZSBLZXk6
OmNvbXB1dGVIYXNoKGNvbnN0IFNhbAogICAgIC8vIFdlIGRvbid0IHJlYWxseSBuZWVkIGEgY3J5
cHRvZ3JhcGhpYyBoYXNoLiBUaGUga2V5IGlzIGFsd2F5cyB2ZXJpZmllZCBhZ2FpbnN0IHRoZSBl
bnRyeSBoZWFkZXIuCiAgICAgLy8gU0hBMSBqdXN0IGhhcHBlbnMgdG8gYmUgc3VpdGFibHkgc2l6
ZWQsIGZhc3QgYW5kIGF2YWlsYWJsZS4KICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRl
cyhzYWx0LmRhdGEoKSwgc2FsdC5zaXplKCkpOworICAgIHNoYTEuYWRkQnl0ZXMoc2FsdCk7CiAK
ICAgICBoYXNoU3RyaW5nKHNoYTEsIG1fcGFydGl0aW9uKTsKICAgICBoYXNoU3RyaW5nKHNoYTEs
IG1fdHlwZSk7CkBAIC0xMTcsNyArMTE3LDcgQEAgS2V5OjpIYXNoVHlwZSBLZXk6OmNvbXB1dGVI
YXNoKGNvbnN0IFNhbAogS2V5OjpIYXNoVHlwZSBLZXk6OmNvbXB1dGVQYXJ0aXRpb25IYXNoKGNv
bnN0IFNhbHQmIHNhbHQpIGNvbnN0CiB7CiAgICAgU0hBMSBzaGExOwotICAgIHNoYTEuYWRkQnl0
ZXMoc2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKTsKKyAgICBzaGExLmFkZEJ5dGVzKHNhbHQpOwog
CiAgICAgaGFzaFN0cmluZyhzaGExLCBtX3BhcnRpdGlvbik7CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9y
YWdlLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU0LDgg
KzQ1NCw4IEBAIHN0cnVjdCBSZWNvcmRNZXRhRGF0YSB7CiBzdGF0aWMgV0FSTl9VTlVTRURfUkVU
VVJOIGJvb2wgZGVjb2RlUmVjb3JkTWV0YURhdGEoUmVjb3JkTWV0YURhdGEmIG1ldGFEYXRhLCBj
b25zdCBEYXRhJiBmaWxlRGF0YSkKIHsKICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBm
aWxlRGF0YS5hcHBseShbJm1ldGFEYXRhLCAmc3VjY2Vzc10oY29uc3QgdWludDhfdCogZGF0YSwg
c2l6ZV90IHNpemUpIHsKLSAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVy
KGRhdGEsIHNpemUpOworICAgIGZpbGVEYXRhLmFwcGx5KFsmbWV0YURhdGEsICZzdWNjZXNzXShT
cGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkgeworICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpE
ZWNvZGVyIGRlY29kZXIgeyBkYXRhIH07CiAgICAgICAgIAogICAgICAgICBzdGQ6Om9wdGlvbmFs
PHVuc2lnbmVkPiBjYWNoZVN0b3JhZ2VWZXJzaW9uOwogICAgICAgICBkZWNvZGVyID4+IGNhY2hl
U3RvcmFnZVZlcnNpb247CkBAIC01ODYsNyArNTg2LDcgQEAgc3RhdGljIERhdGEgZW5jb2RlUmVj
b3JkTWV0YURhdGEoY29uc3QgUgogCiAgICAgZW5jb2Rlci5lbmNvZGVDaGVja3N1bSgpOwogCi0g
ICAgcmV0dXJuIERhdGEoZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOwor
ICAgIHJldHVybiB7IGVuY29kZXIuYnVmZmVyKCkgfTsKIH0KIAogc3RkOjpvcHRpb25hbDxCbG9i
U3RvcmFnZTo6QmxvYj4gU3RvcmFnZTo6c3RvcmVCb2R5QXNCbG9iKFdyaXRlT3BlcmF0aW9uJiB3
cml0ZU9wZXJhdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnku
Y3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTIzLDE0ICsxMjMsMTQgQEAgU3RvcmFnZTo6UmVjb3JkIFN1YnJlc291cmNlc0VudHJ5OjplbmNv
ZAogCiAgICAgZW5jb2Rlci5lbmNvZGVDaGVja3N1bSgpOwogCi0gICAgcmV0dXJuIHsgbV9rZXks
IG1fdGltZVN0YW1wLCB7IGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpIH0s
IHsgfSwgeyB9fTsKKyAgICByZXR1cm4geyBtX2tleSwgbV90aW1lU3RhbXAsIHsgZW5jb2Rlci5i
dWZmZXIoKSB9LCB7IH0sIHsgfX07CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTdWJyZXNvdXJjZXNF
bnRyeT4gU3VicmVzb3VyY2VzRW50cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQoY29uc3QgU3RvcmFn
ZTo6UmVjb3JkJiBzdG9yYWdlRW50cnkpCiB7CiAgICAgYXV0byBlbnRyeSA9IG1ha2VVbmlxdWU8
U3VicmVzb3VyY2VzRW50cnk+KHN0b3JhZ2VFbnRyeSk7CiAKLSAgICBXVEY6OlBlcnNpc3RlbmNl
OjpEZWNvZGVyIGRlY29kZXIoc3RvcmFnZUVudHJ5LmhlYWRlci5kYXRhKCksIHN0b3JhZ2VFbnRy
eS5oZWFkZXIuc2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIg
eyBzdG9yYWdlRW50cnkuaGVhZGVyIH07CiAgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8U3VicmVz
b3VyY2VJbmZvPj4gc3VicmVzb3VyY2VzOwogICAgIGRlY29kZXIgPj4gc3VicmVzb3VyY2VzOwog
ICAgIGlmICghc3VicmVzb3VyY2VzKQpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
QXJndW1lbnRDb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L0FyZ3VtZW50Q29kZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvQXJndW1lbnRDb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSwxMyArNzksMTMg
QEAgc3RydWN0IEFyZ3VtZW50Q29kZXI8VCwgdHlwZW5hbWUgc3RkOjplbgogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEVuY29kZXI+CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIFQgdmFsdWUpCiAgICAgewotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0
YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmdmFsdWUpLCBzaXplb2YoVCksIGFs
aWdub2YoVCkpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsg
JnZhbHVlLCAxIH0pOwogICAgIH0KIAogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFQ+IGRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKICAgICAgICAgVCByZXN1bHQ7Ci0gICAgICAgIGlm
IChkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3Qq
PigmcmVzdWx0KSwgc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKSkKKyAgICAgICAgaWYgKGRlY29kZXIu
ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmcmVzdWx0LCAxIH0pKQogICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuY3BwCShyZXZp
c2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVy
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBBcmd1bWVudENvZGVy
PENTdHJpbmc+OjplbmNvZGUoRW5jbwogCiAgICAgdWludDMyX3QgbGVuZ3RoID0gc3RyaW5nLmxl
bmd0aCgpOwogICAgIGVuY29kZXIgPDwgbGVuZ3RoOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKHN0cmluZy5kYXRhQXNVSW50OFB0cigpLCBsZW5ndGgsIDEpOworICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0cmluZy5ieXRlcygpKTsKIH0KIAogV0FSTl9VTlVT
RURfUkVUVVJOIGJvb2wgQXJndW1lbnRDb2RlcjxDU3RyaW5nPjo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIsIENTdHJpbmcmIHJlc3VsdCkKQEAgLTEwMyw3ICsxMDMsNyBAQCBXQVJOX1VOVVNFRF9S
RVRVUk4gYm9vbCBBcmd1bWVudENvZGVyPENTCiAKICAgICBjaGFyKiBidWZmZXI7CiAgICAgQ1N0
cmluZyBzdHJpbmcgPSBDU3RyaW5nOjpuZXdVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsK
LSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KGJ1ZmZlciksIGxlbmd0aCwgMSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZp
eGVkTGVuZ3RoRGF0YShTcGFuIHsgYnVmZmVyLCBsZW5ndGggfSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIHJlc3VsdCA9IHN0cmluZzsKQEAgLTEyMywxMSArMTIzLDcgQEAgdm9pZCBB
cmd1bWVudENvZGVyPFN0cmluZz46OmVuY29kZShFbmNvZAogICAgIGJvb2wgaXM4Qml0ID0gc3Ry
aW5nLmlzOEJpdCgpOwogCiAgICAgZW5jb2RlciA8PCBsZW5ndGggPDwgaXM4Qml0OwotCi0gICAg
aWYgKGlzOEJpdCkKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RyaW5n
LmNoYXJhY3RlcnM4KCksIGxlbmd0aCAqIHNpemVvZihMQ2hhciksIGFsaWdub2YoTENoYXIpKTsK
LSAgICBlbHNlCi0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHN0cmluZy5jaGFyYWN0ZXJzMTYoKSksIGxlbmd0aCAq
IHNpemVvZihVQ2hhciksIGFsaWdub2YoVUNoYXIpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVk
TGVuZ3RoRGF0YShzdHJpbmcuYnl0ZXMoKSk7CiB9CiB0ZW1wbGF0ZQogdm9pZCBBcmd1bWVudENv
ZGVyPFN0cmluZz46OmVuY29kZTxFbmNvZGVyPihFbmNvZGVyJiwgY29uc3QgU3RyaW5nJik7CkBA
IC0xNDMsNyArMTM5LDcgQEAgc3RhdGljIGlubGluZSBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gZGVj
bwogICAgIAogICAgIENoYXJhY3RlclR5cGUqIGJ1ZmZlcjsKICAgICBTdHJpbmcgc3RyaW5nID0g
U3RyaW5nOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1
ZmZlciksIGxlbmd0aCAqIHNpemVvZihDaGFyYWN0ZXJUeXBlKSwgYWxpZ25vZihDaGFyYWN0ZXJU
eXBlKSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgYnVm
ZmVyLCBsZW5ndGggfSkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgCiAgICAg
cmV0dXJuIHN0cmluZzsKQEAgLTE4MSwxMiArMTc3LDEyIEBAIFdBUk5fVU5VU0VEX1JFVFVSTiBi
b29sIEFyZ3VtZW50Q29kZXI8U3QKIAogdm9pZCBBcmd1bWVudENvZGVyPFNIQTE6OkRpZ2VzdD46
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTSEExOjpEaWdlc3QmIGRpZ2VzdCkKIHsK
LSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3QuZGF0YSgpLCBzaXplb2Yo
ZGlnZXN0KSwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0KTsK
IH0KIAogV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgQXJndW1lbnRDb2RlcjxTSEExOjpEaWdlc3Q+
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgU0hBMTo6RGlnZXN0JiBkaWdlc3QpCiB7Ci0gICAg
cmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNpemVv
ZihkaWdlc3QpLCAxKTsKKyAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEo
ZGlnZXN0KTsKIH0KIAogI2lmIEhBVkUoQVVESVRfVE9LRU4pCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDEyICs0NSwxMiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgU2ltcGxlQXJn
dW1lCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KICAgICBzdGF0aWMgdm9pZCBlbmNv
ZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVCYgdCkKICAgICB7Ci0gICAgICAgIGVuY29kZXIu
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZ0
KSwgc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoU3BhbiB7ICZ0LCAxIH0pOwogICAgIH0KIAogICAgIHN0YXRpYyBXQVJOX1VOVVNF
RF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVCYgdCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0
PHVpbnQ4X3QqPigmdCksIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAgIHJldHVybiBk
ZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJnQsIDEgfSk7CiAgICAgfQogfTsK
IApAQCAtNjEsMTMgKzYxLDE0IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBFeHRlbnQ+
IHN0cnUKICAgICB7CiAgICAgICAgIGlmICghRXh0ZW50KQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQ4X3QqPihhcnJheVJlZmVyZW5jZS5kYXRhKCkpLCBhcnJheVJlZmVyZW5jZS5zaXpl
KCkgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVk
TGVuZ3RoRGF0YShTcGFuIHsgYXJyYXlSZWZlcmVuY2UuZGF0YSgpLCBhcnJheVJlZmVyZW5jZS5z
aXplKCkgfSk7CiAgICAgfQogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEFycmF5UmVmZXJlbmNl
VHlwZT4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewogICAgICAgICBpZiAoIUV4dGVu
dCkKICAgICAgICAgICAgIHJldHVybiBBcnJheVJlZmVyZW5jZVR5cGUoKTsKLSAgICAgICAgY29u
c3QgdWludDhfdCogZGF0YSA9IGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhSZWZlcmVuY2UoRXh0
ZW50ICogc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKKworICAgICAgICBjb25zdCBhdXRvKiBkYXRh
ID0gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aFJlZmVyZW5jZShFeHRlbnQgKiBzaXplb2YoVCks
IGFsaWdub2YoVCkpOwogICAgICAgICBpZiAoIWRhdGEpCiAgICAgICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogICAgICAgICByZXR1cm4gQXJyYXlSZWZlcmVuY2VUeXBlKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgVCo+KGRhdGEpLCBFeHRlbnQpOwpAQCAtODIsNyArODMsNyBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQXJndW1lbnRDb2RlCiAgICAgICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KGFycmF5UmVmZXJlbmNlLnNpemUoKSk7CiAgICAgICAgIGlmICgh
YXJyYXlSZWZlcmVuY2Uuc2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBlbmNv
ZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihhcnJheVJlZmVyZW5jZS5kYXRhKCkpLCBhcnJheVJlZmVyZW5jZS5zaXplKCkgKiBzaXplb2Yo
VCksIGFsaWdub2YoVCkpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShT
cGFuIHsgYXJyYXlSZWZlcmVuY2UuZGF0YSgpLCBhcnJheVJlZmVyZW5jZS5zaXplKCkgfSk7CiAg
ICAgfQogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEFycmF5UmVmZXJlbmNlVHlwZT4gZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCiAgICAgewpAQCAtOTYsNyArOTcsNyBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgQXJndW1lbnRDb2RlCiAgICAgICAgIGlmIChVTkxJS0VMWShkYXRhU2l6
ZS5oYXNPdmVyZmxvd2VkKCkpKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAot
ICAgICAgICBjb25zdCB1aW50OF90KiBkYXRhID0gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aFJl
ZmVyZW5jZShkYXRhU2l6ZSwgYWxpZ25vZihUKSk7CisgICAgICAgIGNvbnN0IGF1dG8qIGRhdGEg
PSBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoUmVmZXJlbmNlKGRhdGFTaXplLCBhbGlnbm9mKFQp
KTsKICAgICAgICAgaWYgKCFkYXRhKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
ICAgICAgICAgcmV0dXJuIEFycmF5UmVmZXJlbmNlVHlwZShyZWludGVycHJldF9jYXN0PGNvbnN0
IFQqPihkYXRhKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihzaXplKSk7CkBAIC00MjMsNyArNDI0LDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAgIHN0YXRpYyB2
b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiB2ZWN0b3IpCiAgICAgewogICAgICAg
ICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2ZWN0b3Iuc2l6ZSgpKTsKLSAgICAg
ICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50OF90Kj4odmVjdG9yLmRhdGEoKSksIHZlY3Rvci5zaXplKCkgKiBzaXplb2YoVCksIGFsaWdu
b2YoVCkpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YSh2ZWN0b3IpOwog
ICAgIH0KICAgICAKICAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERl
Y29kZXImIGRlY29kZXIsIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVy
LCBtaW5DYXBhY2l0eT4mIHZlY3RvcikKQEAgLTQ0Niw3ICs0NDcsNyBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpCiAgICAgICAgIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4gdGVtcDsKICAgICAgICAgdGVtcC5n
cm93KHNpemUpOwogCi0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEo
cmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4odGVtcC5kYXRhKCkpLCBzaXplICogc2l6ZW9mKFQp
LCBhbGlnbm9mKFQpKSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0
YSh0ZW1wKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICB2ZWN0b3Iuc3dh
cCh0ZW1wKTsKQEAgLTQ3Myw3ICs0NzQsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
aW5saW5lQ2FwYWNpCiAgICAgICAgIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dI
YW5kbGVyLCBtaW5DYXBhY2l0eT4gdmVjdG9yOwogICAgICAgICB2ZWN0b3IuZ3JvdyhzaXplKTsK
IAotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCBzaXplICogc2l6ZW9mKFQpLCBhbGlnbm9m
KFQpKSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YSh2ZWN0b3Ip
KQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgICAgICByZXR1cm4gdmVj
dG9yOwpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJyYXlSZWZlcmVuY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9BcnJheVJlZmVyZW5jZS5o
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9BcnJheVJl
ZmVyZW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw4IEBACiAKIG5hbWVzcGFjZSBJ
UEMgewogCisvLyBGSVhNRTogUmVwbGFjZSB3aXRoIDx3dGYvU3Bhbi5oPgorCiBpbmxpbmUgY29u
c3RleHByIHNpemVfdCBhcnJheVJlZmVyZW5jZUR5bmFtaWNFeHRlbnQgPSBzdGQ6Om51bWVyaWNf
bGltaXRzPHNpemVfdD46Om1heCgpOwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IEV4
dGVudCA9IGFycmF5UmVmZXJlbmNlRHluYW1pY0V4dGVudD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vSVBDL0RlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL0RlY29kZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDEzICsyMDYs
MTMgQEAgYm9vbCBEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YQogICAgIHJldHVy
biBhbGlnbmVkQnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihyb3VuZFVwVG9BbGlnbm1lbnQo
bV9idWZmZXJQb3MsIGFsaWdubWVudCksIG1fYnVmZmVyLCBtX2J1ZmZlckVuZCwgc2l6ZSk7CiB9
CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqIGRhdGEsIHNp
emVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50KQorYm9vbCBEZWNvZGVyOjpkZWNvZGVGaXhlZExl
bmd0aERhdGEoU3BhbjxzdGQ6OmJ5dGU+IGRhdGEsIHNpemVfdCBhbGlnbm1lbnQpCiB7Ci0gICAg
aWYgKCFhbGlnbkJ1ZmZlclBvc2l0aW9uKGFsaWdubWVudCwgc2l6ZSkpCisgICAgaWYgKCFhbGln
bkJ1ZmZlclBvc2l0aW9uKGFsaWdubWVudCwgZGF0YS5zaXplKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBtZW1jcHkoZGF0YSwgbV9idWZmZXJQb3MsIHNpemUpOwotICAgIG1fYnVm
ZmVyUG9zICs9IHNpemU7CisgICAgbWVtY3B5KGRhdGEuZGF0YSgpLCBtX2J1ZmZlclBvcywgZGF0
YS5zaXplKCkpOworICAgIG1fYnVmZmVyUG9zICs9IGRhdGEuc2l6ZSgpOwogCiAgICAgcmV0dXJu
IHRydWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5oCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTc5LDcgKzc5LDEzIEBAIHB1YmxpYzoKICAgICBXQVJOX1VOVVNFRF9SRVRV
Uk4gYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXJQb3MgIT0gbnVsbHB0cjsg
fQogICAgIHZvaWQgbWFya0ludmFsaWQoKSB7IG1fYnVmZmVyUG9zID0gbnVsbHB0cjsgfQogCi0g
ICAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3Qq
IGRhdGEsIHNpemVfdCwgc2l6ZV90IGFsaWdubWVudCk7CisgICAgV0FSTl9VTlVTRURfUkVUVVJO
IGJvb2wgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48c3RkOjpieXRlPiwgc2l6ZV90IGFsaWdu
bWVudCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFdBUk5fVU5VU0VEX1JFVFVS
TiBib29sIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShUJiYgZGF0YSwgc2l6ZV90IGFsaWdubWVudCA9
IGFsaWdub2YodHlwZW5hbWUgZGVjbHR5cGUoU3BhbihzdGQ6OmRlY2x2YWw8VD4oKSkpOjp2YWx1
ZV90eXBlKSkKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVGaXhlZExlbmd0aERhdGEoYXNX
cml0YWJsZUJ5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSksIGFsaWdubWVudCk7
CisgICAgfQogCiAgICAgLy8gVGhlIGRhdGEgaW4gdGhlIHJldHVybmVkIHBvaW50ZXIgaGVyZSB3
aWxsIG9ubHkgYmUgdmFsaWQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgRGVjb2RlciBvYmplY3Qu
CiAgICAgLy8gUmV0dXJucyBudWxscHRyIG9uIGZhaWx1cmUuCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0lQQy9FbmNvZGVyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiwxMiArMjAy
LDEyIEBAIHVpbnQ4X3QqIEVuY29kZXI6Omdyb3coc2l6ZV90IGFsaWdubWVudCwKICAgICByZXR1
cm4gbV9idWZmZXIgKyBhbGlnbmVkU2l6ZTsKIH0KIAotdm9pZCBFbmNvZGVyOjplbmNvZGVGaXhl
ZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGln
bm1lbnQpCit2b2lkIEVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0
ZDo6Ynl0ZT4gZGF0YSwgc2l6ZV90IGFsaWdubWVudCkKIHsKLSAgICBBU1NFUlQoIShyZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdD4oZGF0YSkgJSBhbGlnbm1lbnQpKTsKKyAgICBBU1NFUlQoIShy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZGF0YS5kYXRhKCkpICUgYWxpZ25tZW50KSk7CiAK
LSAgICB1aW50OF90KiBidWZmZXIgPSBncm93KGFsaWdubWVudCwgc2l6ZSk7Ci0gICAgbWVtY3B5
KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7CisgICAgYXV0byogYnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQs
IGRhdGEuc2l6ZSgpKTsKKyAgICBtZW1jcHkoYnVmZmVyLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXpl
KCkpOwogfQogCiB2b2lkIEVuY29kZXI6OmFkZEF0dGFjaG1lbnQoQXR0YWNobWVudCYmIGF0dGFj
aG1lbnQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5oCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5o
PgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgor
I2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3Bh
Y2UgSVBDIHsKQEAgLTYwLDcgKzYxLDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgd3JhcEZvclRl
c3RpbmcoVW5pcXVlUmVmPEVuY29kZXI+JiYpOwogCi0gICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0
aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90LCBzaXplX3QgYWxpZ25tZW50KTsKKyAg
ICB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSwg
c2l6ZV90IGFsaWdubWVudCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQg
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCBzaXplX3QgYWxpZ25tZW50ID0gYWxpZ25v
Zih0eXBlbmFtZSBkZWNsdHlwZShTcGFuKHN0ZDo6ZGVjbHZhbDxUPigpKSk6OnZhbHVlX3R5cGUp
KQorICAgIHsKKyAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGFzQnl0ZXMoU3BhbiB7IHN0
ZDo6Zm9yd2FyZDxUPihkYXRhKSB9KSwgYWxpZ25tZW50KTsKKyAgICB9CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgogICAgIEVuY29kZXImIG9wZXJhdG9yPDwoVCYmIHQpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TaGFyZWRCdWZmZXJDb3B5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TaGFyZWRCdWZmZXJDb3B5LmNwcAkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU2hhcmVkQnVmZmVyQ29w
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgdm9pZCBTaGFyZWRCdWZmZXJD
b3B5OjplbmNvZGUoRW5jb2RlciYgZQogICAgIGlmICghYnVmZmVyU2l6ZSkKICAgICAgICAgcmV0
dXJuOwogICAgIGZvciAoYXV0byYgc2VnbWVudCA6ICptX2J1ZmZlcikKLSAgICAgICAgZW5jb2Rl
ci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc2VnbWVudC5zZWdtZW50LT5kYXRhKCksIHNlZ21lbnQu
c2VnbWVudC0+c2l6ZSgpLCAxKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERh
dGEoc2VnbWVudC5zZWdtZW50LT5ieXRlcygpKTsKIH0KIAogc3RkOjpvcHRpb25hbDxTaGFyZWRC
dWZmZXJDb3B5PiBTaGFyZWRCdWZmZXJDb3B5OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25FbmNvZGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlv
bkVuY29kZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9J
UEMvU3RyZWFtQ29ubmVjdGlvbkVuY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcs
NyBAQAogCiAjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJNZXNzYWdlTmFt
ZXMuaCIKKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KIAogbmFtZXNwYWNlIElQQyB7CkBAIC01MywyMiArNTQsMjggQEAgcHVibGljOgogCiAgICAg
flN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyKCkgPSBkZWZhdWx0OwogCi0gICAgYm9vbCBlbmNvZGVG
aXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIHNpemVfdCBh
bGlnbm1lbnQpCisgICAgYm9vbCBlbmNvZGVGaXhlZExlbmd0aERhdGEoU3Bhbjxjb25zdCBzdGQ6
OmJ5dGU+IGRhdGEsIHNpemVfdCBhbGlnbm1lbnQpCiAgICAgewogICAgICAgICBzaXplX3QgYnVm
ZmVyUG9pbnRlciA9IHN0YXRpY19jYXN0PHNpemVfdD4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4obV9idWZmZXIgKyBtX2VuY29kZWRTaXplKSk7CiAgICAgICAgIHNpemVfdCBuZXdCdWZmZXJQ
b2ludGVyID0gcm91bmRVcFRvTXVsdGlwbGVPZihhbGlnbm1lbnQsIGJ1ZmZlclBvaW50ZXIpOwog
ICAgICAgICBpZiAobmV3QnVmZmVyUG9pbnRlciA8IGJ1ZmZlclBvaW50ZXIpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGludHB0cl90IGFsaWduZWRTaXplID0gbV9lbmNvZGVk
U2l6ZSArIChuZXdCdWZmZXJQb2ludGVyIC0gYnVmZmVyUG9pbnRlcik7Ci0gICAgICAgIGlmICgh
cmVzZXJ2ZShhbGlnbmVkU2l6ZSwgc2l6ZSkpCisgICAgICAgIGlmICghcmVzZXJ2ZShhbGlnbmVk
U2l6ZSwgZGF0YS5zaXplKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB1
aW50OF90KiBidWZmZXIgPSBtX2J1ZmZlciArIGFsaWduZWRTaXplOwotICAgICAgICBtZW1jcHko
YnVmZmVyLCBkYXRhLCBzaXplKTsKLSAgICAgICAgbV9lbmNvZGVkU2l6ZSA9IGFsaWduZWRTaXpl
ICsgc2l6ZTsKKyAgICAgICAgYXV0byogYnVmZmVyID0gbV9idWZmZXIgKyBhbGlnbmVkU2l6ZTsK
KyAgICAgICAgbWVtY3B5KGJ1ZmZlciwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICAg
ICAgbV9lbmNvZGVkU2l6ZSA9IGFsaWduZWRTaXplICsgZGF0YS5zaXplKCk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBl
bmNvZGVGaXhlZExlbmd0aERhdGEoVCYmIGRhdGEsIHNpemVfdCBhbGlnbm1lbnQgPSBhbGlnbm9m
KHR5cGVuYW1lIGRlY2x0eXBlKFNwYW4oc3RkOjpkZWNsdmFsPFQ+KCkpKTo6dmFsdWVfdHlwZSkp
CisgICAgeworICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEoYXNCeXRlcyhTcGFuIHsgc3Rk
Ojpmb3J3YXJkPFQ+KGRhdGEpIH0pLCBhbGlnbm1lbnQpOworICAgIH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CiAgICAgU3RyZWFtQ29ubmVjdGlvbkVuY29kZXImIG9wZXJhdG9yPDwoVCYm
IHQpCiAgICAgewogICAgICAgICBBcmd1bWVudENvZGVyPHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3Rk
OjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCB2b2lkPjo6ZW5jb2RlKCp0aGlzLCBzdGQ6OmZvcndh
cmQ8VD4odCkpOwpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1l
bnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNyArMTQ0LDcg
QEAgc3RhdGljIHZvaWQgZW5jb2RlU2hhcmVkQnVmZmVyKEVuY29kZXImIAogICAgIC8vIG92ZXIg
dGhlIElQQy4gQ29ubmVjdGlvblVuaXguY3BwIGFscmVhZHkgdXNlcyBzaGFyZWQgbWVtb3J5IHRv
IHNlbmQgYW55IElQQyBtZXNzYWdlIHRoYXQgaXMKICAgICAvLyB0b28gbGFyZ2UuIFNlZSBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4NTcxLgogICAgIGZvciAoY29u
c3QgYXV0byYgZWxlbWVudCA6ICpidWZmZXIpCi0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKGVsZW1lbnQuc2VnbWVudC0+ZGF0YSgpLCBlbGVtZW50LnNlZ21lbnQtPnNpemUo
KSwgMSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGVsZW1lbnQuc2Vn
bWVudC0+Ynl0ZXMoKSk7CiAjZWxzZQogICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsK
ICAgICBhdXRvIHNoYXJlZE1lbW9yeUJ1ZmZlciA9IFNoYXJlZE1lbW9yeTo6Y29weUJ1ZmZlcigq
YnVmZmVyKTsKQEAgLTE4MCw3ICsxODAsNyBAQCBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJv
b2wgZGVjb2RlU2hhCiAKICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKICAgICBkYXRhLmdyb3co
YnVmZmVyU2l6ZSk7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShkYXRh
LmRhdGEoKSwgZGF0YS5zaXplKCksIDEpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExl
bmd0aERhdGEoZGF0YSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJ1ZmZlciA9IFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoZGF0YSkpOwpJbmRleDogU291cmNlL1dlYktpdC9T
aGFyZWQvbWFjL0F1eGlsaWFyeVByb2Nlc3NNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9TaGFyZWQvbWFjL0F1eGlsaWFyeVByb2Nlc3NNYWMubW0JKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9BdXhpbGlhcnlQcm9jZXNzTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMjEsNyArMzIxLDcgQEAgc3RhdGljIFN0cmluZyBzYW5kYm94RmlsZVBh
dGgoY29uc3QgU3RyaQogICAgIGNyeXB0by0+YWRkQnl0ZXMoaGVhZGVyLmRhdGEoKSwgaGVhZGVy
Lmxlbmd0aCgpKTsKICAgICBhdXRvIGhhc2ggPSBjcnlwdG8tPmNvbXB1dGVIYXNoKCk7CiAKLSAg
ICByZXR1cm4gbWFrZVN0cmluZyhkaXJlY3RvcnlQYXRoLCAiL0NvbXBpbGVkU2FuZGJveCsiLCBi
YXNlNjRVUkxFbmNvZGVkKGhhc2guZGF0YSgpLCBoYXNoLnNpemUoKSkpOworICAgIHJldHVybiBt
YWtlU3RyaW5nKGRpcmVjdG9yeVBhdGgsICIvQ29tcGlsZWRTYW5kYm94KyIsIGJhc2U2NFVSTEVu
Y29kZWQoaGFzaCkpOwogfQogCiBzdGF0aWMgYm9vbCBlbnN1cmVTYW5kYm94Q2FjaGVEaXJlY3Rv
cnkoY29uc3QgU2FuZGJveEluZm8mIGluZm8pCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC93
aW4vV2ViQ29yZUFyZ3VtZW50Q29kZXJzV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC93aW4vV2ViQ29yZUFyZ3VtZW50Q29kZXJzV2luLmNwcAkocmV2aXNpb24gMjc4
ODA5KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvd2luL1dlYkNvcmVBcmd1bWVudENvZGVyc1dp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDEyICs1MSwxMiBAQCBzdGQ6Om9wdGlvbmFsPEZv
bnRBdHRyaWJ1dGVzPiBBcmd1bWVudENvCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVy
PExPR0ZPTlQ+IHsKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29u
c3QgTE9HRk9OVCYgbG9nRm9udCkKICAgICB7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZsb2dGb250KSwgc2l6
ZW9mIGxvZ0ZvbnQsIDEpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShT
cGFuIHsgJmxvZ0ZvbnQsIDEgfSwgMSk7CiAgICAgfQogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFs
PExPR0ZPTlQ+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKICAgICAgICAgTE9HRk9O
VCBsb2dGb250OwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZsb2dGb250KSwgc2l6ZW9mKGxvZ0ZvbnQpLCAxKSkK
KyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJmxvZ0Zv
bnQsIDEgfSwgMSkpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAgICBy
ZXR1cm4gbG9nRm9udDsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
QVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9y
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSwxOCArMTMxLDIwIEBAIHN0YXRpYyBXZWJLaXQ6
Ok5ldHdvcmtDYWNoZTo6RGF0YSBlbmNvZGUKICAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmNvbmRp
dGlvbmVkRmlsdGVyc0J5dGVjb2RlU2l6ZTsKICAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmNvbmRp
dGlvbnNBcHBseU9ubHlUb0RvbWFpbjsKIAotICAgIEFTU0VSVChlbmNvZGVyLmJ1ZmZlclNpemUo
KSA9PSBDb250ZW50UnVsZUxpc3RGaWxlSGVhZGVyU2l6ZSk7Ci0gICAgcmV0dXJuIFdlYktpdDo6
TmV0d29ya0NhY2hlOjpEYXRhKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgp
KTsKKyAgICBBU1NFUlQoZW5jb2Rlci5idWZmZXIoKS5zaXplKCkgPT0gQ29udGVudFJ1bGVMaXN0
RmlsZUhlYWRlclNpemUpOworICAgIHJldHVybiBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YSB7
IGVuY29kZXIuYnVmZmVyKCkgfTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBnZXRE
YXRhKGNvbnN0IFQmLCBjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3Qp
PiYpOwotdGVtcGxhdGU8PiB2b2lkIGdldERhdGEoY29uc3QgV2ViS2l0OjpOZXR3b3JrQ2FjaGU6
OkRhdGEmIGRhdGEsIGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCosIHNpemVfdCk+
JiBmdW5jdGlvbikKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgZ2V0RGF0YShjb25zdCBUJiwg
Y29uc3QgRnVuY3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYpOworCit0ZW1wbGF0
ZTw+IHZvaWQgZ2V0RGF0YShjb25zdCBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YSYgZGF0YSwg
Y29uc3QgRnVuY3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYgZnVuY3Rpb24pCiB7
CiAgICAgZGF0YS5hcHBseShmdW5jdGlvbik7CiB9Ci10ZW1wbGF0ZTw+IHZvaWQgZ2V0RGF0YShj
b25zdCBXZWJDb3JlOjpTaGFyZWRCdWZmZXImIGRhdGEsIGNvbnN0IEZ1bmN0aW9uPGJvb2woY29u
c3QgdWludDhfdCosIHNpemVfdCk+JiBmdW5jdGlvbikKKwordGVtcGxhdGU8PiB2b2lkIGdldERh
dGEoY29uc3QgV2ViQ29yZTo6U2hhcmVkQnVmZmVyJiBkYXRhLCBjb25zdCBGdW5jdGlvbjxib29s
KFNwYW48Y29uc3Qgc3RkOjpieXRlPik+JiBmdW5jdGlvbikKIHsKLSAgICBmdW5jdGlvbihkYXRh
LmRhdGEoKSwgZGF0YS5zaXplKCkpOworICAgIGZ1bmN0aW9uKGRhdGEuYnl0ZXMoKSk7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC0xNTAsMTMgKzE1MiwxMyBAQCBzdGF0aWMgc3RkOjpv
cHRpb25hbDxDb250ZW50UnVsZUxpc3RNZXRhCiB7CiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7
CiAgICAgQ29udGVudFJ1bGVMaXN0TWV0YURhdGEgbWV0YURhdGE7Ci0gICAgZ2V0RGF0YShmaWxl
RGF0YSwgWyZtZXRhRGF0YSwgJnN1Y2Nlc3MsICZmaWxlRGF0YV0oY29uc3QgdWludDhfdCogZGF0
YSwgc2l6ZV90IHNpemUpIHsKKyAgICBnZXREYXRhKGZpbGVEYXRhLCBbJm1ldGFEYXRhLCAmc3Vj
Y2VzcywgJmZpbGVEYXRhXShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkgewogICAgICAgICAv
LyBUaGUgZmlsZSBkYXRhIHNob3VsZCBiZSBtYXBwZWQgaW50byBvbmUgY29udGludW91cyBtZW1v
cnkgc2VnbWVudCBzbyB0aGUgc2l6ZQogICAgICAgICAvLyBwYXNzZWQgdG8gdGhlIGFwcGxpZXIg
c2hvdWxkIGFsd2F5cyBlcXVhbCB0aGUgZGF0YSBzaXplLgotICAgICAgICBpZiAoc2l6ZSAhPSBm
aWxlRGF0YS5zaXplKCkpCisgICAgICAgIGlmIChkYXRhLnNpemUoKSAhPSBmaWxlRGF0YS5zaXpl
KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgV1RGOjpQZXJzaXN0ZW5j
ZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOworICAgICAgICBXVEY6OlBlcnNpc3RlbmNl
OjpEZWNvZGVyIGRlY29kZXIgeyBkYXRhIH07CiAgICAgICAgIAogICAgICAgICBzdGQ6Om9wdGlv
bmFsPHVpbnQzMl90PiB2ZXJzaW9uOwogICAgICAgICBkZWNvZGVyID4+IHZlcnNpb247CkBAIC0y
MjgsOCArMjMwLDggQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TWFwcGVkRGF0YT4gb3BlbkFuZAog
c3RhdGljIGJvb2wgd3JpdGVEYXRhVG9GaWxlKGNvbnN0IFdlYktpdDo6TmV0d29ya0NhY2hlOjpE
YXRhJiBmaWxlRGF0YSwgUGxhdGZvcm1GaWxlSGFuZGxlIGZkKQogewogICAgIGJvb2wgc3VjY2Vz
cyA9IHRydWU7Ci0gICAgZmlsZURhdGEuYXBwbHkoW2ZkLCAmc3VjY2Vzc10oY29uc3QgdWludDhf
dCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgaWYgKHdyaXRlVG9GaWxlKGZkLCBkYXRh
LCBzaXplKSA9PSAtMSkgeworICAgIGZpbGVEYXRhLmFwcGx5KFtmZCwgJnN1Y2Nlc3NdKFNwYW48
Y29uc3Qgc3RkOjpieXRlPiBkYXRhKSB7CisgICAgICAgIGlmICh3cml0ZVRvRmlsZShmZCwgZGF0
YS5kYXRhKCksIGRhdGEuc2l6ZSgpKSA9PSAtMSkgewogICAgICAgICAgICAgc3VjY2VzcyA9IGZh
bHNlOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0
aGVudGljYXRpb25QYW5lbC5tbQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTU1LDYgKzU1LDcgQEAKICNpbXBvcnQgPHBhbC9jcnlwdG8vQ3J5cHRvRGlnZXN0
Lmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4K
KyNpbXBvcnQgPHd0Zi9jb2NvYS9TcGFuQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0
b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+CiAKQEAgLTcwLDcgKzcxLDcg
QEAgc3RhdGljIFJldGFpblB0cjxOU0RhdGE+IHByb2R1Y2VDbGllbnREYQogICAgICAgICBbZGlj
dGlvbmFyeSBzZXRPYmplY3Q6QCJ3ZWJhdXRobi5nZXQiIGZvcktleTpAInR5cGUiXTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQotICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpiYXNlNjRVUkxFbmNv
ZGVUb1N0cmluZyhjaGFsbGVuZ2UuYnl0ZXMsIGNoYWxsZW5nZS5sZW5ndGgpIGZvcktleTpAImNo
YWxsZW5nZSJdOworICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpiYXNlNjRVUkxFbmNvZGVUb1N0
cmluZyhhc0J5dGVzKGNoYWxsZW5nZSkpIGZvcktleTpAImNoYWxsZW5nZSJdOwogICAgIFtkaWN0
aW9uYXJ5IHNldE9iamVjdDpvcmlnaW4gZm9yS2V5OkAib3JpZ2luIl07CiAKICAgICByZXR1cm4g
W05TSlNPTlNlcmlhbGl6YXRpb24gZGF0YVdpdGhKU09OT2JqZWN0OmRpY3Rpb25hcnkuZ2V0KCkg
b3B0aW9uczpOU0pTT05Xcml0aW5nU29ydGVkS2V5cyBlcnJvcjpuaWxdOwpJbmRleDogU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNh
dG9yLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRp
Y2F0aW9uL0NvY29hL0xvY2FsQXV0aGVudGljYXRvci5tbQkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxBdXRo
ZW50aWNhdG9yLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIHN0YXRpYyBpbmxp
bmUgSGFzaFNldDxTdHJpbmc+IHByb2R1Y2VIYXMKICAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0
OwogICAgIGZvciAoYXV0byYgY3JlZGVudGlhbERlc2NyaXB0b3IgOiBjcmVkZW50aWFsRGVzY3Jp
cHRvcnMpIHsKICAgICAgICAgaWYgKGVtcHR5VHJhbnNwb3J0c09yQ29udGFpbihjcmVkZW50aWFs
RGVzY3JpcHRvci50cmFuc3BvcnRzLCBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpJbnRlcm5hbCkg
JiYgY3JlZGVudGlhbERlc2NyaXB0b3IudHlwZSA9PSBQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6
UHVibGljS2V5ICYmIGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9yLnNpemUoKSA9PSBjcmVk
ZW50aWFsSWRMZW5ndGgpCi0gICAgICAgICAgICByZXN1bHQuYWRkKGJhc2U2NEVuY29kZVRvU3Ry
aW5nKGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9yLmRhdGEoKSwgY3JlZGVudGlhbERlc2Ny
aXB0b3IuaWRWZWN0b3Iuc2l6ZSgpKSk7CisgICAgICAgICAgICByZXN1bHQuYWRkKGJhc2U2NEVu
Y29kZVRvU3RyaW5nKGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9yKSk7CiAgICAgfQogICAg
IHJldHVybiByZXN1bHQ7CiB9CkBAIC0yMzMsNyArMjMzLDcgQEAgdm9pZCBMb2NhbEF1dGhlbnRp
Y2F0b3I6Om1ha2VDcmVkZW50aWFsKAogICAgICAgICBpZiAobm90Rm91bmQgIT0gbV9leGlzdGlu
Z0NyZWRlbnRpYWxzLmZpbmRNYXRjaGluZyhbJmV4Y2x1ZGVDcmVkZW50aWFsSWRzXSAoYXV0byYg
Y3JlZGVudGlhbCkgewogICAgICAgICAgICAgYXV0byogcmF3SWQgPSBjcmVkZW50aWFsLT5yYXdJ
ZCgpOwogICAgICAgICAgICAgQVNTRVJUKHJhd0lkKTsKLSAgICAgICAgICAgIHJldHVybiBleGNs
dWRlQ3JlZGVudGlhbElkcy5jb250YWlucyhiYXNlNjRFbmNvZGVUb1N0cmluZyhyYXdJZC0+ZGF0
YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgpKSk7CisgICAgICAgICAgICByZXR1cm4gZXhjbHVkZUNy
ZWRlbnRpYWxJZHMuY29udGFpbnMoYmFzZTY0RW5jb2RlVG9TdHJpbmcocmF3SWQtPmJ5dGVzKCkp
KTsKICAgICAgICAgfSkpIHsKICAgICAgICAgICAgIHJlY2VpdmVFeGNlcHRpb24oeyBOb3RBbGxv
d2VkRXJyb3IsICJBdCBsZWFzdCBvbmUgY3JlZGVudGlhbCBtYXRjaGVzIGFuIGVudHJ5IG9mIHRo
ZSBleGNsdWRlQ3JlZGVudGlhbHMgbGlzdCBpbiB0aGUgcGxhdGZvcm0gYXR0YWNoZWQgYXV0aGVu
dGljYXRvci4iX3MgfSwgV2ViQXV0aGVudGljYXRpb25TdGF0dXM6OkxBRXhjbHVkZUNyZWRlbnRp
YWxzTWF0Y2hlZCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC01MTAsNyArNTEwLDcgQEAgdm9p
ZCBMb2NhbEF1dGhlbnRpY2F0b3I6OmdldEFzc2VydGlvbigpCiAgICAgICAgIH0KIAogICAgICAg
ICBhdXRvKiByYXdJZCA9IGNyZWRlbnRpYWwtPnJhd0lkKCk7Ci0gICAgICAgIGlmIChhbGxvd0Ny
ZWRlbnRpYWxJZHMuY29udGFpbnMoYmFzZTY0RW5jb2RlVG9TdHJpbmcocmF3SWQtPmRhdGEoKSwg
cmF3SWQtPmJ5dGVMZW5ndGgoKSkpKQorICAgICAgICBpZiAoYWxsb3dDcmVkZW50aWFsSWRzLmNv
bnRhaW5zKGJhc2U2NEVuY29kZVRvU3RyaW5nKHJhd0lkLT5ieXRlcygpKSkpCiAgICAgICAgICAg
ICBhc3NlcnRpb25SZXNwb25zZXMudW5jaGVja2VkQXBwZW5kKGNyZWRlbnRpYWwuY29weVJlZigp
KTsKICAgICB9CiAgICAgaWYgKGFzc2VydGlvblJlc3BvbnNlcy5pc0VtcHR5KCkpIHsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0xvY2Fs
Q29ubmVjdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJB
dXRoZW50aWNhdGlvbi9Nb2NrL01vY2tMb2NhbENvbm5lY3Rpb24ubW0JKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2svTW9j
a0xvY2FsQ29ubmVjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMTYyLDcgKzE2Miw3IEBAIHZv
aWQgTW9ja0xvY2FsQ29ubmVjdGlvbjo6ZmlsdGVyUmVzcG9uc2UKICAgICBmb3IgKDsgaXRyICE9
IHJlc3BvbnNlcy5lbmQoKTsgKytpdHIpIHsKICAgICAgICAgYXV0byogcmF3SWQgPSBpdHItPmdl
dCgpLnJhd0lkKCk7CiAgICAgICAgIEFTU0VSVChyYXdJZCk7Ci0gICAgICAgIGF1dG8gcmF3SWRC
YXNlNjQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhyYXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxl
bmd0aCgpKTsKKyAgICAgICAgYXV0byByYXdJZEJhc2U2NCA9IGJhc2U2NEVuY29kZVRvU3RyaW5n
KHJhd0lkLT5ieXRlcygpKTsKICAgICAgICAgaWYgKHJhd0lkQmFzZTY0ID09IHByZWZlcnJlZENy
ZWRlbnRpYWxJZEJhc2U2NCkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9MZWdhY3lTZXNzaW9uU3RhdGVD
b2RpbmcuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9t
YWMvTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDcg
KzEyOSw3IEBAIHB1YmxpYzoKICAgICAgICAgKnRoaXMgPDwgbGVuZ3RoOwogCiAgICAgICAgICp0
aGlzIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihsZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKLSAg
ICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpLmdldCgpKSwgbGVu
Z3RoICogc2l6ZW9mKFVDaGFyKSwgYWxpZ25vZihVQ2hhcikpOworICAgICAgICBlbmNvZGVGaXhl
ZExlbmd0aERhdGEoU3BhbiB7IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVy
cygpLmdldCgpLCBsZW5ndGggfSk7CiAKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KQEAg
LTEzNyw3ICsxMzcsNyBAQCBwdWJsaWM6CiAgICAgSGlzdG9yeUVudHJ5RGF0YUVuY29kZXImIG9w
ZXJhdG9yPDwoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2YWx1ZSkKICAgICB7CiAgICAgICAgICp0
aGlzIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1ZS5zaXplKCkpOwotICAgICAgICBlbmNv
ZGVGaXhlZExlbmd0aERhdGEodmFsdWUuZGF0YSgpLCB2YWx1ZS5zaXplKCksIDEpOworICAgICAg
ICBlbmNvZGVGaXhlZExlbmd0aERhdGEodmFsdWUpOwogCiAgICAgICAgIHJldHVybiAqdGhpczsK
ICAgICB9CkBAIC0xNDUsNyArMTQ1LDcgQEAgcHVibGljOgogICAgIEhpc3RvcnlFbnRyeURhdGFF
bmNvZGVyJiBvcGVyYXRvcjw8KGNvbnN0IFZlY3RvcjxjaGFyPiYgdmFsdWUpCiAgICAgewogICAg
ICAgICAqdGhpcyA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUuc2l6ZSgpKTsKLSAgICAg
ICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+
KHZhbHVlLmRhdGEoKSksIHZhbHVlLnNpemUoKSwgMSk7CisgICAgICAgIGVuY29kZUZpeGVkTGVu
Z3RoRGF0YSh2YWx1ZSk7CiAKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KQEAgLTIwNiwx
NyArMjA2LDIzIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfYXJpdGhtZXRpYzxUeXBlPjo6dmFsdWUsICIiKTsKIAotICAgICAgICBlbmNvZGVGaXhlZExl
bmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnZhbHVlKSwgc2l6ZW9mKHZhbHVl
KSwgc2l6ZW9mKHZhbHVlKSk7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsg
JnZhbHVlLCAxIH0sIHNpemVvZih2YWx1ZSkpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAg
fQogCi0gICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwg
c2l6ZV90IHNpemUsIHVuc2lnbmVkIGFsaWdubWVudCkKKyAgICB2b2lkIGVuY29kZUZpeGVkTGVu
Z3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSwgdW5zaWduZWQgYWxpZ25tZW50KQog
ICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGF0YSB8fCAhc2l6ZSk7Ci0gICAgICAgIEFT
U0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihkYXRhKSAlIGFsaWdubWVudCkpOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChkYXRhLmRhdGEoKSB8fCAhZGF0YS5zaXplKCkpOworICAg
ICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZGF0YS5kYXRhKCkpICUg
YWxpZ25tZW50KSk7CiAKLSAgICAgICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQs
IHNpemUpOwotICAgICAgICBtZW1jcHkoYnVmZmVyLCBkYXRhLCBzaXplKTsKKyAgICAgICAgYXV0
byogYnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQsIGRhdGEuc2l6ZSgpKTsKKyAgICAgICAgbWVtY3B5
KGJ1ZmZlciwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCB1
bnNpZ25lZCBhbGlnbm1lbnQgPSBhbGlnbm9mKHR5cGVuYW1lIGRlY2x0eXBlKFNwYW4oc3RkOjpk
ZWNsdmFsPFQ+KCkpKTo6dmFsdWVfdHlwZSkpCisgICAgeworICAgICAgICBlbmNvZGVGaXhlZExl
bmd0aERhdGEoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pLCBhbGlnbm1l
bnQpOwogICAgIH0KIAogICAgIHVpbnQ4X3QqIGdyb3codW5zaWduZWQgYWxpZ25tZW50LCBzaXpl
X3Qgc2l6ZSkKQEAgLTYwMSw3ICs2MDcsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgVUNoYXIqIGJ1
ZmZlcjsKICAgICAgICAgYXV0byBzdHJpbmcgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQo
bGVuZ3RoLCBidWZmZXIpOwotICAgICAgICBkZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSwgYWxpZ25v
ZihVQ2hhcikpOworICAgICAgICBkZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IGJ1ZmZlciwg
bGVuZ3RoIH0pOwogCiAgICAgICAgIHZhbHVlID0gc3RyaW5nOwogICAgICAgICByZXR1cm4gKnRo
aXM7CkBAIC03MzcsMTcgKzc0MywyMyBAQCBwcml2YXRlOgogICAgICAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfYXJpdGhtZXRpYzxUeXBlPjo6dmFsdWUsICIiKTsKICAgICAgICAgdmFsdWUgPSBU
eXBlKCk7CiAKLSAgICAgICAgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KCZ2YWx1ZSksIHNpemVvZih2YWx1ZSksIHNpemVvZih2YWx1ZSkpOworICAgICAg
ICBkZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZ2YWx1ZSwgMSB9LCBzaXplb2YodmFsdWUp
KTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAotICAgIHZvaWQgZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBhbGlnbm1lbnQp
CisgICAgdm9pZCBkZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbjxzdGQ6OmJ5dGU+IGRhdGEsIHVu
c2lnbmVkIGFsaWdubWVudCkKICAgICB7Ci0gICAgICAgIGlmICghYWxpZ25CdWZmZXJQb3NpdGlv
bihhbGlnbm1lbnQsIHNpemUpKQorICAgICAgICBpZiAoIWFsaWduQnVmZmVyUG9zaXRpb24oYWxp
Z25tZW50LCBkYXRhLnNpemUoKSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbWVt
Y3B5KGRhdGEsIG1fYnVmZmVyLCBzaXplKTsKLSAgICAgICAgbV9idWZmZXIgKz0gc2l6ZTsKKyAg
ICAgICAgbWVtY3B5KGRhdGEuZGF0YSgpLCBtX2J1ZmZlciwgZGF0YS5zaXplKCkpOworICAgICAg
ICBtX2J1ZmZlciArPSBkYXRhLnNpemUoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorICAgIHZvaWQgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCB1bnNpZ25lZCBh
bGlnbm1lbnQgPSBhbGlnbm9mKHR5cGVuYW1lIGRlY2x0eXBlKFNwYW4oc3RkOjpkZWNsdmFsPFQ+
KCkpKTo6dmFsdWVfdHlwZSkpCisgICAgeworICAgICAgICBkZWNvZGVGaXhlZExlbmd0aERhdGEo
YXNXcml0YWJsZUJ5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSksIGFsaWdubWVu
dCk7CiAgICAgfQogCiAgICAgYm9vbCBhbGlnbkJ1ZmZlclBvc2l0aW9uKHVuc2lnbmVkIGFsaWdu
bWVudCwgc2l6ZV90IHNpemUpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29y
ay9XZWJTb2NrZXRDaGFubmVsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvTmV0d29yay9XZWJTb2NrZXRDaGFubmVsLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU5LDggKzU5LDggQEAgTmV0d29ya1NlbmRRdWV1ZSBXZWJTb2NrZXRD
aGFubmVsOjpjcmVhdAogICAgICAgICBjaGFubmVsLm5vdGlmeVNlbmRGcmFtZShXZWJTb2NrZXRG
cmFtZTo6T3BDb2RlOjpPcENvZGVUZXh0LCB1dGY4U3RyaW5nLmRhdGFBc1VJbnQ4UHRyKCksIHV0
ZjhTdHJpbmcubGVuZ3RoKCkpOwogICAgICAgICBjaGFubmVsLnNlbmRNZXNzYWdlKE1lc3NhZ2Vz
OjpOZXR3b3JrU29ja2V0Q2hhbm5lbDo6U2VuZFN0cmluZyB7IElQQzo6RGF0YVJlZmVyZW5jZSB7
IHV0ZjhTdHJpbmcuZGF0YUFzVUludDhQdHIoKSwgdXRmOFN0cmluZy5sZW5ndGgoKSB9IH0sIHV0
ZjhTdHJpbmcubGVuZ3RoKCkpOwogICAgIH0sIFsmY2hhbm5lbF0oYXV0byYgc3BhbikgewotICAg
ICAgICBjaGFubmVsLm5vdGlmeVNlbmRGcmFtZShXZWJTb2NrZXRGcmFtZTo6T3BDb2RlOjpPcENv
ZGVCaW5hcnksIHNwYW4uZGF0YSgpLCBzcGFuLnNpemUoKSk7Ci0gICAgICAgIGNoYW5uZWwuc2Vu
ZE1lc3NhZ2UoTWVzc2FnZXM6Ok5ldHdvcmtTb2NrZXRDaGFubmVsOjpTZW5kRGF0YSB7IElQQzo6
RGF0YVJlZmVyZW5jZSB7IHNwYW4uZGF0YSgpLCBzcGFuLnNpemUoKSB9IH0sIHNwYW4uc2l6ZSgp
KTsKKyAgICAgICAgY2hhbm5lbC5ub3RpZnlTZW5kRnJhbWUoV2ViU29ja2V0RnJhbWU6Ok9wQ29k
ZTo6T3BDb2RlQmluYXJ5LCByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzcGFuLmRh
dGEoKSksIHNwYW4uc2l6ZSgpKTsKKyAgICAgICAgY2hhbm5lbC5zZW5kTWVzc2FnZShNZXNzYWdl
czo6TmV0d29ya1NvY2tldENoYW5uZWw6OlNlbmREYXRhIHsgSVBDOjpEYXRhUmVmZXJlbmNlIHsg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3Bhbi5kYXRhKCkpLCBzcGFuLnNpemUo
KSB9IH0sIHNwYW4uc2l6ZSgpKTsKICAgICB9LCBbJmNoYW5uZWxdKEV4Y2VwdGlvbkNvZGUgZXhj
ZXB0aW9uQ29kZSkgewogICAgICAgICBhdXRvIGNvZGUgPSBzdGF0aWNfY2FzdDxpbnQ+KGV4Y2Vw
dGlvbkNvZGUpOwogICAgICAgICBjaGFubmVsLmZhaWwobWFrZVN0cmluZygiRmFpbGVkIHRvIGxv
YWQgQmxvYjogZXhjZXB0aW9uIGNvZGUgPSAiLCBjb2RlKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQ
SS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0MywxMiArNDQzLDcgQEAgSlNWYWx1ZVJlZiBKU1No
YXJlZE1lbW9yeTo6cmVhZEJ5dGVzKEpTQwogICAgIHJldHVybiB0b1JlZihqc0FycmF5QnVmZmVy
KTsKIH0KIAotc3RydWN0IEFycmF5QnVmZmVyRGF0YSB7Ci0gICAgdm9pZCogYnVmZmVyIHsgbnVs
bHB0ciB9OwotICAgIHNpemVfdCBsZW5ndGggeyAwIH07Ci19OwotCi1zdGF0aWMgQXJyYXlCdWZm
ZXJEYXRhIGFycmF5QnVmZmVyRGF0YUZyb21WYWx1ZVJlZihKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNUeXBlZEFycmF5VHlwZSB0eXBlLCBKU1ZhbHVlUmVmIHZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCitzdGF0aWMgU3BhbjxzdGQ6OmJ5dGU+IGFycmF5QnVmZmVyRGF0YUZyb21WYWx1
ZVJlZihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNUeXBlZEFycmF5VHlwZSB0eXBlLCBKU1ZhbHVl
UmVmIHZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgYXV0byBvYmplY3RS
ZWYgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgdmFsdWVSZWYsIGV4Y2VwdGlvbik7CiAgICAg
aWYgKCFvYmplY3RSZWYpCkBAIC00NjksNyArNDY0LDcgQEAgc3RhdGljIEFycmF5QnVmZmVyRGF0
YSBhcnJheUJ1ZmZlckRhdGFGcgogICAgIGVsc2UKICAgICAgICAgbGVuZ3RoID0gSlNPYmplY3RH
ZXRUeXBlZEFycmF5Qnl0ZUxlbmd0aChjb250ZXh0LCBvYmplY3RSZWYsIGV4Y2VwdGlvbik7CiAK
LSAgICByZXR1cm4geyBidWZmZXIsIGxlbmd0aCB9OworICAgIHJldHVybiB7IHN0YXRpY19jYXN0
PHN0ZDo6Ynl0ZSo+KGJ1ZmZlciksIGxlbmd0aCB9OwogfQogCiBKU1ZhbHVlUmVmIEpTU2hhcmVk
TWVtb3J5Ojp3cml0ZUJ5dGVzKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKQEAgLTQ4NywxMyArNDgyLDEz
IEBAIEpTVmFsdWVSZWYgSlNTaGFyZWRNZW1vcnk6OndyaXRlQnl0ZXMoSlMKICAgICB9CiAKICAg
ICBhdXRvIGRhdGEgPSBhcnJheUJ1ZmZlckRhdGFGcm9tVmFsdWVSZWYoY29udGV4dCwgdHlwZSwg
YXJndW1lbnRzWzBdLCBleGNlcHRpb24pOwotICAgIGlmICghZGF0YS5idWZmZXIpIHsKKyAgICBp
ZiAoIWRhdGEuZGF0YSgpKSB7CiAgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3Io
Y29udGV4dCwgIkNvdWxkIG5vdCByZWFkIHRoZSBidWZmZXIiX3MpOwogICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAgICAgfQogCiAgICAgc2l6ZV90IG9mZnNl
dCA9IDA7Ci0gICAgc2l6ZV90IGxlbmd0aCA9IGRhdGEubGVuZ3RoOworICAgIHNpemVfdCBsZW5n
dGggPSBkYXRhLnNpemUoKTsKICAgICBzaXplX3Qgc2hhcmVkTWVtb3J5U2l6ZSA9IGpzU2hhcmVk
TWVtb3J5LT5tX3NoYXJlZE1lbW9yeS0+c2l6ZSgpOwogCiAgICAgYXV0byogZ2xvYmFsT2JqZWN0
ID0gdG9KUyhjb250ZXh0KTsKQEAgLTUyNiw3ICs1MjEsNyBAQCBKU1ZhbHVlUmVmIEpTU2hhcmVk
TWVtb3J5Ojp3cml0ZUJ5dGVzKEpTCiAgICAgICAgIGxlbmd0aCA9ICpsZW5ndGhWYWx1ZTsKICAg
ICB9CiAKLSAgICBtZW1jcHkoc3RhdGljX2Nhc3Q8dWludDhfdCo+KGpzU2hhcmVkTWVtb3J5LT5t
X3NoYXJlZE1lbW9yeS0+ZGF0YSgpKSArIG9mZnNldCwgZGF0YS5idWZmZXIsIGxlbmd0aCk7Cisg
ICAgbWVtY3B5KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihqc1NoYXJlZE1lbW9yeS0+bV9zaGFyZWRN
ZW1vcnktPmRhdGEoKSkgKyBvZmZzZXQsIGRhdGEuZGF0YSgpLCBsZW5ndGgpOwogCiAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQpAQCAtNjg4LDEwICs2ODMsMTAg
QEAgc3RhdGljIGJvb2wgZW5jb2RlVHlwZWRBcnJheShJUEM6OkVuY29kZQogICAgIEFTU0VSVCh0
eXBlICE9IGtKU1R5cGVkQXJyYXlUeXBlTm9uZSk7CiAKICAgICBhdXRvIGRhdGEgPSBhcnJheUJ1
ZmZlckRhdGFGcm9tVmFsdWVSZWYoY29udGV4dCwgdHlwZSwgdmFsdWVSZWYsIGV4Y2VwdGlvbik7
Ci0gICAgaWYgKCFkYXRhLmJ1ZmZlcikKKyAgICBpZiAoIWRhdGEuZGF0YSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmJ1ZmZlciksIGRhdGEubGVuZ3RoLCAxKTsK
KyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShkYXRhKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9FbnZpcm9ubWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9FbnZpcm9ubWVudC5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRW52aXJvbm1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTYsNyArMTU2LDcgQEAgYm9vbCBFbnZpcm9ubWVudDo6Y29tcHV0
ZUlzRGVidWdIZWFwRW5hYgogICAgIHJldHVybiB0cnVlOwogI2VuZGlmCiAKLSAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKSW5k
ZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDI3IEBACisyMDIxLTA2LTExICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAg
ICAgICBBZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
Y2Fpcm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmNwcDoKKyAgICAgICAgKGNvbXB1dGVTSEExSGFz
aFN0cmluZ0ZvckJpdG1hcENvbnRleHQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2NnL1Bp
eGVsRHVtcFN1cHBvcnRDRy5jcHA6CisgICAgICAgIChjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JC
aXRtYXBDb250ZXh0KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9CbG9vbUZp
bHRlci5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpnZW5lcmF0ZVJhbmRvbURpZ2VzdHMp
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2Nv
Y29hL0hUVFBTZXJ2ZXIubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9uOjp3
ZWJTb2NrZXRIYW5kc2hha2UpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvY2Fpcm8vVGVz
dEludm9jYXRpb25DYWlyby5jcHA6CisgICAgICAgIChXVFI6OmNvbXB1dGVTSEExSGFzaFN0cmlu
Z0ZvckNhaXJvU3VyZmFjZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52
b2NhdGlvbkNHLmNwcDoKKyAgICAgICAgKFdUUjo6Y29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQ29u
dGV4dCk6CisKIDIwMjEtMDYtMTEgIEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29u
eS5jb20+CiAKICAgICAgICAgW1dpbl1bRHVtcFJlbmRlclRyZWVdIC0tbm8tdGltZW91dCBzd2l0
Y2ggZG9lc24ndCB3b3JrCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1
bXBTdXBwb3J0Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nh
aXJvL1BpeGVsRHVtcFN1cHBvcnRDYWlyby5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL2NhaXJvL1BpeGVsRHVtcFN1cHBvcnRDYWlyby5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JCaXRt
YXBDb250ZQogICAgIFNIQTEgc2hhMTsKICAgICB1bnNpZ25lZCBjaGFyKiBiaXRtYXBEYXRhID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEo
c3VyZmFjZSkpOwogICAgIGZvciAodW5zaWduZWQgcm93ID0gMDsgcm93IDwgcGl4ZWxzSGlnaDsg
cm93KyspIHsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lk
ZSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IGJpdG1hcERhdGEsIDQgKiBwaXhlbHNX
aWRlIH0pOwogICAgICAgICBiaXRtYXBEYXRhICs9IGJ5dGVzUGVyUm93OwogICAgIH0KICAgICBT
SEExOjpEaWdlc3QgaGFzaDsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVt
cFN1cHBvcnRDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2cvUGl4
ZWxEdW1wU3VwcG9ydENHLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2cvUGl4ZWxEdW1wU3VwcG9ydENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTQg
Kzg4LDE0IEBAIHZvaWQgY29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQml0bWFwQ29udGUKICAgICAg
ICAgICAgIHVpbnQzMl90IGJ1ZmZlcltwaXhlbHNXaWRlXTsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgY29sdW1uID0gMDsgY29sdW1uIDwgcGl4ZWxzV2lkZTsgY29sdW1uKyspCiAgICAgICAg
ICAgICAgICAgYnVmZmVyW2NvbHVtbl0gPSBPU1JlYWRMaXR0bGVJbnQzMihiaXRtYXBEYXRhLCA0
ICogY29sdW1uKTsKLSAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50OF90Kj4oYnVmZmVyKSwgNCAqIHBpeGVsc1dpZGUpOworICAgICAgICAgICAgc2hh
MS5hZGRCeXRlcyhTcGFuIHsgYnVmZmVyLCBwaXhlbHNXaWRlIH0pOwogICAgICAgICAgICAgYml0
bWFwRGF0YSArPSBieXRlc1BlclJvdzsKICAgICAgICAgfQogICAgIH0gZWxzZQogI2VuZGlmCiAg
ICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIHJvdyA9IDA7IHJvdyA8IHBpeGVsc0hpZ2g7IHJv
dysrKSB7Ci0gICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGJpdG1hcERhdGEsIDQgKiBwaXhlbHNX
aWRlKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IGJpdG1hcERhdGEsIDQgKiBw
aXhlbHNXaWRlIH0pOwogICAgICAgICAgICAgYml0bWFwRGF0YSArPSBieXRlc1BlclJvdzsKICAg
ICAgICAgfQogICAgIH0KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0Jsb29t
RmlsdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9C
bG9vbUZpbHRlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL0Jsb29tRmlsdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBA
QCBzdGF0aWMgVmVjdG9yPFNIQTE6OkRpZ2VzdD4gZ2VuZXJhdGVSYW5kCiAgICAgU0hBMSBzaGEx
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBoYXNoQ291bnQ7ICsraSkgewogICAgICAg
ICBkb3VibGUgcmFuZG9tID0gcmFuZG9tTnVtYmVyKCk7Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMo
cmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnJhbmRvbSksIHNpemVvZihkb3VibGUpKTsKKyAg
ICAgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgJnJhbmRvbSwgMSB9KTsKICAgICAgICAgU0hBMTo6
RGlnZXN0IGRpZ2VzdDsKICAgICAgICAgc2hhMS5jb21wdXRlSGFzaChkaWdlc3QpOwogICAgICAg
ICBoYXNoZXMuYXBwZW5kKGRpZ2VzdCk7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9GaWxlU3lzdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9GaWxlU3lzdGVtLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw4
ICsxMzMsOCBAQCBURVNUX0YoRmlsZVN5c3RlbVRlc3QsIE1hcHBpbmdFeGlzdGluZ0ZpCiAgICAg
RmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEgbWFwcGVkRmlsZURhdGEodGVtcEZpbGVQYXRoKCks
IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVNb2RlOjpTaGFyZWQsIHN1Y2Nlc3MpOwogICAgIEVYUEVD
VF9UUlVFKHN1Y2Nlc3MpOwogICAgIEVYUEVDVF9UUlVFKCEhbWFwcGVkRmlsZURhdGEpOwotICAg
IEVYUEVDVF9UUlVFKG1hcHBlZEZpbGVEYXRhLnNpemUoKSA9PSBzdHJsZW4oRmlsZVN5c3RlbVRl
c3REYXRhKSk7Ci0gICAgRVhQRUNUX1RSVUUoc3RybnN0cihGaWxlU3lzdGVtVGVzdERhdGEsIHN0
YXRpY19jYXN0PGNvbnN0IGNoYXIqPihtYXBwZWRGaWxlRGF0YS5kYXRhKCkpLCBtYXBwZWRGaWxl
RGF0YS5zaXplKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShtYXBwZWRGaWxlRGF0YS5kYXRhKCkuc2l6
ZSgpID09IHN0cmxlbihGaWxlU3lzdGVtVGVzdERhdGEpKTsKKyAgICBFWFBFQ1RfVFJVRShzdHJu
c3RyKEZpbGVTeXN0ZW1UZXN0RGF0YSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4obWFw
cGVkRmlsZURhdGEuZGF0YSgpLmRhdGEoKSksIG1hcHBlZEZpbGVEYXRhLmRhdGEoKS5zaXplKCkp
KTsKIH0KIAogVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBNYXBwaW5nRXhpc3RpbmdFbXB0eUZpbGUp
CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TSEExLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TSEExLmNwcAkocmV2aXNpb24gMjc4
ODA5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU0hBMS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDcgKzM4LDcgQEAgc3RhdGljIHZvaWQgZXhwZWN0U0hBMShDU3RyaW5nIGlu
cHV0LCBpbgogewogICAgIFNIQTEgc2hhMTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcGVh
dDsgKytpKQotICAgICAgICBzaGExLmFkZEJ5dGVzKGlucHV0KTsKKyAgICAgICAgc2hhMS5hZGRC
eXRlcyhpbnB1dC5ieXRlcygpKTsKICAgICBDU3RyaW5nIGFjdHVhbCA9IHNoYTEuY29tcHV0ZUhl
eERpZ2VzdCgpOwogCiAgICAgQVNTRVJUX0VRKGV4cGVjdGVkLmxlbmd0aCgpLCBhY3R1YWwubGVu
Z3RoKCkpOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbQkocmV2
aXNpb24gMjc4ODA5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0zNDAsMTEgKzM0MCwxMSBAQCB2b2lkIENvbm5lY3Rpb246Ondl
YlNvY2tldEhhbmRzaGFrZShDb21wCiAKICAgICAgICAgICAgIGNvbnN0ZXhwciBhdXRvKiB3ZWJT
b2NrZXRLZXlHVUlEID0gIjI1OEVBRkE1LUU5MTQtNDdEQS05NUNBLUM1QUIwREM4NUIxMSI7CiAg
ICAgICAgICAgICBTSEExIHNoYTE7Ci0gICAgICAgICAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGtleUJlZ2luKSwga2V5RW5kIC0ga2V5QmVnaW4pOwot
ICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3Qq
Pih3ZWJTb2NrZXRLZXlHVUlEKSwgc3RybGVuKHdlYlNvY2tldEtleUdVSUQpKTsKKyAgICAgICAg
ICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IGtleUJlZ2luLCBrZXlFbmQgfSk7CisgICAgICAgICAg
ICBzaGExLmFkZEJ5dGVzKFNwYW4geyB3ZWJTb2NrZXRLZXlHVUlELCBzdHJsZW4od2ViU29ja2V0
S2V5R1VJRCkgfSk7CiAgICAgICAgICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAgICAgICAgICAg
IHNoYTEuY29tcHV0ZUhhc2goaGFzaCk7Ci0gICAgICAgICAgICByZXR1cm4gYmFzZTY0RW5jb2Rl
VG9TdHJpbmcoaGFzaC5kYXRhKCksIFNIQTE6Omhhc2hTaXplKTsKKyAgICAgICAgICAgIHJldHVy
biBiYXNlNjRFbmNvZGVUb1N0cmluZyhoYXNoKTsKICAgICAgICAgfTsKIAogICAgICAgICBjb25u
ZWN0aW9uLnNlbmQoSFRUUFJlc3BvbnNlKDEwMSwgewpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9jYWlyby9UZXN0SW52b2NhdGlvbkNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fp
cm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyB2b2lkIGNvbXB1
dGVTSEExSGFzaFN0cmluZ0ZvckNhaXIKICAgICBTSEExIHNoYTE7CiAgICAgdW5zaWduZWQgY2hh
ciogYml0bWFwRGF0YSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpKTsKICAgICBmb3IgKHNpemVfdCByb3cgPSAwOyByb3cg
PCBwaXhlbHNIaWdoOyArK3JvdykgewotICAgICAgICBzaGExLmFkZEJ5dGVzKGJpdG1hcERhdGEs
IDQgKiBwaXhlbHNXaWRlKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgYml0bWFwRGF0
YSwgNCAqIHBpeGVsc1dpZGUgfSk7CiAgICAgICAgIGJpdG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7
CiAgICAgfQogICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBU
b29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05NCw3ICs5NCw3IEBAIHZvaWQgY29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQ29udGV4
dChDR0MKICNlbmRpZgogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCByb3cgPSAwOyByb3cg
PCBwaXhlbHNIaWdoOyByb3crKykgewotICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhiaXRtYXBE
YXRhLCA0ICogcGl4ZWxzV2lkZSk7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyBi
aXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lkZSB9KTsKICAgICAgICAgICAgIGJpdG1hcERhdGEgKz0g
Ynl0ZXNQZXJSb3c7CiAgICAgICAgIH0KICAgICB9Cg==
</data>
<flag name="commit-queue"
          id="453039"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431294</attachid>
            <date>2021-06-13 16:12:55 -0700</date>
            <delta_ts>2021-06-13 19:06:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226887-20210613161254.patch</filename>
            <type>text/plain</type>
            <size>203099</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBA
CisyMDIxLTA2LTEyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogQVBJL0pTU2NyaXB0Lm1tOgorICAg
ICAgICAoK1tKU1NjcmlwdCBzY3JpcHRPZlR5cGU6bWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTp3
aXRoU291cmNlVVJMOmFuZEJ5dGVjb2RlQ2FjaGU6aW5WaXJ0dWFsTWFjaGluZTplcnJvcjpdKToK
KyAgICAgICAgKC1bSlNTY3JpcHQgcmVhZENhY2hlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHdy
aXRlQ2FjaGU6XSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9ja0hhc2g6OkNvZGVCbG9ja0hhc2gpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHA6CisgICAgICAgIChJbnNw
ZWN0b3I6OmJhY2tlbmRDb21tYW5kc0hhc2gpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZm
ZXIuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJDb250ZW50czo6d3JpdGFibGVCeXRlcyk6
CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyQ29udGVudHM6OmJ5dGVzIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6QXJyYXlCdWZmZXI6OndyaXRhYmxlQnl0ZXMpOgorICAgICAgICAoSlNDOjpBcnJh
eUJ1ZmZlcjo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
Lmg6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6d3JpdGFibGVCeXRlcyk6CisgICAg
ICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRp
bWUvQ2FjaGVQYXlsb2FkLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVQYXlsb2FkOjptYWtlTWFw
cGVkUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6bWFrZU1hbGxvY1BheWxv
YWQpOgorICAgICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6Om1ha2VFbXB0eVBheWxvYWQpOgorICAg
ICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6OkNhY2hlUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNh
Y2hlUGF5bG9hZDo6ZnJlZURhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVQYXlsb2FkLmg6
CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6ZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlUGF5bG9hZDo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6
Q2FjaGVQYXlsb2FkKToKKyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKToKKwogMjAyMS0w
Ni0xMSAgUGF0cmljayBBbmdsZSAgPHBhbmdsZUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogQWRkIGluc3RydW1lbnRhdGlvbiB0byBub2RlIGRlc3RydWN0aW9uIGZvciBJbnNw
ZWN0b3JET01BZ2VudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMTMgKzEzNCwxMyBAQCArIChpbnN0YW5jZXR5cGUpc2Ny
aXB0T2ZUeXBlOihKU1NjcmlwdFR5CiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4g
Y3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJGaWxlIGF0IHBhdGggJUAg
Y291bGQgbm90IGJlIG1hcHBlZC4iLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihzeXN0ZW1QYXRo
KV0sIGVycm9yKTsKIAotICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCkpKQor
ICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmlsZURhdGEuZGF0YSgpLnNpemUoKSkpCiAg
ICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIk5v
dCBhbGwgY2hhcmFjdGVycyBpbiBmaWxlIGF0ICVAIGFyZSBBU0NJSS4iLCBzdGF0aWNfY2FzdDxO
U1N0cmluZyAqPihzeXN0ZW1QYXRoKV0sIGVycm9yKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gYWRv
cHROUyhbW0pTU2NyaXB0IGFsbG9jXSBpbml0XSk7CiAgICAgcmVzdWx0LT5tX3ZpcnR1YWxNYWNo
aW5lID0gdm07CiAgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOwotICAgIHJlc3VsdC0+bV9zb3Vy
Y2UgPSBTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcoYml0d2lzZV9jYXN0
PGNvbnN0IExDaGFyKj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpKSk7CisgICAg
cmVzdWx0LT5tX3NvdXJjZSA9IFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWlu
ZyhiaXR3aXNlX2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmls
ZURhdGEuZGF0YSgpLnNpemUoKSkpOwogICAgIHJlc3VsdC0+bV9tYXBwZWRTb3VyY2UgPSBXVEZN
b3ZlKGZpbGVEYXRhKTsKICAgICByZXN1bHQtPm1fc291cmNlVVJMID0gc291cmNlVVJMOwogICAg
IHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7CkBAIC0xNjgsMjQgKzE2OCwyMyBAQCAt
ICh2b2lkKXJlYWRDYWNoZQogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgY29uc3QgdWludDhfdCogZmlsZURhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihtYXBwZWRGaWxlLmRhdGEoKSk7Ci0gICAgdW5zaWduZWQgZmlsZVRvdGFsU2l6ZSA9IG1h
cHBlZEZpbGUuc2l6ZSgpOworICAgIGF1dG8gZmlsZURhdGEgPSBtYXBwZWRGaWxlLmRhdGEoKTsK
IAogICAgIC8vIEVuc3VyZSB3ZSBhdCBsZWFzdCBoYXZlIGEgU0hBMTo6RGlnZXN0IHRvIHJlYWQu
Ci0gICAgaWYgKGZpbGVUb3RhbFNpemUgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgeworICAgIGlm
IChmaWxlRGF0YS5zaXplKCkgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgewogICAgICAgICBGaWxl
U3lzdGVtOjpkZWxldGVGaWxlKGNhY2hlRmlsZW5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgdW5zaWduZWQgZmlsZURhdGFTaXplID0gZmlsZVRvdGFsU2l6ZSAtIHNpemVvZihT
SEExOjpEaWdlc3QpOworICAgIHVuc2lnbmVkIGZpbGVEYXRhU2l6ZSA9IGZpbGVEYXRhLnNpemUo
KSAtIHNpemVvZihTSEExOjpEaWdlc3QpOwogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFz
aDsKICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhmaWxlRGF0YSwgZmlsZURhdGFT
aXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKGZpbGVEYXRhLmZpcnN0KGZpbGVEYXRhU2l6ZSkpOwog
ICAgIHNoYTEuY29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2VzdCBm
aWxlSGFzaDsKLSAgICBtZW1jcHkoJmZpbGVIYXNoLCBmaWxlRGF0YSArIGZpbGVEYXRhU2l6ZSwg
c2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOworICAgIG1lbWNweSgmZmlsZUhhc2gsIGZpbGVEYXRhLmRh
dGEoKSArIGZpbGVEYXRhU2l6ZSwgc2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOwogCiAgICAgaWYgKGNv
bXB1dGVkSGFzaCAhPSBmaWxlSGFzaCkgewogICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxl
KGNhY2hlRmlsZW5hbWUpOwpAQCAtMzQzLDcgKzM0Miw3IEBAIC0gKEJPT0wpd3JpdGVDYWNoZToo
U3RyaW5nJillcnJvcgogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFzaDsKICAgICBTSEEx
IHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhtX2NhY2hlZEJ5dGVjb2RlLT5kYXRhKCksIG1fY2Fj
aGVkQnl0ZWNvZGUtPnNpemUoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgbV9jYWNoZWRC
eXRlY29kZS0+ZGF0YSgpLCBtX2NhY2hlZEJ5dGVjb2RlLT5zaXplKCkgfSk7CiAgICAgc2hhMS5j
b21wdXRlSGFzaChjb21wdXRlZEhhc2gpOwogICAgIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKHRl
bXBGRCwgY29tcHV0ZWRIYXNoLmRhdGEoKSwgc2l6ZW9mKGNvbXB1dGVkSGFzaCkpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0hhc2guY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgQ29kZUJsb2Nr
SGFzaDo6Q29kZUJsb2NrSGFzaChjb25zdCBTb3VyYwogICAgIEFTU0VSVChzb3VyY2VDb2RlLmxl
bmd0aCgpID49IDApOwogICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhTb3VyY2VDb2RlTGVuZ3Ro
VG9IYXNoID0gNTAwICogTUI7CiAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzb3VyY2VD
b2RlLmxlbmd0aCgpKSA8IG1heFNvdXJjZUNvZGVMZW5ndGhUb0hhc2gpCi0gICAgICAgIHNoYTEu
YWRkQnl0ZXMoc291cmNlQ29kZS50b1VURjgoKSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoc291
cmNlQ29kZS50b1VURjgoKS5ieXRlcygpKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gSnVzdCBo
YXNoIHdpdGggdGhlIGxlbmd0aCBhbmQgc2FtcGxlcyBvZiB0aGUgc291cmNlIHN0cmluZyBpbnN0
ZWFkLgogICAgICAgICBTdHJpbmdWaWV3IHN0ciA9IHNvdXJjZUNvZGUucHJvdmlkZXIoKS0+c291
cmNlKCk7CkBAIC02MiwxMCArNjIsMTAgQEAgQ29kZUJsb2NrSGFzaDo6Q29kZUJsb2NrSGFzaChj
b25zdCBTb3VyYwogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHIubGVuZ3RoKCk7CiAgICAg
ICAgIHVuc2lnbmVkIHN0ZXAgPSAobGVuZ3RoID4+IDEwKSArIDE7CiAKLSAgICAgICAgc2hhMS5h
ZGRCeXRlcyhiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KCZsZW5ndGgpLCBzaXplb2YobGVuZ3RoKSk7
CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZsZW5ndGgsIDEgfSk7CiAgICAgICAgIGRv
IHsKICAgICAgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IHN0cltpbmRleF07Ci0gICAgICAgICAg
ICBzaGExLmFkZEJ5dGVzKGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oJmNoYXJhY3RlciksIHNpemVv
ZihjaGFyYWN0ZXIpKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZjaGFyYWN0
ZXIsIDEgfSk7CiAgICAgICAgICAgICBvbGRJbmRleCA9IGluZGV4OwogICAgICAgICAgICAgaW5k
ZXggKz0gc3RlcDsKICAgICAgICAgfSB3aGlsZSAoaW5kZXggPiBvbGRJbmRleCAmJiBpbmRleCA8
IGxlbmd0aCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VIYXNo
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VI
YXNoLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BhcnNlSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiBQYXJzZUhhc2g6OlBhcnNlSGFzaChjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VD
b2RlKQogewogICAgIFNIQTEgc2hhMTsKLSAgICBzaGExLmFkZEJ5dGVzKHNvdXJjZUNvZGUudG9V
VEY4KCkpOworICAgIHNoYTEuYWRkQnl0ZXMoc291cmNlQ29kZS50b1VURjgoKS5ieXRlcygpKTsK
ICAgICBTSEExOjpEaWdlc3QgZGlnZXN0OwogICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsK
ICAgICB1bnNpZ25lZCBoYXNoID0gZGlnZXN0WzBdIHwgKGRpZ2VzdFsxXSA8PCA4KSB8IChkaWdl
c3RbMl0gPDwgMTYpIHwgKGRpZ2VzdFszXSA8PCAyNCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1JlbW90ZUluc3BlY3RvclV0aWxzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1Jl
bW90ZUluc3BlY3RvclV0aWxzLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgY29uc3QgQ1N0cmluZyYgYmFja2VuZENv
bW1hbmRzSGFzaCgpCiAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSA9IGdfYnl0ZXNfZ2V0X2Rh
dGEoYnl0ZXMuZ2V0KCksICZkYXRhU2l6ZSk7CiAgICAgICAgIEFTU0VSVChkYXRhU2l6ZSk7CiAg
ICAgICAgIFNIQTEgc2hhMTsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhzdGF0aWNfY2FzdDxjb25z
dCB1aW50OF90Kj4oZGF0YSksIGRhdGFTaXplKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFu
IHsgc3RhdGljX2Nhc3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSksIGRhdGFTaXplIH0pOwogICAg
ICAgICBoZXhEaWdlc3QgPSBzaGExLmNvbXB1dGVIZXhEaWdlc3QoKTsKICAgICB9CiAgICAgcmV0
dXJuIGhleERpZ2VzdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogI2luY2x1ZGUgPHd0Zi9QYWNrZWRSZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZl
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtODAsNyAr
ODEsMTAgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBt
X2RhdGEuZ2V0TWF5QmVOdWxsKHNpemVJbkJ5dGVzKCkpOyB9CiAgICAgdW5zaWduZWQgc2l6ZUlu
Qnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX3NpemVJbkJ5dGVzOyB9Ci0gICAgCisKKyAgICBTcGFu
PHN0ZDo6Ynl0ZT4gd3JpdGFibGVCeXRlcygpIHsgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8c3RkOjpi
eXRlKj4oZGF0YSgpKSwgc2l6ZUluQnl0ZXMoKSB9OyB9CisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4geyBzdGF0aWNfY2FzdDxjb25zdCBzdGQ6OmJ5dGUq
PihkYXRhKCkpLCBzaXplSW5CeXRlcygpIH07IH0KKwogICAgIGJvb2wgaXNTaGFyZWQoKSBjb25z
dCB7IHJldHVybiBtX3NoYXJlZDsgfQogICAgIAogcHJpdmF0ZToKQEAgLTEyNyw3ICsxMzEsOSBA
QCBwdWJsaWM6CiAgICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKICAgICBpbmxpbmUgY29uc3Qgdm9p
ZCogZGF0YSgpIGNvbnN0OwogICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7
Ci0gICAgCisgICAgaW5saW5lIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCk7CisgICAg
aW5saW5lIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAgICAgdm9pZCBt
YWtlU2hhcmVkKCk7CiAgICAgdm9pZCBzZXRTaGFyaW5nTW9kZShBcnJheUJ1ZmZlclNoYXJpbmdN
b2RlKTsKICAgICBpbmxpbmUgYm9vbCBpc1NoYXJlZCgpIGNvbnN0OwpAQCAtMTk3LDYgKzIwMywx
NiBAQCB1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJu
IG1fY29udGVudHMuc2l6ZUluQnl0ZXMoKTsKIH0KIAorU3BhbjxzdGQ6OmJ5dGU+IEFycmF5QnVm
ZmVyOjp3cml0YWJsZUJ5dGVzKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZW50cy53cml0YWJsZUJ5
dGVzKCk7Cit9CisKK1NwYW48Y29uc3Qgc3RkOjpieXRlPiBBcnJheUJ1ZmZlcjo6Ynl0ZXMoKSBj
b25zdAoreworICAgIHJldHVybiBtX2NvbnRlbnRzLmJ5dGVzKCk7Cit9CisKIGJvb2wgQXJyYXlC
dWZmZXI6OmlzU2hhcmVkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb250ZW50cy5pc1NoYXJl
ZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZm
ZXJWaWV3LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4Niw5IEBAIHB1
YmxpYzoKIAogICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVM
ZW5ndGg7IH0KIAorICAgIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCkgeyByZXR1cm4g
eyBzdGF0aWNfY2FzdDxzdGQ6OmJ5dGUqPihkYXRhKCkpLCBieXRlTGVuZ3RoKCkgfTsgfQorICAg
IFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0IHsgcmV0dXJuIHsgc3RhdGljX2Nh
c3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSgpKSwgYnl0ZUxlbmd0aCgpIH07IH0KKwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0RGV0YWNoYWJsZShib29sKTsKICAgICBib29sIGlzRGV0
YWNoYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNEZXRhY2hhYmxlOyB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlUGF5bG9hZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsMjcgKzMwLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogCiBD
YWNoZVBheWxvYWQgQ2FjaGVQYXlsb2FkOjptYWtlTWFwcGVkUGF5bG9hZChGaWxlU3lzdGVtOjpN
YXBwZWRGaWxlRGF0YSYmIGRhdGEpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZCh0cnVlLCBk
YXRhLmxlYWtIYW5kbGUoKSwgZGF0YS5zaXplKCkpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQo
dHJ1ZSwgZGF0YS5sZWFrSGFuZGxlKCkpOwogfQogCiBDYWNoZVBheWxvYWQgQ2FjaGVQYXlsb2Fk
OjptYWtlTWFsbG9jUGF5bG9hZChNYWxsb2NQdHI8dWludDhfdCwgVk1NYWxsb2M+JiYgZGF0YSwg
c2l6ZV90IHNpemUpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZChmYWxzZSwgZGF0YS5sZWFr
UHRyKCksIHNpemUpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQoZmFsc2UsIGFzV3JpdGFibGVC
eXRlcyhTcGFuIHsgZGF0YS5sZWFrUHRyKCksIHNpemUgfSkpOwogfQogCiBDYWNoZVBheWxvYWQg
Q2FjaGVQYXlsb2FkOjptYWtlRW1wdHlQYXlsb2FkKCkKIHsKLSAgICByZXR1cm4gQ2FjaGVQYXls
b2FkKHRydWUsIG51bGxwdHIsIDApOworICAgIHJldHVybiBDYWNoZVBheWxvYWQodHJ1ZSwgeyB9
KTsKIH0KIAogQ2FjaGVQYXlsb2FkOjpDYWNoZVBheWxvYWQoQ2FjaGVQYXlsb2FkJiYgb3RoZXIp
CiB7Ci0gICAgbV9tYXBwZWQgPSBvdGhlci5tX21hcHBlZDsKLSAgICBtX3NpemUgPSBvdGhlci5t
X3NpemU7Ci0gICAgbV9kYXRhID0gb3RoZXIubV9kYXRhOwotICAgIG90aGVyLm1fbWFwcGVkID0g
ZmFsc2U7Ci0gICAgb3RoZXIubV9kYXRhID0gbnVsbHB0cjsKLSAgICBvdGhlci5tX3NpemUgPSAw
OworICAgIG1fbWFwcGVkID0gc3RkOjpleGNoYW5nZShvdGhlci5tX21hcHBlZCwgZmFsc2UpOwor
ICAgIG1fZGF0YSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLCB7IH0pOwogfQogCiBDYWNo
ZVBheWxvYWQ6On5DYWNoZVBheWxvYWQoKQpAQCAtNjcsMTIgKzYzLDEzIEBAIENhY2hlUGF5bG9h
ZCYgQ2FjaGVQYXlsb2FkOjpvcGVyYXRvcj0oQ2EKIAogdm9pZCBDYWNoZVBheWxvYWQ6OmZyZWVE
YXRhKCkKIHsKLSAgICBpZiAoIW1fZGF0YSkKKyAgICBpZiAoIW1fZGF0YS5kYXRhKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBpZiAobV9tYXBwZWQpIHsKLSAgICAgICAgRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1fZGF0YSwgbV9zaXplKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZmFzdEZy
ZWUobV9kYXRhKTsKKworICAgIGlmIChtX21hcHBlZCkKKyAgICAgICAgRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1fZGF0YSk7CisgICAgZWxzZQorICAgICAgICBmYXN0RnJlZShtX2RhdGEu
ZGF0YSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHd0Zi9GaWxlU3lz
dGVtLmg+CiAjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MSwyMiArNDIsMjAgQEAgcHVibGljOgogICAgIEpT
X0VYUE9SVF9QUklWQVRFIH5DYWNoZVBheWxvYWQoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBD
YWNoZVBheWxvYWQmIG9wZXJhdG9yPShDYWNoZVBheWxvYWQmJiBvdGhlcik7CiAKLSAgICBjb25z
dCB1aW50OF90KiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBjb25zdCB1aW50OF90KiBkYXRhKCkg
Y29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9kYXRhLmRhdGEoKSk7
IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5zaXplKCk7IH0KIAog
cHJpdmF0ZToKLSAgICBDYWNoZVBheWxvYWQoYm9vbCBtYXBwZWQsIHZvaWQqIGRhdGEsIHNpemVf
dCBzaXplKQorICAgIENhY2hlUGF5bG9hZChib29sIG1hcHBlZCwgU3BhbjxzdGQ6OmJ5dGU+IGRh
dGEpCiAgICAgICAgIDogbV9tYXBwZWQobWFwcGVkKQotICAgICAgICAsIG1fc2l6ZShzaXplKQot
ICAgICAgICAsIG1fZGF0YShzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGF0YSkpCisgICAgICAgICwg
bV9kYXRhKGRhdGEpCiAgICAgewogICAgIH0KIAogICAgIHZvaWQgZnJlZURhdGEoKTsKIAogICAg
IGJvb2wgbV9tYXBwZWQ7Ci0gICAgc2l6ZV90IG1fc2l6ZTsKLSAgICB1aW50OF90KiBtX2RhdGE7
CisgICAgU3BhbjxzdGQ6OmJ5dGU+IG1fZGF0YTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1Bh
cnNlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNyArMjYxLDcg
QEAgYXV0byBTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKGNvbnN0IHVpbgogICAgIH0KIAogICAg
IGlmIChVTkxJS0VMWShPcHRpb25zOjp1c2VFYWdlcldlYkFzc2VtYmx5TW9kdWxlSGFzaGluZygp
KSkKLSAgICAgICAgbV9oYXNoZXIuYWRkQnl0ZXMoYnl0ZXMsIGJ5dGVzU2l6ZSk7CisgICAgICAg
IG1faGFzaGVyLmFkZEJ5dGVzKFNwYW4geyBieXRlcywgYnl0ZXNTaXplIH0pOwogCiAgICAgc2l6
ZV90IG9mZnNldEluQnl0ZXMgPSAwOwogICAgIHdoaWxlICh0cnVlKSB7CkluZGV4OiBTb3VyY2Uv
V1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw2OCBAQAorMjAyMS0wNi0xMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgQWRvcHQgU3BhbiBpbiBtb3JlIHBsYWNlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIFdURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmNwcDoKKyAgICAg
ICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjp+TWFwcGVkRmlsZURhdGEp
OgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6TWFwcGVkRmlsZURhdGE6Om1hcEZpbGVI
YW5kbGUpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6dW5tYXBWaWV3T2ZGaWxlKToK
KyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Om1hcFRvRmlsZSk6CisgICAgICAgICogd3Rm
L0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVE
YXRhOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6
Ok1hcHBlZEZpbGVEYXRhOjpkYXRhIGNvbnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUlt
cGw6Ok1hcHBlZEZpbGVEYXRhOjpsZWFrSGFuZGxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3Rl
bUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YSk6CisgICAgICAgIChXVEY6OkZp
bGVTeXN0ZW1JbXBsOjpNYXBwZWRGaWxlRGF0YTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6
RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpzaXplIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1NIQTEuY3BwOgorICAgICAgICAoV1RG
OjpTSEExOjphZGRCeXRlcyk6CisgICAgICAgIChXVEY6OlNIQTE6OmZpbmFsaXplKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6U0hBMTo6cHJvY2Vzc0Jsb2NrKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6U0hBMTo6cmVzZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTSEExOjpoZXhEaWdl
c3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTSEExOjpjb21wdXRlSGV4RGlnZXN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3dGYvU0hBMS5oOgorICAgICAgICAoV1RGOjpTSEExOjphZGRCeXRl
cyk6CisgICAgICAgICogd3RmL1ZlY3Rvci5oOgorICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZS9Q
ZXJzaXN0ZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPENT
dHJpbmc+OjplbmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8Q1N0cmlu
Zz46OmRlY29kZSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTdHJpbmc+Ojpl
bmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVjb2RlU3RyaW5nVGV4dCk6Cisg
ICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUpOgor
ICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKToK
KyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oOgorICAgICAgICAq
IHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5jcHA6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyOjpEZWNvZGVyKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6
OkRlY29kZXI6OmJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFkKToKKyAgICAgICAgKFdURjo6UGVy
c2lzdGVuY2U6OkRlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjp2ZXJpZnlDaGVja3N1bSk6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyOjp+RGVjb2Rlcik6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3Bl
cnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmg6CisgICAgICAgICogd3RmL3BlcnNpc3RlbmNl
L1BlcnNpc3RlbnRFbmNvZGVyLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29k
ZXI6Omdyb3cpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6dXBkYXRlQ2hl
Y2tzdW1Gb3JEYXRhKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6OmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjpl
bmNvZGVOdW1iZXIpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6ZW5jb2Rl
Q2hlY2tzdW0pOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6RW5jb2Rlcik6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjp+RW5jb2Rlcik6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmg6
CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjpidWZmZXIgY29uc3QpOgorICAg
ICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIp
OgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6YnVmZmVyU2l6ZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL3RleHQvQmFzZTY0Lmg6CisgICAgICAgIChXVEY6OmJh
c2U2NEVuY29kZVRvVmVjdG9yKToKKyAgICAgICAgKFdURjo6YmFzZTY0RW5jb2RlVG9TdHJpbmcp
OgorICAgICAgICAqIHd0Zi90ZXh0L0NTdHJpbmcuaDoKKwogMjAyMS0wNi0xMSAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgV2Vha0hhc2hNYXAKSW5kZXg6
IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtNjkyLDYgKzY5Miw4IEBACiAJCUFEODlCNkI5MUU2NDE1MEYwMDkwNzA3RiAvKiBN
ZW1vcnlQcmVzc3VyZUhhbmRsZXJDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IE1lbW9yeVByZXNzdXJlSGFuZGxlckNvY29hLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBREYyQ0U2NDFFMzlGMTA2MDA2ODg5REIgLyogTWVtb3J5Rm9vdHBy
aW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lbW9yeUZvb3RwcmludC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREYyQ0U2NTFFMzlGMTA2MDA2ODg5REIg
LyogTWVtb3J5Rm9vdHByaW50Q29jb2EuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTWVtb3J5Rm9vdHByaW50Q29jb2EuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlCQzcwMEI0NDI2NzY2ODM0MDA0OUVERjIgLyogU3BhbkNvY29hLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNwYW5Db2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzcwMEI0
NTI2NzY2OUMxMDA0OUVERjIgLyogU3BhbkNGLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwYW5DRi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0EzMEM3RjI2NkQzMDM0MDAwRDIzMEMgLyog
U3Bhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTcGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyQkNGQzNFMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5ndWFnZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYW5ndWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyQkNGQzNGMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5ndWFnZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYW5ndWFnZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtODQwLDYgKzg0Miw3IEBACiAJCQkJQzJCQ0ZDNDExRjYxRDYxNjAwQzky
MjJDIC8qIExhbmd1YWdlQ0YuY3BwICovLAogCQkJCTJDREVEMEVFMTgxMTVDMzgwMDREQkE3MCAv
KiBSdW5Mb29wQ0YuY3BwICovLAogCQkJCUEzRUU1QzNCMjFGRkFDN0MwMEZBQkQ2MSAvKiBTY2hl
ZHVsZVBhaXJDRi5jcHAgKi8sCisJCQkJQkM3MDBCNDUyNjc2NjlDMTAwNDlFREYyIC8qIFNwYW5D
Ri5oICovLAogCQkJCTFBRkRFNjQ3MTk1MjAxQzMwMEM0OEZGQSAvKiBUeXBlQ2FzdHNDRi5oICov
LAogCQkJCTVDMUYwNTk0MjE2NDM3QjMwMDM5MzAyQyAvKiBVUkxDRi5jcHAgKi8sCiAJCQkpOwpA
QCAtMTU4MSw2ICsxNTg0LDcgQEAKIAkJCQkxQ0E4NUNBODI0MUIwQjI2MDA3MUMyRjUgLyogUnVu
dGltZUFwcGxpY2F0aW9uQ2hlY2tzQ29jb2EuY3BwICovLAogCQkJCTFDQTg1Q0E3MjQxQjBCMTEw
MDcxQzJGNSAvKiBSdW50aW1lQXBwbGljYXRpb25DaGVja3NDb2NvYS5oICovLAogCQkJCUEzMEQ0
MTJDMUYwREUwQkEwMEI3MTk1NCAvKiBTb2Z0TGlua2luZy5oICovLAorCQkJCUJDNzAwQjQ0MjY3
NjY4MzQwMDQ5RURGMiAvKiBTcGFuQ29jb2EuaCAqLywKIAkJCQlFQjYxRURDNjI0MDlDQ0MwMDAx
RUZFMzYgLyogU3lzdGVtVHJhY2luZ0NvY29hLmNwcCAqLywKIAkJCQk1Q0MwRUU4NjIxNjJCQzIy
MDBBMUE4NDIgLyogVVJMQ29jb2EubW0gKi8sCiAJCQkJOTMyNDE2NTcyNDNCQzJFNTAwMzJGQUFF
IC8qIFZlY3RvckNvY29hLmggKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxOSw5ICszMTksOSBAQCBib29sIGV4Y2x1ZGVGcm9tQmFja3VwKGNvbnN0IFN0cmluZyYp
CiAKIE1hcHBlZEZpbGVEYXRhOjp+TWFwcGVkRmlsZURhdGEoKQogewotICAgIGlmICghbV9maWxl
RGF0YSkKKyAgICBpZiAoIW1fZmlsZURhdGEuZGF0YSgpKQogICAgICAgICByZXR1cm47Ci0gICAg
dW5tYXBWaWV3T2ZGaWxlKG1fZmlsZURhdGEsIG1fZmlsZVNpemUpOworICAgIHVubWFwVmlld09m
RmlsZShtX2ZpbGVEYXRhKTsKIH0KIAogTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKGNv
bnN0IFN0cmluZyYgZmlsZVBhdGgsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUsIGJvb2wmIHN1Y2Nl
c3MpCkBAIC0zODMsMTQgKzM4MywxMyBAQCBib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFu
ZGxlKFBsYXRmCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBtX2ZpbGVEYXRh
ID0gZGF0YTsKLSAgICBtX2ZpbGVTaXplID0gc2l6ZTsKKyAgICBtX2ZpbGVEYXRhID0gU3BhbiB7
IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpieXRlKj4oZGF0YSksIHNpemUgfTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCB1bm1hcFZpZXdPZkZpbGUodm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6
ZSkKK2Jvb2wgdW5tYXBWaWV3T2ZGaWxlKFNwYW48c3RkOjpieXRlPiBkYXRhKQogewotICAgIHJl
dHVybiAhbXVubWFwKGJ1ZmZlciwgc2l6ZSk7CisgICAgcmV0dXJuICFtdW5tYXAoZGF0YS5kYXRh
KCksIGRhdGEuc2l6ZSgpKTsKIH0KIAogI2VuZGlmCkBAIC00MzgsNyArNDM3LDcgQEAgU3RyaW5n
IGNyZWF0ZVRlbXBvcmFyeVppcEFyY2hpdmUoY29uc3QgUwogfQogI2VuZGlmCiAKLU1hcHBlZEZp
bGVEYXRhIG1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIHNpemVfdCBieXRlc1NpemUsIEZ1
bmN0aW9uPHZvaWQoY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4m
KT4mJiBhcHBseSwgUGxhdGZvcm1GaWxlSGFuZGxlKiBvdXRwdXRIYW5kbGUpCitNYXBwZWRGaWxl
RGF0YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBzaXplX3QgYnl0ZXNTaXplLCBGdW5j
dGlvbjx2b2lkKGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mKT4m
JiBhcHBseSwgUGxhdGZvcm1GaWxlSGFuZGxlKiBvdXRwdXRIYW5kbGUpCiB7CiAgICAgY29uc3Rl
eHByIGJvb2wgZmFpbElmRmlsZUV4aXN0cyA9IHRydWU7CiAgICAgYXV0byBoYW5kbGUgPSBGaWxl
U3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWRXcml0
ZSwgRmlsZVN5c3RlbTo6RmlsZUFjY2Vzc1Blcm1pc3Npb246OlVzZXIsIGZhaWxJZkZpbGVFeGlz
dHMpOwpAQCAtNDU1LDEyICs0NTQsMTIgQEAgTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxlKGNvbnN0
IFN0cmluZyYgcAogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIHZvaWQqIG1hcCA9
IGNvbnN0X2Nhc3Q8dm9pZCo+KG1hcHBlZEZpbGUuZGF0YSgpKTsKLSAgICB1aW50OF90KiBtYXBE
YXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1hcCk7CisgICAgYXV0byBtYXAgPSBtYXBwZWRG
aWxlLmRhdGEoKS5kYXRhKCk7CisgICAgYXV0byBtYXBEYXRhID0gbWFwOwogCi0gICAgYXBwbHko
WyZtYXBEYXRhXShjb25zdCB1aW50OF90KiBjaHVuaywgc2l6ZV90IGNodW5rU2l6ZSkgewotICAg
ICAgICBtZW1jcHkobWFwRGF0YSwgY2h1bmssIGNodW5rU2l6ZSk7Ci0gICAgICAgIG1hcERhdGEg
Kz0gY2h1bmtTaXplOworICAgIGFwcGx5KFsmbWFwRGF0YV0oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+
IGNodW5rKSB7CisgICAgICAgIG1lbWNweShtYXBEYXRhLCBjaHVuay5kYXRhKCksIGNodW5rLnNp
emUoKSk7CisgICAgICAgIG1hcERhdGEgKz0gY2h1bmsuc2l6ZSgpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9KTsKIApJbmRleDogU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICsz
NCw3IEBACiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KQEAgLTIxMCw3ICsyMTEsNyBAQCBXVEZfRVhQT1JUX1BSSVZBVEUg
U3RyaW5nIHJlYWxQYXRoKGNvbnN0CiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc1NhZmVUb1Vz
ZU1lbW9yeU1hcEZvclBhdGgoY29uc3QgU3RyaW5nJik7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBtYWtlU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChjb25zdCBTdHJpbmcmKTsKIAotV1RGX0VY
UE9SVF9QUklWQVRFIGJvb2wgdW5tYXBWaWV3T2ZGaWxlKHZvaWQqIGJ1ZmZlciwgc2l6ZV90KTsK
K1dURl9FWFBPUlRfUFJJVkFURSBib29sIHVubWFwVmlld09mRmlsZShTcGFuPHN0ZDo6Ynl0ZT4p
OwogCiBjbGFzcyBNYXBwZWRGaWxlRGF0YSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CkBAIC0yMjMsMTcgKzIyNCwxNSBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5N
YXBwZWRGaWxlRGF0YSgpOwogICAgIE1hcHBlZEZpbGVEYXRhJiBvcGVyYXRvcj0oTWFwcGVkRmls
ZURhdGEmJik7CiAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
ISFtX2ZpbGVEYXRhOyB9Ci0gICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZmlsZURhdGE7IH0KLSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9maWxlU2l6
ZTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fZmls
ZURhdGEuZGF0YSgpOyB9CisgICAgU3BhbjxzdGQ6OmJ5dGU+IGRhdGEoKSBjb25zdCB7IHJldHVy
biBtX2ZpbGVEYXRhOyB9CiAKLSAgICB2b2lkKiBsZWFrSGFuZGxlKCkgeyByZXR1cm4gc3RkOjpl
eGNoYW5nZShtX2ZpbGVEYXRhLCBudWxscHRyKTsgfQorICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBT
cGFuPHN0ZDo6Ynl0ZT4gbGVha0hhbmRsZSgpIHsgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9maWxl
RGF0YSwgeyB9KTsgfQogCiBwcml2YXRlOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIG1h
cEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBGaWxlT3Blbk1vZGUsIE1hcHBlZEZpbGVN
b2RlKTsKIAotICAgIHZvaWQqIG1fZmlsZURhdGEgeyBudWxscHRyIH07Ci0gICAgdW5zaWduZWQg
bV9maWxlU2l6ZSB7IDAgfTsKKyAgICBTcGFuPHN0ZDo6Ynl0ZT4gbV9maWxlRGF0YTsKIH07CiAK
IGlubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGxhdGZvcm1GaWxlSGFuZGxl
IGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUgbWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKQEAgLTI0Nywy
MSArMjQ2LDE5IEBAIGlubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGwKIH0K
IAogaW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShNYXBwZWRGaWxlRGF0YSYm
IG90aGVyKQotICAgIDogbV9maWxlRGF0YShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEs
IG51bGxwdHIpKQotICAgICwgbV9maWxlU2l6ZShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZVNp
emUsIDApKQorICAgIDogbV9maWxlRGF0YShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEs
IHsgfSkpCiB7CiB9CiAKIGlubGluZSBNYXBwZWRGaWxlRGF0YSYgTWFwcGVkRmlsZURhdGE6Om9w
ZXJhdG9yPShNYXBwZWRGaWxlRGF0YSYmIG90aGVyKQogewotICAgIG1fZmlsZURhdGEgPSBzdGQ6
OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEsIG51bGxwdHIpOwotICAgIG1fZmlsZVNpemUgPSBz
dGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZVNpemUsIDApOworICAgIG1fZmlsZURhdGEgPSBzdGQ6
OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEsIHsgfSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQog
CiAvLyBUaGlzIGNyZWF0ZXMgdGhlIGRlc3RpbmF0aW9uIGZpbGUsIG1hcHMgaXQsIHdyaXRlIHRo
ZSBwcm92aWRlZCBkYXRhIHRvIGl0IGFuZCByZXR1cm5zIHRoZSBtYXBwZWQgZmlsZS4KIC8vIFRo
aXMgZnVuY3Rpb24gZmFpbHMgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIGZpbGUgYXQgdGhlIGRlc3Rp
bmF0aW9uIHBhdGguCi1XVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVuY3Rpb248dm9pZChjb25z
dCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYpPiYmIGFwcGx5LCBQbGF0
Zm9ybUZpbGVIYW5kbGUqID0gbnVsbHB0cik7CitXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmls
ZURhdGEgbWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVu
Y3Rpb248dm9pZChjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+Jik+
JiYgYXBwbHksIFBsYXRmb3JtRmlsZUhhbmRsZSogPSBudWxscHRyKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgRmlsZVN5c3RlbUltcGwKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93
dGYvU0hBMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU0hBMS5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL1NIQTEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NiwxMCArNDYsMTAgQEAgU0hBMTo6U0hBMSgpCiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNM
QVJBVElPTlNfRU5ECiB9CiAKLXZvaWQgU0hBMTo6YWRkQnl0ZXMoY29uc3QgdWludDhfdCogaW5w
dXQsIHNpemVfdCBsZW5ndGgpCit2b2lkIFNIQTE6OmFkZEJ5dGVzKFNwYW48Y29uc3Qgc3RkOjpi
eXRlPiBpbnB1dCkKIHsKICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgot
ICAgIENDX1NIQTFfVXBkYXRlKCZtX2NvbnRleHQsIGlucHV0LCBsZW5ndGgpOworICAgIENDX1NI
QTFfVXBkYXRlKCZtX2NvbnRleHQsIGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpKTsKICAgICBB
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIH0KIApAQCAtMTAxLDExICsxMDEsMTEg
QEAgU0hBMTo6U0hBMSgpCiAgICAgcmVzZXQoKTsKIH0KIAotdm9pZCBTSEExOjphZGRCeXRlcyhj
b25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGxlbmd0aCkKK3ZvaWQgU0hBMTo6YWRkQnl0ZXMo
U3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQogewotICAgIHdoaWxlIChsZW5ndGgtLSkgewor
ICAgIGZvciAoYXV0byBieXRlIDogaW5wdXQpIHsKICAgICAgICAgQVNTRVJUKG1fY3Vyc29yIDwg
NjQpOwotICAgICAgICBtX2J1ZmZlclttX2N1cnNvcisrXSA9ICppbnB1dCsrOworICAgICAgICBt
X2J1ZmZlclttX2N1cnNvcisrXSA9IHN0ZDo6dG9faW50ZWdlcjx1aW50OF90PihieXRlKTsKICAg
ICAgICAgKyttX3RvdGFsQnl0ZXM7CiAgICAgICAgIGlmIChtX2N1cnNvciA9PSA2NCkKICAgICAg
ICAgICAgIHByb2Nlc3NCbG9jaygpOwpJbmRleDogU291cmNlL1dURi93dGYvU0hBMS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NIQTEuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dURi93dGYvU0hBMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgPGFycmF5PgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAt
NDUsMTUgKzQ2LDExIEBAIGNsYXNzIFNIQTEgewogcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBTSEExKCk7CiAKLSAgICB2b2lkIGFkZEJ5dGVzKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
aW5wdXQpCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkQnl0ZXMoU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkZEJ5dGVzKFQmJiBk
YXRhKQogICAgIHsKLSAgICAgICAgYWRkQnl0ZXMoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkp
OworICAgICAgICByZXR1cm4gYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+
KGRhdGEpIH0pKTsKICAgICB9Ci0gICAgdm9pZCBhZGRCeXRlcyhjb25zdCBDU3RyaW5nJiBpbnB1
dCkKLSAgICB7Ci0gICAgICAgIGFkZEJ5dGVzKGlucHV0LmRhdGFBc1VJbnQ4UHRyKCksIGlucHV0
Lmxlbmd0aCgpKTsKLSAgICB9Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkQnl0ZXMo
Y29uc3QgdWludDhfdCogaW5wdXQsIHNpemVfdCBsZW5ndGgpOwogCiAgICAgLy8gU2l6ZSBvZiB0
aGUgU0hBMSBoYXNoCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBjb25zdGV4cHIgc2l6
ZV90IGhhc2hTaXplID0gMjA7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dURi93dGYvVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxMyw2ICs2MTMsNyBAQCBw
cml2YXRlOgogCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBUIFZhbHVlVHlwZTsKKyAgICB0eXBlZGVm
IFQgdmFsdWVfdHlwZTsKIAogICAgIHR5cGVkZWYgVCogaXRlcmF0b3I7CiAgICAgdHlwZWRlZiBj
b25zdCBUKiBjb25zdF9pdGVyYXRvcjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL2NmL1NwYW5DRi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL2NmL1NwYW5DRi5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XVEYvd3RmL2NmL1NwYW5DRi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPENvcmVGb3VuZGF0
aW9uL0NvcmVGb3VuZGF0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KKworbmFtZXNwYWNl
IFdURiB7CisKK2lubGluZSBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYXNCeXRlcyhDRkRhdGFSZWYg
ZGF0YSkKK3sKKyAgICByZXR1cm4geyByZWludGVycHJldF9jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+
KENGRGF0YUdldEJ5dGVQdHIoZGF0YSkpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KENGRGF0YUdldExl
bmd0aChkYXRhKSkgfTsKK30KKworfQorCit1c2luZyBXVEY6OmFzQnl0ZXM7CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9jb2NvYS9TcGFuQ29jb2EuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9jb2NvYS9TcGFuQ29jb2EuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9jb2Nv
YS9TcGFuQ29jb2EuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNp
bmNsdWRlIDx3dGYvU3Bhbi5oPgorCituYW1lc3BhY2UgV1RGIHsKKworaW5saW5lIFNwYW48Y29u
c3Qgc3RkOjpieXRlPiBhc0J5dGVzKE5TRGF0YSAqZGF0YSkKK3sKKyAgICByZXR1cm4geyByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxlbmd0aCB9
OworfQorCit9CisKK3VzaW5nIFdURjo6YXNCeXRlczsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3Bl
cnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIENvZGVyPENTdHJpbmc+OjplbmNvZGUoRW5j
b2RlciYgZW5jCiAKICAgICB1aW50MzJfdCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAg
ZW5jb2RlciA8PCBsZW5ndGg7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3Ry
aW5nLmRhdGFBc1VJbnQ4UHRyKCksIGxlbmd0aCk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoc3RyaW5nLmJ5dGVzKCkpOwogfQogCiBzdGQ6Om9wdGlvbmFsPENTdHJpbmc+IENv
ZGVyPENTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKQEAgLTc4LDcgKzc4LDcgQEAg
c3RkOjpvcHRpb25hbDxDU3RyaW5nPiBDb2RlcjxDU3RyaW5nPjo6ZAogCiAgICAgY2hhciogYnVm
ZmVyOwogICAgIENTdHJpbmcgc3RyaW5nID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZCgqbGVu
Z3RoLCBidWZmZXIpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgKmxlbmd0aCkpCisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgcmVpbnRlcnByZXRfY2FzdDxzdGQ6OmJ5
dGUqPihidWZmZXIpLCAqbGVuZ3RoIH0pKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owog
CiAgICAgcmV0dXJuIHN0cmluZzsKQEAgLTk2LDExICs5Niw3IEBAIHZvaWQgQ29kZXI8U3RyaW5n
Pjo6ZW5jb2RlKEVuY29kZXImIGVuY28KICAgICBib29sIGlzOEJpdCA9IHN0cmluZy5pczhCaXQo
KTsKIAogICAgIGVuY29kZXIgPDwgbGVuZ3RoIDw8IGlzOEJpdDsKLQotICAgIGlmIChpczhCaXQp
Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0cmluZy5jaGFyYWN0ZXJz
OCgpLCBsZW5ndGgpOwotICAgIGVsc2UKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnMx
NigpKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoc3RyaW5nLmJ5dGVzKCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KQEAgLTExMiw3ICsxMDgsNyBAQCBzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8
U3RyaW5nPiBkZWNvCiAKICAgICBDaGFyYWN0ZXJUeXBlKiBidWZmZXI7CiAgICAgU3RyaW5nIHN0
cmluZyA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihidWZmZXIpLCBsZW5ndGggKiBzaXplb2YoQ2hhcmFjdGVyVHlwZSkpKQorICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8c3Rk
OjpieXRlKj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJhY3RlclR5cGUpIH0pKQogICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIAogICAgIHJldHVybiBzdHJpbmc7CkBAIC0x
NDIsMTMgKzEzOCwxMyBAQCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gQ29kZXI8U3RyaW5nPjo6ZGVj
CiAKIHZvaWQgQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQogewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpKTsKKyAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3QpOwogfQogCiBzdGQ6Om9wdGlvbmFsPFNIQTE6OkRpZ2Vz
dD4gQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAg
U0hBMTo6RGlnZXN0IHRtcDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHRtcC5kYXRhKCksIHNpemVvZih0bXApKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKHRtcCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgcmV0dXJu
IHRtcDsKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2Rl
cnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50
Q29kZXJzLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNl
L1BlcnNpc3RlbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYg
dmVjdG9yKQogICAgIHsKICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
dmVjdG9yLnNpemUoKSk7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6
ZSgpICogc2l6ZW9mKFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEo
dmVjdG9yKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5Pj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCkBAIC0xNzMsNyArMTcz
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAgICAgICBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IHRlbXA7CiAgICAgICAgIHRlbXAuZ3JvdyhzaXplKTsK
IAotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KHRlbXAuZGF0YSgpKSwgc2l6ZSAqIHNpemVvZihUKSkpCisgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEodGVtcCkpCiAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgICAgIHJldHVybiB0ZW1wOwpJbmRleDogU291cmNl
L1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmNwcAkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29k
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyMyArMzEsMjEgQEAKIG5hbWVzcGFjZSBXVEYg
ewogbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAotRGVjb2Rlcjo6RGVjb2Rlcihjb25zdCB1aW50
OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKQotICAgIDogbV9idWZmZXIoYnVmZmVyKQot
ICAgICwgbV9idWZmZXJQb3NpdGlvbihidWZmZXIpCi0gICAgLCBtX2J1ZmZlckVuZChidWZmZXIg
KyBidWZmZXJTaXplKQorRGVjb2Rlcjo6RGVjb2RlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnVm
ZmVyKQorICAgIDogbV9idWZmZXIoYnVmZmVyLmRhdGEoKSkKKyAgICAsIG1fYnVmZmVyUG9zaXRp
b24oYnVmZmVyLmRhdGEoKSkKKyAgICAsIG1fYnVmZmVyRW5kKGJ1ZmZlci5kYXRhKCkgKyBidWZm
ZXIuc2l6ZSgpKQogewogfQogCi1EZWNvZGVyOjp+RGVjb2RlcigpCi17Ci19CitEZWNvZGVyOjp+
RGVjb2RlcigpID0gZGVmYXVsdDsKIAogYm9vbCBEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdo
VG9Db250YWluKHNpemVfdCBzaXplKSBjb25zdAogewogICAgIHJldHVybiBzaXplIDw9IHN0YXRp
Y19jYXN0PHNpemVfdD4obV9idWZmZXJFbmQgLSBtX2J1ZmZlclBvc2l0aW9uKTsKIH0KIAotY29u
c3QgdWludDhfdCogRGVjb2Rlcjo6YnVmZmVyUG9pbnRlckZvckRpcmVjdFJlYWQoc2l6ZV90IHNp
emUpCitjb25zdCBzdGQ6OmJ5dGUqIERlY29kZXI6OmJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFk
KHNpemVfdCBzaXplKQogewogICAgIGlmICghYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihz
aXplKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC01NSwxNiArNTMsMTYgQEAgY29uc3Qg
dWludDhfdCogRGVjb2Rlcjo6YnVmZmVyUG9pbnRlckZvcgogICAgIGF1dG8gZGF0YSA9IG1fYnVm
ZmVyUG9zaXRpb247CiAgICAgbV9idWZmZXJQb3NpdGlvbiArPSBzaXplOwogCi0gICAgRW5jb2Rl
cjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgZGF0YSwgc2l6ZSk7CisgICAgRW5jb2Rl
cjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgU3BhbiB7IGRhdGEsIHNpemUgfSk7CiAg
ICAgcmV0dXJuIGRhdGE7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQorYm9vbCBEZWNvZGVyOjpkZWNvZGVGaXhlZExl
bmd0aERhdGEoU3BhbjxzdGQ6OmJ5dGU+IGRhdGEpCiB7Ci0gICAgYXV0byBidWZmZXIgPSBidWZm
ZXJQb2ludGVyRm9yRGlyZWN0UmVhZChzaXplKTsKKyAgICBhdXRvIGJ1ZmZlciA9IGJ1ZmZlclBv
aW50ZXJGb3JEaXJlY3RSZWFkKGRhdGEuc2l6ZSgpKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIG1lbWNweShkYXRhLCBidWZmZXIsIHNpemUpOworICAgIG1l
bWNweShkYXRhLmRhdGEoKSwgYnVmZmVyLCBkYXRhLnNpemUoKSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTEzOSw3ICsxMzcsNyBAQCBib29sIERlY29kZXI6OnZlcmlmeUNoZWNrc3VtKCkK
ICAgICBtX3NoYTEuY29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2Vz
dCBzYXZlZEhhc2g7Ci0gICAgaWYgKCFkZWNvZGVGaXhlZExlbmd0aERhdGEoc2F2ZWRIYXNoLmRh
dGEoKSwgc2l6ZW9mKHNhdmVkSGFzaCkpKQorICAgIGlmICghZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHNhdmVkSGFzaCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBjb21wdXRl
ZEhhc2ggPT0gc2F2ZWRIYXNoOwpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVy
c2lzdGVudERlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5j
ZS9QZXJzaXN0ZW50RGVjb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0
Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw3IEBACiAKICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9T
SEExLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2Uv
UGVyc2lzdGVudENvZGVyLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMzUsNyArMzYsMTIgQEAg
bmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIGNsYXNzIERlY29kZXIgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyKGNv
bnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IERlY29kZXIoVCYmIGRhdGEpCisgICAgICAgIDogRGVjb2RlciB7IGFzQnl0ZXMo
U3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihkYXRhKSB9KSB9CisgICAgeworICAgIH0KKworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIH5EZWNvZGVyKCk7CiAKICAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3Qg
eyByZXR1cm4gbV9idWZmZXJFbmQgLSBtX2J1ZmZlcjsgfQpAQCAtNDMsNyArNDksMTEgQEAgcHVi
bGljOgogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIHZl
cmlmeUNoZWNrc3VtKCk7CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgV0FSTl9VTlVTRURfUkVU
VVJOIGJvb2wgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqLCBzaXplX3QpOworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVGaXhlZExlbmd0
aERhdGEoU3BhbjxzdGQ6OmJ5dGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIGRl
Y29kZUZpeGVkTGVuZ3RoRGF0YShUJiYgZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNv
ZGVGaXhlZExlbmd0aERhdGEoYXNXcml0YWJsZUJ5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4o
ZGF0YSkgfSkpOworICAgIH0KIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVy
YXRvcj4+KHN0ZDo6b3B0aW9uYWw8Ym9vbD4mKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVj
b2RlciYgb3BlcmF0b3I+PihzdGQ6Om9wdGlvbmFsPHVpbnQ4X3Q+Jik7CkBAIC04NCw3ICs5NCw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG51bUVsZW1lbnRzIDw9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8c2l6ZV90Pjo6bWF4KCkgLyBzaXplb2YoVCkgJiYgYnVmZmVySXNMYXJnZUVub3VnaFRv
Q29udGFpbihudW1FbGVtZW50cyAqIHNpemVvZihUKSk7CiAgICAgfQogCi0gICAgV1RGX0VYUE9S
VF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBjb25zdCB1aW50OF90KiBidWZmZXJQb2ludGVy
Rm9yRGlyZWN0UmVhZChzaXplX3QgbnVtQnl0ZXMpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBX
QVJOX1VOVVNFRF9SRVRVUk4gY29uc3Qgc3RkOjpieXRlKiBidWZmZXJQb2ludGVyRm9yRGlyZWN0
UmVhZChzaXplX3QgbnVtQnl0ZXMpOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSVBD
RGVjb2RlciA9IGZhbHNlOwogCkBAIC05Miw5ICsxMDIsOSBAQCBwcml2YXRlOgogICAgIFdURl9F
WFBPUlRfUFJJVkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBidWZmZXJJc0xhcmdlRW5vdWdo
VG9Db250YWluKHNpemVfdCkgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4gRGVj
b2RlciYgZGVjb2RlTnVtYmVyKHN0ZDo6b3B0aW9uYWw8VHlwZT4mKTsKIAotICAgIGNvbnN0IHVp
bnQ4X3QqIG1fYnVmZmVyOwotICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyUG9zaXRpb247Ci0g
ICAgY29uc3QgdWludDhfdCogbV9idWZmZXJFbmQ7CisgICAgY29uc3Qgc3RkOjpieXRlKiBtX2J1
ZmZlcjsKKyAgICBjb25zdCBzdGQ6OmJ5dGUqIG1fYnVmZmVyUG9zaXRpb247CisgICAgY29uc3Qg
c3RkOjpieXRlKiBtX2J1ZmZlckVuZDsKIAogICAgIFNIQTEgbV9zaGExOwogfTsKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRF
bmNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMzQgKzMxLDM0IEBACiBuYW1lc3BhY2Ug
V1RGIHsKIG5hbWVzcGFjZSBQZXJzaXN0ZW5jZSB7CiAKLUVuY29kZXI6OkVuY29kZXIoKQotewot
fQotCi1FbmNvZGVyOjp+RW5jb2RlcigpCi17Ci19CitFbmNvZGVyOjpFbmNvZGVyKCkgPSBkZWZh
dWx0OworRW5jb2Rlcjo6fkVuY29kZXIoKSA9IGRlZmF1bHQ7CiAKLXVpbnQ4X3QqIEVuY29kZXI6
Omdyb3coc2l6ZV90IHNpemUpCitzdGQ6OmJ5dGUqIEVuY29kZXI6Omdyb3coc2l6ZV90IHNpemUp
CiB7CiAgICAgc2l6ZV90IG5ld1Bvc2l0aW9uID0gbV9idWZmZXIuc2l6ZSgpOwogICAgIG1fYnVm
ZmVyLmdyb3cobV9idWZmZXIuc2l6ZSgpICsgc2l6ZSk7CiAgICAgcmV0dXJuIG1fYnVmZmVyLmRh
dGEoKSArIG5ld1Bvc2l0aW9uOwogfQogCi12b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9y
RGF0YShTSEExJiBzaGExLCBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3ZvaWQg
RW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmIHNoYTEsIFNwYW48Y29uc3QgdWlu
dDhfdD4gZGF0YSkKK3sKKyAgICByZXR1cm4gdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKHNoYTEsIGFz
Qnl0ZXMoZGF0YSkpOworfQorCit2b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yRGF0YShT
SEExJiBzaGExLCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKICAgICBhdXRvIHR5cGVT
YWx0ID0gU2FsdDx1aW50OF90Kj46OnZhbHVlOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7Ci0gICAgc2hh
MS5hZGRCeXRlcyhkYXRhLCBzaXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmdHlwZVNh
bHQsIDEgfSk7CisgICAgc2hhMS5hZGRCeXRlcyhkYXRhKTsKIH0KIAotdm9pZCBFbmNvZGVyOjpl
bmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCit2
b2lkIEVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
ZGF0YSkKIHsKLSAgICB1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhLCBzaXplKTsK
KyAgICB1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhKTsKIAotICAgIHVpbnQ4X3Qq
IGJ1ZmZlciA9IGdyb3coc2l6ZSk7Ci0gICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7Cisg
ICAgYXV0byogYnVmZmVyID0gZ3JvdyhkYXRhLnNpemUoKSk7CisgICAgbWVtY3B5KGJ1ZmZlciwg
ZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4K
QEAgLTY2LDcgKzY2LDcgQEAgRW5jb2RlciYgRW5jb2Rlcjo6ZW5jb2RlTnVtYmVyKFR5cGUgdmFs
dQogewogICAgIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKG1fc2hhMSwgdmFsdWUp
OwogCi0gICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhzaXplb2YoVHlwZSkpOworICAgIGF1dG8q
IGJ1ZmZlciA9IGdyb3coc2l6ZW9mKFR5cGUpKTsKICAgICBtZW1jcHkoYnVmZmVyLCAmdmFsdWUs
IHNpemVvZihUeXBlKSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQpAQCAtMTI1LDcgKzEyNSw3IEBA
IHZvaWQgRW5jb2Rlcjo6ZW5jb2RlQ2hlY2tzdW0oKQogewogICAgIFNIQTE6OkRpZ2VzdCBoYXNo
OwogICAgIG1fc2hhMS5jb21wdXRlSGFzaChoYXNoKTsKLSAgICBlbmNvZGVGaXhlZExlbmd0aERh
dGEoaGFzaC5kYXRhKCksIGhhc2guc2l6ZSgpKTsKKyAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEo
aGFzaCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3Rl
bnRFbmNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVy
c2lzdGVudEVuY29kZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvcGVy
c2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcs
NyBAQAogCiAjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvU0hBMS5o
PgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1
ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaD4KIApAQCAtNDMsNyArNDQsMTEg
QEAgcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSB+RW5jb2RlcigpOwogCiAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlQ2hlY2tzdW0oKTsKLSAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCosIHNpemVfdCk7
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48
Y29uc3Qgc3RkOjpieXRlPik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBlbmNvZGVG
aXhlZExlbmd0aERhdGEoVCYmIGRhdGEpCisgICAgeworICAgICAgICBlbmNvZGVGaXhlZExlbmd0
aERhdGEoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pKTsKKyAgICB9CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZW51bTxU
Pjo6dmFsdWU+KiA9IG51bGxwdHI+CiAgICAgRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBUJiB0
KQpAQCAtNzAsMjMgKzc1LDIyIEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRW5j
b2RlciYgb3BlcmF0b3I8PChmbG9hdCk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIEVuY29kZXIm
IG9wZXJhdG9yPDwoZG91YmxlKTsKIAotICAgIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlcigpIGNvbnN0
IHsgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKTsgfQotICAgIHNpemVfdCBidWZmZXJTaXplKCkgY29u
c3QgeyByZXR1cm4gbV9idWZmZXIuc2l6ZSgpOyB9Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBjb25zdCB1aW50OF90Kiwg
c2l6ZV90KTsKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnVmZmVyKCkgY29uc3QgeyByZXR1
cm4gbV9idWZmZXI7IH0KKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQg
dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBTcGFuPGNvbnN0IHVpbnQ4X3Q+KTsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEm
LCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPiBz
dGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZvck51bWJlcihTSEExJiwgVHlwZSk7CiAKICAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNJUENFbmNvZGVyID0gZmFsc2U7CiAKIHByaXZhdGU6Ci0K
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiBFbmNvZGVyJiBlbmNvZGVOdW1iZXIoVHlwZSk7
CiAKLSAgICB1aW50OF90KiBncm93KHNpemVfdCk7CisgICAgc3RkOjpieXRlKiBncm93KHNpemVf
dCk7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4gc3RydWN0IFNhbHQ7CiAKLSAgICBW
ZWN0b3I8dWludDhfdCwgNDA5Nj4gbV9idWZmZXI7CisgICAgVmVjdG9yPHN0ZDo6Ynl0ZSwgNDA5
Nj4gbV9idWZmZXI7CiAgICAgU0hBMSBtX3NoYTE7CiB9OwogCkBAIC0xMDYsOCArMTEwLDggQEAg
dGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+CiB2b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9y
TnVtYmVyKFNIQTEmIHNoYTEsIFR5cGUgdmFsdWUpCiB7CiAgICAgYXV0byB0eXBlU2FsdCA9IFNh
bHQ8VHlwZT46OnZhbHVlOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7Ci0gICAgc2hhMS5hZGRCeXRlcyhy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWUpLCBzaXplb2YodmFsdWUpKTsKKyAgICBz
aGExLmFkZEJ5dGVzKFNwYW4geyAmdHlwZVNhbHQsIDEgfSk7CisgICAgc2hhMS5hZGRCeXRlcyhT
cGFuIHsgJnZhbHVlLCAxIH0pOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jh
c2U2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0MCwzOSArMTQwLDM5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IHN0YXRpYyAKICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSAn
PSc7CiB9CiAKLXN0YXRpYyBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoY29u
c3QgdWludDhfdCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0
RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKK3N0YXRpYyBWZWN0b3I8
dWludDhfdD4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0
LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewotICAg
IGF1dG8gZGVzdGluYXRpb25MZW5ndGggPSBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShpbnB1
dExlbmd0aCwgcG9saWN5KTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uTGVuZ3RoID0gY2FsY3VsYXRl
QmFzZTY0RW5jb2RlZFNpemUoaW5wdXQuc2l6ZSgpLCBwb2xpY3kpOwogICAgIGlmICghZGVzdGlu
YXRpb25MZW5ndGgpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBWZWN0b3I8dWludDhfdD4g
ZGVzdGluYXRpb25WZWN0b3IoZGVzdGluYXRpb25MZW5ndGgpOwotICAgIGJhc2U2NEVuY29kZUlu
dGVybmFsKGlucHV0RGF0YUJ1ZmZlciwgaW5wdXRMZW5ndGgsIGRlc3RpbmF0aW9uVmVjdG9yLmRh
dGEoKSwgZGVzdGluYXRpb25MZW5ndGgsIHBvbGljeSwgbWFwKTsKKyAgICBiYXNlNjRFbmNvZGVJ
bnRlcm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBp
bnB1dC5zaXplKCksIGRlc3RpbmF0aW9uVmVjdG9yLmRhdGEoKSwgZGVzdGluYXRpb25MZW5ndGgs
IHBvbGljeSwgbWFwKTsKICAgICByZXR1cm4gZGVzdGluYXRpb25WZWN0b3I7CiB9CiAKLXZvaWQg
YmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRM
ZW5ndGgsIFVDaGFyKiBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9u
TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQor
dm9pZCBiYXNlNjRFbmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0LCBVQ2hhciogZGVz
dGluYXRpb25EYXRhQnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkxlbmd0aCwgQmFzZTY0RW5j
b2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKICAgICBpZiAoIWRlc3Rp
bmF0aW9uTGVuZ3RoKQogICAgICAgICByZXR1cm47Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwo
c3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3Ro
LCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7
CisgICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRl
c3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7CiB9CiAKLXZvaWQgYmFzZTY0RW5jb2RlKGNv
bnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIExDaGFyKiBk
ZXN0aW5hdGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uTGVuZ3RoLCBCYXNlNjRF
bmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordm9pZCBiYXNlNjRFbmNv
ZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0LCBMQ2hhciogZGVzdGluYXRpb25EYXRhQnVm
ZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkxlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGlj
eSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKICAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQog
ICAgICAgICByZXR1cm47Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29u
c3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvbkRh
dGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7CisgICAgYmFzZTY0RW5j
b2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0YSgp
KSwgaW5wdXQuc2l6ZSgpLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3Ro
LCBwb2xpY3ksIG1hcCk7CiB9CiAKLVZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rv
cihjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNl
NjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQorVmVjdG9yPHVpbnQ4
X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwgQmFz
ZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1
cm4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0
RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2
NEVuY29kZUludGVybmFsKGlucHV0LCBwb2xpY3ksIG1hcCk7CiB9CiAKLVN0cmluZyBiYXNlNjRF
bmNvZGVUb1N0cmluZyhjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0
TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQor
U3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwg
QmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBy
ZXR1cm4gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKGlucHV0RGF0YUJ1ZmZlciwgaW5wdXRMZW5n
dGgsIHBvbGljeSwgbWFwKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChp
bnB1dCwgcG9saWN5LCBtYXApKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIHN0
ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGVJbnRlcm5hbChjb25zdCBU
KiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBPcHRpb25TZXQ8QmFzZTY0
RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKQEAgLTI1NCw4NCAr
MjU0LDI3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBzdGQ6Om9wdGlvbmEKICAgICBy
ZXR1cm4gZGVzdGluYXRpb247CiB9CiAKLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjREZWNvZGUoY29uc3QgU3RyaW5nJiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9w
dGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgdW5zaWduZWQgbGVu
Z3RoID0gaW5wdXQubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGggfHwgaW5wdXQuaXM4Qml0KCkp
Ci0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgp
LCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFs
KGlucHV0LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7Ci19Ci0KLXN0ZDo6
b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3RyaW5nVmlldyBpbnB1dCwg
T3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBt
YXApCi17Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7Ci0gICAgaWYgKCFs
ZW5ndGggfHwgaW5wdXQuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRl
cm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7Ci0gICAgcmV0
dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIG9w
dGlvbnMsIG1hcCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRE
ZWNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29k
ZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgaWYgKGlucHV0
LnNpemUoKSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKLSAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5w
dXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIG9wdGlvbnMsIG1hcCk7Ci19Ci0KLXN0ZDo6b3B0aW9u
YWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1
dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1h
cCBtYXApCitzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKFNwYW48
Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9w
dGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7CiAgICAgaWYgKGlucHV0LnNpemUoKSA+IHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpLCBvcHRpb25zLCBt
YXApOwogfQogCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNv
bnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgT3B0aW9uU2V0PEJhc2U2NERlY29k
ZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgcmV0dXJuIGJh
c2U2NERlY29kZUludGVybmFsKGRhdGEsIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKLX0KLQotc3Rk
OjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBjaGFyKiBkYXRh
LCB1bnNpZ25lZCBsZW5ndGgsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRpb25z
LCBCYXNlNjREZWNvZGVNYXAgbWFwKQotewotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5h
bChyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oZGF0YSksIGxlbmd0aCwgb3B0aW9ucywg
bWFwKTsKLX0KLQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29k
ZShjb25zdCBTdHJpbmcmIGlucHV0KQorc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJh
c2U2NERlY29kZShjb25zdCBTdHJpbmcmIGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0
aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKICAgICB1bnNpZ25lZCBsZW5n
dGggPSBpbnB1dC5sZW5ndGgoKTsKICAgICBpZiAoIWxlbmd0aCB8fCBpbnB1dC5pczhCaXQoKSkK
LSAgICAgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnM4KCks
IGxlbmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7Ci0gICAgcmV0dXJuIGJhc2U2NERl
Y29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIHsgfSwgQmFzZTY0RGVj
b2RlTWFwOjpVUkwpOworICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQu
Y2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOworICAgIHJldHVybiBiYXNlNjRE
ZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXAp
OwogfQogCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFN0
cmluZ1ZpZXcgaW5wdXQpCitzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVj
b2RlKFN0cmluZ1ZpZXcgaW5wdXQsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRp
b25zLCBCYXNlNjREZWNvZGVNYXAgbWFwKQogewogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0
Lmxlbmd0aCgpOwogICAgIGlmICghbGVuZ3RoIHx8IGlucHV0LmlzOEJpdCgpKQotICAgICAgICBy
ZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCB7
IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJu
YWwoaW5wdXQuY2hhcmFjdGVyczE2KCksIGxlbmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVS
TCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUo
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKLXsKLSAgICBpZiAoaW5wdXQuc2l6ZSgpID4g
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQotICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5kYXRhKCks
IGlucHV0LnNpemUoKSwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7Ci19Ci0KLXN0ZDo6b3B0
aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+
JiBpbnB1dCkKLXsKLSAgICBpZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHJldHVy
biBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihp
bnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCksIHsgfSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOwot
fQotCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0
IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gYmFzZTY0RGVj
b2RlSW50ZXJuYWwoZGF0YSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKLX0K
LQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBj
aGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUlu
dGVybmFsKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBsZW5ndGgsIHsg
fSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOworICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50
ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOworICAgIHJl
dHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBv
cHRpb25zLCBtYXApOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL3RleHQvQmFzZTY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9CYXNl
NjQuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCkBAIC01Niw1NCArNTcsMzUgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBtYXhpbXVtQmFzZTY0TAogLy8gUmF0aGVyIHRoYW4gYmVpbmcgcGVyZmVjdGx5IHByZWNp
c2UsIHRoaXMgaXMgYSBiaXQgY29uc2VydmF0aXZlLgogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBtYXhpbXVtQmFzZTY0RW5jb2RlcklucHV0QnVmZmVyU2l6ZSA9IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSAvIDc3ICogNzYgLyA0ICogMyAtIDI7CiAKLVdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQsIFVDaGFyKiwg
dW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJ
bnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci1X
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVk
LCBMQ2hhciosIHVuc2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xp
Y3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRl
ZmF1bHQpOworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2RlKFNwYW48Y29uc3Qg
c3RkOjpieXRlPiwgVUNoYXIqIGRlc3RpbmF0aW9uQnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlv
bkJ1ZmZlclNpemUsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9O
b3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7
CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+LCBMQ2hhciogZGVzdGluYXRpb25CdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uQnVmZmVy
U2l6ZSwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2Vy
dExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKIAotV1RG
X0VYUE9SVF9QUklWQVRFIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25z
dCB2b2lkKiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGlj
eTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVm
YXVsdCk7Ci1WZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05v
dEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsK
LVZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8Y2hhcj4m
LCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZz
LCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwotVmVjdG9yPHVp
bnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IENTdHJpbmcmLCBCYXNlNjRFbmNvZGVQ
b2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVN
YXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwotCi1XVEZfRVhQT1JUX1BSSVZBVEUgU3Ry
aW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgQmFzZTY0RW5j
b2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5j
b2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKLVN0cmluZyBiYXNlNjRFbmNvZGVU
b1N0cmluZyhjb25zdCBWZWN0b3I8dWludDhfdD4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNl
NjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRF
bmNvZGVNYXA6OkRlZmF1bHQpOwotU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IFZl
Y3RvcjxjaGFyPiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9O
b3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7
Ci1TdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgQ1N0cmluZyYsIEJhc2U2NEVuY29k
ZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29k
ZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgVmVj
dG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKFNwYW48Y29uc3Qgc3RkOjpieXRlPiwg
QmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywg
QmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihUJiYsIEJhc2U2
NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2
NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CiAKK1dURl9FWFBPUlRfUFJJ
VkFURSBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+LCBC
YXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBC
YXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKFQmJiwgQmFzZTY0RW5jb2RlUG9s
aWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFw
ID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKKworV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6
b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1h
cCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpv
cHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBTdHJpbmcmLCBPcHRp
b25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2
NERlY29kZU1hcDo6RGVmYXVsdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxW
ZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShTdHJpbmdWaWV3LCBPcHRpb25TZXQ8QmFzZTY0
RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6
RGVmYXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGJhc2U2NERlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mLCBPcHRpb25TZXQ8QmFzZTY0
RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6
RGVmYXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGJhc2U2NERlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mLCBPcHRpb25TZXQ8QmFzZTY0RGVj
b2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVm
YXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+
IGJhc2U2NERlY29kZShjb25zdCB1aW50OF90KiwgdW5zaWduZWQsIE9wdGlvblNldDxCYXNlNjRE
ZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpE
ZWZhdWx0KTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90
Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCwgT3B0aW9uU2V0PEJhc2U2NERl
Y29kZU9wdGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRl
ZmF1bHQpOwotCi1pbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJh
c2U2NEVuY29kZU1hcCBtYXApCi17Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlu
cHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7Ci19Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25z
dF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+PiwgU3RyaW5nPiAmJiAhc3RkOjppc19zYW1l
X3Y8c3RkOjpyZW1vdmVfY29uc3RfdDxzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxUPj4sIFN0cmlu
Z1ZpZXc+PiogPSBudWxscHRyPgorc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2
NERlY29kZShUJiYsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0
RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKIAotaW5saW5lIFZlY3Rvcjx1
aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBC
YXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordGVtcGxhdGU8
dHlwZW5hbWUgVD4gVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKFQmJiBpbnB1
dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAg
ICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCks
IHBvbGljeSwgbWFwKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoYXNCeXRlcyhT
cGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGlucHV0KSB9KSwgcG9saWN5LCBtYXApOwogfQogCi1pbmxp
bmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IENTdHJpbmcmIGlu
cHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordGVt
cGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKFQmJiBpbnB1dCwg
QmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBy
ZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwg
cG9saWN5LCBtYXApOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhhc0J5dGVzKFNw
YW4geyBzdGQ6OmZvcndhcmQ8VD4oaW5wdXQpIH0pLCBwb2xpY3ksIG1hcCk7CiB9CiAKLWlubGlu
ZSBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1
dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZV92PHN0ZDo6cmVt
b3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmc+ICYmICFzdGQ6
OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+
PiwgU3RyaW5nVmlldz4+Kj4KK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRE
ZWNvZGUoVCYmIGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywg
QmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmco
aW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSwgbWFwKTsKLX0KLQotaW5saW5lIFN0
cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBCYXNl
NjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQotewotICAgIHJldHVy
biBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5
LCBtYXApOwotfQotCi1pbmxpbmUgU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IENT
dHJpbmcmIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAg
bWFwKQotewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlu
cHV0Lmxlbmd0aCgpLCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZShhc0J5
dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oaW5wdXQpIH0pLCBvcHRpb25zLCBtYXApOwogfQog
CiAKQEAgLTExMiw2MSArOTQsNTcgQEAgaW5saW5lIFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmlu
Zyhjb25zdAogLy8gVGhpcyBmb3JtYXQgdXNlcyAnLScgYW5kICdfJyBpbnN0ZWFkIG9mICcrJyBh
bmQgJy8nIHJlc3BlY3RpdmVseS4KIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAK
LVZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihjb25zdCB2b2lkKiwgdW5z
aWduZWQpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9y
KGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRv
VmVjdG9yKGNvbnN0IENTdHJpbmcmKTsKK1ZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVU
b1ZlY3RvcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVj
dG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKFQmJik7CiAKLVN0cmluZyBiYXNl
NjRVUkxFbmNvZGVUb1N0cmluZyhjb25zdCB2b2lkKiwgdW5zaWduZWQpOwotU3RyaW5nIGJhc2U2
NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOwotU3RyaW5nIGJhc2U2
NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotU3RyaW5nIGJhc2U2NFVS
TEVuY29kZVRvU3RyaW5nKGNvbnN0IENTdHJpbmcmKTsKK1N0cmluZyBiYXNlNjRVUkxFbmNvZGVU
b1N0cmluZyhTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3Ry
aW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKFQmJik7CiAKLVdURl9FWFBPUlRfUFJJVkFURSBz
dGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFN0cmlu
ZyYpOwotV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjRVUkxEZWNvZGUoU3RyaW5nVmlldyk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRp
b25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBWZWN0b3I8dWludDhf
dD4mKTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4g
YmFzZTY0VVJMRGVjb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotV1RGX0VYUE9SVF9QUklWQVRF
IHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgdWlu
dDhfdCosIHVuc2lnbmVkKTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rv
cjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCk7CitzdGQ6
Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFNwYW48Y29uc3Qgc3Rk
OjpieXRlPik7CitzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2Rl
KGNvbnN0IFN0cmluZyYpOworc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVS
TERlY29kZShTdHJpbmdWaWV3KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lm
X3Q8IXN0ZDo6aXNfc2FtZV92PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJl
bmNlX3Q8VD4+LCBTdHJpbmc+ICYmICFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90
PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+PiwgU3RyaW5nVmlldz4+KiA9IG51bGxwdHI+Citz
dGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFQmJik7CiAKLWlu
bGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3Qgdm9pZCog
aW5wdXQsIHVuc2lnbmVkIGxlbmd0aCkKK2lubGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJM
RW5jb2RlVG9WZWN0b3IoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQogewotICAgIHJldHVy
biBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dCwgbGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3k6
OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1Zl
Y3RvcihpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJM
KTsKIH0KIAotaW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihj
b25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVjdG9y
PHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKFQmJiBpbnB1dCkKIHsKLSAgICByZXR1
cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJhc2U2
NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJh
c2U2NEVuY29kZVRvVmVjdG9yKHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCksIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBWZWN0b3I8dWlu
dDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCkK
K2lubGluZSBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRh
KCksIGlucHV0LnNpemUoKSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1h
cDo6VVJMKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5wdXQsIEJhc2U2NEVu
Y29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBWZWN0
b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgQ1N0cmluZyYgaW5wdXQp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoVCYm
IGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRhKCks
IGlucHV0Lmxlbmd0aCgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFw
OjpVUkwpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhzdGQ6OmZvcndhcmQ8VD4o
aW5wdXQpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwog
fQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqIGlu
cHV0LCB1bnNpZ25lZCBsZW5ndGgpCitpbmxpbmUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGJhc2U2NFVSTERlY29kZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCiB7Ci0gICAg
cmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LCBsZW5ndGgsIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29k
ZShpbnB1dCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBTdHJpbmcg
YmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKK2lu
bGluZSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0
IFN0cmluZyYgaW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0
LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5j
b2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjREZWNvZGUoaW5wdXQsIHsgfSwgQmFzZTY0
RGVjb2RlTWFwOjpVUkwpOwogfQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3Ry
aW5nKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW5wdXQpCitpbmxpbmUgc3RkOjpvcHRpb25hbDxWZWN0
b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShTdHJpbmdWaWV3IGlucHV0KQogewotICAgIHJl
dHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgQmFz
ZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKKyAgICByZXR1cm4g
YmFzZTY0RGVjb2RlKGlucHV0LCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKIH0KIAotaW5s
aW5lIFN0cmluZyBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhjb25zdCBDU3RyaW5nJiBpbnB1dCkK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZV92PHN0
ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmc+ICYm
ICFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5j
ZV90PFQ+PiwgU3RyaW5nVmlldz4+Kj4KK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjRVUkxEZWNvZGUoVCYmIGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0
cmluZyhpbnB1dC5kYXRhKCksIGlucHV0Lmxlbmd0aCgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVS
TCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjRVUkxEZWNvZGUoYXNC
eXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGlucHV0KSB9KSk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBpbmxpbmUgYm9vbCBpc0Jhc2U2NE9yQmFzZTY0
VVJMQ2hhcmFjdGVyKENoYXJhY3RlclR5cGUgYykKQEAgLTIwOCw1NyArMTg2LDM2IEBAIGlubGlu
ZSB1bnNpZ25lZCBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2kKIH0KIAogc3RydWN0IEJhc2U2NFNw
ZWNpZmljYXRpb24gewotICAgIGNvbnN0IHZvaWQqIGlucHV0RGF0YTsKLSAgICB1bnNpZ25lZCBp
bnB1dExlbmd0aDsKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXREYXRhOwogICAgIEJh
c2U2NEVuY29kZVBvbGljeSBwb2xpY3k7CiAgICAgQmFzZTY0RW5jb2RlTWFwIG1hcDsKIH07CiAK
LWlubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NEVuY29kZWQoY29uc3Qgdm9pZCogaW5w
dXREYXRhLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9
IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCBtYXAg
PSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpCi17Ci0gICAgcmV0dXJuIHsgaW5wdXREYXRhLCBp
bnB1dExlbmd0aCwgcG9saWN5LCBtYXAgfTsKLX0KLQotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRp
b24gYmFzZTY0RW5jb2RlZChjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0LCBCYXNlNjRFbmNv
ZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcykKLXsK
LSAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9s
aWN5KTsKLX0KLQotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChjb25z
dCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0
RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcykKLXsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2Rl
ZChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5KTsKLX0KLQotaW5saW5lIEJhc2U2
NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChjb25zdCBDU3RyaW5nJiBpbnB1dCwgQmFzZTY0
RW5jb2RlUG9saWN5IHBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMp
Ci17Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgo
KSwgcG9saWN5KTsKLX0KLQotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5j
b2RlZChjb25zdCB2b2lkKiBpbnB1dERhdGEsIHVuc2lnbmVkIGlucHV0TGVuZ3RoKQoraW5saW5l
IEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
aW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRv
Tm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgbWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZh
dWx0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0RGF0YSwgaW5wdXRMZW5ndGgs
IEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0
dXJuIHsgaW5wdXQsIHBvbGljeSwgbWFwIH07CiB9CiAKLWlubGluZSBCYXNlNjRTcGVjaWZpY2F0
aW9uIGJhc2U2NFVSTEVuY29kZWQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChUJiYgaW5w
dXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90
SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgbWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0
KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgp
LCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJl
dHVybiBiYXNlNjRFbmNvZGVkKGFzQnl0ZXMoU3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCkg
fSksIHBvbGljeSwgbWFwKTsKIH0KIAotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0
VVJMRW5jb2RlZChjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0KQoraW5saW5lIEJhc2U2NFNwZWNp
ZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCiB7
Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJh
c2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJu
IGJhc2U2NEVuY29kZWQoaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNv
ZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NFVSTEVu
Y29kZWQoY29uc3QgQ1N0cmluZyYgaW5wdXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBCYXNlNjRT
cGVjaWZpY2F0aW9uIGJhc2U2NFVSTEVuY29kZWQoVCYmIGlucHV0KQogewotICAgIHJldHVybiBi
YXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29k
ZWQoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGlucHV0KSB9KSwgQmFzZTY0RW5jb2Rl
UG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKIH0KIAogdGVtcGxhdGU8PiBjbGFz
cyBTdHJpbmdUeXBlQWRhcHRlcjxCYXNlNjRTcGVjaWZpY2F0aW9uPiB7CiBwdWJsaWM6CiAgICAg
U3RyaW5nVHlwZUFkYXB0ZXIoY29uc3QgQmFzZTY0U3BlY2lmaWNhdGlvbiYgYmFzZTY0KQogICAg
ICAgICA6IG1fYmFzZTY0IHsgYmFzZTY0IH0KLSAgICAgICAgLCBtX2VuY29kZWRMZW5ndGggeyBj
YWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShiYXNlNjQuaW5wdXRMZW5ndGgsIGJhc2U2NC5wb2xp
Y3kpIH0KKyAgICAgICAgLCBtX2VuY29kZWRMZW5ndGggeyBjYWxjdWxhdGVCYXNlNjRFbmNvZGVk
U2l6ZShiYXNlNjQuaW5wdXREYXRhLnNpemUoKSwgYmFzZTY0LnBvbGljeSkgfQogICAgIHsKICAg
ICB9CiAKQEAgLTI2Nyw3ICsyMjQsNyBAQCBwdWJsaWM6CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiB2b2lkIHdyaXRlVG8oQ2hhcmFjdGVyVHlwZSogZGVzdGluYXRpb24p
IGNvbnN0CiAgICAgewotICAgICAgICBiYXNlNjRFbmNvZGUobV9iYXNlNjQuaW5wdXREYXRhLCBt
X2Jhc2U2NC5pbnB1dExlbmd0aCwgZGVzdGluYXRpb24sIG1fZW5jb2RlZExlbmd0aCwgbV9iYXNl
NjQucG9saWN5LCBtX2Jhc2U2NC5tYXApOworICAgICAgICBiYXNlNjRFbmNvZGUobV9iYXNlNjQu
aW5wdXREYXRhLCBkZXN0aW5hdGlvbiwgbV9lbmNvZGVkTGVuZ3RoLCBtX2Jhc2U2NC5wb2xpY3ks
IG1fYmFzZTY0Lm1hcCk7CiAgICAgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dURi93dGYv
dGV4dC9DU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9DU3RyaW5n
LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMu
aD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvU3Bhbi5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtMzksOSArNDAsMTEg
QEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoQwogY2xhc3MgQ1N0cmlu
Z0J1ZmZlciBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPENTdHJpbmdCdWZmZXI+IHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihDU3RyaW5nQnVmZmVy
KTsKIHB1YmxpYzoKLSAgICBjb25zdCBjaGFyKiBkYXRhKCkgeyByZXR1cm4gbXV0YWJsZURhdGEo
KTsgfQorICAgIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PENT
dHJpbmdCdWZmZXIqPih0aGlzKS0+bXV0YWJsZURhdGEoKTsgfQogICAgIHNpemVfdCBsZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQogCisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+
IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4gYXNCeXRlcyhTcGFuIHsgZGF0YSgpLCBsZW5ndGgoKSB9
KTsgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDU3RyaW5nOwogCkBAIC02Niw2ICs2
OSwyMCBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBDU3RyaW5nIG5l
d1VuaW5pdGlhbGl6ZWQoc2l6ZV90IGxlbmd0aCwgY2hhciomIGNoYXJhY3RlckJ1ZmZlcik7CiAg
ICAgQ1N0cmluZyhIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IG1fYnVmZmVyKEhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSkgeyB9CiAKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fYnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIG1f
YnVmZmVyLT5ieXRlcygpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFNwYW48
c3RkOjpieXRlPiBtdXRhYmxlQnl0ZXMoKQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8gbXV0YWJs
ZURhdGEgPSB0aGlzLT5tdXRhYmxlRGF0YSgpKQorICAgICAgICAgICAgcmV0dXJuIGFzV3JpdGFi
bGVCeXRlcyhTcGFuIHsgbXV0YWJsZURhdGEsIG1fYnVmZmVyLT5sZW5ndGgoKSB9KTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICB9CisKICAgICBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3QKICAg
ICB7CiAgICAgICAgIHJldHVybiBtX2J1ZmZlciA/IG1fYnVmZmVyLT5kYXRhKCkgOiBudWxscHRy
OwpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5
NCw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBMQ2hhciogY2hhcmFjdGVyczgoKSBjb25zdDsKICAg
ICBjb25zdCBVQ2hhciogY2hhcmFjdGVyczE2KCkgY29uc3Q7CiAKKyAgICBTcGFuPGNvbnN0IHN0
ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25zdDsKKwogICAgIGJvb2wgaXNBbGxBU0NJSSgpIGNvbnN0Owog
CiAgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CkBAIC00MjQsNiArNDI2LDEzIEBAIGlubGlu
ZSBjb25zdCBVQ2hhciogU3RyaW5nVmlldzo6Y2hhcmFjdGUKICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgVUNoYXIqPihtX2NoYXJhY3RlcnMpOwogfQogCitpbmxpbmUgU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+IFN0cmluZ1ZpZXc6OmJ5dGVzKCkgY29uc3QKK3sKKyAgICBpZiAoaXM4Qml0KCkp
CisgICAgICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSB9
KTsKKyAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgY2hhcmFjdGVyczE2KCksIGxlbmd0aCgpIH0p
OworfQorCiBpbmxpbmUgYm9vbCBTdHJpbmdWaWV3Ojppc0FsbEFTQ0lJKCkgY29uc3QKIHsKICAg
ICBpZiAoaXM4Qml0KCkpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHJldmlzaW9uIDI3
ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPHd0Zi9G
dW5jdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQVND
SUlMaXRlcmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvSW50ZWdlclRvU3RyaW5nQ29udmVyc2lv
bi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KQEAgLTEzNCw2ICsxMzUsNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiAhbV9pbXBsIHx8IG1f
aW1wbC0+aXM4Qml0KCk7IH0KIAogICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5sZW5ndGgoKSAqIChpczhCaXQoKSA/IHNpemVvZihMQ2hh
cikgOiBzaXplb2YoVUNoYXIpKSA6IDA7IH0KKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0
ZXMoKSBjb25zdDsKIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBDU3RyaW5nIGFzY2lpKCkgY29u
c3Q7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIENTdHJpbmcgbGF0aW4xKCkgY29uc3Q7CkBAIC00
ODMsNiArNDg1LDE2IEBAIHRlbXBsYXRlPD4gaW5saW5lIGNvbnN0IFVDaGFyKiBTdHJpbmc6OmMK
ICAgICByZXR1cm4gY2hhcmFjdGVyczE2KCk7CiB9CiAKK2lubGluZSBTcGFuPGNvbnN0IHN0ZDo6
Ynl0ZT4gU3RyaW5nOjpieXRlcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ltcGwpCisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICBpZiAobV9pbXBsLT5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJu
IGFzQnl0ZXMoU3BhbiB7IG1faW1wbC0+Y2hhcmFjdGVyczgoKSwgbV9pbXBsLT5sZW5ndGgoKSB9
KTsKKyAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgbV9pbXBsLT5jaGFyYWN0ZXJzMTYoKSwgbV9p
bXBsLT5sZW5ndGgoKSB9KTsKK30KKwogaW5saW5lIFVDaGFyIFN0cmluZzo6Y2hhcmFjdGVyQXQo
dW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ltcGwgfHwgaW5kZXggPj0gbV9p
bXBsLT5sZW5ndGgoKSkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzYzLDkgKzM2Myw5IEBAIFN0cmluZyBjcmVhdGVUZW1wb3JhcnlE
aXJlY3RvcnkoKQogICAgIH0pOwogfQogCi1ib29sIHVubWFwVmlld09mRmlsZSh2b2lkKiBidWZm
ZXIsIHNpemVfdCkKK2Jvb2wgdW5tYXBWaWV3T2ZGaWxlKFNwYW48c3RkOjpieXRlPiBkYXRhKQog
ewotICAgIHJldHVybiBVbm1hcFZpZXdPZkZpbGUoYnVmZmVyKTsKKyAgICByZXR1cm4gVW5tYXBW
aWV3T2ZGaWxlKGRhdGEuZGF0YSgpKTsKIH0KIAogYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmls
ZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBGaWxlT3Blbk1vZGUgb3Blbk1vZGUs
IE1hcHBlZEZpbGVNb2RlKQpAQCAtMzc0LDcgKzM3NCw3IEBAIGJvb2wgTWFwcGVkRmlsZURhdGE6
Om1hcEZpbGVIYW5kbGUoUGxhdGYKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byBz
aXplID0gZmlsZVNpemUoaGFuZGxlKTsKLSAgICBpZiAoIXNpemUgfHwgKnNpemUgPiBzdGQ6Om51
bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIHx8ICpzaXplID4gc3RkOjpudW1lcmljX2xpbWl0
czxkZWNsdHlwZShtX2ZpbGVTaXplKT46Om1heCgpKSB7CisgICAgaWYgKCFzaXplIHx8ICpzaXpl
ID4gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSB8fCAqc2l6ZSA+IHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZGVjbHR5cGUobV9maWxlRGF0YS5zaXplKCkpPjo6bWF4KCkpIHsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNDAzLDExICs0MDMsMTIgQEAgYm9vbCBNYXBw
ZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0ZgogICAgIGlmICghbWFwcGluZykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9maWxlRGF0YSA9IE1hcFZpZXdPZkZpbGUobWFwcGlu
ZywgZGVzaXJlZEFjY2VzcywgMCwgMCwgKnNpemUpOworICAgIGF1dG8gZGF0YSA9IE1hcFZpZXdP
ZkZpbGUobWFwcGluZywgZGVzaXJlZEFjY2VzcywgMCwgMCwgKnNpemUpOwogICAgIENsb3NlSGFu
ZGxlKG1hcHBpbmcpOwotICAgIGlmICghbV9maWxlRGF0YSkKKyAgICBpZiAoIWRhdGEpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2ZpbGVTaXplID0gKnNpemU7CisKKyAgICBtX2ZpbGVE
YXRhID0gU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpieXRlKj4oZGF0YSksICpzaXplIH07
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgw
IEBACisyMDIxLTA2LTExICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAg
ICBBZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogTW9kdWxlcy9oaWdobGlnaHQv
QXBwSGlnaGxpZ2h0Lmg6CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHQ6OmVuY29kZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHQ6OmRlY29kZSk6CisgICAgICAg
ICogTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6dG9TaGFyZWRCdWZmZXIgY29uc3QpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvclJlc3BvbnNlRGF0YS5oOgor
ICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlQXJyYXlCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
ZGVjb2RlQXJyYXlCdWZmZXIpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oOgorICAgICAgICAoV2ViQ29yZTo6UHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmg6CisgICAgICAgIChX
ZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcjo6ZW5jb2RlIGNvbnN0KToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRXZWJTb2NrZXRBY2Nl
cHQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0J1ZmZlclNvdXJjZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6QnVmZmVyU291cmNlOjpieXRlcyBjb25zdCk6CisgICAgICAgICogYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmRlY29kZSk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvU2VyaWFsaXpl
ZE5GQS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6U2VyaWFsaXpl
ZE5GQTo6cG9pbnRlckF0T2Zmc2V0SW5GaWxlIGNvbnN0KToKKyAgICAgICAgKiBjcnlwdG8vbWFj
L1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
QW5kU3RvcmVNYXN0ZXJLZXkpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Omhhc2hQb2ludGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBhdGNoU3VwcG9ydDo6Y3JlYXRlRGlnZXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OmFkZFN0cmluZ1RvU0hBMSk6IERlbGV0ZWQuCisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZpY2F0ZSk6CisgICAgICAgICogaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yTmV0d29ya0FnZW50OjpnZXRTZXJpYWxpemVkQ2VydGlmaWNhdGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpjcmVhdGVTaGFyZWRCdWZmZXIgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRC
dWZmZXI6OlNoYXJlZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmFw
cGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpkYXRh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmJ5
dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6ZGVjb2RlciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpzaXplIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZGVjb2RlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Nb2RlbC5oOgorICAgICAgICAoV2ViQ29yZTo6TW9kZWw6OmVuY29k
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNb2RlbDo6ZGVjb2RlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6UGl4ZWxC
dWZmZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6ZGVj
b2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNl
Q2FwYWJpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpDYXBhYmlsaXR5VmFsdWVPclJhbmdl
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FwYWJpbGl0eVZhbHVlT3JSYW5n
ZTo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlh
U291cmNlQ2VudGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZFN0cmluZ1RvU0hBMSk6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHA6Cisg
ICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjplbmNvZGVDRkRhdGEpOgorICAgICAgICAoV1RGOjpQ
ZXJzaXN0ZW5jZTo6ZGVjb2RlQ0ZEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRl
U3RhdGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6YmluZEJs
b2IpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaDoKKyAgICAgICAg
KiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzKToKKyAgICAg
ICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTV1NjcmlwdFN0b3JhZ2U6OnN0b3JlKToKKwogMjAyMS0wNi0xMSAgQ2hyaXMg
RHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIExhemlseSBjb21wdXRlIFNlY3Vy
aXR5T3JpZ2luOjptX2lzUG90ZW50aWFsbHlUcnVzdHdvcnRoeSBmb3IgcGVyZm9ybWFuY2UKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvSW5pdERhdGFSZWdpc3Ry
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRp
YS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIHN0YXRpYyBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzYW5p
dGl6ZUtleWkKICAgICBhdXRvIG9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAg
YXV0byBraWRzQXJyYXkgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgZm9yIChhdXRvJiBi
dWZmZXIgOiBrZXlJREJ1ZmZlci52YWx1ZSgpKQotICAgICAgICBraWRzQXJyYXktPnB1c2hTdHJp
bmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgp
KSk7CisgICAgICAgIGtpZHNBcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVUb1N0cmlu
ZyhidWZmZXItPmJ5dGVzKCkpKTsKICAgICBvYmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92
ZShraWRzQXJyYXkpKTsKIAogICAgIENTdHJpbmcganNvbkRhdGEgPSBvYmplY3QtPnRvSlNPTlN0
cmluZygpLnV0ZjgoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0Fw
cEhpZ2hsaWdodC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxp
Z2h0L0FwcEhpZ2hsaWdodC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyAr
NTIsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBBcHBIaWdobGlnaHQ6OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
c2l6ZV90PihoaWdobGlnaHQtPnNpemUoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEoaGlnaGxpZ2h0LT5kYXRhKCksIGhpZ2hsaWdodC0+c2l6ZSgpLCAxKTsKKyAgICBlbmNv
ZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YSgqaGlnaGxpZ2h0LCAxKTsKIAogICAgIGVuY29kZXIg
PDwgdGV4dDsKIApAQCAtNzUsNyArNzUsNyBAQCBzdGQ6Om9wdGlvbmFsPEFwcEhpZ2hsaWdodD4g
QXBwSGlnaGxpZ2h0CiAKICAgICBWZWN0b3I8dWludDhfdD4gaGlnaGxpZ2h0OwogICAgIGhpZ2hs
aWdodC5ncm93KCpsZW5ndGgpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERh
dGEoaGlnaGxpZ2h0LmRhdGEoKSwgaGlnaGxpZ2h0LnNpemUoKSwgMSkpCisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShoaWdobGlnaHQsIDEpKQogICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwogCiAgICAgc3RkOjpvcHRpb25hbDxzdGQ6Om9wdGlvbmFsPFN0cmluZz4+
IHRleHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGln
aHRSYW5nZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGln
aGxpZ2h0L0FwcEhpZ2hsaWdodFJhbmdlRGF0YS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFJhbmdlRGF0YS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgUmVmPFNoYXJlZEJ1ZmZlcj4gQXBwSGln
aGxpZ2h0UmFuZ2VEYXRhOgogewogICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2Rl
cjsKICAgICBlbmNvZGVyIDw8ICp0aGlzOwotICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0
ZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgcmV0dXJuIFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCkpOwogfQogCiB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPiB2b2lkIEFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6Tm9kZVBhdGhDb21wb25lbnQ6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAJKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNo
YW5uZWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIE5ldHdvcmtTZW5kUXVl
dWUgUlRDRGF0YUNoYW5uZWw6OmNyZWF0ZU0KICAgICAgICAgaWYgKCFjaGFubmVsLm1faGFuZGxl
ci0+c2VuZFN0cmluZ0RhdGEodXRmOCkpCiAgICAgICAgICAgICBjaGFubmVsLnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3Nh
Z2VMZXZlbDo6RXJyb3IsICJFcnJvciBzZW5kaW5nIHN0cmluZyB0aHJvdWdoIFJUQ0RhdGFDaGFu
bmVsLiJfcyk7CiAgICAgfSwgWyZjaGFubmVsXShhdXRvJiBzcGFuKSB7Ci0gICAgICAgIGlmICgh
Y2hhbm5lbC5tX2hhbmRsZXItPnNlbmRSYXdEYXRhKHNwYW4uZGF0YSgpLCBzcGFuLnNpemUoKSkp
CisgICAgICAgIGlmICghY2hhbm5lbC5tX2hhbmRsZXItPnNlbmRSYXdEYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNwYW4uZGF0YSgpKSwgc3Bhbi5zaXplKCkpKQogICAgICAg
ICAgICAgY2hhbm5lbC5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFkZENvbnNvbGVNZXNzYWdl
KE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAiRXJyb3Igc2VuZGluZyBi
aW5hcnkgZGF0YSB0aHJvdWdoIFJUQ0RhdGFDaGFubmVsLiJfcyk7CiAgICAgfSwgWyZjaGFubmVs
XShFeGNlcHRpb25Db2RlIGVycm9yQ29kZSkgewogICAgICAgICBpZiAoYXV0byogY29udGV4dCA9
IGNoYW5uZWwuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxh
Y2VtZW50Lm1tCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Bs
dWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTUy
LDYgKzUyLDcgQEAKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0NhdGNoU2NvcGUuaD4KICNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CiAjaW1wb3J0IDxvYmpjL3J1bnRp
bWUuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9TcGFuQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi90ZXh0
L0Jhc2U2NC5oPgogCiAjaW1wb3J0IDxwYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaD4KQEAgLTI0
Niw5ICsyNDcsOSBAQCBzdGF0aWMgSlNWYWx1ZSAqanNWYWx1ZVdpdGhEYXRhSW5Db250ZXh0CiAg
ICAgLy8gRklYTUU6IEFkZCBtYWtlQ0ZTdHJpbmcvbWFrZU5TU3RyaW5nIHRvIGF2b2lkIHVubmVj
ZXNzYXJ5IFN0cmluZyBhbGxvY2F0aW9uLgogICAgIFN0cmluZyBkYXRhNjQ7CiAgICAgaWYgKCFt
aW1lVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6Iiwg
bWltZVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoW2RhdGEgYnl0ZXNdLCBbZGF0YSBs
ZW5ndGhdKSk7CisgICAgICAgIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgbWltZVR5cGUs
ICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoYXNCeXRlcyhkYXRhKSkpOwogICAgIGVsc2UKLSAg
ICAgICAgZGF0YTY0ID0gbWFrZVN0cmluZygiZGF0YTp0ZXh0L3BsYWluO2Jhc2U2NCwiLCBiYXNl
NjRFbmNvZGVkKFtkYXRhIGJ5dGVzXSwgW2RhdGEgbGVuZ3RoXSkpOworICAgICAgICBkYXRhNjQg
PSBtYWtlU3RyaW5nKCJkYXRhOnRleHQvcGxhaW47YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoYXNC
eXRlcyhkYXRhKSkpOwogCiAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aE9iamVjdDooaWQp
ZGF0YTY0LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkgaW5Db250ZXh0OmNvbnRleHRdOwogfQpAQCAt
MzQwLDcgKzM0MSw3IEBAIHN0YXRpYyBKU1ZhbHVlICpqc1ZhbHVlV2l0aEFWTWV0YWRhdGFJdGUK
ICAgICAgICAgaWQgdmFsdWUgPSBpdGVtLnZhbHVlOwogICAgICAgICBOU1N0cmluZyAqbWltZVR5
cGUgPSBbW2l0ZW0gZXh0cmFBdHRyaWJ1dGVzXSBvYmplY3RGb3JLZXk6QCJNSU1FdHlwZSJdOwog
ICAgICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TRGF0YSBjbGFzc11dICYmIG1pbWVU
eXBlKSB7Ci0gICAgICAgICAgICBhdXRvIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgU3Ry
aW5nKG1pbWVUeXBlKSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChbdmFsdWUgYnl0ZXNdLCBb
dmFsdWUgbGVuZ3RoXSkpOworICAgICAgICAgICAgYXV0byBkYXRhNjQgPSBtYWtlU3RyaW5nKCJk
YXRhOiIsIFN0cmluZyhtaW1lVHlwZSksICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoYXNCeXRl
cygoTlNEYXRhICopdmFsdWUpKSk7CiAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6
KF9fYnJpZGdlIE5TU3RyaW5nICopZGF0YTY0LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkgZm9yS2V5
OkAidmFsdWUiXTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRP
YmplY3Q6dmFsdWUgZm9yS2V5OkAidmFsdWUiXTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRpY2F0b3JDb29yZGluYXRvci5j
cHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4v
QXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQs
NyBAQCBzdGF0aWMgUmVmPEFycmF5QnVmZmVyPiBwcm9kdWNlQ2xpZW50RGF0CiAgICAgICAgIG9i
amVjdC0+c2V0U3RyaW5nKCJ0eXBlIl9zLCAid2ViYXV0aG4uZ2V0Il9zKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQotICAgIG9iamVjdC0+c2V0U3RyaW5nKCJjaGFsbGVuZ2UiX3MsIGJhc2U2NFVS
TEVuY29kZVRvU3RyaW5nKGNoYWxsZW5nZS5kYXRhKCksIGNoYWxsZW5nZS5sZW5ndGgoKSkpOwor
ICAgIG9iamVjdC0+c2V0U3RyaW5nKCJjaGFsbGVuZ2UiX3MsIGJhc2U2NFVSTEVuY29kZVRvU3Ry
aW5nKGNoYWxsZW5nZS5ieXRlcygpKSk7CiAgICAgb2JqZWN0LT5zZXRTdHJpbmcoIm9yaWdpbiJf
cywgb3JpZ2luLnRvUmF3U3RyaW5nKCkpOwogCiAgICAgYXV0byB1dGY4SlNPTlN0cmluZyA9IG9i
amVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdXRobi9BdXRoZW50aWNhdG9yUmVzcG9uc2VEYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yUmVzcG9uc2VEYXRhLmgJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0
aGVudGljYXRvclJlc3BvbnNlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBA
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiBzdGF0aWMgdm9pZCBlbmNvZGVBcnJheUJ1ZmZlcihF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBBcnJheUJ1ZmZlciYgYnVmZmVyKQogewogICAgIGVuY29k
ZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ1ZmZlci5ieXRlTGVuZ3RoKCkpOwotICAgIGVu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihi
dWZmZXIuZGF0YSgpKSwgYnVmZmVyLmJ5dGVMZW5ndGgoKSwgMSk7CisgICAgZW5jb2Rlci5lbmNv
ZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLmJ5dGVzKCksIDEpOwogfQogCiB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgpAQCAtNzUsNyArNzUsNyBAQCBSZWZQdHI8QXJyYXlCdWZmZXI+IGRlY29kZUFy
cmF5QnVmZmVyKERlCiAgICAgYXV0byBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKGxl
bmd0aC52YWx1ZSgpLCBzaXplb2YodWludDhfdCkpOwogICAgIGlmICghYnVmZmVyKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihidWZmZXItPmRhdGEoKSksIGxlbmd0aC52YWx1ZSgpLCAx
KSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ1ZmZlci0+d3JpdGFi
bGVCeXRlcygpLCAxKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIGJ1ZmZl
cjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3Jl
ZGVudGlhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRo
bi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTQsNyArNTQsNyBAQCBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRw
dXRzIFB1CiB9CiAKIFB1YmxpY0tleUNyZWRlbnRpYWw6OlB1YmxpY0tleUNyZWRlbnRpYWwoUmVm
PEF1dGhlbnRpY2F0b3JSZXNwb25zZT4mJiByZXNwb25zZSkKLSAgICA6IEJhc2ljQ3JlZGVudGlh
bChiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhyZXNwb25zZS0+cmF3SWQoKS0+ZGF0YSgpLCByZXNw
b25zZS0+cmF3SWQoKS0+Ynl0ZUxlbmd0aCgpKSwgVHlwZTo6UHVibGljS2V5LCBEaXNjb3Zlcnk6
OlJlbW90ZSkKKyAgICA6IEJhc2ljQ3JlZGVudGlhbChiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhy
ZXNwb25zZS0+cmF3SWQoKS0+Ynl0ZXMoKSksIFR5cGU6OlB1YmxpY0tleSwgRGlzY292ZXJ5OjpS
ZW1vdGUpCiAgICAgLCBtX3Jlc3BvbnNlKFdURk1vdmUocmVzcG9uc2UpKQogewogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRp
b25PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRo
bi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmgJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENy
ZWF0aW9uT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsOCArMTQxLDggQEAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9u
czo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBycC5p
ZCA8PCBycC5uYW1lIDw8IHJwLmljb247Ci0gICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50
NjRfdD4odXNlci5pZC5sZW5ndGgoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERh
dGEodXNlci5pZC5kYXRhKCksIHVzZXIuaWQubGVuZ3RoKCksIDEpOworICAgIGVuY29kZXIgPDwg
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHVzZXIuaWQuYnl0ZXMoKS5zaXplKCkpOworICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHVzZXIuaWQuYnl0ZXMoKSwgMSk7CiAgICAgZW5jb2Rl
ciA8PCB1c2VyLmRpc3BsYXlOYW1lIDw8IHVzZXIubmFtZSA8PCB1c2VyLmljb24gPDwgcHViS2V5
Q3JlZFBhcmFtcyA8PCB0aW1lb3V0IDw8IGV4Y2x1ZGVDcmVkZW50aWFscyA8PCBhdXRoZW50aWNh
dG9yU2VsZWN0aW9uIDw8IGF0dGVzdGF0aW9uIDw8IGV4dGVuc2lvbnM7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1Ymxp
Y0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsOCBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgog
dm9pZCBQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcjo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCB0eXBlOwotICAgIGVuY29kZXIgPDwgc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KGlkLmxlbmd0aCgpKTsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShpZC5kYXRhKCksIGlkLmxlbmd0aCgpLCAxKTsKKyAgICBlbmNvZGVyIDw8IHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihpZC5ieXRlcygpLnNpemUoKSk7CisgICAgZW5jb2Rlci5lbmNvZGVG
aXhlZExlbmd0aERhdGEoaWQuYnl0ZXMoKSwgMSk7CiAgICAgZW5jb2RlciA8PCB0cmFuc3BvcnRz
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0
SGFuZHNoYWtlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNv
Y2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk3LDE5ICs5NywyMCBAQCBzdGF0aWMgU3RyaW5nIGdlbmVyYXRlU2VjV2Vi
U29ja2V0S2V5KCkKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG5vbmNlU2l6ZSA9IDE2OwogICAg
IHVuc2lnbmVkIGNoYXIga2V5W25vbmNlU2l6ZV07CiAgICAgY3J5cHRvZ3JhcGhpY2FsbHlSYW5k
b21WYWx1ZXMoa2V5LCBub25jZVNpemUpOwotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmlu
ZyhrZXksIG5vbmNlU2l6ZSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGtleSk7
CiB9CiAKIFN0cmluZyBXZWJTb2NrZXRIYW5kc2hha2U6OmdldEV4cGVjdGVkV2ViU29ja2V0QWNj
ZXB0KGNvbnN0IFN0cmluZyYgc2VjV2ViU29ja2V0S2V5KQogewogICAgIGNvbnN0ZXhwciB1aW50
OF90IHdlYlNvY2tldEtleUdVSURbXSA9ICIyNThFQUZBNS1FOTE0LTQ3REEtOTVDQS1DNUFCMERD
ODVCMTEiOworCiAgICAgU0hBMSBzaGExOwotICAgIENTdHJpbmcga2V5RGF0YSA9IHNlY1dlYlNv
Y2tldEtleS5hc2NpaSgpOwotICAgIHNoYTEuYWRkQnl0ZXMoa2V5RGF0YS5kYXRhQXNVSW50OFB0
cigpLCBrZXlEYXRhLmxlbmd0aCgpKTsKLSAgICBzaGExLmFkZEJ5dGVzKHdlYlNvY2tldEtleUdV
SUQsIHN0ZDo6c2l6ZSh3ZWJTb2NrZXRLZXlHVUlEKSAtIDEpOworICAgIHNoYTEuYWRkQnl0ZXMo
c2VjV2ViU29ja2V0S2V5LmFzY2lpKCkuYnl0ZXMoKSk7CisgICAgc2hhMS5hZGRCeXRlcyh3ZWJT
b2NrZXRLZXlHVUlEKTsKKwogICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwogICAgIHNoYTEuY29tcHV0
ZUhhc2goaGFzaCk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGhhc2guZGF0YSgp
LCBTSEExOjpoYXNoU2l6ZSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGhhc2gp
OwogfQogCiBXZWJTb2NrZXRIYW5kc2hha2U6OldlYlNvY2tldEhhbmRzaGFrZShjb25zdCBVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNv
bnN0IFN0cmluZyYgY2xpZW50T3JpZ2luLCBib29sIGFsbG93Q29va2llcykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvV2ViQ29y
ZS54Y3NjaGVtZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai94Y3NoYXJlZGRhdGEveGNzY2hlbWVzL1dlYkNvcmUueGNzY2hlbWUJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3Nj
aGVtZXMvV2ViQ29yZS54Y3NjaGVtZQkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksOSBAQAog
ICAgICAgaWdub3Jlc1BlcnNpc3RlbnRTdGF0ZU9uTGF1bmNoID0gIk5PIgogICAgICAgZGVidWdE
b2N1bWVudFZlcnNpb25pbmcgPSAiWUVTIgogICAgICAgZGVidWdTZXJ2aWNlRXh0ZW5zaW9uID0g
ImludGVybmFsIgotICAgICAgYWxsb3dMb2NhdGlvblNpbXVsYXRpb24gPSAiWUVTIj4KKyAgICAg
IGVuYWJsZUdQVUZyYW1lQ2FwdHVyZU1vZGUgPSAiMyIKKyAgICAgIGFsbG93TG9jYXRpb25TaW11
bGF0aW9uID0gIllFUyIKKyAgICAgIEdQVVByb2ZpbGVyRW5hYmxlZCA9ICJObyI+CiAgICA8L0xh
dW5jaEFjdGlvbj4KICAgIDxQcm9maWxlQWN0aW9uCiAgICAgICBidWlsZENvbmZpZ3VyYXRpb24g
PSAiUmVsZWFzZSIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0J1ZmZlclNvdXJj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0J1ZmZlclNvdXJj
ZS5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9CdWZm
ZXJTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsMTMgQEAgcHVibGljOgogICAg
ICAgICB9LCBtX3ZhcmlhbnQpOwogICAgIH0KIAorICAgIFNwYW48Y29uc3QgdWludDhfdD4gYnl0
ZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQoW10oYXV0byYgYnVm
ZmVyKSAtPiBTcGFuPGNvbnN0IHVpbnQ4X3Q+IHsKKyAgICAgICAgICAgIHJldHVybiBidWZmZXIg
PyBTcGFuPGNvbnN0IHVpbnQ4X3Q+IHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZl
ci0+ZGF0YSgpKSwgYnVmZmVyLT5ieXRlTGVuZ3RoKCkgfSA6IFNwYW48Y29uc3QgdWludDhfdD4g
eyB9OworICAgICAgICB9LCBtX3ZhcmlhbnQpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBWYXJp
YW50VHlwZSBtX3ZhcmlhbnQ7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjQsMTUgKzE2NCwxNSBAQCB2b2lkIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
ZW5jb2RlKEVuY29kCiAKICAgICBpZiAoaGFzQXJyYXkpIHsKICAgICAgICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDx1aW50NjRfdD4obV9hcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXktPnNpemUoKSk7
Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byAmYXJyYXlCdWZmZXJDb250ZW50cyA6ICptX2FycmF5
QnVmZmVyQ29udGVudHNBcnJheSkgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGFycmF5QnVm
ZmVyQ29udGVudHMgOiAqbV9hcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkpIHsKICAgICAgICAgICAg
IGVuY29kZXIgPDwgYXJyYXlCdWZmZXJDb250ZW50cy5zaXplSW5CeXRlcygpOwotICAgICAgICAg
ICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGFycmF5QnVmZmVyQ29udGVudHMuZGF0YSgpKSwgYXJyYXlCdWZmZXJDb250ZW50cy5zaXpl
SW5CeXRlcygpLCAxKTsKKyAgICAgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KGFycmF5QnVmZmVyQ29udGVudHMuYnl0ZXMoKSwgMSk7CiAgICAgICAgIH0KICAgICB9CiAKICNp
ZiBFTkFCTEUoV0VCX1JUQykKICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Piht
X2RldGFjaGVkUlRDRGF0YUNoYW5uZWxzLnNpemUoKSk7Ci0gICAgZm9yIChjb25zdCBhdXRvICZj
aGFubmVsIDogbV9kZXRhY2hlZFJUQ0RhdGFDaGFubmVscykKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IGNoYW5uZWwgOiBtX2RldGFjaGVkUlRDRGF0YUNoYW5uZWxzKQogICAgICAgICBlbmNvZGVyIDw8
ICpjaGFubmVsOwogI2VuZGlmCiB9CkBAIC0yMDYsNyArMjA2LDcgQEAgUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZAogICAgICAgICAgICAgYXV0byBidWZmZXIgPSBHaWdh
Y2FnZTo6dHJ5TWFsbG9jKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJ1ZmZlclNpemUpOwogICAgICAg
ICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihidWZmZXIpLCBidWZmZXJTaXplLCAxKSkgeworICAgICAgICAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgc3RhdGljX2Nhc3Q8c3RkOjpieXRlKj4o
YnVmZmVyKSwgYnVmZmVyU2l6ZSB9LCAxKSkgewogICAgICAgICAgICAgICAgIEdpZ2FjYWdlOjpm
cmVlKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9TZXJpYWxpemVkTkZBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9TZXJpYWxpemVkTkZBLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvU2VyaWFsaXplZE5GQS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBTZXJpYWxpemVkTkZBOjpTZXJpYWxpemVkTkZB
KEZpbGVTeXN0ZW06CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogY29uc3QgVCogU2VyaWFsaXplZE5G
QTo6cG9pbnRlckF0T2Zmc2V0SW5GaWxlKHNpemVfdCBvZmZzZXQpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihtX2ZpbGUuZGF0YSgpKSArIG9mZnNldCk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgVCo+KG1fZmlsZS5kYXRhKCkuZGF0YSgpICsgb2Zmc2V0KTsKIH0KIAogYXV0byBTZXJp
YWxpemVkTkZBOjpub2RlcygpIGNvbnN0IC0+IGNvbnN0IFJhbmdlPEltbXV0YWJsZU5GQU5vZGU+
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNwcAko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlF
Q01hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NywxMCArMTk3LDEwIEBAIGJvb2wgQ3J5cHRv
S2V5RUM6OnBsYXRmb3JtQWRkRmllbGRFbGVtZW4KIAogICAgIGlmIChVTkxJS0VMWSgoc2l6ZSAh
PSBwdWJsaWNLZXlTaXplKSAmJiAoc2l6ZSAhPSBwcml2YXRlS2V5U2l6ZSkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgandrLnggPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhyZXN1bHQu
ZGF0YSgpICsgMSwga2V5U2l6ZUluQnl0ZXMpOwotICAgIGp3ay55ID0gYmFzZTY0VVJMRW5jb2Rl
VG9TdHJpbmcocmVzdWx0LmRhdGEoKSArIGtleVNpemVJbkJ5dGVzICsgMSwga2V5U2l6ZUluQnl0
ZXMpOworICAgIGp3ay54ID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoU3BhbiB7IHJlc3VsdCB9
LnN1YnNwYW4oMSwga2V5U2l6ZUluQnl0ZXMpKTsKKyAgICBqd2sueSA9IGJhc2U2NFVSTEVuY29k
ZVRvU3RyaW5nKFNwYW4geyByZXN1bHQgfS5zdWJzcGFuKDEgKyBrZXlTaXplSW5CeXRlcywga2V5
U2l6ZUluQnl0ZXMpKTsKICAgICBpZiAoc2l6ZSA+IHB1YmxpY0tleVNpemUpCi0gICAgICAgIGp3
ay5kID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcocmVzdWx0LmRhdGEoKSArIHB1YmxpY0tleVNp
emUsIGtleVNpemVJbkJ5dGVzKTsKKyAgICAgICAgandrLmQgPSBiYXNlNjRVUkxFbmNvZGVUb1N0
cmluZyhTcGFuIHsgcmVzdWx0IH0uc3Vic3BhbihwdWJsaWNLZXlTaXplLCBrZXlTaXplSW5CeXRl
cykpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
bWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9tYWMvU2VyaWFsaXplZENyeXB0b0tleVdyYXBNYWMubW0JKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvU2VyaWFsaXplZENyeXB0b0tl
eVdyYXBNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbXBvcnQgPHd0
Zi9DcnlwdG9ncmFwaGljVXRpbGl0aWVzLmg+CiAjaW1wb3J0IDx3dGYvUHJvY2Vzc1ByaXZpbGVn
ZS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL2NmL1NwYW5DRi5o
PgogI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvc3BpL2Nv
Y29hL1NlY3VyaXR5U1BJLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4KQEAgLTE2Nyw3
ICsxNjgsNyBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGZpCiAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+
IGtleURhdGEgPSBhZG9wdENGKGtleURhdGFSZWYpOwotICAgIHJldHVybiBiYXNlNjREZWNvZGUo
Q0ZEYXRhR2V0Qnl0ZVB0cihrZXlEYXRhLmdldCgpKSwgQ0ZEYXRhR2V0TGVuZ3RoKGtleURhdGEu
Z2V0KCkpKTsKKyAgICByZXR1cm4gYmFzZTY0RGVjb2RlKGFzQnl0ZXMoa2V5RGF0YS5nZXQoKSkp
OwogfQogCiBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZGVmYXVsdFdlYkNyeXB0b01h
c3RlcktleSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MDYsNyArMTYwNiw4
IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IE5vZGU6OnNldFRleHRDb250ZW50KGMKIHN0YXRpYyBTSEEx
OjpEaWdlc3QgaGFzaFBvaW50ZXIoY29uc3Qgdm9pZCogcG9pbnRlcikKIHsKICAgICBTSEExIHNo
YTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigm
cG9pbnRlciksIHNpemVvZihwb2ludGVyKSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgJnBv
aW50ZXIsIDEgfSk7CisKICAgICBTSEExOjpEaWdlc3QgZGlnZXN0OwogICAgIHNoYTEuY29tcHV0
ZUhhc2goZGlnZXN0KTsKICAgICByZXR1cm4gZGlnZXN0OwpJbmRleDogU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMzgsNyArMzM4LDcgQEAgdm9pZCBGaWxlUmVhZGVyTG9hZGVyOjpjb252ZXJ0VG9EYXRhVVJM
KAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9zdHJpbmdSZXN1bHQgPSBtYWtlU3Ry
aW5nKCJkYXRhOiIsIG1fZGF0YVR5cGUuaXNFbXB0eSgpID8gImFwcGxpY2F0aW9uL29jdGV0LXN0
cmVhbSIgOiBtX2RhdGFUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKG1fcmF3RGF0YS0+
ZGF0YSgpLCBtX2J5dGVzTG9hZGVkKSk7CisgICAgbV9zdHJpbmdSZXN1bHQgPSBtYWtlU3RyaW5n
KCJkYXRhOiIsIG1fZGF0YVR5cGUuaXNFbXB0eSgpID8gImFwcGxpY2F0aW9uL29jdGV0LXN0cmVh
bSIgOiBtX2RhdGFUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKG1fcmF3RGF0YS0+Ynl0
ZXMoKSkpOwogfQogCiBib29sIEZpbGVSZWFkZXJMb2FkZXI6OmlzQ29tcGxldGVkKCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTmV0d29ya1NlbmRRdWV1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTEgKzUzLDEwIEBAIHZvaWQgTmV0d29ya1NlbmRR
dWV1ZTo6ZW5xdWV1ZShDU3RyaW5nJiYKIHZvaWQgTmV0d29ya1NlbmRRdWV1ZTo6ZW5xdWV1ZShj
b25zdCBKU0M6OkFycmF5QnVmZmVyJiBiaW5hcnlEYXRhLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
bnNpZ25lZCBieXRlTGVuZ3RoKQogewogICAgIGlmIChtX3F1ZXVlLmlzRW1wdHkoKSkgewotICAg
ICAgICBhdXRvKiBkYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJpbmFyeURhdGEu
ZGF0YSgpKTsKLSAgICAgICAgbV93cml0ZVJhd0RhdGEoU3BhbiB7IGRhdGEgKyBieXRlT2Zmc2V0
LCBieXRlTGVuZ3RoIH0pOworICAgICAgICBtX3dyaXRlUmF3RGF0YShiaW5hcnlEYXRhLmJ5dGVz
KCkuc3Vic3BhbihieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgbV9xdWV1ZS5hcHBlbmQoU2hhcmVkQnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8
Y29uc3QgdWludDhfdCo+KGJpbmFyeURhdGEuZGF0YSgpKSArIGJ5dGVPZmZzZXQsIGJ5dGVMZW5n
dGgpKTsKKyAgICBtX3F1ZXVlLmFwcGVuZChTaGFyZWRCdWZmZXI6OmNyZWF0ZShiaW5hcnlEYXRh
LmJ5dGVzKCkuc3Vic3BhbihieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSkpOwogfQogCiB2b2lkIE5l
dHdvcmtTZW5kUXVldWU6OmVucXVldWUoV2ViQ29yZTo6QmxvYiYgYmxvYikKQEAgLTkzLDcgKzky
LDkgQEAgdm9pZCBOZXR3b3JrU2VuZFF1ZXVlOjpwcm9jZXNzTWVzc2FnZXMoKQogICAgICAgICBz
d2l0Y2hPbihtX3F1ZXVlLmZpcnN0KCksIFt0aGlzXShjb25zdCBDU3RyaW5nJiB1dGY4KSB7CiAg
ICAgICAgICAgICBtX3dyaXRlU3RyaW5nKHV0ZjgpOwogICAgICAgICB9LCBbdGhpc10oUmVmPFNo
YXJlZEJ1ZmZlcj4mIGRhdGEpIHsKLSAgICAgICAgICAgIGRhdGEtPmZvckVhY2hTZWdtZW50KG1f
d3JpdGVSYXdEYXRhKTsKKyAgICAgICAgICAgIGRhdGEtPmZvckVhY2hTZWdtZW50KFt0aGlzXShh
dXRvJiBzcGFuKSB7CisgICAgICAgICAgICAgICAgbV93cml0ZVJhd0RhdGEoYXNCeXRlcyhzcGFu
KSk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfSwgW3RoaXMsICZzaG91bGRTdG9wUHJvY2Vz
c2luZ10oVW5pcXVlUmVmPEJsb2JMb2FkZXI+JiBsb2FkZXIpIHsKICAgICAgICAgICAgIGF1dG8g
ZXJyb3JDb2RlID0gbG9hZGVyLT5lcnJvckNvZGUoKTsKICAgICAgICAgICAgIGlmIChsb2FkZXIt
PmlzTG9hZGluZygpIHx8IChlcnJvckNvZGUgJiYgZXJyb3JDb2RlLnZhbHVlKCkgPT0gQWJvcnRF
cnJvcikpIHsKQEAgLTEwMiw3ICsxMDMsNyBAQCB2b2lkIE5ldHdvcmtTZW5kUXVldWU6OnByb2Nl
c3NNZXNzYWdlcygpCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChjb25zdCBhdXRv
JiByZXN1bHQgPSBsb2FkZXItPmFycmF5QnVmZmVyUmVzdWx0KCkpIHsKLSAgICAgICAgICAgICAg
ICBtX3dyaXRlUmF3RGF0YShTcGFuIHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KHJlc3Vs
dC0+ZGF0YSgpKSwgcmVzdWx0LT5ieXRlTGVuZ3RoKCkgfSk7CisgICAgICAgICAgICAgICAgbV93
cml0ZVJhd0RhdGEocmVzdWx0LT5ieXRlcygpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBBU1NFUlQoZXJyb3JDb2RlKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvTmV0d29ya1NlbmRRdWV1ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvTmV0d29ya1NlbmRRdWV1ZS5oCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL05ldHdvcmtTZW5kUXVldWUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDgsNyArNDgsNyBAQCBjbGFzcyBTaGFyZWRCdWZmZXI7CiBjbGFzcyBXRUJDT1JFX0VY
UE9SVCBOZXR3b3JrU2VuZFF1ZXVlIDogcHVibGljIENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVy
IHsKIHB1YmxpYzoKICAgICB1c2luZyBXcml0ZVN0cmluZyA9IEZ1bmN0aW9uPHZvaWQoY29uc3Qg
Q1N0cmluZyYgdXRmOCk+OwotICAgIHVzaW5nIFdyaXRlUmF3RGF0YSA9IEZ1bmN0aW9uPHZvaWQo
Y29uc3QgU3Bhbjxjb25zdCB1aW50OF90PiYpPjsKKyAgICB1c2luZyBXcml0ZVJhd0RhdGEgPSBG
dW5jdGlvbjx2b2lkKGNvbnN0IFNwYW48Y29uc3Qgc3RkOjpieXRlPiYpPjsKICAgICBlbnVtIGNs
YXNzIENvbnRpbnVlIHsgTm8sIFllcyB9OwogICAgIHVzaW5nIFByb2Nlc3NFcnJvciA9IEZ1bmN0
aW9uPENvbnRpbnVlKEV4Y2VwdGlvbkNvZGUpPjsKICAgICBOZXR3b3JrU2VuZFF1ZXVlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmLCBXcml0ZVN0cmluZyYmLCBXcml0ZVJhd0RhdGEmJiwgUHJvY2Vz
c0Vycm9yJiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9y
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3Vw
cG9ydC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9E
T01QYXRjaFN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQsMjggKzM5NCwyMyBAQCBF
eGNlcHRpb25Pcjx2b2lkPiBET01QYXRjaFN1cHBvcnQ6OmlubmVyCiAgICAgcmV0dXJuIHsgfTsK
IH0KIAotc3RhdGljIHZvaWQgYWRkU3RyaW5nVG9TSEExKFNIQTEmIHNoYTEsIGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKQotewotICAgIENTdHJpbmcgY1N0cmluZyA9IHN0cmluZy51dGY4KCk7Ci0gICAg
c2hhMS5hZGRCeXRlcyhjU3RyaW5nLmRhdGFBc1VJbnQ4UHRyKCksIGNTdHJpbmcubGVuZ3RoKCkp
OwotfQotCiBzdGQ6OnVuaXF1ZV9wdHI8RE9NUGF0Y2hTdXBwb3J0OjpEaWdlc3Q+IERPTVBhdGNo
U3VwcG9ydDo6Y3JlYXRlRGlnZXN0KE5vZGUmIG5vZGUsIFVudXNlZE5vZGVzTWFwKiB1bnVzZWRO
b2Rlc01hcCkKIHsKICAgICBhdXRvIGRpZ2VzdCA9IG1ha2VVbmlxdWU8RGlnZXN0PigpOwogICAg
IGRpZ2VzdC0+bm9kZSA9ICZub2RlOworCiAgICAgU0hBMSBzaGExOwogCiAgICAgYXV0byBub2Rl
VHlwZSA9IG5vZGUubm9kZVR5cGUoKTsKLSAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KCZub2RlVHlwZSksIHNpemVvZihub2RlVHlwZSkpOwotICAgIGFk
ZFN0cmluZ1RvU0hBMShzaGExLCBub2RlLm5vZGVOYW1lKCkpOwotICAgIGFkZFN0cmluZ1RvU0hB
MShzaGExLCBub2RlLm5vZGVWYWx1ZSgpKTsKKyAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmbm9k
ZVR5cGUsIDEgfSk7CisgICAgc2hhMS5hZGRCeXRlcyhub2RlLm5vZGVOYW1lKCkudXRmOCgpLmJ5
dGVzKCkpOworICAgIHNoYTEuYWRkQnl0ZXMobm9kZS5ub2RlVmFsdWUoKS51dGY4KCkuYnl0ZXMo
KSk7CiAKICAgICBpZiAobm9kZS5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSkgewog
ICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUuZmlyc3RDaGlsZCgpOwogICAgICAgICB3aGlsZSAo
Y2hpbGQpIHsKICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxEaWdlc3Q+IGNoaWxkSW5mbyA9
IGNyZWF0ZURpZ2VzdCgqY2hpbGQsIHVudXNlZE5vZGVzTWFwKTsKLSAgICAgICAgICAgIGFkZFN0
cmluZ1RvU0hBMShzaGExLCBjaGlsZEluZm8tPnNoYTEpOworICAgICAgICAgICAgc2hhMS5hZGRC
eXRlcyhjaGlsZEluZm8tPnNoYTEudXRmOCgpLmJ5dGVzKCkpOwogICAgICAgICAgICAgY2hpbGQg
PSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAgIGRpZ2VzdC0+Y2hpbGRyZW4uYXBw
ZW5kKFdURk1vdmUoY2hpbGRJbmZvKSk7CiAgICAgICAgIH0KQEAgLTQyNCwxOSArNDE5LDE5IEBA
IHN0ZDo6dW5pcXVlX3B0cjxET01QYXRjaFN1cHBvcnQ6OkRpZ2VzdD4KICAgICAgICAgaWYgKGVs
ZW1lbnQuaGFzQXR0cmlidXRlc1dpdGhvdXRVcGRhdGUoKSkgewogICAgICAgICAgICAgU0hBMSBh
dHRyc1NIQTE7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGF0dHJpYnV0ZSA6IGVsZW1lbnQuYXR0
cmlidXRlc0l0ZXJhdG9yKCkpIHsKLSAgICAgICAgICAgICAgICBhZGRTdHJpbmdUb1NIQTEoYXR0
cnNTSEExLCBhdHRyaWJ1dGUubmFtZSgpLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGFk
ZFN0cmluZ1RvU0hBMShhdHRyc1NIQTEsIGF0dHJpYnV0ZS52YWx1ZSgpKTsKKyAgICAgICAgICAg
ICAgICBhdHRyc1NIQTEuYWRkQnl0ZXMoYXR0cmlidXRlLm5hbWUoKS50b1N0cmluZygpLnV0Zjgo
KS5ieXRlcygpKTsKKyAgICAgICAgICAgICAgICBhdHRyc1NIQTEuYWRkQnl0ZXMoYXR0cmlidXRl
LnZhbHVlKCkuc3RyaW5nKCkudXRmOCgpLmJ5dGVzKCkpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgU0hBMTo6RGlnZXN0IGF0dHJzSGFzaDsKICAgICAgICAgICAgIGF0dHJzU0hBMS5jb21w
dXRlSGFzaChhdHRyc0hhc2gpOwotICAgICAgICAgICAgZGlnZXN0LT5hdHRyc1NIQTEgPSBiYXNl
NjRFbmNvZGVUb1N0cmluZyhhdHRyc0hhc2guZGF0YSgpLCAxMCk7Ci0gICAgICAgICAgICBhZGRT
dHJpbmdUb1NIQTEoc2hhMSwgZGlnZXN0LT5hdHRyc1NIQTEpOworICAgICAgICAgICAgZGlnZXN0
LT5hdHRyc1NIQTEgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhhdHRyc0hhc2gpOworICAgICAgICAg
ICAgc2hhMS5hZGRCeXRlcyhkaWdlc3QtPmF0dHJzU0hBMS51dGY4KCkuYnl0ZXMoKSk7CiAgICAg
ICAgIH0KICAgICB9CiAKICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAgICBzaGExLmNvbXB1dGVI
YXNoKGhhc2gpOwotICAgIGRpZ2VzdC0+c2hhMSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGhhc2gu
ZGF0YSgpLCAxMCk7CisgICAgZGlnZXN0LT5zaGExID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaGFz
aCk7CiAgICAgaWYgKHVudXNlZE5vZGVzTWFwKQogICAgICAgICB1bnVzZWROb2Rlc01hcC0+YWRk
KGRpZ2VzdC0+c2hhMSwgZGlnZXN0LmdldCgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MDIsNyArNjAyLDcgQEAgYm9vbCBJbnNwZWN0b3JGcm9udGVu
ZEhvc3Q6OnNob3dDZXJ0aWZpYwogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEtPmRhdGEoKSwg
ZGF0YS0+c2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyAq
ZGF0YSB9OwogICAgIHN0ZDo6b3B0aW9uYWw8Q2VydGlmaWNhdGVJbmZvPiBjZXJ0aWZpY2F0ZUlu
Zm87CiAgICAgZGVjb2RlciA+PiBjZXJ0aWZpY2F0ZUluZm87CiAgICAgaWYgKCFjZXJ0aWZpY2F0
ZUluZm8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0Rh
dGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVz
b3VyY2VzRGF0YS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsx
MDYsNyBAQCB1bnNpZ25lZCBOZXR3b3JrUmVzb3VyY2VzRGF0YTo6UmVzb3VyY2VECiAgICAgICAg
IG1fY29udGVudCA9IG1fZGVjb2Rlci0+ZGVjb2RlQW5kRmx1c2gobV9kYXRhQnVmZmVyLT5kYXRh
KCksIGRhdGFMZW5ndGgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fYmFzZTY0RW5jb2RlZCA9
IHRydWU7Ci0gICAgICAgIG1fY29udGVudCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKG1fZGF0YUJ1
ZmZlci0+ZGF0YSgpLCBkYXRhTGVuZ3RoKTsKKyAgICAgICAgbV9jb250ZW50ID0gYmFzZTY0RW5j
b2RlVG9TdHJpbmcobV9kYXRhQnVmZmVyLT5ieXRlcygpKTsKICAgICB9CiAKICAgICBtX2RhdGFC
dWZmZXIgPSBudWxscHRyOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JET01BZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjk4LDcgKzE2OTgsNyBAQCBzdGF0aWMgU3RyaW5nIGNvbXB1dGVDb250
ZW50U2VjdXJpdHlQb2xpCiAgICAgYXV0byBjcnlwdG9EaWdlc3QgPSBQQUw6OkNyeXB0b0RpZ2Vz
dDo6Y3JlYXRlKFBBTDo6Q3J5cHRvRGlnZXN0OjpBbGdvcml0aG06OlNIQV8yNTYpOwogICAgIGNy
eXB0b0RpZ2VzdC0+YWRkQnl0ZXMoY29udGVudC5kYXRhKCksIGNvbnRlbnQuc2l6ZSgpKTsKICAg
ICBhdXRvIGRpZ2VzdCA9IGNyeXB0b0RpZ2VzdC0+Y29tcHV0ZUhhc2goKTsKLSAgICByZXR1cm4g
bWFrZVN0cmluZygic2hhMjU2LSIsIGJhc2U2NEVuY29kZWQoZGlnZXN0LmRhdGEoKSwgZGlnZXN0
LnNpemUoKSkpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCJzaGEyNTYtIiwgYmFzZTY0RW5jb2Rl
ZChkaWdlc3QpKTsKIH0KIAogUmVmPFByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFn
ZW50OjpidWlsZE9iamVjdEZvck5vZGUoTm9kZSogbm9kZSwgaW50IGRlcHRoKQpJbmRleDogU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0
d29ya0FnZW50LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzUsNyArMTc1LDcgQEAgUmVmPFByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRGcmFtZT4gYgog
ICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0RnJhbWU6OmNyZWF0ZSgpCiAg
ICAgICAgIC5zZXRPcGNvZGUoZnJhbWUub3BDb2RlKQogICAgICAgICAuc2V0TWFzayhmcmFtZS5t
YXNrZWQpCi0gICAgICAgIC5zZXRQYXlsb2FkRGF0YShmcmFtZS5vcENvZGUgPT0gMSA/IFN0cmlu
Zzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soZnJhbWUucGF5bG9hZCwgZnJhbWUucGF5bG9h
ZExlbmd0aCkgOiBiYXNlNjRFbmNvZGVUb1N0cmluZyhmcmFtZS5wYXlsb2FkLCBmcmFtZS5wYXls
b2FkTGVuZ3RoKSkKKyAgICAgICAgLnNldFBheWxvYWREYXRhKGZyYW1lLm9wQ29kZSA9PSAxID8g
U3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhmcmFtZS5wYXlsb2FkLCBmcmFtZS5w
YXlsb2FkTGVuZ3RoKSA6IGJhc2U2NEVuY29kZVRvU3RyaW5nKFNwYW4geyBmcmFtZS5wYXlsb2Fk
LCBmcmFtZS5wYXlsb2FkTGVuZ3RoIH0pKQogICAgICAgICAuc2V0UGF5bG9hZExlbmd0aChmcmFt
ZS5wYXlsb2FkTGVuZ3RoKQogICAgICAgICAucmVsZWFzZSgpOwogfQpAQCAtNTg5LDcgKzU4OSw3
IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlRGEKICAgICAgICAgLy8g
T2Z0ZW4gdGhlIGRhdGEgaXMgdGV4dCBhbmQgd2Ugd291bGQgaGF2ZSBhIGRlY29kZXIsIGJ1dCBm
b3Igbm9uLXRleHQgd2Ugd29uJ3QgaGF2ZSBhIGRlY29kZXIuCiAgICAgICAgIC8vIFN5bmMgWEhS
cyBtYXkgbm90IGhhdmUgYSBjYWNoZWQgcmVzb3VyY2UsIHdoaWxlIG5vbi1zeW5jIFhIUnMgdXN1
YWxseSB0cmFuc2ZlciBkYXRhIG92ZXIgb24gY29tcGxldGlvbi4KICAgICAgICAgaWYgKG1fbG9h
ZGluZ1hIUlN5bmNocm9ub3VzbHkgJiYgcmVzb3VyY2VEYXRhICYmICFyZXNvdXJjZURhdGEtPmhh
c0J1ZmZlcmVkRGF0YSgpICYmICFyZXNvdXJjZURhdGEtPmNhY2hlZFJlc291cmNlKCkpCi0gICAg
ICAgICAgICBtX3Jlc291cmNlc0RhdGEtPnNldFJlc291cmNlQ29udGVudChyZXF1ZXN0SWQsIGJh
c2U2NEVuY29kZVRvU3RyaW5nKGRhdGEsIGRhdGFMZW5ndGgpLCB0cnVlKTsKKyAgICAgICAgICAg
IG1fcmVzb3VyY2VzRGF0YS0+c2V0UmVzb3VyY2VDb250ZW50KHJlcXVlc3RJZCwgYmFzZTY0RW5j
b2RlVG9TdHJpbmcoU3BhbiB7IGRhdGEsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihkYXRhTGVuZ3Ro
KSB9KSwgdHJ1ZSk7CiAgICAgfQogCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRhdGFSZWNl
aXZlZChyZXF1ZXN0SWQsIHRpbWVzdGFtcCgpLCBkYXRhTGVuZ3RoLCBlbmNvZGVkRGF0YUxlbmd0
aCk7CkBAIC0xMDA1LDcgKzEwMDUsNyBAQCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+
IEluc3BlY3RvCiAKICAgICBXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyIGVuY29kZXI7CiAgICAg
V1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPjo6ZW5jb2Rl
KGVuY29kZXIsIGNlcnRpZmljYXRlLnZhbHVlKCkpOwotICAgIHJldHVybiBiYXNlNjRFbmNvZGVU
b1N0cmluZyhlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgcmV0
dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGVuY29kZXIuYnVmZmVyKCkpOwogfQogCiBXZWJTb2Nr
ZXQqIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6d2ViU29ja2V0Rm9yUmVxdWVzdElkKGNvbnN0IFBy
b3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCkKQEAgLTE0MTAsNyArMTQxMCw3
IEBAIGJvb2wgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpjYWNoZWRSZXNvdXIKICAgICAgICAgfQog
CiAgICAgICAgICpiYXNlNjRFbmNvZGVkID0gdHJ1ZTsKLSAgICAgICAgKnJlc3VsdCA9IGJhc2U2
NEVuY29kZVRvU3RyaW5nKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7CisgICAgICAg
ICpyZXN1bHQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhidWZmZXItPmJ5dGVzKCkpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2Vu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDcgQEAKIAogI2lmIEVOQUJMRShXRUJf
QVJDSElWRSkgJiYgVVNFKENGKQogI2luY2x1ZGUgIkxlZ2FjeVdlYkFyY2hpdmUuaCIKKyNpbmNs
dWRlIDx3dGYvY2YvU3BhbkNGLmg+CiAjZW5kaWYKIAogCkBAIC0xMTMsNyArMTE0LDcgQEAgYm9v
bCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNoYXJlZEJ1ZmZlckNvbgogYm9vbCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OmRhdGFDb250ZW50KGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIHNpemUsIGNv
bnN0IFN0cmluZyYgdGV4dEVuY29kaW5nTmFtZSwgYm9vbCB3aXRoQmFzZTY0RW5jb2RlLCBTdHJp
bmcqIHJlc3VsdCkKIHsKICAgICBpZiAod2l0aEJhc2U2NEVuY29kZSkgewotICAgICAgICAqcmVz
dWx0ID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoZGF0YSwgc2l6ZSk7CisgICAgICAgICpyZXN1bHQg
PSBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgZGF0YSwgc2l6ZSB9KTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCkBAIC0xMTAyLDcgKzExMDMsNyBAQCBQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxTdHJpbmc+IEluc3BlY3RvCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
Q291bGQgbm90IGNyZWF0ZSB3ZWIgYXJjaGl2ZSBmb3IgbWFpbiBmcmFtZSJfcyk7CiAKICAgICBS
ZXRhaW5QdHI8Q0ZEYXRhUmVmPiBidWZmZXIgPSBhcmNoaXZlLT5yYXdEYXRhUmVwcmVzZW50YXRp
b24oKTsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoQ0ZEYXRhR2V0Qnl0ZVB0cihi
dWZmZXIuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgoYnVmZmVyLmdldCgpKSk7CisgICAgcmV0dXJu
IGJhc2U2NEVuY29kZVRvU3RyaW5nKGFzQnl0ZXMoYnVmZmVyLmdldCgpKSk7CiB9CiAjZW5kaWYK
IApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNoaXZl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9N
SFRNTEFyY2hpdmUuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODEs
MTYgKzE4MSwxNCBAQCBSZWY8U2hhcmVkQnVmZmVyPiBNSFRNTEFyY2hpdmU6OmdlbmVyYXRlCiAg
ICAgICAgIG1odG1sRGF0YS0+YXBwZW5kKGFzY2lpU3RyaW5nLmRhdGEoKSwgYXNjaWlTdHJpbmcu
bGVuZ3RoKCkpOwogCiAgICAgICAgIC8vIEZJWE1FOiBpZGVhbGx5IHdlIHdvdWxkIGVuY29kZSB0
aGUgY29udGVudCBhcyBhIHN0cmVhbSB3aXRob3V0IGhhdmluZyB0byBmZXRjaCBpdCBhbGwuCi0g
ICAgICAgIGF1dG8qIGRhdGEgPSByZXNvdXJjZS5kYXRhLT5kYXRhKCk7Ci0gICAgICAgIHNpemVf
dCBkYXRhTGVuZ3RoID0gcmVzb3VyY2UuZGF0YS0+c2l6ZSgpOwogICAgICAgICBpZiAoIXN0cmNt
cChjb250ZW50RW5jb2RpbmcsIHF1b3RlZFByaW50YWJsZSkpIHsKLSAgICAgICAgICAgIGF1dG8g
ZW5jb2RlZERhdGEgPSBxdW90ZWRQcmludGFibGVFbmNvZGUoZGF0YSwgZGF0YUxlbmd0aCk7Cisg
ICAgICAgICAgICBhdXRvIGVuY29kZWREYXRhID0gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKHJlc291
cmNlLmRhdGEtPmJ5dGVzKCkpOwogICAgICAgICAgICAgbWh0bWxEYXRhLT5hcHBlbmQoZW5jb2Rl
ZERhdGEuZGF0YSgpLCBlbmNvZGVkRGF0YS5zaXplKCkpOwogICAgICAgICAgICAgbWh0bWxEYXRh
LT5hcHBlbmQoIlxyXG4iLCAyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VS
VCghc3RyY21wKGNvbnRlbnRFbmNvZGluZywgYmFzZTY0KSk7CiAgICAgICAgICAgICAvLyBXZSBh
cmUgbm90IHNwZWNpZnlpbmcgaW5zZXJ0TEZzID0gdHJ1ZSBiZWxvdyBhcyBpdCB3b3VsZCBjdXQg
dGhlIGxpbmVzIHdpdGggTEZzIGFuZCBNSFRNTCByZXF1aXJlcyBDUkxGcy4KLSAgICAgICAgICAg
IGF1dG8gZW5jb2RlZERhdGEgPSBiYXNlNjRFbmNvZGVUb1ZlY3RvcihkYXRhLCBkYXRhTGVuZ3Ro
KTsKKyAgICAgICAgICAgIGF1dG8gZW5jb2RlZERhdGEgPSBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihy
ZXNvdXJjZS5kYXRhLT5ieXRlcygpKTsKICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBtYXhpbXVt
TGluZUxlbmd0aCA9IDc2OwogICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gMDsKICAgICAgICAg
ICAgIHNpemVfdCBlbmNvZGVkRGF0YUxlbmd0aCA9IGVuY29kZWREYXRhLnNpemUoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MUGFyc2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTFBhcnNl
ci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZl
L21odG1sL01IVE1MUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDcgKzE5NSw3IEBA
IFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IE1IVE1MUGFyc2VyOjpwYXIKICAgICBWZWN0b3I8dWlu
dDhfdD4gZGF0YTsKICAgICBzd2l0Y2ggKG1pbWVIZWFkZXIuY29udGVudFRyYW5zZmVyRW5jb2Rp
bmcoKSkgewogICAgIGNhc2UgTUlNRUhlYWRlcjo6QmFzZTY0OiB7Ci0gICAgICAgIGF1dG8gZGVj
b2RlZERhdGEgPSBiYXNlNjREZWNvZGUoY29udGVudC0+ZGF0YSgpLCBjb250ZW50LT5zaXplKCkp
OworICAgICAgICBhdXRvIGRlY29kZWREYXRhID0gYmFzZTY0RGVjb2RlKGNvbnRlbnQtPmJ5dGVz
KCkpOwogICAgICAgICBpZiAoIWRlY29kZWREYXRhKSB7CiAgICAgICAgICAgICBMT0dfRVJST1Io
IkludmFsaWQgYmFzZTY0IGNvbnRlbnQgZm9yIE1IVE1MIHBhcnQuIik7CiAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKQEAgLTIwNCw3ICsyMDQsNyBAQCBSZWZQdHI8QXJjaGl2ZVJlc291cmNl
PiBNSFRNTFBhcnNlcjo6cGFyCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIE1JTUVI
ZWFkZXI6OlF1b3RlZFByaW50YWJsZToKLSAgICAgICAgZGF0YSA9IHF1b3RlZFByaW50YWJsZURl
Y29kZShjb250ZW50LT5kYXRhKCksIGNvbnRlbnQtPnNpemUoKSk7CisgICAgICAgIGRhdGEgPSBx
dW90ZWRQcmludGFibGVEZWNvZGUoY29udGVudC0+Ynl0ZXMoKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgTUlNRUhlYWRlcjo6U2V2ZW5CaXQ6CiAgICAgY2FzZSBNSU1FSGVhZGVyOjpCaW5h
cnk6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkxvYWRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIEljb25Mb2FkZXI6Om5v
dGlmeUZpbmlzaGVkKENhY2hlZFJlCiAgICAgICAgIGRhdGEgPSBudWxscHRyOwogCiAgICAgY29u
c3RleHByIHVpbnQ4X3QgcGRmTWFnaWNOdW1iZXJbXSA9IHsgJyUnLCAnUCcsICdEJywgJ0YnIH07
Ci0gICAgaWYgKGRhdGEgJiYgZGF0YS0+c3RhcnRzV2l0aChTcGFuIHsgcGRmTWFnaWNOdW1iZXIs
IHN0ZDo6c2l6ZShwZGZNYWdpY051bWJlcikgfSkpIHsKKyAgICBpZiAoZGF0YSAmJiBkYXRhLT5z
dGFydHNXaXRoKHBkZk1hZ2ljTnVtYmVyKSkgewogICAgICAgICBMT0coSWNvbkRhdGFiYXNlLCAi
SWNvbkxvYWRlcjo6ZmluaXNoTG9hZGluZygpIC0gSWdub3JpbmcgaWNvbiBhdCAlcyBiZWNhdXNl
IGl0IGFwcGVhcnMgdG8gYmUgYSBQREYiLCBtX3Jlc291cmNlLT51cmwoKS5zdHJpbmcoKS5hc2Np
aSgpLmRhdGEoKSk7CiAgICAgICAgIGRhdGEgPSBudWxscHRyOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0Jhc2U2NFV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzgsNyArMzgsNyBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IEJhc2U2NFV0aWxpdGllczo6YnRvCiAg
ICAgaWYgKCFzdHJpbmdUb0VuY29kZS5pc0FsbExhdGluMSgpKQogICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZENoYXJhY3RlckVycm9yIH07CiAKLSAgICByZXR1cm4gYmFzZTY0RW5j
b2RlVG9TdHJpbmcoc3RyaW5nVG9FbmNvZGUubGF0aW4xKCkpOworICAgIHJldHVybiBiYXNlNjRF
bmNvZGVUb1N0cmluZyhzdHJpbmdUb0VuY29kZS5sYXRpbjEoKS5ieXRlcygpKTsKIH0KIAogRXhj
ZXB0aW9uT3I8U3RyaW5nPiBCYXNlNjRVdGlsaXRpZXM6OmF0b2IoY29uc3QgU3RyaW5nJiBlbmNv
ZGVkU3RyaW5nKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1c3Rv
bURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9h
cmRDdXN0b21EYXRhLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4
OSw3IEBAIFJlZjxTaGFyZWRCdWZmZXI+IFBhc3RlYm9hcmRDdXN0b21EYXRhOjoKICAgICBlbmNv
ZGVyIDw8IG1fb3JpZ2luOwogICAgIGVuY29kZXIgPDwgc2FtZU9yaWdpbkN1c3RvbVN0cmluZ0Rh
dGEoKTsKICAgICBlbmNvZGVyIDw8IG9yZGVyZWRUeXBlcygpOwotICAgIHJldHVybiBTaGFyZWRC
dWZmZXI6OmNyZWF0ZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7Cisg
ICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCkpOwogfQogCiBQ
YXN0ZWJvYXJkQ3VzdG9tRGF0YSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6ZnJvbVBlcnNpc3RlbmNl
RGVjb2RlcihXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyJiYgZGVjb2RlcikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsMjAgKzM0LDE5IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgog
I2luY2x1ZGUgPHd0Zi91bmljb2RlL1VURjhDb252ZXJzaW9uLmg+CiAKLW5hbWVzcGFjZSBXZWJD
b3JlIHsKKyNpZiBVU0UoQ0YpCisjaW5jbHVkZSA8d3RmL2NmL1NwYW5DRi5oPgorI2VuZGlmCiAK
LVNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBz
aXplKQotewotICAgIGFwcGVuZChkYXRhLCBzaXplKTsKLX0KK25hbWVzcGFjZSBXZWJDb3JlIHsK
IAotU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNp
emUpCitTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0
YSkKIHsKLSAgICBhcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSks
IHNpemUpOworICAgIGFwcGVuZChkYXRhKTsKIH0KIAogU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZm
ZXIoRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmJiBmaWxlRGF0YSkKLSAgICA6IG1fc2l6ZShm
aWxlRGF0YS5zaXplKCkpCisgICAgOiBtX3NpemUoZmlsZURhdGEuZGF0YSgpLnNpemUoKSkKIHsK
ICAgICBtX3NlZ21lbnRzLmFwcGVuZCh7MCwgRGF0YVNlZ21lbnQ6OmNyZWF0ZShXVEZNb3ZlKGZp
bGVEYXRhKSl9KTsKIH0KQEAgLTE4OCwxMyArMTg3LDEzIEBAIHZvaWQgU2hhcmVkQnVmZmVyOjph
cHBlbmQoY29uc3QgU2hhcmVkQnUKICAgICBBU1NFUlQoaW50ZXJuYWxseUNvbnNpc3RlbnQoKSk7
CiB9CiAKLXZvaWQgU2hhcmVkQnVmZmVyOjphcHBlbmQoY29uc3QgdWludDhfdCogZGF0YSwgc2l6
ZV90IGxlbmd0aCkKK3ZvaWQgU2hhcmVkQnVmZmVyOjphcHBlbmQoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGRhdGEpCiB7CiAgICAgQVNTRVJUKCFtX2hhc0JlZW5Db21iaW5lZEludG9PbmVTZWdtZW50
KTsKICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yOwotICAgIHZlY3Rvci5hcHBlbmQoZGF0YSwg
bGVuZ3RoKTsKLSAgICBtX3NlZ21lbnRzLmFwcGVuZCh7bV9zaXplLCBEYXRhU2VnbWVudDo6Y3Jl
YXRlKFdURk1vdmUodmVjdG9yKSl9KTsKLSAgICBtX3NpemUgKz0gbGVuZ3RoOworICAgIHZlY3Rv
ci5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5kYXRhKCkpLCBk
YXRhLnNpemUoKSk7CisgICAgbV9zZWdtZW50cy5hcHBlbmQoeyBtX3NpemUsIERhdGFTZWdtZW50
OjpjcmVhdGUoV1RGTW92ZSh2ZWN0b3IpKSB9KTsKKyAgICBtX3NpemUgKz0gZGF0YS5zaXplKCk7
CiAgICAgQVNTRVJUKGludGVybmFsbHlDb25zaXN0ZW50KCkpOwogfQogCkBAIC0yMzIsNyArMjMx
LDcgQEAgdm9pZCBTaGFyZWRCdWZmZXI6OmZvckVhY2hTZWdtZW50KGNvbnN0IAogICAgICAgICBh
cHBseShTcGFuIHsgc2VnbWVudC5zZWdtZW50LT5kYXRhKCksIHNlZ21lbnQuc2VnbWVudC0+c2l6
ZSgpIH0pOwogfQogCi1ib29sIFNoYXJlZEJ1ZmZlcjo6c3RhcnRzV2l0aChjb25zdCBTcGFuPGNv
bnN0IHVpbnQ4X3Q+JiBwcmVmaXgpIGNvbnN0Citib29sIFNoYXJlZEJ1ZmZlcjo6c3RhcnRzV2l0
aChjb25zdCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4mIHByZWZpeCkgY29uc3QKIHsKICAgICBpZiAo
cHJlZml4LmVtcHR5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjQwLDcgKzIzOSw3IEBA
IGJvb2wgU2hhcmVkQnVmZmVyOjpzdGFydHNXaXRoKGNvbnN0IFNwYW4KICAgICBpZiAoc2l6ZSgp
IDwgcHJlZml4LnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29uc3QgdWlu
dDhfdCogcHJlZml4UHRyID0gcHJlZml4LmRhdGEoKTsKKyAgICBhdXRvKiBwcmVmaXhQdHIgPSBw
cmVmaXguZGF0YSgpOwogICAgIHNpemVfdCByZW1haW5pbmcgPSBwcmVmaXguc2l6ZSgpOwogICAg
IGZvciAoYXV0byYgc2VnbWVudCA6IG1fc2VnbWVudHMpIHsKICAgICAgICAgc2l6ZV90IGFtb3Vu
dFRvQ29tcGFyZVRoaXNUaW1lID0gc3RkOjptaW4ocmVtYWluaW5nLCBzZWdtZW50LnNlZ21lbnQt
PnNpemUoKSk7CkBAIC0zMDEsOSArMzAwLDM4IEBAIGNvbnN0IHVpbnQ4X3QqIFNoYXJlZEJ1ZmZl
cjo6RGF0YVNlZ21lbnQKICNpZiBVU0UoR1NUUkVBTUVSKQogICAgICAgICBbXShjb25zdCBSZWZQ
dHI8R3N0TWFwcGVkT3duZWRCdWZmZXI+JiBkYXRhKSB7IHJldHVybiBkYXRhLT5kYXRhKCk7IH0s
CiAjZW5kaWYKLSAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRh
dGEpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmRhdGEoKSk7IH0K
KyAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuZGF0YSgpLmRhdGEoKSk7
IH0KKyAgICApOworICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIG1faW1tdXRhYmxlRGF0
YSk7Cit9CisKK1NwYW48Y29uc3Qgc3RkOjpieXRlPiBTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50
OjpieXRlcygpIGNvbnN0Cit7CisgICAgYXV0byB2aXNpdG9yID0gV1RGOjptYWtlVmlzaXRvcigK
KyAgICAgICAgW10oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKSB7CisgICAgICAgICAgICBy
ZXR1cm4gYXNCeXRlcyhTcGFuIHsgZGF0YSB9KTsKKyAgICAgICAgfSwKKyNpZiBVU0UoQ0YpCisg
ICAgICAgIFtdKGNvbnN0IFJldGFpblB0cjxDRkRhdGFSZWY+JiBkYXRhKSB7CisgICAgICAgICAg
ICByZXR1cm4gYXNCeXRlcyhkYXRhLmdldCgpKTsKKyAgICAgICAgfSwKKyNlbmRpZgorI2lmIFVT
RShHTElCKQorICAgICAgICBbXShjb25zdCBHUmVmUHRyPEdCeXRlcz4mIGRhdGEpIHsKKyAgICAg
ICAgICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4o
Z19ieXRlc19nZXRfZGF0YShkYXRhLmdldCgpLCBudWxscHRyKSksIGdfYnl0ZXNfZ2V0X3NpemUo
ZGF0YS5nZXQoKSkgfSk7CisgICAgICAgIH0sCisjZW5kaWYKKyNpZiBVU0UoR1NUUkVBTUVSKQor
ICAgICAgICBbXShjb25zdCBSZWZQdHI8R3N0TWFwcGVkT3duZWRCdWZmZXI+JiBkYXRhKSB7Cisg
ICAgICAgICAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXpl
KCkgfSk7CisgICAgICAgIH0sCisjZW5kaWYKKyAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6
TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBkYXRhLmRhdGEoKTsK
KyAgICAgICAgfQogICAgICk7CiAgICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwgbV9pbW11
dGFibGVEYXRhKTsKKwogfQogCiBib29sIFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmNvbnRh
aW5zTWFwcGVkRmlsZURhdGEoKSBjb25zdApAQCAtMzE5LDcgKzM0Nyw3IEBAIHZvaWQgU2hhcmVk
QnVmZmVyOjpoaW50TWVtb3J5Tm90TmVlZGVkU28KIAogV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2Rl
ciBTaGFyZWRCdWZmZXI6OmRlY29kZXIoKSBjb25zdAogewotICAgIHJldHVybiB7IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEoKSksIHNpemUoKSB9OworICAgIHJldHVybiB7
IGJ5dGVzKCkgfTsKIH0KIAogYm9vbCBTaGFyZWRCdWZmZXI6Om9wZXJhdG9yPT0oY29uc3QgU2hh
cmVkQnVmZmVyJiBvdGhlcikgY29uc3QKQEAgLTM4NCw3ICs0MTIsNyBAQCBzaXplX3QgU2hhcmVk
QnVmZmVyOjpEYXRhU2VnbWVudDo6c2l6ZSgpCiAjaWYgVVNFKEdTVFJFQU1FUikKICAgICAgICAg
W10oY29uc3QgUmVmUHRyPEdzdE1hcHBlZE93bmVkQnVmZmVyPiYgZGF0YSkgeyByZXR1cm4gZGF0
YS0+c2l6ZSgpOyB9LAogI2VuZGlmCi0gICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBl
ZEZpbGVEYXRhJiBkYXRhKSB7IHJldHVybiBkYXRhLnNpemUoKTsgfQorICAgICAgICBbXShjb25z
dCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeyByZXR1cm4gZGF0YS5kYXRhKCku
c2l6ZSgpOyB9CiAgICAgKTsKICAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBtX2ltbXV0
YWJsZURhdGEpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw4ICs2NywxMiBAQCBjbGFzcyBTaGFyZWRCdWZmZXJE
YXRhVmlldzsKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIFNoYXJlZEJ1ZmZlciA6IHB1YmxpYyBSZWZD
b3VudGVkPFNoYXJlZEJ1ZmZlcj4gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVm
ZmVyPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcik7IH0KLSAg
ICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNp
emVfdCBzaXplKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihkYXRhLCBzaXpl
KSk7IH0KLSAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IGNoYXIqIGRh
dGEsIHNpemVfdCBzaXplKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihkYXRh
LCBzaXplKSk7IH0KKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKFNwYW48Y29u
c3Qgc3RkOjpieXRlPiBkYXRhKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihk
YXRhKSk7IH0KKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKFNwYW48Y29uc3Qg
dWludDhfdD4gZGF0YSkgeyByZXR1cm4gY3JlYXRlKGFzQnl0ZXMoZGF0YSkpOyB9CisgICAgc3Rh
dGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShTcGFuPGNvbnN0IGNoYXI+IGRhdGEpIHsgcmV0
dXJuIGNyZWF0ZShhc0J5dGVzKGRhdGEpKTsgfQorICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVy
PiBjcmVhdGUoY29uc3Qgc3RkOjpieXRlKiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gY3Jl
YXRlKFNwYW4geyBkYXRhLCBzaXplIH0pOyB9CisgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+
IGNyZWF0ZShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gY3JlYXRl
KFNwYW4geyBkYXRhLCBzaXplIH0pOyB9CisgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNy
ZWF0ZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gY3JlYXRlKFNwYW4g
eyBkYXRhLCBzaXplIH0pOyB9CiAgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShG
aWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIG1hcHBlZEZpbGVEYXRhKSB7IHJldHVybiBhZG9w
dFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihXVEZNb3ZlKG1hcHBlZEZpbGVEYXRhKSkpOyB9CiAKICAg
ICBlbnVtIGNsYXNzIE1heVVzZUZpbGVNYXBwaW5nIDogYm9vbCB7IE5vLCBZZXMgfTsKQEAgLTEw
MSw2ICsxMDUsOCBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IEF1ZGl0IHRoZSBjYWxsIHNpdGVz
IG9mIHRoaXMgZnVuY3Rpb24gYW5kIHJlcGxhY2UgdGhlbSB3aXRoIGl0ZXJhdGlvbiBpZiBwb3Nz
aWJsZS4KICAgICBjb25zdCB1aW50OF90KiBkYXRhKCkgY29uc3Q7CiAgICAgY29uc3QgY2hhciog
ZGF0YUFzQ2hhclB0cigpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KGRhdGEoKSk7IH0KKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25zdCB7
IHJldHVybiBhc0J5dGVzKFNwYW4geyBkYXRhKCksIHNpemUoKSB9KTsgfQorCiAgICAgVmVjdG9y
PHVpbnQ4X3Q+IGNvcHlEYXRhKCkgeyByZXR1cm4geyBkYXRhKCksIHNpemUoKSB9OyB9CiAKICAg
ICAvLyBDb21iaW5lcyBhbGwgdGhlIHNlZ21lbnRzIGludG8gYSBWZWN0b3IgYW5kIHJldHVybnMg
dGhhdCB2ZWN0b3IgYWZ0ZXIgY2xlYXJpbmcgdGhlIFNoYXJlZEJ1ZmZlci4KQEAgLTExNSw4ICsx
MjEsMTIgQEAgcHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXpl
KCk7IH0KIAogICAgIHZvaWQgYXBwZW5kKGNvbnN0IFNoYXJlZEJ1ZmZlciYpOwotICAgIHZvaWQg
YXBwZW5kKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwotICAgIHZvaWQgYXBwZW5kKGNvbnN0IGNo
YXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpIHsgYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KGRhdGEpLCBsZW5ndGgpOyB9CisgICAgdm9pZCBhcHBlbmQoU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+KTsKKyAgICB2b2lkIGFwcGVuZChTcGFuPGNvbnN0IHVpbnQ4X3Q+IGRhdGEpIHsg
YXBwZW5kKGFzQnl0ZXMoZGF0YSkpOyB9CisgICAgdm9pZCBhcHBlbmQoU3Bhbjxjb25zdCBjaGFy
PiBkYXRhKSB7IGFwcGVuZChhc0J5dGVzKGRhdGEpKTsgfQorICAgIHZvaWQgYXBwZW5kKGNvbnN0
IHN0ZDo6Ynl0ZSogZGF0YSwgc2l6ZV90IGxlbmd0aCkgeyBhcHBlbmQoU3BhbiB7IGRhdGEsIGxl
bmd0aCB9KTsgfQorICAgIHZvaWQgYXBwZW5kKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBs
ZW5ndGgpIHsgYXBwZW5kKFNwYW4geyBkYXRhLCBsZW5ndGggfSk7IH0KKyAgICB2b2lkIGFwcGVu
ZChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKSB7IGFwcGVuZChTcGFuIHsgZGF0YSwg
bGVuZ3RoIH0pOyB9CiAgICAgdm9pZCBhcHBlbmQoVmVjdG9yPHVpbnQ4X3Q+JiYpOwogCiAgICAg
dm9pZCBjbGVhcigpOwpAQCAtMTMxLDYgKzE0MSw4IEBAIHB1YmxpYzoKICAgICAgICAgV0VCQ09S
RV9FWFBPUlQgY29uc3QgdWludDhfdCogZGF0YSgpIGNvbnN0OwogICAgICAgICBXRUJDT1JFX0VY
UE9SVCBzaXplX3Qgc2l6ZSgpIGNvbnN0OwogCisgICAgICAgIFdFQkNPUkVfRVhQT1JUIFNwYW48
Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAgICAgICAgIHN0YXRpYyBSZWY8RGF0
YVNlZ21lbnQ+IGNyZWF0ZShWZWN0b3I8dWludDhfdD4mJiBkYXRhKQogICAgICAgICB7CiAgICAg
ICAgICAgICBkYXRhLnNocmlua1RvRml0KCk7CkBAIC0xODcsNyArMTk5LDkgQEAgcHVibGljOgog
ICAgIH07CiAKICAgICB2b2lkIGZvckVhY2hTZWdtZW50KGNvbnN0IEZ1bmN0aW9uPHZvaWQoY29u
c3QgU3Bhbjxjb25zdCB1aW50OF90PiYpPiYpIGNvbnN0OwotICAgIGJvb2wgc3RhcnRzV2l0aChj
b25zdCBTcGFuPGNvbnN0IHVpbnQ4X3Q+JiBwcmVmaXgpIGNvbnN0OworCisgICAgYm9vbCBzdGFy
dHNXaXRoKGNvbnN0IFNwYW48Y29uc3Qgc3RkOjpieXRlPiYgcHJlZml4KSBjb25zdDsKKyAgICBi
b29sIHN0YXJ0c1dpdGgoY29uc3QgU3Bhbjxjb25zdCB1aW50OF90PiYgcHJlZml4KSBjb25zdCB7
IHJldHVybiBzdGFydHNXaXRoKGFzQnl0ZXMocHJlZml4KSk7IH0KIAogICAgIHN0cnVjdCBEYXRh
U2VnbWVudFZlY3RvckVudHJ5IHsKICAgICAgICAgc2l6ZV90IGJlZ2luUG9zaXRpb247CkBAIC0y
MTIsOCArMjI2LDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFNoYXJlZEJ1
ZmZlcigpID0gZGVmYXVsdDsKLSAgICBleHBsaWNpdCBTaGFyZWRCdWZmZXIoY29uc3QgdWludDhf
dCosIHNpemVfdCk7Ci0gICAgZXhwbGljaXQgU2hhcmVkQnVmZmVyKGNvbnN0IGNoYXIqLCBzaXpl
X3QpOworICAgIGV4cGxpY2l0IFNoYXJlZEJ1ZmZlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwog
ICAgIGV4cGxpY2l0IFNoYXJlZEJ1ZmZlcihWZWN0b3I8dWludDhfdD4mJik7CiAgICAgZXhwbGlj
aXQgU2hhcmVkQnVmZmVyKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYpOwogI2lmIFVTRShD
RikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0NBQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL2NvY29hL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgPENvcmVBdWRpby9Db3JlQXVkaW9UeXBl
cy5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
ODAsMTMgKzgxLDEzIEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAog
ewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDhfdCo+KCZtX3N0cmVhbURlc2NyaXB0aW9uKSwgc2l6ZW9mKG1fc3RyZWFtRGVzY3Jp
cHRpb24pLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJm1f
c3RyZWFtRGVzY3JpcHRpb24sIDEgfSwgMSk7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
CiBib29sIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7Ci0gICAgcmV0dXJuIGRl
Y29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZk
ZXNjcmlwdGlvbi5tX3N0cmVhbURlc2NyaXB0aW9uKSwgc2l6ZW9mKGRlc2NyaXB0aW9uLm1fc3Ry
ZWFtRGVzY3JpcHRpb24pLCAxKTsKKyAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0
aERhdGEoU3BhbiB7ICZkZXNjcmlwdGlvbi5tX3N0cmVhbURlc2NyaXB0aW9uLCAxIH0sIDEpOwog
fQogCiBpbmxpbmUgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uIHRvQ0FBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uKGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJL
ZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1l
ZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTgsMTUgKzE5OCwxMyBAQCBzdGF0aWMgUmVmPFNoYXJlZEJ1
ZmZlcj4gZXh0cmFjdEtleWlkc0ZyCiB7CiAgICAgUmVmPFNoYXJlZEJ1ZmZlcj4ga2V5SWRzID0g
U2hhcmVkQnVmZmVyOjpjcmVhdGUoKTsKIAotICAgIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWdu
ZWQ+IGtleUlkc01hcCA9IGV4dHJhY3RLZXlpZHNMb2NhdGlvbkZyb21DZW5jSW5pdERhdGEoaW5p
dERhdGEpOwotICAgIHVuc2lnbmVkIGtleUlkQ291bnQgPSBrZXlJZHNNYXAuZmlyc3Q7Ci0gICAg
dW5zaWduZWQgaW5kZXggPSBrZXlJZHNNYXAuc2Vjb25kOworICAgIGF1dG8gW2tleUlkQ291bnQs
IGluZGV4XSA9IGV4dHJhY3RLZXlpZHNMb2NhdGlvbkZyb21DZW5jSW5pdERhdGEoaW5pdERhdGEp
OwogCiAgICAgLy8gQ2hlY2sgaWYgaW5pdERhdGEgaXMgYSB2YWxpZCBDRU5DIGluaXREYXRhLgog
ICAgIGlmICgha2V5SWRDb3VudCB8fCAhaW5kZXgpCiAgICAgICAgIHJldHVybiBrZXlJZHM7CiAK
LSAgICBhdXRvKiBkYXRhID0gaW5pdERhdGEuZGF0YSgpOworICAgIGF1dG8gZGF0YSA9IGluaXRE
YXRhLmJ5dGVzKCk7CiAKICAgICBhdXRvIG9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgYXV0byBrZXlJZHNBcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKQEAgLTIxOCw3
ICsyMTYsNyBAQCBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gZXh0cmFjdEtleWlkc0ZyCiAgICAg
Ly8gImtpZHMiCiAgICAgLy8gQW4gYXJyYXkgb2Yga2V5IElEcy4gRWFjaCBlbGVtZW50IG9mIHRo
ZSBhcnJheSBpcyB0aGUgYmFzZTY0dXJsIGVuY29kaW5nIG9mIHRoZSBvY3RldCBzZXF1ZW5jZSBj
b250YWluaW5nIHRoZSBrZXkgSUQgdmFsdWUuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGtleUlkQ291bnQ7IGkrKykgewotICAgICAgICBrZXlJZHNBcnJheS0+cHVzaFN0cmluZyhiYXNl
NjRVUkxFbmNvZGVUb1N0cmluZygmZGF0YVtpbmRleF0sIENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5
dGVzKSk7CisgICAgICAgIGtleUlkc0FycmF5LT5wdXNoU3RyaW5nKGJhc2U2NFVSTEVuY29kZVRv
U3RyaW5nKGRhdGEuc3Vic3BhbihpbmRleCwgQ2xlYXJLZXk6OktleUlEU2l6ZUluQnl0ZXMpKSk7
CiAgICAgICAgIGluZGV4ICs9IENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVzOwogICAgIH0KIApA
QCAtMjQ1LDcgKzI0Myw3IEBAIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBleHRyYWN0S2V5SWRG
cm8KICAgICAvLyBUaGUgZm9ybWF0IGlzIGEgSlNPTiBvYmplY3QgY29udGFpbmluZyB0aGUgZm9s
bG93aW5nIG1lbWJlcnM6CiAgICAgLy8gImtpZHMiCiAgICAgLy8gQW4gYXJyYXkgb2Yga2V5IElE
cy4gRWFjaCBlbGVtZW50IG9mIHRoZSBhcnJheSBpcyB0aGUgYmFzZTY0dXJsIGVuY29kaW5nIG9m
IHRoZSBvY3RldCBzZXF1ZW5jZSBjb250YWluaW5nIHRoZSBrZXkgSUQgdmFsdWUuCi0gICAga2V5
SWRzQXJyYXktPnB1c2hTdHJpbmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoaW5pdERhdGEuZGF0
YSgpLCBpbml0RGF0YS5zaXplKCkpKTsKKyAgICBrZXlJZHNBcnJheS0+cHVzaFN0cmluZyhiYXNl
NjRVUkxFbmNvZGVUb1N0cmluZyhpbml0RGF0YS5ieXRlcygpKSk7CiAKICAgICBvYmplY3QtPnNl
dEFycmF5KCJraWRzIiwgV1RGTW92ZShrZXlJZHNBcnJheSkpOwogICAgIENTdHJpbmcganNvbkRh
dGEgPSBvYmplY3QtPnRvSlNPTlN0cmluZygpLnV0ZjgoKTsKQEAgLTU3OCw5ICs1NzYsOCBAQCB2
b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTCiAKICAgICAvLyBDb25zdHJ1
Y3QgdGhlIEtleVN0YXR1c1ZlY3RvciBvYmplY3QsIHJlcHJlc2VudGluZyByZWxlYXNlZCBrZXlz
LCBhbmQgdGhlIG1lc3NhZ2UgaW4gdGhlCiAgICAgLy8gJ2xpY2Vuc2UgcmVsZWFzZScgZm9ybWF0
LgotICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3IgPSBtX2tleVN0b3JlLmFsbEtl
eXNBcyhDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6UmVsZWFzZWQpOwotICAgIFJlZlB0
cjxTaGFyZWRCdWZmZXI+IG1lc3NhZ2U7Ci0gICAgeworICAgIGF1dG8ga2V5U3RhdHVzVmVjdG9y
ID0gbV9rZXlTdG9yZS5hbGxLZXlzQXMoQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlJl
bGVhc2VkKTsKKyAgICBhdXRvIG1lc3NhZ2UgPSBbJl17CiAgICAgICAgIC8vIENvbnN0cnVjdCBK
U09OIHRoYXQgcmVwcmVzZW50cyB0aGUgJ2xpY2Vuc2UgcmVsZWFzZScgZm9ybWF0LCBjcmVhdGlu
ZyBhICdraWRzJyBhcnJheQogICAgICAgICAvLyBvZiBiYXNlNjRVUkwtZW5jb2RlZCBrZXkgSURz
IGZvciBhbGwga2V5cyB0aGF0IHdlcmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2Vzc2lvbi4KICAg
ICAgICAgYXV0byByb290T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKQEAgLTU4OCw3
ICs1ODUsNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTCiAgICAg
ICAgICAgICBhdXRvIGFycmF5ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICAgICAg
Zm9yIChjb25zdCBhdXRvJiBrZXkgOiBtX2tleVN0b3JlKSB7CiAgICAgICAgICAgICAgICAgQVNT
RVJUKGtleS0+aWQoKS5zaXplKCkgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1h
eCgpKTsKLSAgICAgICAgICAgICAgICBhcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVU
b1N0cmluZyhrZXktPmlkKCkuZGF0YSgpLCBrZXktPmlkKCkuc2l6ZSgpKSk7CisgICAgICAgICAg
ICAgICAgYXJyYXktPnB1c2hTdHJpbmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoa2V5LT5pZCgp
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByb290T2JqZWN0LT5zZXRBcnJheSgia2lk
cyIsIFdURk1vdmUoYXJyYXkpKTsKICAgICAgICAgfQpAQCAtNTk2LDExICs1OTMsMTEgQEAgdm9p
ZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlUwogICAgICAgICAvLyBDb3B5IHRo
ZSBKU09OIGRhdGEgaW50byBhIFNoYXJlZEJ1ZmZlciBvYmplY3QuCiAgICAgICAgIFN0cmluZyBt
ZXNzYWdlU3RyaW5nID0gcm9vdE9iamVjdC0+dG9KU09OU3RyaW5nKCk7CiAgICAgICAgIENTdHJp
bmcgbWVzc2FnZUNTdHJpbmcgPSBtZXNzYWdlU3RyaW5nLnV0ZjgoKTsKLSAgICAgICAgbWVzc2Fn
ZSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKG1lc3NhZ2VDU3RyaW5nLmRhdGEoKSwgbWVzc2FnZUNT
dHJpbmcubGVuZ3RoKCkpOwotICAgIH0KKyAgICAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3Jl
YXRlKG1lc3NhZ2VDU3RyaW5nLmRhdGEoKSwgbWVzc2FnZUNTdHJpbmcubGVuZ3RoKCkpOworICAg
IH0oKTsKIAogICAgIG1fa2V5U3RvcmUucmVtb3ZlQWxsS2V5cygpOwotICAgIGRpc3BhdGNoQ2Fs
bGJhY2soV1RGTW92ZShrZXlTdGF0dXNWZWN0b3IpLCBSZWY8U2hhcmVkQnVmZmVyPigqbWVzc2Fn
ZSksIFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVkKTsKKyAgICBkaXNwYXRjaENhbGxiYWNrKFdURk1v
dmUoa2V5U3RhdHVzVmVjdG9yKSwgV1RGTW92ZShtZXNzYWdlKSwgU3VjY2Vzc1ZhbHVlOjpTdWNj
ZWVkZWQpOwogfQogCiB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpzdG9yZVJlY29y
ZE9mS2V5VXNhZ2UoY29uc3QgU3RyaW5nJikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dlbmVyaWMvS2V5ZWREZWNvZGVyR2VuZXJpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9LZXllZERlY29kZXJHZW5lcmljLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9LZXllZERlY29kZXJH
ZW5lcmljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBzdGF0aWMgc3RkOjpv
cHRpb25hbDxTdHJpbmc+IHJlYWRTdHJpbmcoCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygp
OwogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcihzaXplLnZhbHVlKCkpOwotICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLmRhdGEoKSwgc2l6ZS52YWx1ZSgp
KSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBidWZmZXIg
fSkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgYXV0byByZXN1bHQgPSBTdHJp
bmc6OmZyb21VVEY4KGJ1ZmZlci5kYXRhKCksIHNpemUudmFsdWUoKSk7CiAgICAgaWYgKHJlc3Vs
dC5pc051bGwoKSkKQEAgLTg4LDcgKzg4LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEtleWVkRGVjb2Rl
cj4gS2V5ZWREZWNvZAogCiBLZXllZERlY29kZXJHZW5lcmljOjpLZXllZERlY29kZXJHZW5lcmlj
KGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQogewotICAgIFdURjo6UGVyc2lzdGVu
Y2U6OkRlY29kZXIgZGVjb2RlcihkYXRhLCBzaXplKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpE
ZWNvZGVyIGRlY29kZXIoU3BhbiB7IGRhdGEsIHNpemUgfSk7CiAKICAgICBtX3Jvb3REaWN0aW9u
YXJ5ID0gbWFrZVVuaXF1ZTxEaWN0aW9uYXJ5PigpOwogICAgIG1fZGljdGlvbmFyeVN0YWNrLmFw
cGVuZChtX3Jvb3REaWN0aW9uYXJ5LmdldCgpKTsKQEAgLTExNyw3ICsxMTcsNyBAQCBLZXllZERl
Y29kZXJHZW5lcmljOjpLZXllZERlY29kZXJHZW5lcmljCiAgICAgICAgICAgICBpZiAoIW9rKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZl
cigqc2l6ZSk7Ci0gICAgICAgICAgICBvayA9IGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KGJ1ZmZlci5kYXRhKCksICpzaXplKTsKKyAgICAgICAgICAgIG9rID0gZGVjb2Rlci5kZWNvZGVG
aXhlZExlbmd0aERhdGEoU3BhbiB7IGJ1ZmZlciB9KTsKICAgICAgICAgICAgIGlmICghb2spCiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBtX2RpY3Rpb25hcnlTdGFjay5sYXN0
KCktPmFkZCgqa2V5LCBXVEZNb3ZlKGJ1ZmZlcikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTW9kZWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Nb2RlbC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Nb2RlbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3
IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIE1vZGVsOjplbmNvZGUoRW5jb2RlciYg
ZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHNpemVfdD4obV9k
YXRhLT5zaXplKCkpOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKG1fZGF0YS0+
ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEobV9kYXRhLT5ieXRlcygpLCAxKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4K
QEAgLTc0LDcgKzc0LDcgQEAgUmVmUHRyPE1vZGVsPiBNb2RlbDo6ZGVjb2RlKERlY29kZXImIGRl
YwogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CiAgICAgZGF0YS5ncm93KCpsZW5ndGgpOwot
ICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoZGF0YS5kYXRhKCksIGRhdGEu
c2l6ZSgpLCAxKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGRhdGEs
IDEpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBNb2RlbDo6Y3JlYXRl
KFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoZGF0YSkpKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuaAkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IFBpeGVsQnVmZmVyCiAKICAgICBlbmNvZGVyIDw8IG1fZm9ybWF0OwogICAgIGVuY29kZXIgPDwg
bV9zaXplOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKG1fZGF0YS0+ZGF0YSgp
LCBtX2RhdGEtPmJ5dGVMZW5ndGgoKSwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEobV9kYXRhLT5ieXRlcygpLCAxKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gUGl4ZWxCdWZmZXI6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQpAQCAtMTEzLDcgKzExMyw3IEBAIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0ZDo6
b3B0aW9uYWw8UGkKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKIAotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVzdWx0LT5tX2Rh
dGEtPmRhdGEoKSwgcmVzdWx0LT5tX2RhdGEtPmJ5dGVMZW5ndGgoKSwgMSkpCisgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZXN1bHQtPm1fZGF0YS0+d3JpdGFibGVCeXRl
cygpLCAxKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgIHJldHVybiByZXN1
bHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1J
bnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5z
dGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQzLDYg
KzQzLDcgQEAKICNpbXBvcnQgPHd0Zi9GaWxlU3lzdGVtLmg+CiAjaW1wb3J0IDx3dGYvSlNPTlZh
bHVlcy5oPgogI2ltcG9ydCA8d3RmL0xvZ2dlckhlbHBlci5oPgorI2ltcG9ydCA8d3RmL2NvY29h
L1NwYW5Db2NvYS5oPgogI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0
IDx3dGYvdGV4dC9CYXNlNjQuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KQEAg
LTcxNSw3ICs3MTYsNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5n
CiAgICAgICAgIGlkZW50aWZpZXIgPSBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRo
RGF0YTppbml0RGF0YS0+Y3JlYXRlTlNEYXRhKCkuZ2V0KCkgZW5jb2Rpbmc6TlNVVEY4U3RyaW5n
RW5jb2RpbmddKTsKICNpZiBIQVZFKEZBSVJQTEFZU1RSRUFNSU5HX0NFTkNfSU5JVERBVEEpCiAg
ICAgZWxzZSBpZiAoaW5pdERhdGFUeXBlID09IEluaXREYXRhUmVnaXN0cnk6OmNlbmNOYW1lKCkp
IHsKLSAgICAgICAgYXV0byBwc3NoU3RyaW5nID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5pdERh
dGEtPmRhdGEoKSwgaW5pdERhdGEtPnNpemUoKSk7CisgICAgICAgIGF1dG8gcHNzaFN0cmluZyA9
IGJhc2U2NEVuY29kZVRvU3RyaW5nKGluaXREYXRhLT5ieXRlcygpKTsKICAgICAgICAgaW5pdGlh
bGl6YXRpb25EYXRhID0gW05TSlNPTlNlcmlhbGl6YXRpb24gZGF0YVdpdGhKU09OT2JqZWN0OkB7
IEAicHNzaCI6IChOU1N0cmluZyopcHNzaFN0cmluZyB9IG9wdGlvbnM6TlNKU09OV3JpdGluZ1By
ZXR0eVByaW50ZWQgZXJyb3I6bmlsXTsKICAgICB9CiAjZW5kaWYKQEAgLTExOTEsMTIgKzExOTIs
MTAgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZwogICAgICAgICB9
CiAKICAgICAgICAgYXV0byByZXF1ZXN0SlNPTiA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKLSAg
ICAgICAgZm9yIChhdXRvJiByZXF1ZXN0RGF0YSA6IHJlcXVlc3RzRGF0YSkgeworICAgICAgICBm
b3IgKGF1dG8mIFtrZXlJRCwgcGF5bG9hZF0gOiByZXF1ZXN0c0RhdGEpIHsKICAgICAgICAgICAg
IGF1dG8gZW50cnkgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICAgICAgYXV0byYg
a2V5SUQgPSByZXF1ZXN0RGF0YS5maXJzdDsKLSAgICAgICAgICAgIGF1dG8mIHBheWxvYWQgPSBy
ZXF1ZXN0RGF0YS5zZWNvbmQ7Ci0gICAgICAgICAgICBlbnRyeS0+c2V0U3RyaW5nKCJrZXlJRCIs
IGJhc2U2NEVuY29kZVRvU3RyaW5nKGtleUlELT5kYXRhKCksIGtleUlELT5zaXplKCkpKTsKLSAg
ICAgICAgICAgIGVudHJ5LT5zZXRTdHJpbmcoInBheWxvYWQiLCBiYXNlNjRFbmNvZGVUb1N0cmlu
ZyhwYXlsb2FkLmdldCgpLmJ5dGVzLCBwYXlsb2FkLmdldCgpLmxlbmd0aCkpOworICAgICAgICAg
ICAgZW50cnktPnNldFN0cmluZygia2V5SUQiLCBiYXNlNjRFbmNvZGVUb1N0cmluZyhrZXlJRC0+
Ynl0ZXMoKSkpOworICAgICAgICAgICAgZW50cnktPnNldFN0cmluZygicGF5bG9hZCIsIGJhc2U2
NEVuY29kZVRvU3RyaW5nKGFzQnl0ZXMocGF5bG9hZC5nZXQoKSkpKTsKICAgICAgICAgICAgIHJl
cXVlc3RKU09OLT5wdXNoT2JqZWN0KFdURk1vdmUoZW50cnkpKTsKICAgICAgICAgfQogICAgICAg
ICBhdXRvIHJlcXVlc3RCdWZmZXIgPSB1dGY4QnVmZmVyKHJlcXVlc3RKU09OLT50b0pTT05TdHJp
bmcoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw3ICsxMzIsNyBA
QCBTdHJpbmcgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YVVSCiAgICAgaWYgKGVuY29k
ZWRJbWFnZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAiZGF0YTosIjsKIAotICAgIHJldHVy
biBtYWtlU3RyaW5nKCJkYXRhOiIsIG1pbWVUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVk
KGVuY29kZWRJbWFnZS5kYXRhKCksIGVuY29kZWRJbWFnZS5zaXplKCkpKTsKKyAgICByZXR1cm4g
bWFrZVN0cmluZygiZGF0YToiLCBtaW1lVHlwZSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChl
bmNvZGVkSW1hZ2UpKTsKIH0KIAogVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+
IHF1YWxpdHkpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCShyZXZp
c2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBA
QCBzdGF0aWMgU3RyaW5nIGNyZWF0ZVVuaXF1ZUZvbnROYW1lKCkKICAgICBHVUlEIGZvbnRVdWlk
OwogICAgIENvQ3JlYXRlR3VpZCgmZm9udFV1aWQpOwogCi0gICAgYXV0byBmb250TmFtZSA9IGJh
c2U2NEVuY29kZVRvU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZmb250VXVpZCksIHNp
emVvZihmb250VXVpZCkpOworICAgIGF1dG8gZm9udE5hbWUgPSBiYXNlNjRFbmNvZGVUb1N0cmlu
ZyhTcGFuIHsgJmZvbnRVdWlkLCAxIH0pOwogICAgIEFTU0VSVChmb250TmFtZS5sZW5ndGgoKSA8
IExGX0ZBQ0VTSVpFKTsKICAgICByZXR1cm4gZm9udE5hbWU7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWly
by5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIFN0cmluZyBjcmVh
dGVVbmlxdWVGb250TmFtZSgpCiAgICAgR1VJRCBmb250VXVpZDsKICAgICBDb0NyZWF0ZUd1aWQo
JmZvbnRVdWlkKTsKIAotICAgIGF1dG8gZm9udE5hbWUgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhy
ZWludGVycHJldF9jYXN0PGNoYXIqPigmZm9udFV1aWQpLCBzaXplb2YoZm9udFV1aWQpKTsKKyAg
ICBhdXRvIGZvbnROYW1lID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoU3BhbiB7ICZmb250VXVpZCwg
MSB9KTsKICAgICBBU1NFUlQoZm9udE5hbWUubGVuZ3RoKCkgPCBMRl9GQUNFU0laRSk7CiAgICAg
cmV0dXJuIGZvbnROYW1lOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NT
TEtleUdlbmVyYXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvU1NMS2V5R2VuZXJhdG9yTWFjLm1tCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvU1NMS2V5R2VuZXJhdG9yTWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yMTksNyArMjE5LDcgQEAgc3RhdGljIFN0cmluZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFs
bGVuZwogICAgIGlmIChTZWNBc24xRW5jb2RlSXRlbShjb2RlciwgJnNpZ25lZFB1YmxpY0tleUFu
ZENoYWxsZW5nZSwgc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlVGVtcGxhdGUsICZlbmNvZGVk
U2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlKSAhPSBub0VycikKICAgICAgICAgcmV0dXJuIFN0
cmluZygpOwogCi0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGVuY29kZWRTaWduZWRQ
dWJsaWNLZXlBbmRDaGFsbGVuZ2UuRGF0YSwgZW5jb2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxs
ZW5nZS5MZW5ndGgpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgZW5j
b2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZS5EYXRhLCBlbmNvZGVkU2lnbmVkUHVibGlj
S2V5QW5kQ2hhbGxlbmdlLkxlbmd0aCB9KTsKIH0KIAogQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJB
VElPTlNfRU5ECkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFs
dGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcy5o
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9SZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEx
NCwxNiArMTE0LDE2IEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBD
YXBhYmlsaXR5VmFsdWVPclJhbmdlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsK
LSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPigmbV9taW5PclZhbHVlKSwgc2l6ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZh
bHVlVW5pb24pKTsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmbV9tYXgpLCBzaXplb2YoVmFsdWVVbmlvbiksIGFsaWdu
b2YoVmFsdWVVbmlvbikpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4g
eyAmbV9taW5PclZhbHVlLCAxIH0sIGFsaWdub2YoVmFsdWVVbmlvbikpOworICAgIGVuY29kZXIu
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmbV9tYXgsIDEgfSwgYWxpZ25vZihWYWx1ZVVu
aW9uKSk7CiAgICAgZW5jb2RlciA8PCBtX3R5cGU7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+CiBib29sIENhcGFiaWxpdHlWYWx1ZU9yUmFuZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
LCBDYXBhYmlsaXR5VmFsdWVPclJhbmdlJiB2YWx1ZU9yUmFuZ2UpCiB7Ci0gICAgcmV0dXJuIGRl
Y29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2
YWx1ZU9yUmFuZ2UubV9taW5PclZhbHVlKSwgc2l6ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZh
bHVlVW5pb24pKQotICAgICAgICAmJiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWlu
dGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWVPclJhbmdlLm1fbWF4KSwgc2l6ZW9mKFZhbHVl
VW5pb24pLCBhbGlnbm9mKFZhbHVlVW5pb24pKQorICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZp
eGVkTGVuZ3RoRGF0YShTcGFuIHsgJnZhbHVlT3JSYW5nZS5tX21pbk9yVmFsdWUsIDEgfSwgYWxp
Z25vZihWYWx1ZVVuaW9uKSkKKyAgICAgICAgJiYgZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERh
dGEoU3BhbiB7ICZ2YWx1ZU9yUmFuZ2UubV9tYXgsIDEgfSwgYWxpZ25vZihWYWx1ZVVuaW9uKSkK
ICAgICAgICAgJiYgZGVjb2Rlci5kZWNvZGUodmFsdWVPclJhbmdlLm1fdHlwZSk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3Vy
Y2VDZW50ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDEzICsxMzksMTMgQEAgc3RhdGljIHZv
aWQgYWRkU3RyaW5nVG9TSEExKFNIQTEmIHNoYTEsIAogCiAgICAgaWYgKHN0cmluZy5pczhCaXQo
KSAmJiBzdHJpbmcuaXNBbGxBU0NJSSgpKSB7CiAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbnVsbEJ5
dGUgPSAwOwotICAgICAgICBzaGExLmFkZEJ5dGVzKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJp
bmcubGVuZ3RoKCkpOwotICAgICAgICBzaGExLmFkZEJ5dGVzKCZudWxsQnl0ZSwgMSk7CisgICAg
ICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVu
Z3RoKCkgfSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZudWxsQnl0ZSwgMSB9KTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGF1dG8gdXRmOCA9IHN0cmluZy51dGY4KCk7
Ci0gICAgc2hhMS5hZGRCeXRlcyh1dGY4LmRhdGFBc1VJbnQ4UHRyKCksIHV0ZjgubGVuZ3RoKCkg
KyAxKTsgLy8gSW5jbHVkZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUuCisgICAgc2hhMS5hZGRCeXRl
cyhTcGFuIHsgdXRmOC5kYXRhQXNVSW50OFB0cigpLCB1dGY4Lmxlbmd0aCgpICsgMSB9KTsgLy8g
SW5jbHVkZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUuCiB9CiAKIFN0cmluZyBSZWFsdGltZU1lZGlh
U291cmNlQ2VudGVyOjpoYXNoU3RyaW5nV2l0aFNhbHQoY29uc3QgU3RyaW5nJiBpZCwgY29uc3Qg
U3RyaW5nJiBoYXNoU2FsdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Q3JlZGVudGlhbEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxCYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTcsOCArOTcsOSBAQCBib29sIENyZWRlbnRpYWxCYXNlOjpjb21wYXJlKGNvbnN0IENy
ZWRlCiAKIFN0cmluZyBDcmVkZW50aWFsQmFzZTo6c2VyaWFsaXphdGlvbkZvckJhc2ljQXV0aG9y
aXphdGlvbkhlYWRlcigpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6IEFkZCBtYWtlU3RyaW5nIHZh
cmlhbnQgdGhhdCBjcmVhdGVzIGEgdXRmOCBidWZmZXIgZGlyZWN0bHkuCiAgICAgYXV0byBjcmVk
ZW50aWFsU3RyaW5nRGF0YSA9IG1ha2VTdHJpbmcobV91c2VyLCAnOicsIG1fcGFzc3dvcmQpLnV0
ZjgoKTsKLSAgICByZXR1cm4gbWFrZVN0cmluZygiQmFzaWMgIiwgYmFzZTY0RW5jb2RlZChjcmVk
ZW50aWFsU3RyaW5nRGF0YSkpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCJCYXNpYyAiLCBiYXNl
NjRFbmNvZGVkKGNyZWRlbnRpYWxTdHJpbmdEYXRhLmJ5dGVzKCkpKTsKIH0KIAogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0
aWZpY2F0ZUluZm9DRk5ldC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY2YvQ2VydGlmaWNhdGVJbmZvQ0ZOZXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMTAsNyArMjEwLDcgQEAgc3RhdGljIHZvaWQgZW5jb2RlQ0ZEYXRhKEVuY29kZXIm
IGVuY29kZQogICAgIGNvbnN0IHVpbnQ4X3QqIGJ5dGVQdHIgPSBDRkRhdGFHZXRCeXRlUHRyKGRh
dGEpOwogCiAgICAgZW5jb2RlciA8PCBsZW5ndGg7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoYnl0ZVB0ciwgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpKTsKKyAgICBlbmNv
ZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgYnl0ZVB0ciwgc3RhdGljX2Nhc3Q8c2l6
ZV90PihsZW5ndGgpIH0pOwogfQogCiBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXRhaW5QdHI8Q0ZE
YXRhUmVmPj4gZGVjb2RlQ0ZEYXRhKERlY29kZXImIGRlY29kZXIpCkBAIC0yMjUsNyArMjI1LDcg
QEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0YWluUHRyPENGRGF0YVJlZgogICAgIGlmICghcG9p
bnRlcikKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHJldHVybiBhZG9wdENG
KENGRGF0YUNyZWF0ZShudWxscHRyLCBwb2ludGVyLCAqc2l6ZSkpOworICAgIHJldHVybiBhZG9w
dENGKENGRGF0YUNyZWF0ZShudWxscHRyLCByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3Qq
Pihwb2ludGVyKSwgKnNpemUpKTsKIH0KIAogI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJ
T04pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ2VydGlmaWNh
dGVJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL0NlcnRpZmljYXRlSW5mby5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ2VydGlmaWNhdGVJbmZvLmgJKHdvcmtpbmcgY29weSkK
QEAgLTc1LDcgKzc1LDcgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8R1JlZlB0cjxHQnl0ZUFy
cgogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyICZlbmNvZGVyLCBjb25zdCBHUmVmUHRy
PEdCeXRlQXJyYXk+JiBieXRlQXJyYXkpCiAgICAgewogICAgICAgICBlbmNvZGVyIDw8IHN0YXRp
Y19jYXN0PHVpbnQzMl90PihieXRlQXJyYXktPmxlbik7Ci0gICAgICAgIGVuY29kZXIuZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKGJ5dGVBcnJheS0+ZGF0YSwgYnl0ZUFycmF5LT5sZW4pOworICAgICAg
ICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgYnl0ZUFycmF5LT5kYXRhLCBi
eXRlQXJyYXktPmxlbiB9KTsKICAgICB9CiAKICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxHUmVm
UHRyPEdCeXRlQXJyYXk+PiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKQEAgLTg3LDcgKzg3LDcg
QEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8R1JlZlB0cjxHQnl0ZUFycgogCiAgICAgICAgIEdS
ZWZQdHI8R0J5dGVBcnJheT4gYnl0ZUFycmF5ID0gYWRvcHRHUmVmKGdfYnl0ZV9hcnJheV9zaXpl
ZF9uZXcoKnNpemUpKTsKICAgICAgICAgZ19ieXRlX2FycmF5X3NldF9zaXplKGJ5dGVBcnJheS5n
ZXQoKSwgKnNpemUpOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KGJ5dGVBcnJheS0+ZGF0YSwgKnNpemUpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4
ZWRMZW5ndGhEYXRhKFNwYW4geyBieXRlQXJyYXktPmRhdGEsICpzaXplIH0pKQogICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAgICAgcmV0dXJuIGJ5dGVBcnJheTsKICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50
LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NR
TGl0ZVN0YXRlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgYm9vbCBT
UUxpdGVTdGF0ZW1lbnQ6OmV4ZWN1dGVDb21tYW5kKCkKICAgICByZXR1cm4gc3RlcCgpID09IFNR
TElURV9ET05FOwogfQogCi1pbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kQmxvYihpbnQgaW5kZXgs
IFNwYW48Y29uc3QgdWludDhfdD4gYmxvYikKK2ludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9i
KGludCBpbmRleCwgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGJsb2IpCiB7CiAgICAgQVNTRVJUKGlu
ZGV4ID4gMCk7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPD0gYmlu
ZFBhcmFtZXRlckNvdW50KCkpOwpAQCAtOTUsNiArOTUsMTEgQEAgaW50IFNRTGl0ZVN0YXRlbWVu
dDo6YmluZEJsb2IoaW50IGluZGV4LAogICAgIHJldHVybiBzcWxpdGUzX2JpbmRfYmxvYihtX3N0
YXRlbWVudCwgaW5kZXgsIGJsb2IuZGF0YSgpLCBibG9iLnNpemUoKSwgU1FMSVRFX1RSQU5TSUVO
VCk7CiB9CiAKK2ludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgU3Bhbjxj
b25zdCB1aW50OF90PiBibG9iKQoreworICAgIHJldHVybiBiaW5kQmxvYihpbmRleCwgYXNCeXRl
cyhibG9iKSk7Cit9CisKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwg
Y29uc3QgU3RyaW5nJiB0ZXh0KQogewogICAgIC8vIFN0cmluZzo6Y2hhcmFjdGVycygpIHJldHVy
bnMgMCBmb3IgdGhlIGVtcHR5IHN0cmluZywgd2hpY2ggU1FMaXRlCkBAIC0xMDcsNyArMTEyLDcg
QEAgaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IoaW50IGluZGV4LAogICAgIGVsc2UKICAg
ICAgICAgY2hhcmFjdGVycyA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKIAotICAgIHJldHVybiBi
aW5kQmxvYihpbmRleCwgU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGNo
YXJhY3RlcnMpLCB0ZXh0Lmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSB9KTsKKyAgICByZXR1cm4g
YmluZEJsb2IoaW5kZXgsIFNwYW4geyByZWludGVycHJldF9jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+
KGNoYXJhY3RlcnMpLCB0ZXh0Lmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSB9KTsKIH0KIAogaW50
IFNRTGl0ZVN0YXRlbWVudDo6YmluZFRleHQoaW50IGluZGV4LCBTdHJpbmdWaWV3IHRleHQpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3Rh
dGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAgcHVibGljOgogICAgIFdF
QkNPUkVfRVhQT1JUIH5TUUxpdGVTdGF0ZW1lbnQoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBTUUxp
dGVTdGF0ZW1lbnQoU1FMaXRlU3RhdGVtZW50JiYpOwogICAgIAorICAgIFdFQkNPUkVfRVhQT1JU
IGludCBiaW5kQmxvYihpbnQgaW5kZXgsIFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgV0VC
Q09SRV9FWFBPUlQgaW50IGJpbmRCbG9iKGludCBpbmRleCwgU3Bhbjxjb25zdCB1aW50OF90Pik7
CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJpbmRCbG9iKGludCBpbmRleCwgY29uc3QgU3RyaW5n
Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJpbmRUZXh0KGludCBpbmRleCwgU3RyaW5nVmll
dyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmlu
dGFibGUuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1F1b3RlZFByaW50YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDEyICs1NSw3IEBA
IHN0YXRpYyBzaXplX3QgbGVuZ3RoT2ZMaW5lRW5kaW5nQXRJbmRleCgKICAgICByZXR1cm4gMDsK
IH0KIAotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCBWZWN0b3I8
dWludDhfdD4mIGlucHV0KQotewotICAgIHJldHVybiBxdW90ZWRQcmludGFibGVFbmNvZGUoaW5w
dXQuZGF0YSgpLCBpbnB1dC5zaXplKCkpOwotfQotCi1WZWN0b3I8dWludDhfdD4gcXVvdGVkUHJp
bnRhYmxlRW5jb2RlKGNvbnN0IHVpbnQ4X3QqIGlucHV0LCBzaXplX3QgaW5wdXRMZW5ndGgpCitz
dGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCB1aW50OF90
KiBpbnB1dCwgc2l6ZV90IGlucHV0TGVuZ3RoKQogewogICAgIFZlY3Rvcjx1aW50OF90PiBvdXQ7
CiAgICAgb3V0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoaW5wdXRMZW5ndGgpOwpAQCAtMTE2LDEy
ICsxMTEsMTIgQEAgVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjbwogICAg
IHJldHVybiBvdXQ7CiB9CiAKLVZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUo
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmlu
dGFibGVFbmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQogewotICAgIHJldHVybiBx
dW90ZWRQcmludGFibGVEZWNvZGUoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkpOworICAgIHJl
dHVybiBxdW90ZWRQcmludGFibGVFbmNvZGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpKTsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+IHF1
b3RlZFByaW50YWJsZURlY29kZShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0
aCkKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0IHVp
bnQ4X3QqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3RoKQogewogICAgIFZlY3Rvcjx1aW50OF90PiBv
dXQ7CiAgICAgaWYgKCFkYXRhTGVuZ3RoKQpAQCAtMTU2LDQgKzE1MSw5IEBAIFZlY3Rvcjx1aW50
OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY28KICAgICByZXR1cm4gb3V0OwogfQogCitWZWN0
b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBp
bnB1dCkKK3sKKyAgICByZXR1cm4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KGlucHV0LmRhdGEoKSksIGlucHV0LnNpemUoKSk7Cit9CisKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVvdGVkUHJpbnRhYmxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUu
aAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90
ZWRQcmludGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTMgKzMxLDExIEBACiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1WZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxl
RW5jb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOwotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFBy
aW50YWJsZUVuY29kZShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKLQotVmVjdG9yPHVpbnQ4X3Q+
IHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mKTsKLVZlY3Rvcjx1
aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgdWludDhfdCosIHNpemVfdCk7CitW
ZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRl
Pik7CitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKFNwYW48Y29uc3Qgc3Rk
OjpieXRlPik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjUxLDcgKzI1MSw3IEBAIHN0ZDo6b3B0aW9uYWw8UGFzdGVib2FyZEN1c3RvbURh
dGE+IFBhc3QKICAgICAgICAgaWYgKEhBTkRMRSBjYkRhdGEgPSA6OkdldENsaXBib2FyZERhdGEo
Q3VzdG9tRGF0YUNsaXBib2FyZEZvcm1hdCkpIHsKICAgICAgICAgICAgIHNpemVfdCBzaXplID0g
R2xvYmFsU2l6ZShjYkRhdGEpOwogICAgICAgICAgICAgYXV0byBkYXRhID0gc3RhdGljX2Nhc3Q8
dWludDhfdCo+KEdsb2JhbExvY2soY2JEYXRhKSk7Ci0gICAgICAgICAgICBhdXRvIGN1c3RvbURh
dGEgPSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6ZnJvbVBlcnNpc3RlbmNlRGVjb2Rlcih7ZGF0YSwg
c2l6ZX0pOworICAgICAgICAgICAgYXV0byBjdXN0b21EYXRhID0gUGFzdGVib2FyZEN1c3RvbURh
dGE6OmZyb21QZXJzaXN0ZW5jZURlY29kZXIoU3BhbiB7IGRhdGEsIHNpemUgfSk7CiAKICAgICAg
ICAgICAgIEdsb2JhbFVubG9jayhjYkRhdGEpOwogICAgICAgICAgICAgOjpDbG9zZUNsaXBib2Fy
ZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3Ry
YXRpb25EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9z
ZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0
YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTksMTAgKzQ1OSwxMCBAQCBib29sIFJlZ2lz
dHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2VzCiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0
ZW1lbnQtPmJpbmRUZXh0KDYsIHVwZGF0ZVZpYUNhY2hlVG9TdHJpbmcoZGF0YS5yZWdpc3RyYXRp
b24udXBkYXRlVmlhQ2FjaGUpKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAgIHx8IGluc2VydFN0
YXRlbWVudC0+YmluZFRleHQoNywgZGF0YS5zY3JpcHRVUkwuc3RyaW5nKCkpICE9IFNRTElURV9P
SwogICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCg4LCB3b3JrZXJUeXBl
VG9TdHJpbmcoZGF0YS53b3JrZXJUeXBlKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBp
bnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDksIFNwYW4geyBjc3BFbmNvZGVyLmJ1ZmZlcigpLCBj
c3BFbmNvZGVyLmJ1ZmZlclNpemUoKSB9KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGlu
c2VydFN0YXRlbWVudC0+YmluZEJsb2IoOSwgY3NwRW5jb2Rlci5idWZmZXIoKSkgIT0gU1FMSVRF
X09LCiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDEwLCBkYXRhLnJl
ZmVycmVyUG9saWN5KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVu
dC0+YmluZEJsb2IoMTEsIFNwYW4geyBzY3JpcHRSZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVyKCks
IHNjcmlwdFJlc291cmNlTWFwRW5jb2Rlci5idWZmZXJTaXplKCkgfSkgIT0gU1FMSVRFX09LCi0g
ICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDEyLCBTcGFuIHsgY2VydGlm
aWNhdGVJbmZvRW5jb2Rlci5idWZmZXIoKSwgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXJT
aXplKCkgfSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJp
bmRCbG9iKDExLCBzY3JpcHRSZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVyKCkpICE9IFNRTElURV9P
SworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kQmxvYigxMiwgY2VydGlmaWNh
dGVJbmZvRW5jb2Rlci5idWZmZXIoKSkgIT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8fCBpbnNl
cnRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIkZhaWxlZCB0byBzdG9yZSByZWdpc3RyYXRpb24g
ZGF0YSBpbnRvIHJlY29yZHMgdGFibGUgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9y
KCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTUxNyw3ICs1MTcsNyBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9y
dFJlY29yCiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9u
c2VIZWFkZXJzPiBjb250ZW50U2VjdXJpdHlQb2xpY3k7CiAgICAgICAgIGF1dG8gY29udGVudFNl
Y3VyaXR5UG9saWN5RGF0YVNwYW4gPSBzcWwtPmNvbHVtbkJsb2JBc1NwYW4oOCk7CiAgICAgICAg
IGlmIChjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhU3Bhbi5zaXplKCkpIHsKLSAgICAgICAgICAg
IFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgY3NwRGVjb2Rlcihjb250ZW50U2VjdXJpdHlQb2xp
Y3lEYXRhU3Bhbi5kYXRhKCksIGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGFTcGFuLnNpemUoKSk7
CisgICAgICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGNzcERlY29kZXIgeyBjb250
ZW50U2VjdXJpdHlQb2xpY3lEYXRhU3BhbiB9OwogICAgICAgICAgICAgY3NwRGVjb2RlciA+PiBj
b250ZW50U2VjdXJpdHlQb2xpY3k7CiAgICAgICAgICAgICBpZiAoIWNvbnRlbnRTZWN1cml0eVBv
bGljeSkgewogICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIs
ICJSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3JkczogRmFpbGVkIHRvIGRlY29kZSBj
b250ZW50U2VjdXJpdHlQb2xpY3kiKTsKQEAgLTUzMCw3ICs1MzAsNyBAQCBTdHJpbmcgUmVnaXN0
cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yCiAgICAgICAgIEhhc2hNYXA8VVJMLCBTZXJ2aWNl
V29ya2VyQ29udGV4dERhdGE6OkltcG9ydGVkU2NyaXB0PiBzY3JpcHRSZXNvdXJjZU1hcDsKICAg
ICAgICAgYXV0byBzY3JpcHRSZXNvdXJjZU1hcERhdGFTcGFuID0gc3FsLT5jb2x1bW5CbG9iQXNT
cGFuKDEwKTsKICAgICAgICAgaWYgKHNjcmlwdFJlc291cmNlTWFwRGF0YVNwYW4uc2l6ZSgpKSB7
Ci0gICAgICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIHNjcmlwdFJlc291cmNlTWFw
RGVjb2RlcihzY3JpcHRSZXNvdXJjZU1hcERhdGFTcGFuLmRhdGEoKSwgc2NyaXB0UmVzb3VyY2VN
YXBEYXRhU3Bhbi5zaXplKCkpOworICAgICAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2Rl
ciBzY3JpcHRSZXNvdXJjZU1hcERlY29kZXIgeyBzY3JpcHRSZXNvdXJjZU1hcERhdGFTcGFuIH07
CiAgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPEhhc2hNYXA8VVJMLCBJbXBvcnRlZFNjcmlwdEF0
dHJpYnV0ZXM+PiBzY3JpcHRSZXNvdXJjZU1hcFdpdGhvdXRTY3JpcHRzOwogICAgICAgICAgICAg
c2NyaXB0UmVzb3VyY2VNYXBEZWNvZGVyID4+IHNjcmlwdFJlc291cmNlTWFwV2l0aG91dFNjcmlw
dHM7CiAgICAgICAgICAgICBpZiAoIXNjcmlwdFJlc291cmNlTWFwV2l0aG91dFNjcmlwdHMpIHsK
QEAgLTU0Myw3ICs1NDMsNyBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJl
Y29yCiAgICAgICAgIGF1dG8gY2VydGlmaWNhdGVJbmZvRGF0YVNwYW4gPSBzcWwtPmNvbHVtbkJs
b2JBc1NwYW4oMTEpOwogICAgICAgICBzdGQ6Om9wdGlvbmFsPENlcnRpZmljYXRlSW5mbz4gY2Vy
dGlmaWNhdGVJbmZvOwogCi0gICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgY2VydGlm
aWNhdGVJbmZvRGVjb2RlcihjZXJ0aWZpY2F0ZUluZm9EYXRhU3Bhbi5kYXRhKCksIGNlcnRpZmlj
YXRlSW5mb0RhdGFTcGFuLnNpemUoKSk7CisgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29k
ZXIgY2VydGlmaWNhdGVJbmZvRGVjb2RlciB7IGNlcnRpZmljYXRlSW5mb0RhdGFTcGFuIH07CiAg
ICAgICAgIGNlcnRpZmljYXRlSW5mb0RlY29kZXIgPj4gY2VydGlmaWNhdGVJbmZvOwogICAgICAg
ICBpZiAoIWNlcnRpZmljYXRlSW5mbykgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Io
U2VydmljZVdvcmtlciwgIlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzOiBGYWls
ZWQgdG8gZGVjb2RlIGNlcnRpZmljYXRlSW5mbyIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvd29y
a2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NjcmlwdFN0b3JhZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTY3JpcHRTdG9yYWdlLmNwcAko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZl
ci9TV1NjcmlwdFN0b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIFN0
cmluZyBTV1NjcmlwdFN0b3JhZ2U6OnNoYTJIYXNoKGNvbnN0IFMKICAgICBhdXRvIGlucHV0VXRm
OCA9IGlucHV0LnV0ZjgoKTsKICAgICBjcnlwdG8tPmFkZEJ5dGVzKGlucHV0VXRmOC5kYXRhKCks
IGlucHV0VXRmOC5sZW5ndGgoKSk7CiAgICAgYXV0byBoYXNoID0gY3J5cHRvLT5jb21wdXRlSGFz
aCgpOwotICAgIHJldHVybiBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhoYXNoLmRhdGEoKSwgaGFz
aC5zaXplKCkpOworICAgIHJldHVybiBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhoYXNoKTsKIH0K
IAogU3RyaW5nIFNXU2NyaXB0U3RvcmFnZTo6c2hhMkhhc2goY29uc3QgVVJMJiBpbnB1dCkgY29u
c3QKQEAgLTg2LDkgKzg2LDkgQEAgU2NyaXB0QnVmZmVyIFNXU2NyaXB0U3RvcmFnZTo6c3RvcmUo
Y29ucwogICAgIGF1dG8gc2NyaXB0UGF0aCA9IHRoaXMtPnNjcmlwdFBhdGgocmVnaXN0cmF0aW9u
S2V5LCBzY3JpcHRVUkwpOwogICAgIEZpbGVTeXN0ZW06Om1ha2VBbGxEaXJlY3RvcmllcyhGaWxl
U3lzdGVtOjpwYXJlbnRQYXRoKHNjcmlwdFBhdGgpKTsKIAotICAgIGF1dG8gaXRlcmF0ZU92ZXJC
dWZmZXJBbmRXcml0ZURhdGEgPSBbJl0oY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90
Kiwgc2l6ZV90KT4mIHdyaXRlRGF0YSkgewotICAgICAgICBmb3IgKGF1dG8gaXQgPSBzY3JpcHQu
YnVmZmVyKCktPmJlZ2luKCk7IGl0ICE9IHNjcmlwdC5idWZmZXIoKS0+ZW5kKCk7ICsraXQpCi0g
ICAgICAgICAgICB3cml0ZURhdGEoaXQtPnNlZ21lbnQtPmRhdGEoKSwgaXQtPnNlZ21lbnQtPnNp
emUoKSk7CisgICAgYXV0byBpdGVyYXRlT3ZlckJ1ZmZlckFuZFdyaXRlRGF0YSA9IFsmXShjb25z
dCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+JiB3cml0ZURhdGEpIHsKKyAg
ICAgICAgZm9yIChhdXRvJiBzZWdtZW50RW50cnkgOiAqc2NyaXB0LmJ1ZmZlcigpKQorICAgICAg
ICAgICAgd3JpdGVEYXRhKHNlZ21lbnRFbnRyeS5zZWdtZW50LT5ieXRlcygpKTsKICAgICB9Owog
CiAgICAgaWYgKCFzaG91bGRVc2VGaWxlTWFwcGluZyhzY3JpcHQuYnVmZmVyKCktPnNpemUoKSkp
IHsKQEAgLTk3LDggKzk3LDggQEAgU2NyaXB0QnVmZmVyIFNXU2NyaXB0U3RvcmFnZTo6c3RvcmUo
Y29ucwogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIlNXU2Ny
aXB0U3RvcmFnZTo6c3RvcmU6IEZhaWx1cmUgdG8gc3RvcmUgJXMsIEZpbGVTeXN0ZW06Om9wZW5G
aWxlKCkgZmFpbGVkIiwgc2NyaXB0UGF0aC51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgICAgIH0KLSAgICAgICAgaXRlcmF0ZU92ZXJCdWZmZXJBbmRXcml0ZURh
dGEoWyZdKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gICAgICAgICAgICBG
aWxlU3lzdGVtOjp3cml0ZVRvRmlsZShoYW5kbGUsIGRhdGEsIHNpemUpOworICAgICAgICBpdGVy
YXRlT3ZlckJ1ZmZlckFuZFdyaXRlRGF0YShbJl0oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEp
IHsKKyAgICAgICAgICAgIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKGhhbmRsZSwgZGF0YS5kYXRh
KCksIGRhdGEuc2l6ZSgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9KTsK
ICAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGhhbmRsZSk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSw4MSBAQAorMjAyMS0wNi0xMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRvcHQgU3BhbiBpbiBtb3JlIHBsYWNlcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6Q2Fj
aGVTdG9yYWdlOjpDYWNoZTo6ZGVjb2RlUmVjb3JkSGVhZGVyKToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6c3RvcmVPcmlnaW4pOgorICAgICAgICAoV2ViS2l0
OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVhZE9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OkNh
Y2hlU3RvcmFnZTo6ZW5jb2RlQ2FjaGVOYW1lcyk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3Rv
cmFnZTo6ZGVjb2RlQ2FjaGVzTmFtZXMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZURhdGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRh
dGE6Om1hcFRvRmlsZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Y29t
cHV0ZVNIQTEpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURh
dGEuaDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhOjpEYXRhKToKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW06CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YTo6YXBwbHkgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6OmFkb3B0TWFwKToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6RW50cnk6OmVuY29kZUFzU3RvcmFnZVJlY29yZCBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQpOgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5jcHA6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6aGFzaFN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6S2V5Ojpjb21wdXRlSGFzaCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6S2V5Ojpjb21wdXRlUGFydGl0aW9uSGFzaCBjb25zdCk6CisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6ZGVjb2RlUmVjb3JkTWV0YURhdGEpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FjaGU6OmVuY29kZVJlY29yZE1ldGFEYXRhKToKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3VicmVzb3VyY2VzRW50cnk6OmVuY29kZUFzU3Rv
cmFnZVJlY29yZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3VicmVz
b3VyY2VzRW50cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQpOgorICAgICAgICAqIFBsYXRmb3JtL0lQ
Qy9Bcmd1bWVudENvZGVyLmg6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJz
LmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxDU3RyaW5nPjo6ZW5jb2RlKToKKyAg
ICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxDU3RyaW5nPjo6ZGVjb2RlKToKKyAgICAgICAgKElQ
Qzo6QXJndW1lbnRDb2RlcjxTdHJpbmc+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpkZWNvZGVT
dHJpbmdUZXh0KToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxTSEExOjpEaWdlc3Q+Ojpl
bmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29k
ZSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgIChJ
UEM6OlNpbXBsZUFyZ3VtZW50Q29kZXI6OmVuY29kZSk6CisgICAgICAgIChJUEM6OlNpbXBsZUFy
Z3VtZW50Q29kZXI6OmRlY29kZSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FycmF5UmVmZXJl
bmNlLmg6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0RlY29kZXIuY3BwOgorICAgICAgICAoSVBD
OjpEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAqIFBsYXRmb3JtL0lQ
Qy9EZWNvZGVyLmg6CisgICAgICAgIChJUEM6OkRlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0
YSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0VuY29kZXIuY3BwOgorICAgICAgICAoSVBDOjpF
bmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9F
bmNvZGVyLmg6CisgICAgICAgICogUGxhdGZvcm0vSVBDL1NoYXJlZEJ1ZmZlckNvcHkuY3BwOgor
ICAgICAgICAoSVBDOjpTaGFyZWRCdWZmZXJDb3B5OjplbmNvZGUgY29uc3QpOgorICAgICAgICAq
IFBsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uRW5jb2Rlci5oOgorICAgICAgICAqIFNoYXJl
ZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoSVBDOjplbmNvZGVTaGFyZWRC
dWZmZXIpOgorICAgICAgICAoSVBDOjpkZWNvZGVTaGFyZWRCdWZmZXIpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuY3BwOgorICAgICAgICAoQVBJOjpl
bmNvZGVDb250ZW50UnVsZUxpc3RNZXRhRGF0YSk6CisgICAgICAgIChBUEk6OmdldERhdGEpOgor
ICAgICAgICAoQVBJOjpkZWNvZGVDb250ZW50UnVsZUxpc3RNZXRhRGF0YSk6CisgICAgICAgIChB
UEk6OndyaXRlRGF0YVRvRmlsZSk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9MZWdhY3lTZXNz
aW9uU3RhdGVDb2RpbmcuY3BwOgorICAgICAgICAoV2ViS2l0OjpIaXN0b3J5RW50cnlEYXRhRW5j
b2Rlcjo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFFbmNv
ZGVyOjplbmNvZGVBcml0aG1ldGljVHlwZSk6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRy
eURhdGFFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAoV2ViS2l0OjpI
aXN0b3J5RW50cnlEYXRhRGVjb2Rlcjo6b3BlcmF0b3I+Pik6CisgICAgICAgIChXZWJLaXQ6Okhp
c3RvcnlFbnRyeURhdGFEZWNvZGVyOjpkZWNvZGVBcml0aG1ldGljVHlwZSk6CisgICAgICAgIChX
ZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6ZW5jb2RlVHlwZWRBcnJheSk6CisKIDIwMjEtMDYtMTEg
IFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCwgcmV2ZXJ0aW5nIHIyNzg3NTQuCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXIuY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZh
dGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMyw3ICsz
MjMsNyBAQCB2b2lkIFByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlcjo6ZmlyCiAgICAgICAg
IGNyeXB0by0+YWRkQnl0ZXMocHVibGljS2V5RGF0YS0+ZGF0YSgpLCBwdWJsaWNLZXlEYXRhLT5z
aXplKCkpOwogICAgICAgICBhdXRvIHB1YmxpY0tleURhdGFIYXNoID0gY3J5cHRvLT5jb21wdXRl
SGFzaCgpOwogCi0gICAgICAgIGF1dG8ga2V5SUQgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhw
dWJsaWNLZXlEYXRhSGFzaC5kYXRhKCksIHB1YmxpY0tleURhdGFIYXNoLnNpemUoKSk7CisgICAg
ICAgIGF1dG8ga2V5SUQgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhwdWJsaWNLZXlEYXRhSGFz
aCk7CiAgICAgICAgIGlmIChrZXlJRCAhPSBhdHRyaWJ1dGlvbi5zb3VyY2VVbmxpbmthYmxlVG9r
ZW4oKS0+a2V5SURCYXNlNjRVUkwpCiAgICAgICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVT
dG9yYWdlRW5naW5lQ2FjaGUuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTY1LDcgKzU2NSw3IEBAIFN0b3JhZ2U6OlJlY29yZCBDYWNoZTo6ZW5jb2Rl
KGNvbnN0IFJlY28KIAogICAgIGVuY29kZXIuZW5jb2RlQ2hlY2tzdW0oKTsKIAotICAgIERhdGEg
aGVhZGVyKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICBEYXRh
IGhlYWRlcihlbmNvZGVyLmJ1ZmZlcigpKTsKICAgICBEYXRhIGJvZHk7CiAgICAgV1RGOjpzd2l0
Y2hPbihyZWNvcmQucmVzcG9uc2VCb2R5LCBbXShjb25zdCBSZWY8V2ViQ29yZTo6Rm9ybURhdGE+
JiBmb3JtRGF0YSkgewogICAgICAgICAvLyBGSVhNRTogU3RvcmUgZm9ybSBkYXRhIGJvZHkuCkBA
IC02MjgsOSArNjI4LDkgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RE9NQ2FjaGVF
bgogICAgIH19OwogfQogCi1zdGQ6Om9wdGlvbmFsPENhY2hlOjpEZWNvZGVkUmVjb3JkPiBDYWNo
ZTo6ZGVjb2RlUmVjb3JkSGVhZGVyKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYgc3RvcmFnZSkKK3N0
ZDo6b3B0aW9uYWw8Q2FjaGU6OkRlY29kZWRSZWNvcmQ+IENhY2hlOjpkZWNvZGVSZWNvcmRIZWFk
ZXIoY29uc3QgU3RvcmFnZTo6UmVjb3JkJiBzdG9yYWdlRW50cnkpCiB7Ci0gICAgV1RGOjpQZXJz
aXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKHN0b3JhZ2UuaGVhZGVyLmRhdGEoKSwgc3RvcmFnZS5o
ZWFkZXIuc2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyBz
dG9yYWdlRW50cnkuaGVhZGVyIH07CiAKICAgICBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gaW5zZXJ0
aW9uVGltZTsKICAgICBkZWNvZGVyID4+IGluc2VydGlvblRpbWU7CkBAIC02NTMsMTUgKzY1Mywx
NSBAQCBzdGQ6Om9wdGlvbmFsPENhY2hlOjpEZWNvZGVkUmVjb3JkPiBDYWNoCiAgICAgfX07CiB9
CiAKLXN0ZDo6b3B0aW9uYWw8UmVjb3JkPiBDYWNoZTo6ZGVjb2RlKGNvbnN0IFN0b3JhZ2U6OlJl
Y29yZCYgc3RvcmFnZSkKK3N0ZDo6b3B0aW9uYWw8UmVjb3JkPiBDYWNoZTo6ZGVjb2RlKGNvbnN0
IFN0b3JhZ2U6OlJlY29yZCYgc3RvcmFnZUVudHJ5KQogewotICAgIGF1dG8gcmVzdWx0ID0gZGVj
b2RlUmVjb3JkSGVhZGVyKHN0b3JhZ2UpOworICAgIGF1dG8gcmVzdWx0ID0gZGVjb2RlUmVjb3Jk
SGVhZGVyKHN0b3JhZ2VFbnRyeSk7CiAKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKIAogICAgIGF1dG8gcmVjb3JkID0gV1RGTW92ZShyZXN1bHQtPnJlY29y
ZCk7Ci0gICAgcmVjb3JkLnJlc3BvbnNlQm9keSA9IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3Jl
YXRlKHN0b3JhZ2UuYm9keS5kYXRhKCksIHN0b3JhZ2UuYm9keS5zaXplKCkpOworICAgIHJlY29y
ZC5yZXNwb25zZUJvZHkgPSBXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZShzdG9yYWdlRW50
cnkuYm9keSk7CiAKICAgICByZXR1cm4gcmVjb3JkOwogfQpJbmRleDogU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5n
aW5lQ2FjaGVzLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDUsMTQgKzEwNSwxNCBAQCB2b2lkIENhY2hlczo6c3RvcmVPcmlnaW4oQ29tcGxldGlv
bkNhbGxiCiAgICAgZW5jb2RlciA8PCBtX29yaWdpbi5jbGllbnRPcmlnaW4ucHJvdG9jb2w7CiAg
ICAgZW5jb2RlciA8PCBtX29yaWdpbi5jbGllbnRPcmlnaW4uaG9zdDsKICAgICBlbmNvZGVyIDw8
IG1fb3JpZ2luLmNsaWVudE9yaWdpbi5wb3J0OwotICAgIG1fZW5naW5lLT53cml0ZUZpbGUoY2Fj
aGVzT3JpZ2luRmlsZW5hbWUobV9yb290UGF0aCksIERhdGEgeyBlbmNvZGVyLmJ1ZmZlcigpLCBl
bmNvZGVyLmJ1ZmZlclNpemUoKSB9LCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoc3RkOjpvcHRp
b25hbDxFcnJvcj4mJiBlcnJvcikgbXV0YWJsZSB7CisgICAgbV9lbmdpbmUtPndyaXRlRmlsZShj
YWNoZXNPcmlnaW5GaWxlbmFtZShtX3Jvb3RQYXRoKSwgRGF0YSB7IGVuY29kZXIuYnVmZmVyKCkg
fSwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKHN0ZDo6b3B0aW9uYWw8RXJyb3I+JiYgZXJyb3Ip
IG11dGFibGUgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGVycm9yKSk7CiAg
ICAgfSk7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiBDYWNoZXM6
OnJlYWRPcmlnaW4oY29uc3QgRGF0YSYgZGF0YSkKIHsKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpE
ZWNvZGVyIGRlY29kZXIoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNp
c3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyBkYXRhIH07CiAKICAgICBzdGQ6Om9wdGlvbmFsPFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gdG9wT3JpZ2luOwogICAgIGRlY29kZXIgPj4gdG9w
T3JpZ2luOwpAQCAtNDA0LDEyICs0MDQsMTMgQEAgc3RhdGljIGlubGluZSBEYXRhIGVuY29kZUNh
Y2hlTmFtZXMoY29ucwogICAgICAgICBlbmNvZGVyIDw8IGNhY2hlLnVuaXF1ZU5hbWUoKTsKICAg
ICB9CiAKLSAgICByZXR1cm4gRGF0YSB7IGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVy
U2l6ZSgpIH07CisgICAgcmV0dXJuIERhdGEgeyBlbmNvZGVyLmJ1ZmZlcigpIH07CiB9CiAKIHN0
YXRpYyBpbmxpbmUgRXhwZWN0ZWQ8VmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+LCBF
cnJvcj4gZGVjb2RlQ2FjaGVzTmFtZXMoY29uc3QgRGF0YSYgZGF0YSkKIHsKLSAgICBXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAg
ICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyBkYXRhIH07CisKICAgICBzdGQ6
Om9wdGlvbmFsPHVpbnQ2NF90PiBjb3VudDsKICAgICBkZWNvZGVyID4+IGNvdW50OwogICAgIGlm
ICghY291bnQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiBEYXRh
IERhdGE6Om1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpIGNvbnN0CiB7CiAgICAgRmlsZVN5
c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZTsKLSAgICBhdXRvIGFwcGx5RGF0YSA9IFsm
XShjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYgYXBwbGllcikg
eyBhcHBseShhcHBsaWVyKTsgfTsKKyAgICBhdXRvIGFwcGx5RGF0YSA9IFsmXShjb25zdCBGdW5j
dGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+JiBhcHBsaWVyKSB7IGFwcGx5KGFwcGxp
ZXIpOyB9OwogICAgIGF1dG8gbWFwcGVkRmlsZSA9IEZpbGVTeXN0ZW06Om1hcFRvRmlsZShwYXRo
LCBzaXplKCksIFdURk1vdmUoYXBwbHlEYXRhKSwgJmhhbmRsZSk7CiAgICAgaWYgKCFtYXBwZWRG
aWxlKQogICAgICAgICByZXR1cm4geyB9OwpAQCAtODYsOSArODYsOSBAQCBEYXRhIGFkb3B0QW5k
TWFwRmlsZShGaWxlU3lzdGVtOjpQbGF0Zm9yCiBTSEExOjpEaWdlc3QgY29tcHV0ZVNIQTEoY29u
c3QgRGF0YSYgZGF0YSwgY29uc3QgU2FsdCYgc2FsdCkKIHsKICAgICBTSEExIHNoYTE7Ci0gICAg
c2hhMS5hZGRCeXRlcyhzYWx0LmRhdGEoKSwgc2FsdC5zaXplKCkpOwotICAgIGRhdGEuYXBwbHko
WyZzaGExXShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgewotICAgICAgICBzaGEx
LmFkZEJ5dGVzKGRhdGEsIHNpemUpOworICAgIHNoYTEuYWRkQnl0ZXMoc2FsdCk7CisgICAgZGF0
YS5hcHBseShbJnNoYTFdKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhKSB7CisgICAgICAgIHNo
YTEuYWRkQnl0ZXMoZGF0YSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0pOwogCkluZGV4
OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZURhdGEuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4
LDcgQEAKICNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlv
bkRpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDx3dGYvU0hBMS5oPgorI2luY2x1ZGUgPHd0Zi9TcGFu
Lmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTUyLDggKzUzLDE0IEBAIG5hbWVzcGFjZSBOZXR3b3Jr
Q2FjaGUgewogCiBjbGFzcyBEYXRhIHsKIHB1YmxpYzoKKyAgICB1c2luZyB2YWx1ZV90eXBlID0g
dWludDhfdDsKKwogICAgIERhdGEoKSB7IH0KICAgICBEYXRhKGNvbnN0IHVpbnQ4X3QqLCBzaXpl
X3QpOworICAgIERhdGEoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpCisgICAgICAgIDogRGF0
YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6
ZSgpKQorICAgIHsKKyAgICB9CiAKICAgICB+RGF0YSgpIHsgfQogCkBAIC03NCwxMiArODEsMTMg
QEAgcHVibGljOgogCiAgICAgY29uc3QgdWludDhfdCogZGF0YSgpIGNvbnN0OwogICAgIHNpemVf
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKICAgICBib29sIGlzTWFwKCkgY29u
c3QgeyByZXR1cm4gbV9pc01hcDsgfQogICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHRyeUNyZWF0
ZVNoYXJlZE1lbW9yeSgpIGNvbnN0OwogCiAgICAgRGF0YSBzdWJyYW5nZShzaXplX3Qgb2Zmc2V0
LCBzaXplX3QpIGNvbnN0OwogCi0gICAgYm9vbCBhcHBseShjb25zdCBGdW5jdGlvbjxib29sIChj
b25zdCB1aW50OF90Kiwgc2l6ZV90KT4mKSBjb25zdDsKKyAgICBib29sIGFwcGx5KGNvbnN0IEZ1
bmN0aW9uPGJvb2wgKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+JikgY29uc3Q7CiAKICAgICBEYXRh
IG1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURh
dGFDb2NvYS5tbQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTY5
LDEyICs2OSwxMiBAQCBib29sIERhdGE6OmlzTnVsbCgpIGNvbnN0CiAgICAgcmV0dXJuICFtX2Rp
c3BhdGNoRGF0YTsKIH0KIAotYm9vbCBEYXRhOjphcHBseShjb25zdCBGdW5jdGlvbjxib29sIChj
b25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIGFwcGxpZXIpIGNvbnN0Citib29sIERhdGE6OmFwcGx5
KGNvbnN0IEZ1bmN0aW9uPGJvb2wgKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+JiBhcHBsaWVyKSBj
b25zdAogewogICAgIGlmICghbV9zaXplKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0
dXJuIGRpc3BhdGNoX2RhdGFfYXBwbHkobV9kaXNwYXRjaERhdGEuZ2V0KCksIFsmYXBwbGllcl0o
ZGlzcGF0Y2hfZGF0YV90LCBzaXplX3QsIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKSB7
Ci0gICAgICAgIHJldHVybiBhcHBsaWVyKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRh
KSwgc2l6ZSk7CisgICAgICAgIHJldHVybiBhcHBsaWVyKFNwYW4geyBzdGF0aWNfY2FzdDxjb25z
dCBzdGQ6OmJ5dGUqPihkYXRhKSwgc2l6ZSB9KTsKICAgICB9KTsKIH0KIApAQCAtOTQsMTQgKzk0
LDExIEBAIERhdGEgY29uY2F0ZW5hdGUoY29uc3QgRGF0YSYgYSwgY29uc3QgRGEKIAogRGF0YSBE
YXRhOjphZG9wdE1hcChGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIG1hcHBlZEZpbGUsIEZp
bGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmZCkKIHsKLSAgICBzaXplX3Qgc2l6ZSA9IG1h
cHBlZEZpbGUuc2l6ZSgpOwotICAgIHZvaWQqIG1hcCA9IG1hcHBlZEZpbGUubGVha0hhbmRsZSgp
OwotICAgIEFTU0VSVChtYXApOwotICAgIEFTU0VSVChtYXAgIT0gTUFQX0ZBSUxFRCk7CisgICAg
YXV0byBtYXAgPSBtYXBwZWRGaWxlLmxlYWtIYW5kbGUoKTsKKyAgICBBU1NFUlQobWFwLmRhdGEo
KSk7CisgICAgQVNTRVJUKG1hcC5kYXRhKCkgIT0gTUFQX0ZBSUxFRCk7CiAgICAgRmlsZVN5c3Rl
bTo6Y2xvc2VGaWxlKGZkKTsKLSAgICBhdXRvIGJvZHlNYXAgPSBhZG9wdE9TT2JqZWN0KGRpc3Bh
dGNoX2RhdGFfY3JlYXRlKG1hcCwgc2l6ZSwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQ
QVRDSF9RVUVVRV9QUklPUklUWV9ERUZBVUxULCAwKSwgW21hcCwgc2l6ZV0gewotICAgICAgICBt
dW5tYXAobWFwLCBzaXplKTsKLSAgICB9KSk7CisgICAgYXV0byBib2R5TWFwID0gYWRvcHRPU09i
amVjdChkaXNwYXRjaF9kYXRhX2NyZWF0ZShtYXAuZGF0YSgpLCBtYXAuc2l6ZSgpLCBkaXNwYXRj
aF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCBE
SVNQQVRDSF9EQVRBX0RFU1RSVUNUT1JfTVVOTUFQKSk7CiAgICAgcmV0dXJuIHsgV1RGTW92ZShi
b2R5TWFwKSwgRGF0YTo6QmFja2luZzo6TWFwIH07CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUdMaWIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUdM
aWIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZURhdGFHTGliLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTQg
KzczLDE0IEBAIGJvb2wgRGF0YTo6aXNOdWxsKCkgY29uc3QKICAgICByZXR1cm4gIW1fYnVmZmVy
OwogfQogCi1ib29sIERhdGE6OmFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhf
dCosIHNpemVfdCk+JiBhcHBsaWVyKSBjb25zdAorYm9vbCBEYXRhOjphcHBseShjb25zdCBGdW5j
dGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+JiBhcHBsaWVyKSBjb25zdAogewogICAg
IGlmICghbV9zaXplKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBnc2l6ZSBsZW5ndGg7
CiAgICAgY29uc3QgYXV0byogZGF0YSA9IGdfYnl0ZXNfZ2V0X2RhdGEobV9idWZmZXIuZ2V0KCks
ICZsZW5ndGgpOwotICAgIHJldHVybiBhcHBsaWVyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KGRhdGEpLCBsZW5ndGgpOworICAgIHJldHVybiBhcHBsaWVyKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSksIGxlbmd0aCk7CiB9CiAKIERhdGEgRGF0YTo6c3Vi
cmFuZ2Uoc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpIGNvbnN0CkBAIC0xMTUsMTIgKzExNSwx
MSBAQCBzdHJ1Y3QgTWFwV3JhcHBlciB7CiAKICAgICB+TWFwV3JhcHBlcigpCiAgICAgewotICAg
ICAgICBtdW5tYXAobWFwLCBzaXplKTsKKyAgICAgICAgRmlsZVN5c3RlbTo6dW5tYXBWaWV3T2ZG
aWxlKG1hcCk7CiAgICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShmaWxlRGVzY3JpcHRvcik7
CiAgICAgfQogCi0gICAgdm9pZCogbWFwOwotICAgIHNpemVfdCBzaXplOworICAgIFNwYW48c3Rk
OjpieXRlPiBtYXA7CiAgICAgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZpbGVEZXNj
cmlwdG9yOwogfTsKIApAQCAtMTMxLDEyICsxMzAsMTEgQEAgc3RhdGljIHZvaWQgZGVsZXRlTWFw
V3JhcHBlcihNYXBXcmFwcGVyKgogCiBEYXRhIERhdGE6OmFkb3B0TWFwKEZpbGVTeXN0ZW06Ok1h
cHBlZEZpbGVEYXRhJiYgbWFwcGVkRmlsZSwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxl
IGZkKQogewotICAgIHNpemVfdCBzaXplID0gbWFwcGVkRmlsZS5zaXplKCk7Ci0gICAgdm9pZCog
bWFwID0gbWFwcGVkRmlsZS5sZWFrSGFuZGxlKCk7Ci0gICAgQVNTRVJUKG1hcCk7Ci0gICAgQVNT
RVJUKG1hcCAhPSBNQVBfRkFJTEVEKTsKLSAgICBNYXBXcmFwcGVyKiB3cmFwcGVyID0gbmV3IE1h
cFdyYXBwZXIgeyBtYXAsIHNpemUsIGZkIH07Ci0gICAgcmV0dXJuIHsgYWRvcHRHUmVmKGdfYnl0
ZXNfbmV3X3dpdGhfZnJlZV9mdW5jKG1hcCwgc2l6ZSwgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJv
eU5vdGlmeT4oZGVsZXRlTWFwV3JhcHBlciksIHdyYXBwZXIpKSwgZmQgfTsKKyAgICBhdXRvIG1h
cCA9IG1hcHBlZEZpbGUubGVha0hhbmRsZSgpOworICAgIEFTU0VSVChtYXAuZGF0YSgpKTsKKyAg
ICBBU1NFUlQobWFwLmRhdGEoKSAhPSBNQVBfRkFJTEVEKTsKKyAgICBNYXBXcmFwcGVyKiB3cmFw
cGVyID0gbmV3IE1hcFdyYXBwZXIgeyBtYXAsIGZkIH07CisgICAgcmV0dXJuIHsgYWRvcHRHUmVm
KGdfYnl0ZXNfbmV3X3dpdGhfZnJlZV9mdW5jKG1hcC5kYXRhKCksIG1hcC5zaXplKCksIHJlaW50
ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGRlbGV0ZU1hcFdyYXBwZXIpLCB3cmFwcGVyKSks
IGZkIH07CiB9CiAKIFJlZlB0cjxTaGFyZWRNZW1vcnk+IERhdGE6OnRyeUNyZWF0ZVNoYXJlZE1l
bW9yeSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZUVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk5LDEwICs5OSwxMCBAQCBTdG9yYWdlOjpSZWNvcmQgRW50cnk6
OmVuY29kZUFzU3RvcmFnZVJlCiAgICAgCiAgICAgZW5jb2Rlci5lbmNvZGVDaGVja3N1bSgpOwog
Ci0gICAgRGF0YSBoZWFkZXIoZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkp
OworICAgIERhdGEgaGVhZGVyIHsgZW5jb2Rlci5idWZmZXIoKSB9OwogICAgIERhdGEgYm9keTsK
ICAgICBpZiAobV9idWZmZXIpCi0gICAgICAgIGJvZHkgPSB7IG1fYnVmZmVyLT5kYXRhKCksIG1f
YnVmZmVyLT5zaXplKCkgfTsKKyAgICAgICAgYm9keSA9IHsgbV9idWZmZXItPmJ5dGVzKCkgfTsK
IAogICAgIHJldHVybiB7IG1fa2V5LCBtX3RpbWVTdGFtcCwgaGVhZGVyLCBib2R5LCB7IH0gfTsK
IH0KQEAgLTExMSw3ICsxMTEsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IEVudHJ5OjpkZWNv
ZGVTdG9yCiB7CiAgICAgYXV0byBlbnRyeSA9IG1ha2VVbmlxdWU8RW50cnk+KHN0b3JhZ2VFbnRy
eSk7CiAKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoc3RvcmFnZUVudHJ5
LmhlYWRlci5kYXRhKCksIHN0b3JhZ2VFbnRyeS5oZWFkZXIuc2l6ZSgpKTsKKyAgICBXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyBzdG9yYWdlRW50cnkuaGVhZGVyIH07CiAgICAg
V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKICAgICBpZiAoIVdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2U6OmRlY29kZShkZWNvZGVyLCByZXNwb25zZSkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwpAQCAtMTkxLDcgKzE5MSw3IEBAIHZvaWQgRW50cnk6OmluaXRpYWxpemVCdWZm
ZXJGcm9tU3RvcmFnZVIKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKLSAgICBt
X2J1ZmZlciA9IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKG1fc291cmNlU3RvcmFnZVJl
Y29yZC5ib2R5LmRhdGEoKSwgbV9zb3VyY2VTdG9yYWdlUmVjb3JkLmJvZHkuc2l6ZSgpKTsKKyAg
ICBtX2J1ZmZlciA9IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKG1fc291cmNlU3RvcmFn
ZVJlY29yZC5ib2R5KTsKIH0KIAogV2ViQ29yZTo6U2hhcmVkQnVmZmVyKiBFbnRyeTo6YnVmZmVy
KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlS2V5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZUtleS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODgsMTMgKzg4LDEzIEBAIHN0YXRpYyB2b2lkIGhhc2hTdHJpbmcoU0hBMSYgc2hh
MSwgY29uc3QKIAogICAgIGlmIChzdHJpbmcuaXM4Qml0KCkgJiYgc3RyaW5nLmlzQWxsQVNDSUko
KSkgewogICAgICAgICBjb25zdCB1aW50OF90IG51bGxCeXRlID0gMDsKLSAgICAgICAgc2hhMS5h
ZGRCeXRlcyhzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpKTsKLSAgICAgICAg
c2hhMS5hZGRCeXRlcygmbnVsbEJ5dGUsIDEpOworICAgICAgICBzaGExLmFkZEJ5dGVzKFNwYW4g
eyBzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpIH0pOworICAgICAgICBzaGEx
LmFkZEJ5dGVzKFNwYW4geyAmbnVsbEJ5dGUsIDEgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgYXV0byBjU3RyaW5nID0gc3RyaW5nLnV0ZjgoKTsKICAgICAvLyBJbmNsdWRlIHRlcm1p
bmF0aW5nIG51bGwgYnl0ZS4KLSAgICBzaGExLmFkZEJ5dGVzKGNTdHJpbmcuZGF0YUFzVUludDhQ
dHIoKSwgY1N0cmluZy5sZW5ndGgoKSArIDEpOworICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IGNT
dHJpbmcuZGF0YUFzVUludDhQdHIoKSwgY1N0cmluZy5sZW5ndGgoKSArIDEgfSk7CiB9CiAKIEtl
eTo6SGFzaFR5cGUgS2V5Ojpjb21wdXRlSGFzaChjb25zdCBTYWx0JiBzYWx0KSBjb25zdApAQCAt
MTAyLDcgKzEwMiw3IEBAIEtleTo6SGFzaFR5cGUgS2V5Ojpjb21wdXRlSGFzaChjb25zdCBTYWwK
ICAgICAvLyBXZSBkb24ndCByZWFsbHkgbmVlZCBhIGNyeXB0b2dyYXBoaWMgaGFzaC4gVGhlIGtl
eSBpcyBhbHdheXMgdmVyaWZpZWQgYWdhaW5zdCB0aGUgZW50cnkgaGVhZGVyLgogICAgIC8vIFNI
QTEganVzdCBoYXBwZW5zIHRvIGJlIHN1aXRhYmx5IHNpemVkLCBmYXN0IGFuZCBhdmFpbGFibGUu
CiAgICAgU0hBMSBzaGExOwotICAgIHNoYTEuYWRkQnl0ZXMoc2FsdC5kYXRhKCksIHNhbHQuc2l6
ZSgpKTsKKyAgICBzaGExLmFkZEJ5dGVzKHNhbHQpOwogCiAgICAgaGFzaFN0cmluZyhzaGExLCBt
X3BhcnRpdGlvbik7CiAgICAgaGFzaFN0cmluZyhzaGExLCBtX3R5cGUpOwpAQCAtMTE3LDcgKzEx
Nyw3IEBAIEtleTo6SGFzaFR5cGUgS2V5Ojpjb21wdXRlSGFzaChjb25zdCBTYWwKIEtleTo6SGFz
aFR5cGUgS2V5Ojpjb21wdXRlUGFydGl0aW9uSGFzaChjb25zdCBTYWx0JiBzYWx0KSBjb25zdAog
ewogICAgIFNIQTEgc2hhMTsKLSAgICBzaGExLmFkZEJ5dGVzKHNhbHQuZGF0YSgpLCBzYWx0LnNp
emUoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhzYWx0KTsKIAogICAgIGhhc2hTdHJpbmcoc2hhMSwg
bV9wYXJ0aXRpb24pOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3Rv
cmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1NCw4ICs0NTQsOCBAQCBzdHJ1Y3QgUmVjb3Jk
TWV0YURhdGEgewogc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZVJlY29yZE1l
dGFEYXRhKFJlY29yZE1ldGFEYXRhJiBtZXRhRGF0YSwgY29uc3QgRGF0YSYgZmlsZURhdGEpCiB7
CiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgZmlsZURhdGEuYXBwbHkoWyZtZXRhRGF0
YSwgJnN1Y2Nlc3NdKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gICAgICAg
IFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihkYXRhLCBzaXplKTsKKyAgICBmaWxl
RGF0YS5hcHBseShbJm1ldGFEYXRhLCAmc3VjY2Vzc10oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRh
dGEpIHsKKyAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyIHsgZGF0YSB9
OwogICAgICAgICAKICAgICAgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gY2FjaGVTdG9yYWdl
VmVyc2lvbjsKICAgICAgICAgZGVjb2RlciA+PiBjYWNoZVN0b3JhZ2VWZXJzaW9uOwpAQCAtNTg2
LDcgKzU4Niw3IEBAIHN0YXRpYyBEYXRhIGVuY29kZVJlY29yZE1ldGFEYXRhKGNvbnN0IFIKIAog
ICAgIGVuY29kZXIuZW5jb2RlQ2hlY2tzdW0oKTsKIAotICAgIHJldHVybiBEYXRhKGVuY29kZXIu
YnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICByZXR1cm4geyBlbmNvZGVyLmJ1
ZmZlcigpIH07CiB9CiAKIHN0ZDo6b3B0aW9uYWw8QmxvYlN0b3JhZ2U6OkJsb2I+IFN0b3JhZ2U6
OnN0b3JlQm9keUFzQmxvYihXcml0ZU9wZXJhdGlvbiYgd3JpdGVPcGVyYXRpb24pCkluZGV4OiBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNl
c0VudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNv
dXJjZXNFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMywxNCArMTIzLDE0IEBAIFN0b3Jh
Z2U6OlJlY29yZCBTdWJyZXNvdXJjZXNFbnRyeTo6ZW5jb2QKIAogICAgIGVuY29kZXIuZW5jb2Rl
Q2hlY2tzdW0oKTsKIAotICAgIHJldHVybiB7IG1fa2V5LCBtX3RpbWVTdGFtcCwgeyBlbmNvZGVy
LmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSB9LCB7IH0sIHsgfX07CisgICAgcmV0dXJu
IHsgbV9rZXksIG1fdGltZVN0YW1wLCB7IGVuY29kZXIuYnVmZmVyKCkgfSwgeyB9LCB7IH19Owog
fQogCiBzdGQ6OnVuaXF1ZV9wdHI8U3VicmVzb3VyY2VzRW50cnk+IFN1YnJlc291cmNlc0VudHJ5
OjpkZWNvZGVTdG9yYWdlUmVjb3JkKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYgc3RvcmFnZUVudHJ5
KQogewogICAgIGF1dG8gZW50cnkgPSBtYWtlVW5pcXVlPFN1YnJlc291cmNlc0VudHJ5PihzdG9y
YWdlRW50cnkpOwogCi0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKHN0b3Jh
Z2VFbnRyeS5oZWFkZXIuZGF0YSgpLCBzdG9yYWdlRW50cnkuaGVhZGVyLnNpemUoKSk7CisgICAg
V1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyIHsgc3RvcmFnZUVudHJ5LmhlYWRlciB9
OwogICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFN1YnJlc291cmNlSW5mbz4+IHN1YnJlc291cmNl
czsKICAgICBkZWNvZGVyID4+IHN1YnJlc291cmNlczsKICAgICBpZiAoIXN1YnJlc291cmNlcykK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVyLmgJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNzksMTMgKzc5LDEzIEBAIHN0cnVjdCBBcmd1bWVudENvZGVy
PFQsIHR5cGVuYW1lIHN0ZDo6ZW4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgogICAg
IHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBUIHZhbHVlKQogICAgIHsKLSAg
ICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OF90Kj4oJnZhbHVlKSwgc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKKyAgICAgICAgZW5j
b2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZ2YWx1ZSwgMSB9KTsKICAgICB9CiAK
ICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxUPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAg
ICB7CiAgICAgICAgIFQgcmVzdWx0OwotICAgICAgICBpZiAoZGVjb2Rlci5kZWNvZGVGaXhlZExl
bmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnJlc3VsdCksIHNpemVvZihUKSwg
YWxpZ25vZihUKSkpCisgICAgICAgIGlmIChkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShT
cGFuIHsgJnJlc3VsdCwgMSB9KSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvQXJndW1lbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04Miw3ICs4Miw3IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxDU3RyaW5nPjo6ZW5jb2RlKEVuY28K
IAogICAgIHVpbnQzMl90IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKICAgICBlbmNvZGVyIDw8
IGxlbmd0aDsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShzdHJpbmcuZGF0YUFz
VUludDhQdHIoKSwgbGVuZ3RoLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0
YShzdHJpbmcuYnl0ZXMoKSk7CiB9CiAKIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIEFyZ3VtZW50
Q29kZXI8Q1N0cmluZz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBDU3RyaW5nJiByZXN1bHQp
CkBAIC0xMDMsNyArMTAzLDcgQEAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgQXJndW1lbnRDb2Rl
cjxDUwogCiAgICAgY2hhciogYnVmZmVyOwogICAgIENTdHJpbmcgc3RyaW5nID0gQ1N0cmluZzo6
bmV3VW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIpLCBsZW5n
dGgsIDEpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IGJ1
ZmZlciwgbGVuZ3RoIH0pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXN1bHQgPSBz
dHJpbmc7CkBAIC0xMjMsMTEgKzEyMyw3IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxTdHJpbmc+Ojpl
bmNvZGUoRW5jb2QKICAgICBib29sIGlzOEJpdCA9IHN0cmluZy5pczhCaXQoKTsKIAogICAgIGVu
Y29kZXIgPDwgbGVuZ3RoIDw8IGlzOEJpdDsKLQotICAgIGlmIChpczhCaXQpCi0gICAgICAgIGVu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgg
KiBzaXplb2YoTENoYXIpLCBhbGlnbm9mKExDaGFyKSk7Ci0gICAgZWxzZQotICAgICAgICBlbmNv
ZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihzdHJpbmcuY2hhcmFjdGVyczE2KCkpLCBsZW5ndGggKiBzaXplb2YoVUNoYXIpLCBhbGlnbm9m
KFVDaGFyKSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RyaW5nLmJ5dGVz
KCkpOwogfQogdGVtcGxhdGUKIHZvaWQgQXJndW1lbnRDb2RlcjxTdHJpbmc+OjplbmNvZGU8RW5j
b2Rlcj4oRW5jb2RlciYsIGNvbnN0IFN0cmluZyYpOwpAQCAtMTQzLDcgKzEzOSw3IEBAIHN0YXRp
YyBpbmxpbmUgc3RkOjpvcHRpb25hbDxTdHJpbmc+IGRlY28KICAgICAKICAgICBDaGFyYWN0ZXJU
eXBlKiBidWZmZXI7CiAgICAgU3RyaW5nIHN0cmluZyA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFs
aXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3Ro
RGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIpLCBsZW5ndGggKiBzaXplb2Yo
Q2hhcmFjdGVyVHlwZSksIGFsaWdub2YoQ2hhcmFjdGVyVHlwZSkpKQorICAgIGlmICghZGVjb2Rl
ci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IGJ1ZmZlciwgbGVuZ3RoIH0pKQogICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIAogICAgIHJldHVybiBzdHJpbmc7CkBAIC0xODEs
MTIgKzE3NywxMiBAQCBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBBcmd1bWVudENvZGVyPFN0CiAK
IHZvaWQgQXJndW1lbnRDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
ciwgY29uc3QgU0hBMTo6RGlnZXN0JiBkaWdlc3QpCiB7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhl
ZExlbmd0aERhdGEoZGlnZXN0LmRhdGEoKSwgc2l6ZW9mKGRpZ2VzdCksIDEpOworICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGRpZ2VzdCk7CiB9CiAKIFdBUk5fVU5VU0VEX1JFVFVS
TiBib29sIEFyZ3VtZW50Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIsIFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQogewotICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZp
eGVkTGVuZ3RoRGF0YShkaWdlc3QuZGF0YSgpLCBzaXplb2YoZGlnZXN0KSwgMSk7CisgICAgcmV0
dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGRpZ2VzdCk7CiB9CiAKICNpZiBIQVZF
KEFVRElUX1RPS0VOKQpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRD
b2RlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVu
dENvZGVycy5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQ
Qy9Bcmd1bWVudENvZGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMiArNDUsMTIgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFNpbXBsZUFyZ3VtZQogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEVuY29kZXI+CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFQmIHQpCiAgICAgewotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmdCksIHNpemVvZihUKSwgYWxpZ25vZihU
KSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmdCwgMSB9
KTsKICAgICB9CiAKICAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERl
Y29kZXImIGRlY29kZXIsIFQmIHQpCiAgICAgewotICAgICAgICByZXR1cm4gZGVjb2Rlci5kZWNv
ZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnQpLCBzaXplb2Yo
VCksIGFsaWdub2YoVCkpOworICAgICAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0
aERhdGEoU3BhbiB7ICZ0LCAxIH0pOwogICAgIH0KIH07CiAKQEAgLTYxLDEzICs2MSwxNCBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgRXh0ZW50PiBzdHJ1CiAgICAgewogICAgICAgICBp
ZiAoIUV4dGVudCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVG
aXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYXJyYXlSZWZl
cmVuY2UuZGF0YSgpKSwgYXJyYXlSZWZlcmVuY2Uuc2l6ZSgpICogc2l6ZW9mKFQpLCBhbGlnbm9m
KFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IGFycmF5
UmVmZXJlbmNlLmRhdGEoKSwgYXJyYXlSZWZlcmVuY2Uuc2l6ZSgpIH0pOwogICAgIH0KICAgICBz
dGF0aWMgc3RkOjpvcHRpb25hbDxBcnJheVJlZmVyZW5jZVR5cGU+IGRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQogICAgIHsKICAgICAgICAgaWYgKCFFeHRlbnQpCiAgICAgICAgICAgICByZXR1cm4g
QXJyYXlSZWZlcmVuY2VUeXBlKCk7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEgPSBkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoUmVmZXJlbmNlKEV4dGVudCAqIHNpemVvZihUKSwgYWxpZ25v
ZihUKSk7CisKKyAgICAgICAgY29uc3QgYXV0byogZGF0YSA9IGRlY29kZXIuZGVjb2RlRml4ZWRM
ZW5ndGhSZWZlcmVuY2UoRXh0ZW50ICogc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKICAgICAgICAg
aWYgKCFkYXRhKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAgICAgcmV0
dXJuIEFycmF5UmVmZXJlbmNlVHlwZShyZWludGVycHJldF9jYXN0PGNvbnN0IFQqPihkYXRhKSwg
RXh0ZW50KTsKQEAgLTgyLDcgKzgzLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEFy
Z3VtZW50Q29kZQogICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihhcnJh
eVJlZmVyZW5jZS5zaXplKCkpOwogICAgICAgICBpZiAoIWFycmF5UmVmZXJlbmNlLnNpemUoKSkK
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERh
dGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYXJyYXlSZWZlcmVuY2UuZGF0YSgp
KSwgYXJyYXlSZWZlcmVuY2Uuc2l6ZSgpICogc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKKyAgICAg
ICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IGFycmF5UmVmZXJlbmNlLmRh
dGEoKSwgYXJyYXlSZWZlcmVuY2Uuc2l6ZSgpIH0pOwogICAgIH0KICAgICBzdGF0aWMgc3RkOjpv
cHRpb25hbDxBcnJheVJlZmVyZW5jZVR5cGU+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAg
IHsKQEAgLTk2LDcgKzk3LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEFyZ3VtZW50
Q29kZQogICAgICAgICBpZiAoVU5MSUtFTFkoZGF0YVNpemUuaGFzT3ZlcmZsb3dlZCgpKSkKICAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICAgICAgY29uc3QgdWludDhfdCog
ZGF0YSA9IGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhSZWZlcmVuY2UoZGF0YVNpemUsIGFsaWdu
b2YoVCkpOworICAgICAgICBjb25zdCBhdXRvKiBkYXRhID0gZGVjb2Rlci5kZWNvZGVGaXhlZExl
bmd0aFJlZmVyZW5jZShkYXRhU2l6ZSwgYWxpZ25vZihUKSk7CiAgICAgICAgIGlmICghZGF0YSkK
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIHJldHVybiBBcnJheVJl
ZmVyZW5jZVR5cGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4oZGF0YSksIHN0YXRpY19jYXN0
PHNpemVfdD4oc2l6ZSkpOwpAQCAtNDIzLDcgKzQyNCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5j
b2RlciwgY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1p
bkNhcGFjaXR5PiYgdmVjdG9yKQogICAgIHsKICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2Fz
dDx1aW50NjRfdD4odmVjdG9yLnNpemUoKSk7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZlY3Rvci5kYXRhKCkp
LCB2ZWN0b3Iuc2l6ZSgpICogc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKKyAgICAgICAgZW5jb2Rl
ci5lbmNvZGVGaXhlZExlbmd0aERhdGEodmVjdG9yKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGlj
IFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiB2ZWN0b3Ip
CkBAIC00NDYsNyArNDQ3LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNh
cGFjaQogICAgICAgICBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwg
bWluQ2FwYWNpdHk+IHRlbXA7CiAgICAgICAgIHRlbXAuZ3JvdyhzaXplKTsKIAotICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KHRlbXAuZGF0YSgpKSwgc2l6ZSAqIHNpemVvZihUKSwgYWxpZ25vZihUKSkpCisgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEodGVtcCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAgICAgdmVjdG9yLnN3YXAodGVtcCk7CkBAIC00NzMsNyArNDc0
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAgICAgICBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+IHZl
Y3RvcjsKICAgICAgICAgdmVjdG9yLmdyb3coc2l6ZSk7CiAKLSAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPih2ZWN0b3Iu
ZGF0YSgpKSwgc2l6ZSAqIHNpemVvZihUKSwgYWxpZ25vZihUKSkpCisgICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEodmVjdG9yKSkKICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CiAKICAgICAgICAgcmV0dXJuIHZlY3RvcjsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL0FycmF5UmVmZXJlbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvQXJyYXlSZWZlcmVuY2UuaAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJyYXlSZWZlcmVuY2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsOCBAQAogCiBuYW1lc3BhY2UgSVBDIHsKIAorLy8gRklYTUU6IFJlcGxh
Y2Ugd2l0aCA8d3RmL1NwYW4uaD4KKwogaW5saW5lIGNvbnN0ZXhwciBzaXplX3QgYXJyYXlSZWZl
cmVuY2VEeW5hbWljRXh0ZW50ID0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKTsK
IAogdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBFeHRlbnQgPSBhcnJheVJlZmVyZW5jZUR5
bmFtaWNFeHRlbnQ+CkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmNwcAko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiwxMyArMjA2LDEzIEBAIGJvb2wgRGVjb2Rlcjo6YnVm
ZmVySXNMYXJnZUVub3VnaFRvQ29udGEKICAgICByZXR1cm4gYWxpZ25lZEJ1ZmZlcklzTGFyZ2VF
bm91Z2hUb0NvbnRhaW4ocm91bmRVcFRvQWxpZ25tZW50KG1fYnVmZmVyUG9zLCBhbGlnbm1lbnQp
LCBtX2J1ZmZlciwgbV9idWZmZXJFbmQsIHNpemUpOwogfQogCi1ib29sIERlY29kZXI6OmRlY29k
ZUZpeGVkTGVuZ3RoRGF0YSh1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWdu
bWVudCkKK2Jvb2wgRGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48c3RkOjpieXRl
PiBkYXRhLCBzaXplX3QgYWxpZ25tZW50KQogewotICAgIGlmICghYWxpZ25CdWZmZXJQb3NpdGlv
bihhbGlnbm1lbnQsIHNpemUpKQorICAgIGlmICghYWxpZ25CdWZmZXJQb3NpdGlvbihhbGlnbm1l
bnQsIGRhdGEuc2l6ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbWVtY3B5KGRh
dGEsIG1fYnVmZmVyUG9zLCBzaXplKTsKLSAgICBtX2J1ZmZlclBvcyArPSBzaXplOworICAgIG1l
bWNweShkYXRhLmRhdGEoKSwgbV9idWZmZXJQb3MsIGRhdGEuc2l6ZSgpKTsKKyAgICBtX2J1ZmZl
clBvcyArPSBkYXRhLnNpemUoKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSwx
MyBAQCBwdWJsaWM6CiAgICAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgaXNWYWxpZCgpIGNvbnN0
IHsgcmV0dXJuIG1fYnVmZmVyUG9zICE9IG51bGxwdHI7IH0KICAgICB2b2lkIG1hcmtJbnZhbGlk
KCkgeyBtX2J1ZmZlclBvcyA9IG51bGxwdHI7IH0KIAotICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBi
b29sIGRlY29kZUZpeGVkTGVuZ3RoRGF0YSh1aW50OF90KiBkYXRhLCBzaXplX3QsIHNpemVfdCBh
bGlnbm1lbnQpOworICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZUZpeGVkTGVuZ3Ro
RGF0YShTcGFuPHN0ZDo6Ynl0ZT4sIHNpemVfdCBhbGlnbm1lbnQpOworCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVGaXhlZExlbmd0
aERhdGEoVCYmIGRhdGEsIHNpemVfdCBhbGlnbm1lbnQgPSBhbGlnbm9mKHR5cGVuYW1lIGRlY2x0
eXBlKFNwYW4oc3RkOjpkZWNsdmFsPFQ+KCkpKTo6dmFsdWVfdHlwZSkpCisgICAgeworICAgICAg
ICByZXR1cm4gZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGFzV3JpdGFibGVCeXRlcyhTcGFuIHsgc3Rk
Ojpmb3J3YXJkPFQ+KGRhdGEpIH0pLCBhbGlnbm1lbnQpOworICAgIH0KIAogICAgIC8vIFRoZSBk
YXRhIGluIHRoZSByZXR1cm5lZCBwb2ludGVyIGhlcmUgd2lsbCBvbmx5IGJlIHZhbGlkIGZvciB0
aGUgbGlmZXRpbWUgb2YgdGhlIERlY29kZXIgb2JqZWN0LgogICAgIC8vIFJldHVybnMgbnVsbHB0
ciBvbiBmYWlsdXJlLgpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5jcHAJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29kZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsMTIgKzIwMiwxMiBAQCB1aW50OF90KiBFbmNvZGVy
Ojpncm93KHNpemVfdCBhbGlnbm1lbnQsCiAgICAgcmV0dXJuIG1fYnVmZmVyICsgYWxpZ25lZFNp
emU7CiB9CiAKLXZvaWQgRW5jb2Rlcjo6ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4
X3QqIGRhdGEsIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50KQordm9pZCBFbmNvZGVyOjpl
bmNvZGVGaXhlZExlbmd0aERhdGEoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEsIHNpemVfdCBh
bGlnbm1lbnQpCiB7Ci0gICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGRh
dGEpICUgYWxpZ25tZW50KSk7CisgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KGRhdGEuZGF0YSgpKSAlIGFsaWdubWVudCkpOwogCi0gICAgdWludDhfdCogYnVmZmVyID0g
Z3JvdyhhbGlnbm1lbnQsIHNpemUpOwotICAgIG1lbWNweShidWZmZXIsIGRhdGEsIHNpemUpOwor
ICAgIGF1dG8qIGJ1ZmZlciA9IGdyb3coYWxpZ25tZW50LCBkYXRhLnNpemUoKSk7CisgICAgbWVt
Y3B5KGJ1ZmZlciwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKIH0KIAogdm9pZCBFbmNvZGVy
OjphZGRBdHRhY2htZW50KEF0dGFjaG1lbnQmJiBhdHRhY2htZW50KQpJbmRleDogU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vSVBDL0VuY29kZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBA
CiAjaW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIElQQyB7CkBAIC02MCw3ICs2MSwx
MyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHdyYXBGb3JUZXN0aW5nKFVuaXF1ZVJlZjxFbmNvZGVy
PiYmKTsKIAotICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqIGRh
dGEsIHNpemVfdCwgc2l6ZV90IGFsaWdubWVudCk7CisgICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0
aERhdGEoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEsIHNpemVfdCBhbGlnbm1lbnQpOworCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShU
JiYgZGF0YSwgc2l6ZV90IGFsaWdubWVudCA9IGFsaWdub2YodHlwZW5hbWUgZGVjbHR5cGUoU3Bh
bihzdGQ6OmRlY2x2YWw8VD4oKSkpOjp2YWx1ZV90eXBlKSkKKyAgICB7CisgICAgICAgIGVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShhc0J5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSks
IGFsaWdubWVudCk7CisgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBFbmNv
ZGVyJiBvcGVyYXRvcjw8KFQmJiB0KQpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
U2hhcmVkQnVmZmVyQ29weS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvU2hhcmVkQnVmZmVyQ29weS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL1NoYXJlZEJ1ZmZlckNvcHkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Myw3ICs0Myw3IEBAIHZvaWQgU2hhcmVkQnVmZmVyQ29weTo6ZW5jb2RlKEVuY29kZXImIGUK
ICAgICBpZiAoIWJ1ZmZlclNpemUpCiAgICAgICAgIHJldHVybjsKICAgICBmb3IgKGF1dG8mIHNl
Z21lbnQgOiAqbV9idWZmZXIpCi0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KHNlZ21lbnQuc2VnbWVudC0+ZGF0YSgpLCBzZWdtZW50LnNlZ21lbnQtPnNpemUoKSwgMSk7Cisg
ICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHNlZ21lbnQuc2VnbWVudC0+Ynl0
ZXMoKSk7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8U2hhcmVkQnVmZmVyQ29weT4gU2hhcmVkQnVmZmVy
Q29weTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uRW5jb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25FbmNvZGVyLmgJKHJldmlzaW9uIDI3
ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25FbmNv
ZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkFyZ3Vt
ZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiTWVzc2FnZU5hbWVzLmgiCisjaW5jbHVkZSA8d3RmL1Nw
YW4uaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBJUEMgewpA
QCAtNTMsMjIgKzU0LDI4IEBAIHB1YmxpYzoKIAogICAgIH5TdHJlYW1Db25uZWN0aW9uRW5jb2Rl
cigpID0gZGVmYXVsdDsKIAotICAgIGJvb2wgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVp
bnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50KQorICAgIGJvb2wgZW5j
b2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhLCBzaXplX3QgYWxp
Z25tZW50KQogICAgIHsKICAgICAgICAgc2l6ZV90IGJ1ZmZlclBvaW50ZXIgPSBzdGF0aWNfY2Fz
dDxzaXplX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fYnVmZmVyICsgbV9lbmNvZGVk
U2l6ZSkpOwogICAgICAgICBzaXplX3QgbmV3QnVmZmVyUG9pbnRlciA9IHJvdW5kVXBUb011bHRp
cGxlT2YoYWxpZ25tZW50LCBidWZmZXJQb2ludGVyKTsKICAgICAgICAgaWYgKG5ld0J1ZmZlclBv
aW50ZXIgPCBidWZmZXJQb2ludGVyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICBpbnRwdHJfdCBhbGlnbmVkU2l6ZSA9IG1fZW5jb2RlZFNpemUgKyAobmV3QnVmZmVyUG9pbnRl
ciAtIGJ1ZmZlclBvaW50ZXIpOwotICAgICAgICBpZiAoIXJlc2VydmUoYWxpZ25lZFNpemUsIHNp
emUpKQorICAgICAgICBpZiAoIXJlc2VydmUoYWxpZ25lZFNpemUsIGRhdGEuc2l6ZSgpKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdWludDhfdCogYnVmZmVyID0gbV9idWZm
ZXIgKyBhbGlnbmVkU2l6ZTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7Ci0g
ICAgICAgIG1fZW5jb2RlZFNpemUgPSBhbGlnbmVkU2l6ZSArIHNpemU7CisgICAgICAgIGF1dG8q
IGJ1ZmZlciA9IG1fYnVmZmVyICsgYWxpZ25lZFNpemU7CisgICAgICAgIG1lbWNweShidWZmZXIs
IGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgICAgIG1fZW5jb2RlZFNpemUgPSBhbGln
bmVkU2l6ZSArIGRhdGEuc2l6ZSgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFQm
JiBkYXRhLCBzaXplX3QgYWxpZ25tZW50ID0gYWxpZ25vZih0eXBlbmFtZSBkZWNsdHlwZShTcGFu
KHN0ZDo6ZGVjbHZhbDxUPigpKSk6OnZhbHVlX3R5cGUpKQorICAgIHsKKyAgICAgICAgZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKGFzQnl0ZXMoU3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihkYXRhKSB9KSwg
YWxpZ25tZW50KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIFN0cmVh
bUNvbm5lY3Rpb25FbmNvZGVyJiBvcGVyYXRvcjw8KFQmJiB0KQogICAgIHsKICAgICAgICAgQXJn
dW1lbnRDb2RlcjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+
Piwgdm9pZD46OmVuY29kZSgqdGhpcywgc3RkOjpmb3J3YXJkPFQ+KHQpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDcgKzE0NCw3IEBAIHN0YXRpYyB2b2lkIGVuY29kZVNo
YXJlZEJ1ZmZlcihFbmNvZGVyJiAKICAgICAvLyBvdmVyIHRoZSBJUEMuIENvbm5lY3Rpb25Vbml4
LmNwcCBhbHJlYWR5IHVzZXMgc2hhcmVkIG1lbW9yeSB0byBzZW5kIGFueSBJUEMgbWVzc2FnZSB0
aGF0IGlzCiAgICAgLy8gdG9vIGxhcmdlLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwODU3MS4KICAgICBmb3IgKGNvbnN0IGF1dG8mIGVsZW1lbnQgOiAqYnVm
ZmVyKQotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShlbGVtZW50LnNlZ21l
bnQtPmRhdGEoKSwgZWxlbWVudC5zZWdtZW50LT5zaXplKCksIDEpOworICAgICAgICBlbmNvZGVy
LmVuY29kZUZpeGVkTGVuZ3RoRGF0YShlbGVtZW50LnNlZ21lbnQtPmJ5dGVzKCkpOwogI2Vsc2UK
ICAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7CiAgICAgYXV0byBzaGFyZWRNZW1vcnlC
dWZmZXIgPSBTaGFyZWRNZW1vcnk6OmNvcHlCdWZmZXIoKmJ1ZmZlcik7CkBAIC0xODAsNyArMTgw
LDcgQEAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZVNoYQogCiAgICAgVmVj
dG9yPHVpbnQ4X3Q+IGRhdGE7CiAgICAgZGF0YS5ncm93KGJ1ZmZlclNpemUpOwotICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAx
KSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGRhdGEpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBidWZmZXIgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZN
b3ZlKGRhdGEpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9BdXhpbGlhcnlQcm9j
ZXNzTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9BdXhpbGlh
cnlQcm9jZXNzTWFjLm1tCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJl
ZC9tYWMvQXV4aWxpYXJ5UHJvY2Vzc01hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzIxLDcgKzMy
MSw3IEBAIHN0YXRpYyBTdHJpbmcgc2FuZGJveEZpbGVQYXRoKGNvbnN0IFN0cmkKICAgICBjcnlw
dG8tPmFkZEJ5dGVzKGhlYWRlci5kYXRhKCksIGhlYWRlci5sZW5ndGgoKSk7CiAgICAgYXV0byBo
YXNoID0gY3J5cHRvLT5jb21wdXRlSGFzaCgpOwogCi0gICAgcmV0dXJuIG1ha2VTdHJpbmcoZGly
ZWN0b3J5UGF0aCwgIi9Db21waWxlZFNhbmRib3grIiwgYmFzZTY0VVJMRW5jb2RlZChoYXNoLmRh
dGEoKSwgaGFzaC5zaXplKCkpKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZyhkaXJlY3RvcnlQYXRo
LCAiL0NvbXBpbGVkU2FuZGJveCsiLCBiYXNlNjRVUkxFbmNvZGVkKGhhc2gpKTsKIH0KIAogc3Rh
dGljIGJvb2wgZW5zdXJlU2FuZGJveENhY2hlRGlyZWN0b3J5KGNvbnN0IFNhbmRib3hJbmZvJiBp
bmZvKQpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvd2luL1dlYkNvcmVBcmd1bWVudENvZGVy
c1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvd2luL1dlYkNvcmVB
cmd1bWVudENvZGVyc1dpbi5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQv
U2hhcmVkL3dpbi9XZWJDb3JlQXJndW1lbnRDb2RlcnNXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MSwxMiArNTEsMTIgQEAgc3RkOjpvcHRpb25hbDxGb250QXR0cmlidXRlcz4gQXJndW1lbnRD
bwogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxMT0dGT05UPiB7CiAgICAgc3RhdGlj
IHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IExPR0ZPTlQmIGxvZ0ZvbnQpCiAg
ICAgewotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPigmbG9nRm9udCksIHNpemVvZiBsb2dGb250LCAxKTsKKyAgICAg
ICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZsb2dGb250LCAxIH0sIDEp
OwogICAgIH0KICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxMT0dGT05UPiBkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKICAgICB7CiAgICAgICAgIExPR0ZPTlQgbG9nRm9udDsKLSAgICAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3Qq
PigmbG9nRm9udCksIHNpemVvZihsb2dGb250KSwgMSkpCisgICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZsb2dGb250LCAxIH0sIDEpKQogICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAgICAgcmV0dXJuIGxvZ0ZvbnQ7CiAgICAgfQpJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3Jl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVu
dFJ1bGVMaXN0U3RvcmUuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzEsMTggKzEzMSwyMCBAQCBzdGF0aWMgV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGEgZW5j
b2RlCiAgICAgZW5jb2RlciA8PCBtZXRhRGF0YS5jb25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNp
emU7CiAgICAgZW5jb2RlciA8PCBtZXRhRGF0YS5jb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW47
CiAKLSAgICBBU1NFUlQoZW5jb2Rlci5idWZmZXJTaXplKCkgPT0gQ29udGVudFJ1bGVMaXN0Rmls
ZUhlYWRlclNpemUpOwotICAgIHJldHVybiBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YShlbmNv
ZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgQVNTRVJUKGVuY29kZXIu
YnVmZmVyKCkuc2l6ZSgpID09IENvbnRlbnRSdWxlTGlzdEZpbGVIZWFkZXJTaXplKTsKKyAgICBy
ZXR1cm4gV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGEgeyBlbmNvZGVyLmJ1ZmZlcigpIH07CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgZ2V0RGF0YShjb25zdCBUJiwgY29uc3QgRnVu
Y3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mKTsKLXRlbXBsYXRlPD4gdm9pZCBn
ZXREYXRhKGNvbnN0IFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhJiBkYXRhLCBjb25zdCBGdW5j
dGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYgZnVuY3Rpb24pCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiB2b2lkIGdldERhdGEoY29uc3QgVCYsIGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bh
bjxjb25zdCBzdGQ6OmJ5dGU+KT4mKTsKKwordGVtcGxhdGU8PiB2b2lkIGdldERhdGEoY29uc3Qg
V2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGEmIGRhdGEsIGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bh
bjxjb25zdCBzdGQ6OmJ5dGU+KT4mIGZ1bmN0aW9uKQogewogICAgIGRhdGEuYXBwbHkoZnVuY3Rp
b24pOwogfQotdGVtcGxhdGU8PiB2b2lkIGdldERhdGEoY29uc3QgV2ViQ29yZTo6U2hhcmVkQnVm
ZmVyJiBkYXRhLCBjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYg
ZnVuY3Rpb24pCisKK3RlbXBsYXRlPD4gdm9pZCBnZXREYXRhKGNvbnN0IFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlciYgZGF0YSwgY29uc3QgRnVuY3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4p
PiYgZnVuY3Rpb24pCiB7Ci0gICAgZnVuY3Rpb24oZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsK
KyAgICBmdW5jdGlvbihkYXRhLmJ5dGVzKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpA
QCAtMTUwLDEzICsxNTIsMTMgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8Q29udGVudFJ1bGVMaXN0
TWV0YQogewogICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwogICAgIENvbnRlbnRSdWxlTGlzdE1l
dGFEYXRhIG1ldGFEYXRhOwotICAgIGdldERhdGEoZmlsZURhdGEsIFsmbWV0YURhdGEsICZzdWNj
ZXNzLCAmZmlsZURhdGFdKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7CisgICAg
Z2V0RGF0YShmaWxlRGF0YSwgWyZtZXRhRGF0YSwgJnN1Y2Nlc3MsICZmaWxlRGF0YV0oU3Bhbjxj
b25zdCBzdGQ6OmJ5dGU+IGRhdGEpIHsKICAgICAgICAgLy8gVGhlIGZpbGUgZGF0YSBzaG91bGQg
YmUgbWFwcGVkIGludG8gb25lIGNvbnRpbnVvdXMgbWVtb3J5IHNlZ21lbnQgc28gdGhlIHNpemUK
ICAgICAgICAgLy8gcGFzc2VkIHRvIHRoZSBhcHBsaWVyIHNob3VsZCBhbHdheXMgZXF1YWwgdGhl
IGRhdGEgc2l6ZS4KLSAgICAgICAgaWYgKHNpemUgIT0gZmlsZURhdGEuc2l6ZSgpKQorICAgICAg
ICBpZiAoZGF0YS5zaXplKCkgIT0gZmlsZURhdGEuc2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihkYXRh
LCBzaXplKTsKKyAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyIHsgZGF0
YSB9OwogICAgICAgICAKICAgICAgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gdmVyc2lvbjsK
ICAgICAgICAgZGVjb2RlciA+PiB2ZXJzaW9uOwpAQCAtMjI4LDggKzIzMCw4IEBAIHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPE1hcHBlZERhdGE+IG9wZW5BbmQKIHN0YXRpYyBib29sIHdyaXRlRGF0YVRv
RmlsZShjb25zdCBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YSYgZmlsZURhdGEsIFBsYXRmb3Jt
RmlsZUhhbmRsZSBmZCkKIHsKICAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwotICAgIGZpbGVEYXRh
LmFwcGx5KFtmZCwgJnN1Y2Nlc3NdKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7
Ci0gICAgICAgIGlmICh3cml0ZVRvRmlsZShmZCwgZGF0YSwgc2l6ZSkgPT0gLTEpIHsKKyAgICBm
aWxlRGF0YS5hcHBseShbZmQsICZzdWNjZXNzXShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkg
eworICAgICAgICBpZiAod3JpdGVUb0ZpbGUoZmQsIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSkg
PT0gLTEpIHsKICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0JKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tX
ZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3IEBA
CiAjaW1wb3J0IDxwYWwvY3J5cHRvL0NyeXB0b0RpZ2VzdC5oPgogI2ltcG9ydCA8d3RmL0Jsb2Nr
UHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvU3Bh
bkNvY29hLmg+CiAjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KICNpbXBvcnQgPHd0
Zi90ZXh0L0Jhc2U2NC5oPgogCkBAIC03MCw3ICs3MSw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNE
YXRhPiBwcm9kdWNlQ2xpZW50RGEKICAgICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0OkAid2Vi
YXV0aG4uZ2V0IiBmb3JLZXk6QCJ0eXBlIl07CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBb
ZGljdGlvbmFyeSBzZXRPYmplY3Q6YmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY2hhbGxlbmdlLmJ5
dGVzLCBjaGFsbGVuZ2UubGVuZ3RoKSBmb3JLZXk6QCJjaGFsbGVuZ2UiXTsKKyAgICBbZGljdGlv
bmFyeSBzZXRPYmplY3Q6YmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoYXNCeXRlcyhjaGFsbGVuZ2Up
KSBmb3JLZXk6QCJjaGFsbGVuZ2UiXTsKICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6b3JpZ2lu
IGZvcktleTpAIm9yaWdpbiJdOwogCiAgICAgcmV0dXJuIFtOU0pTT05TZXJpYWxpemF0aW9uIGRh
dGFXaXRoSlNPTk9iamVjdDpkaWN0aW9uYXJ5LmdldCgpIG9wdGlvbnM6TlNKU09OV3JpdGluZ1Nv
cnRlZEtleXMgZXJyb3I6bmlsXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1
dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsQXV0aGVudGljYXRvci5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9Mb2NhbEF1dGhl
bnRpY2F0b3IubW0JKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsQXV0aGVudGljYXRvci5tbQkod29ya2luZyBj
b3B5KQpAQCAtODUsNyArODUsNyBAQCBzdGF0aWMgaW5saW5lIEhhc2hTZXQ8U3RyaW5nPiBwcm9k
dWNlSGFzCiAgICAgSGFzaFNldDxTdHJpbmc+IHJlc3VsdDsKICAgICBmb3IgKGF1dG8mIGNyZWRl
bnRpYWxEZXNjcmlwdG9yIDogY3JlZGVudGlhbERlc2NyaXB0b3JzKSB7CiAgICAgICAgIGlmIChl
bXB0eVRyYW5zcG9ydHNPckNvbnRhaW4oY3JlZGVudGlhbERlc2NyaXB0b3IudHJhbnNwb3J0cywg
QXV0aGVudGljYXRvclRyYW5zcG9ydDo6SW50ZXJuYWwpICYmIGNyZWRlbnRpYWxEZXNjcmlwdG9y
LnR5cGUgPT0gUHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSAmJiBjcmVkZW50aWFs
RGVzY3JpcHRvci5pZFZlY3Rvci5zaXplKCkgPT0gY3JlZGVudGlhbElkTGVuZ3RoKQotICAgICAg
ICAgICAgcmVzdWx0LmFkZChiYXNlNjRFbmNvZGVUb1N0cmluZyhjcmVkZW50aWFsRGVzY3JpcHRv
ci5pZFZlY3Rvci5kYXRhKCksIGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9yLnNpemUoKSkp
OworICAgICAgICAgICAgcmVzdWx0LmFkZChiYXNlNjRFbmNvZGVUb1N0cmluZyhjcmVkZW50aWFs
RGVzY3JpcHRvci5pZFZlY3RvcikpOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAt
MjMzLDcgKzIzMyw3IEBAIHZvaWQgTG9jYWxBdXRoZW50aWNhdG9yOjptYWtlQ3JlZGVudGlhbCgK
ICAgICAgICAgaWYgKG5vdEZvdW5kICE9IG1fZXhpc3RpbmdDcmVkZW50aWFscy5maW5kTWF0Y2hp
bmcoWyZleGNsdWRlQ3JlZGVudGlhbElkc10gKGF1dG8mIGNyZWRlbnRpYWwpIHsKICAgICAgICAg
ICAgIGF1dG8qIHJhd0lkID0gY3JlZGVudGlhbC0+cmF3SWQoKTsKICAgICAgICAgICAgIEFTU0VS
VChyYXdJZCk7Ci0gICAgICAgICAgICByZXR1cm4gZXhjbHVkZUNyZWRlbnRpYWxJZHMuY29udGFp
bnMoYmFzZTY0RW5jb2RlVG9TdHJpbmcocmF3SWQtPmRhdGEoKSwgcmF3SWQtPmJ5dGVMZW5ndGgo
KSkpOworICAgICAgICAgICAgcmV0dXJuIGV4Y2x1ZGVDcmVkZW50aWFsSWRzLmNvbnRhaW5zKGJh
c2U2NEVuY29kZVRvU3RyaW5nKHJhd0lkLT5ieXRlcygpKSk7CiAgICAgICAgIH0pKSB7CiAgICAg
ICAgICAgICByZWNlaXZlRXhjZXB0aW9uKHsgTm90QWxsb3dlZEVycm9yLCAiQXQgbGVhc3Qgb25l
IGNyZWRlbnRpYWwgbWF0Y2hlcyBhbiBlbnRyeSBvZiB0aGUgZXhjbHVkZUNyZWRlbnRpYWxzIGxp
c3QgaW4gdGhlIHBsYXRmb3JtIGF0dGFjaGVkIGF1dGhlbnRpY2F0b3IuIl9zIH0sIFdlYkF1dGhl
bnRpY2F0aW9uU3RhdHVzOjpMQUV4Y2x1ZGVDcmVkZW50aWFsc01hdGNoZWQpOwogICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtNTEwLDcgKzUxMCw3IEBAIHZvaWQgTG9jYWxBdXRoZW50aWNhdG9yOjpn
ZXRBc3NlcnRpb24oKQogICAgICAgICB9CiAKICAgICAgICAgYXV0byogcmF3SWQgPSBjcmVkZW50
aWFsLT5yYXdJZCgpOwotICAgICAgICBpZiAoYWxsb3dDcmVkZW50aWFsSWRzLmNvbnRhaW5zKGJh
c2U2NEVuY29kZVRvU3RyaW5nKHJhd0lkLT5kYXRhKCksIHJhd0lkLT5ieXRlTGVuZ3RoKCkpKSkK
KyAgICAgICAgaWYgKGFsbG93Q3JlZGVudGlhbElkcy5jb250YWlucyhiYXNlNjRFbmNvZGVUb1N0
cmluZyhyYXdJZC0+Ynl0ZXMoKSkpKQogICAgICAgICAgICAgYXNzZXJ0aW9uUmVzcG9uc2VzLnVu
Y2hlY2tlZEFwcGVuZChjcmVkZW50aWFsLmNvcHlSZWYoKSk7CiAgICAgfQogICAgIGlmIChhc3Nl
cnRpb25SZXNwb25zZXMuaXNFbXB0eSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tMb2NhbENvbm5lY3Rpb24ubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vTW9jay9Nb2Nr
TG9jYWxDb25uZWN0aW9uLm1tCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tMb2NhbENvbm5lY3Rpb24ubW0JKHdv
cmtpbmcgY29weSkKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIE1vY2tMb2NhbENvbm5lY3Rpb246
OmZpbHRlclJlc3BvbnNlCiAgICAgZm9yICg7IGl0ciAhPSByZXNwb25zZXMuZW5kKCk7ICsraXRy
KSB7CiAgICAgICAgIGF1dG8qIHJhd0lkID0gaXRyLT5nZXQoKS5yYXdJZCgpOwogICAgICAgICBB
U1NFUlQocmF3SWQpOwotICAgICAgICBhdXRvIHJhd0lkQmFzZTY0ID0gYmFzZTY0RW5jb2RlVG9T
dHJpbmcocmF3SWQtPmRhdGEoKSwgcmF3SWQtPmJ5dGVMZW5ndGgoKSk7CisgICAgICAgIGF1dG8g
cmF3SWRCYXNlNjQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhyYXdJZC0+Ynl0ZXMoKSk7CiAgICAg
ICAgIGlmIChyYXdJZEJhc2U2NCA9PSBwcmVmZXJyZWRDcmVkZW50aWFsSWRCYXNlNjQpCiAgICAg
ICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMv
TGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9tYWMvTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nLmNwcAkocmV2aXNpb24gMjc4
ODA5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL0xlZ2FjeVNlc3Npb25TdGF0ZUNv
ZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3ICsxMjksNyBAQCBwdWJsaWM6CiAgICAg
ICAgICp0aGlzIDw8IGxlbmd0aDsKIAogICAgICAgICAqdGhpcyA8PCBzdGF0aWNfY2FzdDx1aW50
NjRfdD4obGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgICAgIGVuY29kZUZpeGVkTGVuZ3Ro
RGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihTdHJpbmdWaWV3KHZhbHVlKS51
cGNvbnZlcnRlZENoYXJhY3RlcnMoKS5nZXQoKSksIGxlbmd0aCAqIHNpemVvZihVQ2hhciksIGFs
aWdub2YoVUNoYXIpKTsKKyAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBTdHJp
bmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKS5nZXQoKSwgbGVuZ3RoIH0pOwog
CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CkBAIC0xMzcsNyArMTM3LDcgQEAgcHVibGlj
OgogICAgIEhpc3RvcnlFbnRyeURhdGFFbmNvZGVyJiBvcGVyYXRvcjw8KGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYgdmFsdWUpCiAgICAgewogICAgICAgICAqdGhpcyA8PCBzdGF0aWNfY2FzdDx1aW50
NjRfdD4odmFsdWUuc2l6ZSgpKTsKLSAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHZhbHVl
LmRhdGEoKSwgdmFsdWUuc2l6ZSgpLCAxKTsKKyAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KHZhbHVlKTsKIAogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQpAQCAtMTQ1LDcgKzE0NSw3
IEBAIHB1YmxpYzoKICAgICBIaXN0b3J5RW50cnlEYXRhRW5jb2RlciYgb3BlcmF0b3I8PChjb25z
dCBWZWN0b3I8Y2hhcj4mIHZhbHVlKQogICAgIHsKICAgICAgICAgKnRoaXMgPDwgc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KHZhbHVlLnNpemUoKSk7Ci0gICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0
YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih2YWx1ZS5kYXRhKCkpLCB2YWx1ZS5z
aXplKCksIDEpOworICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEodmFsdWUpOwogCiAgICAg
ICAgIHJldHVybiAqdGhpczsKICAgICB9CkBAIC0yMDYsMTcgKzIwNiwyMyBAQCBwcml2YXRlOgog
ICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2FyaXRobWV0aWM8VHlwZT46OnZh
bHVlLCAiIik7CiAKLSAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDhfdCo+KCZ2YWx1ZSksIHNpemVvZih2YWx1ZSksIHNpemVvZih2YWx1ZSkpOworICAg
ICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZ2YWx1ZSwgMSB9LCBzaXplb2YodmFs
dWUpKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAotICAgIHZvaWQgZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBh
bGlnbm1lbnQpCisgICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoU3Bhbjxjb25zdCBzdGQ6
OmJ5dGU+IGRhdGEsIHVuc2lnbmVkIGFsaWdubWVudCkKICAgICB7Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGRhdGEgfHwgIXNpemUpOwotICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4oZGF0YSkgJSBhbGlnbm1lbnQpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
ZGF0YS5kYXRhKCkgfHwgIWRhdGEuc2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUKCEocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KGRhdGEuZGF0YSgpKSAlIGFsaWdubWVudCkpOwogCi0gICAgICAg
IHVpbnQ4X3QqIGJ1ZmZlciA9IGdyb3coYWxpZ25tZW50LCBzaXplKTsKLSAgICAgICAgbWVtY3B5
KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7CisgICAgICAgIGF1dG8qIGJ1ZmZlciA9IGdyb3coYWxpZ25t
ZW50LCBkYXRhLnNpemUoKSk7CisgICAgICAgIG1lbWNweShidWZmZXIsIGRhdGEuZGF0YSgpLCBk
YXRhLnNpemUoKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lk
IGVuY29kZUZpeGVkTGVuZ3RoRGF0YShUJiYgZGF0YSwgdW5zaWduZWQgYWxpZ25tZW50ID0gYWxp
Z25vZih0eXBlbmFtZSBkZWNsdHlwZShTcGFuKHN0ZDo6ZGVjbHZhbDxUPigpKSk6OnZhbHVlX3R5
cGUpKQorICAgIHsKKyAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGFzQnl0ZXMoU3BhbiB7
IHN0ZDo6Zm9yd2FyZDxUPihkYXRhKSB9KSwgYWxpZ25tZW50KTsKICAgICB9CiAKICAgICB1aW50
OF90KiBncm93KHVuc2lnbmVkIGFsaWdubWVudCwgc2l6ZV90IHNpemUpCkBAIC02MDEsNyArNjA3
LDcgQEAgcHVibGljOgogCiAgICAgICAgIFVDaGFyKiBidWZmZXI7CiAgICAgICAgIGF1dG8gc3Ry
aW5nID0gU3RyaW5nOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICAg
ICAgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1ZmZl
ciksIGxlbmd0aCAqIHNpemVvZihVQ2hhciksIGFsaWdub2YoVUNoYXIpKTsKKyAgICAgICAgZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBidWZmZXIsIGxlbmd0aCB9KTsKIAogICAgICAgICB2
YWx1ZSA9IHN0cmluZzsKICAgICAgICAgcmV0dXJuICp0aGlzOwpAQCAtNzM3LDE3ICs3NDMsMjMg
QEAgcHJpdmF0ZToKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2FyaXRobWV0aWM8VHlw
ZT46OnZhbHVlLCAiIik7CiAgICAgICAgIHZhbHVlID0gVHlwZSgpOwogCi0gICAgICAgIGRlY29k
ZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWUpLCBzaXpl
b2YodmFsdWUpLCBzaXplb2YodmFsdWUpKTsKKyAgICAgICAgZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KFNwYW4geyAmdmFsdWUsIDEgfSwgc2l6ZW9mKHZhbHVlKSk7CiAgICAgICAgIHJldHVybiAqdGhp
czsKICAgICB9CiAKLSAgICB2b2lkIGRlY29kZUZpeGVkTGVuZ3RoRGF0YSh1aW50OF90KiBkYXRh
LCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgYWxpZ25tZW50KQorICAgIHZvaWQgZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKFNwYW48c3RkOjpieXRlPiBkYXRhLCB1bnNpZ25lZCBhbGlnbm1lbnQpCiAgICAg
ewotICAgICAgICBpZiAoIWFsaWduQnVmZmVyUG9zaXRpb24oYWxpZ25tZW50LCBzaXplKSkKKyAg
ICAgICAgaWYgKCFhbGlnbkJ1ZmZlclBvc2l0aW9uKGFsaWdubWVudCwgZGF0YS5zaXplKCkpKQog
ICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIG1lbWNweShkYXRhLCBtX2J1ZmZlciwgc2l6
ZSk7Ci0gICAgICAgIG1fYnVmZmVyICs9IHNpemU7CisgICAgICAgIG1lbWNweShkYXRhLmRhdGEo
KSwgbV9idWZmZXIsIGRhdGEuc2l6ZSgpKTsKKyAgICAgICAgbV9idWZmZXIgKz0gZGF0YS5zaXpl
KCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIGRlY29kZUZp
eGVkTGVuZ3RoRGF0YShUJiYgZGF0YSwgdW5zaWduZWQgYWxpZ25tZW50ID0gYWxpZ25vZih0eXBl
bmFtZSBkZWNsdHlwZShTcGFuKHN0ZDo6ZGVjbHZhbDxUPigpKSk6OnZhbHVlX3R5cGUpKQorICAg
IHsKKyAgICAgICAgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGFzV3JpdGFibGVCeXRlcyhTcGFuIHsg
c3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pLCBhbGlnbm1lbnQpOwogICAgIH0KIAogICAgIGJvb2wg
YWxpZ25CdWZmZXJQb3NpdGlvbih1bnNpZ25lZCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQpJbmRl
eDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0
Q2hhbm5lbC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw4ICs1
OSw4IEBAIE5ldHdvcmtTZW5kUXVldWUgV2ViU29ja2V0Q2hhbm5lbDo6Y3JlYXQKICAgICAgICAg
Y2hhbm5lbC5ub3RpZnlTZW5kRnJhbWUoV2ViU29ja2V0RnJhbWU6Ok9wQ29kZTo6T3BDb2RlVGV4
dCwgdXRmOFN0cmluZy5kYXRhQXNVSW50OFB0cigpLCB1dGY4U3RyaW5nLmxlbmd0aCgpKTsKICAg
ICAgICAgY2hhbm5lbC5zZW5kTWVzc2FnZShNZXNzYWdlczo6TmV0d29ya1NvY2tldENoYW5uZWw6
OlNlbmRTdHJpbmcgeyBJUEM6OkRhdGFSZWZlcmVuY2UgeyB1dGY4U3RyaW5nLmRhdGFBc1VJbnQ4
UHRyKCksIHV0ZjhTdHJpbmcubGVuZ3RoKCkgfSB9LCB1dGY4U3RyaW5nLmxlbmd0aCgpKTsKICAg
ICB9LCBbJmNoYW5uZWxdKGF1dG8mIHNwYW4pIHsKLSAgICAgICAgY2hhbm5lbC5ub3RpZnlTZW5k
RnJhbWUoV2ViU29ja2V0RnJhbWU6Ok9wQ29kZTo6T3BDb2RlQmluYXJ5LCBzcGFuLmRhdGEoKSwg
c3Bhbi5zaXplKCkpOwotICAgICAgICBjaGFubmVsLnNlbmRNZXNzYWdlKE1lc3NhZ2VzOjpOZXR3
b3JrU29ja2V0Q2hhbm5lbDo6U2VuZERhdGEgeyBJUEM6OkRhdGFSZWZlcmVuY2UgeyBzcGFuLmRh
dGEoKSwgc3Bhbi5zaXplKCkgfSB9LCBzcGFuLnNpemUoKSk7CisgICAgICAgIGNoYW5uZWwubm90
aWZ5U2VuZEZyYW1lKFdlYlNvY2tldEZyYW1lOjpPcENvZGU6Ok9wQ29kZUJpbmFyeSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3Bhbi5kYXRhKCkpLCBzcGFuLnNpemUoKSk7Cisg
ICAgICAgIGNoYW5uZWwuc2VuZE1lc3NhZ2UoTWVzc2FnZXM6Ok5ldHdvcmtTb2NrZXRDaGFubmVs
OjpTZW5kRGF0YSB7IElQQzo6RGF0YVJlZmVyZW5jZSB7IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KHNwYW4uZGF0YSgpKSwgc3Bhbi5zaXplKCkgfSB9LCBzcGFuLnNpemUoKSk7CiAg
ICAgfSwgWyZjaGFubmVsXShFeGNlcHRpb25Db2RlIGV4Y2VwdGlvbkNvZGUpIHsKICAgICAgICAg
YXV0byBjb2RlID0gc3RhdGljX2Nhc3Q8aW50PihleGNlcHRpb25Db2RlKTsKICAgICAgICAgY2hh
bm5lbC5mYWlsKG1ha2VTdHJpbmcoIkZhaWxlZCB0byBsb2FkIEJsb2I6IGV4Y2VwdGlvbiBjb2Rl
ID0gIiwgY29kZSkpOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBD
VGVzdGluZ0FQSS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NDMsMTIgKzQ0Myw3IEBAIEpTVmFsdWVSZWYgSlNTaGFyZWRNZW1vcnk6OnJlYWRCeXRlcyhK
U0MKICAgICByZXR1cm4gdG9SZWYoanNBcnJheUJ1ZmZlcik7CiB9CiAKLXN0cnVjdCBBcnJheUJ1
ZmZlckRhdGEgewotICAgIHZvaWQqIGJ1ZmZlciB7IG51bGxwdHIgfTsKLSAgICBzaXplX3QgbGVu
Z3RoIHsgMCB9OwotfTsKLQotc3RhdGljIEFycmF5QnVmZmVyRGF0YSBhcnJheUJ1ZmZlckRhdGFG
cm9tVmFsdWVSZWYoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVHlwZWRBcnJheVR5cGUgdHlwZSwg
SlNWYWx1ZVJlZiB2YWx1ZVJlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorc3RhdGljIFNwYW48
c3RkOjpieXRlPiBhcnJheUJ1ZmZlckRhdGFGcm9tVmFsdWVSZWYoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTVHlwZWRBcnJheVR5cGUgdHlwZSwgSlNWYWx1ZVJlZiB2YWx1ZVJlZiwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQogewogICAgIGF1dG8gb2JqZWN0UmVmID0gSlNWYWx1ZVRvT2JqZWN0KGNv
bnRleHQsIHZhbHVlUmVmLCBleGNlcHRpb24pOwogICAgIGlmICghb2JqZWN0UmVmKQpAQCAtNDY5
LDcgKzQ2NCw3IEBAIHN0YXRpYyBBcnJheUJ1ZmZlckRhdGEgYXJyYXlCdWZmZXJEYXRhRnIKICAg
ICBlbHNlCiAgICAgICAgIGxlbmd0aCA9IEpTT2JqZWN0R2V0VHlwZWRBcnJheUJ5dGVMZW5ndGgo
Y29udGV4dCwgb2JqZWN0UmVmLCBleGNlcHRpb24pOwogCi0gICAgcmV0dXJuIHsgYnVmZmVyLCBs
ZW5ndGggfTsKKyAgICByZXR1cm4geyBzdGF0aWNfY2FzdDxzdGQ6OmJ5dGUqPihidWZmZXIpLCBs
ZW5ndGggfTsKIH0KIAogSlNWYWx1ZVJlZiBKU1NoYXJlZE1lbW9yeTo6d3JpdGVCeXRlcyhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNp
emVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCkBAIC00ODcsMTMgKzQ4MiwxMyBAQCBKU1ZhbHVlUmVmIEpTU2hhcmVk
TWVtb3J5Ojp3cml0ZUJ5dGVzKEpTCiAgICAgfQogCiAgICAgYXV0byBkYXRhID0gYXJyYXlCdWZm
ZXJEYXRhRnJvbVZhbHVlUmVmKGNvbnRleHQsIHR5cGUsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9u
KTsKLSAgICBpZiAoIWRhdGEuYnVmZmVyKSB7CisgICAgaWYgKCFkYXRhLmRhdGEoKSkgewogICAg
ICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJDb3VsZCBub3QgcmVh
ZCB0aGUgYnVmZmVyIl9zKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOwogICAgIH0KIAogICAgIHNpemVfdCBvZmZzZXQgPSAwOwotICAgIHNpemVfdCBsZW5n
dGggPSBkYXRhLmxlbmd0aDsKKyAgICBzaXplX3QgbGVuZ3RoID0gZGF0YS5zaXplKCk7CiAgICAg
c2l6ZV90IHNoYXJlZE1lbW9yeVNpemUgPSBqc1NoYXJlZE1lbW9yeS0+bV9zaGFyZWRNZW1vcnkt
PnNpemUoKTsKIAogICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHRvSlMoY29udGV4dCk7CkBAIC01
MjYsNyArNTIxLDcgQEAgSlNWYWx1ZVJlZiBKU1NoYXJlZE1lbW9yeTo6d3JpdGVCeXRlcyhKUwog
ICAgICAgICBsZW5ndGggPSAqbGVuZ3RoVmFsdWU7CiAgICAgfQogCi0gICAgbWVtY3B5KHN0YXRp
Y19jYXN0PHVpbnQ4X3QqPihqc1NoYXJlZE1lbW9yeS0+bV9zaGFyZWRNZW1vcnktPmRhdGEoKSkg
KyBvZmZzZXQsIGRhdGEuYnVmZmVyLCBsZW5ndGgpOworICAgIG1lbWNweShzdGF0aWNfY2FzdDx1
aW50OF90Kj4oanNTaGFyZWRNZW1vcnktPm1fc2hhcmVkTWVtb3J5LT5kYXRhKCkpICsgb2Zmc2V0
LCBkYXRhLmRhdGEoKSwgbGVuZ3RoKTsKIAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKIH0KQEAgLTY4OCwxMCArNjgzLDEwIEBAIHN0YXRpYyBib29sIGVuY29kZVR5
cGVkQXJyYXkoSVBDOjpFbmNvZGUKICAgICBBU1NFUlQodHlwZSAhPSBrSlNUeXBlZEFycmF5VHlw
ZU5vbmUpOwogCiAgICAgYXV0byBkYXRhID0gYXJyYXlCdWZmZXJEYXRhRnJvbVZhbHVlUmVmKGNv
bnRleHQsIHR5cGUsIHZhbHVlUmVmLCBleGNlcHRpb24pOwotICAgIGlmICghZGF0YS5idWZmZXIp
CisgICAgaWYgKCFkYXRhLmRhdGEoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZW5j
b2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oZGF0YS5idWZmZXIpLCBkYXRhLmxlbmd0aCwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhl
ZExlbmd0aERhdGEoZGF0YSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvRW52aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvRW52aXJvbm1lbnQuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL0Vudmlyb25tZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDcg
KzE1Niw3IEBAIGJvb2wgRW52aXJvbm1lbnQ6OmNvbXB1dGVJc0RlYnVnSGVhcEVuYWIKICAgICBy
ZXR1cm4gdHJ1ZTsKICNlbmRpZgogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVl
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNyBAQAorMjAyMS0wNi0xMSAgU2Ft
IFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRvcHQgU3BhbiBpbiBtb3Jl
IHBsYWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjI2ODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
W1dJUF0KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2NhaXJvL1BpeGVsRHVtcFN1cHBvcnRD
YWlyby5jcHA6CisgICAgICAgIChjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JCaXRtYXBDb250ZXh0
KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jZy9QaXhlbER1bXBTdXBwb3J0Q0cuY3BwOgor
ICAgICAgICAoY29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQml0bWFwQ29udGV4dCk6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQmxvb21GaWx0ZXIuY3BwOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6Z2VuZXJhdGVSYW5kb21EaWdlc3RzKToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRF
U1RfRik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6Q29ubmVjdGlvbjo6d2ViU29ja2V0SGFuZHNoYWtlKToKKyAg
ICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwOgor
ICAgICAgICAoV1RSOjpjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JDYWlyb1N1cmZhY2UpOgorICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvY2cvVGVzdEludm9jYXRpb25DRy5jcHA6CisgICAgICAg
IChXVFI6OmNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckNvbnRleHQpOgorCiAyMDIxLTA2LTExICBG
dWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIFtXaW5d
W0R1bXBSZW5kZXJUcmVlXSAtLW5vLXRpbWVvdXQgc3dpdGNoIGRvZXNuJ3Qgd29yawpJbmRleDog
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2Fpcm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fp
cm8uY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9Q
aXhlbER1bXBTdXBwb3J0Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBA
IHZvaWQgY29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQml0bWFwQ29udGUKICAgICBTSEExIHNoYTE7
CiAgICAgdW5zaWduZWQgY2hhciogYml0bWFwRGF0YSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpKTsKICAgICBmb3IgKHVu
c2lnbmVkIHJvdyA9IDA7IHJvdyA8IHBpeGVsc0hpZ2g7IHJvdysrKSB7Ci0gICAgICAgIHNoYTEu
YWRkQnl0ZXMoYml0bWFwRGF0YSwgNCAqIHBpeGVsc1dpZGUpOworICAgICAgICBzaGExLmFkZEJ5
dGVzKFNwYW4geyBiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lkZSB9KTsKICAgICAgICAgYml0bWFw
RGF0YSArPSBieXRlc1BlclJvdzsKICAgICB9CiAgICAgU0hBMTo6RGlnZXN0IGhhc2g7CkluZGV4
OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jZy9QaXhlbER1bXBTdXBwb3J0Q0cuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRDRy5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBv
cnRDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDE0ICs4OCwxNCBAQCB2b2lkIGNvbXB1dGVT
SEExSGFzaFN0cmluZ0ZvckJpdG1hcENvbnRlCiAgICAgICAgICAgICB1aW50MzJfdCBidWZmZXJb
cGl4ZWxzV2lkZV07CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNvbHVtbiA9IDA7IGNvbHVt
biA8IHBpeGVsc1dpZGU7IGNvbHVtbisrKQogICAgICAgICAgICAgICAgIGJ1ZmZlcltjb2x1bW5d
ID0gT1NSZWFkTGl0dGxlSW50MzIoYml0bWFwRGF0YSwgNCAqIGNvbHVtbik7Ci0gICAgICAgICAg
ICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZlciks
IDQgKiBwaXhlbHNXaWRlKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IGJ1ZmZl
ciwgcGl4ZWxzV2lkZSB9KTsKICAgICAgICAgICAgIGJpdG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7
CiAgICAgICAgIH0KICAgICB9IGVsc2UKICNlbmRpZgogICAgIHsKICAgICAgICAgZm9yICh1bnNp
Z25lZCByb3cgPSAwOyByb3cgPCBwaXhlbHNIaWdoOyByb3crKykgewotICAgICAgICAgICAgc2hh
MS5hZGRCeXRlcyhiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lkZSk7CisgICAgICAgICAgICBzaGEx
LmFkZEJ5dGVzKFNwYW4geyBiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lkZSB9KTsKICAgICAgICAg
ICAgIGJpdG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9CbG9vbUZpbHRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQmxvb21GaWx0ZXIuY3BwCShyZXZpc2lv
biAyNzg4MDkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9CbG9vbUZpbHRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgc3RhdGljIFZlY3RvcjxTSEExOjpE
aWdlc3Q+IGdlbmVyYXRlUmFuZAogICAgIFNIQTEgc2hhMTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgaGFzaENvdW50OyArK2kpIHsKICAgICAgICAgZG91YmxlIHJhbmRvbSA9IHJhbmRv
bU51bWJlcigpOwotICAgICAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KCZyYW5kb20pLCBzaXplb2YoZG91YmxlKSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3Bh
biB7ICZyYW5kb20sIDEgfSk7CiAgICAgICAgIFNIQTE6OkRpZ2VzdCBkaWdlc3Q7CiAgICAgICAg
IHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsKICAgICAgICAgaGFzaGVzLmFwcGVuZChkaWdlc3Qp
OwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVT
eXN0ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsOCArMTMzLDggQEAgVEVTVF9GKEZpbGVT
eXN0ZW1UZXN0LCBNYXBwaW5nRXhpc3RpbmdGaQogICAgIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVE
YXRhIG1hcHBlZEZpbGVEYXRhKHRlbXBGaWxlUGF0aCgpLCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxl
TW9kZTo6U2hhcmVkLCBzdWNjZXNzKTsKICAgICBFWFBFQ1RfVFJVRShzdWNjZXNzKTsKICAgICBF
WFBFQ1RfVFJVRSghIW1hcHBlZEZpbGVEYXRhKTsKLSAgICBFWFBFQ1RfVFJVRShtYXBwZWRGaWxl
RGF0YS5zaXplKCkgPT0gc3RybGVuKEZpbGVTeXN0ZW1UZXN0RGF0YSkpOwotICAgIEVYUEVDVF9U
UlVFKHN0cm5zdHIoRmlsZVN5c3RlbVRlc3REYXRhLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4o
bWFwcGVkRmlsZURhdGEuZGF0YSgpKSwgbWFwcGVkRmlsZURhdGEuc2l6ZSgpKSk7CisgICAgRVhQ
RUNUX1RSVUUobWFwcGVkRmlsZURhdGEuZGF0YSgpLnNpemUoKSA9PSBzdHJsZW4oRmlsZVN5c3Rl
bVRlc3REYXRhKSk7CisgICAgRVhQRUNUX1RSVUUoc3RybnN0cihGaWxlU3lzdGVtVGVzdERhdGEs
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KG1hcHBlZEZpbGVEYXRhLmRhdGEoKS5kYXRh
KCkpLCBtYXBwZWRGaWxlRGF0YS5kYXRhKCkuc2l6ZSgpKSk7CiB9CiAKIFRFU1RfRihGaWxlU3lz
dGVtVGVzdCwgTWFwcGluZ0V4aXN0aW5nRW1wdHlGaWxlKQpJbmRleDogVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvU0hBMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvU0hBMS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL1NIQTEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBA
IHN0YXRpYyB2b2lkIGV4cGVjdFNIQTEoQ1N0cmluZyBpbnB1dCwgaW4KIHsKICAgICBTSEExIHNo
YTE7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXBlYXQ7ICsraSkKLSAgICAgICAgc2hhMS5h
ZGRCeXRlcyhpbnB1dCk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoaW5wdXQuYnl0ZXMoKSk7CiAg
ICAgQ1N0cmluZyBhY3R1YWwgPSBzaGExLmNvbXB1dGVIZXhEaWdlc3QoKTsKIAogICAgIEFTU0VS
VF9FUShleHBlY3RlZC5sZW5ndGgoKSwgYWN0dWFsLmxlbmd0aCgpKTsKSW5kZXg6IFRvb2xzL1Rl
c3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0
V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW0JKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQw
LDExICszNDAsMTEgQEAgdm9pZCBDb25uZWN0aW9uOjp3ZWJTb2NrZXRIYW5kc2hha2UoQ29tcAog
CiAgICAgICAgICAgICBjb25zdGV4cHIgYXV0byogd2ViU29ja2V0S2V5R1VJRCA9ICIyNThFQUZB
NS1FOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTEiOwogICAgICAgICAgICAgU0hBMSBzaGExOwot
ICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihrZXlCZWdpbiksIGtleUVuZCAtIGtleUJlZ2luKTsKLSAgICAgICAgICAgIHNoYTEuYWRkQnl0
ZXMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4od2ViU29ja2V0S2V5R1VJRCksIHN0
cmxlbih3ZWJTb2NrZXRLZXlHVUlEKSk7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKFNwYW4g
eyBrZXlCZWdpbiwga2V5RW5kIH0pOworICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsg
d2ViU29ja2V0S2V5R1VJRCwgc3RybGVuKHdlYlNvY2tldEtleUdVSUQpIH0pOwogICAgICAgICAg
ICAgU0hBMTo6RGlnZXN0IGhhc2g7CiAgICAgICAgICAgICBzaGExLmNvbXB1dGVIYXNoKGhhc2gp
OwotICAgICAgICAgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGhhc2guZGF0YSgpLCBT
SEExOjpoYXNoU2l6ZSk7CisgICAgICAgICAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmco
aGFzaCk7CiAgICAgICAgIH07CiAKICAgICAgICAgY29ubmVjdGlvbi5zZW5kKEhUVFBSZXNwb25z
ZSgxMDEsIHsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2Fpcm8vVGVzdEludm9jYXRp
b25DYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jYWlyby9U
ZXN0SW52b2NhdGlvbkNhaXJvLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9jYWlyby9UZXN0SW52b2NhdGlvbkNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTIsNyArNTIsNyBAQCBzdGF0aWMgdm9pZCBjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JDYWly
CiAgICAgU0hBMSBzaGExOwogICAgIHVuc2lnbmVkIGNoYXIqIGJpdG1hcERhdGEgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNl
KSk7CiAgICAgZm9yIChzaXplX3Qgcm93ID0gMDsgcm93IDwgcGl4ZWxzSGlnaDsgKytyb3cpIHsK
LSAgICAgICAgc2hhMS5hZGRCeXRlcyhiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lkZSk7CisgICAg
ICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlIH0pOwog
ICAgICAgICBiaXRtYXBEYXRhICs9IGJ5dGVzUGVyUm93OwogICAgIH0KICAgICBTSEExOjpEaWdl
c3QgaGFzaDsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2cvVGVzdEludm9jYXRpb25D
Ry5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2Nh
dGlvbkNHLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9j
Zy9UZXN0SW52b2NhdGlvbkNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQCB2
b2lkIGNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckNvbnRleHQoQ0dDCiAjZW5kaWYKICAgICB7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgcm93ID0gMDsgcm93IDwgcGl4ZWxzSGlnaDsgcm93KyspIHsK
LSAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoYml0bWFwRGF0YSwgNCAqIHBpeGVsc1dpZGUpOwor
ICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgYml0bWFwRGF0YSwgNCAqIHBpeGVsc1dp
ZGUgfSk7CiAgICAgICAgICAgICBiaXRtYXBEYXRhICs9IGJ5dGVzUGVyUm93OwogICAgICAgICB9
CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431296</attachid>
            <date>2021-06-13 19:06:48 -0700</date>
            <delta_ts>2021-06-13 19:09:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226887-20210613190647.patch</filename>
            <type>text/plain</type>
            <size>203101</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBA
CisyMDIxLTA2LTEyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogQVBJL0pTU2NyaXB0Lm1tOgorICAg
ICAgICAoK1tKU1NjcmlwdCBzY3JpcHRPZlR5cGU6bWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTp3
aXRoU291cmNlVVJMOmFuZEJ5dGVjb2RlQ2FjaGU6aW5WaXJ0dWFsTWFjaGluZTplcnJvcjpdKToK
KyAgICAgICAgKC1bSlNTY3JpcHQgcmVhZENhY2hlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHdy
aXRlQ2FjaGU6XSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9ja0hhc2g6OkNvZGVCbG9ja0hhc2gpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHA6CisgICAgICAgIChJbnNw
ZWN0b3I6OmJhY2tlbmRDb21tYW5kc0hhc2gpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZm
ZXIuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJDb250ZW50czo6d3JpdGFibGVCeXRlcyk6
CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyQ29udGVudHM6OmJ5dGVzIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6QXJyYXlCdWZmZXI6OndyaXRhYmxlQnl0ZXMpOgorICAgICAgICAoSlNDOjpBcnJh
eUJ1ZmZlcjo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
Lmg6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6d3JpdGFibGVCeXRlcyk6CisgICAg
ICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRp
bWUvQ2FjaGVQYXlsb2FkLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVQYXlsb2FkOjptYWtlTWFw
cGVkUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6bWFrZU1hbGxvY1BheWxv
YWQpOgorICAgICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6Om1ha2VFbXB0eVBheWxvYWQpOgorICAg
ICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6OkNhY2hlUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNh
Y2hlUGF5bG9hZDo6ZnJlZURhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVQYXlsb2FkLmg6
CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6ZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlUGF5bG9hZDo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6
Q2FjaGVQYXlsb2FkKToKKyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKToKKwogMjAyMS0w
Ni0xMSAgUGF0cmljayBBbmdsZSAgPHBhbmdsZUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogQWRkIGluc3RydW1lbnRhdGlvbiB0byBub2RlIGRlc3RydWN0aW9uIGZvciBJbnNw
ZWN0b3JET01BZ2VudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMTMgKzEzNCwxMyBAQCArIChpbnN0YW5jZXR5cGUpc2Ny
aXB0T2ZUeXBlOihKU1NjcmlwdFR5CiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4g
Y3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJGaWxlIGF0IHBhdGggJUAg
Y291bGQgbm90IGJlIG1hcHBlZC4iLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihzeXN0ZW1QYXRo
KV0sIGVycm9yKTsKIAotICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCkpKQor
ICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmlsZURhdGEuZGF0YSgpLnNpemUoKSkpCiAg
ICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIk5v
dCBhbGwgY2hhcmFjdGVycyBpbiBmaWxlIGF0ICVAIGFyZSBBU0NJSS4iLCBzdGF0aWNfY2FzdDxO
U1N0cmluZyAqPihzeXN0ZW1QYXRoKV0sIGVycm9yKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gYWRv
cHROUyhbW0pTU2NyaXB0IGFsbG9jXSBpbml0XSk7CiAgICAgcmVzdWx0LT5tX3ZpcnR1YWxNYWNo
aW5lID0gdm07CiAgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOwotICAgIHJlc3VsdC0+bV9zb3Vy
Y2UgPSBTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcoYml0d2lzZV9jYXN0
PGNvbnN0IExDaGFyKj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpKSk7CisgICAg
cmVzdWx0LT5tX3NvdXJjZSA9IFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWlu
ZyhiaXR3aXNlX2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmls
ZURhdGEuZGF0YSgpLnNpemUoKSkpOwogICAgIHJlc3VsdC0+bV9tYXBwZWRTb3VyY2UgPSBXVEZN
b3ZlKGZpbGVEYXRhKTsKICAgICByZXN1bHQtPm1fc291cmNlVVJMID0gc291cmNlVVJMOwogICAg
IHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7CkBAIC0xNjgsMjQgKzE2OCwyMyBAQCAt
ICh2b2lkKXJlYWRDYWNoZQogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgY29uc3QgdWludDhfdCogZmlsZURhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihtYXBwZWRGaWxlLmRhdGEoKSk7Ci0gICAgdW5zaWduZWQgZmlsZVRvdGFsU2l6ZSA9IG1h
cHBlZEZpbGUuc2l6ZSgpOworICAgIGF1dG8gZmlsZURhdGEgPSBtYXBwZWRGaWxlLmRhdGEoKTsK
IAogICAgIC8vIEVuc3VyZSB3ZSBhdCBsZWFzdCBoYXZlIGEgU0hBMTo6RGlnZXN0IHRvIHJlYWQu
Ci0gICAgaWYgKGZpbGVUb3RhbFNpemUgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgeworICAgIGlm
IChmaWxlRGF0YS5zaXplKCkgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgewogICAgICAgICBGaWxl
U3lzdGVtOjpkZWxldGVGaWxlKGNhY2hlRmlsZW5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgdW5zaWduZWQgZmlsZURhdGFTaXplID0gZmlsZVRvdGFsU2l6ZSAtIHNpemVvZihT
SEExOjpEaWdlc3QpOworICAgIHVuc2lnbmVkIGZpbGVEYXRhU2l6ZSA9IGZpbGVEYXRhLnNpemUo
KSAtIHNpemVvZihTSEExOjpEaWdlc3QpOwogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFz
aDsKICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhmaWxlRGF0YSwgZmlsZURhdGFT
aXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKGZpbGVEYXRhLmZpcnN0KGZpbGVEYXRhU2l6ZSkpOwog
ICAgIHNoYTEuY29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2VzdCBm
aWxlSGFzaDsKLSAgICBtZW1jcHkoJmZpbGVIYXNoLCBmaWxlRGF0YSArIGZpbGVEYXRhU2l6ZSwg
c2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOworICAgIG1lbWNweSgmZmlsZUhhc2gsIGZpbGVEYXRhLmRh
dGEoKSArIGZpbGVEYXRhU2l6ZSwgc2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOwogCiAgICAgaWYgKGNv
bXB1dGVkSGFzaCAhPSBmaWxlSGFzaCkgewogICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxl
KGNhY2hlRmlsZW5hbWUpOwpAQCAtMzQzLDcgKzM0Miw3IEBAIC0gKEJPT0wpd3JpdGVDYWNoZToo
U3RyaW5nJillcnJvcgogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFzaDsKICAgICBTSEEx
IHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhtX2NhY2hlZEJ5dGVjb2RlLT5kYXRhKCksIG1fY2Fj
aGVkQnl0ZWNvZGUtPnNpemUoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgbV9jYWNoZWRC
eXRlY29kZS0+ZGF0YSgpLCBtX2NhY2hlZEJ5dGVjb2RlLT5zaXplKCkgfSk7CiAgICAgc2hhMS5j
b21wdXRlSGFzaChjb21wdXRlZEhhc2gpOwogICAgIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKHRl
bXBGRCwgY29tcHV0ZWRIYXNoLmRhdGEoKSwgc2l6ZW9mKGNvbXB1dGVkSGFzaCkpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0hhc2guY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgQ29kZUJsb2Nr
SGFzaDo6Q29kZUJsb2NrSGFzaChjb25zdCBTb3VyYwogICAgIEFTU0VSVChzb3VyY2VDb2RlLmxl
bmd0aCgpID49IDApOwogICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhTb3VyY2VDb2RlTGVuZ3Ro
VG9IYXNoID0gNTAwICogTUI7CiAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzb3VyY2VD
b2RlLmxlbmd0aCgpKSA8IG1heFNvdXJjZUNvZGVMZW5ndGhUb0hhc2gpCi0gICAgICAgIHNoYTEu
YWRkQnl0ZXMoc291cmNlQ29kZS50b1VURjgoKSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoc291
cmNlQ29kZS50b1VURjgoKS5ieXRlcygpKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gSnVzdCBo
YXNoIHdpdGggdGhlIGxlbmd0aCBhbmQgc2FtcGxlcyBvZiB0aGUgc291cmNlIHN0cmluZyBpbnN0
ZWFkLgogICAgICAgICBTdHJpbmdWaWV3IHN0ciA9IHNvdXJjZUNvZGUucHJvdmlkZXIoKS0+c291
cmNlKCk7CkBAIC02MiwxMCArNjIsMTAgQEAgQ29kZUJsb2NrSGFzaDo6Q29kZUJsb2NrSGFzaChj
b25zdCBTb3VyYwogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHIubGVuZ3RoKCk7CiAgICAg
ICAgIHVuc2lnbmVkIHN0ZXAgPSAobGVuZ3RoID4+IDEwKSArIDE7CiAKLSAgICAgICAgc2hhMS5h
ZGRCeXRlcyhiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KCZsZW5ndGgpLCBzaXplb2YobGVuZ3RoKSk7
CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZsZW5ndGgsIDEgfSk7CiAgICAgICAgIGRv
IHsKICAgICAgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IHN0cltpbmRleF07Ci0gICAgICAgICAg
ICBzaGExLmFkZEJ5dGVzKGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oJmNoYXJhY3RlciksIHNpemVv
ZihjaGFyYWN0ZXIpKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZjaGFyYWN0
ZXIsIDEgfSk7CiAgICAgICAgICAgICBvbGRJbmRleCA9IGluZGV4OwogICAgICAgICAgICAgaW5k
ZXggKz0gc3RlcDsKICAgICAgICAgfSB3aGlsZSAoaW5kZXggPiBvbGRJbmRleCAmJiBpbmRleCA8
IGxlbmd0aCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VIYXNo
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VI
YXNoLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BhcnNlSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiBQYXJzZUhhc2g6OlBhcnNlSGFzaChjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VD
b2RlKQogewogICAgIFNIQTEgc2hhMTsKLSAgICBzaGExLmFkZEJ5dGVzKHNvdXJjZUNvZGUudG9V
VEY4KCkpOworICAgIHNoYTEuYWRkQnl0ZXMoc291cmNlQ29kZS50b1VURjgoKS5ieXRlcygpKTsK
ICAgICBTSEExOjpEaWdlc3QgZGlnZXN0OwogICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsK
ICAgICB1bnNpZ25lZCBoYXNoID0gZGlnZXN0WzBdIHwgKGRpZ2VzdFsxXSA8PCA4KSB8IChkaWdl
c3RbMl0gPDwgMTYpIHwgKGRpZ2VzdFszXSA8PCAyNCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1JlbW90ZUluc3BlY3RvclV0aWxzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1Jl
bW90ZUluc3BlY3RvclV0aWxzLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgY29uc3QgQ1N0cmluZyYgYmFja2VuZENv
bW1hbmRzSGFzaCgpCiAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSA9IGdfYnl0ZXNfZ2V0X2Rh
dGEoYnl0ZXMuZ2V0KCksICZkYXRhU2l6ZSk7CiAgICAgICAgIEFTU0VSVChkYXRhU2l6ZSk7CiAg
ICAgICAgIFNIQTEgc2hhMTsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhzdGF0aWNfY2FzdDxjb25z
dCB1aW50OF90Kj4oZGF0YSksIGRhdGFTaXplKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFu
IHsgc3RhdGljX2Nhc3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSksIGRhdGFTaXplIH0pOwogICAg
ICAgICBoZXhEaWdlc3QgPSBzaGExLmNvbXB1dGVIZXhEaWdlc3QoKTsKICAgICB9CiAgICAgcmV0
dXJuIGhleERpZ2VzdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogI2luY2x1ZGUgPHd0Zi9QYWNrZWRSZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZl
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtODAsNyAr
ODEsMTAgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBt
X2RhdGEuZ2V0TWF5QmVOdWxsKHNpemVJbkJ5dGVzKCkpOyB9CiAgICAgdW5zaWduZWQgc2l6ZUlu
Qnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX3NpemVJbkJ5dGVzOyB9Ci0gICAgCisKKyAgICBTcGFu
PHN0ZDo6Ynl0ZT4gd3JpdGFibGVCeXRlcygpIHsgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8c3RkOjpi
eXRlKj4oZGF0YSgpKSwgc2l6ZUluQnl0ZXMoKSB9OyB9CisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4geyBzdGF0aWNfY2FzdDxjb25zdCBzdGQ6OmJ5dGUq
PihkYXRhKCkpLCBzaXplSW5CeXRlcygpIH07IH0KKwogICAgIGJvb2wgaXNTaGFyZWQoKSBjb25z
dCB7IHJldHVybiBtX3NoYXJlZDsgfQogICAgIAogcHJpdmF0ZToKQEAgLTEyNyw3ICsxMzEsOSBA
QCBwdWJsaWM6CiAgICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKICAgICBpbmxpbmUgY29uc3Qgdm9p
ZCogZGF0YSgpIGNvbnN0OwogICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7
Ci0gICAgCisgICAgaW5saW5lIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCk7CisgICAg
aW5saW5lIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAgICAgdm9pZCBt
YWtlU2hhcmVkKCk7CiAgICAgdm9pZCBzZXRTaGFyaW5nTW9kZShBcnJheUJ1ZmZlclNoYXJpbmdN
b2RlKTsKICAgICBpbmxpbmUgYm9vbCBpc1NoYXJlZCgpIGNvbnN0OwpAQCAtMTk3LDYgKzIwMywx
NiBAQCB1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJu
IG1fY29udGVudHMuc2l6ZUluQnl0ZXMoKTsKIH0KIAorU3BhbjxzdGQ6OmJ5dGU+IEFycmF5QnVm
ZmVyOjp3cml0YWJsZUJ5dGVzKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZW50cy53cml0YWJsZUJ5
dGVzKCk7Cit9CisKK1NwYW48Y29uc3Qgc3RkOjpieXRlPiBBcnJheUJ1ZmZlcjo6Ynl0ZXMoKSBj
b25zdAoreworICAgIHJldHVybiBtX2NvbnRlbnRzLmJ5dGVzKCk7Cit9CisKIGJvb2wgQXJyYXlC
dWZmZXI6OmlzU2hhcmVkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb250ZW50cy5pc1NoYXJl
ZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZm
ZXJWaWV3LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4Niw5IEBAIHB1
YmxpYzoKIAogICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVM
ZW5ndGg7IH0KIAorICAgIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCkgeyByZXR1cm4g
eyBzdGF0aWNfY2FzdDxzdGQ6OmJ5dGUqPihkYXRhKCkpLCBieXRlTGVuZ3RoKCkgfTsgfQorICAg
IFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0IHsgcmV0dXJuIHsgc3RhdGljX2Nh
c3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSgpKSwgYnl0ZUxlbmd0aCgpIH07IH0KKwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0RGV0YWNoYWJsZShib29sKTsKICAgICBib29sIGlzRGV0
YWNoYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNEZXRhY2hhYmxlOyB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlUGF5bG9hZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsMjcgKzMwLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogCiBD
YWNoZVBheWxvYWQgQ2FjaGVQYXlsb2FkOjptYWtlTWFwcGVkUGF5bG9hZChGaWxlU3lzdGVtOjpN
YXBwZWRGaWxlRGF0YSYmIGRhdGEpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZCh0cnVlLCBk
YXRhLmxlYWtIYW5kbGUoKSwgZGF0YS5zaXplKCkpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQo
dHJ1ZSwgZGF0YS5sZWFrSGFuZGxlKCkpOwogfQogCiBDYWNoZVBheWxvYWQgQ2FjaGVQYXlsb2Fk
OjptYWtlTWFsbG9jUGF5bG9hZChNYWxsb2NQdHI8dWludDhfdCwgVk1NYWxsb2M+JiYgZGF0YSwg
c2l6ZV90IHNpemUpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZChmYWxzZSwgZGF0YS5sZWFr
UHRyKCksIHNpemUpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQoZmFsc2UsIGFzV3JpdGFibGVC
eXRlcyhTcGFuIHsgZGF0YS5sZWFrUHRyKCksIHNpemUgfSkpOwogfQogCiBDYWNoZVBheWxvYWQg
Q2FjaGVQYXlsb2FkOjptYWtlRW1wdHlQYXlsb2FkKCkKIHsKLSAgICByZXR1cm4gQ2FjaGVQYXls
b2FkKHRydWUsIG51bGxwdHIsIDApOworICAgIHJldHVybiBDYWNoZVBheWxvYWQodHJ1ZSwgeyB9
KTsKIH0KIAogQ2FjaGVQYXlsb2FkOjpDYWNoZVBheWxvYWQoQ2FjaGVQYXlsb2FkJiYgb3RoZXIp
CiB7Ci0gICAgbV9tYXBwZWQgPSBvdGhlci5tX21hcHBlZDsKLSAgICBtX3NpemUgPSBvdGhlci5t
X3NpemU7Ci0gICAgbV9kYXRhID0gb3RoZXIubV9kYXRhOwotICAgIG90aGVyLm1fbWFwcGVkID0g
ZmFsc2U7Ci0gICAgb3RoZXIubV9kYXRhID0gbnVsbHB0cjsKLSAgICBvdGhlci5tX3NpemUgPSAw
OworICAgIG1fbWFwcGVkID0gc3RkOjpleGNoYW5nZShvdGhlci5tX21hcHBlZCwgZmFsc2UpOwor
ICAgIG1fZGF0YSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLCB7IH0pOwogfQogCiBDYWNo
ZVBheWxvYWQ6On5DYWNoZVBheWxvYWQoKQpAQCAtNjcsMTIgKzYzLDEzIEBAIENhY2hlUGF5bG9h
ZCYgQ2FjaGVQYXlsb2FkOjpvcGVyYXRvcj0oQ2EKIAogdm9pZCBDYWNoZVBheWxvYWQ6OmZyZWVE
YXRhKCkKIHsKLSAgICBpZiAoIW1fZGF0YSkKKyAgICBpZiAoIW1fZGF0YS5kYXRhKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBpZiAobV9tYXBwZWQpIHsKLSAgICAgICAgRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1fZGF0YSwgbV9zaXplKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZmFzdEZy
ZWUobV9kYXRhKTsKKworICAgIGlmIChtX21hcHBlZCkKKyAgICAgICAgRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1fZGF0YSk7CisgICAgZWxzZQorICAgICAgICBmYXN0RnJlZShtX2RhdGEu
ZGF0YSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHd0Zi9GaWxlU3lz
dGVtLmg+CiAjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MSwyMiArNDIsMjAgQEAgcHVibGljOgogICAgIEpT
X0VYUE9SVF9QUklWQVRFIH5DYWNoZVBheWxvYWQoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBD
YWNoZVBheWxvYWQmIG9wZXJhdG9yPShDYWNoZVBheWxvYWQmJiBvdGhlcik7CiAKLSAgICBjb25z
dCB1aW50OF90KiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBjb25zdCB1aW50OF90KiBkYXRhKCkg
Y29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9kYXRhLmRhdGEoKSk7
IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5zaXplKCk7IH0KIAog
cHJpdmF0ZToKLSAgICBDYWNoZVBheWxvYWQoYm9vbCBtYXBwZWQsIHZvaWQqIGRhdGEsIHNpemVf
dCBzaXplKQorICAgIENhY2hlUGF5bG9hZChib29sIG1hcHBlZCwgU3BhbjxzdGQ6OmJ5dGU+IGRh
dGEpCiAgICAgICAgIDogbV9tYXBwZWQobWFwcGVkKQotICAgICAgICAsIG1fc2l6ZShzaXplKQot
ICAgICAgICAsIG1fZGF0YShzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGF0YSkpCisgICAgICAgICwg
bV9kYXRhKGRhdGEpCiAgICAgewogICAgIH0KIAogICAgIHZvaWQgZnJlZURhdGEoKTsKIAogICAg
IGJvb2wgbV9tYXBwZWQ7Ci0gICAgc2l6ZV90IG1fc2l6ZTsKLSAgICB1aW50OF90KiBtX2RhdGE7
CisgICAgU3BhbjxzdGQ6OmJ5dGU+IG1fZGF0YTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1Bh
cnNlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNyArMjYxLDcg
QEAgYXV0byBTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKGNvbnN0IHVpbgogICAgIH0KIAogICAg
IGlmIChVTkxJS0VMWShPcHRpb25zOjp1c2VFYWdlcldlYkFzc2VtYmx5TW9kdWxlSGFzaGluZygp
KSkKLSAgICAgICAgbV9oYXNoZXIuYWRkQnl0ZXMoYnl0ZXMsIGJ5dGVzU2l6ZSk7CisgICAgICAg
IG1faGFzaGVyLmFkZEJ5dGVzKFNwYW4geyBieXRlcywgYnl0ZXNTaXplIH0pOwogCiAgICAgc2l6
ZV90IG9mZnNldEluQnl0ZXMgPSAwOwogICAgIHdoaWxlICh0cnVlKSB7CkluZGV4OiBTb3VyY2Uv
V1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw2OCBAQAorMjAyMS0wNi0xMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgQWRvcHQgU3BhbiBpbiBtb3JlIHBsYWNlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIFdURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmNwcDoKKyAgICAg
ICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjp+TWFwcGVkRmlsZURhdGEp
OgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6TWFwcGVkRmlsZURhdGE6Om1hcEZpbGVI
YW5kbGUpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6dW5tYXBWaWV3T2ZGaWxlKToK
KyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Om1hcFRvRmlsZSk6CisgICAgICAgICogd3Rm
L0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVE
YXRhOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6
Ok1hcHBlZEZpbGVEYXRhOjpkYXRhIGNvbnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUlt
cGw6Ok1hcHBlZEZpbGVEYXRhOjpsZWFrSGFuZGxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3Rl
bUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YSk6CisgICAgICAgIChXVEY6OkZp
bGVTeXN0ZW1JbXBsOjpNYXBwZWRGaWxlRGF0YTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6
RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpzaXplIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1NIQTEuY3BwOgorICAgICAgICAoV1RG
OjpTSEExOjphZGRCeXRlcyk6CisgICAgICAgIChXVEY6OlNIQTE6OmZpbmFsaXplKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6U0hBMTo6cHJvY2Vzc0Jsb2NrKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6U0hBMTo6cmVzZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTSEExOjpoZXhEaWdl
c3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTSEExOjpjb21wdXRlSGV4RGlnZXN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3dGYvU0hBMS5oOgorICAgICAgICAoV1RGOjpTSEExOjphZGRCeXRl
cyk6CisgICAgICAgICogd3RmL1ZlY3Rvci5oOgorICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZS9Q
ZXJzaXN0ZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPENT
dHJpbmc+OjplbmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8Q1N0cmlu
Zz46OmRlY29kZSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTdHJpbmc+Ojpl
bmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVjb2RlU3RyaW5nVGV4dCk6Cisg
ICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUpOgor
ICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKToK
KyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oOgorICAgICAgICAq
IHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5jcHA6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyOjpEZWNvZGVyKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6
OkRlY29kZXI6OmJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFkKToKKyAgICAgICAgKFdURjo6UGVy
c2lzdGVuY2U6OkRlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjp2ZXJpZnlDaGVja3N1bSk6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyOjp+RGVjb2Rlcik6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3Bl
cnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmg6CisgICAgICAgICogd3RmL3BlcnNpc3RlbmNl
L1BlcnNpc3RlbnRFbmNvZGVyLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29k
ZXI6Omdyb3cpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6dXBkYXRlQ2hl
Y2tzdW1Gb3JEYXRhKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6OmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjpl
bmNvZGVOdW1iZXIpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6ZW5jb2Rl
Q2hlY2tzdW0pOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6RW5jb2Rlcik6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjp+RW5jb2Rlcik6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmg6
CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjpidWZmZXIgY29uc3QpOgorICAg
ICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIp
OgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6YnVmZmVyU2l6ZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL3RleHQvQmFzZTY0Lmg6CisgICAgICAgIChXVEY6OmJh
c2U2NEVuY29kZVRvVmVjdG9yKToKKyAgICAgICAgKFdURjo6YmFzZTY0RW5jb2RlVG9TdHJpbmcp
OgorICAgICAgICAqIHd0Zi90ZXh0L0NTdHJpbmcuaDoKKwogMjAyMS0wNi0xMSAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgV2Vha0hhc2hNYXAKSW5kZXg6
IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtNjkyLDYgKzY5Miw4IEBACiAJCUFEODlCNkI5MUU2NDE1MEYwMDkwNzA3RiAvKiBN
ZW1vcnlQcmVzc3VyZUhhbmRsZXJDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IE1lbW9yeVByZXNzdXJlSGFuZGxlckNvY29hLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBREYyQ0U2NDFFMzlGMTA2MDA2ODg5REIgLyogTWVtb3J5Rm9vdHBy
aW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lbW9yeUZvb3RwcmludC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREYyQ0U2NTFFMzlGMTA2MDA2ODg5REIg
LyogTWVtb3J5Rm9vdHByaW50Q29jb2EuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTWVtb3J5Rm9vdHByaW50Q29jb2EuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlCQzcwMEI0NDI2NzY2ODM0MDA0OUVERjIgLyogU3BhbkNvY29hLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNwYW5Db2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzcwMEI0
NTI2NzY2OUMxMDA0OUVERjIgLyogU3BhbkNGLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwYW5DRi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0EzMEM3RjI2NkQzMDM0MDAwRDIzMEMgLyog
U3Bhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTcGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyQkNGQzNFMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5ndWFnZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYW5ndWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyQkNGQzNGMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5ndWFnZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYW5ndWFnZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtODQwLDYgKzg0Miw3IEBACiAJCQkJQzJCQ0ZDNDExRjYxRDYxNjAwQzky
MjJDIC8qIExhbmd1YWdlQ0YuY3BwICovLAogCQkJCTJDREVEMEVFMTgxMTVDMzgwMDREQkE3MCAv
KiBSdW5Mb29wQ0YuY3BwICovLAogCQkJCUEzRUU1QzNCMjFGRkFDN0MwMEZBQkQ2MSAvKiBTY2hl
ZHVsZVBhaXJDRi5jcHAgKi8sCisJCQkJQkM3MDBCNDUyNjc2NjlDMTAwNDlFREYyIC8qIFNwYW5D
Ri5oICovLAogCQkJCTFBRkRFNjQ3MTk1MjAxQzMwMEM0OEZGQSAvKiBUeXBlQ2FzdHNDRi5oICov
LAogCQkJCTVDMUYwNTk0MjE2NDM3QjMwMDM5MzAyQyAvKiBVUkxDRi5jcHAgKi8sCiAJCQkpOwpA
QCAtMTU4MSw2ICsxNTg0LDcgQEAKIAkJCQkxQ0E4NUNBODI0MUIwQjI2MDA3MUMyRjUgLyogUnVu
dGltZUFwcGxpY2F0aW9uQ2hlY2tzQ29jb2EuY3BwICovLAogCQkJCTFDQTg1Q0E3MjQxQjBCMTEw
MDcxQzJGNSAvKiBSdW50aW1lQXBwbGljYXRpb25DaGVja3NDb2NvYS5oICovLAogCQkJCUEzMEQ0
MTJDMUYwREUwQkEwMEI3MTk1NCAvKiBTb2Z0TGlua2luZy5oICovLAorCQkJCUJDNzAwQjQ0MjY3
NjY4MzQwMDQ5RURGMiAvKiBTcGFuQ29jb2EuaCAqLywKIAkJCQlFQjYxRURDNjI0MDlDQ0MwMDAx
RUZFMzYgLyogU3lzdGVtVHJhY2luZ0NvY29hLmNwcCAqLywKIAkJCQk1Q0MwRUU4NjIxNjJCQzIy
MDBBMUE4NDIgLyogVVJMQ29jb2EubW0gKi8sCiAJCQkJOTMyNDE2NTcyNDNCQzJFNTAwMzJGQUFF
IC8qIFZlY3RvckNvY29hLmggKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxOSw5ICszMTksOSBAQCBib29sIGV4Y2x1ZGVGcm9tQmFja3VwKGNvbnN0IFN0cmluZyYp
CiAKIE1hcHBlZEZpbGVEYXRhOjp+TWFwcGVkRmlsZURhdGEoKQogewotICAgIGlmICghbV9maWxl
RGF0YSkKKyAgICBpZiAoIW1fZmlsZURhdGEuZGF0YSgpKQogICAgICAgICByZXR1cm47Ci0gICAg
dW5tYXBWaWV3T2ZGaWxlKG1fZmlsZURhdGEsIG1fZmlsZVNpemUpOworICAgIHVubWFwVmlld09m
RmlsZShtX2ZpbGVEYXRhKTsKIH0KIAogTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKGNv
bnN0IFN0cmluZyYgZmlsZVBhdGgsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUsIGJvb2wmIHN1Y2Nl
c3MpCkBAIC0zODMsMTQgKzM4MywxMyBAQCBib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFu
ZGxlKFBsYXRmCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBtX2ZpbGVEYXRh
ID0gZGF0YTsKLSAgICBtX2ZpbGVTaXplID0gc2l6ZTsKKyAgICBtX2ZpbGVEYXRhID0gU3BhbiB7
IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpieXRlKj4oZGF0YSksIHNpemUgfTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCB1bm1hcFZpZXdPZkZpbGUodm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6
ZSkKK2Jvb2wgdW5tYXBWaWV3T2ZGaWxlKFNwYW48c3RkOjpieXRlPiBkYXRhKQogewotICAgIHJl
dHVybiAhbXVubWFwKGJ1ZmZlciwgc2l6ZSk7CisgICAgcmV0dXJuICFtdW5tYXAoZGF0YS5kYXRh
KCksIGRhdGEuc2l6ZSgpKTsKIH0KIAogI2VuZGlmCkBAIC00MzgsNyArNDM3LDcgQEAgU3RyaW5n
IGNyZWF0ZVRlbXBvcmFyeVppcEFyY2hpdmUoY29uc3QgUwogfQogI2VuZGlmCiAKLU1hcHBlZEZp
bGVEYXRhIG1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIHNpemVfdCBieXRlc1NpemUsIEZ1
bmN0aW9uPHZvaWQoY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4m
KT4mJiBhcHBseSwgUGxhdGZvcm1GaWxlSGFuZGxlKiBvdXRwdXRIYW5kbGUpCitNYXBwZWRGaWxl
RGF0YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBzaXplX3QgYnl0ZXNTaXplLCBGdW5j
dGlvbjx2b2lkKGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mKT4m
JiBhcHBseSwgUGxhdGZvcm1GaWxlSGFuZGxlKiBvdXRwdXRIYW5kbGUpCiB7CiAgICAgY29uc3Rl
eHByIGJvb2wgZmFpbElmRmlsZUV4aXN0cyA9IHRydWU7CiAgICAgYXV0byBoYW5kbGUgPSBGaWxl
U3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWRXcml0
ZSwgRmlsZVN5c3RlbTo6RmlsZUFjY2Vzc1Blcm1pc3Npb246OlVzZXIsIGZhaWxJZkZpbGVFeGlz
dHMpOwpAQCAtNDU1LDEyICs0NTQsMTIgQEAgTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxlKGNvbnN0
IFN0cmluZyYgcAogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIHZvaWQqIG1hcCA9
IGNvbnN0X2Nhc3Q8dm9pZCo+KG1hcHBlZEZpbGUuZGF0YSgpKTsKLSAgICB1aW50OF90KiBtYXBE
YXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1hcCk7CisgICAgYXV0byBtYXAgPSBtYXBwZWRG
aWxlLmRhdGEoKS5kYXRhKCk7CisgICAgYXV0byBtYXBEYXRhID0gbWFwOwogCi0gICAgYXBwbHko
WyZtYXBEYXRhXShjb25zdCB1aW50OF90KiBjaHVuaywgc2l6ZV90IGNodW5rU2l6ZSkgewotICAg
ICAgICBtZW1jcHkobWFwRGF0YSwgY2h1bmssIGNodW5rU2l6ZSk7Ci0gICAgICAgIG1hcERhdGEg
Kz0gY2h1bmtTaXplOworICAgIGFwcGx5KFsmbWFwRGF0YV0oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+
IGNodW5rKSB7CisgICAgICAgIG1lbWNweShtYXBEYXRhLCBjaHVuay5kYXRhKCksIGNodW5rLnNp
emUoKSk7CisgICAgICAgIG1hcERhdGEgKz0gY2h1bmsuc2l6ZSgpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9KTsKIApJbmRleDogU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICsz
NCw3IEBACiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KQEAgLTIxMCw3ICsyMTEsNyBAQCBXVEZfRVhQT1JUX1BSSVZBVEUg
U3RyaW5nIHJlYWxQYXRoKGNvbnN0CiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc1NhZmVUb1Vz
ZU1lbW9yeU1hcEZvclBhdGgoY29uc3QgU3RyaW5nJik7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBtYWtlU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChjb25zdCBTdHJpbmcmKTsKIAotV1RGX0VY
UE9SVF9QUklWQVRFIGJvb2wgdW5tYXBWaWV3T2ZGaWxlKHZvaWQqIGJ1ZmZlciwgc2l6ZV90KTsK
K1dURl9FWFBPUlRfUFJJVkFURSBib29sIHVubWFwVmlld09mRmlsZShTcGFuPHN0ZDo6Ynl0ZT4p
OwogCiBjbGFzcyBNYXBwZWRGaWxlRGF0YSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CkBAIC0yMjMsMTcgKzIyNCwxNSBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5N
YXBwZWRGaWxlRGF0YSgpOwogICAgIE1hcHBlZEZpbGVEYXRhJiBvcGVyYXRvcj0oTWFwcGVkRmls
ZURhdGEmJik7CiAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
ISFtX2ZpbGVEYXRhOyB9Ci0gICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZmlsZURhdGE7IH0KLSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9maWxlU2l6
ZTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fZmls
ZURhdGEuZGF0YSgpOyB9CisgICAgU3BhbjxzdGQ6OmJ5dGU+IGRhdGEoKSBjb25zdCB7IHJldHVy
biBtX2ZpbGVEYXRhOyB9CiAKLSAgICB2b2lkKiBsZWFrSGFuZGxlKCkgeyByZXR1cm4gc3RkOjpl
eGNoYW5nZShtX2ZpbGVEYXRhLCBudWxscHRyKTsgfQorICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBT
cGFuPHN0ZDo6Ynl0ZT4gbGVha0hhbmRsZSgpIHsgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9maWxl
RGF0YSwgeyB9KTsgfQogCiBwcml2YXRlOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIG1h
cEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBGaWxlT3Blbk1vZGUsIE1hcHBlZEZpbGVN
b2RlKTsKIAotICAgIHZvaWQqIG1fZmlsZURhdGEgeyBudWxscHRyIH07Ci0gICAgdW5zaWduZWQg
bV9maWxlU2l6ZSB7IDAgfTsKKyAgICBTcGFuPHN0ZDo6Ynl0ZT4gbV9maWxlRGF0YTsKIH07CiAK
IGlubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGxhdGZvcm1GaWxlSGFuZGxl
IGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUgbWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKQEAgLTI0Nywy
MSArMjQ2LDE5IEBAIGlubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGwKIH0K
IAogaW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShNYXBwZWRGaWxlRGF0YSYm
IG90aGVyKQotICAgIDogbV9maWxlRGF0YShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEs
IG51bGxwdHIpKQotICAgICwgbV9maWxlU2l6ZShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZVNp
emUsIDApKQorICAgIDogbV9maWxlRGF0YShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEs
IHsgfSkpCiB7CiB9CiAKIGlubGluZSBNYXBwZWRGaWxlRGF0YSYgTWFwcGVkRmlsZURhdGE6Om9w
ZXJhdG9yPShNYXBwZWRGaWxlRGF0YSYmIG90aGVyKQogewotICAgIG1fZmlsZURhdGEgPSBzdGQ6
OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEsIG51bGxwdHIpOwotICAgIG1fZmlsZVNpemUgPSBz
dGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZVNpemUsIDApOworICAgIG1fZmlsZURhdGEgPSBzdGQ6
OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEsIHsgfSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQog
CiAvLyBUaGlzIGNyZWF0ZXMgdGhlIGRlc3RpbmF0aW9uIGZpbGUsIG1hcHMgaXQsIHdyaXRlIHRo
ZSBwcm92aWRlZCBkYXRhIHRvIGl0IGFuZCByZXR1cm5zIHRoZSBtYXBwZWQgZmlsZS4KIC8vIFRo
aXMgZnVuY3Rpb24gZmFpbHMgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIGZpbGUgYXQgdGhlIGRlc3Rp
bmF0aW9uIHBhdGguCi1XVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVuY3Rpb248dm9pZChjb25z
dCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYpPiYmIGFwcGx5LCBQbGF0
Zm9ybUZpbGVIYW5kbGUqID0gbnVsbHB0cik7CitXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmls
ZURhdGEgbWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVu
Y3Rpb248dm9pZChjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+Jik+
JiYgYXBwbHksIFBsYXRmb3JtRmlsZUhhbmRsZSogPSBudWxscHRyKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgRmlsZVN5c3RlbUltcGwKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93
dGYvU0hBMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU0hBMS5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL1NIQTEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NiwxMCArNDYsMTAgQEAgU0hBMTo6U0hBMSgpCiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNM
QVJBVElPTlNfRU5ECiB9CiAKLXZvaWQgU0hBMTo6YWRkQnl0ZXMoY29uc3QgdWludDhfdCogaW5w
dXQsIHNpemVfdCBsZW5ndGgpCit2b2lkIFNIQTE6OmFkZEJ5dGVzKFNwYW48Y29uc3Qgc3RkOjpi
eXRlPiBpbnB1dCkKIHsKICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgot
ICAgIENDX1NIQTFfVXBkYXRlKCZtX2NvbnRleHQsIGlucHV0LCBsZW5ndGgpOworICAgIENDX1NI
QTFfVXBkYXRlKCZtX2NvbnRleHQsIGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpKTsKICAgICBB
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIH0KIApAQCAtMTAxLDExICsxMDEsMTEg
QEAgU0hBMTo6U0hBMSgpCiAgICAgcmVzZXQoKTsKIH0KIAotdm9pZCBTSEExOjphZGRCeXRlcyhj
b25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGxlbmd0aCkKK3ZvaWQgU0hBMTo6YWRkQnl0ZXMo
U3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQogewotICAgIHdoaWxlIChsZW5ndGgtLSkgewor
ICAgIGZvciAoYXV0byBieXRlIDogaW5wdXQpIHsKICAgICAgICAgQVNTRVJUKG1fY3Vyc29yIDwg
NjQpOwotICAgICAgICBtX2J1ZmZlclttX2N1cnNvcisrXSA9ICppbnB1dCsrOworICAgICAgICBt
X2J1ZmZlclttX2N1cnNvcisrXSA9IHN0ZDo6dG9faW50ZWdlcjx1aW50OF90PihieXRlKTsKICAg
ICAgICAgKyttX3RvdGFsQnl0ZXM7CiAgICAgICAgIGlmIChtX2N1cnNvciA9PSA2NCkKICAgICAg
ICAgICAgIHByb2Nlc3NCbG9jaygpOwpJbmRleDogU291cmNlL1dURi93dGYvU0hBMS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NIQTEuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dURi93dGYvU0hBMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgPGFycmF5PgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAt
NDUsMTUgKzQ2LDExIEBAIGNsYXNzIFNIQTEgewogcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBTSEExKCk7CiAKLSAgICB2b2lkIGFkZEJ5dGVzKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
aW5wdXQpCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkQnl0ZXMoU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkZEJ5dGVzKFQmJiBk
YXRhKQogICAgIHsKLSAgICAgICAgYWRkQnl0ZXMoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkp
OworICAgICAgICByZXR1cm4gYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+
KGRhdGEpIH0pKTsKICAgICB9Ci0gICAgdm9pZCBhZGRCeXRlcyhjb25zdCBDU3RyaW5nJiBpbnB1
dCkKLSAgICB7Ci0gICAgICAgIGFkZEJ5dGVzKGlucHV0LmRhdGFBc1VJbnQ4UHRyKCksIGlucHV0
Lmxlbmd0aCgpKTsKLSAgICB9Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkQnl0ZXMo
Y29uc3QgdWludDhfdCogaW5wdXQsIHNpemVfdCBsZW5ndGgpOwogCiAgICAgLy8gU2l6ZSBvZiB0
aGUgU0hBMSBoYXNoCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBjb25zdGV4cHIgc2l6
ZV90IGhhc2hTaXplID0gMjA7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dURi93dGYvVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxMyw2ICs2MTMsNyBAQCBw
cml2YXRlOgogCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBUIFZhbHVlVHlwZTsKKyAgICB0eXBlZGVm
IFQgdmFsdWVfdHlwZTsKIAogICAgIHR5cGVkZWYgVCogaXRlcmF0b3I7CiAgICAgdHlwZWRlZiBj
b25zdCBUKiBjb25zdF9pdGVyYXRvcjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL2NmL1NwYW5DRi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL2NmL1NwYW5DRi5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XVEYvd3RmL2NmL1NwYW5DRi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPENvcmVGb3VuZGF0
aW9uL0NvcmVGb3VuZGF0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KKworbmFtZXNwYWNl
IFdURiB7CisKK2lubGluZSBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYXNCeXRlcyhDRkRhdGFSZWYg
ZGF0YSkKK3sKKyAgICByZXR1cm4geyByZWludGVycHJldF9jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+
KENGRGF0YUdldEJ5dGVQdHIoZGF0YSkpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KENGRGF0YUdldExl
bmd0aChkYXRhKSkgfTsKK30KKworfQorCit1c2luZyBXVEY6OmFzQnl0ZXM7CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9jb2NvYS9TcGFuQ29jb2EuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9jb2NvYS9TcGFuQ29jb2EuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9jb2Nv
YS9TcGFuQ29jb2EuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNp
bmNsdWRlIDx3dGYvU3Bhbi5oPgorCituYW1lc3BhY2UgV1RGIHsKKworaW5saW5lIFNwYW48Y29u
c3Qgc3RkOjpieXRlPiBhc0J5dGVzKE5TRGF0YSAqZGF0YSkKK3sKKyAgICByZXR1cm4geyByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxlbmd0aCB9
OworfQorCit9CisKK3VzaW5nIFdURjo6YXNCeXRlczsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3Bl
cnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIENvZGVyPENTdHJpbmc+OjplbmNvZGUoRW5j
b2RlciYgZW5jCiAKICAgICB1aW50MzJfdCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAg
ZW5jb2RlciA8PCBsZW5ndGg7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3Ry
aW5nLmRhdGFBc1VJbnQ4UHRyKCksIGxlbmd0aCk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoc3RyaW5nLmJ5dGVzKCkpOwogfQogCiBzdGQ6Om9wdGlvbmFsPENTdHJpbmc+IENv
ZGVyPENTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKQEAgLTc4LDcgKzc4LDcgQEAg
c3RkOjpvcHRpb25hbDxDU3RyaW5nPiBDb2RlcjxDU3RyaW5nPjo6ZAogCiAgICAgY2hhciogYnVm
ZmVyOwogICAgIENTdHJpbmcgc3RyaW5nID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZCgqbGVu
Z3RoLCBidWZmZXIpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgKmxlbmd0aCkpCisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgcmVpbnRlcnByZXRfY2FzdDxzdGQ6OmJ5
dGUqPihidWZmZXIpLCAqbGVuZ3RoIH0pKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owog
CiAgICAgcmV0dXJuIHN0cmluZzsKQEAgLTk2LDExICs5Niw3IEBAIHZvaWQgQ29kZXI8U3RyaW5n
Pjo6ZW5jb2RlKEVuY29kZXImIGVuY28KICAgICBib29sIGlzOEJpdCA9IHN0cmluZy5pczhCaXQo
KTsKIAogICAgIGVuY29kZXIgPDwgbGVuZ3RoIDw8IGlzOEJpdDsKLQotICAgIGlmIChpczhCaXQp
Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0cmluZy5jaGFyYWN0ZXJz
OCgpLCBsZW5ndGgpOwotICAgIGVsc2UKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnMx
NigpKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoc3RyaW5nLmJ5dGVzKCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KQEAgLTExMiw3ICsxMDgsNyBAQCBzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8
U3RyaW5nPiBkZWNvCiAKICAgICBDaGFyYWN0ZXJUeXBlKiBidWZmZXI7CiAgICAgU3RyaW5nIHN0
cmluZyA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihidWZmZXIpLCBsZW5ndGggKiBzaXplb2YoQ2hhcmFjdGVyVHlwZSkpKQorICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8c3Rk
OjpieXRlKj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJhY3RlclR5cGUpIH0pKQogICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIAogICAgIHJldHVybiBzdHJpbmc7CkBAIC0x
NDIsMTMgKzEzOCwxMyBAQCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gQ29kZXI8U3RyaW5nPjo6ZGVj
CiAKIHZvaWQgQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQogewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpKTsKKyAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3QpOwogfQogCiBzdGQ6Om9wdGlvbmFsPFNIQTE6OkRpZ2Vz
dD4gQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAg
U0hBMTo6RGlnZXN0IHRtcDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHRtcC5kYXRhKCksIHNpemVvZih0bXApKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKHRtcCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgcmV0dXJu
IHRtcDsKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2Rl
cnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50
Q29kZXJzLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNl
L1BlcnNpc3RlbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYg
dmVjdG9yKQogICAgIHsKICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
dmVjdG9yLnNpemUoKSk7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6
ZSgpICogc2l6ZW9mKFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEo
dmVjdG9yKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5Pj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCkBAIC0xNzMsNyArMTcz
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAgICAgICBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IHRlbXA7CiAgICAgICAgIHRlbXAuZ3JvdyhzaXplKTsK
IAotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KHRlbXAuZGF0YSgpKSwgc2l6ZSAqIHNpemVvZihUKSkpCisgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEodGVtcCkpCiAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgICAgIHJldHVybiB0ZW1wOwpJbmRleDogU291cmNl
L1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmNwcAkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29k
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyMyArMzEsMjEgQEAKIG5hbWVzcGFjZSBXVEYg
ewogbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAotRGVjb2Rlcjo6RGVjb2Rlcihjb25zdCB1aW50
OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKQotICAgIDogbV9idWZmZXIoYnVmZmVyKQot
ICAgICwgbV9idWZmZXJQb3NpdGlvbihidWZmZXIpCi0gICAgLCBtX2J1ZmZlckVuZChidWZmZXIg
KyBidWZmZXJTaXplKQorRGVjb2Rlcjo6RGVjb2RlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnVm
ZmVyKQorICAgIDogbV9idWZmZXIoYnVmZmVyLmRhdGEoKSkKKyAgICAsIG1fYnVmZmVyUG9zaXRp
b24oYnVmZmVyLmRhdGEoKSkKKyAgICAsIG1fYnVmZmVyRW5kKGJ1ZmZlci5kYXRhKCkgKyBidWZm
ZXIuc2l6ZSgpKQogewogfQogCi1EZWNvZGVyOjp+RGVjb2RlcigpCi17Ci19CitEZWNvZGVyOjp+
RGVjb2RlcigpID0gZGVmYXVsdDsKIAogYm9vbCBEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdo
VG9Db250YWluKHNpemVfdCBzaXplKSBjb25zdAogewogICAgIHJldHVybiBzaXplIDw9IHN0YXRp
Y19jYXN0PHNpemVfdD4obV9idWZmZXJFbmQgLSBtX2J1ZmZlclBvc2l0aW9uKTsKIH0KIAotY29u
c3QgdWludDhfdCogRGVjb2Rlcjo6YnVmZmVyUG9pbnRlckZvckRpcmVjdFJlYWQoc2l6ZV90IHNp
emUpCitjb25zdCBzdGQ6OmJ5dGUqIERlY29kZXI6OmJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFk
KHNpemVfdCBzaXplKQogewogICAgIGlmICghYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihz
aXplKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC01NSwxNiArNTMsMTYgQEAgY29uc3Qg
dWludDhfdCogRGVjb2Rlcjo6YnVmZmVyUG9pbnRlckZvcgogICAgIGF1dG8gZGF0YSA9IG1fYnVm
ZmVyUG9zaXRpb247CiAgICAgbV9idWZmZXJQb3NpdGlvbiArPSBzaXplOwogCi0gICAgRW5jb2Rl
cjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgZGF0YSwgc2l6ZSk7CisgICAgRW5jb2Rl
cjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgU3BhbiB7IGRhdGEsIHNpemUgfSk7CiAg
ICAgcmV0dXJuIGRhdGE7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQorYm9vbCBEZWNvZGVyOjpkZWNvZGVGaXhlZExl
bmd0aERhdGEoU3BhbjxzdGQ6OmJ5dGU+IGRhdGEpCiB7Ci0gICAgYXV0byBidWZmZXIgPSBidWZm
ZXJQb2ludGVyRm9yRGlyZWN0UmVhZChzaXplKTsKKyAgICBhdXRvIGJ1ZmZlciA9IGJ1ZmZlclBv
aW50ZXJGb3JEaXJlY3RSZWFkKGRhdGEuc2l6ZSgpKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIG1lbWNweShkYXRhLCBidWZmZXIsIHNpemUpOworICAgIG1l
bWNweShkYXRhLmRhdGEoKSwgYnVmZmVyLCBkYXRhLnNpemUoKSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTEzOSw3ICsxMzcsNyBAQCBib29sIERlY29kZXI6OnZlcmlmeUNoZWNrc3VtKCkK
ICAgICBtX3NoYTEuY29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2Vz
dCBzYXZlZEhhc2g7Ci0gICAgaWYgKCFkZWNvZGVGaXhlZExlbmd0aERhdGEoc2F2ZWRIYXNoLmRh
dGEoKSwgc2l6ZW9mKHNhdmVkSGFzaCkpKQorICAgIGlmICghZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHNhdmVkSGFzaCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBjb21wdXRl
ZEhhc2ggPT0gc2F2ZWRIYXNoOwpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVy
c2lzdGVudERlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5j
ZS9QZXJzaXN0ZW50RGVjb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0
Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw3IEBACiAKICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9T
SEExLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2Uv
UGVyc2lzdGVudENvZGVyLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMzUsNyArMzYsMTIgQEAg
bmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIGNsYXNzIERlY29kZXIgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyKGNv
bnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IERlY29kZXIoVCYmIGRhdGEpCisgICAgICAgIDogRGVjb2RlciB7IGFzQnl0ZXMo
U3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihkYXRhKSB9KSB9CisgICAgeworICAgIH0KKworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIH5EZWNvZGVyKCk7CiAKICAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3Qg
eyByZXR1cm4gbV9idWZmZXJFbmQgLSBtX2J1ZmZlcjsgfQpAQCAtNDMsNyArNDksMTEgQEAgcHVi
bGljOgogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIHZl
cmlmeUNoZWNrc3VtKCk7CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgV0FSTl9VTlVTRURfUkVU
VVJOIGJvb2wgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqLCBzaXplX3QpOworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVGaXhlZExlbmd0
aERhdGEoU3BhbjxzdGQ6OmJ5dGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIGRl
Y29kZUZpeGVkTGVuZ3RoRGF0YShUJiYgZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNv
ZGVGaXhlZExlbmd0aERhdGEoYXNXcml0YWJsZUJ5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4o
ZGF0YSkgfSkpOworICAgIH0KIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVy
YXRvcj4+KHN0ZDo6b3B0aW9uYWw8Ym9vbD4mKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVj
b2RlciYgb3BlcmF0b3I+PihzdGQ6Om9wdGlvbmFsPHVpbnQ4X3Q+Jik7CkBAIC04NCw3ICs5NCw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG51bUVsZW1lbnRzIDw9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8c2l6ZV90Pjo6bWF4KCkgLyBzaXplb2YoVCkgJiYgYnVmZmVySXNMYXJnZUVub3VnaFRv
Q29udGFpbihudW1FbGVtZW50cyAqIHNpemVvZihUKSk7CiAgICAgfQogCi0gICAgV1RGX0VYUE9S
VF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBjb25zdCB1aW50OF90KiBidWZmZXJQb2ludGVy
Rm9yRGlyZWN0UmVhZChzaXplX3QgbnVtQnl0ZXMpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBX
QVJOX1VOVVNFRF9SRVRVUk4gY29uc3Qgc3RkOjpieXRlKiBidWZmZXJQb2ludGVyRm9yRGlyZWN0
UmVhZChzaXplX3QgbnVtQnl0ZXMpOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSVBD
RGVjb2RlciA9IGZhbHNlOwogCkBAIC05Miw5ICsxMDIsOSBAQCBwcml2YXRlOgogICAgIFdURl9F
WFBPUlRfUFJJVkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBidWZmZXJJc0xhcmdlRW5vdWdo
VG9Db250YWluKHNpemVfdCkgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4gRGVj
b2RlciYgZGVjb2RlTnVtYmVyKHN0ZDo6b3B0aW9uYWw8VHlwZT4mKTsKIAotICAgIGNvbnN0IHVp
bnQ4X3QqIG1fYnVmZmVyOwotICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyUG9zaXRpb247Ci0g
ICAgY29uc3QgdWludDhfdCogbV9idWZmZXJFbmQ7CisgICAgY29uc3Qgc3RkOjpieXRlKiBtX2J1
ZmZlcjsKKyAgICBjb25zdCBzdGQ6OmJ5dGUqIG1fYnVmZmVyUG9zaXRpb247CisgICAgY29uc3Qg
c3RkOjpieXRlKiBtX2J1ZmZlckVuZDsKIAogICAgIFNIQTEgbV9zaGExOwogfTsKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRF
bmNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMzQgKzMxLDM0IEBACiBuYW1lc3BhY2Ug
V1RGIHsKIG5hbWVzcGFjZSBQZXJzaXN0ZW5jZSB7CiAKLUVuY29kZXI6OkVuY29kZXIoKQotewot
fQotCi1FbmNvZGVyOjp+RW5jb2RlcigpCi17Ci19CitFbmNvZGVyOjpFbmNvZGVyKCkgPSBkZWZh
dWx0OworRW5jb2Rlcjo6fkVuY29kZXIoKSA9IGRlZmF1bHQ7CiAKLXVpbnQ4X3QqIEVuY29kZXI6
Omdyb3coc2l6ZV90IHNpemUpCitzdGQ6OmJ5dGUqIEVuY29kZXI6Omdyb3coc2l6ZV90IHNpemUp
CiB7CiAgICAgc2l6ZV90IG5ld1Bvc2l0aW9uID0gbV9idWZmZXIuc2l6ZSgpOwogICAgIG1fYnVm
ZmVyLmdyb3cobV9idWZmZXIuc2l6ZSgpICsgc2l6ZSk7CiAgICAgcmV0dXJuIG1fYnVmZmVyLmRh
dGEoKSArIG5ld1Bvc2l0aW9uOwogfQogCi12b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9y
RGF0YShTSEExJiBzaGExLCBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3ZvaWQg
RW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmIHNoYTEsIFNwYW48Y29uc3QgdWlu
dDhfdD4gZGF0YSkKK3sKKyAgICByZXR1cm4gdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKHNoYTEsIGFz
Qnl0ZXMoZGF0YSkpOworfQorCit2b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yRGF0YShT
SEExJiBzaGExLCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKICAgICBhdXRvIHR5cGVT
YWx0ID0gU2FsdDx1aW50OF90Kj46OnZhbHVlOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7Ci0gICAgc2hh
MS5hZGRCeXRlcyhkYXRhLCBzaXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmdHlwZVNh
bHQsIDEgfSk7CisgICAgc2hhMS5hZGRCeXRlcyhkYXRhKTsKIH0KIAotdm9pZCBFbmNvZGVyOjpl
bmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCit2
b2lkIEVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
ZGF0YSkKIHsKLSAgICB1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhLCBzaXplKTsK
KyAgICB1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhKTsKIAotICAgIHVpbnQ4X3Qq
IGJ1ZmZlciA9IGdyb3coc2l6ZSk7Ci0gICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7Cisg
ICAgYXV0byogYnVmZmVyID0gZ3JvdyhkYXRhLnNpemUoKSk7CisgICAgbWVtY3B5KGJ1ZmZlciwg
ZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4K
QEAgLTY2LDcgKzY2LDcgQEAgRW5jb2RlciYgRW5jb2Rlcjo6ZW5jb2RlTnVtYmVyKFR5cGUgdmFs
dQogewogICAgIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKG1fc2hhMSwgdmFsdWUp
OwogCi0gICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhzaXplb2YoVHlwZSkpOworICAgIGF1dG8q
IGJ1ZmZlciA9IGdyb3coc2l6ZW9mKFR5cGUpKTsKICAgICBtZW1jcHkoYnVmZmVyLCAmdmFsdWUs
IHNpemVvZihUeXBlKSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQpAQCAtMTI1LDcgKzEyNSw3IEBA
IHZvaWQgRW5jb2Rlcjo6ZW5jb2RlQ2hlY2tzdW0oKQogewogICAgIFNIQTE6OkRpZ2VzdCBoYXNo
OwogICAgIG1fc2hhMS5jb21wdXRlSGFzaChoYXNoKTsKLSAgICBlbmNvZGVGaXhlZExlbmd0aERh
dGEoaGFzaC5kYXRhKCksIGhhc2guc2l6ZSgpKTsKKyAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEo
aGFzaCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3Rl
bnRFbmNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVy
c2lzdGVudEVuY29kZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvcGVy
c2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcs
NyBAQAogCiAjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvU0hBMS5o
PgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1
ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaD4KIApAQCAtNDMsNyArNDQsMTEg
QEAgcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSB+RW5jb2RlcigpOwogCiAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlQ2hlY2tzdW0oKTsKLSAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCosIHNpemVfdCk7
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48
Y29uc3Qgc3RkOjpieXRlPik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBlbmNvZGVG
aXhlZExlbmd0aERhdGEoVCYmIGRhdGEpCisgICAgeworICAgICAgICBlbmNvZGVGaXhlZExlbmd0
aERhdGEoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KGFzQnl0ZXMoU3BhbihzdGQ6OmZvcndhcmQ8VD4o
ZGF0YSkpKSkpOworICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxl
X2lmX3Q8c3RkOjppc19lbnVtPFQ+Ojp2YWx1ZT4qID0gbnVsbHB0cj4KICAgICBFbmNvZGVyJiBv
cGVyYXRvcjw8KGNvbnN0IFQmIHQpCkBAIC03MCwyMyArNzUsMjIgQEAgcHVibGljOgogICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBFbmNvZGVyJiBvcGVyYXRvcjw8KGZsb2F0KTsKICAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgRW5jb2RlciYgb3BlcmF0b3I8PChkb3VibGUpOwogCi0gICAgY29uc3QgdWlu
dDhfdCogYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuZGF0YSgpOyB9Ci0gICAgc2l6
ZV90IGJ1ZmZlclNpemUoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5zaXplKCk7IH0KLQotICAg
IFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZvckRhdGEoU0hB
MSYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOworICAgIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBi
dWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlcjsgfQorICAgIAorICAgIFdURl9FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZvckRhdGEoU0hBMSYsIFNwYW48Y29u
c3QgdWludDhfdD4pOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB1cGRhdGVD
aGVja3N1bUZvckRhdGEoU0hBMSYsIFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFR5cGU+IHN0YXRpYyB2b2lkIHVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKFNI
QTEmLCBUeXBlKTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lQQ0VuY29kZXIgPSBm
YWxzZTsKIAogcHJpdmF0ZToKLQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+IEVuY29kZXIm
IGVuY29kZU51bWJlcihUeXBlKTsKIAotICAgIHVpbnQ4X3QqIGdyb3coc2l6ZV90KTsKKyAgICBz
dGQ6OmJ5dGUqIGdyb3coc2l6ZV90KTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPiBz
dHJ1Y3QgU2FsdDsKIAotICAgIFZlY3Rvcjx1aW50OF90LCA0MDk2PiBtX2J1ZmZlcjsKKyAgICBW
ZWN0b3I8c3RkOjpieXRlLCA0MDk2PiBtX2J1ZmZlcjsKICAgICBTSEExIG1fc2hhMTsKIH07CiAK
QEAgLTEwNiw4ICsxMTAsOCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4KIHZvaWQgRW5jb2Rl
cjo6dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIoU0hBMSYgc2hhMSwgVHlwZSB2YWx1ZSkKIHsKICAg
ICBhdXRvIHR5cGVTYWx0ID0gU2FsdDxUeXBlPjo6dmFsdWU7Ci0gICAgc2hhMS5hZGRCeXRlcyhy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdHlwZVNhbHQpLCBzaXplb2YodHlwZVNhbHQpKTsK
LSAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2YWx1ZSksIHNp
emVvZih2YWx1ZSkpOworICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZ0eXBlU2FsdCwgMSB9KTsK
KyAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmdmFsdWUsIDEgfSk7CiB9CiAKIH0KSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi90ZXh0L0Jhc2U2NC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3Rl
eHQvQmFzZTY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDM5ICsxNDAsMzkgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIAogICAgICAgICBkZXN0aW5hdGlvbkRh
dGFCdWZmZXJbZGlkeCsrXSA9ICc9JzsKIH0KIAotc3RhdGljIFZlY3Rvcjx1aW50OF90PiBiYXNl
NjRFbmNvZGVJbnRlcm5hbChjb25zdCB1aW50OF90KiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVk
IGlucHV0TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAg
bWFwKQorc3RhdGljIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVJbnRlcm5hbChTcGFuPGNv
bnN0IHN0ZDo6Ynl0ZT4gaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVu
Y29kZU1hcCBtYXApCiB7Ci0gICAgYXV0byBkZXN0aW5hdGlvbkxlbmd0aCA9IGNhbGN1bGF0ZUJh
c2U2NEVuY29kZWRTaXplKGlucHV0TGVuZ3RoLCBwb2xpY3kpOworICAgIGF1dG8gZGVzdGluYXRp
b25MZW5ndGggPSBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShpbnB1dC5zaXplKCksIHBvbGlj
eSk7CiAgICAgaWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkKICAgICAgICAgcmV0dXJuIHsgfTsKIAog
ICAgIFZlY3Rvcjx1aW50OF90PiBkZXN0aW5hdGlvblZlY3RvcihkZXN0aW5hdGlvbkxlbmd0aCk7
Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoaW5wdXREYXRhQnVmZmVyLCBpbnB1dExlbmd0aCwg
ZGVzdGluYXRpb25WZWN0b3IuZGF0YSgpLCBkZXN0aW5hdGlvbkxlbmd0aCwgcG9saWN5LCBtYXAp
OworICAgIGJhc2U2NEVuY29kZUludGVybmFsKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGlucHV0LmRhdGEoKSksIGlucHV0LnNpemUoKSwgZGVzdGluYXRpb25WZWN0b3IuZGF0YSgp
LCBkZXN0aW5hdGlvbkxlbmd0aCwgcG9saWN5LCBtYXApOwogICAgIHJldHVybiBkZXN0aW5hdGlv
blZlY3RvcjsKIH0KIAotdm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCogaW5wdXREYXRhQnVm
ZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgVUNoYXIqIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwg
dW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJh
c2U2NEVuY29kZU1hcCBtYXApCit2b2lkIGJhc2U2NEVuY29kZShTcGFuPGNvbnN0IHN0ZDo6Ynl0
ZT4gaW5wdXQsIFVDaGFyKiBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0
aW9uTGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFw
KQogewogICAgIGlmICghZGVzdGluYXRpb25MZW5ndGgpCiAgICAgICAgIHJldHVybjsKLSAgICBi
YXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXREYXRh
QnVmZmVyKSwgaW5wdXRMZW5ndGgsIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgZGVzdGluYXRpb25M
ZW5ndGgsIHBvbGljeSwgbWFwKTsKKyAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCksIGRlc3Rp
bmF0aW9uRGF0YUJ1ZmZlciwgZGVzdGluYXRpb25MZW5ndGgsIHBvbGljeSwgbWFwKTsKIH0KIAot
dm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBp
bnB1dExlbmd0aCwgTENoYXIqIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgdW5zaWduZWQgZGVzdGlu
YXRpb25MZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBt
YXApCit2b2lkIGJhc2U2NEVuY29kZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQsIExDaGFy
KiBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uTGVuZ3RoLCBCYXNl
NjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewogICAgIGlmICgh
ZGVzdGluYXRpb25MZW5ndGgpCiAgICAgICAgIHJldHVybjsKLSAgICBiYXNlNjRFbmNvZGVJbnRl
cm5hbChzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXREYXRhQnVmZmVyKSwgaW5wdXRM
ZW5ndGgsIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgZGVzdGluYXRpb25MZW5ndGgsIHBvbGljeSwg
bWFwKTsKKyAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCksIGRlc3RpbmF0aW9uRGF0YUJ1ZmZl
ciwgZGVzdGluYXRpb25MZW5ndGgsIHBvbGljeSwgbWFwKTsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+
IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWdu
ZWQgaW5wdXRMZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1h
cCBtYXApCitWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+IGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVN
YXAgbWFwKQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxj
b25zdCB1aW50OF90Kj4oaW5wdXREYXRhQnVmZmVyKSwgaW5wdXRMZW5ndGgsIHBvbGljeSwgbWFw
KTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoaW5wdXQsIHBvbGljeSwgbWFwKTsK
IH0KIAotU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1
ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJh
c2U2NEVuY29kZU1hcCBtYXApCitTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoU3Bhbjxjb25z
dCBzdGQ6OmJ5dGU+IGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNv
ZGVNYXAgbWFwKQogewotICAgIHJldHVybiBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoaW5wdXRE
YXRhQnVmZmVyLCBpbnB1dExlbmd0aCwgcG9saWN5LCBtYXApKTsKKyAgICByZXR1cm4gbWFrZVN0
cmluZyhiYXNlNjRFbmNvZGVkKGlucHV0LCBwb2xpY3ksIG1hcCkpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERl
Y29kZUludGVybmFsKGNvbnN0IFQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5n
dGgsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRpb25zLCBCYXNlNjREZWNvZGVN
YXAgbWFwKQpAQCAtMjU0LDg0ICsyNTQsMjcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGlj
IHN0ZDo6b3B0aW9uYQogICAgIHJldHVybiBkZXN0aW5hdGlvbjsKIH0KIAotc3RkOjpvcHRpb25h
bDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBTdHJpbmcmIGlucHV0LCBPcHRp
b25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkK
LXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBpbnB1dC5sZW5ndGgoKTsKLSAgICBpZiAoIWxlbmd0
aCB8fCBpbnB1dC5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFs
KGlucHV0LmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKLSAgICByZXR1cm4g
YmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczE2KCksIGxlbmd0aCwgb3B0aW9u
cywgbWFwKTsKLX0KLQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29k
ZShTdHJpbmdWaWV3IGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9u
cywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKLXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBpbnB1dC5s
ZW5ndGgoKTsKLSAgICBpZiAoIWxlbmd0aCB8fCBpbnB1dC5pczhCaXQoKSkKLSAgICAgICAgcmV0
dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgb3B0
aW9ucywgbWFwKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFj
dGVyczE2KCksIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKLX0KLQotc3RkOjpvcHRpb25hbDxWZWN0
b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0LCBP
cHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1h
cCkKLXsKLSAgICBpZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHJldHVybiBiYXNl
NjREZWNvZGVJbnRlcm5hbChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgb3B0aW9ucywgbWFw
KTsKLX0KLQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25z
dCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0
aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+
PiBiYXNlNjREZWNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0LCBPcHRpb25TZXQ8QmFz
ZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKICAgICBp
ZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQog
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRl
cm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1
dC5zaXplKCksIG9wdGlvbnMsIG1hcCk7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgdWludDhfdCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCBP
cHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1h
cCkKLXsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoZGF0YSwgbGVuZ3RoLCBvcHRp
b25zLCBtYXApOwotfQotCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVj
b2RlKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgT3B0aW9uU2V0PEJhc2U2NERl
Y29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgcmV0dXJu
IGJhc2U2NERlY29kZUludGVybmFsKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihkYXRh
KSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOwotfQotCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50
OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFN0cmluZyYgaW5wdXQpCitzdGQ6Om9wdGlvbmFs
PFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IFN0cmluZyYgaW5wdXQsIE9wdGlv
blNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRpb25zLCBCYXNlNjREZWNvZGVNYXAgbWFwKQog
ewogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgpOwogICAgIGlmICghbGVuZ3Ro
IHx8IGlucHV0LmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwo
aW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsK
LSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczE2KCksIGxl
bmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CisgICAgICAgIHJldHVybiBiYXNlNjRE
ZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7
CisgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnMxNigpLCBs
ZW5ndGgsIG9wdGlvbnMsIG1hcCk7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+
PiBiYXNlNjRVUkxEZWNvZGUoU3RyaW5nVmlldyBpbnB1dCkKK3N0ZDo6b3B0aW9uYWw8VmVjdG9y
PHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3RyaW5nVmlldyBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2
NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7CiAgICAgdW5z
aWduZWQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7CiAgICAgaWYgKCFsZW5ndGggfHwgaW5wdXQu
aXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFy
YWN0ZXJzOCgpLCBsZW5ndGgsIHsgfSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOwotICAgIHJldHVy
biBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCB7IH0s
IEJhc2U2NERlY29kZU1hcDo6VVJMKTsKLX0KLQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQotewotICAg
IGlmIChpbnB1dC5zaXplKCkgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkp
Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUlu
dGVybmFsKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6
VVJMKTsKLX0KLQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29k
ZShjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0KQotewotICAgIGlmIChpbnB1dC5zaXplKCkgPiBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCi0gICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KGlucHV0LmRhdGEoKSksIGlucHV0LnNpemUoKSwgeyB9LCBCYXNl
NjREZWNvZGVNYXA6OlVSTCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjRVUkxEZWNvZGUoY29uc3QgdWludDhfdCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQotewot
ICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChkYXRhLCBsZW5ndGgsIHsgfSwgQmFzZTY0
RGVjb2RlTWFwOjpVUkwpOwotfQotCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFz
ZTY0VVJMRGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBy
ZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oZGF0YSksIGxlbmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CisgICAgICAgIHJl
dHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG9w
dGlvbnMsIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJh
Y3RlcnMxNigpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdU
RgpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RG
L3d0Zi90ZXh0L0Jhc2U2NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKyNpbmNs
dWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTU2LDU0ICs1NywzNSBAQCBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heGltdW1CYXNlNjRMCiAvLyBSYXRoZXIgdGhhbiBi
ZWluZyBwZXJmZWN0bHkgcHJlY2lzZSwgdGhpcyBpcyBhIGJpdCBjb25zZXJ2YXRpdmUuCiBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIG1heGltdW1CYXNlNjRFbmNvZGVySW5wdXRCdWZmZXJTaXpl
ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC8gNzcgKiA3NiAvIDQgKiAz
IC0gMjsKIAotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQq
LCB1bnNpZ25lZCwgVUNoYXIqLCB1bnNpZ25lZCwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0
RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5j
b2RlTWFwOjpEZWZhdWx0KTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShj
b25zdCB2b2lkKiwgdW5zaWduZWQsIExDaGFyKiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGlj
eSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9
IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNl
NjRFbmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+LCBVQ2hhciogZGVzdGluYXRpb25CdWZmZXIs
IHVuc2lnbmVkIGRlc3RpbmF0aW9uQnVmZmVyU2l6ZSwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFz
ZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0
RW5jb2RlTWFwOjpEZWZhdWx0KTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29k
ZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4sIExDaGFyKiBkZXN0aW5hdGlvbkJ1ZmZlciwgdW5zaWdu
ZWQgZGVzdGluYXRpb25CdWZmZXJTaXplLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNv
ZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVN
YXA6OkRlZmF1bHQpOwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2
NEVuY29kZVRvVmVjdG9yKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgQmFzZTY0RW5jb2RlUG9saWN5
ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0g
QmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKLVZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVU
b1ZlY3Rvcihjb25zdCBWZWN0b3I8dWludDhfdD4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNl
NjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRF
bmNvZGVNYXA6OkRlZmF1bHQpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9y
KGNvbnN0IFZlY3RvcjxjaGFyPiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBv
bGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6
RGVmYXVsdCk7Ci1WZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgQ1N0
cmluZyYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNl
cnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci0KLVdU
Rl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3Qgdm9pZCos
IHVuc2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90
SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwot
U3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIEJhc2U2
NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2
NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci1TdHJpbmcgYmFzZTY0RW5j
b2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPGNoYXI+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFz
ZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0
RW5jb2RlTWFwOjpEZWZhdWx0KTsKLVN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdCBD
U3RyaW5nJiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdElu
c2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKK1dU
Rl9FWFBPUlRfUFJJVkFURSBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoU3Bh
bjxjb25zdCBzdGQ6OmJ5dGU+LCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xp
Y3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRl
ZmF1bHQpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29k
ZVRvVmVjdG9yKFQmJiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpE
b05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0
KTsKIAorV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFu
PGNvbnN0IHN0ZDo6Ynl0ZT4sIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGlj
eTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVm
YXVsdCk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmco
VCYmLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0
TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOworCitXVEZf
RVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29k
ZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4sIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9
IHsgfSwgQmFzZTY0RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKIFdURl9F
WFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2Rl
KGNvbnN0IFN0cmluZyYsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFz
ZTY0RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKIFdURl9FWFBPUlRfUFJJ
VkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKFN0cmluZ1Zp
ZXcsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFw
ID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9w
dGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFw
ID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9w
dGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYs
IE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFwID0g
QmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlv
bmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IHVpbnQ4X3QqLCB1bnNpZ25l
ZCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAg
PSBCYXNlNjREZWNvZGVNYXA6OkRlZmF1bHQpOwotV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0
aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgY2hhciosIHVuc2lnbmVk
LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9
IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7Ci0KLWlubGluZSBWZWN0b3I8dWludDhfdD4gYmFz
ZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCwgQmFzZTY0RW5j
b2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKLXsKLSAgICByZXR1cm4gYmFz
ZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSwgbWFw
KTsKLX0KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2Ft
ZV92PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJp
bmc+ICYmICFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3ZlX3Jl
ZmVyZW5jZV90PFQ+PiwgU3RyaW5nVmlldz4+KiA9IG51bGxwdHI+CitzdGQ6Om9wdGlvbmFsPFZl
Y3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKFQmJiwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9w
dGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRlZmF1bHQp
OwogCi1pbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IFZl
Y3RvcjxjaGFyPiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29k
ZU1hcCBtYXApCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5j
b2RlVG9WZWN0b3IoVCYmIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRF
bmNvZGVNYXAgbWFwKQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5k
YXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5LCBtYXApOworICAgIHJldHVybiBiYXNlNjRFbmNv
ZGVUb1ZlY3Rvcihhc0J5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oaW5wdXQpIH0pLCBwb2xp
Y3ksIG1hcCk7CiB9CiAKLWlubGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0
b3IoY29uc3QgQ1N0cmluZyYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2
NEVuY29kZU1hcCBtYXApCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgYmFzZTY0RW5jb2Rl
VG9TdHJpbmcoVCYmIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNv
ZGVNYXAgbWFwKQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRh
KCksIGlucHV0Lmxlbmd0aCgpLCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29k
ZVRvU3RyaW5nKGFzQnl0ZXMoU3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCkgfSksIHBvbGlj
eSwgbWFwKTsKIH0KIAotaW5saW5lIFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdCBW
ZWN0b3I8dWludDhfdD4mIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRF
bmNvZGVNYXAgbWFwKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc3RkOjplbmFibGVfaWZfdDwhc3Rk
Ojppc19zYW1lX3Y8c3RkOjpyZW1vdmVfY29uc3RfdDxzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxU
Pj4sIFN0cmluZz4gJiYgIXN0ZDo6aXNfc2FtZV92PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpy
ZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmdWaWV3Pj4qPgorc3RkOjpvcHRpb25hbDxWZWN0
b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShUJiYgaW5wdXQsIE9wdGlvblNldDxCYXNlNjREZWNv
ZGVPcHRpb25zPiBvcHRpb25zLCBCYXNlNjREZWNvZGVNYXAgbWFwKQogewotICAgIHJldHVybiBi
YXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5LCBt
YXApOwotfQotCi1pbmxpbmUgU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3Rv
cjxjaGFyPiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1h
cCBtYXApCi17Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LmRhdGEoKSwg
aW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7Ci19Ci0KLWlubGluZSBTdHJpbmcgYmFzZTY0RW5j
b2RlVG9TdHJpbmcoY29uc3QgQ1N0cmluZyYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xp
Y3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCi17Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3Ry
aW5nKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIHBvbGljeSwgbWFwKTsKKyAgICByZXR1
cm4gYmFzZTY0RGVjb2RlKGFzQnl0ZXMoU3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCkgfSks
IG9wdGlvbnMsIG1hcCk7CiB9CiAKIApAQCAtMTEyLDYxICs5NCw1NyBAQCBpbmxpbmUgU3RyaW5n
IGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0CiAvLyBUaGlzIGZvcm1hdCB1c2VzICctJyBhbmQg
J18nIGluc3RlYWQgb2YgJysnIGFuZCAnLycgcmVzcGVjdGl2ZWx5LgogLy8gPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KIAotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVj
dG9yKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCk7Ci1WZWN0b3I8dWludDhfdD4gYmFzZTY0VVJMRW5j
b2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik7Ci1WZWN0b3I8dWludDhfdD4gYmFz
ZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPGNoYXI+Jik7Ci1WZWN0b3I8dWludDhf
dD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgQ1N0cmluZyYpOworVmVjdG9yPHVpbnQ4
X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3Io
VCYmKTsKIAotU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqLCB1bnNp
Z25lZCk7Ci1TdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+Jik7Ci1TdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPGNoYXI+
Jik7Ci1TdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY29uc3QgQ1N0cmluZyYpOworU3Ry
aW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoVCYmKTsKIAot
V1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRV
UkxEZWNvZGUoY29uc3QgU3RyaW5nJik7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25h
bDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShTdHJpbmdWaWV3KTsKLVdURl9FWFBP
UlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2Rl
KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOwotV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0aW9u
YWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+Jik7
Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2
NFVSTERlY29kZShjb25zdCB1aW50OF90KiwgdW5zaWduZWQpOwotV1RGX0VYUE9SVF9QUklWQVRF
IHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgY2hh
ciosIHVuc2lnbmVkKTsKK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxE
ZWNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KTsKK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgU3RyaW5nJik7CitzdGQ6Om9wdGlvbmFsPFZlY3Rv
cjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFN0cmluZ1ZpZXcpOwordGVtcGxhdGU8dHlwZW5h
bWUgVCwgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lX3Y8c3RkOjpyZW1vdmVfY29uc3Rf
dDxzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxUPj4sIFN0cmluZz4gJiYgIXN0ZDo6aXNfc2FtZV92
PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmdW
aWV3Pj4qID0gbnVsbHB0cj4KK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRV
UkxEZWNvZGUoVCYmKTsKIAotaW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVU
b1ZlY3Rvcihjb25zdCB2b2lkKiBpbnB1dCwgdW5zaWduZWQgbGVuZ3RoKQoraW5saW5lIFZlY3Rv
cjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3RvcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
aW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlucHV0LCBsZW5ndGgs
IEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0
dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwg
QmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQogCi1pbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2
NFVSTEVuY29kZVRvVmVjdG9yKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoVCYm
IGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRhKCks
IGlucHV0LnNpemUoKSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6
VVJMKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3Ioc3RkOjpmb3J3YXJkPFQ+KGlu
cHV0KSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKIH0K
IAotaW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihjb25zdCBW
ZWN0b3I8Y2hhcj4mIGlucHV0KQoraW5saW5lIFN0cmluZyBiYXNlNjRVUkxFbmNvZGVUb1N0cmlu
ZyhTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29k
ZVRvVmVjdG9yKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6
OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0
cmluZyhpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJM
KTsKIH0KIAotaW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihj
b25zdCBDU3RyaW5nJiBpbnB1dCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBiYXNlNjRV
UkxFbmNvZGVUb1N0cmluZyhUJiYgaW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRv
VmVjdG9yKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIEJhc2U2NEVuY29kZVBvbGljeTo6
VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3Ry
aW5nKHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCksIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNl
NjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9T
dHJpbmcoY29uc3Qgdm9pZCogaW5wdXQsIHVuc2lnbmVkIGxlbmd0aCkKK2lubGluZSBzdGQ6Om9w
dGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFNwYW48Y29uc3Qgc3RkOjpi
eXRlPiBpbnB1dCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5wdXQsIGxl
bmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKKyAg
ICByZXR1cm4gYmFzZTY0RGVjb2RlKGlucHV0LCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsK
IH0KIAotaW5saW5lIFN0cmluZyBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhjb25zdCBWZWN0b3I8
dWludDhfdD4mIGlucHV0KQoraW5saW5lIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjRVUkxEZWNvZGUoY29uc3QgU3RyaW5nJiBpbnB1dCkKIHsKLSAgICByZXR1cm4gYmFzZTY0
RW5jb2RlVG9TdHJpbmcoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29k
ZShpbnB1dCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBTdHJpbmcg
YmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCkKK2lubGlu
ZSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFN0cmluZ1Zp
ZXcgaW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LmRhdGEo
KSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFw
OjpVUkwpOworICAgIHJldHVybiBiYXNlNjREZWNvZGUoaW5wdXQsIHsgfSwgQmFzZTY0RGVjb2Rl
TWFwOjpVUkwpOwogfQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNv
bnN0IENTdHJpbmcmIGlucHV0KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc3RkOjplbmFibGVfaWZf
dDwhc3RkOjppc19zYW1lX3Y8c3RkOjpyZW1vdmVfY29uc3RfdDxzdGQ6OnJlbW92ZV9yZWZlcmVu
Y2VfdDxUPj4sIFN0cmluZz4gJiYgIXN0ZDo6aXNfc2FtZV92PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8
c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmdWaWV3Pj4qPgorc3RkOjpvcHRpb25h
bDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShUJiYgaW5wdXQpCiB7Ci0gICAgcmV0
dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIEJh
c2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJu
IGJhc2U2NFVSTERlY29kZShhc0J5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oaW5wdXQpIH0p
KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGlubGluZSBi
b29sIGlzQmFzZTY0T3JCYXNlNjRVUkxDaGFyYWN0ZXIoQ2hhcmFjdGVyVHlwZSBjKQpAQCAtMjA4
LDU3ICsxODYsMzYgQEAgaW5saW5lIHVuc2lnbmVkIGNhbGN1bGF0ZUJhc2U2NEVuY29kZWRTaQog
fQogCiBzdHJ1Y3QgQmFzZTY0U3BlY2lmaWNhdGlvbiB7Ci0gICAgY29uc3Qgdm9pZCogaW5wdXRE
YXRhOwotICAgIHVuc2lnbmVkIGlucHV0TGVuZ3RoOworICAgIFNwYW48Y29uc3Qgc3RkOjpieXRl
PiBpbnB1dERhdGE7CiAgICAgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeTsKICAgICBCYXNlNjRF
bmNvZGVNYXAgbWFwOwogfTsKIAotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5j
b2RlZChjb25zdCB2b2lkKiBpbnB1dERhdGEsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNlNjRF
bmNvZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywg
QmFzZTY0RW5jb2RlTWFwIG1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCkKLXsKLSAgICBy
ZXR1cm4geyBpbnB1dERhdGEsIGlucHV0TGVuZ3RoLCBwb2xpY3ksIG1hcCB9OwotfQotCi1pbmxp
bmUgQmFzZTY0U3BlY2lmaWNhdGlvbiBiYXNlNjRFbmNvZGVkKGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6
OkRvTm90SW5zZXJ0TEZzKQotewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEo
KSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3kpOwotfQotCi1pbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlv
biBiYXNlNjRFbmNvZGVkKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW5wdXQsIEJhc2U2NEVuY29kZVBv
bGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzKQotewotICAg
IHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3kp
OwotfQotCi1pbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlvbiBiYXNlNjRFbmNvZGVkKGNvbnN0IENT
dHJpbmcmIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0RW5jb2RlUG9s
aWN5OjpEb05vdEluc2VydExGcykKLXsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5k
YXRhKCksIGlucHV0Lmxlbmd0aCgpLCBwb2xpY3kpOwotfQotCi1pbmxpbmUgQmFzZTY0U3BlY2lm
aWNhdGlvbiBiYXNlNjRVUkxFbmNvZGVkKGNvbnN0IHZvaWQqIGlucHV0RGF0YSwgdW5zaWduZWQg
aW5wdXRMZW5ndGgpCitpbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlvbiBiYXNlNjRFbmNvZGVkKFNw
YW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9IEJh
c2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCBtYXAgPSBC
YXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5w
dXREYXRhLCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29k
ZU1hcDo6VVJMKTsKKyAgICByZXR1cm4geyBpbnB1dCwgcG9saWN5LCBtYXAgfTsKIH0KIAotaW5s
aW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIGlucHV0KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gQmFzZTY0U3BlY2lmaWNhdGlvbiBi
YXNlNjRFbmNvZGVkKFQmJiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9IEJhc2U2
NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCBtYXAgPSBCYXNl
NjRFbmNvZGVNYXA6OkRlZmF1bHQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQu
ZGF0YSgpLCBpbnB1dC5zaXplKCksIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNv
ZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoYXNCeXRlcyhTcGFuIHsgc3Rk
Ojpmb3J3YXJkPFQ+KGlucHV0KSB9KSwgcG9saWN5LCBtYXApOwogfQogCi1pbmxpbmUgQmFzZTY0
U3BlY2lmaWNhdGlvbiBiYXNlNjRVUkxFbmNvZGVkKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW5wdXQp
CitpbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlvbiBiYXNlNjRVUkxFbmNvZGVkKFNwYW48Y29uc3Qg
c3RkOjpieXRlPiBpbnB1dCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5kYXRh
KCksIGlucHV0LnNpemUoKSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1h
cDo6VVJMKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dCwgQmFzZTY0RW5jb2RlUG9s
aWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKIH0KIAotaW5saW5lIEJhc2U2NFNwZWNp
ZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChjb25zdCBDU3RyaW5nJiBpbnB1dCkKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChUJiYgaW5w
dXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5n
dGgoKSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKKyAg
ICByZXR1cm4gYmFzZTY0RW5jb2RlZChhc0J5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oaW5w
dXQpIH0pLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwog
fQogCiB0ZW1wbGF0ZTw+IGNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPEJhc2U2NFNwZWNpZmljYXRp
b24+IHsKIHB1YmxpYzoKICAgICBTdHJpbmdUeXBlQWRhcHRlcihjb25zdCBCYXNlNjRTcGVjaWZp
Y2F0aW9uJiBiYXNlNjQpCiAgICAgICAgIDogbV9iYXNlNjQgeyBiYXNlNjQgfQotICAgICAgICAs
IG1fZW5jb2RlZExlbmd0aCB7IGNhbGN1bGF0ZUJhc2U2NEVuY29kZWRTaXplKGJhc2U2NC5pbnB1
dExlbmd0aCwgYmFzZTY0LnBvbGljeSkgfQorICAgICAgICAsIG1fZW5jb2RlZExlbmd0aCB7IGNh
bGN1bGF0ZUJhc2U2NEVuY29kZWRTaXplKGJhc2U2NC5pbnB1dERhdGEuc2l6ZSgpLCBiYXNlNjQu
cG9saWN5KSB9CiAgICAgewogICAgIH0KIApAQCAtMjY3LDcgKzIyNCw3IEBAIHB1YmxpYzoKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZvaWQgd3JpdGVUbyhDaGFyYWN0
ZXJUeXBlKiBkZXN0aW5hdGlvbikgY29uc3QKICAgICB7Ci0gICAgICAgIGJhc2U2NEVuY29kZSht
X2Jhc2U2NC5pbnB1dERhdGEsIG1fYmFzZTY0LmlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvbiwgbV9l
bmNvZGVkTGVuZ3RoLCBtX2Jhc2U2NC5wb2xpY3ksIG1fYmFzZTY0Lm1hcCk7CisgICAgICAgIGJh
c2U2NEVuY29kZShtX2Jhc2U2NC5pbnB1dERhdGEsIGRlc3RpbmF0aW9uLCBtX2VuY29kZWRMZW5n
dGgsIG1fYmFzZTY0LnBvbGljeSwgbV9iYXNlNjQubWFwKTsKICAgICB9CiAKIHByaXZhdGU6Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi90ZXh0L0NTdHJpbmcuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93
dGYvdGV4dC9DU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNs
dWRlIDx3dGYvSGFzaFRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAKIG5hbWVzcGFjZSBXVEYg
ewogCkBAIC0zOSw5ICs0MCwxMSBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJ
RklFUihDCiBjbGFzcyBDU3RyaW5nQnVmZmVyIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8Q1N0
cmluZ0J1ZmZlcj4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVO
VElGSUVSKENTdHJpbmdCdWZmZXIpOwogcHVibGljOgotICAgIGNvbnN0IGNoYXIqIGRhdGEoKSB7
IHJldHVybiBtdXRhYmxlRGF0YSgpOyB9CisgICAgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0IHsg
cmV0dXJuIGNvbnN0X2Nhc3Q8Q1N0cmluZ0J1ZmZlcio+KHRoaXMpLT5tdXRhYmxlRGF0YSgpOyB9
CiAgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CiAKKyAgICBT
cGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25zdCB7IHJldHVybiBhc0J5dGVzKFNwYW4g
eyBkYXRhKCksIGxlbmd0aCgpIH0pOyB9CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIENT
dHJpbmc7CiAKQEAgLTY2LDYgKzY5LDIwIEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIENTdHJpbmcgbmV3VW5pbml0aWFsaXplZChzaXplX3QgbGVuZ3RoLCBjaGFyKiYg
Y2hhcmFjdGVyQnVmZmVyKTsKICAgICBDU3RyaW5nKEhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUp
IDogbV9idWZmZXIoSGFzaFRhYmxlRGVsZXRlZFZhbHVlKSB7IH0KIAorICAgIFNwYW48Y29uc3Qg
c3RkOjpieXRlPiBieXRlcygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9idWZmZXIpCisg
ICAgICAgICAgICByZXR1cm4gbV9idWZmZXItPmJ5dGVzKCk7CisgICAgICAgIHJldHVybiB7IH07
CisgICAgfQorCisgICAgU3BhbjxzdGQ6OmJ5dGU+IG11dGFibGVCeXRlcygpCisgICAgeworICAg
ICAgICBpZiAoYXV0byBtdXRhYmxlRGF0YSA9IHRoaXMtPm11dGFibGVEYXRhKCkpCisgICAgICAg
ICAgICByZXR1cm4gYXNXcml0YWJsZUJ5dGVzKFNwYW4geyBtdXRhYmxlRGF0YSwgbV9idWZmZXIt
Pmxlbmd0aCgpIH0pOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKwogICAgIGNvbnN0IGNo
YXIqIGRhdGEoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fYnVmZmVyID8gbV9idWZm
ZXItPmRhdGEoKSA6IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1Zp
ZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgJKHdvcmtp
bmcgY29weSkKQEAgLTk0LDYgKzk0LDggQEAgcHVibGljOgogICAgIGNvbnN0IExDaGFyKiBjaGFy
YWN0ZXJzOCgpIGNvbnN0OwogICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzMTYoKSBjb25zdDsK
IAorICAgIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAgICAgYm9vbCBp
c0FsbEFTQ0lJKCkgY29uc3Q7CiAKICAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKQEAgLTQy
NCw2ICs0MjYsMTMgQEAgaW5saW5lIGNvbnN0IFVDaGFyKiBTdHJpbmdWaWV3OjpjaGFyYWN0ZQog
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBVQ2hhcio+KG1fY2hhcmFjdGVycyk7CiB9CiAK
K2lubGluZSBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gU3RyaW5nVmlldzo6Ynl0ZXMoKSBjb25zdAor
eworICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGFzQnl0ZXMoU3BhbiB7IGNoYXJh
Y3RlcnM4KCksIGxlbmd0aCgpIH0pOworICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBjaGFyYWN0
ZXJzMTYoKSwgbGVuZ3RoKCkgfSk7Cit9CisKIGlubGluZSBib29sIFN0cmluZ1ZpZXc6OmlzQWxs
QVNDSUkoKSBjb25zdAogewogICAgIGlmIChpczhCaXQoKSkKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L3RleHQvV1RGU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9XVEZT
dHJpbmcuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJp
bmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSA8c3RkYXJn
Lmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9BU0NJSUxpdGVyYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9JbnRl
Z2VyVG9TdHJpbmdDb252ZXJzaW9uLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5o
PgpAQCAtMTM0LDYgKzEzNSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsg
cmV0dXJuICFtX2ltcGwgfHwgbV9pbXBsLT5pczhCaXQoKTsgfQogCiAgICAgdW5zaWduZWQgc2l6
ZUluQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmxlbmd0aCgpICogKGlz
OEJpdCgpID8gc2l6ZW9mKExDaGFyKSA6IHNpemVvZihVQ2hhcikpIDogMDsgfQorICAgIFNwYW48
Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OwogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRF
IENTdHJpbmcgYXNjaWkoKSBjb25zdDsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgQ1N0cmluZyBs
YXRpbjEoKSBjb25zdDsKQEAgLTQ4Myw2ICs0ODUsMTYgQEAgdGVtcGxhdGU8PiBpbmxpbmUgY29u
c3QgVUNoYXIqIFN0cmluZzo6YwogICAgIHJldHVybiBjaGFyYWN0ZXJzMTYoKTsKIH0KIAoraW5s
aW5lIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBTdHJpbmc6OmJ5dGVzKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1faW1wbCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmIChtX2ltcGwtPmlzOEJp
dCgpKQorICAgICAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgbV9pbXBsLT5jaGFyYWN0ZXJzOCgp
LCBtX2ltcGwtPmxlbmd0aCgpIH0pOworICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBtX2ltcGwt
PmNoYXJhY3RlcnMxNigpLCBtX2ltcGwtPmxlbmd0aCgpIH0pOworfQorCiBpbmxpbmUgVUNoYXIg
U3RyaW5nOjpjaGFyYWN0ZXJBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKICAgICBpZiAoIW1f
aW1wbCB8fCBpbmRleCA+PSBtX2ltcGwtPmxlbmd0aCgpKQpJbmRleDogU291cmNlL1dURi93dGYv
d2luL0ZpbGVTeXN0ZW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3dpbi9G
aWxlU3lzdGVtV2luLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvd2lu
L0ZpbGVTeXN0ZW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjMsOSArMzYzLDkgQEAgU3Ry
aW5nIGNyZWF0ZVRlbXBvcmFyeURpcmVjdG9yeSgpCiAgICAgfSk7CiB9CiAKLWJvb2wgdW5tYXBW
aWV3T2ZGaWxlKHZvaWQqIGJ1ZmZlciwgc2l6ZV90KQorYm9vbCB1bm1hcFZpZXdPZkZpbGUoU3Bh
bjxzdGQ6OmJ5dGU+IGRhdGEpCiB7Ci0gICAgcmV0dXJuIFVubWFwVmlld09mRmlsZShidWZmZXIp
OworICAgIHJldHVybiBVbm1hcFZpZXdPZkZpbGUoZGF0YS5kYXRhKCkpOwogfQogCiBib29sIE1h
cHBlZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIEZp
bGVPcGVuTW9kZSBvcGVuTW9kZSwgTWFwcGVkRmlsZU1vZGUpCkBAIC0zNzQsNyArMzc0LDcgQEAg
Ym9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0ZgogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBhdXRvIHNpemUgPSBmaWxlU2l6ZShoYW5kbGUpOwotICAgIGlmICghc2l6
ZSB8fCAqc2l6ZSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgfHwgKnNpemUg
PiBzdGQ6Om51bWVyaWNfbGltaXRzPGRlY2x0eXBlKG1fZmlsZVNpemUpPjo6bWF4KCkpIHsKKyAg
ICBpZiAoIXNpemUgfHwgKnNpemUgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgp
IHx8ICpzaXplID4gc3RkOjpudW1lcmljX2xpbWl0czxkZWNsdHlwZShtX2ZpbGVEYXRhLnNpemUo
KSk+OjptYXgoKSkgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC00MDMsMTEg
KzQwMywxMiBAQCBib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmCiAgICAg
aWYgKCFtYXBwaW5nKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2ZpbGVEYXRhID0g
TWFwVmlld09mRmlsZShtYXBwaW5nLCBkZXNpcmVkQWNjZXNzLCAwLCAwLCAqc2l6ZSk7CisgICAg
YXV0byBkYXRhID0gTWFwVmlld09mRmlsZShtYXBwaW5nLCBkZXNpcmVkQWNjZXNzLCAwLCAwLCAq
c2l6ZSk7CiAgICAgQ2xvc2VIYW5kbGUobWFwcGluZyk7Ci0gICAgaWYgKCFtX2ZpbGVEYXRhKQor
ICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fZmlsZVNpemUgPSAq
c2l6ZTsKKworICAgIG1fZmlsZURhdGEgPSBTcGFuIHsgcmVpbnRlcnByZXRfY2FzdDxzdGQ6OmJ5
dGUqPihkYXRhKSwgKnNpemUgfTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsODAgQEAKKzIwMjEtMDYtMTEgIFNhbSBXZWluaWcgIDx3ZWluaWdA
YXBwbGUuY29tPgorCisgICAgICAgIEFkb3B0IFNwYW4gaW4gbW9yZSBwbGFjZXMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjg4NworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtXSVBdCisKKyAgICAgICAg
KiBNb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFw
cEhpZ2hsaWdodDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcEhpZ2hsaWdo
dDo6ZGVjb2RlKToKKyAgICAgICAgKiBNb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHRSYW5n
ZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwSGlnaGxpZ2h0UmFuZ2VEYXRhOjp0b1No
YXJlZEJ1ZmZlciBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNh
dG9yUmVzcG9uc2VEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjplbmNvZGVBcnJheUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpkZWNvZGVBcnJheUJ1ZmZlcik6CisgICAgICAgICogTW9kdWxl
cy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmg6CisgICAgICAg
IChXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjplbmNvZGUgY29u
c3QpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbERlc2Ny
aXB0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9y
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRI
YW5kc2hha2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpnZXRF
eHBlY3RlZFdlYlNvY2tldEFjY2VwdCk6CisgICAgICAgICogYmluZGluZ3MvanMvQnVmZmVyU291
cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJTb3VyY2U6OmJ5dGVzIGNvbnN0KToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVjb2RlKToKKyAgICAgICAgKiBjb250ZW50
ZXh0ZW5zaW9ucy9TZXJpYWxpemVkTkZBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpTZXJpYWxpemVkTkZBOjpwb2ludGVyQXRPZmZzZXRJbkZpbGUgY29uc3QpOgor
ICAgICAgICAqIGNyeXB0by9tYWMvU2VyaWFsaXplZENyeXB0b0tleVdyYXBNYWMubW06CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVBbmRTdG9yZU1hc3RlcktleSk6CisgICAgICAgICogZG9tL05v
ZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFzaFBvaW50ZXIpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NUGF0Y2hTdXBw
b3J0OjpjcmVhdGVEaWdlc3QpOgorICAgICAgICAoV2ViQ29yZTo6YWRkU3RyaW5nVG9TSEExKTog
RGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6c2hvd0NlcnRpZmljYXRl
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmdldFNlcmlhbGl6ZWRD
ZXJ0aWZpY2F0ZSk6CisgICAgICAgICogcGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGE6OmNyZWF0ZVNoYXJlZEJ1
ZmZlciBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNoYXJlZEJ1ZmZlcjo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZl
cjo6RGF0YVNlZ21lbnQ6OmRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVm
ZmVyOjpEYXRhU2VnbWVudDo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVk
QnVmZmVyOjpkZWNvZGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6
RGF0YVNlZ21lbnQ6OnNpemUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZl
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2NvY29hL0NBQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjplbmNv
ZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpk
ZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01vZGVsLmg6CisgICAgICAgIChX
ZWJDb3JlOjpNb2RlbDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1vZGVsOjpk
ZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlBpeGVsQnVmZmVyOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFt
L1JlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNh
cGFiaWxpdHlWYWx1ZU9yUmFuZ2U6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpD
YXBhYmlsaXR5VmFsdWVPclJhbmdlOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlh
c3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
YWRkU3RyaW5nVG9TSEExKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL0NlcnRpZmlj
YXRlSW5mb0NGTmV0LmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OmVuY29kZUNGRGF0
YSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpkZWNvZGVDRkRhdGEpOgorICAgICAgICAq
IHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50OjpiaW5kQmxvYik6CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZVN0
YXRlbWVudC5oOgorICAgICAgICAqIHdvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9u
RGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVnaXN0cmF0aW9uRGF0YWJhc2U6OmRv
UHVzaENoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaXN0cmF0aW9uRGF0YWJhc2U6Omlt
cG9ydFJlY29yZHMpOgorICAgICAgICAqIHdvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTY3JpcHRT
dG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNXU2NyaXB0U3RvcmFnZTo6c3RvcmUpOgor
CiAyMDIxLTA2LTExICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAg
TGF6aWx5IGNvbXB1dGUgU2VjdXJpdHlPcmlnaW46Om1faXNQb3RlbnRpYWxseVRydXN0d29ydGh5
IGZvciBwZXJmb3JtYW5jZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRt
ZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2VuY3J5cHRlZG1lZGlhL0luaXREYXRhUmVnaXN0cnkuY3BwCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0luaXREYXRhUmVn
aXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAgc3RhdGljIFJlZlB0
cjxTaGFyZWRCdWZmZXI+IHNhbml0aXplS2V5aQogICAgIGF1dG8gb2JqZWN0ID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKICAgICBhdXRvIGtpZHNBcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUo
KTsKICAgICBmb3IgKGF1dG8mIGJ1ZmZlciA6IGtleUlEQnVmZmVyLnZhbHVlKCkpCi0gICAgICAg
IGtpZHNBcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhidWZmZXItPmRh
dGEoKSwgYnVmZmVyLT5zaXplKCkpKTsKKyAgICAgICAga2lkc0FycmF5LT5wdXNoU3RyaW5nKGJh
c2U2NFVSTEVuY29kZVRvU3RyaW5nKGJ1ZmZlci0+Ynl0ZXMoKSkpOwogICAgIG9iamVjdC0+c2V0
QXJyYXkoImtpZHMiLCBXVEZNb3ZlKGtpZHNBcnJheSkpOwogCiAgICAgQ1N0cmluZyBqc29uRGF0
YSA9IG9iamVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0LmgJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lk
IEFwcEhpZ2hsaWdodDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5j
b2RlciA8PCBzdGF0aWNfY2FzdDxzaXplX3Q+KGhpZ2hsaWdodC0+c2l6ZSgpKTsKLSAgICBlbmNv
ZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShoaWdobGlnaHQtPmRhdGEoKSwgaGlnaGxpZ2h0LT5z
aXplKCksIDEpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKCpoaWdobGlnaHQs
IDEpOwogCiAgICAgZW5jb2RlciA8PCB0ZXh0OwogCkBAIC03NSw3ICs3NSw3IEBAIHN0ZDo6b3B0
aW9uYWw8QXBwSGlnaGxpZ2h0PiBBcHBIaWdobGlnaHQKIAogICAgIFZlY3Rvcjx1aW50OF90PiBo
aWdobGlnaHQ7CiAgICAgaGlnaGxpZ2h0Lmdyb3coKmxlbmd0aCk7Ci0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZUZpeGVkTGVuZ3RoRGF0YShoaWdobGlnaHQuZGF0YSgpLCBoaWdobGlnaHQuc2l6ZSgp
LCAxKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGhpZ2hsaWdodCwg
MSkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKICAgICBzdGQ6Om9wdGlvbmFsPHN0
ZDo6b3B0aW9uYWw8U3RyaW5nPj4gdGV4dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFJhbmdlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhLmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9oaWdobGlnaHQvQXBwSGln
aGxpZ2h0UmFuZ2VEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBSZWY8
U2hhcmVkQnVmZmVyPiBBcHBIaWdobGlnaHRSYW5nZURhdGE6CiB7CiAgICAgV1RGOjpQZXJzaXN0
ZW5jZTo6RW5jb2RlciBlbmNvZGVyOwogICAgIGVuY29kZXIgPDwgKnRoaXM7Ci0gICAgcmV0dXJu
IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6
ZSgpKTsKKyAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZW5jb2Rlci5idWZmZXIoKSk7
CiB9CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgQXBwSGlnaGxpZ2h0UmFuZ2VEYXRh
OjpOb2RlUGF0aENvbXBvbmVudDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFD
aGFubmVsLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgw
LDcgQEAgTmV0d29ya1NlbmRRdWV1ZSBSVENEYXRhQ2hhbm5lbDo6Y3JlYXRlTQogICAgICAgICBp
ZiAoIWNoYW5uZWwubV9oYW5kbGVyLT5zZW5kU3RyaW5nRGF0YSh1dGY4KSkKICAgICAgICAgICAg
IGNoYW5uZWwuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNz
YWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgIkVycm9yIHNlbmRpbmcgc3RyaW5n
IHRocm91Z2ggUlRDRGF0YUNoYW5uZWwuIl9zKTsKICAgICB9LCBbJmNoYW5uZWxdKGF1dG8mIHNw
YW4pIHsKLSAgICAgICAgaWYgKCFjaGFubmVsLm1faGFuZGxlci0+c2VuZFJhd0RhdGEoc3Bhbi5k
YXRhKCksIHNwYW4uc2l6ZSgpKSkKKyAgICAgICAgaWYgKCFjaGFubmVsLm1faGFuZGxlci0+c2Vu
ZFJhd0RhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3Bhbi5kYXRhKCkpLCBz
cGFuLnNpemUoKSkpCiAgICAgICAgICAgICBjaGFubmVsLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJy
b3IsICJFcnJvciBzZW5kaW5nIGJpbmFyeSBkYXRhIHRocm91Z2ggUlRDRGF0YUNoYW5uZWwuIl9z
KTsKICAgICB9LCBbJmNoYW5uZWxdKEV4Y2VwdGlvbkNvZGUgZXJyb3JDb2RlKSB7CiAgICAgICAg
IGlmIChhdXRvKiBjb250ZXh0ID0gY2hhbm5lbC5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBs
YWNlbWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMv
UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0JKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQko
d29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQAogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
Q2F0Y2hTY29wZS5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4K
ICNpbXBvcnQgPG9iamMvcnVudGltZS5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1NwYW5Db2NvYS5o
PgogI2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+CiAKICNpbXBvcnQgPHBhbC9jZi9Db3JlTWVk
aWFTb2Z0TGluay5oPgpAQCAtMjQ2LDkgKzI0Nyw5IEBAIHN0YXRpYyBKU1ZhbHVlICpqc1ZhbHVl
V2l0aERhdGFJbkNvbnRleHQKICAgICAvLyBGSVhNRTogQWRkIG1ha2VDRlN0cmluZy9tYWtlTlNT
dHJpbmcgdG8gYXZvaWQgdW5uZWNlc3NhcnkgU3RyaW5nIGFsbG9jYXRpb24uCiAgICAgU3RyaW5n
IGRhdGE2NDsKICAgICBpZiAoIW1pbWVUeXBlLmlzRW1wdHkoKSkKLSAgICAgICAgZGF0YTY0ID0g
bWFrZVN0cmluZygiZGF0YToiLCBtaW1lVHlwZSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChb
ZGF0YSBieXRlc10sIFtkYXRhIGxlbmd0aF0pKTsKKyAgICAgICAgZGF0YTY0ID0gbWFrZVN0cmlu
ZygiZGF0YToiLCBtaW1lVHlwZSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChhc0J5dGVzKGRh
dGEpKSk7CiAgICAgZWxzZQotICAgICAgICBkYXRhNjQgPSBtYWtlU3RyaW5nKCJkYXRhOnRleHQv
cGxhaW47YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoW2RhdGEgYnl0ZXNdLCBbZGF0YSBsZW5ndGhd
KSk7CisgICAgICAgIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6dGV4dC9wbGFpbjtiYXNlNjQs
IiwgYmFzZTY0RW5jb2RlZChhc0J5dGVzKGRhdGEpKSk7CiAKICAgICByZXR1cm4gW0pTVmFsdWUg
dmFsdWVXaXRoT2JqZWN0OihpZClkYXRhNjQuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSBpbkNvbnRl
eHQ6Y29udGV4dF07CiB9CkBAIC0zNDAsNyArMzQxLDcgQEAgc3RhdGljIEpTVmFsdWUgKmpzVmFs
dWVXaXRoQVZNZXRhZGF0YUl0ZQogICAgICAgICBpZCB2YWx1ZSA9IGl0ZW0udmFsdWU7CiAgICAg
ICAgIE5TU3RyaW5nICptaW1lVHlwZSA9IFtbaXRlbSBleHRyYUF0dHJpYnV0ZXNdIG9iamVjdEZv
cktleTpAIk1JTUV0eXBlIl07CiAgICAgICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNE
YXRhIGNsYXNzXV0gJiYgbWltZVR5cGUpIHsKLSAgICAgICAgICAgIGF1dG8gZGF0YTY0ID0gbWFr
ZVN0cmluZygiZGF0YToiLCBTdHJpbmcobWltZVR5cGUpLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNv
ZGVkKFt2YWx1ZSBieXRlc10sIFt2YWx1ZSBsZW5ndGhdKSk7CisgICAgICAgICAgICBhdXRvIGRh
dGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgU3RyaW5nKG1pbWVUeXBlKSwgIjtiYXNlNjQsIiwg
YmFzZTY0RW5jb2RlZChhc0J5dGVzKChOU0RhdGEgKil2YWx1ZSkpKTsKICAgICAgICAgICAgIFtk
aWN0aW9uYXJ5IHNldE9iamVjdDooX19icmlkZ2UgTlNTdHJpbmcgKilkYXRhNjQuY3JlYXRlQ0ZT
dHJpbmcoKS5nZXQoKSBmb3JLZXk6QCJ2YWx1ZSJdOwogICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDp2YWx1ZSBmb3JLZXk6QCJ2YWx1ZSJdOwpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yQ29vcmRpbmF0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0aGVu
dGljYXRvckNvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yQ29vcmRpbmF0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHN0YXRpYyBSZWY8QXJyYXlCdWZmZXI+IHByb2R1Y2VD
bGllbnREYXQKICAgICAgICAgb2JqZWN0LT5zZXRTdHJpbmcoInR5cGUiX3MsICJ3ZWJhdXRobi5n
ZXQiX3MpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgb2JqZWN0LT5zZXRTdHJpbmcoImNo
YWxsZW5nZSJfcywgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY2hhbGxlbmdlLmRhdGEoKSwgY2hh
bGxlbmdlLmxlbmd0aCgpKSk7CisgICAgb2JqZWN0LT5zZXRTdHJpbmcoImNoYWxsZW5nZSJfcywg
YmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY2hhbGxlbmdlLmJ5dGVzKCkpKTsKICAgICBvYmplY3Qt
PnNldFN0cmluZygib3JpZ2luIl9zLCBvcmlnaW4udG9SYXdTdHJpbmcoKSk7CiAKICAgICBhdXRv
IHV0ZjhKU09OU3RyaW5nID0gb2JqZWN0LT50b0pTT05TdHJpbmcoKS51dGY4KCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRpY2F0b3JSZXNwb25zZURhdGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRp
Y2F0b3JSZXNwb25zZURhdGEuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yUmVzcG9uc2VEYXRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU5LDcgKzU5LDcgQEAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHN0YXRpYyB2b2lk
IGVuY29kZUFycmF5QnVmZmVyKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEFycmF5QnVmZmVyJiBi
dWZmZXIpCiB7CiAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYnVmZmVyLmJ5
dGVMZW5ndGgoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RhdGljX2Nh
c3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZlci5kYXRhKCkpLCBidWZmZXIuYnl0ZUxlbmd0aCgpLCAx
KTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShidWZmZXIuYnl0ZXMoKSwgMSk7
CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CkBAIC03NSw3ICs3NSw3IEBAIFJlZlB0cjxB
cnJheUJ1ZmZlcj4gZGVjb2RlQXJyYXlCdWZmZXIoRGUKICAgICBhdXRvIGJ1ZmZlciA9IEFycmF5
QnVmZmVyOjp0cnlDcmVhdGUobGVuZ3RoLnZhbHVlKCksIHNpemVvZih1aW50OF90KSk7CiAgICAg
aWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGVGaXhlZExlbmd0aERhdGEoc3RhdGljX2Nhc3Q8dWludDhfdCo+KGJ1ZmZlci0+ZGF0YSgp
KSwgbGVuZ3RoLnZhbHVlKCksIDEpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0
aERhdGEoYnVmZmVyLT53cml0YWJsZUJ5dGVzKCksIDEpKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICByZXR1cm4gYnVmZmVyOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWwuY3BwCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRl
bnRpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIEF1dGhlbnRpY2F0aW9u
RXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgUHUKIH0KIAogUHVibGljS2V5Q3JlZGVudGlhbDo6UHVi
bGljS2V5Q3JlZGVudGlhbChSZWY8QXV0aGVudGljYXRvclJlc3BvbnNlPiYmIHJlc3BvbnNlKQot
ICAgIDogQmFzaWNDcmVkZW50aWFsKGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKHJlc3BvbnNlLT5y
YXdJZCgpLT5kYXRhKCksIHJlc3BvbnNlLT5yYXdJZCgpLT5ieXRlTGVuZ3RoKCkpLCBUeXBlOjpQ
dWJsaWNLZXksIERpc2NvdmVyeTo6UmVtb3RlKQorICAgIDogQmFzaWNDcmVkZW50aWFsKGJhc2U2
NFVSTEVuY29kZVRvU3RyaW5nKHJlc3BvbnNlLT5yYXdJZCgpLT5ieXRlcygpKSwgVHlwZTo6UHVi
bGljS2V5LCBEaXNjb3Zlcnk6OlJlbW90ZSkKICAgICAsIG1fcmVzcG9uc2UoV1RGTW92ZShyZXNw
b25zZSkpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1Ymxp
Y0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMu
aAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9Q
dWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0
MSw4ICsxNDEsOCBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBQdWJsaWNLZXlDcmVk
ZW50aWFsQ3JlYXRpb25PcHRpb25zOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsK
ICAgICBlbmNvZGVyIDw8IHJwLmlkIDw8IHJwLm5hbWUgPDwgcnAuaWNvbjsKLSAgICBlbmNvZGVy
IDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih1c2VyLmlkLmxlbmd0aCgpKTsKLSAgICBlbmNvZGVy
LmVuY29kZUZpeGVkTGVuZ3RoRGF0YSh1c2VyLmlkLmRhdGEoKSwgdXNlci5pZC5sZW5ndGgoKSwg
MSk7CisgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odXNlci5pZC5ieXRlcygp
LnNpemUoKSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEodXNlci5pZC5ieXRl
cygpLCAxKTsKICAgICBlbmNvZGVyIDw8IHVzZXIuZGlzcGxheU5hbWUgPDwgdXNlci5uYW1lIDw8
IHVzZXIuaWNvbiA8PCBwdWJLZXlDcmVkUGFyYW1zIDw8IHRpbWVvdXQgPDwgZXhjbHVkZUNyZWRl
bnRpYWxzIDw8IGF1dGhlbnRpY2F0b3JTZWxlY3Rpb24gPDwgYXR0ZXN0YXRpb24gPDwgZXh0ZW5z
aW9uczsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNL
ZXlDcmVkZW50aWFsRGVzY3JpcHRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVk
ZW50aWFsRGVzY3JpcHRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw4ICs0Nyw4IEBAIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yOjpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IHR5cGU7Ci0g
ICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaWQubGVuZ3RoKCkpOwotICAgIGVu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGlkLmRhdGEoKSwgaWQubGVuZ3RoKCksIDEpOwor
ICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGlkLmJ5dGVzKCkuc2l6ZSgpKTsK
KyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShpZC5ieXRlcygpLCAxKTsKICAgICBl
bmNvZGVyIDw8IHRyYW5zcG9ydHM7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0
SGFuZHNoYWtlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsMTkgKzk3LDIwIEBAIHN0YXRpYyBT
dHJpbmcgZ2VuZXJhdGVTZWNXZWJTb2NrZXRLZXkoKQogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
bm9uY2VTaXplID0gMTY7CiAgICAgdW5zaWduZWQgY2hhciBrZXlbbm9uY2VTaXplXTsKICAgICBj
cnlwdG9ncmFwaGljYWxseVJhbmRvbVZhbHVlcyhrZXksIG5vbmNlU2l6ZSk7Ci0gICAgcmV0dXJu
IGJhc2U2NEVuY29kZVRvU3RyaW5nKGtleSwgbm9uY2VTaXplKTsKKyAgICByZXR1cm4gYmFzZTY0
RW5jb2RlVG9TdHJpbmcoa2V5KTsKIH0KIAogU3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Z2V0
RXhwZWN0ZWRXZWJTb2NrZXRBY2NlcHQoY29uc3QgU3RyaW5nJiBzZWNXZWJTb2NrZXRLZXkpCiB7
CiAgICAgY29uc3RleHByIHVpbnQ4X3Qgd2ViU29ja2V0S2V5R1VJRFtdID0gIjI1OEVBRkE1LUU5
MTQtNDdEQS05NUNBLUM1QUIwREM4NUIxMSI7CisKICAgICBTSEExIHNoYTE7Ci0gICAgQ1N0cmlu
ZyBrZXlEYXRhID0gc2VjV2ViU29ja2V0S2V5LmFzY2lpKCk7Ci0gICAgc2hhMS5hZGRCeXRlcyhr
ZXlEYXRhLmRhdGFBc1VJbnQ4UHRyKCksIGtleURhdGEubGVuZ3RoKCkpOwotICAgIHNoYTEuYWRk
Qnl0ZXMod2ViU29ja2V0S2V5R1VJRCwgc3RkOjpzaXplKHdlYlNvY2tldEtleUdVSUQpIC0gMSk7
CisgICAgc2hhMS5hZGRCeXRlcyhzZWNXZWJTb2NrZXRLZXkuYXNjaWkoKS5ieXRlcygpKTsKKyAg
ICBzaGExLmFkZEJ5dGVzKHdlYlNvY2tldEtleUdVSUQpOworCiAgICAgU0hBMTo6RGlnZXN0IGhh
c2g7CiAgICAgc2hhMS5jb21wdXRlSGFzaChoYXNoKTsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2Rl
VG9TdHJpbmcoaGFzaC5kYXRhKCksIFNIQTE6Omhhc2hTaXplKTsKKyAgICByZXR1cm4gYmFzZTY0
RW5jb2RlVG9TdHJpbmcoaGFzaCk7CiB9CiAKIFdlYlNvY2tldEhhbmRzaGFrZTo6V2ViU29ja2V0
SGFuZHNoYWtlKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHByb3RvY29sLCBjb25zdCBT
dHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBjbGllbnRPcmlnaW4sIGJvb2wgYWxsb3dD
b29raWVzKQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2oveGNzaGFyZWRk
YXRhL3hjc2NoZW1lcy9XZWJDb3JlLnhjc2NoZW1lCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvV2ViQ29yZS54Y3Nj
aGVtZQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2oveGNzaGFyZWRkYXRhL3hjc2NoZW1lcy9XZWJDb3JlLnhjc2NoZW1lCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw3ICszOSw5IEBACiAgICAgICBpZ25vcmVzUGVyc2lzdGVudFN0YXRlT25MYXVuY2gg
PSAiTk8iCiAgICAgICBkZWJ1Z0RvY3VtZW50VmVyc2lvbmluZyA9ICJZRVMiCiAgICAgICBkZWJ1
Z1NlcnZpY2VFeHRlbnNpb24gPSAiaW50ZXJuYWwiCi0gICAgICBhbGxvd0xvY2F0aW9uU2ltdWxh
dGlvbiA9ICJZRVMiPgorICAgICAgZW5hYmxlR1BVRnJhbWVDYXB0dXJlTW9kZSA9ICIzIgorICAg
ICAgYWxsb3dMb2NhdGlvblNpbXVsYXRpb24gPSAiWUVTIgorICAgICAgR1BVUHJvZmlsZXJFbmFi
bGVkID0gIk5vIj4KICAgIDwvTGF1bmNoQWN0aW9uPgogICAgPFByb2ZpbGVBY3Rpb24KICAgICAg
IGJ1aWxkQ29uZmlndXJhdGlvbiA9ICJSZWxlYXNlIgpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvQnVmZmVyU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvQnVmZmVyU291cmNlLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0J1ZmZlclNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1
NywxMyBAQCBwdWJsaWM6CiAgICAgICAgIH0sIG1fdmFyaWFudCk7CiAgICAgfQogCisgICAgU3Bh
bjxjb25zdCB1aW50OF90PiBieXRlcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RG
Ojp2aXNpdChbXShhdXRvJiBidWZmZXIpIC0+IFNwYW48Y29uc3QgdWludDhfdD4geworICAgICAg
ICAgICAgcmV0dXJuIGJ1ZmZlciA/IFNwYW48Y29uc3QgdWludDhfdD4geyBzdGF0aWNfY2FzdDxj
b25zdCB1aW50OF90Kj4oYnVmZmVyLT5kYXRhKCkpLCBidWZmZXItPmJ5dGVMZW5ndGgoKSB9IDog
U3Bhbjxjb25zdCB1aW50OF90PiB7IH07CisgICAgICAgIH0sIG1fdmFyaWFudCk7CisgICAgfQor
CiBwcml2YXRlOgogICAgIFZhcmlhbnRUeXBlIG1fdmFyaWFudDsKIH07CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NCwxNSArMTY0LDE1IEBAIHZvaWQgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjplbmNvZGUoRW5jb2QKIAogICAgIGlmIChoYXNBcnJheSkgewog
ICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihtX2FycmF5QnVmZmVyQ29u
dGVudHNBcnJheS0+c2l6ZSgpKTsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvICZhcnJheUJ1ZmZl
ckNvbnRlbnRzIDogKm1fYXJyYXlCdWZmZXJDb250ZW50c0FycmF5KSB7CisgICAgICAgIGZvciAo
Y29uc3QgYXV0byYgYXJyYXlCdWZmZXJDb250ZW50cyA6ICptX2FycmF5QnVmZmVyQ29udGVudHNB
cnJheSkgewogICAgICAgICAgICAgZW5jb2RlciA8PCBhcnJheUJ1ZmZlckNvbnRlbnRzLnNpemVJ
bkJ5dGVzKCk7Ci0gICAgICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShzdGF0
aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYXJyYXlCdWZmZXJDb250ZW50cy5kYXRhKCkpLCBhcnJh
eUJ1ZmZlckNvbnRlbnRzLnNpemVJbkJ5dGVzKCksIDEpOworICAgICAgICAgICAgZW5jb2Rlci5l
bmNvZGVGaXhlZExlbmd0aERhdGEoYXJyYXlCdWZmZXJDb250ZW50cy5ieXRlcygpLCAxKTsKICAg
ICAgICAgfQogICAgIH0KIAogI2lmIEVOQUJMRShXRUJfUlRDKQogICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KG1fZGV0YWNoZWRSVENEYXRhQ2hhbm5lbHMuc2l6ZSgpKTsKLSAg
ICBmb3IgKGNvbnN0IGF1dG8gJmNoYW5uZWwgOiBtX2RldGFjaGVkUlRDRGF0YUNoYW5uZWxzKQor
ICAgIGZvciAoY29uc3QgYXV0byYgY2hhbm5lbCA6IG1fZGV0YWNoZWRSVENEYXRhQ2hhbm5lbHMp
CiAgICAgICAgIGVuY29kZXIgPDwgKmNoYW5uZWw7CiAjZW5kaWYKIH0KQEAgLTIwNiw3ICsyMDYs
NyBAQCBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkCiAgICAgICAgICAg
ICBhdXRvIGJ1ZmZlciA9IEdpZ2FjYWdlOjp0cnlNYWxsb2MoR2lnYWNhZ2U6OlByaW1pdGl2ZSwg
YnVmZmVyU2l6ZSk7CiAgICAgICAgICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0
aERhdGEoc3RhdGljX2Nhc3Q8dWludDhfdCo+KGJ1ZmZlciksIGJ1ZmZlclNpemUsIDEpKSB7Cisg
ICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBzdGF0
aWNfY2FzdDxzdGQ6OmJ5dGUqPihidWZmZXIpLCBidWZmZXJTaXplIH0sIDEpKSB7CiAgICAgICAg
ICAgICAgICAgR2lnYWNhZ2U6OmZyZWUoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgYnVmZmVyKTsKICAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL1NlcmlhbGl6ZWRORkEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL1NlcmlhbGl6ZWRORkEuY3BwCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9TZXJp
YWxpemVkTkZBLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3IEBAIFNlcmlhbGl6
ZWRORkE6OlNlcmlhbGl6ZWRORkEoRmlsZVN5c3RlbToKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBj
b25zdCBUKiBTZXJpYWxpemVkTkZBOjpwb2ludGVyQXRPZmZzZXRJbkZpbGUoc2l6ZV90IG9mZnNl
dCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4oc3RhdGlj
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1fZmlsZS5kYXRhKCkpICsgb2Zmc2V0KTsKKyAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4obV9maWxlLmRhdGEoKS5kYXRhKCkgKyBvZmZz
ZXQpOwogfQogCiBhdXRvIFNlcmlhbGl6ZWRORkE6Om5vZGVzKCkgY29uc3QgLT4gY29uc3QgUmFu
Z2U8SW1tdXRhYmxlTkZBTm9kZT4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5
cHRvS2V5RUNNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMv
Q3J5cHRvS2V5RUNNYWMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDEwICsx
OTcsMTAgQEAgYm9vbCBDcnlwdG9LZXlFQzo6cGxhdGZvcm1BZGRGaWVsZEVsZW1lbgogCiAgICAg
aWYgKFVOTElLRUxZKChzaXplICE9IHB1YmxpY0tleVNpemUpICYmIChzaXplICE9IHByaXZhdGVL
ZXlTaXplKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBqd2sueCA9IGJhc2U2NFVSTEVu
Y29kZVRvU3RyaW5nKHJlc3VsdC5kYXRhKCkgKyAxLCBrZXlTaXplSW5CeXRlcyk7Ci0gICAgandr
LnkgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhyZXN1bHQuZGF0YSgpICsga2V5U2l6ZUluQnl0
ZXMgKyAxLCBrZXlTaXplSW5CeXRlcyk7CisgICAgandrLnggPSBiYXNlNjRVUkxFbmNvZGVUb1N0
cmluZyhTcGFuIHsgcmVzdWx0IH0uc3Vic3BhbigxLCBrZXlTaXplSW5CeXRlcykpOworICAgIGp3
ay55ID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoU3BhbiB7IHJlc3VsdCB9LnN1YnNwYW4oMSAr
IGtleVNpemVJbkJ5dGVzLCBrZXlTaXplSW5CeXRlcykpOwogICAgIGlmIChzaXplID4gcHVibGlj
S2V5U2l6ZSkKLSAgICAgICAgandrLmQgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhyZXN1bHQu
ZGF0YSgpICsgcHVibGljS2V5U2l6ZSwga2V5U2l6ZUluQnl0ZXMpOworICAgICAgICBqd2suZCA9
IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKFNwYW4geyByZXN1bHQgfS5zdWJzcGFuKHB1YmxpY0tl
eVNpemUsIGtleVNpemVJbkJ5dGVzKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvU2VyaWFsaXplZENyeXB0b0tleVdyYXBNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9TZXJpYWxpemVkQ3J5cHRvS2V5
V3JhcE1hYy5tbQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL21h
Yy9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzUsNiAr
MzUsNyBAQAogI2ltcG9ydCA8d3RmL0NyeXB0b2dyYXBoaWNVdGlsaXRpZXMuaD4KICNpbXBvcnQg
PHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1w
b3J0IDx3dGYvY2YvU3BhbkNGLmg+CiAjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4K
ICNpbXBvcnQgPHd0Zi9zcGkvY29jb2EvU2VjdXJpdHlTUEkuaD4KICNpbXBvcnQgPHd0Zi90ZXh0
L0Jhc2U2NC5oPgpAQCAtMTY3LDcgKzE2OCw3IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rv
cjx1aW50OF90Pj4gZmkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9CiAgICAg
UmV0YWluUHRyPENGRGF0YVJlZj4ga2V5RGF0YSA9IGFkb3B0Q0Yoa2V5RGF0YVJlZik7Ci0gICAg
cmV0dXJuIGJhc2U2NERlY29kZShDRkRhdGFHZXRCeXRlUHRyKGtleURhdGEuZ2V0KCkpLCBDRkRh
dGFHZXRMZW5ndGgoa2V5RGF0YS5nZXQoKSkpOworICAgIHJldHVybiBiYXNlNjREZWNvZGUoYXNC
eXRlcyhrZXlEYXRhLmdldCgpKSk7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+
PiBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTYwNiw3ICsxNjA2LDggQEAgRXhjZXB0aW9uT3I8dm9pZD4gTm9kZTo6c2V0VGV4dENv
bnRlbnQoYwogc3RhdGljIFNIQTE6OkRpZ2VzdCBoYXNoUG9pbnRlcihjb25zdCB2b2lkKiBwb2lu
dGVyKQogewogICAgIFNIQTEgc2hhMTsKLSAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KCZwb2ludGVyKSwgc2l6ZW9mKHBvaW50ZXIpKTsKKyAgICBzaGEx
LmFkZEJ5dGVzKFNwYW4geyAmcG9pbnRlciwgMSB9KTsKKwogICAgIFNIQTE6OkRpZ2VzdCBkaWdl
c3Q7CiAgICAgc2hhMS5jb21wdXRlSGFzaChkaWdlc3QpOwogICAgIHJldHVybiBkaWdlc3Q7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMzOCw3ICszMzgsNyBAQCB2b2lkIEZpbGVSZWFkZXJMb2Fk
ZXI6OmNvbnZlcnRUb0RhdGFVUkwoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX3N0
cmluZ1Jlc3VsdCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgbV9kYXRhVHlwZS5pc0VtcHR5KCkgPyAi
YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiA6IG1fZGF0YVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2
NEVuY29kZWQobV9yYXdEYXRhLT5kYXRhKCksIG1fYnl0ZXNMb2FkZWQpKTsKKyAgICBtX3N0cmlu
Z1Jlc3VsdCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgbV9kYXRhVHlwZS5pc0VtcHR5KCkgPyAiYXBw
bGljYXRpb24vb2N0ZXQtc3RyZWFtIiA6IG1fZGF0YVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2NEVu
Y29kZWQobV9yYXdEYXRhLT5ieXRlcygpKSk7CiB9CiAKIGJvb2wgRmlsZVJlYWRlckxvYWRlcjo6
aXNDb21wbGV0ZWQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3Jr
U2VuZFF1ZXVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL05ldHdv
cmtTZW5kUXVldWUuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxl
YXBpL05ldHdvcmtTZW5kUXVldWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MywxMSArNTMsMTAg
QEAgdm9pZCBOZXR3b3JrU2VuZFF1ZXVlOjplbnF1ZXVlKENTdHJpbmcmJgogdm9pZCBOZXR3b3Jr
U2VuZFF1ZXVlOjplbnF1ZXVlKGNvbnN0IEpTQzo6QXJyYXlCdWZmZXImIGJpbmFyeURhdGEsIHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCiB7CiAgICAgaWYgKG1fcXVl
dWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGF1dG8qIGRhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCB1
aW50OF90Kj4oYmluYXJ5RGF0YS5kYXRhKCkpOwotICAgICAgICBtX3dyaXRlUmF3RGF0YShTcGFu
IHsgZGF0YSArIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGggfSk7CisgICAgICAgIG1fd3JpdGVSYXdE
YXRhKGJpbmFyeURhdGEuYnl0ZXMoKS5zdWJzcGFuKGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtX3F1ZXVlLmFwcGVuZChTaGFyZWRCdWZmZXI6
OmNyZWF0ZShzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYmluYXJ5RGF0YS5kYXRhKCkpICsg
Ynl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkpOworICAgIG1fcXVldWUuYXBwZW5kKFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKGJpbmFyeURhdGEuYnl0ZXMoKS5zdWJzcGFuKGJ5dGVPZmZzZXQsIGJ5dGVMZW5n
dGgpKSk7CiB9CiAKIHZvaWQgTmV0d29ya1NlbmRRdWV1ZTo6ZW5xdWV1ZShXZWJDb3JlOjpCbG9i
JiBibG9iKQpAQCAtOTMsNyArOTIsOSBAQCB2b2lkIE5ldHdvcmtTZW5kUXVldWU6OnByb2Nlc3NN
ZXNzYWdlcygpCiAgICAgICAgIHN3aXRjaE9uKG1fcXVldWUuZmlyc3QoKSwgW3RoaXNdKGNvbnN0
IENTdHJpbmcmIHV0ZjgpIHsKICAgICAgICAgICAgIG1fd3JpdGVTdHJpbmcodXRmOCk7CiAgICAg
ICAgIH0sIFt0aGlzXShSZWY8U2hhcmVkQnVmZmVyPiYgZGF0YSkgewotICAgICAgICAgICAgZGF0
YS0+Zm9yRWFjaFNlZ21lbnQobV93cml0ZVJhd0RhdGEpOworICAgICAgICAgICAgZGF0YS0+Zm9y
RWFjaFNlZ21lbnQoW3RoaXNdKGF1dG8mIHNwYW4pIHsKKyAgICAgICAgICAgICAgICBtX3dyaXRl
UmF3RGF0YShhc0J5dGVzKHNwYW4pKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICB9LCBbdGhp
cywgJnNob3VsZFN0b3BQcm9jZXNzaW5nXShVbmlxdWVSZWY8QmxvYkxvYWRlcj4mIGxvYWRlcikg
ewogICAgICAgICAgICAgYXV0byBlcnJvckNvZGUgPSBsb2FkZXItPmVycm9yQ29kZSgpOwogICAg
ICAgICAgICAgaWYgKGxvYWRlci0+aXNMb2FkaW5nKCkgfHwgKGVycm9yQ29kZSAmJiBlcnJvckNv
ZGUudmFsdWUoKSA9PSBBYm9ydEVycm9yKSkgewpAQCAtMTAyLDcgKzEwMyw3IEBAIHZvaWQgTmV0
d29ya1NlbmRRdWV1ZTo6cHJvY2Vzc01lc3NhZ2VzKCkKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgaWYgKGNvbnN0IGF1dG8mIHJlc3VsdCA9IGxvYWRlci0+YXJyYXlCdWZmZXJSZXN1bHQo
KSkgewotICAgICAgICAgICAgICAgIG1fd3JpdGVSYXdEYXRhKFNwYW4geyBzdGF0aWNfY2FzdDxj
b25zdCB1aW50OF90Kj4ocmVzdWx0LT5kYXRhKCkpLCByZXN1bHQtPmJ5dGVMZW5ndGgoKSB9KTsK
KyAgICAgICAgICAgICAgICBtX3dyaXRlUmF3RGF0YShyZXN1bHQtPmJ5dGVzKCkpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEFTU0VSVChlcnJv
ckNvZGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmgJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTmV0d29ya1NlbmRR
dWV1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIGNsYXNzIFNoYXJlZEJ1ZmZl
cjsKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIE5ldHdvcmtTZW5kUXVldWUgOiBwdWJsaWMgQ29udGV4
dERlc3RydWN0aW9uT2JzZXJ2ZXIgewogcHVibGljOgogICAgIHVzaW5nIFdyaXRlU3RyaW5nID0g
RnVuY3Rpb248dm9pZChjb25zdCBDU3RyaW5nJiB1dGY4KT47Ci0gICAgdXNpbmcgV3JpdGVSYXdE
YXRhID0gRnVuY3Rpb248dm9pZChjb25zdCBTcGFuPGNvbnN0IHVpbnQ4X3Q+Jik+OworICAgIHVz
aW5nIFdyaXRlUmF3RGF0YSA9IEZ1bmN0aW9uPHZvaWQoY29uc3QgU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+Jik+OwogICAgIGVudW0gY2xhc3MgQ29udGludWUgeyBObywgWWVzIH07CiAgICAgdXNpbmcg
UHJvY2Vzc0Vycm9yID0gRnVuY3Rpb248Q29udGludWUoRXhjZXB0aW9uQ29kZSk+OwogICAgIE5l
dHdvcmtTZW5kUXVldWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdyaXRlU3RyaW5nJiYsIFdy
aXRlUmF3RGF0YSYmLCBQcm9jZXNzRXJyb3ImJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM5NCwyOCArMzk0LDIzIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IERPTVBhdGNoU3VwcG9ydDo6aW5u
ZXIKICAgICByZXR1cm4geyB9OwogfQogCi1zdGF0aWMgdm9pZCBhZGRTdHJpbmdUb1NIQTEoU0hB
MSYgc2hhMSwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgQ1N0cmluZyBjU3RyaW5nID0g
c3RyaW5nLnV0ZjgoKTsKLSAgICBzaGExLmFkZEJ5dGVzKGNTdHJpbmcuZGF0YUFzVUludDhQdHIo
KSwgY1N0cmluZy5sZW5ndGgoKSk7Ci19Ci0KIHN0ZDo6dW5pcXVlX3B0cjxET01QYXRjaFN1cHBv
cnQ6OkRpZ2VzdD4gRE9NUGF0Y2hTdXBwb3J0OjpjcmVhdGVEaWdlc3QoTm9kZSYgbm9kZSwgVW51
c2VkTm9kZXNNYXAqIHVudXNlZE5vZGVzTWFwKQogewogICAgIGF1dG8gZGlnZXN0ID0gbWFrZVVu
aXF1ZTxEaWdlc3Q+KCk7CiAgICAgZGlnZXN0LT5ub2RlID0gJm5vZGU7CisKICAgICBTSEExIHNo
YTE7CiAKICAgICBhdXRvIG5vZGVUeXBlID0gbm9kZS5ub2RlVHlwZSgpOwotICAgIHNoYTEuYWRk
Qnl0ZXMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oJm5vZGVUeXBlKSwgc2l6ZW9m
KG5vZGVUeXBlKSk7Ci0gICAgYWRkU3RyaW5nVG9TSEExKHNoYTEsIG5vZGUubm9kZU5hbWUoKSk7
Ci0gICAgYWRkU3RyaW5nVG9TSEExKHNoYTEsIG5vZGUubm9kZVZhbHVlKCkpOworICAgIHNoYTEu
YWRkQnl0ZXMoU3BhbiB7ICZub2RlVHlwZSwgMSB9KTsKKyAgICBzaGExLmFkZEJ5dGVzKG5vZGUu
bm9kZU5hbWUoKS51dGY4KCkuYnl0ZXMoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhub2RlLm5vZGVW
YWx1ZSgpLnV0ZjgoKS5ieXRlcygpKTsKIAogICAgIGlmIChub2RlLm5vZGVUeXBlKCkgPT0gTm9k
ZTo6RUxFTUVOVF9OT0RFKSB7CiAgICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS5maXJzdENoaWxk
KCk7CiAgICAgICAgIHdoaWxlIChjaGlsZCkgewogICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PERpZ2VzdD4gY2hpbGRJbmZvID0gY3JlYXRlRGlnZXN0KCpjaGlsZCwgdW51c2VkTm9kZXNNYXAp
OwotICAgICAgICAgICAgYWRkU3RyaW5nVG9TSEExKHNoYTEsIGNoaWxkSW5mby0+c2hhMSk7Cisg
ICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGNoaWxkSW5mby0+c2hhMS51dGY4KCkuYnl0ZXMoKSk7
CiAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwogICAgICAgICAgICAg
ZGlnZXN0LT5jaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShjaGlsZEluZm8pKTsKICAgICAgICAgfQpA
QCAtNDI0LDE5ICs0MTksMTkgQEAgc3RkOjp1bmlxdWVfcHRyPERPTVBhdGNoU3VwcG9ydDo6RGln
ZXN0PgogICAgICAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGVzV2l0aG91dFVwZGF0ZSgpKSB7
CiAgICAgICAgICAgICBTSEExIGF0dHJzU0hBMTsKICAgICAgICAgICAgIGZvciAoYXV0byYgYXR0
cmlidXRlIDogZWxlbWVudC5hdHRyaWJ1dGVzSXRlcmF0b3IoKSkgewotICAgICAgICAgICAgICAg
IGFkZFN0cmluZ1RvU0hBMShhdHRyc1NIQTEsIGF0dHJpYnV0ZS5uYW1lKCkudG9TdHJpbmcoKSk7
Ci0gICAgICAgICAgICAgICAgYWRkU3RyaW5nVG9TSEExKGF0dHJzU0hBMSwgYXR0cmlidXRlLnZh
bHVlKCkpOworICAgICAgICAgICAgICAgIGF0dHJzU0hBMS5hZGRCeXRlcyhhdHRyaWJ1dGUubmFt
ZSgpLnRvU3RyaW5nKCkudXRmOCgpLmJ5dGVzKCkpOworICAgICAgICAgICAgICAgIGF0dHJzU0hB
MS5hZGRCeXRlcyhhdHRyaWJ1dGUudmFsdWUoKS5zdHJpbmcoKS51dGY4KCkuYnl0ZXMoKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBTSEExOjpEaWdlc3QgYXR0cnNIYXNoOwogICAgICAg
ICAgICAgYXR0cnNTSEExLmNvbXB1dGVIYXNoKGF0dHJzSGFzaCk7Ci0gICAgICAgICAgICBkaWdl
c3QtPmF0dHJzU0hBMSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGF0dHJzSGFzaC5kYXRhKCksIDEw
KTsKLSAgICAgICAgICAgIGFkZFN0cmluZ1RvU0hBMShzaGExLCBkaWdlc3QtPmF0dHJzU0hBMSk7
CisgICAgICAgICAgICBkaWdlc3QtPmF0dHJzU0hBMSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGF0
dHJzSGFzaCk7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGRpZ2VzdC0+YXR0cnNTSEExLnV0
ZjgoKS5ieXRlcygpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIFNIQTE6OkRpZ2VzdCBoYXNo
OwogICAgIHNoYTEuY29tcHV0ZUhhc2goaGFzaCk7Ci0gICAgZGlnZXN0LT5zaGExID0gYmFzZTY0
RW5jb2RlVG9TdHJpbmcoaGFzaC5kYXRhKCksIDEwKTsKKyAgICBkaWdlc3QtPnNoYTEgPSBiYXNl
NjRFbmNvZGVUb1N0cmluZyhoYXNoKTsKICAgICBpZiAodW51c2VkTm9kZXNNYXApCiAgICAgICAg
IHVudXNlZE5vZGVzTWFwLT5hZGQoZGlnZXN0LT5zaGExLCBkaWdlc3QuZ2V0KCkpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0
LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kSG9zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwMiw3ICs2MDIsNyBAQCBi
b29sIEluc3BlY3RvckZyb250ZW5kSG9zdDo6c2hvd0NlcnRpZmljCiAgICAgaWYgKCFkYXRhKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRl
Y29kZXIoZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXplKCkpOworICAgIFdURjo6UGVyc2lzdGVuY2U6
OkRlY29kZXIgZGVjb2RlciB7ICpkYXRhIH07CiAgICAgc3RkOjpvcHRpb25hbDxDZXJ0aWZpY2F0
ZUluZm8+IGNlcnRpZmljYXRlSW5mbzsKICAgICBkZWNvZGVyID4+IGNlcnRpZmljYXRlSW5mbzsK
ICAgICBpZiAoIWNlcnRpZmljYXRlSW5mbykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBAIHVuc2lnbmVkIE5ldHdvcmtSZXNvdXJjZXNEYXRh
OjpSZXNvdXJjZUQKICAgICAgICAgbV9jb250ZW50ID0gbV9kZWNvZGVyLT5kZWNvZGVBbmRGbHVz
aChtX2RhdGFCdWZmZXItPmRhdGEoKSwgZGF0YUxlbmd0aCk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgbV9iYXNlNjRFbmNvZGVkID0gdHJ1ZTsKLSAgICAgICAgbV9jb250ZW50ID0gYmFzZTY0RW5j
b2RlVG9TdHJpbmcobV9kYXRhQnVmZmVyLT5kYXRhKCksIGRhdGFMZW5ndGgpOworICAgICAgICBt
X2NvbnRlbnQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhtX2RhdGFCdWZmZXItPmJ5dGVzKCkpOwog
ICAgIH0KIAogICAgIG1fZGF0YUJ1ZmZlciA9IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JET01BZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OTgsNyArMTY5OCw3IEBAIHN0YXRp
YyBTdHJpbmcgY29tcHV0ZUNvbnRlbnRTZWN1cml0eVBvbGkKICAgICBhdXRvIGNyeXB0b0RpZ2Vz
dCA9IFBBTDo6Q3J5cHRvRGlnZXN0OjpjcmVhdGUoUEFMOjpDcnlwdG9EaWdlc3Q6OkFsZ29yaXRo
bTo6U0hBXzI1Nik7CiAgICAgY3J5cHRvRGlnZXN0LT5hZGRCeXRlcyhjb250ZW50LmRhdGEoKSwg
Y29udGVudC5zaXplKCkpOwogICAgIGF1dG8gZGlnZXN0ID0gY3J5cHRvRGlnZXN0LT5jb21wdXRl
SGFzaCgpOwotICAgIHJldHVybiBtYWtlU3RyaW5nKCJzaGEyNTYtIiwgYmFzZTY0RW5jb2RlZChk
aWdlc3QuZGF0YSgpLCBkaWdlc3Quc2l6ZSgpKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoInNo
YTI1Ni0iLCBiYXNlNjRFbmNvZGVkKGRpZ2VzdCkpOwogfQogCiBSZWY8UHJvdG9jb2w6OkRPTTo6
Tm9kZT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZShOb2RlKiBub2RlLCBp
bnQgZGVwdGgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ck5ldHdvcmtBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE3NSw3ICsxNzUsNyBAQCBSZWY8UHJvdG9jb2w6Ok5ldHdvcms6
OldlYlNvY2tldEZyYW1lPiBiCiAgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2Nr
ZXRGcmFtZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldE9wY29kZShmcmFtZS5vcENvZGUpCiAgICAg
ICAgIC5zZXRNYXNrKGZyYW1lLm1hc2tlZCkKLSAgICAgICAgLnNldFBheWxvYWREYXRhKGZyYW1l
Lm9wQ29kZSA9PSAxID8gU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhmcmFtZS5w
YXlsb2FkLCBmcmFtZS5wYXlsb2FkTGVuZ3RoKSA6IGJhc2U2NEVuY29kZVRvU3RyaW5nKGZyYW1l
LnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgpKQorICAgICAgICAuc2V0UGF5bG9hZERhdGEo
ZnJhbWUub3BDb2RlID09IDEgPyBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKGZy
YW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgpIDogYmFzZTY0RW5jb2RlVG9TdHJpbmco
U3BhbiB7IGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGggfSkpCiAgICAgICAgIC5z
ZXRQYXlsb2FkTGVuZ3RoKGZyYW1lLnBheWxvYWRMZW5ndGgpCiAgICAgICAgIC5yZWxlYXNlKCk7
CiB9CkBAIC01ODksNyArNTg5LDcgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRpZFJl
Y2VpdmVEYQogICAgICAgICAvLyBPZnRlbiB0aGUgZGF0YSBpcyB0ZXh0IGFuZCB3ZSB3b3VsZCBo
YXZlIGEgZGVjb2RlciwgYnV0IGZvciBub24tdGV4dCB3ZSB3b24ndCBoYXZlIGEgZGVjb2Rlci4K
ICAgICAgICAgLy8gU3luYyBYSFJzIG1heSBub3QgaGF2ZSBhIGNhY2hlZCByZXNvdXJjZSwgd2hp
bGUgbm9uLXN5bmMgWEhScyB1c3VhbGx5IHRyYW5zZmVyIGRhdGEgb3ZlciBvbiBjb21wbGV0aW9u
LgogICAgICAgICBpZiAobV9sb2FkaW5nWEhSU3luY2hyb25vdXNseSAmJiByZXNvdXJjZURhdGEg
JiYgIXJlc291cmNlRGF0YS0+aGFzQnVmZmVyZWREYXRhKCkgJiYgIXJlc291cmNlRGF0YS0+Y2Fj
aGVkUmVzb3VyY2UoKSkKLSAgICAgICAgICAgIG1fcmVzb3VyY2VzRGF0YS0+c2V0UmVzb3VyY2VD
b250ZW50KHJlcXVlc3RJZCwgYmFzZTY0RW5jb2RlVG9TdHJpbmcoZGF0YSwgZGF0YUxlbmd0aCks
IHRydWUpOworICAgICAgICAgICAgbV9yZXNvdXJjZXNEYXRhLT5zZXRSZXNvdXJjZUNvbnRlbnQo
cmVxdWVzdElkLCBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgZGF0YSwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGRhdGFMZW5ndGgpIH0pLCB0cnVlKTsKICAgICB9CiAKICAgICBtX2Zyb250ZW5k
RGlzcGF0Y2hlci0+ZGF0YVJlY2VpdmVkKHJlcXVlc3RJZCwgdGltZXN0YW1wKCksIGRhdGFMZW5n
dGgsIGVuY29kZWREYXRhTGVuZ3RoKTsKQEAgLTEwMDUsNyArMTAwNSw3IEBAIFByb3RvY29sOjpF
cnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG8KIAogICAgIFdURjo6UGVyc2lzdGVuY2U6OkVu
Y29kZXIgZW5jb2RlcjsKICAgICBXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxXZWJDb3JlOjpDZXJ0
aWZpY2F0ZUluZm8+OjplbmNvZGUoZW5jb2RlciwgY2VydGlmaWNhdGUudmFsdWUoKSk7Ci0gICAg
cmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVm
ZmVyU2l6ZSgpKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoZW5jb2Rlci5idWZm
ZXIoKSk7CiB9CiAKIFdlYlNvY2tldCogSW5zcGVjdG9yTmV0d29ya0FnZW50Ojp3ZWJTb2NrZXRG
b3JSZXF1ZXN0SWQoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYgcmVxdWVzdElk
KQpAQCAtMTQxMCw3ICsxNDEwLDcgQEAgYm9vbCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmNhY2hl
ZFJlc291cgogICAgICAgICB9CiAKICAgICAgICAgKmJhc2U2NEVuY29kZWQgPSB0cnVlOwotICAg
ICAgICAqcmVzdWx0ID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoYnVmZmVyLT5kYXRhKCksIGJ1ZmZl
ci0+c2l6ZSgpKTsKKyAgICAgICAgKnJlc3VsdCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGJ1ZmZl
ci0+Ynl0ZXMoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2Vu
dC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsNyBA
QAogCiAjaWYgRU5BQkxFKFdFQl9BUkNISVZFKSAmJiBVU0UoQ0YpCiAjaW5jbHVkZSAiTGVnYWN5
V2ViQXJjaGl2ZS5oIgorI2luY2x1ZGUgPHd0Zi9jZi9TcGFuQ0YuaD4KICNlbmRpZgogCiAKQEAg
LTExMyw3ICsxMTQsNyBAQCBib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6c2hhcmVkQnVmZmVyQ29u
CiBib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGF0YUNvbnRlbnQoY29uc3QgdWludDhfdCogZGF0
YSwgdW5zaWduZWQgc2l6ZSwgY29uc3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmdOYW1lLCBib29sIHdp
dGhCYXNlNjRFbmNvZGUsIFN0cmluZyogcmVzdWx0KQogewogICAgIGlmICh3aXRoQmFzZTY0RW5j
b2RlKSB7Ci0gICAgICAgICpyZXN1bHQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhkYXRhLCBzaXpl
KTsKKyAgICAgICAgKnJlc3VsdCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKFNwYW4geyBkYXRhLCBz
aXplIH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTExMDIsNyArMTEwMyw3
IEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG8KICAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgY3JlYXRlIHdlYiBhcmNoaXZlIGZvciBtYWlu
IGZyYW1lIl9zKTsKIAogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGJ1ZmZlciA9IGFyY2hpdmUt
PnJhd0RhdGFSZXByZXNlbnRhdGlvbigpOwotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmlu
ZyhDRkRhdGFHZXRCeXRlUHRyKGJ1ZmZlci5nZXQoKSksIENGRGF0YUdldExlbmd0aChidWZmZXIu
Z2V0KCkpKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoYXNCeXRlcyhidWZmZXIu
Z2V0KCkpKTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2
ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4MSwxNiArMTgxLDE0IEBAIFJlZjxTaGFyZWRCdWZmZXI+IE1IVE1M
QXJjaGl2ZTo6Z2VuZXJhdGUKICAgICAgICAgbWh0bWxEYXRhLT5hcHBlbmQoYXNjaWlTdHJpbmcu
ZGF0YSgpLCBhc2NpaVN0cmluZy5sZW5ndGgoKSk7CiAKICAgICAgICAgLy8gRklYTUU6IGlkZWFs
bHkgd2Ugd291bGQgZW5jb2RlIHRoZSBjb250ZW50IGFzIGEgc3RyZWFtIHdpdGhvdXQgaGF2aW5n
IHRvIGZldGNoIGl0IGFsbC4KLSAgICAgICAgYXV0byogZGF0YSA9IHJlc291cmNlLmRhdGEtPmRh
dGEoKTsKLSAgICAgICAgc2l6ZV90IGRhdGFMZW5ndGggPSByZXNvdXJjZS5kYXRhLT5zaXplKCk7
CiAgICAgICAgIGlmICghc3RyY21wKGNvbnRlbnRFbmNvZGluZywgcXVvdGVkUHJpbnRhYmxlKSkg
ewotICAgICAgICAgICAgYXV0byBlbmNvZGVkRGF0YSA9IHF1b3RlZFByaW50YWJsZUVuY29kZShk
YXRhLCBkYXRhTGVuZ3RoKTsKKyAgICAgICAgICAgIGF1dG8gZW5jb2RlZERhdGEgPSBxdW90ZWRQ
cmludGFibGVFbmNvZGUocmVzb3VyY2UuZGF0YS0+Ynl0ZXMoKSk7CiAgICAgICAgICAgICBtaHRt
bERhdGEtPmFwcGVuZChlbmNvZGVkRGF0YS5kYXRhKCksIGVuY29kZWREYXRhLnNpemUoKSk7CiAg
ICAgICAgICAgICBtaHRtbERhdGEtPmFwcGVuZCgiXHJcbiIsIDIpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgQVNTRVJUKCFzdHJjbXAoY29udGVudEVuY29kaW5nLCBiYXNlNjQpKTsK
ICAgICAgICAgICAgIC8vIFdlIGFyZSBub3Qgc3BlY2lmeWluZyBpbnNlcnRMRnMgPSB0cnVlIGJl
bG93IGFzIGl0IHdvdWxkIGN1dCB0aGUgbGluZXMgd2l0aCBMRnMgYW5kIE1IVE1MIHJlcXVpcmVz
IENSTEZzLgotICAgICAgICAgICAgYXV0byBlbmNvZGVkRGF0YSA9IGJhc2U2NEVuY29kZVRvVmVj
dG9yKGRhdGEsIGRhdGFMZW5ndGgpOworICAgICAgICAgICAgYXV0byBlbmNvZGVkRGF0YSA9IGJh
c2U2NEVuY29kZVRvVmVjdG9yKHJlc291cmNlLmRhdGEtPmJ5dGVzKCkpOwogICAgICAgICAgICAg
Y29uc3Qgc2l6ZV90IG1heGltdW1MaW5lTGVuZ3RoID0gNzY7CiAgICAgICAgICAgICBzaXplX3Qg
aW5kZXggPSAwOwogICAgICAgICAgICAgc2l6ZV90IGVuY29kZWREYXRhTGVuZ3RoID0gZW5jb2Rl
ZERhdGEuc2l6ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwv
TUhUTUxQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNo
aXZlL21odG1sL01IVE1MUGFyc2VyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTUsNyArMTk1LDcgQEAgUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gTUhUTUxQYXJzZXI6
OnBhcgogICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAgIHN3aXRjaCAobWltZUhlYWRlci5j
b250ZW50VHJhbnNmZXJFbmNvZGluZygpKSB7CiAgICAgY2FzZSBNSU1FSGVhZGVyOjpCYXNlNjQ6
IHsKLSAgICAgICAgYXV0byBkZWNvZGVkRGF0YSA9IGJhc2U2NERlY29kZShjb250ZW50LT5kYXRh
KCksIGNvbnRlbnQtPnNpemUoKSk7CisgICAgICAgIGF1dG8gZGVjb2RlZERhdGEgPSBiYXNlNjRE
ZWNvZGUoY29udGVudC0+Ynl0ZXMoKSk7CiAgICAgICAgIGlmICghZGVjb2RlZERhdGEpIHsKICAg
ICAgICAgICAgIExPR19FUlJPUigiSW52YWxpZCBiYXNlNjQgY29udGVudCBmb3IgTUhUTUwgcGFy
dC4iKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMjA0LDcgKzIwNCw3IEBAIFJl
ZlB0cjxBcmNoaXZlUmVzb3VyY2U+IE1IVE1MUGFyc2VyOjpwYXIKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIGNhc2UgTUlNRUhlYWRlcjo6UXVvdGVkUHJpbnRhYmxlOgotICAgICAgICBkYXRh
ID0gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnRlbnQtPmRhdGEoKSwgY29udGVudC0+c2l6ZSgp
KTsKKyAgICAgICAgZGF0YSA9IHF1b3RlZFByaW50YWJsZURlY29kZShjb250ZW50LT5ieXRlcygp
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNSU1FSGVhZGVyOjpTZXZlbkJpdDoKICAgICBj
YXNlIE1JTUVIZWFkZXI6OkJpbmFyeToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29u
L0ljb25Mb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29u
L0ljb25Mb2FkZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvaWNvbi9JY29uTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBA
IHZvaWQgSWNvbkxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmUKICAgICAgICAgZGF0YSA9
IG51bGxwdHI7CiAKICAgICBjb25zdGV4cHIgdWludDhfdCBwZGZNYWdpY051bWJlcltdID0geyAn
JScsICdQJywgJ0QnLCAnRicgfTsKLSAgICBpZiAoZGF0YSAmJiBkYXRhLT5zdGFydHNXaXRoKFNw
YW4geyBwZGZNYWdpY051bWJlciwgc3RkOjpzaXplKHBkZk1hZ2ljTnVtYmVyKSB9KSkgeworICAg
IGlmIChkYXRhICYmIGRhdGEtPnN0YXJ0c1dpdGgocGRmTWFnaWNOdW1iZXIpKSB7CiAgICAgICAg
IExPRyhJY29uRGF0YWJhc2UsICJJY29uTG9hZGVyOjpmaW5pc2hMb2FkaW5nKCkgLSBJZ25vcmlu
ZyBpY29uIGF0ICVzIGJlY2F1c2UgaXQgYXBwZWFycyB0byBiZSBhIFBERiIsIG1fcmVzb3VyY2Ut
PnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKICAgICAgICAgZGF0YSA9IG51bGxwdHI7
CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9CYXNlNjRVdGlsaXRpZXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9CYXNlNjRVdGlsaXRpZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIEV4Y2VwdGlvbk9yPFN0cmluZz4gQmFz
ZTY0VXRpbGl0aWVzOjpidG8KICAgICBpZiAoIXN0cmluZ1RvRW5jb2RlLmlzQWxsTGF0aW4xKCkp
CiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IgfTsKIAot
ICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhzdHJpbmdUb0VuY29kZS5sYXRpbjEoKSk7
CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKHN0cmluZ1RvRW5jb2RlLmxhdGluMSgp
LmJ5dGVzKCkpOwogfQogCiBFeGNlcHRpb25PcjxTdHJpbmc+IEJhc2U2NFV0aWxpdGllczo6YXRv
Yihjb25zdCBTdHJpbmcmIGVuY29kZWRTdHJpbmcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgUmVmPFNoYXJlZEJ1ZmZlcj4gUGFzdGVib2FyZEN1
c3RvbURhdGE6OgogICAgIGVuY29kZXIgPDwgbV9vcmlnaW47CiAgICAgZW5jb2RlciA8PCBzYW1l
T3JpZ2luQ3VzdG9tU3RyaW5nRGF0YSgpOwogICAgIGVuY29kZXIgPDwgb3JkZXJlZFR5cGVzKCk7
Ci0gICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCksIGVuY29k
ZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZW5jb2Rl
ci5idWZmZXIoKSk7CiB9CiAKIFBhc3RlYm9hcmRDdXN0b21EYXRhIFBhc3RlYm9hcmRDdXN0b21E
YXRhOjpmcm9tUGVyc2lzdGVuY2VEZWNvZGVyKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXImJiBk
ZWNvZGVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwyMCArMzQsMTkgQEAKICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVVRGOENvbnZlcnNpb24u
aD4KIAotbmFtZXNwYWNlIFdlYkNvcmUgeworI2lmIFVTRShDRikKKyNpbmNsdWRlIDx3dGYvY2Yv
U3BhbkNGLmg+CisjZW5kaWYKIAotU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIoY29uc3QgdWlu
dDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCi17Ci0gICAgYXBwZW5kKGRhdGEsIHNpemUpOwotfQor
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1TaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihjb25zdCBj
aGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkKK1NoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKFNwYW48
Y29uc3Qgc3RkOjpieXRlPiBkYXRhKQogewotICAgIGFwcGVuZChyZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQ4X3QqPihkYXRhKSwgc2l6ZSk7CisgICAgYXBwZW5kKGRhdGEpOwogfQogCiBTaGFy
ZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIGZpbGVE
YXRhKQotICAgIDogbV9zaXplKGZpbGVEYXRhLnNpemUoKSkKKyAgICA6IG1fc2l6ZShmaWxlRGF0
YS5kYXRhKCkuc2l6ZSgpKQogewogICAgIG1fc2VnbWVudHMuYXBwZW5kKHswLCBEYXRhU2VnbWVu
dDo6Y3JlYXRlKFdURk1vdmUoZmlsZURhdGEpKX0pOwogfQpAQCAtMTg4LDEzICsxODcsMTMgQEAg
dm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVuZChjb25zdCBTaGFyZWRCdQogICAgIEFTU0VSVChpbnRl
cm5hbGx5Q29uc2lzdGVudCgpKTsKIH0KIAotdm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVuZChjb25z
dCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoKQordm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVu
ZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKICAgICBBU1NFUlQoIW1faGFzQmVlbkNv
bWJpbmVkSW50b09uZVNlZ21lbnQpOwogICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3I7Ci0gICAg
dmVjdG9yLmFwcGVuZChkYXRhLCBsZW5ndGgpOwotICAgIG1fc2VnbWVudHMuYXBwZW5kKHttX3Np
emUsIERhdGFTZWdtZW50OjpjcmVhdGUoV1RGTW92ZSh2ZWN0b3IpKX0pOwotICAgIG1fc2l6ZSAr
PSBsZW5ndGg7CisgICAgdmVjdG9yLmFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKTsKKyAgICBtX3NlZ21lbnRzLmFwcGVuZCh7
IG1fc2l6ZSwgRGF0YVNlZ21lbnQ6OmNyZWF0ZShXVEZNb3ZlKHZlY3RvcikpIH0pOworICAgIG1f
c2l6ZSArPSBkYXRhLnNpemUoKTsKICAgICBBU1NFUlQoaW50ZXJuYWxseUNvbnNpc3RlbnQoKSk7
CiB9CiAKQEAgLTIzMiw3ICsyMzEsNyBAQCB2b2lkIFNoYXJlZEJ1ZmZlcjo6Zm9yRWFjaFNlZ21l
bnQoY29uc3QgCiAgICAgICAgIGFwcGx5KFNwYW4geyBzZWdtZW50LnNlZ21lbnQtPmRhdGEoKSwg
c2VnbWVudC5zZWdtZW50LT5zaXplKCkgfSk7CiB9CiAKLWJvb2wgU2hhcmVkQnVmZmVyOjpzdGFy
dHNXaXRoKGNvbnN0IFNwYW48Y29uc3QgdWludDhfdD4mIHByZWZpeCkgY29uc3QKK2Jvb2wgU2hh
cmVkQnVmZmVyOjpzdGFydHNXaXRoKGNvbnN0IFNwYW48Y29uc3Qgc3RkOjpieXRlPiYgcHJlZml4
KSBjb25zdAogewogICAgIGlmIChwcmVmaXguZW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC0yNDAsNyArMjM5LDcgQEAgYm9vbCBTaGFyZWRCdWZmZXI6OnN0YXJ0c1dpdGgoY29uc3Qg
U3BhbgogICAgIGlmIChzaXplKCkgPCBwcmVmaXguc2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBjb25zdCB1aW50OF90KiBwcmVmaXhQdHIgPSBwcmVmaXguZGF0YSgpOworICAg
IGF1dG8qIHByZWZpeFB0ciA9IHByZWZpeC5kYXRhKCk7CiAgICAgc2l6ZV90IHJlbWFpbmluZyA9
IHByZWZpeC5zaXplKCk7CiAgICAgZm9yIChhdXRvJiBzZWdtZW50IDogbV9zZWdtZW50cykgewog
ICAgICAgICBzaXplX3QgYW1vdW50VG9Db21wYXJlVGhpc1RpbWUgPSBzdGQ6Om1pbihyZW1haW5p
bmcsIHNlZ21lbnQuc2VnbWVudC0+c2l6ZSgpKTsKQEAgLTMwMSw5ICszMDAsMzggQEAgY29uc3Qg
dWludDhfdCogU2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVudAogI2lmIFVTRShHU1RSRUFNRVIpCiAg
ICAgICAgIFtdKGNvbnN0IFJlZlB0cjxHc3RNYXBwZWRPd25lZEJ1ZmZlcj4mIGRhdGEpIHsgcmV0
dXJuIGRhdGEtPmRhdGEoKTsgfSwKICNlbmRpZgotICAgICAgICBbXShjb25zdCBGaWxlU3lzdGVt
OjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGRhdGEuZGF0YSgpKTsgfQorICAgICAgICBbXShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRG
aWxlRGF0YSYgZGF0YSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4o
ZGF0YS5kYXRhKCkuZGF0YSgpKTsgfQorICAgICk7CisgICAgcmV0dXJuIFdURjo6dmlzaXQodmlz
aXRvciwgbV9pbW11dGFibGVEYXRhKTsKK30KKworU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IFNoYXJl
ZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmJ5dGVzKCkgY29uc3QKK3sKKyAgICBhdXRvIHZpc2l0b3Ig
PSBXVEY6Om1ha2VWaXNpdG9yKAorICAgICAgICBbXShjb25zdCBWZWN0b3I8dWludDhfdD4mIGRh
dGEpIHsKKyAgICAgICAgICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBkYXRhIH0pOworICAgICAg
ICB9LAorI2lmIFVTRShDRikKKyAgICAgICAgW10oY29uc3QgUmV0YWluUHRyPENGRGF0YVJlZj4m
IGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBhc0J5dGVzKGRhdGEuZ2V0KCkpOworICAgICAg
ICB9LAorI2VuZGlmCisjaWYgVVNFKEdMSUIpCisgICAgICAgIFtdKGNvbnN0IEdSZWZQdHI8R0J5
dGVzPiYgZGF0YSkgeworICAgICAgICAgICAgcmV0dXJuIGFzQnl0ZXMoU3BhbiB7IHN0YXRpY19j
YXN0PGNvbnN0IHVpbnQ4X3QqPihnX2J5dGVzX2dldF9kYXRhKGRhdGEuZ2V0KCksIG51bGxwdHIp
KSwgZ19ieXRlc19nZXRfc2l6ZShkYXRhLmdldCgpKSB9KTsKKyAgICAgICAgfSwKKyNlbmRpZgor
I2lmIFVTRShHU1RSRUFNRVIpCisgICAgICAgIFtdKGNvbnN0IFJlZlB0cjxHc3RNYXBwZWRPd25l
ZEJ1ZmZlcj4mIGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBkYXRh
LT5kYXRhKCksIGRhdGEtPnNpemUoKSB9KTsKKyAgICAgICAgfSwKKyNlbmRpZgorICAgICAgICBb
XShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeworICAgICAgICAgICAg
cmV0dXJuIGRhdGEuZGF0YSgpOworICAgICAgICB9CiAgICAgKTsKICAgICByZXR1cm4gV1RGOjp2
aXNpdCh2aXNpdG9yLCBtX2ltbXV0YWJsZURhdGEpOworCiB9CiAKIGJvb2wgU2hhcmVkQnVmZmVy
OjpEYXRhU2VnbWVudDo6Y29udGFpbnNNYXBwZWRGaWxlRGF0YSgpIGNvbnN0CkBAIC0zMTksNyAr
MzQ3LDcgQEAgdm9pZCBTaGFyZWRCdWZmZXI6OmhpbnRNZW1vcnlOb3ROZWVkZWRTbwogCiBXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyIFNoYXJlZEJ1ZmZlcjo6ZGVjb2RlcigpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIHsgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSgpKSwgc2l6
ZSgpIH07CisgICAgcmV0dXJuIHsgYnl0ZXMoKSB9OwogfQogCiBib29sIFNoYXJlZEJ1ZmZlcjo6
b3BlcmF0b3I9PShjb25zdCBTaGFyZWRCdWZmZXImIG90aGVyKSBjb25zdApAQCAtMzg0LDcgKzQx
Miw3IEBAIHNpemVfdCBTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpzaXplKCkKICNpZiBVU0Uo
R1NUUkVBTUVSKQogICAgICAgICBbXShjb25zdCBSZWZQdHI8R3N0TWFwcGVkT3duZWRCdWZmZXI+
JiBkYXRhKSB7IHJldHVybiBkYXRhLT5zaXplKCk7IH0sCiAjZW5kaWYKLSAgICAgICAgW10oY29u
c3QgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsgcmV0dXJuIGRhdGEuc2l6ZSgp
OyB9CisgICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBkYXRhKSB7
IHJldHVybiBkYXRhLmRhdGEoKS5zaXplKCk7IH0KICAgICApOwogICAgIHJldHVybiBXVEY6OnZp
c2l0KHZpc2l0b3IsIG1faW1tdXRhYmxlRGF0YSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TaGFyZWRCdWZmZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDggKzY3LDEyIEBA
IGNsYXNzIFNoYXJlZEJ1ZmZlckRhdGFWaWV3OwogY2xhc3MgV0VCQ09SRV9FWFBPUlQgU2hhcmVk
QnVmZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8U2hhcmVkQnVmZmVyPiB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
U2hhcmVkQnVmZmVyKTsgfQotICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoY29u
c3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hh
cmVkQnVmZmVyKGRhdGEsIHNpemUpKTsgfQotICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBj
cmVhdGUoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpIHsgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU2hhcmVkQnVmZmVyKGRhdGEsIHNpemUpKTsgfQorICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVm
ZmVyPiBjcmVhdGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpIHsgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU2hhcmVkQnVmZmVyKGRhdGEpKTsgfQorICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVy
PiBjcmVhdGUoU3Bhbjxjb25zdCB1aW50OF90PiBkYXRhKSB7IHJldHVybiBjcmVhdGUoYXNCeXRl
cyhkYXRhKSk7IH0KKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKFNwYW48Y29u
c3QgY2hhcj4gZGF0YSkgeyByZXR1cm4gY3JlYXRlKGFzQnl0ZXMoZGF0YSkpOyB9CisgICAgc3Rh
dGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShjb25zdCBzdGQ6OmJ5dGUqIGRhdGEsIHNpemVf
dCBzaXplKSB7IHJldHVybiBjcmVhdGUoU3BhbiB7IGRhdGEsIHNpemUgfSk7IH0KKyAgICBzdGF0
aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBz
aXplKSB7IHJldHVybiBjcmVhdGUoU3BhbiB7IGRhdGEsIHNpemUgfSk7IH0KKyAgICBzdGF0aWMg
UmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKSB7
IHJldHVybiBjcmVhdGUoU3BhbiB7IGRhdGEsIHNpemUgfSk7IH0KICAgICBzdGF0aWMgUmVmPFNo
YXJlZEJ1ZmZlcj4gY3JlYXRlKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYgbWFwcGVkRmls
ZURhdGEpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hhcmVkQnVmZmVyKFdURk1vdmUobWFwcGVk
RmlsZURhdGEpKSk7IH0KIAogICAgIGVudW0gY2xhc3MgTWF5VXNlRmlsZU1hcHBpbmcgOiBib29s
IHsgTm8sIFllcyB9OwpAQCAtMTAxLDYgKzEwNSw4IEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTog
QXVkaXQgdGhlIGNhbGwgc2l0ZXMgb2YgdGhpcyBmdW5jdGlvbiBhbmQgcmVwbGFjZSB0aGVtIHdp
dGggaXRlcmF0aW9uIGlmIHBvc3NpYmxlLgogICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEoKSBjb25z
dDsKICAgICBjb25zdCBjaGFyKiBkYXRhQXNDaGFyUHRyKCkgY29uc3QgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSgpKTsgfQorICAgIFNwYW48Y29uc3Qgc3RkOjpi
eXRlPiBieXRlcygpIGNvbnN0IHsgcmV0dXJuIGFzQnl0ZXMoU3BhbiB7IGRhdGEoKSwgc2l6ZSgp
IH0pOyB9CisKICAgICBWZWN0b3I8dWludDhfdD4gY29weURhdGEoKSB7IHJldHVybiB7IGRhdGEo
KSwgc2l6ZSgpIH07IH0KIAogICAgIC8vIENvbWJpbmVzIGFsbCB0aGUgc2VnbWVudHMgaW50byBh
IFZlY3RvciBhbmQgcmV0dXJucyB0aGF0IHZlY3RvciBhZnRlciBjbGVhcmluZyB0aGUgU2hhcmVk
QnVmZmVyLgpAQCAtMTE1LDggKzEyMSwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gIXNpemUoKTsgfQogCiAgICAgdm9pZCBhcHBlbmQoY29uc3QgU2hhcmVk
QnVmZmVyJik7Ci0gICAgdm9pZCBhcHBlbmQoY29uc3QgdWludDhfdCosIHNpemVfdCk7Ci0gICAg
dm9pZCBhcHBlbmQoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCkgeyBhcHBlbmQocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSksIGxlbmd0aCk7IH0KKyAgICB2b2lk
IGFwcGVuZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOworICAgIHZvaWQgYXBwZW5kKFNwYW48Y29u
c3QgdWludDhfdD4gZGF0YSkgeyBhcHBlbmQoYXNCeXRlcyhkYXRhKSk7IH0KKyAgICB2b2lkIGFw
cGVuZChTcGFuPGNvbnN0IGNoYXI+IGRhdGEpIHsgYXBwZW5kKGFzQnl0ZXMoZGF0YSkpOyB9Cisg
ICAgdm9pZCBhcHBlbmQoY29uc3Qgc3RkOjpieXRlKiBkYXRhLCBzaXplX3QgbGVuZ3RoKSB7IGFw
cGVuZChTcGFuIHsgZGF0YSwgbGVuZ3RoIH0pOyB9CisgICAgdm9pZCBhcHBlbmQoY29uc3QgdWlu
dDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCkgeyBhcHBlbmQoU3BhbiB7IGRhdGEsIGxlbmd0aCB9
KTsgfQorICAgIHZvaWQgYXBwZW5kKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpIHsg
YXBwZW5kKFNwYW4geyBkYXRhLCBsZW5ndGggfSk7IH0KICAgICB2b2lkIGFwcGVuZChWZWN0b3I8
dWludDhfdD4mJik7CiAKICAgICB2b2lkIGNsZWFyKCk7CkBAIC0xMzEsNiArMTQxLDggQEAgcHVi
bGljOgogICAgICAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCB1aW50OF90KiBkYXRhKCkgY29uc3Q7
CiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIHNpemVfdCBzaXplKCkgY29uc3Q7CiAKKyAgICAgICAg
V0VCQ09SRV9FWFBPUlQgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGJ5dGVzKCkgY29uc3Q7CisKICAg
ICAgICAgc3RhdGljIFJlZjxEYXRhU2VnbWVudD4gY3JlYXRlKFZlY3Rvcjx1aW50OF90PiYmIGRh
dGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIGRhdGEuc2hyaW5rVG9GaXQoKTsKQEAgLTE4Nyw3
ICsxOTksOSBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIHZvaWQgZm9yRWFjaFNlZ21lbnQoY29u
c3QgRnVuY3Rpb248dm9pZChjb25zdCBTcGFuPGNvbnN0IHVpbnQ4X3Q+Jik+JikgY29uc3Q7Ci0g
ICAgYm9vbCBzdGFydHNXaXRoKGNvbnN0IFNwYW48Y29uc3QgdWludDhfdD4mIHByZWZpeCkgY29u
c3Q7CisKKyAgICBib29sIHN0YXJ0c1dpdGgoY29uc3QgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+JiBw
cmVmaXgpIGNvbnN0OworICAgIGJvb2wgc3RhcnRzV2l0aChjb25zdCBTcGFuPGNvbnN0IHVpbnQ4
X3Q+JiBwcmVmaXgpIGNvbnN0IHsgcmV0dXJuIHN0YXJ0c1dpdGgoYXNCeXRlcyhwcmVmaXgpKTsg
fQogCiAgICAgc3RydWN0IERhdGFTZWdtZW50VmVjdG9yRW50cnkgewogICAgICAgICBzaXplX3Qg
YmVnaW5Qb3NpdGlvbjsKQEAgLTIxMiw4ICsyMjYsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAg
ICAgZXhwbGljaXQgU2hhcmVkQnVmZmVyKCkgPSBkZWZhdWx0OwotICAgIGV4cGxpY2l0IFNoYXJl
ZEJ1ZmZlcihjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKLSAgICBleHBsaWNpdCBTaGFyZWRCdWZm
ZXIoY29uc3QgY2hhciosIHNpemVfdCk7CisgICAgZXhwbGljaXQgU2hhcmVkQnVmZmVyKFNwYW48
Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgZXhwbGljaXQgU2hhcmVkQnVmZmVyKFZlY3Rvcjx1aW50
OF90PiYmKTsKICAgICBleHBsaWNpdCBTaGFyZWRCdWZmZXIoRmlsZVN5c3RlbTo6TWFwcGVkRmls
ZURhdGEmJik7CiAjaWYgVVNFKENGKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vY29jb2EvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29h
L0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3
IEBACiAKICNpbmNsdWRlICJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSA8Q29y
ZUF1ZGlvL0NvcmVBdWRpb1R5cGVzLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC04MCwxMyArODEsMTMgQEAgcHJpdmF0ZToKIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+CiB2b2lkIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0CiB7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oJm1fc3RyZWFtRGVzY3JpcHRpb24pLCBz
aXplb2YobV9zdHJlYW1EZXNjcmlwdGlvbiksIDEpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKFNwYW4geyAmbV9zdHJlYW1EZXNjcmlwdGlvbiwgMSB9LCAxKTsKIH0KIAogdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4KIGJvb2wgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlciwgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBkZXNjcmlwdGlv
bikKIHsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oJmRlc2NyaXB0aW9uLm1fc3RyZWFtRGVzY3JpcHRpb24pLCBzaXpl
b2YoZGVzY3JpcHRpb24ubV9zdHJlYW1EZXNjcmlwdGlvbiksIDEpOworICAgIHJldHVybiBkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJmRlc2NyaXB0aW9uLm1fc3RyZWFtRGVz
Y3JpcHRpb24sIDEgfSwgMSk7CiB9CiAKIGlubGluZSBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24g
dG9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oY29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYg
ZGVzY3JpcHRpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRp
YS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVh
cmtleS9DRE1DbGVhcktleS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OCwxNSArMTk4LDEzIEBA
IHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBleHRyYWN0S2V5aWRzRnIKIHsKICAgICBSZWY8U2hh
cmVkQnVmZmVyPiBrZXlJZHMgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZSgpOwogCi0gICAgc3RkOjpw
YWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4ga2V5SWRzTWFwID0gZXh0cmFjdEtleWlkc0xvY2F0aW9u
RnJvbUNlbmNJbml0RGF0YShpbml0RGF0YSk7Ci0gICAgdW5zaWduZWQga2V5SWRDb3VudCA9IGtl
eUlkc01hcC5maXJzdDsKLSAgICB1bnNpZ25lZCBpbmRleCA9IGtleUlkc01hcC5zZWNvbmQ7Cisg
ICAgYXV0byBba2V5SWRDb3VudCwgaW5kZXhdID0gZXh0cmFjdEtleWlkc0xvY2F0aW9uRnJvbUNl
bmNJbml0RGF0YShpbml0RGF0YSk7CiAKICAgICAvLyBDaGVjayBpZiBpbml0RGF0YSBpcyBhIHZh
bGlkIENFTkMgaW5pdERhdGEuCiAgICAgaWYgKCFrZXlJZENvdW50IHx8ICFpbmRleCkKICAgICAg
ICAgcmV0dXJuIGtleUlkczsKIAotICAgIGF1dG8qIGRhdGEgPSBpbml0RGF0YS5kYXRhKCk7Cisg
ICAgYXV0byBkYXRhID0gaW5pdERhdGEuYnl0ZXMoKTsKIAogICAgIGF1dG8gb2JqZWN0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBhdXRvIGtleUlkc0FycmF5ID0gSlNPTjo6QXJyYXk6
OmNyZWF0ZSgpOwpAQCAtMjE4LDcgKzIxNiw3IEBAIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBl
eHRyYWN0S2V5aWRzRnIKICAgICAvLyAia2lkcyIKICAgICAvLyBBbiBhcnJheSBvZiBrZXkgSURz
LiBFYWNoIGVsZW1lbnQgb2YgdGhlIGFycmF5IGlzIHRoZSBiYXNlNjR1cmwgZW5jb2Rpbmcgb2Yg
dGhlIG9jdGV0IHNlcXVlbmNlIGNvbnRhaW5pbmcgdGhlIGtleSBJRCB2YWx1ZS4KICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5SWRDb3VudDsgaSsrKSB7Ci0gICAgICAgIGtleUlkc0Fy
cmF5LT5wdXNoU3RyaW5nKGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKCZkYXRhW2luZGV4XSwgQ2xl
YXJLZXk6OktleUlEU2l6ZUluQnl0ZXMpKTsKKyAgICAgICAga2V5SWRzQXJyYXktPnB1c2hTdHJp
bmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoZGF0YS5zdWJzcGFuKGluZGV4LCBDbGVhcktleTo6
S2V5SURTaXplSW5CeXRlcykpKTsKICAgICAgICAgaW5kZXggKz0gQ2xlYXJLZXk6OktleUlEU2l6
ZUluQnl0ZXM7CiAgICAgfQogCkBAIC0yNDUsNyArMjQzLDcgQEAgc3RhdGljIFJlZjxTaGFyZWRC
dWZmZXI+IGV4dHJhY3RLZXlJZEZybwogICAgIC8vIFRoZSBmb3JtYXQgaXMgYSBKU09OIG9iamVj
dCBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgbWVtYmVyczoKICAgICAvLyAia2lkcyIKICAgICAv
LyBBbiBhcnJheSBvZiBrZXkgSURzLiBFYWNoIGVsZW1lbnQgb2YgdGhlIGFycmF5IGlzIHRoZSBi
YXNlNjR1cmwgZW5jb2Rpbmcgb2YgdGhlIG9jdGV0IHNlcXVlbmNlIGNvbnRhaW5pbmcgdGhlIGtl
eSBJRCB2YWx1ZS4KLSAgICBrZXlJZHNBcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVU
b1N0cmluZyhpbml0RGF0YS5kYXRhKCksIGluaXREYXRhLnNpemUoKSkpOworICAgIGtleUlkc0Fy
cmF5LT5wdXNoU3RyaW5nKGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGluaXREYXRhLmJ5dGVzKCkp
KTsKIAogICAgIG9iamVjdC0+c2V0QXJyYXkoImtpZHMiLCBXVEZNb3ZlKGtleUlkc0FycmF5KSk7
CiAgICAgQ1N0cmluZyBqc29uRGF0YSA9IG9iamVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgpOwpA
QCAtNTc4LDkgKzU3Niw4IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlbW92
ZVMKIAogICAgIC8vIENvbnN0cnVjdCB0aGUgS2V5U3RhdHVzVmVjdG9yIG9iamVjdCwgcmVwcmVz
ZW50aW5nIHJlbGVhc2VkIGtleXMsIGFuZCB0aGUgbWVzc2FnZSBpbiB0aGUKICAgICAvLyAnbGlj
ZW5zZSByZWxlYXNlJyBmb3JtYXQuCi0gICAgS2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1c1ZlY3Rv
ciA9IG1fa2V5U3RvcmUuYWxsS2V5c0FzKENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpS
ZWxlYXNlZCk7Ci0gICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbWVzc2FnZTsKLSAgICB7CisgICAg
YXV0byBrZXlTdGF0dXNWZWN0b3IgPSBtX2tleVN0b3JlLmFsbEtleXNBcyhDRE1JbnN0YW5jZVNl
c3Npb246OktleVN0YXR1czo6UmVsZWFzZWQpOworICAgIGF1dG8gbWVzc2FnZSA9IFsmXXsKICAg
ICAgICAgLy8gQ29uc3RydWN0IEpTT04gdGhhdCByZXByZXNlbnRzIHRoZSAnbGljZW5zZSByZWxl
YXNlJyBmb3JtYXQsIGNyZWF0aW5nIGEgJ2tpZHMnIGFycmF5CiAgICAgICAgIC8vIG9mIGJhc2U2
NFVSTC1lbmNvZGVkIGtleSBJRHMgZm9yIGFsbCBrZXlzIHRoYXQgd2VyZSBhc3NvY2lhdGVkIHdp
dGggdGhpcyBzZXNzaW9uLgogICAgICAgICBhdXRvIHJvb3RPYmplY3QgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwpAQCAtNTg4LDcgKzU4NSw3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xl
YXJLZXk6OnJlbW92ZVMKICAgICAgICAgICAgIGF1dG8gYXJyYXkgPSBKU09OOjpBcnJheTo6Y3Jl
YXRlKCk7CiAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IG1fa2V5U3RvcmUpIHsK
ICAgICAgICAgICAgICAgICBBU1NFUlQoa2V5LT5pZCgpLnNpemUoKSA8PSBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOwotICAgICAgICAgICAgICAgIGFycmF5LT5wdXNoU3Ry
aW5nKGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGtleS0+aWQoKS5kYXRhKCksIGtleS0+aWQoKS5z
aXplKCkpKTsKKyAgICAgICAgICAgICAgICBhcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNv
ZGVUb1N0cmluZyhrZXktPmlkKCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJvb3RP
YmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92ZShhcnJheSkpOwogICAgICAgICB9CkBAIC01
OTYsMTEgKzU5MywxMSBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVT
CiAgICAgICAgIC8vIENvcHkgdGhlIEpTT04gZGF0YSBpbnRvIGEgU2hhcmVkQnVmZmVyIG9iamVj
dC4KICAgICAgICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmcgPSByb290T2JqZWN0LT50b0pTT05TdHJp
bmcoKTsKICAgICAgICAgQ1N0cmluZyBtZXNzYWdlQ1N0cmluZyA9IG1lc3NhZ2VTdHJpbmcudXRm
OCgpOwotICAgICAgICBtZXNzYWdlID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUobWVzc2FnZUNTdHJp
bmcuZGF0YSgpLCBtZXNzYWdlQ1N0cmluZy5sZW5ndGgoKSk7Ci0gICAgfQorICAgICAgICByZXR1
cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUobWVzc2FnZUNTdHJpbmcuZGF0YSgpLCBtZXNzYWdlQ1N0
cmluZy5sZW5ndGgoKSk7CisgICAgfSgpOwogCiAgICAgbV9rZXlTdG9yZS5yZW1vdmVBbGxLZXlz
KCk7Ci0gICAgZGlzcGF0Y2hDYWxsYmFjayhXVEZNb3ZlKGtleVN0YXR1c1ZlY3RvciksIFJlZjxT
aGFyZWRCdWZmZXI+KCptZXNzYWdlKSwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVkZWQpOworICAgIGRp
c3BhdGNoQ2FsbGJhY2soV1RGTW92ZShrZXlTdGF0dXNWZWN0b3IpLCBXVEZNb3ZlKG1lc3NhZ2Up
LCBTdWNjZXNzVmFsdWU6OlN1Y2NlZWRlZCk7CiB9CiAKIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9u
Q2xlYXJLZXk6OnN0b3JlUmVjb3JkT2ZLZXlVc2FnZShjb25zdCBTdHJpbmcmKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9LZXllZERlY29kZXJHZW5lcmljLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL0tleWVkRGVjb2Rlckdl
bmVyaWMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
ZW5lcmljL0tleWVkRGVjb2RlckdlbmVyaWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1
OCw3IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gcmVhZFN0cmluZygKICAgICAgICAg
cmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyKHNpemUu
dmFsdWUoKSk7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShidWZmZXIu
ZGF0YSgpLCBzaXplLnZhbHVlKCkpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0
aERhdGEoU3BhbiB7IGJ1ZmZlciB9KSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAg
ICBhdXRvIHJlc3VsdCA9IFN0cmluZzo6ZnJvbVVURjgoYnVmZmVyLmRhdGEoKSwgc2l6ZS52YWx1
ZSgpKTsKICAgICBpZiAocmVzdWx0LmlzTnVsbCgpKQpAQCAtODgsNyArODgsNyBAQCBzdGQ6OnVu
aXF1ZV9wdHI8S2V5ZWREZWNvZGVyPiBLZXllZERlY29kCiAKIEtleWVkRGVjb2RlckdlbmVyaWM6
OktleWVkRGVjb2RlckdlbmVyaWMoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCiB7
Ci0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOworICAg
IFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihTcGFuIHsgZGF0YSwgc2l6ZSB9KTsK
IAogICAgIG1fcm9vdERpY3Rpb25hcnkgPSBtYWtlVW5pcXVlPERpY3Rpb25hcnk+KCk7CiAgICAg
bV9kaWN0aW9uYXJ5U3RhY2suYXBwZW5kKG1fcm9vdERpY3Rpb25hcnkuZ2V0KCkpOwpAQCAtMTE3
LDcgKzExNyw3IEBAIEtleWVkRGVjb2RlckdlbmVyaWM6OktleWVkRGVjb2RlckdlbmVyaWMKICAg
ICAgICAgICAgIGlmICghb2spCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBW
ZWN0b3I8dWludDhfdD4gYnVmZmVyKCpzaXplKTsKLSAgICAgICAgICAgIG9rID0gZGVjb2Rlci5k
ZWNvZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLmRhdGEoKSwgKnNpemUpOworICAgICAgICAgICAg
b2sgPSBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgYnVmZmVyIH0pOwogICAg
ICAgICAgICAgaWYgKCFvaykKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIG1f
ZGljdGlvbmFyeVN0YWNrLmxhc3QoKS0+YWRkKCprZXksIFdURk1vdmUoYnVmZmVyKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Nb2RlbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01vZGVsLmgJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01vZGVsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU2LDcgKzU2LDcgQEAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgTW9k
ZWw6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8c2l6ZV90PihtX2RhdGEtPnNpemUoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhl
ZExlbmd0aERhdGEobV9kYXRhLT5kYXRhKCksIG1fZGF0YS0+c2l6ZSgpLCAxKTsKKyAgICBlbmNv
ZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShtX2RhdGEtPmJ5dGVzKCksIDEpOwogfQogCiB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPgpAQCAtNzQsNyArNzQsNyBAQCBSZWZQdHI8TW9kZWw+IE1vZGVs
OjpkZWNvZGUoRGVjb2RlciYgZGVjCiAKICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKICAgICBk
YXRhLmdyb3coKmxlbmd0aCk7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0
YShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksIDEpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVG
aXhlZExlbmd0aERhdGEoZGF0YSwgMSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAg
cmV0dXJuIE1vZGVsOjpjcmVhdGUoU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShkYXRhKSkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZl
ci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9QaXhlbEJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IHZvaWQgUGl4ZWxCdWZmZXIKIAogICAgIGVuY29kZXIgPDwgbV9mb3Jt
YXQ7CiAgICAgZW5jb2RlciA8PCBtX3NpemU7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEobV9kYXRhLT5kYXRhKCksIG1fZGF0YS0+Ynl0ZUxlbmd0aCgpLCAxKTsKKyAgICBlbmNv
ZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShtX2RhdGEtPmJ5dGVzKCksIDEpOwogfQogCiB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBQaXhlbEJ1ZmZl
cjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCkBAIC0xMTMsNyArMTEzLDcgQEAgdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4gc3RkOjpvcHRpb25hbDxQaQogICAgIGlmICghcmVzdWx0KQogICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVu
Z3RoRGF0YShyZXN1bHQtPm1fZGF0YS0+ZGF0YSgpLCByZXN1bHQtPm1fZGF0YS0+Ynl0ZUxlbmd0
aCgpLCAxKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlc3VsdC0+
bV9kYXRhLT53cml0YWJsZUJ5dGVzKCksIDEpKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwogCiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZP
YmpDLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQkod29y
a2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQAogI2ltcG9ydCA8d3RmL0ZpbGVTeXN0ZW0uaD4K
ICNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW1wb3J0IDx3dGYvTG9nZ2VySGVscGVyLmg+
CisjaW1wb3J0IDx3dGYvY29jb2EvU3BhbkNvY29hLmg+CiAjaW1wb3J0IDx3dGYvY29jb2EvVmVj
dG9yQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogI2ltcG9ydCA8d3RmL3Rl
eHQvU3RyaW5nSGFzaC5oPgpAQCAtNzE1LDcgKzcxNiw3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNz
aW9uRmFpclBsYXlTdHJlYW1pbmcKICAgICAgICAgaWRlbnRpZmllciA9IGFkb3B0TlMoW1tOU1N0
cmluZyBhbGxvY10gaW5pdFdpdGhEYXRhOmluaXREYXRhLT5jcmVhdGVOU0RhdGEoKS5nZXQoKSBl
bmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10pOwogI2lmIEhBVkUoRkFJUlBMQVlTVFJFQU1J
TkdfQ0VOQ19JTklUREFUQSkKICAgICBlbHNlIGlmIChpbml0RGF0YVR5cGUgPT0gSW5pdERhdGFS
ZWdpc3RyeTo6Y2VuY05hbWUoKSkgewotICAgICAgICBhdXRvIHBzc2hTdHJpbmcgPSBiYXNlNjRF
bmNvZGVUb1N0cmluZyhpbml0RGF0YS0+ZGF0YSgpLCBpbml0RGF0YS0+c2l6ZSgpKTsKKyAgICAg
ICAgYXV0byBwc3NoU3RyaW5nID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5pdERhdGEtPmJ5dGVz
KCkpOwogICAgICAgICBpbml0aWFsaXphdGlvbkRhdGEgPSBbTlNKU09OU2VyaWFsaXphdGlvbiBk
YXRhV2l0aEpTT05PYmplY3Q6QHsgQCJwc3NoIjogKE5TU3RyaW5nKilwc3NoU3RyaW5nIH0gb3B0
aW9uczpOU0pTT05Xcml0aW5nUHJldHR5UHJpbnRlZCBlcnJvcjpuaWxdOwogICAgIH0KICNlbmRp
ZgpAQCAtMTE5MSwxMiArMTE5MiwxMCBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5
U3RyZWFtaW5nCiAgICAgICAgIH0KIAogICAgICAgICBhdXRvIHJlcXVlc3RKU09OID0gSlNPTjo6
QXJyYXk6OmNyZWF0ZSgpOwotICAgICAgICBmb3IgKGF1dG8mIHJlcXVlc3REYXRhIDogcmVxdWVz
dHNEYXRhKSB7CisgICAgICAgIGZvciAoYXV0byYgW2tleUlELCBwYXlsb2FkXSA6IHJlcXVlc3Rz
RGF0YSkgewogICAgICAgICAgICAgYXV0byBlbnRyeSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
Ci0gICAgICAgICAgICBhdXRvJiBrZXlJRCA9IHJlcXVlc3REYXRhLmZpcnN0OwotICAgICAgICAg
ICAgYXV0byYgcGF5bG9hZCA9IHJlcXVlc3REYXRhLnNlY29uZDsKLSAgICAgICAgICAgIGVudHJ5
LT5zZXRTdHJpbmcoImtleUlEIiwgYmFzZTY0RW5jb2RlVG9TdHJpbmcoa2V5SUQtPmRhdGEoKSwg
a2V5SUQtPnNpemUoKSkpOwotICAgICAgICAgICAgZW50cnktPnNldFN0cmluZygicGF5bG9hZCIs
IGJhc2U2NEVuY29kZVRvU3RyaW5nKHBheWxvYWQuZ2V0KCkuYnl0ZXMsIHBheWxvYWQuZ2V0KCku
bGVuZ3RoKSk7CisgICAgICAgICAgICBlbnRyeS0+c2V0U3RyaW5nKCJrZXlJRCIsIGJhc2U2NEVu
Y29kZVRvU3RyaW5nKGtleUlELT5ieXRlcygpKSk7CisgICAgICAgICAgICBlbnRyeS0+c2V0U3Ry
aW5nKCJwYXlsb2FkIiwgYmFzZTY0RW5jb2RlVG9TdHJpbmcoYXNCeXRlcyhwYXlsb2FkLmdldCgp
KSkpOwogICAgICAgICAgICAgcmVxdWVzdEpTT04tPnB1c2hPYmplY3QoV1RGTW92ZShlbnRyeSkp
OwogICAgICAgICB9CiAgICAgICAgIGF1dG8gcmVxdWVzdEJ1ZmZlciA9IHV0ZjhCdWZmZXIocmVx
dWVzdEpTT04tPnRvSlNPTlN0cmluZygpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
QmFja2VuZC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTMyLDcgKzEzMiw3IEBAIFN0cmluZyBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9E
YXRhVVIKICAgICBpZiAoZW5jb2RlZEltYWdlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuICJk
YXRhOiwiOwogCi0gICAgcmV0dXJuIG1ha2VTdHJpbmcoImRhdGE6IiwgbWltZVR5cGUsICI7YmFz
ZTY0LCIsIGJhc2U2NEVuY29kZWQoZW5jb2RlZEltYWdlLmRhdGEoKSwgZW5jb2RlZEltYWdlLnNp
emUoKSkpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCJkYXRhOiIsIG1pbWVUeXBlLCAiO2Jhc2U2
NCwiLCBiYXNlNjRFbmNvZGVkKGVuY29kZWRJbWFnZSkpOwogfQogCiBWZWN0b3I8dWludDhfdD4g
SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBz
dGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBs
YXRmb3JtRGF0YS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTAwLDcgKzEwMCw3IEBAIHN0YXRpYyBTdHJpbmcgY3JlYXRlVW5pcXVlRm9udE5hbWUo
KQogICAgIEdVSUQgZm9udFV1aWQ7CiAgICAgQ29DcmVhdGVHdWlkKCZmb250VXVpZCk7CiAKLSAg
ICBhdXRvIGZvbnROYW1lID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcocmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oJmZvbnRVdWlkKSwgc2l6ZW9mKGZvbnRVdWlkKSk7CisgICAgYXV0byBmb250TmFtZSA9
IGJhc2U2NEVuY29kZVRvU3RyaW5nKFNwYW4geyAmZm9udFV1aWQsIDEgfSk7CiAgICAgQVNTRVJU
KGZvbnROYW1lLmxlbmd0aCgpIDwgTEZfRkFDRVNJWkUpOwogICAgIHJldHVybiBmb250TmFtZTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9t
UGxhdGZvcm1EYXRhQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3BwCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1
c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBA
QCBzdGF0aWMgU3RyaW5nIGNyZWF0ZVVuaXF1ZUZvbnROYW1lKCkKICAgICBHVUlEIGZvbnRVdWlk
OwogICAgIENvQ3JlYXRlR3VpZCgmZm9udFV1aWQpOwogCi0gICAgYXV0byBmb250TmFtZSA9IGJh
c2U2NEVuY29kZVRvU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZmb250VXVpZCksIHNp
emVvZihmb250VXVpZCkpOworICAgIGF1dG8gZm9udE5hbWUgPSBiYXNlNjRFbmNvZGVUb1N0cmlu
ZyhTcGFuIHsgJmZvbnRVdWlkLCAxIH0pOwogICAgIEFTU0VSVChmb250TmFtZS5sZW5ndGgoKSA8
IExGX0ZBQ0VTSVpFKTsKICAgICByZXR1cm4gZm9udE5hbWU7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvU1NMS2V5R2VuZXJhdG9yTWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0b3JNYWMubW0JKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0b3JN
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTIxOSw3ICsyMTksNyBAQCBzdGF0aWMgU3RyaW5nIHNp
Z25lZFB1YmxpY0tleUFuZENoYWxsZW5nCiAgICAgaWYgKFNlY0FzbjFFbmNvZGVJdGVtKGNvZGVy
LCAmc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlLCBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVu
Z2VUZW1wbGF0ZSwgJmVuY29kZWRTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2UpICE9IG5vRXJy
KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9T
dHJpbmcoZW5jb2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZS5EYXRhLCBlbmNvZGVkU2ln
bmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlLkxlbmd0aCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29k
ZVRvU3RyaW5nKFNwYW4geyBlbmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlLkRhdGEs
IGVuY29kZWRTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2UuTGVuZ3RoIH0pOwogfQogCiBBTExP
V19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlh
U291cmNlQ2FwYWJpbGl0aWVzLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMTE0LDE2ICsxMTQsMTYgQEAgcHJpdmF0ZToKIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+CiB2b2lkIENhcGFiaWxpdHlWYWx1ZU9yUmFuZ2U6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAogewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZtX21pbk9yVmFsdWUpLCBzaXplb2YoVmFs
dWVVbmlvbiksIGFsaWdub2YoVmFsdWVVbmlvbikpOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZtX21heCksIHNpemVv
ZihWYWx1ZVVuaW9uKSwgYWxpZ25vZihWYWx1ZVVuaW9uKSk7CisgICAgZW5jb2Rlci5lbmNvZGVG
aXhlZExlbmd0aERhdGEoU3BhbiB7ICZtX21pbk9yVmFsdWUsIDEgfSwgYWxpZ25vZihWYWx1ZVVu
aW9uKSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZtX21heCwg
MSB9LCBhbGlnbm9mKFZhbHVlVW5pb24pKTsKICAgICBlbmNvZGVyIDw8IG1fdHlwZTsKIH0KIAog
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KIGJvb2wgQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZTo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIsIENhcGFiaWxpdHlWYWx1ZU9yUmFuZ2UmIHZhbHVlT3JSYW5n
ZSkKIHsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oJnZhbHVlT3JSYW5nZS5tX21pbk9yVmFsdWUpLCBzaXplb2YoVmFs
dWVVbmlvbiksIGFsaWdub2YoVmFsdWVVbmlvbikpCi0gICAgICAgICYmIGRlY29kZXIuZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2YWx1ZU9yUmFuZ2Uu
bV9tYXgpLCBzaXplb2YoVmFsdWVVbmlvbiksIGFsaWdub2YoVmFsdWVVbmlvbikpCisgICAgcmV0
dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmdmFsdWVPclJhbmdlLm1f
bWluT3JWYWx1ZSwgMSB9LCBhbGlnbm9mKFZhbHVlVW5pb24pKQorICAgICAgICAmJiBkZWNvZGVy
LmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJnZhbHVlT3JSYW5nZS5tX21heCwgMSB9LCBh
bGlnbm9mKFZhbHVlVW5pb24pKQogICAgICAgICAmJiBkZWNvZGVyLmRlY29kZSh2YWx1ZU9yUmFu
Z2UubV90eXBlKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksMTMg
KzEzOSwxMyBAQCBzdGF0aWMgdm9pZCBhZGRTdHJpbmdUb1NIQTEoU0hBMSYgc2hhMSwgCiAKICAg
ICBpZiAoc3RyaW5nLmlzOEJpdCgpICYmIHN0cmluZy5pc0FsbEFTQ0lJKCkpIHsKICAgICAgICAg
Y29uc3QgdWludDhfdCBudWxsQnl0ZSA9IDA7Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMoc3RyaW5n
LmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSk7Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMo
Jm51bGxCeXRlLCAxKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgc3RyaW5nLmNoYXJh
Y3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSB9KTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFu
IHsgJm51bGxCeXRlLCAxIH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgYXV0byB1
dGY4ID0gc3RyaW5nLnV0ZjgoKTsKLSAgICBzaGExLmFkZEJ5dGVzKHV0ZjguZGF0YUFzVUludDhQ
dHIoKSwgdXRmOC5sZW5ndGgoKSArIDEpOyAvLyBJbmNsdWRlIHRlcm1pbmF0aW5nIG51bGwgYnl0
ZS4KKyAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyB1dGY4LmRhdGFBc1VJbnQ4UHRyKCksIHV0Zjgu
bGVuZ3RoKCkgKyAxIH0pOyAvLyBJbmNsdWRlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4KIH0KIAog
U3RyaW5nIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6Omhhc2hTdHJpbmdXaXRoU2FsdChjb25z
dCBTdHJpbmcmIGlkLCBjb25zdCBTdHJpbmcmIGhhc2hTYWx0KQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsQmFzZS5jcHAJKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw4ICs5Nyw5IEBAIGJvb2wgQ3JlZGVudGlhbEJh
c2U6OmNvbXBhcmUoY29uc3QgQ3JlZGUKIAogU3RyaW5nIENyZWRlbnRpYWxCYXNlOjpzZXJpYWxp
emF0aW9uRm9yQmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKCkgY29uc3QKIHsKKyAgICAvLyBGSVhN
RTogQWRkIG1ha2VTdHJpbmcgdmFyaWFudCB0aGF0IGNyZWF0ZXMgYSB1dGY4IGJ1ZmZlciBkaXJl
Y3RseS4KICAgICBhdXRvIGNyZWRlbnRpYWxTdHJpbmdEYXRhID0gbWFrZVN0cmluZyhtX3VzZXIs
ICc6JywgbV9wYXNzd29yZCkudXRmOCgpOwotICAgIHJldHVybiBtYWtlU3RyaW5nKCJCYXNpYyAi
LCBiYXNlNjRFbmNvZGVkKGNyZWRlbnRpYWxTdHJpbmdEYXRhKSk7CisgICAgcmV0dXJuIG1ha2VT
dHJpbmcoIkJhc2ljICIsIGJhc2U2NEVuY29kZWQoY3JlZGVudGlhbFN0cmluZ0RhdGEuYnl0ZXMo
KSkpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nl
cnRpZmljYXRlSW5mb0NGTmV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2NmL0NlcnRpZmljYXRlSW5mb0NGTmV0LmNwcAkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9D
Rk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMCw3ICsyMTAsNyBAQCBzdGF0aWMgdm9pZCBl
bmNvZGVDRkRhdGEoRW5jb2RlciYgZW5jb2RlCiAgICAgY29uc3QgdWludDhfdCogYnl0ZVB0ciA9
IENGRGF0YUdldEJ5dGVQdHIoZGF0YSk7CiAKICAgICBlbmNvZGVyIDw8IGxlbmd0aDsKLSAgICBl
bmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShieXRlUHRyLCBzdGF0aWNfY2FzdDxzaXplX3Q+
KGxlbmd0aCkpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBieXRl
UHRyLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkgfSk7CiB9CiAKIHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPFJldGFpblB0cjxDRkRhdGFSZWY+PiBkZWNvZGVDRkRhdGEoRGVjb2RlciYgZGVjb2Rl
cikKQEAgLTIyNSw3ICsyMjUsNyBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXRhaW5QdHI8Q0ZE
YXRhUmVmCiAgICAgaWYgKCFwb2ludGVyKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owog
Ci0gICAgcmV0dXJuIGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlKG51bGxwdHIsIHBvaW50ZXIsICpzaXpl
KSk7CisgICAgcmV0dXJuIGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlKG51bGxwdHIsIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHBvaW50ZXIpLCAqc2l6ZSkpOwogfQogCiAjaWYgSEFWRShT
RUNfVFJVU1RfU0VSSUFMSVpBVElPTikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9DZXJ0aWZpY2F0ZUluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ2VydGlmaWNhdGVJbmZvLmgJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9DZXJ0aWZpY2F0ZUlu
Zm8uaAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBD
b2RlcjxHUmVmUHRyPEdCeXRlQXJyCiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXIgJmVu
Y29kZXIsIGNvbnN0IEdSZWZQdHI8R0J5dGVBcnJheT4mIGJ5dGVBcnJheSkKICAgICB7CiAgICAg
ICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGJ5dGVBcnJheS0+bGVuKTsKLSAg
ICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYnl0ZUFycmF5LT5kYXRhLCBieXRl
QXJyYXktPmxlbik7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4g
eyBieXRlQXJyYXktPmRhdGEsIGJ5dGVBcnJheS0+bGVuIH0pOwogICAgIH0KIAogICAgIHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPEdSZWZQdHI8R0J5dGVBcnJheT4+IGRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQpAQCAtODcsNyArODcsNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxHUmVmUHRyPEdC
eXRlQXJyCiAKICAgICAgICAgR1JlZlB0cjxHQnl0ZUFycmF5PiBieXRlQXJyYXkgPSBhZG9wdEdS
ZWYoZ19ieXRlX2FycmF5X3NpemVkX25ldygqc2l6ZSkpOwogICAgICAgICBnX2J5dGVfYXJyYXlf
c2V0X3NpemUoYnl0ZUFycmF5LmdldCgpLCAqc2l6ZSk7Ci0gICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGVGaXhlZExlbmd0aERhdGEoYnl0ZUFycmF5LT5kYXRhLCAqc2l6ZSkpCisgICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IGJ5dGVBcnJheS0+ZGF0YSwg
KnNpemUgfSkpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAgICByZXR1
cm4gYnl0ZUFycmF5OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9T
UUxpdGVTdGF0ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODUsNyArODUsNyBAQCBib29sIFNRTGl0ZVN0YXRlbWVudDo6ZXhlY3V0ZUNvbW1hbmQoKQogICAg
IHJldHVybiBzdGVwKCkgPT0gU1FMSVRFX0RPTkU7CiB9CiAKLWludCBTUUxpdGVTdGF0ZW1lbnQ6
OmJpbmRCbG9iKGludCBpbmRleCwgU3Bhbjxjb25zdCB1aW50OF90PiBibG9iKQoraW50IFNRTGl0
ZVN0YXRlbWVudDo6YmluZEJsb2IoaW50IGluZGV4LCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYmxv
YikKIHsKICAgICBBU1NFUlQoaW5kZXggPiAwKTsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGluZGV4KSA8PSBiaW5kUGFyYW1ldGVyQ291bnQoKSk7CkBAIC05NSw2ICs5NSwxMSBA
QCBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kQmxvYihpbnQgaW5kZXgsCiAgICAgcmV0dXJuIHNx
bGl0ZTNfYmluZF9ibG9iKG1fc3RhdGVtZW50LCBpbmRleCwgYmxvYi5kYXRhKCksIGJsb2Iuc2l6
ZSgpLCBTUUxJVEVfVFJBTlNJRU5UKTsKIH0KIAoraW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEJs
b2IoaW50IGluZGV4LCBTcGFuPGNvbnN0IHVpbnQ4X3Q+IGJsb2IpCit7CisgICAgcmV0dXJuIGJp
bmRCbG9iKGluZGV4LCBhc0J5dGVzKGJsb2IpKTsKK30KKwogaW50IFNRTGl0ZVN0YXRlbWVudDo6
YmluZEJsb2IoaW50IGluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQpCiB7CiAgICAgLy8gU3RyaW5n
OjpjaGFyYWN0ZXJzKCkgcmV0dXJucyAwIGZvciB0aGUgZW1wdHkgc3RyaW5nLCB3aGljaCBTUUxp
dGUKQEAgLTEwNyw3ICsxMTIsNyBAQCBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kQmxvYihpbnQg
aW5kZXgsCiAgICAgZWxzZQogICAgICAgICBjaGFyYWN0ZXJzID0gdXBjb252ZXJ0ZWRDaGFyYWN0
ZXJzOwogCi0gICAgcmV0dXJuIGJpbmRCbG9iKGluZGV4LCBTcGFuIHsgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4oY2hhcmFjdGVycyksIHRleHQubGVuZ3RoKCkgKiBzaXplb2YoVUNo
YXIpIH0pOworICAgIHJldHVybiBiaW5kQmxvYihpbmRleCwgU3BhbiB7IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3Qgc3RkOjpieXRlKj4oY2hhcmFjdGVycyksIHRleHQubGVuZ3RoKCkgKiBzaXplb2Yo
VUNoYXIpIH0pOwogfQogCiBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kVGV4dChpbnQgaW5kZXgs
IFN0cmluZ1ZpZXcgdGV4dCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxp
dGVTdGF0ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwv
U1FMaXRlU3RhdGVtZW50LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzks
NyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgflNRTGl0ZVN0YXRlbWVudCgpOwogICAg
IFdFQkNPUkVfRVhQT1JUIFNRTGl0ZVN0YXRlbWVudChTUUxpdGVTdGF0ZW1lbnQmJik7CiAgICAg
CisgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJpbmRCbG9iKGludCBpbmRleCwgU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+KTsKICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgYmluZEJsb2IoaW50IGluZGV4LCBT
cGFuPGNvbnN0IHVpbnQ4X3Q+KTsKICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgYmluZEJsb2IoaW50
IGluZGV4LCBjb25zdCBTdHJpbmcmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgYmluZFRleHQo
aW50IGluZGV4LCBTdHJpbmdWaWV3KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvUXVvdGVkUHJpbnRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVvdGVkUHJpbnRhYmxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTUsMTIgKzU1LDcgQEAgc3RhdGljIHNpemVfdCBsZW5ndGhPZkxpbmVFbmRpbmdBdElu
ZGV4KAogICAgIHJldHVybiAwOwogfQogCi1WZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxl
RW5jb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQpCi17Ci0gICAgcmV0dXJuIHF1b3Rl
ZFByaW50YWJsZUVuY29kZShpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSk7Ci19Ci0KLVZlY3Rv
cjx1aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNvZGUoY29uc3QgdWludDhfdCogaW5wdXQsIHNp
emVfdCBpbnB1dExlbmd0aCkKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxl
RW5jb2RlKGNvbnN0IHVpbnQ4X3QqIGlucHV0LCBzaXplX3QgaW5wdXRMZW5ndGgpCiB7CiAgICAg
VmVjdG9yPHVpbnQ4X3Q+IG91dDsKICAgICBvdXQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShpbnB1
dExlbmd0aCk7CkBAIC0xMTYsMTIgKzExMSwxMiBAQCBWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJp
bnRhYmxlRW5jb2RlKGNvCiAgICAgcmV0dXJuIG91dDsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+IHF1
b3RlZFByaW50YWJsZURlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQorVmVjdG9y
PHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5w
dXQpCiB7Ci0gICAgcmV0dXJuIHF1b3RlZFByaW50YWJsZURlY29kZShpbnB1dC5kYXRhKCksIGlu
cHV0LnNpemUoKSk7CisgICAgcmV0dXJuIHF1b3RlZFByaW50YWJsZUVuY29kZShyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCkpOwogfQog
Ci1WZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGRh
dGEsIHNpemVfdCBkYXRhTGVuZ3RoKQorc3RhdGljIFZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmlu
dGFibGVEZWNvZGUoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGRhdGFMZW5ndGgpCiB7CiAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IG91dDsKICAgICBpZiAoIWRhdGFMZW5ndGgpCkBAIC0xNTYsNCAr
MTUxLDkgQEAgVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShjbwogICAgIHJl
dHVybiBvdXQ7CiB9CiAKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoU3Bh
bjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQoreworICAgIHJldHVybiBxdW90ZWRQcmludGFibGVE
ZWNvZGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0YSgpKSwgaW5w
dXQuc2l6ZSgpKTsKK30KKwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9R
dW90ZWRQcmludGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1F1b3RlZFByaW50YWJsZS5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwx
MyArMzEsMTEgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNp
bmNsdWRlIDx3dGYvU3Bhbi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVZlY3Rvcjx1aW50
OF90PiBxdW90ZWRQcmludGFibGVFbmNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik7Ci1WZWN0
b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3Qp
OwotCi1WZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYpOwotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCB1
aW50OF90Kiwgc2l6ZV90KTsKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNvZGUo
U3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KTsKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVE
ZWNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9h
cmRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsNyArMjUxLDcgQEAgc3RkOjpvcHRpb25h
bDxQYXN0ZWJvYXJkQ3VzdG9tRGF0YT4gUGFzdAogICAgICAgICBpZiAoSEFORExFIGNiRGF0YSA9
IDo6R2V0Q2xpcGJvYXJkRGF0YShDdXN0b21EYXRhQ2xpcGJvYXJkRm9ybWF0KSkgewogICAgICAg
ICAgICAgc2l6ZV90IHNpemUgPSBHbG9iYWxTaXplKGNiRGF0YSk7CiAgICAgICAgICAgICBhdXRv
IGRhdGEgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oR2xvYmFsTG9jayhjYkRhdGEpKTsKLSAgICAg
ICAgICAgIGF1dG8gY3VzdG9tRGF0YSA9IFBhc3RlYm9hcmRDdXN0b21EYXRhOjpmcm9tUGVyc2lz
dGVuY2VEZWNvZGVyKHtkYXRhLCBzaXplfSk7CisgICAgICAgICAgICBhdXRvIGN1c3RvbURhdGEg
PSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6ZnJvbVBlcnNpc3RlbmNlRGVjb2RlcihTcGFuIHsgZGF0
YSwgc2l6ZSB9KTsKIAogICAgICAgICAgICAgR2xvYmFsVW5sb2NrKGNiRGF0YSk7CiAgICAgICAg
ICAgICA6OkNsb3NlQ2xpcGJvYXJkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3Nl
cnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNw
cAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3Nl
cnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1OSwxMCAr
NDU5LDEwIEBAIGJvb2wgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmRvUHVzaENoYW5nZXMKICAgICAg
ICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRleHQoNiwgdXBkYXRlVmlhQ2FjaGVUb1N0
cmluZyhkYXRhLnJlZ2lzdHJhdGlvbi51cGRhdGVWaWFDYWNoZSkpICE9IFNRTElURV9PSwogICAg
ICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCg3LCBkYXRhLnNjcmlwdFVSTC5z
dHJpbmcoKSkgIT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJp
bmRUZXh0KDgsIHdvcmtlclR5cGVUb1N0cmluZyhkYXRhLndvcmtlclR5cGUpKSAhPSBTUUxJVEVf
T0sKLSAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoOSwgU3BhbiB7IGNz
cEVuY29kZXIuYnVmZmVyKCksIGNzcEVuY29kZXIuYnVmZmVyU2l6ZSgpIH0pICE9IFNRTElURV9P
SworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kQmxvYig5LCBjc3BFbmNvZGVy
LmJ1ZmZlcigpKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+
YmluZFRleHQoMTAsIGRhdGEucmVmZXJyZXJQb2xpY3kpICE9IFNRTElURV9PSwotICAgICAgICAg
ICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kQmxvYigxMSwgU3BhbiB7IHNjcmlwdFJlc291cmNl
TWFwRW5jb2Rlci5idWZmZXIoKSwgc2NyaXB0UmVzb3VyY2VNYXBFbmNvZGVyLmJ1ZmZlclNpemUo
KSB9KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJs
b2IoMTIsIFNwYW4geyBjZXJ0aWZpY2F0ZUluZm9FbmNvZGVyLmJ1ZmZlcigpLCBjZXJ0aWZpY2F0
ZUluZm9FbmNvZGVyLmJ1ZmZlclNpemUoKSB9KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8
IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoMTEsIHNjcmlwdFJlc291cmNlTWFwRW5jb2Rlci5i
dWZmZXIoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJp
bmRCbG9iKDEyLCBjZXJ0aWZpY2F0ZUluZm9FbmNvZGVyLmJ1ZmZlcigpKSAhPSBTUUxJVEVfT0sK
ICAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7
CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTZXJ2aWNlV29ya2VyLCAiRmFpbGVkIHRv
IHN0b3JlIHJlZ2lzdHJhdGlvbiBkYXRhIGludG8gcmVjb3JkcyB0YWJsZSAoJWkpIC0gJXMiLCBt
X2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOwogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTE3LDcgKzUxNyw3IEBAIFN0cmluZyBSZWdpc3Ry
YXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3IKICAgICAgICAgc3RkOjpvcHRpb25hbDxDb250ZW50
U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnM+IGNvbnRlbnRTZWN1cml0eVBvbGljeTsKICAg
ICAgICAgYXV0byBjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhU3BhbiA9IHNxbC0+Y29sdW1uQmxv
YkFzU3Bhbig4KTsKICAgICAgICAgaWYgKGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGFTcGFuLnNp
emUoKSkgewotICAgICAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBjc3BEZWNvZGVy
KGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGFTcGFuLmRhdGEoKSwgY29udGVudFNlY3VyaXR5UG9s
aWN5RGF0YVNwYW4uc2l6ZSgpKTsKKyAgICAgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29k
ZXIgY3NwRGVjb2RlciB7IGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGFTcGFuIH07CiAgICAgICAg
ICAgICBjc3BEZWNvZGVyID4+IGNvbnRlbnRTZWN1cml0eVBvbGljeTsKICAgICAgICAgICAgIGlm
ICghY29udGVudFNlY3VyaXR5UG9saWN5KSB7CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoU2VydmljZVdvcmtlciwgIlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRz
OiBGYWlsZWQgdG8gZGVjb2RlIGNvbnRlbnRTZWN1cml0eVBvbGljeSIpOwpAQCAtNTMwLDcgKzUz
MCw3IEBAIFN0cmluZyBSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3IKICAgICAgICAg
SGFzaE1hcDxVUkwsIFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YTo6SW1wb3J0ZWRTY3JpcHQ+IHNj
cmlwdFJlc291cmNlTWFwOwogICAgICAgICBhdXRvIHNjcmlwdFJlc291cmNlTWFwRGF0YVNwYW4g
PSBzcWwtPmNvbHVtbkJsb2JBc1NwYW4oMTApOwogICAgICAgICBpZiAoc2NyaXB0UmVzb3VyY2VN
YXBEYXRhU3Bhbi5zaXplKCkpIHsKLSAgICAgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29k
ZXIgc2NyaXB0UmVzb3VyY2VNYXBEZWNvZGVyKHNjcmlwdFJlc291cmNlTWFwRGF0YVNwYW4uZGF0
YSgpLCBzY3JpcHRSZXNvdXJjZU1hcERhdGFTcGFuLnNpemUoKSk7CisgICAgICAgICAgICBXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyIHNjcmlwdFJlc291cmNlTWFwRGVjb2RlciB7IHNjcmlwdFJl
c291cmNlTWFwRGF0YVNwYW4gfTsKICAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8SGFzaE1hcDxV
UkwsIEltcG9ydGVkU2NyaXB0QXR0cmlidXRlcz4+IHNjcmlwdFJlc291cmNlTWFwV2l0aG91dFNj
cmlwdHM7CiAgICAgICAgICAgICBzY3JpcHRSZXNvdXJjZU1hcERlY29kZXIgPj4gc2NyaXB0UmVz
b3VyY2VNYXBXaXRob3V0U2NyaXB0czsKICAgICAgICAgICAgIGlmICghc2NyaXB0UmVzb3VyY2VN
YXBXaXRob3V0U2NyaXB0cykgewpAQCAtNTQzLDcgKzU0Myw3IEBAIFN0cmluZyBSZWdpc3RyYXRp
b25EYXRhYmFzZTo6aW1wb3J0UmVjb3IKICAgICAgICAgYXV0byBjZXJ0aWZpY2F0ZUluZm9EYXRh
U3BhbiA9IHNxbC0+Y29sdW1uQmxvYkFzU3BhbigxMSk7CiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8
Q2VydGlmaWNhdGVJbmZvPiBjZXJ0aWZpY2F0ZUluZm87CiAKLSAgICAgICAgV1RGOjpQZXJzaXN0
ZW5jZTo6RGVjb2RlciBjZXJ0aWZpY2F0ZUluZm9EZWNvZGVyKGNlcnRpZmljYXRlSW5mb0RhdGFT
cGFuLmRhdGEoKSwgY2VydGlmaWNhdGVJbmZvRGF0YVNwYW4uc2l6ZSgpKTsKKyAgICAgICAgV1RG
OjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBjZXJ0aWZpY2F0ZUluZm9EZWNvZGVyIHsgY2VydGlmaWNh
dGVJbmZvRGF0YVNwYW4gfTsKICAgICAgICAgY2VydGlmaWNhdGVJbmZvRGVjb2RlciA+PiBjZXJ0
aWZpY2F0ZUluZm87CiAgICAgICAgIGlmICghY2VydGlmaWNhdGVJbmZvKSB7CiAgICAgICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihTZXJ2aWNlV29ya2VyLCAiUmVnaXN0cmF0aW9uRGF0YWJhc2U6
OmltcG9ydFJlY29yZHM6IEZhaWxlZCB0byBkZWNvZGUgY2VydGlmaWNhdGVJbmZvIik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9T
V1NjcmlwdFN0b3JhZ2UuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS93
b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU2LDcgKzU2LDcgQEAgU3RyaW5nIFNXU2NyaXB0U3RvcmFnZTo6c2hhMkhhc2goY29uc3Qg
UwogICAgIGF1dG8gaW5wdXRVdGY4ID0gaW5wdXQudXRmOCgpOwogICAgIGNyeXB0by0+YWRkQnl0
ZXMoaW5wdXRVdGY4LmRhdGEoKSwgaW5wdXRVdGY4Lmxlbmd0aCgpKTsKICAgICBhdXRvIGhhc2gg
PSBjcnlwdG8tPmNvbXB1dGVIYXNoKCk7Ci0gICAgcmV0dXJuIGJhc2U2NFVSTEVuY29kZVRvU3Ry
aW5nKGhhc2guZGF0YSgpLCBoYXNoLnNpemUoKSk7CisgICAgcmV0dXJuIGJhc2U2NFVSTEVuY29k
ZVRvU3RyaW5nKGhhc2gpOwogfQogCiBTdHJpbmcgU1dTY3JpcHRTdG9yYWdlOjpzaGEySGFzaChj
b25zdCBVUkwmIGlucHV0KSBjb25zdApAQCAtODYsOSArODYsOSBAQCBTY3JpcHRCdWZmZXIgU1dT
Y3JpcHRTdG9yYWdlOjpzdG9yZShjb25zCiAgICAgYXV0byBzY3JpcHRQYXRoID0gdGhpcy0+c2Ny
aXB0UGF0aChyZWdpc3RyYXRpb25LZXksIHNjcmlwdFVSTCk7CiAgICAgRmlsZVN5c3RlbTo6bWFr
ZUFsbERpcmVjdG9yaWVzKEZpbGVTeXN0ZW06OnBhcmVudFBhdGgoc2NyaXB0UGF0aCkpOwogCi0g
ICAgYXV0byBpdGVyYXRlT3ZlckJ1ZmZlckFuZFdyaXRlRGF0YSA9IFsmXShjb25zdCBGdW5jdGlv
bjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYgd3JpdGVEYXRhKSB7Ci0gICAgICAgIGZv
ciAoYXV0byBpdCA9IHNjcmlwdC5idWZmZXIoKS0+YmVnaW4oKTsgaXQgIT0gc2NyaXB0LmJ1ZmZl
cigpLT5lbmQoKTsgKytpdCkKLSAgICAgICAgICAgIHdyaXRlRGF0YShpdC0+c2VnbWVudC0+ZGF0
YSgpLCBpdC0+c2VnbWVudC0+c2l6ZSgpKTsKKyAgICBhdXRvIGl0ZXJhdGVPdmVyQnVmZmVyQW5k
V3JpdGVEYXRhID0gWyZdKGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+
KT4mIHdyaXRlRGF0YSkgeworICAgICAgICBmb3IgKGF1dG8mIHNlZ21lbnRFbnRyeSA6ICpzY3Jp
cHQuYnVmZmVyKCkpCisgICAgICAgICAgICB3cml0ZURhdGEoc2VnbWVudEVudHJ5LnNlZ21lbnQt
PmJ5dGVzKCkpOwogICAgIH07CiAKICAgICBpZiAoIXNob3VsZFVzZUZpbGVNYXBwaW5nKHNjcmlw
dC5idWZmZXIoKS0+c2l6ZSgpKSkgewpAQCAtOTcsOCArOTcsOCBAQCBTY3JpcHRCdWZmZXIgU1dT
Y3JpcHRTdG9yYWdlOjpzdG9yZShjb25zCiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihT
ZXJ2aWNlV29ya2VyLCAiU1dTY3JpcHRTdG9yYWdlOjpzdG9yZTogRmFpbHVyZSB0byBzdG9yZSAl
cywgRmlsZVN5c3RlbTo6b3BlbkZpbGUoKSBmYWlsZWQiLCBzY3JpcHRQYXRoLnV0ZjgoKS5kYXRh
KCkpOwogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgfQotICAgICAgICBpdGVyYXRl
T3ZlckJ1ZmZlckFuZFdyaXRlRGF0YShbJl0oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNp
emUpIHsKLSAgICAgICAgICAgIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKGhhbmRsZSwgZGF0YSwg
c2l6ZSk7CisgICAgICAgIGl0ZXJhdGVPdmVyQnVmZmVyQW5kV3JpdGVEYXRhKFsmXShTcGFuPGNv
bnN0IHN0ZDo6Ynl0ZT4gZGF0YSkgeworICAgICAgICAgICAgRmlsZVN5c3RlbTo6d3JpdGVUb0Zp
bGUoaGFuZGxlLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIH0pOwogICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoaGFuZGxl
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgxIEBACisyMDIxLTA2LTExICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBBZG9wdCBTcGFuIGluIG1vcmUgcGxh
Y2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY4
ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbV0lQ
XQorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2Fj
aGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjplbmNvZGUpOgor
ICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpkZWNvZGVSZWNvcmRIZWFkZXIp
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hl
cy5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpzdG9yZU9yaWdp
bik6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpyZWFkT3JpZ2luKToK
KyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjplbmNvZGVDYWNoZU5hbWVzKToKKyAgICAg
ICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpkZWNvZGVDYWNoZXNOYW1lcyk6CisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHA6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YTo6bWFwVG9GaWxlIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhY2hlOjpjb21wdXRlU0hBMSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6
OkRhdGE6OkRhdGEpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZURhdGFDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhOjphcHBs
eSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YTo6YWRvcHRNYXAp
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpFbnRyeTo6ZW5jb2RlQXNTdG9yYWdlUmVj
b3JkIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpFbnRyeTo6ZGVjb2Rl
U3RvcmFnZVJlY29yZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlS2V5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpoYXNoU3RyaW5nKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpLZXk6OmNvbXB1dGVIYXNoIGNvbnN0KToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpLZXk6OmNvbXB1dGVQYXJ0aXRpb25IYXNo
IGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9y
YWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpkZWNvZGVSZWNvcmRNZXRh
RGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6ZW5jb2RlUmVjb3JkTWV0YURh
dGEpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291
cmNlc0VudHJ5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdWJyZXNvdXJj
ZXNFbnRyeTo6ZW5jb2RlQXNTdG9yYWdlUmVjb3JkIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhY2hlOjpTdWJyZXNvdXJjZXNFbnRyeTo6ZGVjb2RlU3RvcmFnZVJlY29yZCk6Cisg
ICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXIuaDoKKyAgICAgICAgKiBQbGF0Zm9y
bS9JUEMvQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPENT
dHJpbmc+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPENTdHJpbmc+Ojpk
ZWNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFN0cmluZz46OmVuY29kZSk6Cisg
ICAgICAgIChJUEM6OmRlY29kZVN0cmluZ1RleHQpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENv
ZGVyPFNIQTE6OkRpZ2VzdD46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8
U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvQXJndW1lbnRD
b2RlcnMuaDoKKyAgICAgICAgKElQQzo6U2ltcGxlQXJndW1lbnRDb2Rlcjo6ZW5jb2RlKToKKyAg
ICAgICAgKElQQzo6U2ltcGxlQXJndW1lbnRDb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBQbGF0
Zm9ybS9JUEMvQXJyYXlSZWZlcmVuY2UuaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvRGVjb2Rl
ci5jcHA6CisgICAgICAgIChJUEM6OkRlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSk6Cisg
ICAgICAgICogUGxhdGZvcm0vSVBDL0RlY29kZXIuaDoKKyAgICAgICAgKElQQzo6RGVjb2Rlcjo6
ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvRW5jb2Rlci5j
cHA6CisgICAgICAgIChJUEM6OkVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAg
ICAgICogUGxhdGZvcm0vSVBDL0VuY29kZXIuaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvU2hh
cmVkQnVmZmVyQ29weS5jcHA6CisgICAgICAgIChJUEM6OlNoYXJlZEJ1ZmZlckNvcHk6OmVuY29k
ZSBjb25zdCk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25FbmNvZGVy
Lmg6CisgICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHA6CisgICAgICAg
IChJUEM6OmVuY29kZVNoYXJlZEJ1ZmZlcik6CisgICAgICAgIChJUEM6OmRlY29kZVNoYXJlZEJ1
ZmZlcik6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5j
cHA6CisgICAgICAgIChBUEk6OmVuY29kZUNvbnRlbnRSdWxlTGlzdE1ldGFEYXRhKToKKyAgICAg
ICAgKEFQSTo6Z2V0RGF0YSk6CisgICAgICAgIChBUEk6OmRlY29kZUNvbnRlbnRSdWxlTGlzdE1l
dGFEYXRhKToKKyAgICAgICAgKEFQSTo6d3JpdGVEYXRhVG9GaWxlKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvbWFjL0xlZ2FjeVNlc3Npb25TdGF0ZUNvZGluZy5jcHA6CisgICAgICAgIChXZWJLaXQ6
Okhpc3RvcnlFbnRyeURhdGFFbmNvZGVyOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdlYktpdDo6
SGlzdG9yeUVudHJ5RGF0YUVuY29kZXI6OmVuY29kZUFyaXRobWV0aWNUeXBlKToKKyAgICAgICAg
KFdlYktpdDo6SGlzdG9yeUVudHJ5RGF0YUVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YSk6
CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFEZWNvZGVyOjpvcGVyYXRvcj4+KToK
KyAgICAgICAgKFdlYktpdDo6SGlzdG9yeUVudHJ5RGF0YURlY29kZXI6OmRlY29kZUFyaXRobWV0
aWNUeXBlKToKKyAgICAgICAgKFdlYktpdDo6SGlzdG9yeUVudHJ5RGF0YURlY29kZXI6OmRlY29k
ZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3Rp
bmdBUEkuY3BwOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjplbmNvZGVUeXBlZEFy
cmF5KToKKwogMjAyMS0wNi0xMSAgUnlhbiBIYWRkYWQgIDxyeWFuaGFkZGFkQGFwcGxlLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI3ODc1NC4KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01l
YXN1cmVtZW50TWFuYWdlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIzLDcgKzMyMyw3IEBAIHZvaWQgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRN
YW5hZ2VyOjpmaXIKICAgICAgICAgY3J5cHRvLT5hZGRCeXRlcyhwdWJsaWNLZXlEYXRhLT5kYXRh
KCksIHB1YmxpY0tleURhdGEtPnNpemUoKSk7CiAgICAgICAgIGF1dG8gcHVibGljS2V5RGF0YUhh
c2ggPSBjcnlwdG8tPmNvbXB1dGVIYXNoKCk7CiAKLSAgICAgICAgYXV0byBrZXlJRCA9IGJhc2U2
NFVSTEVuY29kZVRvU3RyaW5nKHB1YmxpY0tleURhdGFIYXNoLmRhdGEoKSwgcHVibGljS2V5RGF0
YUhhc2guc2l6ZSgpKTsKKyAgICAgICAgYXV0byBrZXlJRCA9IGJhc2U2NFVSTEVuY29kZVRvU3Ry
aW5nKHB1YmxpY0tleURhdGFIYXNoKTsKICAgICAgICAgaWYgKGtleUlEICE9IGF0dHJpYnV0aW9u
LnNvdXJjZVVubGlua2FibGVUb2tlbigpLT5rZXlJREJhc2U2NFVSTCkKICAgICAgICAgICAgIHJl
dHVybjsKIApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0
b3JhZ2VFbmdpbmVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5n
aW5lQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjUsNyArNTY1LDcgQEAgU3RvcmFnZTo6
UmVjb3JkIENhY2hlOjplbmNvZGUoY29uc3QgUmVjbwogCiAgICAgZW5jb2Rlci5lbmNvZGVDaGVj
a3N1bSgpOwogCi0gICAgRGF0YSBoZWFkZXIoZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZm
ZXJTaXplKCkpOworICAgIERhdGEgaGVhZGVyKGVuY29kZXIuYnVmZmVyKCkpOwogICAgIERhdGEg
Ym9keTsKICAgICBXVEY6OnN3aXRjaE9uKHJlY29yZC5yZXNwb25zZUJvZHksIFtdKGNvbnN0IFJl
ZjxXZWJDb3JlOjpGb3JtRGF0YT4mIGZvcm1EYXRhKSB7CiAgICAgICAgIC8vIEZJWE1FOiBTdG9y
ZSBmb3JtIGRhdGEgYm9keS4KQEAgLTYyOCw5ICs2MjgsOSBAQCBzdGF0aWMgc3RkOjpvcHRpb25h
bDxXZWJDb3JlOjpET01DYWNoZUVuCiAgICAgfX07CiB9CiAKLXN0ZDo6b3B0aW9uYWw8Q2FjaGU6
OkRlY29kZWRSZWNvcmQ+IENhY2hlOjpkZWNvZGVSZWNvcmRIZWFkZXIoY29uc3QgU3RvcmFnZTo6
UmVjb3JkJiBzdG9yYWdlKQorc3RkOjpvcHRpb25hbDxDYWNoZTo6RGVjb2RlZFJlY29yZD4gQ2Fj
aGU6OmRlY29kZVJlY29yZEhlYWRlcihjb25zdCBTdG9yYWdlOjpSZWNvcmQmIHN0b3JhZ2VFbnRy
eSkKIHsKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoc3RvcmFnZS5oZWFk
ZXIuZGF0YSgpLCBzdG9yYWdlLmhlYWRlci5zaXplKCkpOworICAgIFdURjo6UGVyc2lzdGVuY2U6
OkRlY29kZXIgZGVjb2RlciB7IHN0b3JhZ2VFbnRyeS5oZWFkZXIgfTsKIAogICAgIHN0ZDo6b3B0
aW9uYWw8ZG91YmxlPiBpbnNlcnRpb25UaW1lOwogICAgIGRlY29kZXIgPj4gaW5zZXJ0aW9uVGlt
ZTsKQEAgLTY1MywxNSArNjUzLDE1IEBAIHN0ZDo6b3B0aW9uYWw8Q2FjaGU6OkRlY29kZWRSZWNv
cmQ+IENhY2gKICAgICB9fTsKIH0KIAotc3RkOjpvcHRpb25hbDxSZWNvcmQ+IENhY2hlOjpkZWNv
ZGUoY29uc3QgU3RvcmFnZTo6UmVjb3JkJiBzdG9yYWdlKQorc3RkOjpvcHRpb25hbDxSZWNvcmQ+
IENhY2hlOjpkZWNvZGUoY29uc3QgU3RvcmFnZTo6UmVjb3JkJiBzdG9yYWdlRW50cnkpCiB7Ci0g
ICAgYXV0byByZXN1bHQgPSBkZWNvZGVSZWNvcmRIZWFkZXIoc3RvcmFnZSk7CisgICAgYXV0byBy
ZXN1bHQgPSBkZWNvZGVSZWNvcmRIZWFkZXIoc3RvcmFnZUVudHJ5KTsKIAogICAgIGlmICghcmVz
dWx0KQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgYXV0byByZWNvcmQgPSBX
VEZNb3ZlKHJlc3VsdC0+cmVjb3JkKTsKLSAgICByZWNvcmQucmVzcG9uc2VCb2R5ID0gV2ViQ29y
ZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUoc3RvcmFnZS5ib2R5LmRhdGEoKSwgc3RvcmFnZS5ib2R5
LnNpemUoKSk7CisgICAgcmVjb3JkLnJlc3BvbnNlQm9keSA9IFdlYkNvcmU6OlNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKHN0b3JhZ2VFbnRyeS5ib2R5KTsKIAogICAgIHJldHVybiByZWNvcmQ7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2lu
ZUNhY2hlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hl
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSwxNCArMTA1LDE0IEBAIHZvaWQgQ2FjaGVzOjpz
dG9yZU9yaWdpbihDb21wbGV0aW9uQ2FsbGIKICAgICBlbmNvZGVyIDw8IG1fb3JpZ2luLmNsaWVu
dE9yaWdpbi5wcm90b2NvbDsKICAgICBlbmNvZGVyIDw8IG1fb3JpZ2luLmNsaWVudE9yaWdpbi5o
b3N0OwogICAgIGVuY29kZXIgPDwgbV9vcmlnaW4uY2xpZW50T3JpZ2luLnBvcnQ7Ci0gICAgbV9l
bmdpbmUtPndyaXRlRmlsZShjYWNoZXNPcmlnaW5GaWxlbmFtZShtX3Jvb3RQYXRoKSwgRGF0YSB7
IGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpIH0sIFtwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildIChzdGQ6Om9wdGlvbmFsPEVycm9yPiYmIGVycm9yKSBtdXRhYmxlIHsKKyAgICBt
X2VuZ2luZS0+d3JpdGVGaWxlKGNhY2hlc09yaWdpbkZpbGVuYW1lKG1fcm9vdFBhdGgpLCBEYXRh
IHsgZW5jb2Rlci5idWZmZXIoKSB9LCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoc3RkOjpvcHRp
b25hbDxFcnJvcj4mJiBlcnJvcikgbXV0YWJsZSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KFdURk1vdmUoZXJyb3IpKTsKICAgICB9KTsKIH0KIAogc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpD
bGllbnRPcmlnaW4+IENhY2hlczo6cmVhZE9yaWdpbihjb25zdCBEYXRhJiBkYXRhKQogewotICAg
IFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihkYXRhLmRhdGEoKSwgZGF0YS5zaXpl
KCkpOworICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlciB7IGRhdGEgfTsKIAog
ICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiB0b3BPcmlnaW47
CiAgICAgZGVjb2RlciA+PiB0b3BPcmlnaW47CkBAIC00MDQsMTIgKzQwNCwxMyBAQCBzdGF0aWMg
aW5saW5lIERhdGEgZW5jb2RlQ2FjaGVOYW1lcyhjb25zCiAgICAgICAgIGVuY29kZXIgPDwgY2Fj
aGUudW5pcXVlTmFtZSgpOwogICAgIH0KIAotICAgIHJldHVybiBEYXRhIHsgZW5jb2Rlci5idWZm
ZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkgfTsKKyAgICByZXR1cm4gRGF0YSB7IGVuY29kZXIu
YnVmZmVyKCkgfTsKIH0KIAogc3RhdGljIGlubGluZSBFeHBlY3RlZDxWZWN0b3I8c3RkOjpwYWly
PFN0cmluZywgU3RyaW5nPj4sIEVycm9yPiBkZWNvZGVDYWNoZXNOYW1lcyhjb25zdCBEYXRhJiBk
YXRhKQogewotICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihkYXRhLmRhdGEo
KSwgZGF0YS5zaXplKCkpOworICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlciB7
IGRhdGEgfTsKKwogICAgIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGNvdW50OwogICAgIGRlY29k
ZXIgPj4gY291bnQ7CiAgICAgaWYgKCFjb3VudCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcAkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBuYW1lc3BhY2Ug
TmV0d29ya0NhY2hlIHsKIERhdGEgRGF0YTo6bWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkg
Y29uc3QKIHsKICAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlOwotICAg
IGF1dG8gYXBwbHlEYXRhID0gWyZdKGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCos
IHNpemVfdCk+JiBhcHBsaWVyKSB7IGFwcGx5KGFwcGxpZXIpOyB9OworICAgIGF1dG8gYXBwbHlE
YXRhID0gWyZdKGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mIGFw
cGxpZXIpIHsgYXBwbHkoYXBwbGllcik7IH07CiAgICAgYXV0byBtYXBwZWRGaWxlID0gRmlsZVN5
c3RlbTo6bWFwVG9GaWxlKHBhdGgsIHNpemUoKSwgV1RGTW92ZShhcHBseURhdGEpLCAmaGFuZGxl
KTsKICAgICBpZiAoIW1hcHBlZEZpbGUpCiAgICAgICAgIHJldHVybiB7IH07CkBAIC04Niw5ICs4
Niw5IEBAIERhdGEgYWRvcHRBbmRNYXBGaWxlKEZpbGVTeXN0ZW06OlBsYXRmb3IKIFNIQTE6OkRp
Z2VzdCBjb21wdXRlU0hBMShjb25zdCBEYXRhJiBkYXRhLCBjb25zdCBTYWx0JiBzYWx0KQogewog
ICAgIFNIQTEgc2hhMTsKLSAgICBzaGExLmFkZEJ5dGVzKHNhbHQuZGF0YSgpLCBzYWx0LnNpemUo
KSk7Ci0gICAgZGF0YS5hcHBseShbJnNoYTFdKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBz
aXplKSB7Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMoZGF0YSwgc2l6ZSk7CisgICAgc2hhMS5hZGRC
eXRlcyhzYWx0KTsKKyAgICBkYXRhLmFwcGx5KFsmc2hhMV0oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+
IGRhdGEpIHsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhkYXRhKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CiAj
aW5jbHVkZSA8d3RmL0Z1bmN0aW9uRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPHd0Zi9TSEExLmg+
CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50
ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNTIsOCArNTMsMTQg
QEAgbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAKIGNsYXNzIERhdGEgewogcHVibGljOgorICAg
IHVzaW5nIHZhbHVlX3R5cGUgPSB1aW50OF90OworCiAgICAgRGF0YSgpIHsgfQogICAgIERhdGEo
Y29uc3QgdWludDhfdCosIHNpemVfdCk7CisgICAgRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
ZGF0YSkKKyAgICAgICAgOiBEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRh
dGEuZGF0YSgpKSwgZGF0YS5zaXplKCkpCisgICAgeworICAgIH0KIAogICAgIH5EYXRhKCkgeyB9
CiAKQEAgLTc0LDEyICs4MSwxMyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCB1aW50OF90KiBkYXRh
KCkgY29uc3Q7CiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKwog
ICAgIGJvb2wgaXNNYXAoKSBjb25zdCB7IHJldHVybiBtX2lzTWFwOyB9CiAgICAgUmVmUHRyPFNo
YXJlZE1lbW9yeT4gdHJ5Q3JlYXRlU2hhcmVkTWVtb3J5KCkgY29uc3Q7CiAKICAgICBEYXRhIHN1
YnJhbmdlKHNpemVfdCBvZmZzZXQsIHNpemVfdCkgY29uc3Q7CiAKLSAgICBib29sIGFwcGx5KGNv
bnN0IEZ1bmN0aW9uPGJvb2wgKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYpIGNvbnN0OworICAg
IGJvb2wgYXBwbHkoY29uc3QgRnVuY3Rpb248Ym9vbCAoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4m
KSBjb25zdDsKIAogICAgIERhdGEgbWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkgY29uc3Q7
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
RGF0YUNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1tCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQko
d29ya2luZyBjb3B5KQpAQCAtNjksMTIgKzY5LDEyIEBAIGJvb2wgRGF0YTo6aXNOdWxsKCkgY29u
c3QKICAgICByZXR1cm4gIW1fZGlzcGF0Y2hEYXRhOwogfQogCi1ib29sIERhdGE6OmFwcGx5KGNv
bnN0IEZ1bmN0aW9uPGJvb2wgKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYgYXBwbGllcikgY29u
c3QKK2Jvb2wgRGF0YTo6YXBwbHkoY29uc3QgRnVuY3Rpb248Ym9vbCAoU3Bhbjxjb25zdCBzdGQ6
OmJ5dGU+KT4mIGFwcGxpZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3NpemUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICByZXR1cm4gZGlzcGF0Y2hfZGF0YV9hcHBseShtX2Rpc3BhdGNoRGF0
YS5nZXQoKSwgWyZhcHBsaWVyXShkaXNwYXRjaF9kYXRhX3QsIHNpemVfdCwgY29uc3Qgdm9pZCog
ZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgcmV0dXJuIGFwcGxpZXIoc3RhdGljX2Nhc3Q8
Y29uc3QgdWludDhfdCo+KGRhdGEpLCBzaXplKTsKKyAgICAgICAgcmV0dXJuIGFwcGxpZXIoU3Bh
biB7IHN0YXRpY19jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGRhdGEpLCBzaXplIH0pOwogICAgIH0p
OwogfQogCkBAIC05NCwxNCArOTQsMTEgQEAgRGF0YSBjb25jYXRlbmF0ZShjb25zdCBEYXRhJiBh
LCBjb25zdCBEYQogCiBEYXRhIERhdGE6OmFkb3B0TWFwKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVE
YXRhJiYgbWFwcGVkRmlsZSwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkKQogewot
ICAgIHNpemVfdCBzaXplID0gbWFwcGVkRmlsZS5zaXplKCk7Ci0gICAgdm9pZCogbWFwID0gbWFw
cGVkRmlsZS5sZWFrSGFuZGxlKCk7Ci0gICAgQVNTRVJUKG1hcCk7Ci0gICAgQVNTRVJUKG1hcCAh
PSBNQVBfRkFJTEVEKTsKKyAgICBhdXRvIG1hcCA9IG1hcHBlZEZpbGUubGVha0hhbmRsZSgpOwor
ICAgIEFTU0VSVChtYXAuZGF0YSgpKTsKKyAgICBBU1NFUlQobWFwLmRhdGEoKSAhPSBNQVBfRkFJ
TEVEKTsKICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmQpOwotICAgIGF1dG8gYm9keU1hcCA9
IGFkb3B0T1NPYmplY3QoZGlzcGF0Y2hfZGF0YV9jcmVhdGUobWFwLCBzaXplLCBkaXNwYXRjaF9n
ZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCBbbWFw
LCBzaXplXSB7Ci0gICAgICAgIG11bm1hcChtYXAsIHNpemUpOwotICAgIH0pKTsKKyAgICBhdXRv
IGJvZHlNYXAgPSBhZG9wdE9TT2JqZWN0KGRpc3BhdGNoX2RhdGFfY3JlYXRlKG1hcC5kYXRhKCks
IG1hcC5zaXplKCksIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJ
T1JJVFlfREVGQVVMVCwgMCksIERJU1BBVENIX0RBVEFfREVTVFJVQ1RPUl9NVU5NQVApKTsKICAg
ICByZXR1cm4geyBXVEZNb3ZlKGJvZHlNYXApLCBEYXRhOjpCYWNraW5nOjpNYXAgfTsKIH0KIApJ
bmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRh
R0xpYi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVEYXRhR0xpYi5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUdMaWIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MywxNCArNzMsMTQgQEAgYm9vbCBEYXRhOjppc051bGwoKSBjb25zdAog
ICAgIHJldHVybiAhbV9idWZmZXI7CiB9CiAKLWJvb2wgRGF0YTo6YXBwbHkoY29uc3QgRnVuY3Rp
b248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIGFwcGxpZXIpIGNvbnN0Citib29sIERh
dGE6OmFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mIGFw
cGxpZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3NpemUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIGdzaXplIGxlbmd0aDsKICAgICBjb25zdCBhdXRvKiBkYXRhID0gZ19ieXRlc19nZXRf
ZGF0YShtX2J1ZmZlci5nZXQoKSwgJmxlbmd0aCk7Ci0gICAgcmV0dXJuIGFwcGxpZXIocmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSksIGxlbmd0aCk7CisgICAgcmV0dXJuIGFw
cGxpZXIoYXNCeXRlcyhTcGFuIHsgZGF0YSwgbGVuZ3RoIH0pKTsKIH0KIAogRGF0YSBEYXRhOjpz
dWJyYW5nZShzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkgY29uc3QKQEAgLTExNSwxMiArMTE1
LDExIEBAIHN0cnVjdCBNYXBXcmFwcGVyIHsKIAogICAgIH5NYXBXcmFwcGVyKCkKICAgICB7Ci0g
ICAgICAgIG11bm1hcChtYXAsIHNpemUpOworICAgICAgICBGaWxlU3lzdGVtOjp1bm1hcFZpZXdP
ZkZpbGUobWFwKTsKICAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGZpbGVEZXNjcmlwdG9y
KTsKICAgICB9CiAKLSAgICB2b2lkKiBtYXA7Ci0gICAgc2l6ZV90IHNpemU7CisgICAgU3Bhbjxz
dGQ6OmJ5dGU+IG1hcDsKICAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZURl
c2NyaXB0b3I7CiB9OwogCkBAIC0xMzEsMTIgKzEzMCwxMSBAQCBzdGF0aWMgdm9pZCBkZWxldGVN
YXBXcmFwcGVyKE1hcFdyYXBwZXIqCiAKIERhdGEgRGF0YTo6YWRvcHRNYXAoRmlsZVN5c3RlbTo6
TWFwcGVkRmlsZURhdGEmJiBtYXBwZWRGaWxlLCBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5k
bGUgZmQpCiB7Ci0gICAgc2l6ZV90IHNpemUgPSBtYXBwZWRGaWxlLnNpemUoKTsKLSAgICB2b2lk
KiBtYXAgPSBtYXBwZWRGaWxlLmxlYWtIYW5kbGUoKTsKLSAgICBBU1NFUlQobWFwKTsKLSAgICBB
U1NFUlQobWFwICE9IE1BUF9GQUlMRUQpOwotICAgIE1hcFdyYXBwZXIqIHdyYXBwZXIgPSBuZXcg
TWFwV3JhcHBlciB7IG1hcCwgc2l6ZSwgZmQgfTsKLSAgICByZXR1cm4geyBhZG9wdEdSZWYoZ19i
eXRlc19uZXdfd2l0aF9mcmVlX2Z1bmMobWFwLCBzaXplLCByZWludGVycHJldF9jYXN0PEdEZXN0
cm95Tm90aWZ5PihkZWxldGVNYXBXcmFwcGVyKSwgd3JhcHBlcikpLCBmZCB9OworICAgIGF1dG8g
bWFwID0gbWFwcGVkRmlsZS5sZWFrSGFuZGxlKCk7CisgICAgQVNTRVJUKG1hcC5kYXRhKCkpOwor
ICAgIEFTU0VSVChtYXAuZGF0YSgpICE9IE1BUF9GQUlMRUQpOworICAgIE1hcFdyYXBwZXIqIHdy
YXBwZXIgPSBuZXcgTWFwV3JhcHBlciB7IG1hcCwgZmQgfTsKKyAgICByZXR1cm4geyBhZG9wdEdS
ZWYoZ19ieXRlc19uZXdfd2l0aF9mcmVlX2Z1bmMobWFwLmRhdGEoKSwgbWFwLnNpemUoKSwgcmVp
bnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oZGVsZXRlTWFwV3JhcHBlciksIHdyYXBwZXIp
KSwgZmQgfTsKIH0KIAogUmVmUHRyPFNoYXJlZE1lbW9yeT4gRGF0YTo6dHJ5Q3JlYXRlU2hhcmVk
TWVtb3J5KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTksMTAgKzk5LDEwIEBAIFN0b3JhZ2U6OlJlY29yZCBFbnRy
eTo6ZW5jb2RlQXNTdG9yYWdlUmUKICAgICAKICAgICBlbmNvZGVyLmVuY29kZUNoZWNrc3VtKCk7
CiAKLSAgICBEYXRhIGhlYWRlcihlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUo
KSk7CisgICAgRGF0YSBoZWFkZXIgeyBlbmNvZGVyLmJ1ZmZlcigpIH07CiAgICAgRGF0YSBib2R5
OwogICAgIGlmIChtX2J1ZmZlcikKLSAgICAgICAgYm9keSA9IHsgbV9idWZmZXItPmRhdGEoKSwg
bV9idWZmZXItPnNpemUoKSB9OworICAgICAgICBib2R5ID0geyBtX2J1ZmZlci0+Ynl0ZXMoKSB9
OwogCiAgICAgcmV0dXJuIHsgbV9rZXksIG1fdGltZVN0YW1wLCBoZWFkZXIsIGJvZHksIHsgfSB9
OwogfQpAQCAtMTExLDcgKzExMSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gRW50cnk6OmRl
Y29kZVN0b3IKIHsKICAgICBhdXRvIGVudHJ5ID0gbWFrZVVuaXF1ZTxFbnRyeT4oc3RvcmFnZUVu
dHJ5KTsKIAotICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihzdG9yYWdlRW50
cnkuaGVhZGVyLmRhdGEoKSwgc3RvcmFnZUVudHJ5LmhlYWRlci5zaXplKCkpOworICAgIFdURjo6
UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlciB7IHN0b3JhZ2VFbnRyeS5oZWFkZXIgfTsKICAg
ICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwogICAgIGlmICghV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZTo6ZGVjb2RlKGRlY29kZXIsIHJlc3BvbnNlKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CkBAIC0xOTEsNyArMTkxLDcgQEAgdm9pZCBFbnRyeTo6aW5pdGlhbGl6ZUJ1
ZmZlckZyb21TdG9yYWdlUgogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgotICAg
IG1fYnVmZmVyID0gV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUobV9zb3VyY2VTdG9yYWdl
UmVjb3JkLmJvZHkuZGF0YSgpLCBtX3NvdXJjZVN0b3JhZ2VSZWNvcmQuYm9keS5zaXplKCkpOwor
ICAgIG1fYnVmZmVyID0gV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUobV9zb3VyY2VTdG9y
YWdlUmVjb3JkLmJvZHkpOwogfQogCiBXZWJDb3JlOjpTaGFyZWRCdWZmZXIqIEVudHJ5OjpidWZm
ZXIoKSBjb25zdApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVLZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04OCwxMyArODgsMTMgQEAgc3RhdGljIHZvaWQgaGFzaFN0cmluZyhTSEExJiBz
aGExLCBjb25zdAogCiAgICAgaWYgKHN0cmluZy5pczhCaXQoKSAmJiBzdHJpbmcuaXNBbGxBU0NJ
SSgpKSB7CiAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbnVsbEJ5dGUgPSAwOwotICAgICAgICBzaGEx
LmFkZEJ5dGVzKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAgICAg
ICBzaGExLmFkZEJ5dGVzKCZudWxsQnl0ZSwgMSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3Bh
biB7IHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkgfSk7CisgICAgICAgIHNo
YTEuYWRkQnl0ZXMoU3BhbiB7ICZudWxsQnl0ZSwgMSB9KTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBhdXRvIGNTdHJpbmcgPSBzdHJpbmcudXRmOCgpOwogICAgIC8vIEluY2x1ZGUgdGVy
bWluYXRpbmcgbnVsbCBieXRlLgotICAgIHNoYTEuYWRkQnl0ZXMoY1N0cmluZy5kYXRhQXNVSW50
OFB0cigpLCBjU3RyaW5nLmxlbmd0aCgpICsgMSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsg
Y1N0cmluZy5kYXRhQXNVSW50OFB0cigpLCBjU3RyaW5nLmxlbmd0aCgpICsgMSB9KTsKIH0KIAog
S2V5OjpIYXNoVHlwZSBLZXk6OmNvbXB1dGVIYXNoKGNvbnN0IFNhbHQmIHNhbHQpIGNvbnN0CkBA
IC0xMDIsNyArMTAyLDcgQEAgS2V5OjpIYXNoVHlwZSBLZXk6OmNvbXB1dGVIYXNoKGNvbnN0IFNh
bAogICAgIC8vIFdlIGRvbid0IHJlYWxseSBuZWVkIGEgY3J5cHRvZ3JhcGhpYyBoYXNoLiBUaGUg
a2V5IGlzIGFsd2F5cyB2ZXJpZmllZCBhZ2FpbnN0IHRoZSBlbnRyeSBoZWFkZXIuCiAgICAgLy8g
U0hBMSBqdXN0IGhhcHBlbnMgdG8gYmUgc3VpdGFibHkgc2l6ZWQsIGZhc3QgYW5kIGF2YWlsYWJs
ZS4KICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhzYWx0LmRhdGEoKSwgc2FsdC5z
aXplKCkpOworICAgIHNoYTEuYWRkQnl0ZXMoc2FsdCk7CiAKICAgICBoYXNoU3RyaW5nKHNoYTEs
IG1fcGFydGl0aW9uKTsKICAgICBoYXNoU3RyaW5nKHNoYTEsIG1fdHlwZSk7CkBAIC0xMTcsNyAr
MTE3LDcgQEAgS2V5OjpIYXNoVHlwZSBLZXk6OmNvbXB1dGVIYXNoKGNvbnN0IFNhbAogS2V5OjpI
YXNoVHlwZSBLZXk6OmNvbXB1dGVQYXJ0aXRpb25IYXNoKGNvbnN0IFNhbHQmIHNhbHQpIGNvbnN0
CiB7CiAgICAgU0hBMSBzaGExOwotICAgIHNoYTEuYWRkQnl0ZXMoc2FsdC5kYXRhKCksIHNhbHQu
c2l6ZSgpKTsKKyAgICBzaGExLmFkZEJ5dGVzKHNhbHQpOwogCiAgICAgaGFzaFN0cmluZyhzaGEx
LCBtX3BhcnRpdGlvbik7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAkocmV2aXNpb24gMjc4
ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVT
dG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU0LDggKzQ1NCw4IEBAIHN0cnVjdCBSZWNv
cmRNZXRhRGF0YSB7CiBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlUmVjb3Jk
TWV0YURhdGEoUmVjb3JkTWV0YURhdGEmIG1ldGFEYXRhLCBjb25zdCBEYXRhJiBmaWxlRGF0YSkK
IHsKICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBmaWxlRGF0YS5hcHBseShbJm1ldGFE
YXRhLCAmc3VjY2Vzc10oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAg
ICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOworICAgIGZp
bGVEYXRhLmFwcGx5KFsmbWV0YURhdGEsICZzdWNjZXNzXShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
ZGF0YSkgeworICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyBkYXRh
IH07CiAgICAgICAgIAogICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBjYWNoZVN0b3Jh
Z2VWZXJzaW9uOwogICAgICAgICBkZWNvZGVyID4+IGNhY2hlU3RvcmFnZVZlcnNpb247CkBAIC01
ODYsNyArNTg2LDcgQEAgc3RhdGljIERhdGEgZW5jb2RlUmVjb3JkTWV0YURhdGEoY29uc3QgUgog
CiAgICAgZW5jb2Rlci5lbmNvZGVDaGVja3N1bSgpOwogCi0gICAgcmV0dXJuIERhdGEoZW5jb2Rl
ci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOworICAgIHJldHVybiB7IGVuY29kZXIu
YnVmZmVyKCkgfTsKIH0KIAogc3RkOjpvcHRpb25hbDxCbG9iU3RvcmFnZTo6QmxvYj4gU3RvcmFn
ZTo6c3RvcmVCb2R5QXNCbG9iKFdyaXRlT3BlcmF0aW9uJiB3cml0ZU9wZXJhdGlvbikKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3Vy
Y2VzRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwCShyZXZpc2lvbiAyNzg4MDkp
CisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJl
c291cmNlc0VudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDE0ICsxMjMsMTQgQEAgU3Rv
cmFnZTo6UmVjb3JkIFN1YnJlc291cmNlc0VudHJ5OjplbmNvZAogCiAgICAgZW5jb2Rlci5lbmNv
ZGVDaGVja3N1bSgpOwogCi0gICAgcmV0dXJuIHsgbV9rZXksIG1fdGltZVN0YW1wLCB7IGVuY29k
ZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpIH0sIHsgfSwgeyB9fTsKKyAgICByZXR1
cm4geyBtX2tleSwgbV90aW1lU3RhbXAsIHsgZW5jb2Rlci5idWZmZXIoKSB9LCB7IH0sIHsgfX07
CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTdWJyZXNvdXJjZXNFbnRyeT4gU3VicmVzb3VyY2VzRW50
cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQoY29uc3QgU3RvcmFnZTo6UmVjb3JkJiBzdG9yYWdlRW50
cnkpCiB7CiAgICAgYXV0byBlbnRyeSA9IG1ha2VVbmlxdWU8U3VicmVzb3VyY2VzRW50cnk+KHN0
b3JhZ2VFbnRyeSk7CiAKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoc3Rv
cmFnZUVudHJ5LmhlYWRlci5kYXRhKCksIHN0b3JhZ2VFbnRyeS5oZWFkZXIuc2l6ZSgpKTsKKyAg
ICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyBzdG9yYWdlRW50cnkuaGVhZGVy
IH07CiAgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8U3VicmVzb3VyY2VJbmZvPj4gc3VicmVzb3Vy
Y2VzOwogICAgIGRlY29kZXIgPj4gc3VicmVzb3VyY2VzOwogICAgIGlmICghc3VicmVzb3VyY2Vz
KQpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2Rlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXIuaAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2Rl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSwxMyArNzksMTMgQEAgc3RydWN0IEFyZ3VtZW50Q29k
ZXI8VCwgdHlwZW5hbWUgc3RkOjplbgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+CiAg
ICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIFQgdmFsdWUpCiAgICAgewot
ICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQ4X3QqPigmdmFsdWUpLCBzaXplb2YoVCksIGFsaWdub2YoVCkpOworICAgICAgICBl
bmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJnZhbHVlLCAxIH0pOwogICAgIH0K
IAogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFQ+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQog
ICAgIHsKICAgICAgICAgVCByZXN1bHQ7Ci0gICAgICAgIGlmIChkZWNvZGVyLmRlY29kZUZpeGVk
TGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmcmVzdWx0KSwgc2l6ZW9mKFQp
LCBhbGlnbm9mKFQpKSkKKyAgICAgICAgaWYgKGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KFNwYW4geyAmcmVzdWx0LCAxIH0pKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9Bcmd1bWVudENvZGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBBcmd1bWVudENvZGVyPENTdHJpbmc+OjplbmNvZGUoRW5j
bwogCiAgICAgdWludDMyX3QgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwogICAgIGVuY29kZXIg
PDwgbGVuZ3RoOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0cmluZy5kYXRh
QXNVSW50OFB0cigpLCBsZW5ndGgsIDEpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKHN0cmluZy5ieXRlcygpKTsKIH0KIAogV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgQXJndW1l
bnRDb2RlcjxDU3RyaW5nPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIENTdHJpbmcmIHJlc3Vs
dCkKQEAgLTEwMyw3ICsxMDMsNyBAQCBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBBcmd1bWVudENv
ZGVyPENTCiAKICAgICBjaGFyKiBidWZmZXI7CiAgICAgQ1N0cmluZyBzdHJpbmcgPSBDU3RyaW5n
OjpuZXdVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICBpZiAoIWRlY29kZXIuZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1ZmZlciksIGxl
bmd0aCwgMSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsg
YnVmZmVyLCBsZW5ndGggfSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJlc3VsdCA9
IHN0cmluZzsKQEAgLTEyMywxMSArMTIzLDcgQEAgdm9pZCBBcmd1bWVudENvZGVyPFN0cmluZz46
OmVuY29kZShFbmNvZAogICAgIGJvb2wgaXM4Qml0ID0gc3RyaW5nLmlzOEJpdCgpOwogCiAgICAg
ZW5jb2RlciA8PCBsZW5ndGggPDwgaXM4Qml0OwotCi0gICAgaWYgKGlzOEJpdCkKLSAgICAgICAg
ZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RyaW5nLmNoYXJhY3RlcnM4KCksIGxlbmd0
aCAqIHNpemVvZihMQ2hhciksIGFsaWdub2YoTENoYXIpKTsKLSAgICBlbHNlCi0gICAgICAgIGVu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KHN0cmluZy5jaGFyYWN0ZXJzMTYoKSksIGxlbmd0aCAqIHNpemVvZihVQ2hhciksIGFsaWdu
b2YoVUNoYXIpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShzdHJpbmcuYnl0
ZXMoKSk7CiB9CiB0ZW1wbGF0ZQogdm9pZCBBcmd1bWVudENvZGVyPFN0cmluZz46OmVuY29kZTxF
bmNvZGVyPihFbmNvZGVyJiwgY29uc3QgU3RyaW5nJik7CkBAIC0xNDMsNyArMTM5LDcgQEAgc3Rh
dGljIGlubGluZSBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gZGVjbwogICAgIAogICAgIENoYXJhY3Rl
clR5cGUqIGJ1ZmZlcjsKICAgICBTdHJpbmcgc3RyaW5nID0gU3RyaW5nOjpjcmVhdGVVbmluaXRp
YWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5n
dGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1ZmZlciksIGxlbmd0aCAqIHNpemVv
ZihDaGFyYWN0ZXJUeXBlKSwgYWxpZ25vZihDaGFyYWN0ZXJUeXBlKSkpCisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgYnVmZmVyLCBsZW5ndGggfSkpCiAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgCiAgICAgcmV0dXJuIHN0cmluZzsKQEAgLTE4
MSwxMiArMTc3LDEyIEBAIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIEFyZ3VtZW50Q29kZXI8U3QK
IAogdm9pZCBBcmd1bWVudENvZGVyPFNIQTE6OkRpZ2VzdD46OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBTSEExOjpEaWdlc3QmIGRpZ2VzdCkKIHsKLSAgICBlbmNvZGVyLmVuY29kZUZp
eGVkTGVuZ3RoRGF0YShkaWdlc3QuZGF0YSgpLCBzaXplb2YoZGlnZXN0KSwgMSk7CisgICAgZW5j
b2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0KTsKIH0KIAogV0FSTl9VTlVTRURfUkVU
VVJOIGJvb2wgQXJndW1lbnRDb2RlcjxTSEExOjpEaWdlc3Q+OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlciwgU0hBMTo6RGlnZXN0JiBkaWdlc3QpCiB7Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpLCAxKTsKKyAgICBy
ZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0KTsKIH0KIAogI2lmIEhB
VkUoQVVESVRfVE9LRU4pCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVu
dENvZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3Vt
ZW50Q29kZXJzLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0v
SVBDL0FyZ3VtZW50Q29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEyICs0NSwxMiBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgU2ltcGxlQXJndW1lCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRW5jb2Rlcj4KICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgVCYgdCkKICAgICB7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZ0KSwgc2l6ZW9mKFQpLCBhbGlnbm9m
KFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZ0LCAx
IH0pOwogICAgIH0KIAogICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgVCYgdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBkZWNvZGVyLmRl
Y29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdCksIHNpemVv
ZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVu
Z3RoRGF0YShTcGFuIHsgJnQsIDEgfSk7CiAgICAgfQogfTsKIApAQCAtNjEsMTMgKzYxLDE0IEBA
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBFeHRlbnQ+IHN0cnUKICAgICB7CiAgICAgICAg
IGlmICghRXh0ZW50KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihhcnJheVJl
ZmVyZW5jZS5kYXRhKCkpLCBhcnJheVJlZmVyZW5jZS5zaXplKCkgKiBzaXplb2YoVCksIGFsaWdu
b2YoVCkpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgYXJy
YXlSZWZlcmVuY2UuZGF0YSgpLCBhcnJheVJlZmVyZW5jZS5zaXplKCkgfSk7CiAgICAgfQogICAg
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEFycmF5UmVmZXJlbmNlVHlwZT4gZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCiAgICAgewogICAgICAgICBpZiAoIUV4dGVudCkKICAgICAgICAgICAgIHJldHVy
biBBcnJheVJlZmVyZW5jZVR5cGUoKTsKLSAgICAgICAgY29uc3QgdWludDhfdCogZGF0YSA9IGRl
Y29kZXIuZGVjb2RlRml4ZWRMZW5ndGhSZWZlcmVuY2UoRXh0ZW50ICogc2l6ZW9mKFQpLCBhbGln
bm9mKFQpKTsKKworICAgICAgICBjb25zdCBhdXRvKiBkYXRhID0gZGVjb2Rlci5kZWNvZGVGaXhl
ZExlbmd0aFJlZmVyZW5jZShFeHRlbnQgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpOwogICAgICAg
ICBpZiAoIWRhdGEpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAgICBy
ZXR1cm4gQXJyYXlSZWZlcmVuY2VUeXBlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KGRhdGEp
LCBFeHRlbnQpOwpAQCAtODIsNyArODMsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
QXJndW1lbnRDb2RlCiAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGFy
cmF5UmVmZXJlbmNlLnNpemUoKSk7CiAgICAgICAgIGlmICghYXJyYXlSZWZlcmVuY2Uuc2l6ZSgp
KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3Ro
RGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihhcnJheVJlZmVyZW5jZS5kYXRh
KCkpLCBhcnJheVJlZmVyZW5jZS5zaXplKCkgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpOworICAg
ICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgYXJyYXlSZWZlcmVuY2Uu
ZGF0YSgpLCBhcnJheVJlZmVyZW5jZS5zaXplKCkgfSk7CiAgICAgfQogICAgIHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPEFycmF5UmVmZXJlbmNlVHlwZT4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAg
ICAgewpAQCAtOTYsNyArOTcsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQXJndW1l
bnRDb2RlCiAgICAgICAgIGlmIChVTkxJS0VMWShkYXRhU2l6ZS5oYXNPdmVyZmxvd2VkKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgICAgICBjb25zdCB1aW50OF90
KiBkYXRhID0gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aFJlZmVyZW5jZShkYXRhU2l6ZSwgYWxp
Z25vZihUKSk7CisgICAgICAgIGNvbnN0IGF1dG8qIGRhdGEgPSBkZWNvZGVyLmRlY29kZUZpeGVk
TGVuZ3RoUmVmZXJlbmNlKGRhdGFTaXplLCBhbGlnbm9mKFQpKTsKICAgICAgICAgaWYgKCFkYXRh
KQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAgICAgcmV0dXJuIEFycmF5
UmVmZXJlbmNlVHlwZShyZWludGVycHJldF9jYXN0PGNvbnN0IFQqPihkYXRhKSwgc3RhdGljX2Nh
c3Q8c2l6ZV90PihzaXplKSk7CkBAIC00MjMsNyArNDI0LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwg
bWluQ2FwYWNpdHk+JiB2ZWN0b3IpCiAgICAgewogICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19j
YXN0PHVpbnQ2NF90Pih2ZWN0b3Iuc2l6ZSgpKTsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhl
ZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4odmVjdG9yLmRhdGEo
KSksIHZlY3Rvci5zaXplKCkgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpOworICAgICAgICBlbmNv
ZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YSh2ZWN0b3IpOwogICAgIH0KICAgICAKICAgICBzdGF0
aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mIHZlY3Rv
cikKQEAgLTQ0Niw3ICs0NDcsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpCiAgICAgICAgIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVy
LCBtaW5DYXBhY2l0eT4gdGVtcDsKICAgICAgICAgdGVtcC5ncm93KHNpemUpOwogCi0gICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4odGVtcC5kYXRhKCkpLCBzaXplICogc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKSkKKyAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YSh0ZW1wKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgICAgICB2ZWN0b3Iuc3dhcCh0ZW1wKTsKQEAgLTQ3Myw3ICs0
NzQsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpCiAgICAgICAg
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4g
dmVjdG9yOwogICAgICAgICB2ZWN0b3IuZ3JvdyhzaXplKTsKIAotICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHZlY3Rv
ci5kYXRhKCkpLCBzaXplICogc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKSkKKyAgICAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YSh2ZWN0b3IpKQogICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKIAogICAgICAgICByZXR1cm4gdmVjdG9yOwpJbmRleDogU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvQXJyYXlSZWZlcmVuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9BcnJheVJlZmVyZW5jZS5oCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9BcnJheVJlZmVyZW5jZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw4IEBACiAKIG5hbWVzcGFjZSBJUEMgewogCisvLyBGSVhNRTogUmVw
bGFjZSB3aXRoIDx3dGYvU3Bhbi5oPgorCiBpbmxpbmUgY29uc3RleHByIHNpemVfdCBhcnJheVJl
ZmVyZW5jZUR5bmFtaWNFeHRlbnQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgp
OwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IEV4dGVudCA9IGFycmF5UmVmZXJlbmNl
RHluYW1pY0V4dGVudD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDEzICsyMDYsMTMgQEAgYm9vbCBEZWNvZGVyOjpi
dWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YQogICAgIHJldHVybiBhbGlnbmVkQnVmZmVySXNMYXJn
ZUVub3VnaFRvQ29udGFpbihyb3VuZFVwVG9BbGlnbm1lbnQobV9idWZmZXJQb3MsIGFsaWdubWVu
dCksIG1fYnVmZmVyLCBtX2J1ZmZlckVuZCwgc2l6ZSk7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBzaXplX3QgYWxp
Z25tZW50KQorYm9vbCBEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbjxzdGQ6OmJ5
dGU+IGRhdGEsIHNpemVfdCBhbGlnbm1lbnQpCiB7Ci0gICAgaWYgKCFhbGlnbkJ1ZmZlclBvc2l0
aW9uKGFsaWdubWVudCwgc2l6ZSkpCisgICAgaWYgKCFhbGlnbkJ1ZmZlclBvc2l0aW9uKGFsaWdu
bWVudCwgZGF0YS5zaXplKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtZW1jcHko
ZGF0YSwgbV9idWZmZXJQb3MsIHNpemUpOwotICAgIG1fYnVmZmVyUG9zICs9IHNpemU7CisgICAg
bWVtY3B5KGRhdGEuZGF0YSgpLCBtX2J1ZmZlclBvcywgZGF0YS5zaXplKCkpOworICAgIG1fYnVm
ZmVyUG9zICs9IGRhdGEuc2l6ZSgpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5
LDEzIEBAIHB1YmxpYzoKICAgICBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBpc1ZhbGlkKCkgY29u
c3QgeyByZXR1cm4gbV9idWZmZXJQb3MgIT0gbnVsbHB0cjsgfQogICAgIHZvaWQgbWFya0ludmFs
aWQoKSB7IG1fYnVmZmVyUG9zID0gbnVsbHB0cjsgfQogCi0gICAgV0FSTl9VTlVTRURfUkVUVVJO
IGJvb2wgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqIGRhdGEsIHNpemVfdCwgc2l6ZV90
IGFsaWdubWVudCk7CisgICAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlRml4ZWRMZW5n
dGhEYXRhKFNwYW48c3RkOjpieXRlPiwgc2l6ZV90IGFsaWdubWVudCk7CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZUZpeGVkTGVu
Z3RoRGF0YShUJiYgZGF0YSwgc2l6ZV90IGFsaWdubWVudCA9IGFsaWdub2YodHlwZW5hbWUgZGVj
bHR5cGUoU3BhbihzdGQ6OmRlY2x2YWw8VD4oKSkpOjp2YWx1ZV90eXBlKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBkZWNvZGVGaXhlZExlbmd0aERhdGEoYXNXcml0YWJsZUJ5dGVzKFNwYW4geyBz
dGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSksIGFsaWdubWVudCk7CisgICAgfQogCiAgICAgLy8gVGhl
IGRhdGEgaW4gdGhlIHJldHVybmVkIHBvaW50ZXIgaGVyZSB3aWxsIG9ubHkgYmUgdmFsaWQgZm9y
IHRoZSBsaWZldGltZSBvZiB0aGUgRGVjb2RlciBvYmplY3QuCiAgICAgLy8gUmV0dXJucyBudWxs
cHRyIG9uIGZhaWx1cmUuCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmNw
cAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiwxMiArMjAyLDEyIEBAIHVpbnQ4X3QqIEVuY29k
ZXI6Omdyb3coc2l6ZV90IGFsaWdubWVudCwKICAgICByZXR1cm4gbV9idWZmZXIgKyBhbGlnbmVk
U2l6ZTsKIH0KIAotdm9pZCBFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWlu
dDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQpCit2b2lkIEVuY29kZXI6
OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSwgc2l6ZV90
IGFsaWdubWVudCkKIHsKLSAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
ZGF0YSkgJSBhbGlnbm1lbnQpKTsKKyAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4oZGF0YS5kYXRhKCkpICUgYWxpZ25tZW50KSk7CiAKLSAgICB1aW50OF90KiBidWZmZXIg
PSBncm93KGFsaWdubWVudCwgc2l6ZSk7Ci0gICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7
CisgICAgYXV0byogYnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQsIGRhdGEuc2l6ZSgpKTsKKyAgICBt
ZW1jcHkoYnVmZmVyLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwogfQogCiB2b2lkIEVuY29k
ZXI6OmFkZEF0dGFjaG1lbnQoQXR0YWNobWVudCYmIGF0dGFjaG1lbnQpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcg
QEAKICNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSVBDIHsKQEAgLTYwLDcgKzYx
LDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgd3JhcEZvclRlc3RpbmcoVW5pcXVlUmVmPEVuY29k
ZXI+JiYpOwogCi0gICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCog
ZGF0YSwgc2l6ZV90LCBzaXplX3QgYWxpZ25tZW50KTsKKyAgICB2b2lkIGVuY29kZUZpeGVkTGVu
Z3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSwgc2l6ZV90IGFsaWdubWVudCk7CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KFQmJiBkYXRhLCBzaXplX3QgYWxpZ25tZW50ID0gYWxpZ25vZih0eXBlbmFtZSBkZWNsdHlwZShT
cGFuKHN0ZDo6ZGVjbHZhbDxUPigpKSk6OnZhbHVlX3R5cGUpKQorICAgIHsKKyAgICAgICAgZW5j
b2RlRml4ZWRMZW5ndGhEYXRhKGFzQnl0ZXMoU3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihkYXRhKSB9
KSwgYWxpZ25tZW50KTsKKyAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIEVu
Y29kZXImIG9wZXJhdG9yPDwoVCYmIHQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQ
Qy9TaGFyZWRCdWZmZXJDb3B5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9TaGFyZWRCdWZmZXJDb3B5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvU2hhcmVkQnVmZmVyQ29weS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDcgKzQzLDcgQEAgdm9pZCBTaGFyZWRCdWZmZXJDb3B5OjplbmNvZGUoRW5jb2RlciYg
ZQogICAgIGlmICghYnVmZmVyU2l6ZSkKICAgICAgICAgcmV0dXJuOwogICAgIGZvciAoYXV0byYg
c2VnbWVudCA6ICptX2J1ZmZlcikKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERh
dGEoc2VnbWVudC5zZWdtZW50LT5kYXRhKCksIHNlZ21lbnQuc2VnbWVudC0+c2l6ZSgpLCAxKTsK
KyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc2VnbWVudC5zZWdtZW50LT5i
eXRlcygpKTsKIH0KIAogc3RkOjpvcHRpb25hbDxTaGFyZWRCdWZmZXJDb3B5PiBTaGFyZWRCdWZm
ZXJDb3B5OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25FbmNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlvbkVuY29kZXIuaAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlvbkVu
Y29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQXJn
dW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJNZXNzYWdlTmFtZXMuaCIKKyNpbmNsdWRlIDx3dGYv
U3Bhbi5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIElQQyB7
CkBAIC01MywyMiArNTQsMjggQEAgcHVibGljOgogCiAgICAgflN0cmVhbUNvbm5lY3Rpb25FbmNv
ZGVyKCkgPSBkZWZhdWx0OwogCi0gICAgYm9vbCBlbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3Qg
dWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQpCisgICAgYm9vbCBl
bmNvZGVGaXhlZExlbmd0aERhdGEoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEsIHNpemVfdCBh
bGlnbm1lbnQpCiAgICAgewogICAgICAgICBzaXplX3QgYnVmZmVyUG9pbnRlciA9IHN0YXRpY19j
YXN0PHNpemVfdD4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9idWZmZXIgKyBtX2VuY29k
ZWRTaXplKSk7CiAgICAgICAgIHNpemVfdCBuZXdCdWZmZXJQb2ludGVyID0gcm91bmRVcFRvTXVs
dGlwbGVPZihhbGlnbm1lbnQsIGJ1ZmZlclBvaW50ZXIpOwogICAgICAgICBpZiAobmV3QnVmZmVy
UG9pbnRlciA8IGJ1ZmZlclBvaW50ZXIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIGludHB0cl90IGFsaWduZWRTaXplID0gbV9lbmNvZGVkU2l6ZSArIChuZXdCdWZmZXJQb2lu
dGVyIC0gYnVmZmVyUG9pbnRlcik7Ci0gICAgICAgIGlmICghcmVzZXJ2ZShhbGlnbmVkU2l6ZSwg
c2l6ZSkpCisgICAgICAgIGlmICghcmVzZXJ2ZShhbGlnbmVkU2l6ZSwgZGF0YS5zaXplKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB1aW50OF90KiBidWZmZXIgPSBtX2J1
ZmZlciArIGFsaWduZWRTaXplOwotICAgICAgICBtZW1jcHkoYnVmZmVyLCBkYXRhLCBzaXplKTsK
LSAgICAgICAgbV9lbmNvZGVkU2l6ZSA9IGFsaWduZWRTaXplICsgc2l6ZTsKKyAgICAgICAgYXV0
byogYnVmZmVyID0gbV9idWZmZXIgKyBhbGlnbmVkU2l6ZTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZl
ciwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICAgICAgbV9lbmNvZGVkU2l6ZSA9IGFs
aWduZWRTaXplICsgZGF0YS5zaXplKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEo
VCYmIGRhdGEsIHNpemVfdCBhbGlnbm1lbnQgPSBhbGlnbm9mKHR5cGVuYW1lIGRlY2x0eXBlKFNw
YW4oc3RkOjpkZWNsdmFsPFQ+KCkpKTo6dmFsdWVfdHlwZSkpCisgICAgeworICAgICAgICBlbmNv
ZGVGaXhlZExlbmd0aERhdGEoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0p
LCBhbGlnbm1lbnQpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgU3Ry
ZWFtQ29ubmVjdGlvbkVuY29kZXImIG9wZXJhdG9yPDwoVCYmIHQpCiAgICAgewogICAgICAgICBB
cmd1bWVudENvZGVyPHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8
VD4+LCB2b2lkPjo6ZW5jb2RlKCp0aGlzLCBzdGQ6OmZvcndhcmQ8VD4odCkpOwpJbmRleDogU291
cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNyArMTQ0LDcgQEAgc3RhdGljIHZvaWQgZW5jb2Rl
U2hhcmVkQnVmZmVyKEVuY29kZXImIAogICAgIC8vIG92ZXIgdGhlIElQQy4gQ29ubmVjdGlvblVu
aXguY3BwIGFscmVhZHkgdXNlcyBzaGFyZWQgbWVtb3J5IHRvIHNlbmQgYW55IElQQyBtZXNzYWdl
IHRoYXQgaXMKICAgICAvLyB0b28gbGFyZ2UuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA4NTcxLgogICAgIGZvciAoY29uc3QgYXV0byYgZWxlbWVudCA6ICpi
dWZmZXIpCi0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGVsZW1lbnQuc2Vn
bWVudC0+ZGF0YSgpLCBlbGVtZW50LnNlZ21lbnQtPnNpemUoKSwgMSk7CisgICAgICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGVsZW1lbnQuc2VnbWVudC0+Ynl0ZXMoKSk7CiAjZWxz
ZQogICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKICAgICBhdXRvIHNoYXJlZE1lbW9y
eUJ1ZmZlciA9IFNoYXJlZE1lbW9yeTo6Y29weUJ1ZmZlcigqYnVmZmVyKTsKQEAgLTE4MCw3ICsx
ODAsNyBAQCBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlU2hhCiAKICAgICBW
ZWN0b3I8dWludDhfdD4gZGF0YTsKICAgICBkYXRhLmdyb3coYnVmZmVyU2l6ZSk7Ci0gICAgaWYg
KCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCks
IDEpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoZGF0YSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdU
Rk1vdmUoZGF0YSkpOwpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL0F1eGlsaWFyeVBy
b2Nlc3NNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL0F1eGls
aWFyeVByb2Nlc3NNYWMubW0JKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvU2hh
cmVkL21hYy9BdXhpbGlhcnlQcm9jZXNzTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMjEsNyAr
MzIxLDcgQEAgc3RhdGljIFN0cmluZyBzYW5kYm94RmlsZVBhdGgoY29uc3QgU3RyaQogICAgIGNy
eXB0by0+YWRkQnl0ZXMoaGVhZGVyLmRhdGEoKSwgaGVhZGVyLmxlbmd0aCgpKTsKICAgICBhdXRv
IGhhc2ggPSBjcnlwdG8tPmNvbXB1dGVIYXNoKCk7CiAKLSAgICByZXR1cm4gbWFrZVN0cmluZyhk
aXJlY3RvcnlQYXRoLCAiL0NvbXBpbGVkU2FuZGJveCsiLCBiYXNlNjRVUkxFbmNvZGVkKGhhc2gu
ZGF0YSgpLCBoYXNoLnNpemUoKSkpOworICAgIHJldHVybiBtYWtlU3RyaW5nKGRpcmVjdG9yeVBh
dGgsICIvQ29tcGlsZWRTYW5kYm94KyIsIGJhc2U2NFVSTEVuY29kZWQoaGFzaCkpOwogfQogCiBz
dGF0aWMgYm9vbCBlbnN1cmVTYW5kYm94Q2FjaGVEaXJlY3RvcnkoY29uc3QgU2FuZGJveEluZm8m
IGluZm8pCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzV2luLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktp
dC9TaGFyZWQvd2luL1dlYkNvcmVBcmd1bWVudENvZGVyc1dpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDEyICs1MSwxMiBAQCBzdGQ6Om9wdGlvbmFsPEZvbnRBdHRyaWJ1dGVzPiBBcmd1bWVu
dENvCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPExPR0ZPTlQ+IHsKICAgICBzdGF0
aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgTE9HRk9OVCYgbG9nRm9udCkK
ICAgICB7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZsb2dGb250KSwgc2l6ZW9mIGxvZ0ZvbnQsIDEpOworICAg
ICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJmxvZ0ZvbnQsIDEgfSwg
MSk7CiAgICAgfQogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPExPR0ZPTlQ+IGRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQogICAgIHsKICAgICAgICAgTE9HRk9OVCBsb2dGb250OwotICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KCZsb2dGb250KSwgc2l6ZW9mKGxvZ0ZvbnQpLCAxKSkKKyAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJmxvZ0ZvbnQsIDEgfSwgMSkpCiAgICAgICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAgICByZXR1cm4gbG9nRm9udDsKICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3Rv
cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElDb250
ZW50UnVsZUxpc3RTdG9yZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzMSwxOCArMTMxLDIwIEBAIHN0YXRpYyBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YSBl
bmNvZGUKICAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmNvbmRpdGlvbmVkRmlsdGVyc0J5dGVjb2Rl
U2l6ZTsKICAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFp
bjsKIAotICAgIEFTU0VSVChlbmNvZGVyLmJ1ZmZlclNpemUoKSA9PSBDb250ZW50UnVsZUxpc3RG
aWxlSGVhZGVyU2l6ZSk7Ci0gICAgcmV0dXJuIFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhKGVu
Y29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICBBU1NFUlQoZW5jb2Rl
ci5idWZmZXIoKS5zaXplKCkgPT0gQ29udGVudFJ1bGVMaXN0RmlsZUhlYWRlclNpemUpOworICAg
IHJldHVybiBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YSB7IGVuY29kZXIuYnVmZmVyKCkgfTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBnZXREYXRhKGNvbnN0IFQmLCBjb25zdCBG
dW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYpOwotdGVtcGxhdGU8PiB2b2lk
IGdldERhdGEoY29uc3QgV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGEmIGRhdGEsIGNvbnN0IEZ1
bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCosIHNpemVfdCk+JiBmdW5jdGlvbikKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHZvaWQgZ2V0RGF0YShjb25zdCBUJiwgY29uc3QgRnVuY3Rpb248Ym9vbChT
cGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYpOworCit0ZW1wbGF0ZTw+IHZvaWQgZ2V0RGF0YShjb25z
dCBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YSYgZGF0YSwgY29uc3QgRnVuY3Rpb248Ym9vbChT
cGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYgZnVuY3Rpb24pCiB7CiAgICAgZGF0YS5hcHBseShmdW5j
dGlvbik7CiB9Ci10ZW1wbGF0ZTw+IHZvaWQgZ2V0RGF0YShjb25zdCBXZWJDb3JlOjpTaGFyZWRC
dWZmZXImIGRhdGEsIGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCosIHNpemVfdCk+
JiBmdW5jdGlvbikKKwordGVtcGxhdGU8PiB2b2lkIGdldERhdGEoY29uc3QgV2ViQ29yZTo6U2hh
cmVkQnVmZmVyJiBkYXRhLCBjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRl
Pik+JiBmdW5jdGlvbikKIHsKLSAgICBmdW5jdGlvbihkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkp
OworICAgIGZ1bmN0aW9uKGRhdGEuYnl0ZXMoKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CkBAIC0xNTAsMTMgKzE1MiwxMyBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxDb250ZW50UnVsZUxp
c3RNZXRhCiB7CiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CiAgICAgQ29udGVudFJ1bGVMaXN0
TWV0YURhdGEgbWV0YURhdGE7Ci0gICAgZ2V0RGF0YShmaWxlRGF0YSwgWyZtZXRhRGF0YSwgJnN1
Y2Nlc3MsICZmaWxlRGF0YV0oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKKyAg
ICBnZXREYXRhKGZpbGVEYXRhLCBbJm1ldGFEYXRhLCAmc3VjY2VzcywgJmZpbGVEYXRhXShTcGFu
PGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkgewogICAgICAgICAvLyBUaGUgZmlsZSBkYXRhIHNob3Vs
ZCBiZSBtYXBwZWQgaW50byBvbmUgY29udGludW91cyBtZW1vcnkgc2VnbWVudCBzbyB0aGUgc2l6
ZQogICAgICAgICAvLyBwYXNzZWQgdG8gdGhlIGFwcGxpZXIgc2hvdWxkIGFsd2F5cyBlcXVhbCB0
aGUgZGF0YSBzaXplLgotICAgICAgICBpZiAoc2l6ZSAhPSBmaWxlRGF0YS5zaXplKCkpCisgICAg
ICAgIGlmIChkYXRhLnNpemUoKSAhPSBmaWxlRGF0YS5zaXplKCkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRh
dGEsIHNpemUpOworICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyBk
YXRhIH07CiAgICAgICAgIAogICAgICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiB2ZXJzaW9u
OwogICAgICAgICBkZWNvZGVyID4+IHZlcnNpb247CkBAIC0yMjgsOCArMjMwLDggQEAgc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8TWFwcGVkRGF0YT4gb3BlbkFuZAogc3RhdGljIGJvb2wgd3JpdGVEYXRh
VG9GaWxlKGNvbnN0IFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhJiBmaWxlRGF0YSwgUGxhdGZv
cm1GaWxlSGFuZGxlIGZkKQogewogICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7Ci0gICAgZmlsZURh
dGEuYXBwbHkoW2ZkLCAmc3VjY2Vzc10oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUp
IHsKLSAgICAgICAgaWYgKHdyaXRlVG9GaWxlKGZkLCBkYXRhLCBzaXplKSA9PSAtMSkgeworICAg
IGZpbGVEYXRhLmFwcGx5KFtmZCwgJnN1Y2Nlc3NdKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRh
KSB7CisgICAgICAgIGlmICh3cml0ZVRvRmlsZShmZCwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgp
KSA9PSAtMSkgewogICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19X
S1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0JKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDcg
QEAKICNpbXBvcnQgPHBhbC9jcnlwdG8vQ3J5cHRvRGlnZXN0Lmg+CiAjaW1wb3J0IDx3dGYvQmxv
Y2tQdHIuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9T
cGFuQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8
d3RmL3RleHQvQmFzZTY0Lmg+CiAKQEAgLTcwLDcgKzcxLDcgQEAgc3RhdGljIFJldGFpblB0cjxO
U0RhdGE+IHByb2R1Y2VDbGllbnREYQogICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6QCJ3
ZWJhdXRobi5nZXQiIGZvcktleTpAInR5cGUiXTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAg
IFtkaWN0aW9uYXJ5IHNldE9iamVjdDpiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhjaGFsbGVuZ2Uu
Ynl0ZXMsIGNoYWxsZW5nZS5sZW5ndGgpIGZvcktleTpAImNoYWxsZW5nZSJdOworICAgIFtkaWN0
aW9uYXJ5IHNldE9iamVjdDpiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhhc0J5dGVzKGNoYWxsZW5n
ZSkpIGZvcktleTpAImNoYWxsZW5nZSJdOwogICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpvcmln
aW4gZm9yS2V5OkAib3JpZ2luIl07CiAKICAgICByZXR1cm4gW05TSlNPTlNlcmlhbGl6YXRpb24g
ZGF0YVdpdGhKU09OT2JqZWN0OmRpY3Rpb25hcnkuZ2V0KCkgb3B0aW9uczpOU0pTT05Xcml0aW5n
U29ydGVkS2V5cyBlcnJvcjpuaWxdOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
QXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsQXV0
aGVudGljYXRvci5tbQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIHN0YXRpYyBpbmxpbmUgSGFzaFNldDxTdHJpbmc+IHBy
b2R1Y2VIYXMKICAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0OwogICAgIGZvciAoYXV0byYgY3Jl
ZGVudGlhbERlc2NyaXB0b3IgOiBjcmVkZW50aWFsRGVzY3JpcHRvcnMpIHsKICAgICAgICAgaWYg
KGVtcHR5VHJhbnNwb3J0c09yQ29udGFpbihjcmVkZW50aWFsRGVzY3JpcHRvci50cmFuc3BvcnRz
LCBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpJbnRlcm5hbCkgJiYgY3JlZGVudGlhbERlc2NyaXB0
b3IudHlwZSA9PSBQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5ICYmIGNyZWRlbnRp
YWxEZXNjcmlwdG9yLmlkVmVjdG9yLnNpemUoKSA9PSBjcmVkZW50aWFsSWRMZW5ndGgpCi0gICAg
ICAgICAgICByZXN1bHQuYWRkKGJhc2U2NEVuY29kZVRvU3RyaW5nKGNyZWRlbnRpYWxEZXNjcmlw
dG9yLmlkVmVjdG9yLmRhdGEoKSwgY3JlZGVudGlhbERlc2NyaXB0b3IuaWRWZWN0b3Iuc2l6ZSgp
KSk7CisgICAgICAgICAgICByZXN1bHQuYWRkKGJhc2U2NEVuY29kZVRvU3RyaW5nKGNyZWRlbnRp
YWxEZXNjcmlwdG9yLmlkVmVjdG9yKSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CkBA
IC0yMzMsNyArMjMzLDcgQEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6Om1ha2VDcmVkZW50aWFs
KAogICAgICAgICBpZiAobm90Rm91bmQgIT0gbV9leGlzdGluZ0NyZWRlbnRpYWxzLmZpbmRNYXRj
aGluZyhbJmV4Y2x1ZGVDcmVkZW50aWFsSWRzXSAoYXV0byYgY3JlZGVudGlhbCkgewogICAgICAg
ICAgICAgYXV0byogcmF3SWQgPSBjcmVkZW50aWFsLT5yYXdJZCgpOwogICAgICAgICAgICAgQVNT
RVJUKHJhd0lkKTsKLSAgICAgICAgICAgIHJldHVybiBleGNsdWRlQ3JlZGVudGlhbElkcy5jb250
YWlucyhiYXNlNjRFbmNvZGVUb1N0cmluZyhyYXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0
aCgpKSk7CisgICAgICAgICAgICByZXR1cm4gZXhjbHVkZUNyZWRlbnRpYWxJZHMuY29udGFpbnMo
YmFzZTY0RW5jb2RlVG9TdHJpbmcocmF3SWQtPmJ5dGVzKCkpKTsKICAgICAgICAgfSkpIHsKICAg
ICAgICAgICAgIHJlY2VpdmVFeGNlcHRpb24oeyBOb3RBbGxvd2VkRXJyb3IsICJBdCBsZWFzdCBv
bmUgY3JlZGVudGlhbCBtYXRjaGVzIGFuIGVudHJ5IG9mIHRoZSBleGNsdWRlQ3JlZGVudGlhbHMg
bGlzdCBpbiB0aGUgcGxhdGZvcm0gYXR0YWNoZWQgYXV0aGVudGljYXRvci4iX3MgfSwgV2ViQXV0
aGVudGljYXRpb25TdGF0dXM6OkxBRXhjbHVkZUNyZWRlbnRpYWxzTWF0Y2hlZCk7CiAgICAgICAg
ICAgICByZXR1cm47CkBAIC01MTAsNyArNTEwLDcgQEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6
OmdldEFzc2VydGlvbigpCiAgICAgICAgIH0KIAogICAgICAgICBhdXRvKiByYXdJZCA9IGNyZWRl
bnRpYWwtPnJhd0lkKCk7Ci0gICAgICAgIGlmIChhbGxvd0NyZWRlbnRpYWxJZHMuY29udGFpbnMo
YmFzZTY0RW5jb2RlVG9TdHJpbmcocmF3SWQtPmRhdGEoKSwgcmF3SWQtPmJ5dGVMZW5ndGgoKSkp
KQorICAgICAgICBpZiAoYWxsb3dDcmVkZW50aWFsSWRzLmNvbnRhaW5zKGJhc2U2NEVuY29kZVRv
U3RyaW5nKHJhd0lkLT5ieXRlcygpKSkpCiAgICAgICAgICAgICBhc3NlcnRpb25SZXNwb25zZXMu
dW5jaGVja2VkQXBwZW5kKGNyZWRlbnRpYWwuY29weVJlZigpKTsKICAgICB9CiAgICAgaWYgKGFz
c2VydGlvblJlc3BvbnNlcy5pc0VtcHR5KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0xvY2FsQ29ubmVjdGlvbi5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01v
Y2tMb2NhbENvbm5lY3Rpb24ubW0JKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0xvY2FsQ29ubmVjdGlvbi5tbQko
d29ya2luZyBjb3B5KQpAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgTW9ja0xvY2FsQ29ubmVjdGlv
bjo6ZmlsdGVyUmVzcG9uc2UKICAgICBmb3IgKDsgaXRyICE9IHJlc3BvbnNlcy5lbmQoKTsgKytp
dHIpIHsKICAgICAgICAgYXV0byogcmF3SWQgPSBpdHItPmdldCgpLnJhd0lkKCk7CiAgICAgICAg
IEFTU0VSVChyYXdJZCk7Ci0gICAgICAgIGF1dG8gcmF3SWRCYXNlNjQgPSBiYXNlNjRFbmNvZGVU
b1N0cmluZyhyYXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgYXV0
byByYXdJZEJhc2U2NCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKHJhd0lkLT5ieXRlcygpKTsKICAg
ICAgICAgaWYgKHJhd0lkQmFzZTY0ID09IHByZWZlcnJlZENyZWRlbnRpYWxJZEJhc2U2NCkKICAg
ICAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21h
Yy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL21hYy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvTGVnYWN5U2Vzc2lvblN0YXRl
Q29kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDcgKzEyOSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgKnRoaXMgPDwgbGVuZ3RoOwogCiAgICAgICAgICp0aGlzIDw8IHN0YXRpY19jYXN0PHVp
bnQ2NF90PihsZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKLSAgICAgICAgZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KFN0cmluZ1ZpZXcodmFsdWUp
LnVwY29udmVydGVkQ2hhcmFjdGVycygpLmdldCgpKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSwg
YWxpZ25vZihVQ2hhcikpOworICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IFN0
cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpLmdldCgpLCBsZW5ndGggfSk7
CiAKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KQEAgLTEzNyw3ICsxMzcsNyBAQCBwdWJs
aWM6CiAgICAgSGlzdG9yeUVudHJ5RGF0YUVuY29kZXImIG9wZXJhdG9yPDwoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiB2YWx1ZSkKICAgICB7CiAgICAgICAgICp0aGlzIDw8IHN0YXRpY19jYXN0PHVp
bnQ2NF90Pih2YWx1ZS5zaXplKCkpOwotICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEodmFs
dWUuZGF0YSgpLCB2YWx1ZS5zaXplKCksIDEpOworICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERh
dGEodmFsdWUpOwogCiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CkBAIC0xNDUsNyArMTQ1
LDcgQEAgcHVibGljOgogICAgIEhpc3RvcnlFbnRyeURhdGFFbmNvZGVyJiBvcGVyYXRvcjw8KGNv
bnN0IFZlY3RvcjxjaGFyPiYgdmFsdWUpCiAgICAgewogICAgICAgICAqdGhpcyA8PCBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4odmFsdWUuc2l6ZSgpKTsKLSAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZhbHVlLmRhdGEoKSksIHZhbHVl
LnNpemUoKSwgMSk7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YSh2YWx1ZSk7CiAKICAg
ICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KQEAgLTIwNiwxNyArMjA2LDIzIEBAIHByaXZhdGU6
CiAgICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYXJpdGhtZXRpYzxUeXBlPjo6
dmFsdWUsICIiKTsKIAotICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4oJnZhbHVlKSwgc2l6ZW9mKHZhbHVlKSwgc2l6ZW9mKHZhbHVlKSk7Cisg
ICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJnZhbHVlLCAxIH0sIHNpemVvZih2
YWx1ZSkpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCi0gICAgdm9pZCBlbmNvZGVG
aXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIHVuc2lnbmVk
IGFsaWdubWVudCkKKyAgICB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0
ZDo6Ynl0ZT4gZGF0YSwgdW5zaWduZWQgYWxpZ25tZW50KQogICAgIHsKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlQoZGF0YSB8fCAhc2l6ZSk7Ci0gICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90PihkYXRhKSAlIGFsaWdubWVudCkpOworICAgICAgICBSRUxFQVNFX0FTU0VS
VChkYXRhLmRhdGEoKSB8fCAhZGF0YS5zaXplKCkpOworICAgICAgICBBU1NFUlQoIShyZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdD4oZGF0YS5kYXRhKCkpICUgYWxpZ25tZW50KSk7CiAKLSAgICAg
ICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQsIHNpemUpOwotICAgICAgICBtZW1j
cHkoYnVmZmVyLCBkYXRhLCBzaXplKTsKKyAgICAgICAgYXV0byogYnVmZmVyID0gZ3JvdyhhbGln
bm1lbnQsIGRhdGEuc2l6ZSgpKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciwgZGF0YS5kYXRhKCks
IGRhdGEuc2l6ZSgpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZv
aWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCB1bnNpZ25lZCBhbGlnbm1lbnQgPSBh
bGlnbm9mKHR5cGVuYW1lIGRlY2x0eXBlKFNwYW4oc3RkOjpkZWNsdmFsPFQ+KCkpKTo6dmFsdWVf
dHlwZSkpCisgICAgeworICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEoYXNCeXRlcyhTcGFu
IHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pLCBhbGlnbm1lbnQpOwogICAgIH0KIAogICAgIHVp
bnQ4X3QqIGdyb3codW5zaWduZWQgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKQEAgLTYwMSw3ICs2
MDcsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgVUNoYXIqIGJ1ZmZlcjsKICAgICAgICAgYXV0byBz
dHJpbmcgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAg
ICAgICBkZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVm
ZmVyKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSwgYWxpZ25vZihVQ2hhcikpOworICAgICAgICBk
ZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IGJ1ZmZlciwgbGVuZ3RoIH0pOwogCiAgICAgICAg
IHZhbHVlID0gc3RyaW5nOwogICAgICAgICByZXR1cm4gKnRoaXM7CkBAIC03MzcsMTcgKzc0Mywy
MyBAQCBwcml2YXRlOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYXJpdGhtZXRpYzxU
eXBlPjo6dmFsdWUsICIiKTsKICAgICAgICAgdmFsdWUgPSBUeXBlKCk7CiAKLSAgICAgICAgZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2YWx1ZSksIHNp
emVvZih2YWx1ZSksIHNpemVvZih2YWx1ZSkpOworICAgICAgICBkZWNvZGVGaXhlZExlbmd0aERh
dGEoU3BhbiB7ICZ2YWx1ZSwgMSB9LCBzaXplb2YodmFsdWUpKTsKICAgICAgICAgcmV0dXJuICp0
aGlzOwogICAgIH0KIAotICAgIHZvaWQgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqIGRh
dGEsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBhbGlnbm1lbnQpCisgICAgdm9pZCBkZWNvZGVGaXhl
ZExlbmd0aERhdGEoU3BhbjxzdGQ6OmJ5dGU+IGRhdGEsIHVuc2lnbmVkIGFsaWdubWVudCkKICAg
ICB7Ci0gICAgICAgIGlmICghYWxpZ25CdWZmZXJQb3NpdGlvbihhbGlnbm1lbnQsIHNpemUpKQor
ICAgICAgICBpZiAoIWFsaWduQnVmZmVyUG9zaXRpb24oYWxpZ25tZW50LCBkYXRhLnNpemUoKSkp
CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbWVtY3B5KGRhdGEsIG1fYnVmZmVyLCBz
aXplKTsKLSAgICAgICAgbV9idWZmZXIgKz0gc2l6ZTsKKyAgICAgICAgbWVtY3B5KGRhdGEuZGF0
YSgpLCBtX2J1ZmZlciwgZGF0YS5zaXplKCkpOworICAgICAgICBtX2J1ZmZlciArPSBkYXRhLnNp
emUoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCB1bnNpZ25lZCBhbGlnbm1lbnQgPSBhbGlnbm9mKHR5
cGVuYW1lIGRlY2x0eXBlKFNwYW4oc3RkOjpkZWNsdmFsPFQ+KCkpKTo6dmFsdWVfdHlwZSkpCisg
ICAgeworICAgICAgICBkZWNvZGVGaXhlZExlbmd0aERhdGEoYXNXcml0YWJsZUJ5dGVzKFNwYW4g
eyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSksIGFsaWdubWVudCk7CiAgICAgfQogCiAgICAgYm9v
bCBhbGlnbkJ1ZmZlclBvc2l0aW9uKHVuc2lnbmVkIGFsaWdubWVudCwgc2l6ZV90IHNpemUpCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRDaGFubmVsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2Nr
ZXRDaGFubmVsLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDgg
KzU5LDggQEAgTmV0d29ya1NlbmRRdWV1ZSBXZWJTb2NrZXRDaGFubmVsOjpjcmVhdAogICAgICAg
ICBjaGFubmVsLm5vdGlmeVNlbmRGcmFtZShXZWJTb2NrZXRGcmFtZTo6T3BDb2RlOjpPcENvZGVU
ZXh0LCB1dGY4U3RyaW5nLmRhdGFBc1VJbnQ4UHRyKCksIHV0ZjhTdHJpbmcubGVuZ3RoKCkpOwog
ICAgICAgICBjaGFubmVsLnNlbmRNZXNzYWdlKE1lc3NhZ2VzOjpOZXR3b3JrU29ja2V0Q2hhbm5l
bDo6U2VuZFN0cmluZyB7IElQQzo6RGF0YVJlZmVyZW5jZSB7IHV0ZjhTdHJpbmcuZGF0YUFzVUlu
dDhQdHIoKSwgdXRmOFN0cmluZy5sZW5ndGgoKSB9IH0sIHV0ZjhTdHJpbmcubGVuZ3RoKCkpOwog
ICAgIH0sIFsmY2hhbm5lbF0oYXV0byYgc3BhbikgewotICAgICAgICBjaGFubmVsLm5vdGlmeVNl
bmRGcmFtZShXZWJTb2NrZXRGcmFtZTo6T3BDb2RlOjpPcENvZGVCaW5hcnksIHNwYW4uZGF0YSgp
LCBzcGFuLnNpemUoKSk7Ci0gICAgICAgIGNoYW5uZWwuc2VuZE1lc3NhZ2UoTWVzc2FnZXM6Ok5l
dHdvcmtTb2NrZXRDaGFubmVsOjpTZW5kRGF0YSB7IElQQzo6RGF0YVJlZmVyZW5jZSB7IHNwYW4u
ZGF0YSgpLCBzcGFuLnNpemUoKSB9IH0sIHNwYW4uc2l6ZSgpKTsKKyAgICAgICAgY2hhbm5lbC5u
b3RpZnlTZW5kRnJhbWUoV2ViU29ja2V0RnJhbWU6Ok9wQ29kZTo6T3BDb2RlQmluYXJ5LCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzcGFuLmRhdGEoKSksIHNwYW4uc2l6ZSgpKTsK
KyAgICAgICAgY2hhbm5lbC5zZW5kTWVzc2FnZShNZXNzYWdlczo6TmV0d29ya1NvY2tldENoYW5u
ZWw6OlNlbmREYXRhIHsgSVBDOjpEYXRhUmVmZXJlbmNlIHsgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OF90Kj4oc3Bhbi5kYXRhKCkpLCBzcGFuLnNpemUoKSB9IH0sIHNwYW4uc2l6ZSgpKTsK
ICAgICB9LCBbJmNoYW5uZWxdKEV4Y2VwdGlvbkNvZGUgZXhjZXB0aW9uQ29kZSkgewogICAgICAg
ICBhdXRvIGNvZGUgPSBzdGF0aWNfY2FzdDxpbnQ+KGV4Y2VwdGlvbkNvZGUpOwogICAgICAgICBj
aGFubmVsLmZhaWwobWFrZVN0cmluZygiRmFpbGVkIHRvIGxvYWQgQmxvYjogZXhjZXB0aW9uIGNv
ZGUgPSAiLCBjb2RlKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9J
UENUZXN0aW5nQVBJLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ0MywxMiArNDQzLDcgQEAgSlNWYWx1ZVJlZiBKU1NoYXJlZE1lbW9yeTo6cmVhZEJ5dGVz
KEpTQwogICAgIHJldHVybiB0b1JlZihqc0FycmF5QnVmZmVyKTsKIH0KIAotc3RydWN0IEFycmF5
QnVmZmVyRGF0YSB7Ci0gICAgdm9pZCogYnVmZmVyIHsgbnVsbHB0ciB9OwotICAgIHNpemVfdCBs
ZW5ndGggeyAwIH07Ci19OwotCi1zdGF0aWMgQXJyYXlCdWZmZXJEYXRhIGFycmF5QnVmZmVyRGF0
YUZyb21WYWx1ZVJlZihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNUeXBlZEFycmF5VHlwZSB0eXBl
LCBKU1ZhbHVlUmVmIHZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCitzdGF0aWMgU3Bh
bjxzdGQ6OmJ5dGU+IGFycmF5QnVmZmVyRGF0YUZyb21WYWx1ZVJlZihKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNUeXBlZEFycmF5VHlwZSB0eXBlLCBKU1ZhbHVlUmVmIHZhbHVlUmVmLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCiB7CiAgICAgYXV0byBvYmplY3RSZWYgPSBKU1ZhbHVlVG9PYmplY3Qo
Y29udGV4dCwgdmFsdWVSZWYsIGV4Y2VwdGlvbik7CiAgICAgaWYgKCFvYmplY3RSZWYpCkBAIC00
NjksNyArNDY0LDcgQEAgc3RhdGljIEFycmF5QnVmZmVyRGF0YSBhcnJheUJ1ZmZlckRhdGFGcgog
ICAgIGVsc2UKICAgICAgICAgbGVuZ3RoID0gSlNPYmplY3RHZXRUeXBlZEFycmF5Qnl0ZUxlbmd0
aChjb250ZXh0LCBvYmplY3RSZWYsIGV4Y2VwdGlvbik7CiAKLSAgICByZXR1cm4geyBidWZmZXIs
IGxlbmd0aCB9OworICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHN0ZDo6Ynl0ZSo+KGJ1ZmZlciks
IGxlbmd0aCB9OwogfQogCiBKU1ZhbHVlUmVmIEpTU2hhcmVkTWVtb3J5Ojp3cml0ZUJ5dGVzKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKQEAgLTQ4NywxMyArNDgyLDEzIEBAIEpTVmFsdWVSZWYgSlNTaGFy
ZWRNZW1vcnk6OndyaXRlQnl0ZXMoSlMKICAgICB9CiAKICAgICBhdXRvIGRhdGEgPSBhcnJheUJ1
ZmZlckRhdGFGcm9tVmFsdWVSZWYoY29udGV4dCwgdHlwZSwgYXJndW1lbnRzWzBdLCBleGNlcHRp
b24pOwotICAgIGlmICghZGF0YS5idWZmZXIpIHsKKyAgICBpZiAoIWRhdGEuZGF0YSgpKSB7CiAg
ICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIkNvdWxkIG5vdCBy
ZWFkIHRoZSBidWZmZXIiX3MpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CiAgICAgfQogCiAgICAgc2l6ZV90IG9mZnNldCA9IDA7Ci0gICAgc2l6ZV90IGxl
bmd0aCA9IGRhdGEubGVuZ3RoOworICAgIHNpemVfdCBsZW5ndGggPSBkYXRhLnNpemUoKTsKICAg
ICBzaXplX3Qgc2hhcmVkTWVtb3J5U2l6ZSA9IGpzU2hhcmVkTWVtb3J5LT5tX3NoYXJlZE1lbW9y
eS0+c2l6ZSgpOwogCiAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjb250ZXh0KTsKQEAg
LTUyNiw3ICs1MjEsNyBAQCBKU1ZhbHVlUmVmIEpTU2hhcmVkTWVtb3J5Ojp3cml0ZUJ5dGVzKEpT
CiAgICAgICAgIGxlbmd0aCA9ICpsZW5ndGhWYWx1ZTsKICAgICB9CiAKLSAgICBtZW1jcHkoc3Rh
dGljX2Nhc3Q8dWludDhfdCo+KGpzU2hhcmVkTWVtb3J5LT5tX3NoYXJlZE1lbW9yeS0+ZGF0YSgp
KSArIG9mZnNldCwgZGF0YS5idWZmZXIsIGxlbmd0aCk7CisgICAgbWVtY3B5KHN0YXRpY19jYXN0
PHVpbnQ4X3QqPihqc1NoYXJlZE1lbW9yeS0+bV9zaGFyZWRNZW1vcnktPmRhdGEoKSkgKyBvZmZz
ZXQsIGRhdGEuZGF0YSgpLCBsZW5ndGgpOwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwogfQpAQCAtNjg4LDEwICs2ODMsMTAgQEAgc3RhdGljIGJvb2wgZW5jb2Rl
VHlwZWRBcnJheShJUEM6OkVuY29kZQogICAgIEFTU0VSVCh0eXBlICE9IGtKU1R5cGVkQXJyYXlU
eXBlTm9uZSk7CiAKICAgICBhdXRvIGRhdGEgPSBhcnJheUJ1ZmZlckRhdGFGcm9tVmFsdWVSZWYo
Y29udGV4dCwgdHlwZSwgdmFsdWVSZWYsIGV4Y2VwdGlvbik7Ci0gICAgaWYgKCFkYXRhLmJ1ZmZl
cikKKyAgICBpZiAoIWRhdGEuZGF0YSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBl
bmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihkYXRhLmJ1ZmZlciksIGRhdGEubGVuZ3RoLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZp
eGVkTGVuZ3RoRGF0YShkYXRhKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9FbnZpcm9ubWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9FbnZpcm9ubWVudC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvRW52aXJvbm1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYs
NyArMTU2LDcgQEAgYm9vbCBFbnZpcm9ubWVudDo6Y29tcHV0ZUlzRGVidWdIZWFwRW5hYgogICAg
IHJldHVybiB0cnVlOwogI2VuZGlmCiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRy
dWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDIxLTA2LTExICBT
YW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBBZG9wdCBTcGFuIGluIG1v
cmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBbV0lQXQorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2Fpcm8vUGl4ZWxEdW1wU3VwcG9y
dENhaXJvLmNwcDoKKyAgICAgICAgKGNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckJpdG1hcENvbnRl
eHQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRDRy5jcHA6
CisgICAgICAgIChjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JCaXRtYXBDb250ZXh0KToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9CbG9vbUZpbHRlci5jcHA6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpnZW5lcmF0ZVJhbmRvbURpZ2VzdHMpOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
VEVTVF9GKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW06Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9uOjp3ZWJTb2NrZXRIYW5kc2hha2UpOgor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvY2Fpcm8vVGVzdEludm9jYXRpb25DYWlyby5jcHA6
CisgICAgICAgIChXVFI6OmNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckNhaXJvU3VyZmFjZSk6Cisg
ICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcDoKKyAgICAg
ICAgKFdUUjo6Y29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQ29udGV4dCk6CisKIDIwMjEtMDYtMTEg
IEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW1dp
bl1bRHVtcFJlbmRlclRyZWVdIC0tbm8tdGltZW91dCBzd2l0Y2ggZG9lc24ndCB3b3JrCkluZGV4
OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fpcm8uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NhaXJvL1BpeGVsRHVtcFN1cHBvcnRD
YWlyby5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NhaXJv
L1BpeGVsRHVtcFN1cHBvcnRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcg
QEAgdm9pZCBjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JCaXRtYXBDb250ZQogICAgIFNIQTEgc2hh
MTsKICAgICB1bnNpZ25lZCBjaGFyKiBiaXRtYXBEYXRhID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcio+KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZSkpOwogICAgIGZvciAo
dW5zaWduZWQgcm93ID0gMDsgcm93IDwgcGl4ZWxzSGlnaDsgcm93KyspIHsKLSAgICAgICAgc2hh
MS5hZGRCeXRlcyhiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lkZSk7CisgICAgICAgIHNoYTEuYWRk
Qnl0ZXMoU3BhbiB7IGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlIH0pOwogICAgICAgICBiaXRt
YXBEYXRhICs9IGJ5dGVzUGVyUm93OwogICAgIH0KICAgICBTSEExOjpEaWdlc3QgaGFzaDsKSW5k
ZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRDRy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1wU3VwcG9ydENHLmNwcAko
cmV2aXNpb24gMjc4ODA5KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1wU3Vw
cG9ydENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTQgKzg4LDE0IEBAIHZvaWQgY29tcHV0
ZVNIQTFIYXNoU3RyaW5nRm9yQml0bWFwQ29udGUKICAgICAgICAgICAgIHVpbnQzMl90IGJ1ZmZl
cltwaXhlbHNXaWRlXTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY29sdW1uID0gMDsgY29s
dW1uIDwgcGl4ZWxzV2lkZTsgY29sdW1uKyspCiAgICAgICAgICAgICAgICAgYnVmZmVyW2NvbHVt
bl0gPSBPU1JlYWRMaXR0bGVJbnQzMihiaXRtYXBEYXRhLCA0ICogY29sdW1uKTsKLSAgICAgICAg
ICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYnVmZmVy
KSwgNCAqIHBpeGVsc1dpZGUpOworICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgYnVm
ZmVyLCBwaXhlbHNXaWRlIH0pOwogICAgICAgICAgICAgYml0bWFwRGF0YSArPSBieXRlc1BlclJv
dzsKICAgICAgICAgfQogICAgIH0gZWxzZQogI2VuZGlmCiAgICAgewogICAgICAgICBmb3IgKHVu
c2lnbmVkIHJvdyA9IDA7IHJvdyA8IHBpeGVsc0hpZ2g7IHJvdysrKSB7Ci0gICAgICAgICAgICBz
aGExLmFkZEJ5dGVzKGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlKTsKKyAgICAgICAgICAgIHNo
YTEuYWRkQnl0ZXMoU3BhbiB7IGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlIH0pOwogICAgICAg
ICAgICAgYml0bWFwRGF0YSArPSBieXRlc1BlclJvdzsKICAgICAgICAgfQogICAgIH0KSW5kZXg6
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0Jsb29tRmlsdGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9CbG9vbUZpbHRlci5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0Jsb29tRmlsdGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBzdGF0aWMgVmVjdG9yPFNIQTE6
OkRpZ2VzdD4gZ2VuZXJhdGVSYW5kCiAgICAgU0hBMSBzaGExOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBoYXNoQ291bnQ7ICsraSkgewogICAgICAgICBkb3VibGUgcmFuZG9tID0gcmFu
ZG9tTnVtYmVyKCk7Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oJnJhbmRvbSksIHNpemVvZihkb3VibGUpKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhT
cGFuIHsgJnJhbmRvbSwgMSB9KTsKICAgICAgICAgU0hBMTo6RGlnZXN0IGRpZ2VzdDsKICAgICAg
ICAgc2hhMS5jb21wdXRlSGFzaChkaWdlc3QpOwogICAgICAgICBoYXNoZXMuYXBwZW5kKGRpZ2Vz
dCk7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNw
cAkocmV2aXNpb24gMjc4ODA5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmls
ZVN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw4ICsxMzMsOCBAQCBURVNUX0YoRmls
ZVN5c3RlbVRlc3QsIE1hcHBpbmdFeGlzdGluZ0ZpCiAgICAgRmlsZVN5c3RlbTo6TWFwcGVkRmls
ZURhdGEgbWFwcGVkRmlsZURhdGEodGVtcEZpbGVQYXRoKCksIEZpbGVTeXN0ZW06Ok1hcHBlZEZp
bGVNb2RlOjpTaGFyZWQsIHN1Y2Nlc3MpOwogICAgIEVYUEVDVF9UUlVFKHN1Y2Nlc3MpOwogICAg
IEVYUEVDVF9UUlVFKCEhbWFwcGVkRmlsZURhdGEpOwotICAgIEVYUEVDVF9UUlVFKG1hcHBlZEZp
bGVEYXRhLnNpemUoKSA9PSBzdHJsZW4oRmlsZVN5c3RlbVRlc3REYXRhKSk7Ci0gICAgRVhQRUNU
X1RSVUUoc3RybnN0cihGaWxlU3lzdGVtVGVzdERhdGEsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIq
PihtYXBwZWRGaWxlRGF0YS5kYXRhKCkpLCBtYXBwZWRGaWxlRGF0YS5zaXplKCkpKTsKKyAgICBF
WFBFQ1RfVFJVRShtYXBwZWRGaWxlRGF0YS5kYXRhKCkuc2l6ZSgpID09IHN0cmxlbihGaWxlU3lz
dGVtVGVzdERhdGEpKTsKKyAgICBFWFBFQ1RfVFJVRShzdHJuc3RyKEZpbGVTeXN0ZW1UZXN0RGF0
YSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4obWFwcGVkRmlsZURhdGEuZGF0YSgpLmRh
dGEoKSksIG1hcHBlZEZpbGVEYXRhLmRhdGEoKS5zaXplKCkpKTsKIH0KIAogVEVTVF9GKEZpbGVT
eXN0ZW1UZXN0LCBNYXBwaW5nRXhpc3RpbmdFbXB0eUZpbGUpCkluZGV4OiBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9TSEExLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9TSEExLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvU0hBMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcg
QEAgc3RhdGljIHZvaWQgZXhwZWN0U0hBMShDU3RyaW5nIGlucHV0LCBpbgogewogICAgIFNIQTEg
c2hhMTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcGVhdDsgKytpKQotICAgICAgICBzaGEx
LmFkZEJ5dGVzKGlucHV0KTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhpbnB1dC5ieXRlcygpKTsK
ICAgICBDU3RyaW5nIGFjdHVhbCA9IHNoYTEuY29tcHV0ZUhleERpZ2VzdCgpOwogCiAgICAgQVNT
RVJUX0VRKGV4cGVjdGVkLmxlbmd0aCgpLCBhY3R1YWwubGVuZ3RoKCkpOwpJbmRleDogVG9vbHMv
VGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbQkocmV2aXNpb24gMjc4ODA5KQorKysgVG9v
bHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0z
NDAsMTEgKzM0MCwxMSBAQCB2b2lkIENvbm5lY3Rpb246OndlYlNvY2tldEhhbmRzaGFrZShDb21w
CiAKICAgICAgICAgICAgIGNvbnN0ZXhwciBhdXRvKiB3ZWJTb2NrZXRLZXlHVUlEID0gIjI1OEVB
RkE1LUU5MTQtNDdEQS05NUNBLUM1QUIwREM4NUIxMSI7CiAgICAgICAgICAgICBTSEExIHNoYTE7
Ci0gICAgICAgICAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGtleUJlZ2luKSwga2V5RW5kIC0ga2V5QmVnaW4pOwotICAgICAgICAgICAgc2hhMS5hZGRC
eXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih3ZWJTb2NrZXRLZXlHVUlEKSwg
c3RybGVuKHdlYlNvY2tldEtleUdVSUQpKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3Bh
biB7IGtleUJlZ2luLCBrZXlFbmQgfSk7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKFNwYW4g
eyB3ZWJTb2NrZXRLZXlHVUlELCBzdHJsZW4od2ViU29ja2V0S2V5R1VJRCkgfSk7CiAgICAgICAg
ICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAgICAgICAgICAgIHNoYTEuY29tcHV0ZUhhc2goaGFz
aCk7Ci0gICAgICAgICAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaGFzaC5kYXRhKCks
IFNIQTE6Omhhc2hTaXplKTsKKyAgICAgICAgICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmlu
ZyhoYXNoKTsKICAgICAgICAgfTsKIAogICAgICAgICBjb25uZWN0aW9uLnNlbmQoSFRUUFJlc3Bv
bnNlKDEwMSwgewpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jYWlyby9UZXN0SW52b2Nh
dGlvbkNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NhaXJv
L1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9XZWJL
aXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckNh
aXIKICAgICBTSEExIHNoYTE7CiAgICAgdW5zaWduZWQgY2hhciogYml0bWFwRGF0YSA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZh
Y2UpKTsKICAgICBmb3IgKHNpemVfdCByb3cgPSAwOyByb3cgPCBwaXhlbHNIaWdoOyArK3Jvdykg
ewotICAgICAgICBzaGExLmFkZEJ5dGVzKGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlKTsKKyAg
ICAgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgYml0bWFwRGF0YSwgNCAqIHBpeGVsc1dpZGUgfSk7
CiAgICAgICAgIGJpdG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7CiAgICAgfQogICAgIFNIQTE6OkRp
Z2VzdCBoYXNoOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlv
bkNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZv
Y2F0aW9uQ0cuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVy
L2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBA
IHZvaWQgY29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQ29udGV4dChDR0MKICNlbmRpZgogICAgIHsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCByb3cgPSAwOyByb3cgPCBwaXhlbHNIaWdoOyByb3crKykg
ewotICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lkZSk7
CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyBiaXRtYXBEYXRhLCA0ICogcGl4ZWxz
V2lkZSB9KTsKICAgICAgICAgICAgIGJpdG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7CiAgICAgICAg
IH0KICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431297</attachid>
            <date>2021-06-13 19:09:28 -0700</date>
            <delta_ts>2021-06-14 09:21:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226887-20210613190926.patch</filename>
            <type>text/plain</type>
            <size>204323</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBA
CisyMDIxLTA2LTEyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogQVBJL0pTU2NyaXB0Lm1tOgorICAg
ICAgICAoK1tKU1NjcmlwdCBzY3JpcHRPZlR5cGU6bWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTp3
aXRoU291cmNlVVJMOmFuZEJ5dGVjb2RlQ2FjaGU6aW5WaXJ0dWFsTWFjaGluZTplcnJvcjpdKToK
KyAgICAgICAgKC1bSlNTY3JpcHQgcmVhZENhY2hlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHdy
aXRlQ2FjaGU6XSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9ja0hhc2g6OkNvZGVCbG9ja0hhc2gpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHA6CisgICAgICAgIChJbnNw
ZWN0b3I6OmJhY2tlbmRDb21tYW5kc0hhc2gpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZm
ZXIuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJDb250ZW50czo6d3JpdGFibGVCeXRlcyk6
CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyQ29udGVudHM6OmJ5dGVzIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6QXJyYXlCdWZmZXI6OndyaXRhYmxlQnl0ZXMpOgorICAgICAgICAoSlNDOjpBcnJh
eUJ1ZmZlcjo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
Lmg6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6d3JpdGFibGVCeXRlcyk6CisgICAg
ICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRp
bWUvQ2FjaGVQYXlsb2FkLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVQYXlsb2FkOjptYWtlTWFw
cGVkUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6bWFrZU1hbGxvY1BheWxv
YWQpOgorICAgICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6Om1ha2VFbXB0eVBheWxvYWQpOgorICAg
ICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6OkNhY2hlUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNh
Y2hlUGF5bG9hZDo6ZnJlZURhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVQYXlsb2FkLmg6
CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6ZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlUGF5bG9hZDo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6
Q2FjaGVQYXlsb2FkKToKKyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKToKKwogMjAyMS0w
Ni0xMSAgUGF0cmljayBBbmdsZSAgPHBhbmdsZUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogQWRkIGluc3RydW1lbnRhdGlvbiB0byBub2RlIGRlc3RydWN0aW9uIGZvciBJbnNw
ZWN0b3JET01BZ2VudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMTMgKzEzNCwxMyBAQCArIChpbnN0YW5jZXR5cGUpc2Ny
aXB0T2ZUeXBlOihKU1NjcmlwdFR5CiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4g
Y3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJGaWxlIGF0IHBhdGggJUAg
Y291bGQgbm90IGJlIG1hcHBlZC4iLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihzeXN0ZW1QYXRo
KV0sIGVycm9yKTsKIAotICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCkpKQor
ICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmlsZURhdGEuZGF0YSgpLnNpemUoKSkpCiAg
ICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIk5v
dCBhbGwgY2hhcmFjdGVycyBpbiBmaWxlIGF0ICVAIGFyZSBBU0NJSS4iLCBzdGF0aWNfY2FzdDxO
U1N0cmluZyAqPihzeXN0ZW1QYXRoKV0sIGVycm9yKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gYWRv
cHROUyhbW0pTU2NyaXB0IGFsbG9jXSBpbml0XSk7CiAgICAgcmVzdWx0LT5tX3ZpcnR1YWxNYWNo
aW5lID0gdm07CiAgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOwotICAgIHJlc3VsdC0+bV9zb3Vy
Y2UgPSBTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcoYml0d2lzZV9jYXN0
PGNvbnN0IExDaGFyKj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpKSk7CisgICAg
cmVzdWx0LT5tX3NvdXJjZSA9IFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWlu
ZyhiaXR3aXNlX2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmls
ZURhdGEuZGF0YSgpLnNpemUoKSkpOwogICAgIHJlc3VsdC0+bV9tYXBwZWRTb3VyY2UgPSBXVEZN
b3ZlKGZpbGVEYXRhKTsKICAgICByZXN1bHQtPm1fc291cmNlVVJMID0gc291cmNlVVJMOwogICAg
IHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7CkBAIC0xNjgsMjQgKzE2OCwyMyBAQCAt
ICh2b2lkKXJlYWRDYWNoZQogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgY29uc3QgdWludDhfdCogZmlsZURhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihtYXBwZWRGaWxlLmRhdGEoKSk7Ci0gICAgdW5zaWduZWQgZmlsZVRvdGFsU2l6ZSA9IG1h
cHBlZEZpbGUuc2l6ZSgpOworICAgIGF1dG8gZmlsZURhdGEgPSBtYXBwZWRGaWxlLmRhdGEoKTsK
IAogICAgIC8vIEVuc3VyZSB3ZSBhdCBsZWFzdCBoYXZlIGEgU0hBMTo6RGlnZXN0IHRvIHJlYWQu
Ci0gICAgaWYgKGZpbGVUb3RhbFNpemUgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgeworICAgIGlm
IChmaWxlRGF0YS5zaXplKCkgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgewogICAgICAgICBGaWxl
U3lzdGVtOjpkZWxldGVGaWxlKGNhY2hlRmlsZW5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgdW5zaWduZWQgZmlsZURhdGFTaXplID0gZmlsZVRvdGFsU2l6ZSAtIHNpemVvZihT
SEExOjpEaWdlc3QpOworICAgIHVuc2lnbmVkIGZpbGVEYXRhU2l6ZSA9IGZpbGVEYXRhLnNpemUo
KSAtIHNpemVvZihTSEExOjpEaWdlc3QpOwogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFz
aDsKICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhmaWxlRGF0YSwgZmlsZURhdGFT
aXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKGZpbGVEYXRhLmZpcnN0KGZpbGVEYXRhU2l6ZSkpOwog
ICAgIHNoYTEuY29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2VzdCBm
aWxlSGFzaDsKLSAgICBtZW1jcHkoJmZpbGVIYXNoLCBmaWxlRGF0YSArIGZpbGVEYXRhU2l6ZSwg
c2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOworICAgIG1lbWNweSgmZmlsZUhhc2gsIGZpbGVEYXRhLmRh
dGEoKSArIGZpbGVEYXRhU2l6ZSwgc2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOwogCiAgICAgaWYgKGNv
bXB1dGVkSGFzaCAhPSBmaWxlSGFzaCkgewogICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxl
KGNhY2hlRmlsZW5hbWUpOwpAQCAtMzQzLDcgKzM0Miw3IEBAIC0gKEJPT0wpd3JpdGVDYWNoZToo
U3RyaW5nJillcnJvcgogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFzaDsKICAgICBTSEEx
IHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhtX2NhY2hlZEJ5dGVjb2RlLT5kYXRhKCksIG1fY2Fj
aGVkQnl0ZWNvZGUtPnNpemUoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgbV9jYWNoZWRC
eXRlY29kZS0+ZGF0YSgpLCBtX2NhY2hlZEJ5dGVjb2RlLT5zaXplKCkgfSk7CiAgICAgc2hhMS5j
b21wdXRlSGFzaChjb21wdXRlZEhhc2gpOwogICAgIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKHRl
bXBGRCwgY29tcHV0ZWRIYXNoLmRhdGEoKSwgc2l6ZW9mKGNvbXB1dGVkSGFzaCkpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0hhc2guY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgQ29kZUJsb2Nr
SGFzaDo6Q29kZUJsb2NrSGFzaChjb25zdCBTb3VyYwogICAgIEFTU0VSVChzb3VyY2VDb2RlLmxl
bmd0aCgpID49IDApOwogICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhTb3VyY2VDb2RlTGVuZ3Ro
VG9IYXNoID0gNTAwICogTUI7CiAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzb3VyY2VD
b2RlLmxlbmd0aCgpKSA8IG1heFNvdXJjZUNvZGVMZW5ndGhUb0hhc2gpCi0gICAgICAgIHNoYTEu
YWRkQnl0ZXMoc291cmNlQ29kZS50b1VURjgoKSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoc291
cmNlQ29kZS50b1VURjgoKS5ieXRlcygpKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gSnVzdCBo
YXNoIHdpdGggdGhlIGxlbmd0aCBhbmQgc2FtcGxlcyBvZiB0aGUgc291cmNlIHN0cmluZyBpbnN0
ZWFkLgogICAgICAgICBTdHJpbmdWaWV3IHN0ciA9IHNvdXJjZUNvZGUucHJvdmlkZXIoKS0+c291
cmNlKCk7CkBAIC02MiwxMCArNjIsMTAgQEAgQ29kZUJsb2NrSGFzaDo6Q29kZUJsb2NrSGFzaChj
b25zdCBTb3VyYwogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHIubGVuZ3RoKCk7CiAgICAg
ICAgIHVuc2lnbmVkIHN0ZXAgPSAobGVuZ3RoID4+IDEwKSArIDE7CiAKLSAgICAgICAgc2hhMS5h
ZGRCeXRlcyhiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KCZsZW5ndGgpLCBzaXplb2YobGVuZ3RoKSk7
CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZsZW5ndGgsIDEgfSk7CiAgICAgICAgIGRv
IHsKICAgICAgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IHN0cltpbmRleF07Ci0gICAgICAgICAg
ICBzaGExLmFkZEJ5dGVzKGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oJmNoYXJhY3RlciksIHNpemVv
ZihjaGFyYWN0ZXIpKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZjaGFyYWN0
ZXIsIDEgfSk7CiAgICAgICAgICAgICBvbGRJbmRleCA9IGluZGV4OwogICAgICAgICAgICAgaW5k
ZXggKz0gc3RlcDsKICAgICAgICAgfSB3aGlsZSAoaW5kZXggPiBvbGRJbmRleCAmJiBpbmRleCA8
IGxlbmd0aCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VIYXNo
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VI
YXNoLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BhcnNlSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiBQYXJzZUhhc2g6OlBhcnNlSGFzaChjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VD
b2RlKQogewogICAgIFNIQTEgc2hhMTsKLSAgICBzaGExLmFkZEJ5dGVzKHNvdXJjZUNvZGUudG9V
VEY4KCkpOworICAgIHNoYTEuYWRkQnl0ZXMoc291cmNlQ29kZS50b1VURjgoKS5ieXRlcygpKTsK
ICAgICBTSEExOjpEaWdlc3QgZGlnZXN0OwogICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsK
ICAgICB1bnNpZ25lZCBoYXNoID0gZGlnZXN0WzBdIHwgKGRpZ2VzdFsxXSA8PCA4KSB8IChkaWdl
c3RbMl0gPDwgMTYpIHwgKGRpZ2VzdFszXSA8PCAyNCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1JlbW90ZUluc3BlY3RvclV0aWxzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1Jl
bW90ZUluc3BlY3RvclV0aWxzLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgY29uc3QgQ1N0cmluZyYgYmFja2VuZENv
bW1hbmRzSGFzaCgpCiAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSA9IGdfYnl0ZXNfZ2V0X2Rh
dGEoYnl0ZXMuZ2V0KCksICZkYXRhU2l6ZSk7CiAgICAgICAgIEFTU0VSVChkYXRhU2l6ZSk7CiAg
ICAgICAgIFNIQTEgc2hhMTsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhzdGF0aWNfY2FzdDxjb25z
dCB1aW50OF90Kj4oZGF0YSksIGRhdGFTaXplKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFu
IHsgc3RhdGljX2Nhc3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSksIGRhdGFTaXplIH0pOwogICAg
ICAgICBoZXhEaWdlc3QgPSBzaGExLmNvbXB1dGVIZXhEaWdlc3QoKTsKICAgICB9CiAgICAgcmV0
dXJuIGhleERpZ2VzdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogI2luY2x1ZGUgPHd0Zi9QYWNrZWRSZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZl
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtODAsNyAr
ODEsMTAgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBt
X2RhdGEuZ2V0TWF5QmVOdWxsKHNpemVJbkJ5dGVzKCkpOyB9CiAgICAgdW5zaWduZWQgc2l6ZUlu
Qnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX3NpemVJbkJ5dGVzOyB9Ci0gICAgCisKKyAgICBTcGFu
PHN0ZDo6Ynl0ZT4gd3JpdGFibGVCeXRlcygpIHsgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8c3RkOjpi
eXRlKj4oZGF0YSgpKSwgc2l6ZUluQnl0ZXMoKSB9OyB9CisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4geyBzdGF0aWNfY2FzdDxjb25zdCBzdGQ6OmJ5dGUq
PihkYXRhKCkpLCBzaXplSW5CeXRlcygpIH07IH0KKwogICAgIGJvb2wgaXNTaGFyZWQoKSBjb25z
dCB7IHJldHVybiBtX3NoYXJlZDsgfQogICAgIAogcHJpdmF0ZToKQEAgLTEyNyw3ICsxMzEsOSBA
QCBwdWJsaWM6CiAgICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKICAgICBpbmxpbmUgY29uc3Qgdm9p
ZCogZGF0YSgpIGNvbnN0OwogICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7
Ci0gICAgCisgICAgaW5saW5lIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCk7CisgICAg
aW5saW5lIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAgICAgdm9pZCBt
YWtlU2hhcmVkKCk7CiAgICAgdm9pZCBzZXRTaGFyaW5nTW9kZShBcnJheUJ1ZmZlclNoYXJpbmdN
b2RlKTsKICAgICBpbmxpbmUgYm9vbCBpc1NoYXJlZCgpIGNvbnN0OwpAQCAtMTk3LDYgKzIwMywx
NiBAQCB1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJu
IG1fY29udGVudHMuc2l6ZUluQnl0ZXMoKTsKIH0KIAorU3BhbjxzdGQ6OmJ5dGU+IEFycmF5QnVm
ZmVyOjp3cml0YWJsZUJ5dGVzKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZW50cy53cml0YWJsZUJ5
dGVzKCk7Cit9CisKK1NwYW48Y29uc3Qgc3RkOjpieXRlPiBBcnJheUJ1ZmZlcjo6Ynl0ZXMoKSBj
b25zdAoreworICAgIHJldHVybiBtX2NvbnRlbnRzLmJ5dGVzKCk7Cit9CisKIGJvb2wgQXJyYXlC
dWZmZXI6OmlzU2hhcmVkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb250ZW50cy5pc1NoYXJl
ZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZm
ZXJWaWV3LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4Niw5IEBAIHB1
YmxpYzoKIAogICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVM
ZW5ndGg7IH0KIAorICAgIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCkgeyByZXR1cm4g
eyBzdGF0aWNfY2FzdDxzdGQ6OmJ5dGUqPihkYXRhKCkpLCBieXRlTGVuZ3RoKCkgfTsgfQorICAg
IFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0IHsgcmV0dXJuIHsgc3RhdGljX2Nh
c3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSgpKSwgYnl0ZUxlbmd0aCgpIH07IH0KKwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0RGV0YWNoYWJsZShib29sKTsKICAgICBib29sIGlzRGV0
YWNoYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNEZXRhY2hhYmxlOyB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlUGF5bG9hZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsMjcgKzMwLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogCiBD
YWNoZVBheWxvYWQgQ2FjaGVQYXlsb2FkOjptYWtlTWFwcGVkUGF5bG9hZChGaWxlU3lzdGVtOjpN
YXBwZWRGaWxlRGF0YSYmIGRhdGEpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZCh0cnVlLCBk
YXRhLmxlYWtIYW5kbGUoKSwgZGF0YS5zaXplKCkpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQo
dHJ1ZSwgZGF0YS5sZWFrSGFuZGxlKCkpOwogfQogCiBDYWNoZVBheWxvYWQgQ2FjaGVQYXlsb2Fk
OjptYWtlTWFsbG9jUGF5bG9hZChNYWxsb2NQdHI8dWludDhfdCwgVk1NYWxsb2M+JiYgZGF0YSwg
c2l6ZV90IHNpemUpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZChmYWxzZSwgZGF0YS5sZWFr
UHRyKCksIHNpemUpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQoZmFsc2UsIGFzV3JpdGFibGVC
eXRlcyhTcGFuIHsgZGF0YS5sZWFrUHRyKCksIHNpemUgfSkpOwogfQogCiBDYWNoZVBheWxvYWQg
Q2FjaGVQYXlsb2FkOjptYWtlRW1wdHlQYXlsb2FkKCkKIHsKLSAgICByZXR1cm4gQ2FjaGVQYXls
b2FkKHRydWUsIG51bGxwdHIsIDApOworICAgIHJldHVybiBDYWNoZVBheWxvYWQodHJ1ZSwgeyB9
KTsKIH0KIAogQ2FjaGVQYXlsb2FkOjpDYWNoZVBheWxvYWQoQ2FjaGVQYXlsb2FkJiYgb3RoZXIp
CiB7Ci0gICAgbV9tYXBwZWQgPSBvdGhlci5tX21hcHBlZDsKLSAgICBtX3NpemUgPSBvdGhlci5t
X3NpemU7Ci0gICAgbV9kYXRhID0gb3RoZXIubV9kYXRhOwotICAgIG90aGVyLm1fbWFwcGVkID0g
ZmFsc2U7Ci0gICAgb3RoZXIubV9kYXRhID0gbnVsbHB0cjsKLSAgICBvdGhlci5tX3NpemUgPSAw
OworICAgIG1fbWFwcGVkID0gc3RkOjpleGNoYW5nZShvdGhlci5tX21hcHBlZCwgZmFsc2UpOwor
ICAgIG1fZGF0YSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLCB7IH0pOwogfQogCiBDYWNo
ZVBheWxvYWQ6On5DYWNoZVBheWxvYWQoKQpAQCAtNjcsMTIgKzYzLDEzIEBAIENhY2hlUGF5bG9h
ZCYgQ2FjaGVQYXlsb2FkOjpvcGVyYXRvcj0oQ2EKIAogdm9pZCBDYWNoZVBheWxvYWQ6OmZyZWVE
YXRhKCkKIHsKLSAgICBpZiAoIW1fZGF0YSkKKyAgICBpZiAoIW1fZGF0YS5kYXRhKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBpZiAobV9tYXBwZWQpIHsKLSAgICAgICAgRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1fZGF0YSwgbV9zaXplKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZmFzdEZy
ZWUobV9kYXRhKTsKKworICAgIGlmIChtX21hcHBlZCkKKyAgICAgICAgRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1fZGF0YSk7CisgICAgZWxzZQorICAgICAgICBmYXN0RnJlZShtX2RhdGEu
ZGF0YSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHd0Zi9GaWxlU3lz
dGVtLmg+CiAjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MSwyMiArNDIsMjAgQEAgcHVibGljOgogICAgIEpT
X0VYUE9SVF9QUklWQVRFIH5DYWNoZVBheWxvYWQoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBD
YWNoZVBheWxvYWQmIG9wZXJhdG9yPShDYWNoZVBheWxvYWQmJiBvdGhlcik7CiAKLSAgICBjb25z
dCB1aW50OF90KiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBjb25zdCB1aW50OF90KiBkYXRhKCkg
Y29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9kYXRhLmRhdGEoKSk7
IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5zaXplKCk7IH0KIAog
cHJpdmF0ZToKLSAgICBDYWNoZVBheWxvYWQoYm9vbCBtYXBwZWQsIHZvaWQqIGRhdGEsIHNpemVf
dCBzaXplKQorICAgIENhY2hlUGF5bG9hZChib29sIG1hcHBlZCwgU3BhbjxzdGQ6OmJ5dGU+IGRh
dGEpCiAgICAgICAgIDogbV9tYXBwZWQobWFwcGVkKQotICAgICAgICAsIG1fc2l6ZShzaXplKQot
ICAgICAgICAsIG1fZGF0YShzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGF0YSkpCisgICAgICAgICwg
bV9kYXRhKGRhdGEpCiAgICAgewogICAgIH0KIAogICAgIHZvaWQgZnJlZURhdGEoKTsKIAogICAg
IGJvb2wgbV9tYXBwZWQ7Ci0gICAgc2l6ZV90IG1fc2l6ZTsKLSAgICB1aW50OF90KiBtX2RhdGE7
CisgICAgU3BhbjxzdGQ6OmJ5dGU+IG1fZGF0YTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1Bh
cnNlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNyArMjYxLDcg
QEAgYXV0byBTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKGNvbnN0IHVpbgogICAgIH0KIAogICAg
IGlmIChVTkxJS0VMWShPcHRpb25zOjp1c2VFYWdlcldlYkFzc2VtYmx5TW9kdWxlSGFzaGluZygp
KSkKLSAgICAgICAgbV9oYXNoZXIuYWRkQnl0ZXMoYnl0ZXMsIGJ5dGVzU2l6ZSk7CisgICAgICAg
IG1faGFzaGVyLmFkZEJ5dGVzKFNwYW4geyBieXRlcywgYnl0ZXNTaXplIH0pOwogCiAgICAgc2l6
ZV90IG9mZnNldEluQnl0ZXMgPSAwOwogICAgIHdoaWxlICh0cnVlKSB7CkluZGV4OiBTb3VyY2Uv
V1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw2OCBAQAorMjAyMS0wNi0xMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgQWRvcHQgU3BhbiBpbiBtb3JlIHBsYWNlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIFdURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmNwcDoKKyAgICAg
ICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjp+TWFwcGVkRmlsZURhdGEp
OgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6TWFwcGVkRmlsZURhdGE6Om1hcEZpbGVI
YW5kbGUpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6dW5tYXBWaWV3T2ZGaWxlKToK
KyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Om1hcFRvRmlsZSk6CisgICAgICAgICogd3Rm
L0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVE
YXRhOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6
Ok1hcHBlZEZpbGVEYXRhOjpkYXRhIGNvbnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUlt
cGw6Ok1hcHBlZEZpbGVEYXRhOjpsZWFrSGFuZGxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3Rl
bUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YSk6CisgICAgICAgIChXVEY6OkZp
bGVTeXN0ZW1JbXBsOjpNYXBwZWRGaWxlRGF0YTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6
RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpzaXplIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1NIQTEuY3BwOgorICAgICAgICAoV1RG
OjpTSEExOjphZGRCeXRlcyk6CisgICAgICAgIChXVEY6OlNIQTE6OmZpbmFsaXplKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6U0hBMTo6cHJvY2Vzc0Jsb2NrKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6U0hBMTo6cmVzZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTSEExOjpoZXhEaWdl
c3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTSEExOjpjb21wdXRlSGV4RGlnZXN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3dGYvU0hBMS5oOgorICAgICAgICAoV1RGOjpTSEExOjphZGRCeXRl
cyk6CisgICAgICAgICogd3RmL1ZlY3Rvci5oOgorICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZS9Q
ZXJzaXN0ZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPENT
dHJpbmc+OjplbmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8Q1N0cmlu
Zz46OmRlY29kZSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTdHJpbmc+Ojpl
bmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVjb2RlU3RyaW5nVGV4dCk6Cisg
ICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUpOgor
ICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKToK
KyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oOgorICAgICAgICAq
IHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5jcHA6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyOjpEZWNvZGVyKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6
OkRlY29kZXI6OmJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFkKToKKyAgICAgICAgKFdURjo6UGVy
c2lzdGVuY2U6OkRlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjp2ZXJpZnlDaGVja3N1bSk6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyOjp+RGVjb2Rlcik6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3Bl
cnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmg6CisgICAgICAgICogd3RmL3BlcnNpc3RlbmNl
L1BlcnNpc3RlbnRFbmNvZGVyLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29k
ZXI6Omdyb3cpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6dXBkYXRlQ2hl
Y2tzdW1Gb3JEYXRhKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6OmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjpl
bmNvZGVOdW1iZXIpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6ZW5jb2Rl
Q2hlY2tzdW0pOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6RW5jb2Rlcik6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjp+RW5jb2Rlcik6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmg6
CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjpidWZmZXIgY29uc3QpOgorICAg
ICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIp
OgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6YnVmZmVyU2l6ZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL3RleHQvQmFzZTY0Lmg6CisgICAgICAgIChXVEY6OmJh
c2U2NEVuY29kZVRvVmVjdG9yKToKKyAgICAgICAgKFdURjo6YmFzZTY0RW5jb2RlVG9TdHJpbmcp
OgorICAgICAgICAqIHd0Zi90ZXh0L0NTdHJpbmcuaDoKKwogMjAyMS0wNi0xMSAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgV2Vha0hhc2hNYXAKSW5kZXg6
IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtNjkyLDYgKzY5Miw4IEBACiAJCUFEODlCNkI5MUU2NDE1MEYwMDkwNzA3RiAvKiBN
ZW1vcnlQcmVzc3VyZUhhbmRsZXJDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IE1lbW9yeVByZXNzdXJlSGFuZGxlckNvY29hLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBREYyQ0U2NDFFMzlGMTA2MDA2ODg5REIgLyogTWVtb3J5Rm9vdHBy
aW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lbW9yeUZvb3RwcmludC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREYyQ0U2NTFFMzlGMTA2MDA2ODg5REIg
LyogTWVtb3J5Rm9vdHByaW50Q29jb2EuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTWVtb3J5Rm9vdHByaW50Q29jb2EuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlCQzcwMEI0NDI2NzY2ODM0MDA0OUVERjIgLyogU3BhbkNvY29hLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNwYW5Db2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzcwMEI0
NTI2NzY2OUMxMDA0OUVERjIgLyogU3BhbkNGLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwYW5DRi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0EzMEM3RjI2NkQzMDM0MDAwRDIzMEMgLyog
U3Bhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTcGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyQkNGQzNFMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5ndWFnZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYW5ndWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyQkNGQzNGMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5ndWFnZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYW5ndWFnZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtODQwLDYgKzg0Miw3IEBACiAJCQkJQzJCQ0ZDNDExRjYxRDYxNjAwQzky
MjJDIC8qIExhbmd1YWdlQ0YuY3BwICovLAogCQkJCTJDREVEMEVFMTgxMTVDMzgwMDREQkE3MCAv
KiBSdW5Mb29wQ0YuY3BwICovLAogCQkJCUEzRUU1QzNCMjFGRkFDN0MwMEZBQkQ2MSAvKiBTY2hl
ZHVsZVBhaXJDRi5jcHAgKi8sCisJCQkJQkM3MDBCNDUyNjc2NjlDMTAwNDlFREYyIC8qIFNwYW5D
Ri5oICovLAogCQkJCTFBRkRFNjQ3MTk1MjAxQzMwMEM0OEZGQSAvKiBUeXBlQ2FzdHNDRi5oICov
LAogCQkJCTVDMUYwNTk0MjE2NDM3QjMwMDM5MzAyQyAvKiBVUkxDRi5jcHAgKi8sCiAJCQkpOwpA
QCAtMTU4MSw2ICsxNTg0LDcgQEAKIAkJCQkxQ0E4NUNBODI0MUIwQjI2MDA3MUMyRjUgLyogUnVu
dGltZUFwcGxpY2F0aW9uQ2hlY2tzQ29jb2EuY3BwICovLAogCQkJCTFDQTg1Q0E3MjQxQjBCMTEw
MDcxQzJGNSAvKiBSdW50aW1lQXBwbGljYXRpb25DaGVja3NDb2NvYS5oICovLAogCQkJCUEzMEQ0
MTJDMUYwREUwQkEwMEI3MTk1NCAvKiBTb2Z0TGlua2luZy5oICovLAorCQkJCUJDNzAwQjQ0MjY3
NjY4MzQwMDQ5RURGMiAvKiBTcGFuQ29jb2EuaCAqLywKIAkJCQlFQjYxRURDNjI0MDlDQ0MwMDAx
RUZFMzYgLyogU3lzdGVtVHJhY2luZ0NvY29hLmNwcCAqLywKIAkJCQk1Q0MwRUU4NjIxNjJCQzIy
MDBBMUE4NDIgLyogVVJMQ29jb2EubW0gKi8sCiAJCQkJOTMyNDE2NTcyNDNCQzJFNTAwMzJGQUFF
IC8qIFZlY3RvckNvY29hLmggKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxOSw5ICszMTksOSBAQCBib29sIGV4Y2x1ZGVGcm9tQmFja3VwKGNvbnN0IFN0cmluZyYp
CiAKIE1hcHBlZEZpbGVEYXRhOjp+TWFwcGVkRmlsZURhdGEoKQogewotICAgIGlmICghbV9maWxl
RGF0YSkKKyAgICBpZiAoIW1fZmlsZURhdGEuZGF0YSgpKQogICAgICAgICByZXR1cm47Ci0gICAg
dW5tYXBWaWV3T2ZGaWxlKG1fZmlsZURhdGEsIG1fZmlsZVNpemUpOworICAgIHVubWFwVmlld09m
RmlsZShtX2ZpbGVEYXRhKTsKIH0KIAogTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKGNv
bnN0IFN0cmluZyYgZmlsZVBhdGgsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUsIGJvb2wmIHN1Y2Nl
c3MpCkBAIC0zODMsMTQgKzM4MywxMyBAQCBib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFu
ZGxlKFBsYXRmCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBtX2ZpbGVEYXRh
ID0gZGF0YTsKLSAgICBtX2ZpbGVTaXplID0gc2l6ZTsKKyAgICBtX2ZpbGVEYXRhID0gU3BhbiB7
IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpieXRlKj4oZGF0YSksIHNpemUgfTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCB1bm1hcFZpZXdPZkZpbGUodm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6
ZSkKK2Jvb2wgdW5tYXBWaWV3T2ZGaWxlKFNwYW48c3RkOjpieXRlPiBkYXRhKQogewotICAgIHJl
dHVybiAhbXVubWFwKGJ1ZmZlciwgc2l6ZSk7CisgICAgcmV0dXJuICFtdW5tYXAoZGF0YS5kYXRh
KCksIGRhdGEuc2l6ZSgpKTsKIH0KIAogI2VuZGlmCkBAIC00MzgsNyArNDM3LDcgQEAgU3RyaW5n
IGNyZWF0ZVRlbXBvcmFyeVppcEFyY2hpdmUoY29uc3QgUwogfQogI2VuZGlmCiAKLU1hcHBlZEZp
bGVEYXRhIG1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIHNpemVfdCBieXRlc1NpemUsIEZ1
bmN0aW9uPHZvaWQoY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4m
KT4mJiBhcHBseSwgUGxhdGZvcm1GaWxlSGFuZGxlKiBvdXRwdXRIYW5kbGUpCitNYXBwZWRGaWxl
RGF0YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBzaXplX3QgYnl0ZXNTaXplLCBGdW5j
dGlvbjx2b2lkKGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mKT4m
JiBhcHBseSwgUGxhdGZvcm1GaWxlSGFuZGxlKiBvdXRwdXRIYW5kbGUpCiB7CiAgICAgY29uc3Rl
eHByIGJvb2wgZmFpbElmRmlsZUV4aXN0cyA9IHRydWU7CiAgICAgYXV0byBoYW5kbGUgPSBGaWxl
U3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWRXcml0
ZSwgRmlsZVN5c3RlbTo6RmlsZUFjY2Vzc1Blcm1pc3Npb246OlVzZXIsIGZhaWxJZkZpbGVFeGlz
dHMpOwpAQCAtNDU1LDEyICs0NTQsMTIgQEAgTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxlKGNvbnN0
IFN0cmluZyYgcAogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIHZvaWQqIG1hcCA9
IGNvbnN0X2Nhc3Q8dm9pZCo+KG1hcHBlZEZpbGUuZGF0YSgpKTsKLSAgICB1aW50OF90KiBtYXBE
YXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1hcCk7CisgICAgYXV0byBtYXAgPSBtYXBwZWRG
aWxlLmRhdGEoKS5kYXRhKCk7CisgICAgYXV0byBtYXBEYXRhID0gbWFwOwogCi0gICAgYXBwbHko
WyZtYXBEYXRhXShjb25zdCB1aW50OF90KiBjaHVuaywgc2l6ZV90IGNodW5rU2l6ZSkgewotICAg
ICAgICBtZW1jcHkobWFwRGF0YSwgY2h1bmssIGNodW5rU2l6ZSk7Ci0gICAgICAgIG1hcERhdGEg
Kz0gY2h1bmtTaXplOworICAgIGFwcGx5KFsmbWFwRGF0YV0oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+
IGNodW5rKSB7CisgICAgICAgIG1lbWNweShtYXBEYXRhLCBjaHVuay5kYXRhKCksIGNodW5rLnNp
emUoKSk7CisgICAgICAgIG1hcERhdGEgKz0gY2h1bmsuc2l6ZSgpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9KTsKIApJbmRleDogU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICsz
NCw3IEBACiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KQEAgLTIxMCw3ICsyMTEsNyBAQCBXVEZfRVhQT1JUX1BSSVZBVEUg
U3RyaW5nIHJlYWxQYXRoKGNvbnN0CiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc1NhZmVUb1Vz
ZU1lbW9yeU1hcEZvclBhdGgoY29uc3QgU3RyaW5nJik7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBtYWtlU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChjb25zdCBTdHJpbmcmKTsKIAotV1RGX0VY
UE9SVF9QUklWQVRFIGJvb2wgdW5tYXBWaWV3T2ZGaWxlKHZvaWQqIGJ1ZmZlciwgc2l6ZV90KTsK
K1dURl9FWFBPUlRfUFJJVkFURSBib29sIHVubWFwVmlld09mRmlsZShTcGFuPHN0ZDo6Ynl0ZT4p
OwogCiBjbGFzcyBNYXBwZWRGaWxlRGF0YSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CkBAIC0yMjMsMTcgKzIyNCwxNSBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5N
YXBwZWRGaWxlRGF0YSgpOwogICAgIE1hcHBlZEZpbGVEYXRhJiBvcGVyYXRvcj0oTWFwcGVkRmls
ZURhdGEmJik7CiAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
ISFtX2ZpbGVEYXRhOyB9Ci0gICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZmlsZURhdGE7IH0KLSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9maWxlU2l6
ZTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fZmls
ZURhdGEuZGF0YSgpOyB9CisgICAgU3BhbjxzdGQ6OmJ5dGU+IGRhdGEoKSBjb25zdCB7IHJldHVy
biBtX2ZpbGVEYXRhOyB9CiAKLSAgICB2b2lkKiBsZWFrSGFuZGxlKCkgeyByZXR1cm4gc3RkOjpl
eGNoYW5nZShtX2ZpbGVEYXRhLCBudWxscHRyKTsgfQorICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBT
cGFuPHN0ZDo6Ynl0ZT4gbGVha0hhbmRsZSgpIHsgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9maWxl
RGF0YSwgeyB9KTsgfQogCiBwcml2YXRlOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIG1h
cEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBGaWxlT3Blbk1vZGUsIE1hcHBlZEZpbGVN
b2RlKTsKIAotICAgIHZvaWQqIG1fZmlsZURhdGEgeyBudWxscHRyIH07Ci0gICAgdW5zaWduZWQg
bV9maWxlU2l6ZSB7IDAgfTsKKyAgICBTcGFuPHN0ZDo6Ynl0ZT4gbV9maWxlRGF0YTsKIH07CiAK
IGlubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGxhdGZvcm1GaWxlSGFuZGxl
IGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUgbWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKQEAgLTI0Nywy
MSArMjQ2LDE5IEBAIGlubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGwKIH0K
IAogaW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShNYXBwZWRGaWxlRGF0YSYm
IG90aGVyKQotICAgIDogbV9maWxlRGF0YShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEs
IG51bGxwdHIpKQotICAgICwgbV9maWxlU2l6ZShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZVNp
emUsIDApKQorICAgIDogbV9maWxlRGF0YShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEs
IHsgfSkpCiB7CiB9CiAKIGlubGluZSBNYXBwZWRGaWxlRGF0YSYgTWFwcGVkRmlsZURhdGE6Om9w
ZXJhdG9yPShNYXBwZWRGaWxlRGF0YSYmIG90aGVyKQogewotICAgIG1fZmlsZURhdGEgPSBzdGQ6
OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEsIG51bGxwdHIpOwotICAgIG1fZmlsZVNpemUgPSBz
dGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZVNpemUsIDApOworICAgIG1fZmlsZURhdGEgPSBzdGQ6
OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEsIHsgfSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQog
CiAvLyBUaGlzIGNyZWF0ZXMgdGhlIGRlc3RpbmF0aW9uIGZpbGUsIG1hcHMgaXQsIHdyaXRlIHRo
ZSBwcm92aWRlZCBkYXRhIHRvIGl0IGFuZCByZXR1cm5zIHRoZSBtYXBwZWQgZmlsZS4KIC8vIFRo
aXMgZnVuY3Rpb24gZmFpbHMgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIGZpbGUgYXQgdGhlIGRlc3Rp
bmF0aW9uIHBhdGguCi1XVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVuY3Rpb248dm9pZChjb25z
dCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYpPiYmIGFwcGx5LCBQbGF0
Zm9ybUZpbGVIYW5kbGUqID0gbnVsbHB0cik7CitXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmls
ZURhdGEgbWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVu
Y3Rpb248dm9pZChjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+Jik+
JiYgYXBwbHksIFBsYXRmb3JtRmlsZUhhbmRsZSogPSBudWxscHRyKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgRmlsZVN5c3RlbUltcGwKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93
dGYvU0hBMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU0hBMS5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL1NIQTEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NiwxMCArNDYsMTAgQEAgU0hBMTo6U0hBMSgpCiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNM
QVJBVElPTlNfRU5ECiB9CiAKLXZvaWQgU0hBMTo6YWRkQnl0ZXMoY29uc3QgdWludDhfdCogaW5w
dXQsIHNpemVfdCBsZW5ndGgpCit2b2lkIFNIQTE6OmFkZEJ5dGVzKFNwYW48Y29uc3Qgc3RkOjpi
eXRlPiBpbnB1dCkKIHsKICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgot
ICAgIENDX1NIQTFfVXBkYXRlKCZtX2NvbnRleHQsIGlucHV0LCBsZW5ndGgpOworICAgIENDX1NI
QTFfVXBkYXRlKCZtX2NvbnRleHQsIGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpKTsKICAgICBB
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIH0KIApAQCAtMTAxLDExICsxMDEsMTEg
QEAgU0hBMTo6U0hBMSgpCiAgICAgcmVzZXQoKTsKIH0KIAotdm9pZCBTSEExOjphZGRCeXRlcyhj
b25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGxlbmd0aCkKK3ZvaWQgU0hBMTo6YWRkQnl0ZXMo
U3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQogewotICAgIHdoaWxlIChsZW5ndGgtLSkgewor
ICAgIGZvciAoYXV0byBieXRlIDogaW5wdXQpIHsKICAgICAgICAgQVNTRVJUKG1fY3Vyc29yIDwg
NjQpOwotICAgICAgICBtX2J1ZmZlclttX2N1cnNvcisrXSA9ICppbnB1dCsrOworICAgICAgICBt
X2J1ZmZlclttX2N1cnNvcisrXSA9IHN0ZDo6dG9faW50ZWdlcjx1aW50OF90PihieXRlKTsKICAg
ICAgICAgKyttX3RvdGFsQnl0ZXM7CiAgICAgICAgIGlmIChtX2N1cnNvciA9PSA2NCkKICAgICAg
ICAgICAgIHByb2Nlc3NCbG9jaygpOwpJbmRleDogU291cmNlL1dURi93dGYvU0hBMS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NIQTEuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dURi93dGYvU0hBMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgPGFycmF5PgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAt
NDUsMTUgKzQ2LDExIEBAIGNsYXNzIFNIQTEgewogcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBTSEExKCk7CiAKLSAgICB2b2lkIGFkZEJ5dGVzKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
aW5wdXQpCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkQnl0ZXMoU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkZEJ5dGVzKFQmJiBk
YXRhKQogICAgIHsKLSAgICAgICAgYWRkQnl0ZXMoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkp
OworICAgICAgICByZXR1cm4gYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+
KGRhdGEpIH0pKTsKICAgICB9Ci0gICAgdm9pZCBhZGRCeXRlcyhjb25zdCBDU3RyaW5nJiBpbnB1
dCkKLSAgICB7Ci0gICAgICAgIGFkZEJ5dGVzKGlucHV0LmRhdGFBc1VJbnQ4UHRyKCksIGlucHV0
Lmxlbmd0aCgpKTsKLSAgICB9Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkQnl0ZXMo
Y29uc3QgdWludDhfdCogaW5wdXQsIHNpemVfdCBsZW5ndGgpOwogCiAgICAgLy8gU2l6ZSBvZiB0
aGUgU0hBMSBoYXNoCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBjb25zdGV4cHIgc2l6
ZV90IGhhc2hTaXplID0gMjA7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dURi93dGYvVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxMyw2ICs2MTMsNyBAQCBw
cml2YXRlOgogCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBUIFZhbHVlVHlwZTsKKyAgICB0eXBlZGVm
IFQgdmFsdWVfdHlwZTsKIAogICAgIHR5cGVkZWYgVCogaXRlcmF0b3I7CiAgICAgdHlwZWRlZiBj
b25zdCBUKiBjb25zdF9pdGVyYXRvcjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL2NmL1NwYW5DRi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL2NmL1NwYW5DRi5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XVEYvd3RmL2NmL1NwYW5DRi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPENvcmVGb3VuZGF0
aW9uL0NvcmVGb3VuZGF0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KKworbmFtZXNwYWNl
IFdURiB7CisKK2lubGluZSBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYXNCeXRlcyhDRkRhdGFSZWYg
ZGF0YSkKK3sKKyAgICByZXR1cm4geyByZWludGVycHJldF9jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+
KENGRGF0YUdldEJ5dGVQdHIoZGF0YSkpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KENGRGF0YUdldExl
bmd0aChkYXRhKSkgfTsKK30KKworfQorCit1c2luZyBXVEY6OmFzQnl0ZXM7CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9jb2NvYS9TcGFuQ29jb2EuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9jb2NvYS9TcGFuQ29jb2EuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9jb2Nv
YS9TcGFuQ29jb2EuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNp
bmNsdWRlIDx3dGYvU3Bhbi5oPgorCituYW1lc3BhY2UgV1RGIHsKKworaW5saW5lIFNwYW48Y29u
c3Qgc3RkOjpieXRlPiBhc0J5dGVzKE5TRGF0YSAqZGF0YSkKK3sKKyAgICByZXR1cm4geyByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxlbmd0aCB9
OworfQorCit9CisKK3VzaW5nIFdURjo6YXNCeXRlczsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3Bl
cnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIENvZGVyPENTdHJpbmc+OjplbmNvZGUoRW5j
b2RlciYgZW5jCiAKICAgICB1aW50MzJfdCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAg
ZW5jb2RlciA8PCBsZW5ndGg7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3Ry
aW5nLmRhdGFBc1VJbnQ4UHRyKCksIGxlbmd0aCk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoc3RyaW5nLmJ5dGVzKCkpOwogfQogCiBzdGQ6Om9wdGlvbmFsPENTdHJpbmc+IENv
ZGVyPENTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKQEAgLTc4LDcgKzc4LDcgQEAg
c3RkOjpvcHRpb25hbDxDU3RyaW5nPiBDb2RlcjxDU3RyaW5nPjo6ZAogCiAgICAgY2hhciogYnVm
ZmVyOwogICAgIENTdHJpbmcgc3RyaW5nID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZCgqbGVu
Z3RoLCBidWZmZXIpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgKmxlbmd0aCkpCisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgcmVpbnRlcnByZXRfY2FzdDxzdGQ6OmJ5
dGUqPihidWZmZXIpLCAqbGVuZ3RoIH0pKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owog
CiAgICAgcmV0dXJuIHN0cmluZzsKQEAgLTk2LDExICs5Niw3IEBAIHZvaWQgQ29kZXI8U3RyaW5n
Pjo6ZW5jb2RlKEVuY29kZXImIGVuY28KICAgICBib29sIGlzOEJpdCA9IHN0cmluZy5pczhCaXQo
KTsKIAogICAgIGVuY29kZXIgPDwgbGVuZ3RoIDw8IGlzOEJpdDsKLQotICAgIGlmIChpczhCaXQp
Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0cmluZy5jaGFyYWN0ZXJz
OCgpLCBsZW5ndGgpOwotICAgIGVsc2UKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnMx
NigpKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoc3RyaW5nLmJ5dGVzKCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KQEAgLTExMiw3ICsxMDgsNyBAQCBzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8
U3RyaW5nPiBkZWNvCiAKICAgICBDaGFyYWN0ZXJUeXBlKiBidWZmZXI7CiAgICAgU3RyaW5nIHN0
cmluZyA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihidWZmZXIpLCBsZW5ndGggKiBzaXplb2YoQ2hhcmFjdGVyVHlwZSkpKQorICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8c3Rk
OjpieXRlKj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJhY3RlclR5cGUpIH0pKQogICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIAogICAgIHJldHVybiBzdHJpbmc7CkBAIC0x
NDIsMTMgKzEzOCwxMyBAQCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gQ29kZXI8U3RyaW5nPjo6ZGVj
CiAKIHZvaWQgQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQogewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpKTsKKyAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3QpOwogfQogCiBzdGQ6Om9wdGlvbmFsPFNIQTE6OkRpZ2Vz
dD4gQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAg
U0hBMTo6RGlnZXN0IHRtcDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHRtcC5kYXRhKCksIHNpemVvZih0bXApKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKHRtcCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgcmV0dXJu
IHRtcDsKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2Rl
cnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50
Q29kZXJzLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNl
L1BlcnNpc3RlbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYg
dmVjdG9yKQogICAgIHsKICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
dmVjdG9yLnNpemUoKSk7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6
ZSgpICogc2l6ZW9mKFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEo
dmVjdG9yKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5Pj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCkBAIC0xNzMsNyArMTcz
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAgICAgICBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IHRlbXA7CiAgICAgICAgIHRlbXAuZ3JvdyhzaXplKTsK
IAotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KHRlbXAuZGF0YSgpKSwgc2l6ZSAqIHNpemVvZihUKSkpCisgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEodGVtcCkpCiAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgICAgIHJldHVybiB0ZW1wOwpJbmRleDogU291cmNl
L1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmNwcAkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29k
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyMyArMzEsMjEgQEAKIG5hbWVzcGFjZSBXVEYg
ewogbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAotRGVjb2Rlcjo6RGVjb2Rlcihjb25zdCB1aW50
OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKQotICAgIDogbV9idWZmZXIoYnVmZmVyKQot
ICAgICwgbV9idWZmZXJQb3NpdGlvbihidWZmZXIpCi0gICAgLCBtX2J1ZmZlckVuZChidWZmZXIg
KyBidWZmZXJTaXplKQorRGVjb2Rlcjo6RGVjb2RlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnVm
ZmVyKQorICAgIDogbV9idWZmZXIoYnVmZmVyLmRhdGEoKSkKKyAgICAsIG1fYnVmZmVyUG9zaXRp
b24oYnVmZmVyLmRhdGEoKSkKKyAgICAsIG1fYnVmZmVyRW5kKGJ1ZmZlci5kYXRhKCkgKyBidWZm
ZXIuc2l6ZSgpKQogewogfQogCi1EZWNvZGVyOjp+RGVjb2RlcigpCi17Ci19CitEZWNvZGVyOjp+
RGVjb2RlcigpID0gZGVmYXVsdDsKIAogYm9vbCBEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdo
VG9Db250YWluKHNpemVfdCBzaXplKSBjb25zdAogewogICAgIHJldHVybiBzaXplIDw9IHN0YXRp
Y19jYXN0PHNpemVfdD4obV9idWZmZXJFbmQgLSBtX2J1ZmZlclBvc2l0aW9uKTsKIH0KIAotY29u
c3QgdWludDhfdCogRGVjb2Rlcjo6YnVmZmVyUG9pbnRlckZvckRpcmVjdFJlYWQoc2l6ZV90IHNp
emUpCitjb25zdCBzdGQ6OmJ5dGUqIERlY29kZXI6OmJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFk
KHNpemVfdCBzaXplKQogewogICAgIGlmICghYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihz
aXplKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC01NSwxNiArNTMsMTYgQEAgY29uc3Qg
dWludDhfdCogRGVjb2Rlcjo6YnVmZmVyUG9pbnRlckZvcgogICAgIGF1dG8gZGF0YSA9IG1fYnVm
ZmVyUG9zaXRpb247CiAgICAgbV9idWZmZXJQb3NpdGlvbiArPSBzaXplOwogCi0gICAgRW5jb2Rl
cjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgZGF0YSwgc2l6ZSk7CisgICAgRW5jb2Rl
cjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgU3BhbiB7IGRhdGEsIHNpemUgfSk7CiAg
ICAgcmV0dXJuIGRhdGE7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQorYm9vbCBEZWNvZGVyOjpkZWNvZGVGaXhlZExl
bmd0aERhdGEoU3BhbjxzdGQ6OmJ5dGU+IGRhdGEpCiB7Ci0gICAgYXV0byBidWZmZXIgPSBidWZm
ZXJQb2ludGVyRm9yRGlyZWN0UmVhZChzaXplKTsKKyAgICBhdXRvIGJ1ZmZlciA9IGJ1ZmZlclBv
aW50ZXJGb3JEaXJlY3RSZWFkKGRhdGEuc2l6ZSgpKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIG1lbWNweShkYXRhLCBidWZmZXIsIHNpemUpOworICAgIG1l
bWNweShkYXRhLmRhdGEoKSwgYnVmZmVyLCBkYXRhLnNpemUoKSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTEzOSw3ICsxMzcsNyBAQCBib29sIERlY29kZXI6OnZlcmlmeUNoZWNrc3VtKCkK
ICAgICBtX3NoYTEuY29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2Vz
dCBzYXZlZEhhc2g7Ci0gICAgaWYgKCFkZWNvZGVGaXhlZExlbmd0aERhdGEoc2F2ZWRIYXNoLmRh
dGEoKSwgc2l6ZW9mKHNhdmVkSGFzaCkpKQorICAgIGlmICghZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHNhdmVkSGFzaCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBjb21wdXRl
ZEhhc2ggPT0gc2F2ZWRIYXNoOwpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVy
c2lzdGVudERlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5j
ZS9QZXJzaXN0ZW50RGVjb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0
Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw3IEBACiAKICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9T
SEExLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2Uv
UGVyc2lzdGVudENvZGVyLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMzUsNyArMzYsMTIgQEAg
bmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIGNsYXNzIERlY29kZXIgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyKGNv
bnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IERlY29kZXIoVCYmIGRhdGEpCisgICAgICAgIDogRGVjb2RlciB7IGFzQnl0ZXMo
U3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihkYXRhKSB9KSB9CisgICAgeworICAgIH0KKworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIH5EZWNvZGVyKCk7CiAKICAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3Qg
eyByZXR1cm4gbV9idWZmZXJFbmQgLSBtX2J1ZmZlcjsgfQpAQCAtNDMsNyArNDksMTEgQEAgcHVi
bGljOgogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIHZl
cmlmeUNoZWNrc3VtKCk7CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgV0FSTl9VTlVTRURfUkVU
VVJOIGJvb2wgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqLCBzaXplX3QpOworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVGaXhlZExlbmd0
aERhdGEoU3BhbjxzdGQ6OmJ5dGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIGRl
Y29kZUZpeGVkTGVuZ3RoRGF0YShUJiYgZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNv
ZGVGaXhlZExlbmd0aERhdGEoYXNXcml0YWJsZUJ5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4o
ZGF0YSkgfSkpOworICAgIH0KIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVy
YXRvcj4+KHN0ZDo6b3B0aW9uYWw8Ym9vbD4mKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVj
b2RlciYgb3BlcmF0b3I+PihzdGQ6Om9wdGlvbmFsPHVpbnQ4X3Q+Jik7CkBAIC04NCw3ICs5NCw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG51bUVsZW1lbnRzIDw9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8c2l6ZV90Pjo6bWF4KCkgLyBzaXplb2YoVCkgJiYgYnVmZmVySXNMYXJnZUVub3VnaFRv
Q29udGFpbihudW1FbGVtZW50cyAqIHNpemVvZihUKSk7CiAgICAgfQogCi0gICAgV1RGX0VYUE9S
VF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBjb25zdCB1aW50OF90KiBidWZmZXJQb2ludGVy
Rm9yRGlyZWN0UmVhZChzaXplX3QgbnVtQnl0ZXMpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBX
QVJOX1VOVVNFRF9SRVRVUk4gY29uc3Qgc3RkOjpieXRlKiBidWZmZXJQb2ludGVyRm9yRGlyZWN0
UmVhZChzaXplX3QgbnVtQnl0ZXMpOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSVBD
RGVjb2RlciA9IGZhbHNlOwogCkBAIC05Miw5ICsxMDIsOSBAQCBwcml2YXRlOgogICAgIFdURl9F
WFBPUlRfUFJJVkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBidWZmZXJJc0xhcmdlRW5vdWdo
VG9Db250YWluKHNpemVfdCkgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4gRGVj
b2RlciYgZGVjb2RlTnVtYmVyKHN0ZDo6b3B0aW9uYWw8VHlwZT4mKTsKIAotICAgIGNvbnN0IHVp
bnQ4X3QqIG1fYnVmZmVyOwotICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyUG9zaXRpb247Ci0g
ICAgY29uc3QgdWludDhfdCogbV9idWZmZXJFbmQ7CisgICAgY29uc3Qgc3RkOjpieXRlKiBtX2J1
ZmZlcjsKKyAgICBjb25zdCBzdGQ6OmJ5dGUqIG1fYnVmZmVyUG9zaXRpb247CisgICAgY29uc3Qg
c3RkOjpieXRlKiBtX2J1ZmZlckVuZDsKIAogICAgIFNIQTEgbV9zaGExOwogfTsKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRF
bmNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMzQgKzMxLDM0IEBACiBuYW1lc3BhY2Ug
V1RGIHsKIG5hbWVzcGFjZSBQZXJzaXN0ZW5jZSB7CiAKLUVuY29kZXI6OkVuY29kZXIoKQotewot
fQotCi1FbmNvZGVyOjp+RW5jb2RlcigpCi17Ci19CitFbmNvZGVyOjpFbmNvZGVyKCkgPSBkZWZh
dWx0OworRW5jb2Rlcjo6fkVuY29kZXIoKSA9IGRlZmF1bHQ7CiAKLXVpbnQ4X3QqIEVuY29kZXI6
Omdyb3coc2l6ZV90IHNpemUpCitzdGQ6OmJ5dGUqIEVuY29kZXI6Omdyb3coc2l6ZV90IHNpemUp
CiB7CiAgICAgc2l6ZV90IG5ld1Bvc2l0aW9uID0gbV9idWZmZXIuc2l6ZSgpOwogICAgIG1fYnVm
ZmVyLmdyb3cobV9idWZmZXIuc2l6ZSgpICsgc2l6ZSk7CiAgICAgcmV0dXJuIG1fYnVmZmVyLmRh
dGEoKSArIG5ld1Bvc2l0aW9uOwogfQogCi12b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9y
RGF0YShTSEExJiBzaGExLCBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3ZvaWQg
RW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmIHNoYTEsIFNwYW48Y29uc3QgdWlu
dDhfdD4gZGF0YSkKK3sKKyAgICByZXR1cm4gdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKHNoYTEsIGFz
Qnl0ZXMoZGF0YSkpOworfQorCit2b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yRGF0YShT
SEExJiBzaGExLCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKICAgICBhdXRvIHR5cGVT
YWx0ID0gU2FsdDx1aW50OF90Kj46OnZhbHVlOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7Ci0gICAgc2hh
MS5hZGRCeXRlcyhkYXRhLCBzaXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmdHlwZVNh
bHQsIDEgfSk7CisgICAgc2hhMS5hZGRCeXRlcyhkYXRhKTsKIH0KIAotdm9pZCBFbmNvZGVyOjpl
bmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCit2
b2lkIEVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
ZGF0YSkKIHsKLSAgICB1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhLCBzaXplKTsK
KyAgICB1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhKTsKIAotICAgIHVpbnQ4X3Qq
IGJ1ZmZlciA9IGdyb3coc2l6ZSk7Ci0gICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7Cisg
ICAgYXV0byogYnVmZmVyID0gZ3JvdyhkYXRhLnNpemUoKSk7CisgICAgbWVtY3B5KGJ1ZmZlciwg
ZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4K
QEAgLTY2LDcgKzY2LDcgQEAgRW5jb2RlciYgRW5jb2Rlcjo6ZW5jb2RlTnVtYmVyKFR5cGUgdmFs
dQogewogICAgIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKG1fc2hhMSwgdmFsdWUp
OwogCi0gICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhzaXplb2YoVHlwZSkpOworICAgIGF1dG8q
IGJ1ZmZlciA9IGdyb3coc2l6ZW9mKFR5cGUpKTsKICAgICBtZW1jcHkoYnVmZmVyLCAmdmFsdWUs
IHNpemVvZihUeXBlKSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQpAQCAtMTI1LDcgKzEyNSw3IEBA
IHZvaWQgRW5jb2Rlcjo6ZW5jb2RlQ2hlY2tzdW0oKQogewogICAgIFNIQTE6OkRpZ2VzdCBoYXNo
OwogICAgIG1fc2hhMS5jb21wdXRlSGFzaChoYXNoKTsKLSAgICBlbmNvZGVGaXhlZExlbmd0aERh
dGEoaGFzaC5kYXRhKCksIGhhc2guc2l6ZSgpKTsKKyAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEo
aGFzaCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3Rl
bnRFbmNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVy
c2lzdGVudEVuY29kZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvcGVy
c2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcs
NyBAQAogCiAjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvU0hBMS5o
PgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1
ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaD4KIApAQCAtNDMsNyArNDQsMTEg
QEAgcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSB+RW5jb2RlcigpOwogCiAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlQ2hlY2tzdW0oKTsKLSAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCosIHNpemVfdCk7
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48
Y29uc3Qgc3RkOjpieXRlPik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBlbmNvZGVG
aXhlZExlbmd0aERhdGEoVCYmIGRhdGEpCisgICAgeworICAgICAgICBlbmNvZGVGaXhlZExlbmd0
aERhdGEoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KGFzQnl0ZXMoU3BhbihzdGQ6OmZvcndhcmQ8VD4o
ZGF0YSkpKSkpOworICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxl
X2lmX3Q8c3RkOjppc19lbnVtPFQ+Ojp2YWx1ZT4qID0gbnVsbHB0cj4KICAgICBFbmNvZGVyJiBv
cGVyYXRvcjw8KGNvbnN0IFQmIHQpCkBAIC03MCwyMyArNzUsMjIgQEAgcHVibGljOgogICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBFbmNvZGVyJiBvcGVyYXRvcjw8KGZsb2F0KTsKICAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgRW5jb2RlciYgb3BlcmF0b3I8PChkb3VibGUpOwogCi0gICAgY29uc3QgdWlu
dDhfdCogYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuZGF0YSgpOyB9Ci0gICAgc2l6
ZV90IGJ1ZmZlclNpemUoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5zaXplKCk7IH0KLQotICAg
IFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZvckRhdGEoU0hB
MSYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOworICAgIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBi
dWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlcjsgfQorICAgIAorICAgIFdURl9FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZvckRhdGEoU0hBMSYsIFNwYW48Y29u
c3QgdWludDhfdD4pOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB1cGRhdGVD
aGVja3N1bUZvckRhdGEoU0hBMSYsIFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFR5cGU+IHN0YXRpYyB2b2lkIHVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKFNI
QTEmLCBUeXBlKTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lQQ0VuY29kZXIgPSBm
YWxzZTsKIAogcHJpdmF0ZToKLQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+IEVuY29kZXIm
IGVuY29kZU51bWJlcihUeXBlKTsKIAotICAgIHVpbnQ4X3QqIGdyb3coc2l6ZV90KTsKKyAgICBz
dGQ6OmJ5dGUqIGdyb3coc2l6ZV90KTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPiBz
dHJ1Y3QgU2FsdDsKIAotICAgIFZlY3Rvcjx1aW50OF90LCA0MDk2PiBtX2J1ZmZlcjsKKyAgICBW
ZWN0b3I8c3RkOjpieXRlLCA0MDk2PiBtX2J1ZmZlcjsKICAgICBTSEExIG1fc2hhMTsKIH07CiAK
QEAgLTEwNiw4ICsxMTAsOCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4KIHZvaWQgRW5jb2Rl
cjo6dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIoU0hBMSYgc2hhMSwgVHlwZSB2YWx1ZSkKIHsKICAg
ICBhdXRvIHR5cGVTYWx0ID0gU2FsdDxUeXBlPjo6dmFsdWU7Ci0gICAgc2hhMS5hZGRCeXRlcyhy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdHlwZVNhbHQpLCBzaXplb2YodHlwZVNhbHQpKTsK
LSAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2YWx1ZSksIHNp
emVvZih2YWx1ZSkpOworICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZ0eXBlU2FsdCwgMSB9KTsK
KyAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmdmFsdWUsIDEgfSk7CiB9CiAKIH0KSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi90ZXh0L0Jhc2U2NC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3Rl
eHQvQmFzZTY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDM5ICsxNDAsMzkgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIAogICAgICAgICBkZXN0aW5hdGlvbkRh
dGFCdWZmZXJbZGlkeCsrXSA9ICc9JzsKIH0KIAotc3RhdGljIFZlY3Rvcjx1aW50OF90PiBiYXNl
NjRFbmNvZGVJbnRlcm5hbChjb25zdCB1aW50OF90KiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVk
IGlucHV0TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAg
bWFwKQorc3RhdGljIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVJbnRlcm5hbChTcGFuPGNv
bnN0IHN0ZDo6Ynl0ZT4gaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVu
Y29kZU1hcCBtYXApCiB7Ci0gICAgYXV0byBkZXN0aW5hdGlvbkxlbmd0aCA9IGNhbGN1bGF0ZUJh
c2U2NEVuY29kZWRTaXplKGlucHV0TGVuZ3RoLCBwb2xpY3kpOworICAgIGF1dG8gZGVzdGluYXRp
b25MZW5ndGggPSBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShpbnB1dC5zaXplKCksIHBvbGlj
eSk7CiAgICAgaWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkKICAgICAgICAgcmV0dXJuIHsgfTsKIAog
ICAgIFZlY3Rvcjx1aW50OF90PiBkZXN0aW5hdGlvblZlY3RvcihkZXN0aW5hdGlvbkxlbmd0aCk7
Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoaW5wdXREYXRhQnVmZmVyLCBpbnB1dExlbmd0aCwg
ZGVzdGluYXRpb25WZWN0b3IuZGF0YSgpLCBkZXN0aW5hdGlvbkxlbmd0aCwgcG9saWN5LCBtYXAp
OworICAgIGJhc2U2NEVuY29kZUludGVybmFsKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGlucHV0LmRhdGEoKSksIGlucHV0LnNpemUoKSwgZGVzdGluYXRpb25WZWN0b3IuZGF0YSgp
LCBkZXN0aW5hdGlvbkxlbmd0aCwgcG9saWN5LCBtYXApOwogICAgIHJldHVybiBkZXN0aW5hdGlv
blZlY3RvcjsKIH0KIAotdm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCogaW5wdXREYXRhQnVm
ZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgVUNoYXIqIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwg
dW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJh
c2U2NEVuY29kZU1hcCBtYXApCit2b2lkIGJhc2U2NEVuY29kZShTcGFuPGNvbnN0IHN0ZDo6Ynl0
ZT4gaW5wdXQsIFVDaGFyKiBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0
aW9uTGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFw
KQogewogICAgIGlmICghZGVzdGluYXRpb25MZW5ndGgpCiAgICAgICAgIHJldHVybjsKLSAgICBi
YXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXREYXRh
QnVmZmVyKSwgaW5wdXRMZW5ndGgsIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgZGVzdGluYXRpb25M
ZW5ndGgsIHBvbGljeSwgbWFwKTsKKyAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCksIGRlc3Rp
bmF0aW9uRGF0YUJ1ZmZlciwgZGVzdGluYXRpb25MZW5ndGgsIHBvbGljeSwgbWFwKTsKIH0KIAot
dm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBp
bnB1dExlbmd0aCwgTENoYXIqIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgdW5zaWduZWQgZGVzdGlu
YXRpb25MZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBt
YXApCit2b2lkIGJhc2U2NEVuY29kZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQsIExDaGFy
KiBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uTGVuZ3RoLCBCYXNl
NjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewogICAgIGlmICgh
ZGVzdGluYXRpb25MZW5ndGgpCiAgICAgICAgIHJldHVybjsKLSAgICBiYXNlNjRFbmNvZGVJbnRl
cm5hbChzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXREYXRhQnVmZmVyKSwgaW5wdXRM
ZW5ndGgsIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgZGVzdGluYXRpb25MZW5ndGgsIHBvbGljeSwg
bWFwKTsKKyAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCksIGRlc3RpbmF0aW9uRGF0YUJ1ZmZl
ciwgZGVzdGluYXRpb25MZW5ndGgsIHBvbGljeSwgbWFwKTsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+
IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWdu
ZWQgaW5wdXRMZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1h
cCBtYXApCitWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+IGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVN
YXAgbWFwKQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxj
b25zdCB1aW50OF90Kj4oaW5wdXREYXRhQnVmZmVyKSwgaW5wdXRMZW5ndGgsIHBvbGljeSwgbWFw
KTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoaW5wdXQsIHBvbGljeSwgbWFwKTsK
IH0KIAotU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1
ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJh
c2U2NEVuY29kZU1hcCBtYXApCitTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoU3Bhbjxjb25z
dCBzdGQ6OmJ5dGU+IGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNv
ZGVNYXAgbWFwKQogewotICAgIHJldHVybiBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoaW5wdXRE
YXRhQnVmZmVyLCBpbnB1dExlbmd0aCwgcG9saWN5LCBtYXApKTsKKyAgICByZXR1cm4gbWFrZVN0
cmluZyhiYXNlNjRFbmNvZGVkKGlucHV0LCBwb2xpY3ksIG1hcCkpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERl
Y29kZUludGVybmFsKGNvbnN0IFQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5n
dGgsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRpb25zLCBCYXNlNjREZWNvZGVN
YXAgbWFwKQpAQCAtMjU0LDg0ICsyNTQsMjcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGlj
IHN0ZDo6b3B0aW9uYQogICAgIHJldHVybiBkZXN0aW5hdGlvbjsKIH0KIAotc3RkOjpvcHRpb25h
bDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBTdHJpbmcmIGlucHV0LCBPcHRp
b25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkK
LXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBpbnB1dC5sZW5ndGgoKTsKLSAgICBpZiAoIWxlbmd0
aCB8fCBpbnB1dC5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFs
KGlucHV0LmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKLSAgICByZXR1cm4g
YmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczE2KCksIGxlbmd0aCwgb3B0aW9u
cywgbWFwKTsKLX0KLQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29k
ZShTdHJpbmdWaWV3IGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9u
cywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKLXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBpbnB1dC5s
ZW5ndGgoKTsKLSAgICBpZiAoIWxlbmd0aCB8fCBpbnB1dC5pczhCaXQoKSkKLSAgICAgICAgcmV0
dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgb3B0
aW9ucywgbWFwKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFj
dGVyczE2KCksIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKLX0KLQotc3RkOjpvcHRpb25hbDxWZWN0
b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0LCBP
cHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1h
cCkKLXsKLSAgICBpZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHJldHVybiBiYXNl
NjREZWNvZGVJbnRlcm5hbChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgb3B0aW9ucywgbWFw
KTsKLX0KLQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25z
dCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0
aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+
PiBiYXNlNjREZWNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0LCBPcHRpb25TZXQ8QmFz
ZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKICAgICBp
ZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQog
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRl
cm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1
dC5zaXplKCksIG9wdGlvbnMsIG1hcCk7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgdWludDhfdCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCBP
cHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1h
cCkKLXsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoZGF0YSwgbGVuZ3RoLCBvcHRp
b25zLCBtYXApOwotfQotCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVj
b2RlKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgT3B0aW9uU2V0PEJhc2U2NERl
Y29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgcmV0dXJu
IGJhc2U2NERlY29kZUludGVybmFsKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihkYXRh
KSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOwotfQotCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50
OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFN0cmluZyYgaW5wdXQpCitzdGQ6Om9wdGlvbmFs
PFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IFN0cmluZyYgaW5wdXQsIE9wdGlv
blNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRpb25zLCBCYXNlNjREZWNvZGVNYXAgbWFwKQog
ewogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgpOwogICAgIGlmICghbGVuZ3Ro
IHx8IGlucHV0LmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwo
aW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsK
LSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczE2KCksIGxl
bmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CisgICAgICAgIHJldHVybiBiYXNlNjRE
ZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7
CisgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnMxNigpLCBs
ZW5ndGgsIG9wdGlvbnMsIG1hcCk7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+
PiBiYXNlNjRVUkxEZWNvZGUoU3RyaW5nVmlldyBpbnB1dCkKK3N0ZDo6b3B0aW9uYWw8VmVjdG9y
PHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3RyaW5nVmlldyBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2
NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7CiAgICAgdW5z
aWduZWQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7CiAgICAgaWYgKCFsZW5ndGggfHwgaW5wdXQu
aXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFy
YWN0ZXJzOCgpLCBsZW5ndGgsIHsgfSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOwotICAgIHJldHVy
biBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCB7IH0s
IEJhc2U2NERlY29kZU1hcDo6VVJMKTsKLX0KLQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQotewotICAg
IGlmIChpbnB1dC5zaXplKCkgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkp
Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUlu
dGVybmFsKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6
VVJMKTsKLX0KLQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29k
ZShjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0KQotewotICAgIGlmIChpbnB1dC5zaXplKCkgPiBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCi0gICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KGlucHV0LmRhdGEoKSksIGlucHV0LnNpemUoKSwgeyB9LCBCYXNl
NjREZWNvZGVNYXA6OlVSTCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjRVUkxEZWNvZGUoY29uc3QgdWludDhfdCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQotewot
ICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChkYXRhLCBsZW5ndGgsIHsgfSwgQmFzZTY0
RGVjb2RlTWFwOjpVUkwpOwotfQotCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFz
ZTY0VVJMRGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBy
ZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oZGF0YSksIGxlbmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CisgICAgICAgIHJl
dHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG9w
dGlvbnMsIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJh
Y3RlcnMxNigpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdU
RgpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RG
L3d0Zi90ZXh0L0Jhc2U2NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKyNpbmNs
dWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTU2LDU0ICs1NywzNSBAQCBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heGltdW1CYXNlNjRMCiAvLyBSYXRoZXIgdGhhbiBi
ZWluZyBwZXJmZWN0bHkgcHJlY2lzZSwgdGhpcyBpcyBhIGJpdCBjb25zZXJ2YXRpdmUuCiBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIG1heGltdW1CYXNlNjRFbmNvZGVySW5wdXRCdWZmZXJTaXpl
ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC8gNzcgKiA3NiAvIDQgKiAz
IC0gMjsKIAotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQq
LCB1bnNpZ25lZCwgVUNoYXIqLCB1bnNpZ25lZCwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0
RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5j
b2RlTWFwOjpEZWZhdWx0KTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShj
b25zdCB2b2lkKiwgdW5zaWduZWQsIExDaGFyKiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGlj
eSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9
IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNl
NjRFbmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+LCBVQ2hhciogZGVzdGluYXRpb25CdWZmZXIs
IHVuc2lnbmVkIGRlc3RpbmF0aW9uQnVmZmVyU2l6ZSwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFz
ZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0
RW5jb2RlTWFwOjpEZWZhdWx0KTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29k
ZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4sIExDaGFyKiBkZXN0aW5hdGlvbkJ1ZmZlciwgdW5zaWdu
ZWQgZGVzdGluYXRpb25CdWZmZXJTaXplLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNv
ZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVN
YXA6OkRlZmF1bHQpOwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2
NEVuY29kZVRvVmVjdG9yKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgQmFzZTY0RW5jb2RlUG9saWN5
ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0g
QmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKLVZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVU
b1ZlY3Rvcihjb25zdCBWZWN0b3I8dWludDhfdD4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNl
NjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRF
bmNvZGVNYXA6OkRlZmF1bHQpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9y
KGNvbnN0IFZlY3RvcjxjaGFyPiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBv
bGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6
RGVmYXVsdCk7Ci1WZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgQ1N0
cmluZyYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNl
cnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci0KLVdU
Rl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3Qgdm9pZCos
IHVuc2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90
SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwot
U3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIEJhc2U2
NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2
NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci1TdHJpbmcgYmFzZTY0RW5j
b2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPGNoYXI+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFz
ZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0
RW5jb2RlTWFwOjpEZWZhdWx0KTsKLVN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdCBD
U3RyaW5nJiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdElu
c2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKK1dU
Rl9FWFBPUlRfUFJJVkFURSBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoU3Bh
bjxjb25zdCBzdGQ6OmJ5dGU+LCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xp
Y3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRl
ZmF1bHQpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29k
ZVRvVmVjdG9yKFQmJiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpE
b05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0
KTsKIAorV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFu
PGNvbnN0IHN0ZDo6Ynl0ZT4sIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGlj
eTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVm
YXVsdCk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmco
VCYmLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0
TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOworCitXVEZf
RVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29k
ZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4sIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9
IHsgfSwgQmFzZTY0RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKIFdURl9F
WFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2Rl
KGNvbnN0IFN0cmluZyYsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFz
ZTY0RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKIFdURl9FWFBPUlRfUFJJ
VkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKFN0cmluZ1Zp
ZXcsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFw
ID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9w
dGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFw
ID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9w
dGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYs
IE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFwID0g
QmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlv
bmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IHVpbnQ4X3QqLCB1bnNpZ25l
ZCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAg
PSBCYXNlNjREZWNvZGVNYXA6OkRlZmF1bHQpOwotV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0
aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgY2hhciosIHVuc2lnbmVk
LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9
IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7Ci0KLWlubGluZSBWZWN0b3I8dWludDhfdD4gYmFz
ZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCwgQmFzZTY0RW5j
b2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKLXsKLSAgICByZXR1cm4gYmFz
ZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSwgbWFw
KTsKLX0KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2Ft
ZV92PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJp
bmc+ICYmICFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3ZlX3Jl
ZmVyZW5jZV90PFQ+PiwgU3RyaW5nVmlldz4+KiA9IG51bGxwdHI+CitzdGQ6Om9wdGlvbmFsPFZl
Y3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKFQmJiwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9w
dGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRlZmF1bHQp
OwogCi1pbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IFZl
Y3RvcjxjaGFyPiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29k
ZU1hcCBtYXApCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5j
b2RlVG9WZWN0b3IoVCYmIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRF
bmNvZGVNYXAgbWFwKQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5k
YXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5LCBtYXApOworICAgIHJldHVybiBiYXNlNjRFbmNv
ZGVUb1ZlY3Rvcihhc0J5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oaW5wdXQpIH0pLCBwb2xp
Y3ksIG1hcCk7CiB9CiAKLWlubGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0
b3IoY29uc3QgQ1N0cmluZyYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2
NEVuY29kZU1hcCBtYXApCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgYmFzZTY0RW5jb2Rl
VG9TdHJpbmcoVCYmIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNv
ZGVNYXAgbWFwKQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRh
KCksIGlucHV0Lmxlbmd0aCgpLCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29k
ZVRvU3RyaW5nKGFzQnl0ZXMoU3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCkgfSksIHBvbGlj
eSwgbWFwKTsKIH0KIAotaW5saW5lIFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdCBW
ZWN0b3I8dWludDhfdD4mIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRF
bmNvZGVNYXAgbWFwKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc3RkOjplbmFibGVfaWZfdDwhc3Rk
Ojppc19zYW1lX3Y8c3RkOjpyZW1vdmVfY29uc3RfdDxzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxU
Pj4sIFN0cmluZz4gJiYgIXN0ZDo6aXNfc2FtZV92PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpy
ZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmdWaWV3Pj4qPgorc3RkOjpvcHRpb25hbDxWZWN0
b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShUJiYgaW5wdXQsIE9wdGlvblNldDxCYXNlNjREZWNv
ZGVPcHRpb25zPiBvcHRpb25zLCBCYXNlNjREZWNvZGVNYXAgbWFwKQogewotICAgIHJldHVybiBi
YXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5LCBt
YXApOwotfQotCi1pbmxpbmUgU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3Rv
cjxjaGFyPiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1h
cCBtYXApCi17Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LmRhdGEoKSwg
aW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7Ci19Ci0KLWlubGluZSBTdHJpbmcgYmFzZTY0RW5j
b2RlVG9TdHJpbmcoY29uc3QgQ1N0cmluZyYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xp
Y3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCi17Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3Ry
aW5nKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIHBvbGljeSwgbWFwKTsKKyAgICByZXR1
cm4gYmFzZTY0RGVjb2RlKGFzQnl0ZXMoU3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCkgfSks
IG9wdGlvbnMsIG1hcCk7CiB9CiAKIApAQCAtMTEyLDYxICs5NCw1NyBAQCBpbmxpbmUgU3RyaW5n
IGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0CiAvLyBUaGlzIGZvcm1hdCB1c2VzICctJyBhbmQg
J18nIGluc3RlYWQgb2YgJysnIGFuZCAnLycgcmVzcGVjdGl2ZWx5LgogLy8gPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KIAotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVj
dG9yKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCk7Ci1WZWN0b3I8dWludDhfdD4gYmFzZTY0VVJMRW5j
b2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik7Ci1WZWN0b3I8dWludDhfdD4gYmFz
ZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPGNoYXI+Jik7Ci1WZWN0b3I8dWludDhf
dD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgQ1N0cmluZyYpOworVmVjdG9yPHVpbnQ4
X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3Io
VCYmKTsKIAotU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqLCB1bnNp
Z25lZCk7Ci1TdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+Jik7Ci1TdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPGNoYXI+
Jik7Ci1TdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY29uc3QgQ1N0cmluZyYpOworU3Ry
aW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoVCYmKTsKIAot
V1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRV
UkxEZWNvZGUoY29uc3QgU3RyaW5nJik7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25h
bDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShTdHJpbmdWaWV3KTsKLVdURl9FWFBP
UlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2Rl
KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOwotV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0aW9u
YWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+Jik7
Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2
NFVSTERlY29kZShjb25zdCB1aW50OF90KiwgdW5zaWduZWQpOwotV1RGX0VYUE9SVF9QUklWQVRF
IHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgY2hh
ciosIHVuc2lnbmVkKTsKK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxE
ZWNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KTsKK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgU3RyaW5nJik7CitzdGQ6Om9wdGlvbmFsPFZlY3Rv
cjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFN0cmluZ1ZpZXcpOwordGVtcGxhdGU8dHlwZW5h
bWUgVCwgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lX3Y8c3RkOjpyZW1vdmVfY29uc3Rf
dDxzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxUPj4sIFN0cmluZz4gJiYgIXN0ZDo6aXNfc2FtZV92
PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmdW
aWV3Pj4qID0gbnVsbHB0cj4KK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRV
UkxEZWNvZGUoVCYmKTsKIAotaW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVU
b1ZlY3Rvcihjb25zdCB2b2lkKiBpbnB1dCwgdW5zaWduZWQgbGVuZ3RoKQoraW5saW5lIFZlY3Rv
cjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3RvcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
aW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlucHV0LCBsZW5ndGgs
IEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0
dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwg
QmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQogCi1pbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2
NFVSTEVuY29kZVRvVmVjdG9yKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoVCYm
IGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRhKCks
IGlucHV0LnNpemUoKSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6
VVJMKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3Ioc3RkOjpmb3J3YXJkPFQ+KGlu
cHV0KSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKIH0K
IAotaW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihjb25zdCBW
ZWN0b3I8Y2hhcj4mIGlucHV0KQoraW5saW5lIFN0cmluZyBiYXNlNjRVUkxFbmNvZGVUb1N0cmlu
ZyhTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29k
ZVRvVmVjdG9yKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6
OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0
cmluZyhpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJM
KTsKIH0KIAotaW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihj
b25zdCBDU3RyaW5nJiBpbnB1dCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBiYXNlNjRV
UkxFbmNvZGVUb1N0cmluZyhUJiYgaW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRv
VmVjdG9yKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIEJhc2U2NEVuY29kZVBvbGljeTo6
VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3Ry
aW5nKHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCksIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNl
NjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9T
dHJpbmcoY29uc3Qgdm9pZCogaW5wdXQsIHVuc2lnbmVkIGxlbmd0aCkKK2lubGluZSBzdGQ6Om9w
dGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFNwYW48Y29uc3Qgc3RkOjpi
eXRlPiBpbnB1dCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5wdXQsIGxl
bmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKKyAg
ICByZXR1cm4gYmFzZTY0RGVjb2RlKGlucHV0LCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsK
IH0KIAotaW5saW5lIFN0cmluZyBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhjb25zdCBWZWN0b3I8
dWludDhfdD4mIGlucHV0KQoraW5saW5lIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjRVUkxEZWNvZGUoY29uc3QgU3RyaW5nJiBpbnB1dCkKIHsKLSAgICByZXR1cm4gYmFzZTY0
RW5jb2RlVG9TdHJpbmcoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29k
ZShpbnB1dCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBTdHJpbmcg
YmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCkKK2lubGlu
ZSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFN0cmluZ1Zp
ZXcgaW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LmRhdGEo
KSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFw
OjpVUkwpOworICAgIHJldHVybiBiYXNlNjREZWNvZGUoaW5wdXQsIHsgfSwgQmFzZTY0RGVjb2Rl
TWFwOjpVUkwpOwogfQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNv
bnN0IENTdHJpbmcmIGlucHV0KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc3RkOjplbmFibGVfaWZf
dDwhc3RkOjppc19zYW1lX3Y8c3RkOjpyZW1vdmVfY29uc3RfdDxzdGQ6OnJlbW92ZV9yZWZlcmVu
Y2VfdDxUPj4sIFN0cmluZz4gJiYgIXN0ZDo6aXNfc2FtZV92PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8
c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmdWaWV3Pj4qPgorc3RkOjpvcHRpb25h
bDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShUJiYgaW5wdXQpCiB7Ci0gICAgcmV0
dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIEJh
c2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJu
IGJhc2U2NFVSTERlY29kZShhc0J5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oaW5wdXQpIH0p
KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGlubGluZSBi
b29sIGlzQmFzZTY0T3JCYXNlNjRVUkxDaGFyYWN0ZXIoQ2hhcmFjdGVyVHlwZSBjKQpAQCAtMjA4
LDU3ICsxODYsMzYgQEAgaW5saW5lIHVuc2lnbmVkIGNhbGN1bGF0ZUJhc2U2NEVuY29kZWRTaQog
fQogCiBzdHJ1Y3QgQmFzZTY0U3BlY2lmaWNhdGlvbiB7Ci0gICAgY29uc3Qgdm9pZCogaW5wdXRE
YXRhOwotICAgIHVuc2lnbmVkIGlucHV0TGVuZ3RoOworICAgIFNwYW48Y29uc3Qgc3RkOjpieXRl
PiBpbnB1dERhdGE7CiAgICAgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeTsKICAgICBCYXNlNjRF
bmNvZGVNYXAgbWFwOwogfTsKIAotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5j
b2RlZChjb25zdCB2b2lkKiBpbnB1dERhdGEsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNlNjRF
bmNvZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywg
QmFzZTY0RW5jb2RlTWFwIG1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCkKLXsKLSAgICBy
ZXR1cm4geyBpbnB1dERhdGEsIGlucHV0TGVuZ3RoLCBwb2xpY3ksIG1hcCB9OwotfQotCi1pbmxp
bmUgQmFzZTY0U3BlY2lmaWNhdGlvbiBiYXNlNjRFbmNvZGVkKGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6
OkRvTm90SW5zZXJ0TEZzKQotewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEo
KSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3kpOwotfQotCi1pbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlv
biBiYXNlNjRFbmNvZGVkKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW5wdXQsIEJhc2U2NEVuY29kZVBv
bGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzKQotewotICAg
IHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3kp
OwotfQotCi1pbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlvbiBiYXNlNjRFbmNvZGVkKGNvbnN0IENT
dHJpbmcmIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0RW5jb2RlUG9s
aWN5OjpEb05vdEluc2VydExGcykKLXsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5k
YXRhKCksIGlucHV0Lmxlbmd0aCgpLCBwb2xpY3kpOwotfQotCi1pbmxpbmUgQmFzZTY0U3BlY2lm
aWNhdGlvbiBiYXNlNjRVUkxFbmNvZGVkKGNvbnN0IHZvaWQqIGlucHV0RGF0YSwgdW5zaWduZWQg
aW5wdXRMZW5ndGgpCitpbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlvbiBiYXNlNjRFbmNvZGVkKFNw
YW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9IEJh
c2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCBtYXAgPSBC
YXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5w
dXREYXRhLCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29k
ZU1hcDo6VVJMKTsKKyAgICByZXR1cm4geyBpbnB1dCwgcG9saWN5LCBtYXAgfTsKIH0KIAotaW5s
aW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIGlucHV0KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gQmFzZTY0U3BlY2lmaWNhdGlvbiBi
YXNlNjRFbmNvZGVkKFQmJiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9IEJhc2U2
NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCBtYXAgPSBCYXNl
NjRFbmNvZGVNYXA6OkRlZmF1bHQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQu
ZGF0YSgpLCBpbnB1dC5zaXplKCksIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNv
ZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoYXNCeXRlcyhTcGFuIHsgc3Rk
Ojpmb3J3YXJkPFQ+KGlucHV0KSB9KSwgcG9saWN5LCBtYXApOwogfQogCi1pbmxpbmUgQmFzZTY0
U3BlY2lmaWNhdGlvbiBiYXNlNjRVUkxFbmNvZGVkKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW5wdXQp
CitpbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlvbiBiYXNlNjRVUkxFbmNvZGVkKFNwYW48Y29uc3Qg
c3RkOjpieXRlPiBpbnB1dCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5kYXRh
KCksIGlucHV0LnNpemUoKSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1h
cDo6VVJMKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dCwgQmFzZTY0RW5jb2RlUG9s
aWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKIH0KIAotaW5saW5lIEJhc2U2NFNwZWNp
ZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChjb25zdCBDU3RyaW5nJiBpbnB1dCkKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChUJiYgaW5w
dXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5n
dGgoKSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKKyAg
ICByZXR1cm4gYmFzZTY0RW5jb2RlZChhc0J5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oaW5w
dXQpIH0pLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwog
fQogCiB0ZW1wbGF0ZTw+IGNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPEJhc2U2NFNwZWNpZmljYXRp
b24+IHsKIHB1YmxpYzoKICAgICBTdHJpbmdUeXBlQWRhcHRlcihjb25zdCBCYXNlNjRTcGVjaWZp
Y2F0aW9uJiBiYXNlNjQpCiAgICAgICAgIDogbV9iYXNlNjQgeyBiYXNlNjQgfQotICAgICAgICAs
IG1fZW5jb2RlZExlbmd0aCB7IGNhbGN1bGF0ZUJhc2U2NEVuY29kZWRTaXplKGJhc2U2NC5pbnB1
dExlbmd0aCwgYmFzZTY0LnBvbGljeSkgfQorICAgICAgICAsIG1fZW5jb2RlZExlbmd0aCB7IGNh
bGN1bGF0ZUJhc2U2NEVuY29kZWRTaXplKGJhc2U2NC5pbnB1dERhdGEuc2l6ZSgpLCBiYXNlNjQu
cG9saWN5KSB9CiAgICAgewogICAgIH0KIApAQCAtMjY3LDcgKzIyNCw3IEBAIHB1YmxpYzoKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZvaWQgd3JpdGVUbyhDaGFyYWN0
ZXJUeXBlKiBkZXN0aW5hdGlvbikgY29uc3QKICAgICB7Ci0gICAgICAgIGJhc2U2NEVuY29kZSht
X2Jhc2U2NC5pbnB1dERhdGEsIG1fYmFzZTY0LmlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvbiwgbV9l
bmNvZGVkTGVuZ3RoLCBtX2Jhc2U2NC5wb2xpY3ksIG1fYmFzZTY0Lm1hcCk7CisgICAgICAgIGJh
c2U2NEVuY29kZShtX2Jhc2U2NC5pbnB1dERhdGEsIGRlc3RpbmF0aW9uLCBtX2VuY29kZWRMZW5n
dGgsIG1fYmFzZTY0LnBvbGljeSwgbV9iYXNlNjQubWFwKTsKICAgICB9CiAKIHByaXZhdGU6Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi90ZXh0L0NTdHJpbmcuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93
dGYvdGV4dC9DU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNs
dWRlIDx3dGYvSGFzaFRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAKIG5hbWVzcGFjZSBXVEYg
ewogCkBAIC0zOSw5ICs0MCwxMSBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJ
RklFUihDCiBjbGFzcyBDU3RyaW5nQnVmZmVyIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8Q1N0
cmluZ0J1ZmZlcj4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVO
VElGSUVSKENTdHJpbmdCdWZmZXIpOwogcHVibGljOgotICAgIGNvbnN0IGNoYXIqIGRhdGEoKSB7
IHJldHVybiBtdXRhYmxlRGF0YSgpOyB9CisgICAgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0IHsg
cmV0dXJuIGNvbnN0X2Nhc3Q8Q1N0cmluZ0J1ZmZlcio+KHRoaXMpLT5tdXRhYmxlRGF0YSgpOyB9
CiAgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CiAKKyAgICBT
cGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25zdCB7IHJldHVybiBhc0J5dGVzKFNwYW4g
eyBkYXRhKCksIGxlbmd0aCgpIH0pOyB9CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIENT
dHJpbmc7CiAKQEAgLTY2LDYgKzY5LDIwIEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIENTdHJpbmcgbmV3VW5pbml0aWFsaXplZChzaXplX3QgbGVuZ3RoLCBjaGFyKiYg
Y2hhcmFjdGVyQnVmZmVyKTsKICAgICBDU3RyaW5nKEhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUp
IDogbV9idWZmZXIoSGFzaFRhYmxlRGVsZXRlZFZhbHVlKSB7IH0KIAorICAgIFNwYW48Y29uc3Qg
c3RkOjpieXRlPiBieXRlcygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9idWZmZXIpCisg
ICAgICAgICAgICByZXR1cm4gbV9idWZmZXItPmJ5dGVzKCk7CisgICAgICAgIHJldHVybiB7IH07
CisgICAgfQorCisgICAgU3BhbjxzdGQ6OmJ5dGU+IG11dGFibGVCeXRlcygpCisgICAgeworICAg
ICAgICBpZiAoYXV0byBtdXRhYmxlRGF0YSA9IHRoaXMtPm11dGFibGVEYXRhKCkpCisgICAgICAg
ICAgICByZXR1cm4gYXNXcml0YWJsZUJ5dGVzKFNwYW4geyBtdXRhYmxlRGF0YSwgbV9idWZmZXIt
Pmxlbmd0aCgpIH0pOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKwogICAgIGNvbnN0IGNo
YXIqIGRhdGEoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fYnVmZmVyID8gbV9idWZm
ZXItPmRhdGEoKSA6IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1Zp
ZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgJKHdvcmtp
bmcgY29weSkKQEAgLTk0LDYgKzk0LDggQEAgcHVibGljOgogICAgIGNvbnN0IExDaGFyKiBjaGFy
YWN0ZXJzOCgpIGNvbnN0OwogICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzMTYoKSBjb25zdDsK
IAorICAgIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAgICAgYm9vbCBp
c0FsbEFTQ0lJKCkgY29uc3Q7CiAKICAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKQEAgLTQy
NCw2ICs0MjYsMTMgQEAgaW5saW5lIGNvbnN0IFVDaGFyKiBTdHJpbmdWaWV3OjpjaGFyYWN0ZQog
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBVQ2hhcio+KG1fY2hhcmFjdGVycyk7CiB9CiAK
K2lubGluZSBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gU3RyaW5nVmlldzo6Ynl0ZXMoKSBjb25zdAor
eworICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGFzQnl0ZXMoU3BhbiB7IGNoYXJh
Y3RlcnM4KCksIGxlbmd0aCgpIH0pOworICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBjaGFyYWN0
ZXJzMTYoKSwgbGVuZ3RoKCkgfSk7Cit9CisKIGlubGluZSBib29sIFN0cmluZ1ZpZXc6OmlzQWxs
QVNDSUkoKSBjb25zdAogewogICAgIGlmIChpczhCaXQoKSkKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L3RleHQvV1RGU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9XVEZT
dHJpbmcuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJp
bmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSA8c3RkYXJn
Lmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9BU0NJSUxpdGVyYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9JbnRl
Z2VyVG9TdHJpbmdDb252ZXJzaW9uLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5o
PgpAQCAtMTM0LDYgKzEzNSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsg
cmV0dXJuICFtX2ltcGwgfHwgbV9pbXBsLT5pczhCaXQoKTsgfQogCiAgICAgdW5zaWduZWQgc2l6
ZUluQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmxlbmd0aCgpICogKGlz
OEJpdCgpID8gc2l6ZW9mKExDaGFyKSA6IHNpemVvZihVQ2hhcikpIDogMDsgfQorICAgIFNwYW48
Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OwogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRF
IENTdHJpbmcgYXNjaWkoKSBjb25zdDsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgQ1N0cmluZyBs
YXRpbjEoKSBjb25zdDsKQEAgLTQ4Myw2ICs0ODUsMTYgQEAgdGVtcGxhdGU8PiBpbmxpbmUgY29u
c3QgVUNoYXIqIFN0cmluZzo6YwogICAgIHJldHVybiBjaGFyYWN0ZXJzMTYoKTsKIH0KIAoraW5s
aW5lIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBTdHJpbmc6OmJ5dGVzKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1faW1wbCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmIChtX2ltcGwtPmlzOEJp
dCgpKQorICAgICAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgbV9pbXBsLT5jaGFyYWN0ZXJzOCgp
LCBtX2ltcGwtPmxlbmd0aCgpIH0pOworICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBtX2ltcGwt
PmNoYXJhY3RlcnMxNigpLCBtX2ltcGwtPmxlbmd0aCgpIH0pOworfQorCiBpbmxpbmUgVUNoYXIg
U3RyaW5nOjpjaGFyYWN0ZXJBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKICAgICBpZiAoIW1f
aW1wbCB8fCBpbmRleCA+PSBtX2ltcGwtPmxlbmd0aCgpKQpJbmRleDogU291cmNlL1dURi93dGYv
d2luL0ZpbGVTeXN0ZW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3dpbi9G
aWxlU3lzdGVtV2luLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvd2lu
L0ZpbGVTeXN0ZW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjMsOSArMzYzLDkgQEAgU3Ry
aW5nIGNyZWF0ZVRlbXBvcmFyeURpcmVjdG9yeSgpCiAgICAgfSk7CiB9CiAKLWJvb2wgdW5tYXBW
aWV3T2ZGaWxlKHZvaWQqIGJ1ZmZlciwgc2l6ZV90KQorYm9vbCB1bm1hcFZpZXdPZkZpbGUoU3Bh
bjxzdGQ6OmJ5dGU+IGRhdGEpCiB7Ci0gICAgcmV0dXJuIFVubWFwVmlld09mRmlsZShidWZmZXIp
OworICAgIHJldHVybiBVbm1hcFZpZXdPZkZpbGUoZGF0YS5kYXRhKCkpOwogfQogCiBib29sIE1h
cHBlZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIEZp
bGVPcGVuTW9kZSBvcGVuTW9kZSwgTWFwcGVkRmlsZU1vZGUpCkBAIC0zNzQsNyArMzc0LDcgQEAg
Ym9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0ZgogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBhdXRvIHNpemUgPSBmaWxlU2l6ZShoYW5kbGUpOwotICAgIGlmICghc2l6
ZSB8fCAqc2l6ZSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgfHwgKnNpemUg
PiBzdGQ6Om51bWVyaWNfbGltaXRzPGRlY2x0eXBlKG1fZmlsZVNpemUpPjo6bWF4KCkpIHsKKyAg
ICBpZiAoIXNpemUgfHwgKnNpemUgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgp
IHx8ICpzaXplID4gc3RkOjpudW1lcmljX2xpbWl0czxkZWNsdHlwZShtX2ZpbGVEYXRhLnNpemUo
KSk+OjptYXgoKSkgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC00MDMsMTEg
KzQwMywxMiBAQCBib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmCiAgICAg
aWYgKCFtYXBwaW5nKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2ZpbGVEYXRhID0g
TWFwVmlld09mRmlsZShtYXBwaW5nLCBkZXNpcmVkQWNjZXNzLCAwLCAwLCAqc2l6ZSk7CisgICAg
YXV0byBkYXRhID0gTWFwVmlld09mRmlsZShtYXBwaW5nLCBkZXNpcmVkQWNjZXNzLCAwLCAwLCAq
c2l6ZSk7CiAgICAgQ2xvc2VIYW5kbGUobWFwcGluZyk7Ci0gICAgaWYgKCFtX2ZpbGVEYXRhKQor
ICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fZmlsZVNpemUgPSAq
c2l6ZTsKKworICAgIG1fZmlsZURhdGEgPSBTcGFuIHsgcmVpbnRlcnByZXRfY2FzdDxzdGQ6OmJ5
dGUqPihkYXRhKSwgKnNpemUgfTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsODAgQEAKKzIwMjEtMDYtMTEgIFNhbSBXZWluaWcgIDx3ZWluaWdA
YXBwbGUuY29tPgorCisgICAgICAgIEFkb3B0IFNwYW4gaW4gbW9yZSBwbGFjZXMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjg4NworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtXSVBdCisKKyAgICAgICAg
KiBNb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFw
cEhpZ2hsaWdodDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcEhpZ2hsaWdo
dDo6ZGVjb2RlKToKKyAgICAgICAgKiBNb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHRSYW5n
ZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwSGlnaGxpZ2h0UmFuZ2VEYXRhOjp0b1No
YXJlZEJ1ZmZlciBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNh
dG9yUmVzcG9uc2VEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjplbmNvZGVBcnJheUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpkZWNvZGVBcnJheUJ1ZmZlcik6CisgICAgICAgICogTW9kdWxl
cy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmg6CisgICAgICAg
IChXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjplbmNvZGUgY29u
c3QpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbERlc2Ny
aXB0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9y
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRI
YW5kc2hha2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpnZXRF
eHBlY3RlZFdlYlNvY2tldEFjY2VwdCk6CisgICAgICAgICogYmluZGluZ3MvanMvQnVmZmVyU291
cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJTb3VyY2U6OmJ5dGVzIGNvbnN0KToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVjb2RlKToKKyAgICAgICAgKiBjb250ZW50
ZXh0ZW5zaW9ucy9TZXJpYWxpemVkTkZBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpTZXJpYWxpemVkTkZBOjpwb2ludGVyQXRPZmZzZXRJbkZpbGUgY29uc3QpOgor
ICAgICAgICAqIGNyeXB0by9tYWMvU2VyaWFsaXplZENyeXB0b0tleVdyYXBNYWMubW06CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVBbmRTdG9yZU1hc3RlcktleSk6CisgICAgICAgICogZG9tL05v
ZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFzaFBvaW50ZXIpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NUGF0Y2hTdXBw
b3J0OjpjcmVhdGVEaWdlc3QpOgorICAgICAgICAoV2ViQ29yZTo6YWRkU3RyaW5nVG9TSEExKTog
RGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6c2hvd0NlcnRpZmljYXRl
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmdldFNlcmlhbGl6ZWRD
ZXJ0aWZpY2F0ZSk6CisgICAgICAgICogcGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGE6OmNyZWF0ZVNoYXJlZEJ1
ZmZlciBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNoYXJlZEJ1ZmZlcjo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZl
cjo6RGF0YVNlZ21lbnQ6OmRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVm
ZmVyOjpEYXRhU2VnbWVudDo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVk
QnVmZmVyOjpkZWNvZGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6
RGF0YVNlZ21lbnQ6OnNpemUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZl
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2NvY29hL0NBQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjplbmNv
ZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpk
ZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01vZGVsLmg6CisgICAgICAgIChX
ZWJDb3JlOjpNb2RlbDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1vZGVsOjpk
ZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlBpeGVsQnVmZmVyOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFt
L1JlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNh
cGFiaWxpdHlWYWx1ZU9yUmFuZ2U6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpD
YXBhYmlsaXR5VmFsdWVPclJhbmdlOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlh
c3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
YWRkU3RyaW5nVG9TSEExKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL0NlcnRpZmlj
YXRlSW5mb0NGTmV0LmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OmVuY29kZUNGRGF0
YSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpkZWNvZGVDRkRhdGEpOgorICAgICAgICAq
IHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50OjpiaW5kQmxvYik6CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZVN0
YXRlbWVudC5oOgorICAgICAgICAqIHdvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9u
RGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVnaXN0cmF0aW9uRGF0YWJhc2U6OmRv
UHVzaENoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaXN0cmF0aW9uRGF0YWJhc2U6Omlt
cG9ydFJlY29yZHMpOgorICAgICAgICAqIHdvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTY3JpcHRT
dG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNXU2NyaXB0U3RvcmFnZTo6c3RvcmUpOgor
CiAyMDIxLTA2LTExICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAg
TGF6aWx5IGNvbXB1dGUgU2VjdXJpdHlPcmlnaW46Om1faXNQb3RlbnRpYWxseVRydXN0d29ydGh5
IGZvciBwZXJmb3JtYW5jZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRt
ZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2VuY3J5cHRlZG1lZGlhL0luaXREYXRhUmVnaXN0cnkuY3BwCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0luaXREYXRhUmVn
aXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAgc3RhdGljIFJlZlB0
cjxTaGFyZWRCdWZmZXI+IHNhbml0aXplS2V5aQogICAgIGF1dG8gb2JqZWN0ID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKICAgICBhdXRvIGtpZHNBcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUo
KTsKICAgICBmb3IgKGF1dG8mIGJ1ZmZlciA6IGtleUlEQnVmZmVyLnZhbHVlKCkpCi0gICAgICAg
IGtpZHNBcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhidWZmZXItPmRh
dGEoKSwgYnVmZmVyLT5zaXplKCkpKTsKKyAgICAgICAga2lkc0FycmF5LT5wdXNoU3RyaW5nKGJh
c2U2NFVSTEVuY29kZVRvU3RyaW5nKGJ1ZmZlci0+Ynl0ZXMoKSkpOwogICAgIG9iamVjdC0+c2V0
QXJyYXkoImtpZHMiLCBXVEZNb3ZlKGtpZHNBcnJheSkpOwogCiAgICAgQ1N0cmluZyBqc29uRGF0
YSA9IG9iamVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0LmgJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lk
IEFwcEhpZ2hsaWdodDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5j
b2RlciA8PCBzdGF0aWNfY2FzdDxzaXplX3Q+KGhpZ2hsaWdodC0+c2l6ZSgpKTsKLSAgICBlbmNv
ZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShoaWdobGlnaHQtPmRhdGEoKSwgaGlnaGxpZ2h0LT5z
aXplKCksIDEpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKCpoaWdobGlnaHQs
IDEpOwogCiAgICAgZW5jb2RlciA8PCB0ZXh0OwogCkBAIC03NSw3ICs3NSw3IEBAIHN0ZDo6b3B0
aW9uYWw8QXBwSGlnaGxpZ2h0PiBBcHBIaWdobGlnaHQKIAogICAgIFZlY3Rvcjx1aW50OF90PiBo
aWdobGlnaHQ7CiAgICAgaGlnaGxpZ2h0Lmdyb3coKmxlbmd0aCk7Ci0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZUZpeGVkTGVuZ3RoRGF0YShoaWdobGlnaHQuZGF0YSgpLCBoaWdobGlnaHQuc2l6ZSgp
LCAxKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGhpZ2hsaWdodCwg
MSkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKICAgICBzdGQ6Om9wdGlvbmFsPHN0
ZDo6b3B0aW9uYWw8U3RyaW5nPj4gdGV4dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFJhbmdlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhLmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9oaWdobGlnaHQvQXBwSGln
aGxpZ2h0UmFuZ2VEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBSZWY8
U2hhcmVkQnVmZmVyPiBBcHBIaWdobGlnaHRSYW5nZURhdGE6CiB7CiAgICAgV1RGOjpQZXJzaXN0
ZW5jZTo6RW5jb2RlciBlbmNvZGVyOwogICAgIGVuY29kZXIgPDwgKnRoaXM7Ci0gICAgcmV0dXJu
IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6
ZSgpKTsKKyAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZW5jb2Rlci5idWZmZXIoKSk7
CiB9CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgQXBwSGlnaGxpZ2h0UmFuZ2VEYXRh
OjpOb2RlUGF0aENvbXBvbmVudDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFD
aGFubmVsLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgw
LDcgQEAgTmV0d29ya1NlbmRRdWV1ZSBSVENEYXRhQ2hhbm5lbDo6Y3JlYXRlTQogICAgICAgICBp
ZiAoIWNoYW5uZWwubV9oYW5kbGVyLT5zZW5kU3RyaW5nRGF0YSh1dGY4KSkKICAgICAgICAgICAg
IGNoYW5uZWwuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNz
YWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgIkVycm9yIHNlbmRpbmcgc3RyaW5n
IHRocm91Z2ggUlRDRGF0YUNoYW5uZWwuIl9zKTsKICAgICB9LCBbJmNoYW5uZWxdKGF1dG8mIHNw
YW4pIHsKLSAgICAgICAgaWYgKCFjaGFubmVsLm1faGFuZGxlci0+c2VuZFJhd0RhdGEoc3Bhbi5k
YXRhKCksIHNwYW4uc2l6ZSgpKSkKKyAgICAgICAgaWYgKCFjaGFubmVsLm1faGFuZGxlci0+c2Vu
ZFJhd0RhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3Bhbi5kYXRhKCkpLCBz
cGFuLnNpemUoKSkpCiAgICAgICAgICAgICBjaGFubmVsLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJy
b3IsICJFcnJvciBzZW5kaW5nIGJpbmFyeSBkYXRhIHRocm91Z2ggUlRDRGF0YUNoYW5uZWwuIl9z
KTsKICAgICB9LCBbJmNoYW5uZWxdKEV4Y2VwdGlvbkNvZGUgZXJyb3JDb2RlKSB7CiAgICAgICAg
IGlmIChhdXRvKiBjb250ZXh0ID0gY2hhbm5lbC5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBs
YWNlbWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMv
UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0JKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQko
d29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQAogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
Q2F0Y2hTY29wZS5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4K
ICNpbXBvcnQgPG9iamMvcnVudGltZS5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1NwYW5Db2NvYS5o
PgogI2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+CiAKICNpbXBvcnQgPHBhbC9jZi9Db3JlTWVk
aWFTb2Z0TGluay5oPgpAQCAtMjQ2LDkgKzI0Nyw5IEBAIHN0YXRpYyBKU1ZhbHVlICpqc1ZhbHVl
V2l0aERhdGFJbkNvbnRleHQKICAgICAvLyBGSVhNRTogQWRkIG1ha2VDRlN0cmluZy9tYWtlTlNT
dHJpbmcgdG8gYXZvaWQgdW5uZWNlc3NhcnkgU3RyaW5nIGFsbG9jYXRpb24uCiAgICAgU3RyaW5n
IGRhdGE2NDsKICAgICBpZiAoIW1pbWVUeXBlLmlzRW1wdHkoKSkKLSAgICAgICAgZGF0YTY0ID0g
bWFrZVN0cmluZygiZGF0YToiLCBtaW1lVHlwZSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChb
ZGF0YSBieXRlc10sIFtkYXRhIGxlbmd0aF0pKTsKKyAgICAgICAgZGF0YTY0ID0gbWFrZVN0cmlu
ZygiZGF0YToiLCBtaW1lVHlwZSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChhc0J5dGVzKGRh
dGEpKSk7CiAgICAgZWxzZQotICAgICAgICBkYXRhNjQgPSBtYWtlU3RyaW5nKCJkYXRhOnRleHQv
cGxhaW47YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoW2RhdGEgYnl0ZXNdLCBbZGF0YSBsZW5ndGhd
KSk7CisgICAgICAgIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6dGV4dC9wbGFpbjtiYXNlNjQs
IiwgYmFzZTY0RW5jb2RlZChhc0J5dGVzKGRhdGEpKSk7CiAKICAgICByZXR1cm4gW0pTVmFsdWUg
dmFsdWVXaXRoT2JqZWN0OihpZClkYXRhNjQuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSBpbkNvbnRl
eHQ6Y29udGV4dF07CiB9CkBAIC0zNDAsNyArMzQxLDcgQEAgc3RhdGljIEpTVmFsdWUgKmpzVmFs
dWVXaXRoQVZNZXRhZGF0YUl0ZQogICAgICAgICBpZCB2YWx1ZSA9IGl0ZW0udmFsdWU7CiAgICAg
ICAgIE5TU3RyaW5nICptaW1lVHlwZSA9IFtbaXRlbSBleHRyYUF0dHJpYnV0ZXNdIG9iamVjdEZv
cktleTpAIk1JTUV0eXBlIl07CiAgICAgICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNE
YXRhIGNsYXNzXV0gJiYgbWltZVR5cGUpIHsKLSAgICAgICAgICAgIGF1dG8gZGF0YTY0ID0gbWFr
ZVN0cmluZygiZGF0YToiLCBTdHJpbmcobWltZVR5cGUpLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNv
ZGVkKFt2YWx1ZSBieXRlc10sIFt2YWx1ZSBsZW5ndGhdKSk7CisgICAgICAgICAgICBhdXRvIGRh
dGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgU3RyaW5nKG1pbWVUeXBlKSwgIjtiYXNlNjQsIiwg
YmFzZTY0RW5jb2RlZChhc0J5dGVzKChOU0RhdGEgKil2YWx1ZSkpKTsKICAgICAgICAgICAgIFtk
aWN0aW9uYXJ5IHNldE9iamVjdDooX19icmlkZ2UgTlNTdHJpbmcgKilkYXRhNjQuY3JlYXRlQ0ZT
dHJpbmcoKS5nZXQoKSBmb3JLZXk6QCJ2YWx1ZSJdOwogICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDp2YWx1ZSBmb3JLZXk6QCJ2YWx1ZSJdOwpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yQ29vcmRpbmF0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0aGVu
dGljYXRvckNvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yQ29vcmRpbmF0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHN0YXRpYyBSZWY8QXJyYXlCdWZmZXI+IHByb2R1Y2VD
bGllbnREYXQKICAgICAgICAgb2JqZWN0LT5zZXRTdHJpbmcoInR5cGUiX3MsICJ3ZWJhdXRobi5n
ZXQiX3MpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgb2JqZWN0LT5zZXRTdHJpbmcoImNo
YWxsZW5nZSJfcywgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY2hhbGxlbmdlLmRhdGEoKSwgY2hh
bGxlbmdlLmxlbmd0aCgpKSk7CisgICAgb2JqZWN0LT5zZXRTdHJpbmcoImNoYWxsZW5nZSJfcywg
YmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY2hhbGxlbmdlLmJ5dGVzKCkpKTsKICAgICBvYmplY3Qt
PnNldFN0cmluZygib3JpZ2luIl9zLCBvcmlnaW4udG9SYXdTdHJpbmcoKSk7CiAKICAgICBhdXRv
IHV0ZjhKU09OU3RyaW5nID0gb2JqZWN0LT50b0pTT05TdHJpbmcoKS51dGY4KCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRpY2F0b3JSZXNwb25zZURhdGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRp
Y2F0b3JSZXNwb25zZURhdGEuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yUmVzcG9uc2VEYXRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU5LDcgKzU5LDcgQEAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHN0YXRpYyB2b2lk
IGVuY29kZUFycmF5QnVmZmVyKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEFycmF5QnVmZmVyJiBi
dWZmZXIpCiB7CiAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYnVmZmVyLmJ5
dGVMZW5ndGgoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RhdGljX2Nh
c3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZlci5kYXRhKCkpLCBidWZmZXIuYnl0ZUxlbmd0aCgpLCAx
KTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShidWZmZXIuYnl0ZXMoKSwgMSk7
CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CkBAIC03NSw3ICs3NSw3IEBAIFJlZlB0cjxB
cnJheUJ1ZmZlcj4gZGVjb2RlQXJyYXlCdWZmZXIoRGUKICAgICBhdXRvIGJ1ZmZlciA9IEFycmF5
QnVmZmVyOjp0cnlDcmVhdGUobGVuZ3RoLnZhbHVlKCksIHNpemVvZih1aW50OF90KSk7CiAgICAg
aWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGVGaXhlZExlbmd0aERhdGEoc3RhdGljX2Nhc3Q8dWludDhfdCo+KGJ1ZmZlci0+ZGF0YSgp
KSwgbGVuZ3RoLnZhbHVlKCksIDEpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0
aERhdGEoYnVmZmVyLT53cml0YWJsZUJ5dGVzKCksIDEpKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICByZXR1cm4gYnVmZmVyOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWwuY3BwCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRl
bnRpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIEF1dGhlbnRpY2F0aW9u
RXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgUHUKIH0KIAogUHVibGljS2V5Q3JlZGVudGlhbDo6UHVi
bGljS2V5Q3JlZGVudGlhbChSZWY8QXV0aGVudGljYXRvclJlc3BvbnNlPiYmIHJlc3BvbnNlKQot
ICAgIDogQmFzaWNDcmVkZW50aWFsKGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKHJlc3BvbnNlLT5y
YXdJZCgpLT5kYXRhKCksIHJlc3BvbnNlLT5yYXdJZCgpLT5ieXRlTGVuZ3RoKCkpLCBUeXBlOjpQ
dWJsaWNLZXksIERpc2NvdmVyeTo6UmVtb3RlKQorICAgIDogQmFzaWNDcmVkZW50aWFsKGJhc2U2
NFVSTEVuY29kZVRvU3RyaW5nKHJlc3BvbnNlLT5yYXdJZCgpLT5ieXRlcygpKSwgVHlwZTo6UHVi
bGljS2V5LCBEaXNjb3Zlcnk6OlJlbW90ZSkKICAgICAsIG1fcmVzcG9uc2UoV1RGTW92ZShyZXNw
b25zZSkpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1Ymxp
Y0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMu
aAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9Q
dWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0
MSw4ICsxNDEsOCBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBQdWJsaWNLZXlDcmVk
ZW50aWFsQ3JlYXRpb25PcHRpb25zOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsK
ICAgICBlbmNvZGVyIDw8IHJwLmlkIDw8IHJwLm5hbWUgPDwgcnAuaWNvbjsKLSAgICBlbmNvZGVy
IDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih1c2VyLmlkLmxlbmd0aCgpKTsKLSAgICBlbmNvZGVy
LmVuY29kZUZpeGVkTGVuZ3RoRGF0YSh1c2VyLmlkLmRhdGEoKSwgdXNlci5pZC5sZW5ndGgoKSwg
MSk7CisgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odXNlci5pZC5ieXRlcygp
LnNpemUoKSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEodXNlci5pZC5ieXRl
cygpLCAxKTsKICAgICBlbmNvZGVyIDw8IHVzZXIuZGlzcGxheU5hbWUgPDwgdXNlci5uYW1lIDw8
IHVzZXIuaWNvbiA8PCBwdWJLZXlDcmVkUGFyYW1zIDw8IHRpbWVvdXQgPDwgZXhjbHVkZUNyZWRl
bnRpYWxzIDw8IGF1dGhlbnRpY2F0b3JTZWxlY3Rpb24gPDwgYXR0ZXN0YXRpb24gPDwgZXh0ZW5z
aW9uczsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNL
ZXlDcmVkZW50aWFsRGVzY3JpcHRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVk
ZW50aWFsRGVzY3JpcHRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw4ICs0Nyw4IEBAIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yOjpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IHR5cGU7Ci0g
ICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaWQubGVuZ3RoKCkpOwotICAgIGVu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGlkLmRhdGEoKSwgaWQubGVuZ3RoKCksIDEpOwor
ICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGlkLmJ5dGVzKCkuc2l6ZSgpKTsK
KyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShpZC5ieXRlcygpLCAxKTsKICAgICBl
bmNvZGVyIDw8IHRyYW5zcG9ydHM7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0
SGFuZHNoYWtlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsMTkgKzk3LDIwIEBAIHN0YXRpYyBT
dHJpbmcgZ2VuZXJhdGVTZWNXZWJTb2NrZXRLZXkoKQogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
bm9uY2VTaXplID0gMTY7CiAgICAgdW5zaWduZWQgY2hhciBrZXlbbm9uY2VTaXplXTsKICAgICBj
cnlwdG9ncmFwaGljYWxseVJhbmRvbVZhbHVlcyhrZXksIG5vbmNlU2l6ZSk7Ci0gICAgcmV0dXJu
IGJhc2U2NEVuY29kZVRvU3RyaW5nKGtleSwgbm9uY2VTaXplKTsKKyAgICByZXR1cm4gYmFzZTY0
RW5jb2RlVG9TdHJpbmcoa2V5KTsKIH0KIAogU3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Z2V0
RXhwZWN0ZWRXZWJTb2NrZXRBY2NlcHQoY29uc3QgU3RyaW5nJiBzZWNXZWJTb2NrZXRLZXkpCiB7
CiAgICAgY29uc3RleHByIHVpbnQ4X3Qgd2ViU29ja2V0S2V5R1VJRFtdID0gIjI1OEVBRkE1LUU5
MTQtNDdEQS05NUNBLUM1QUIwREM4NUIxMSI7CisKICAgICBTSEExIHNoYTE7Ci0gICAgQ1N0cmlu
ZyBrZXlEYXRhID0gc2VjV2ViU29ja2V0S2V5LmFzY2lpKCk7Ci0gICAgc2hhMS5hZGRCeXRlcyhr
ZXlEYXRhLmRhdGFBc1VJbnQ4UHRyKCksIGtleURhdGEubGVuZ3RoKCkpOwotICAgIHNoYTEuYWRk
Qnl0ZXMod2ViU29ja2V0S2V5R1VJRCwgc3RkOjpzaXplKHdlYlNvY2tldEtleUdVSUQpIC0gMSk7
CisgICAgc2hhMS5hZGRCeXRlcyhzZWNXZWJTb2NrZXRLZXkuYXNjaWkoKS5ieXRlcygpKTsKKyAg
ICBzaGExLmFkZEJ5dGVzKHdlYlNvY2tldEtleUdVSUQpOworCiAgICAgU0hBMTo6RGlnZXN0IGhh
c2g7CiAgICAgc2hhMS5jb21wdXRlSGFzaChoYXNoKTsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2Rl
VG9TdHJpbmcoaGFzaC5kYXRhKCksIFNIQTE6Omhhc2hTaXplKTsKKyAgICByZXR1cm4gYmFzZTY0
RW5jb2RlVG9TdHJpbmcoaGFzaCk7CiB9CiAKIFdlYlNvY2tldEhhbmRzaGFrZTo6V2ViU29ja2V0
SGFuZHNoYWtlKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHByb3RvY29sLCBjb25zdCBT
dHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBjbGllbnRPcmlnaW4sIGJvb2wgYWxsb3dD
b29raWVzKQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2oveGNzaGFyZWRk
YXRhL3hjc2NoZW1lcy9XZWJDb3JlLnhjc2NoZW1lCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvV2ViQ29yZS54Y3Nj
aGVtZQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2oveGNzaGFyZWRkYXRhL3hjc2NoZW1lcy9XZWJDb3JlLnhjc2NoZW1lCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw3ICszOSw5IEBACiAgICAgICBpZ25vcmVzUGVyc2lzdGVudFN0YXRlT25MYXVuY2gg
PSAiTk8iCiAgICAgICBkZWJ1Z0RvY3VtZW50VmVyc2lvbmluZyA9ICJZRVMiCiAgICAgICBkZWJ1
Z1NlcnZpY2VFeHRlbnNpb24gPSAiaW50ZXJuYWwiCi0gICAgICBhbGxvd0xvY2F0aW9uU2ltdWxh
dGlvbiA9ICJZRVMiPgorICAgICAgZW5hYmxlR1BVRnJhbWVDYXB0dXJlTW9kZSA9ICIzIgorICAg
ICAgYWxsb3dMb2NhdGlvblNpbXVsYXRpb24gPSAiWUVTIgorICAgICAgR1BVUHJvZmlsZXJFbmFi
bGVkID0gIk5vIj4KICAgIDwvTGF1bmNoQWN0aW9uPgogICAgPFByb2ZpbGVBY3Rpb24KICAgICAg
IGJ1aWxkQ29uZmlndXJhdGlvbiA9ICJSZWxlYXNlIgpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvQnVmZmVyU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvQnVmZmVyU291cmNlLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0J1ZmZlclNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1
NywxMyBAQCBwdWJsaWM6CiAgICAgICAgIH0sIG1fdmFyaWFudCk7CiAgICAgfQogCisgICAgU3Bh
bjxjb25zdCB1aW50OF90PiBieXRlcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RG
Ojp2aXNpdChbXShhdXRvJiBidWZmZXIpIC0+IFNwYW48Y29uc3QgdWludDhfdD4geworICAgICAg
ICAgICAgcmV0dXJuIGJ1ZmZlciA/IFNwYW48Y29uc3QgdWludDhfdD4geyBzdGF0aWNfY2FzdDxj
b25zdCB1aW50OF90Kj4oYnVmZmVyLT5kYXRhKCkpLCBidWZmZXItPmJ5dGVMZW5ndGgoKSB9IDog
U3Bhbjxjb25zdCB1aW50OF90PiB7IH07CisgICAgICAgIH0sIG1fdmFyaWFudCk7CisgICAgfQor
CiBwcml2YXRlOgogICAgIFZhcmlhbnRUeXBlIG1fdmFyaWFudDsKIH07CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NCwxNSArMTY0LDE1IEBAIHZvaWQgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjplbmNvZGUoRW5jb2QKIAogICAgIGlmIChoYXNBcnJheSkgewog
ICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihtX2FycmF5QnVmZmVyQ29u
dGVudHNBcnJheS0+c2l6ZSgpKTsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvICZhcnJheUJ1ZmZl
ckNvbnRlbnRzIDogKm1fYXJyYXlCdWZmZXJDb250ZW50c0FycmF5KSB7CisgICAgICAgIGZvciAo
Y29uc3QgYXV0byYgYXJyYXlCdWZmZXJDb250ZW50cyA6ICptX2FycmF5QnVmZmVyQ29udGVudHNB
cnJheSkgewogICAgICAgICAgICAgZW5jb2RlciA8PCBhcnJheUJ1ZmZlckNvbnRlbnRzLnNpemVJ
bkJ5dGVzKCk7Ci0gICAgICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShzdGF0
aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYXJyYXlCdWZmZXJDb250ZW50cy5kYXRhKCkpLCBhcnJh
eUJ1ZmZlckNvbnRlbnRzLnNpemVJbkJ5dGVzKCksIDEpOworICAgICAgICAgICAgZW5jb2Rlci5l
bmNvZGVGaXhlZExlbmd0aERhdGEoYXJyYXlCdWZmZXJDb250ZW50cy5ieXRlcygpLCAxKTsKICAg
ICAgICAgfQogICAgIH0KIAogI2lmIEVOQUJMRShXRUJfUlRDKQogICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KG1fZGV0YWNoZWRSVENEYXRhQ2hhbm5lbHMuc2l6ZSgpKTsKLSAg
ICBmb3IgKGNvbnN0IGF1dG8gJmNoYW5uZWwgOiBtX2RldGFjaGVkUlRDRGF0YUNoYW5uZWxzKQor
ICAgIGZvciAoY29uc3QgYXV0byYgY2hhbm5lbCA6IG1fZGV0YWNoZWRSVENEYXRhQ2hhbm5lbHMp
CiAgICAgICAgIGVuY29kZXIgPDwgKmNoYW5uZWw7CiAjZW5kaWYKIH0KQEAgLTIwNiw3ICsyMDYs
NyBAQCBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkCiAgICAgICAgICAg
ICBhdXRvIGJ1ZmZlciA9IEdpZ2FjYWdlOjp0cnlNYWxsb2MoR2lnYWNhZ2U6OlByaW1pdGl2ZSwg
YnVmZmVyU2l6ZSk7CiAgICAgICAgICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0
aERhdGEoc3RhdGljX2Nhc3Q8dWludDhfdCo+KGJ1ZmZlciksIGJ1ZmZlclNpemUsIDEpKSB7Cisg
ICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBzdGF0
aWNfY2FzdDxzdGQ6OmJ5dGUqPihidWZmZXIpLCBidWZmZXJTaXplIH0sIDEpKSB7CiAgICAgICAg
ICAgICAgICAgR2lnYWNhZ2U6OmZyZWUoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgYnVmZmVyKTsKICAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL1NlcmlhbGl6ZWRORkEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL1NlcmlhbGl6ZWRORkEuY3BwCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9TZXJp
YWxpemVkTkZBLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3IEBAIFNlcmlhbGl6
ZWRORkE6OlNlcmlhbGl6ZWRORkEoRmlsZVN5c3RlbToKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBj
b25zdCBUKiBTZXJpYWxpemVkTkZBOjpwb2ludGVyQXRPZmZzZXRJbkZpbGUoc2l6ZV90IG9mZnNl
dCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4oc3RhdGlj
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1fZmlsZS5kYXRhKCkpICsgb2Zmc2V0KTsKKyAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4obV9maWxlLmRhdGEoKS5kYXRhKCkgKyBvZmZz
ZXQpOwogfQogCiBhdXRvIFNlcmlhbGl6ZWRORkE6Om5vZGVzKCkgY29uc3QgLT4gY29uc3QgUmFu
Z2U8SW1tdXRhYmxlTkZBTm9kZT4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5
cHRvS2V5RUNNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMv
Q3J5cHRvS2V5RUNNYWMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDEwICsx
OTcsMTAgQEAgYm9vbCBDcnlwdG9LZXlFQzo6cGxhdGZvcm1BZGRGaWVsZEVsZW1lbgogCiAgICAg
aWYgKFVOTElLRUxZKChzaXplICE9IHB1YmxpY0tleVNpemUpICYmIChzaXplICE9IHByaXZhdGVL
ZXlTaXplKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBqd2sueCA9IGJhc2U2NFVSTEVu
Y29kZVRvU3RyaW5nKHJlc3VsdC5kYXRhKCkgKyAxLCBrZXlTaXplSW5CeXRlcyk7Ci0gICAgandr
LnkgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhyZXN1bHQuZGF0YSgpICsga2V5U2l6ZUluQnl0
ZXMgKyAxLCBrZXlTaXplSW5CeXRlcyk7CisgICAgandrLnggPSBiYXNlNjRVUkxFbmNvZGVUb1N0
cmluZyhTcGFuIHsgcmVzdWx0IH0uc3Vic3BhbigxLCBrZXlTaXplSW5CeXRlcykpOworICAgIGp3
ay55ID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoU3BhbiB7IHJlc3VsdCB9LnN1YnNwYW4oMSAr
IGtleVNpemVJbkJ5dGVzLCBrZXlTaXplSW5CeXRlcykpOwogICAgIGlmIChzaXplID4gcHVibGlj
S2V5U2l6ZSkKLSAgICAgICAgandrLmQgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhyZXN1bHQu
ZGF0YSgpICsgcHVibGljS2V5U2l6ZSwga2V5U2l6ZUluQnl0ZXMpOworICAgICAgICBqd2suZCA9
IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKFNwYW4geyByZXN1bHQgfS5zdWJzcGFuKHB1YmxpY0tl
eVNpemUsIGtleVNpemVJbkJ5dGVzKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvU2VyaWFsaXplZENyeXB0b0tleVdyYXBNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9TZXJpYWxpemVkQ3J5cHRvS2V5
V3JhcE1hYy5tbQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL21h
Yy9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzUsNiAr
MzUsNyBAQAogI2ltcG9ydCA8d3RmL0NyeXB0b2dyYXBoaWNVdGlsaXRpZXMuaD4KICNpbXBvcnQg
PHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1w
b3J0IDx3dGYvY2YvU3BhbkNGLmg+CiAjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4K
ICNpbXBvcnQgPHd0Zi9zcGkvY29jb2EvU2VjdXJpdHlTUEkuaD4KICNpbXBvcnQgPHd0Zi90ZXh0
L0Jhc2U2NC5oPgpAQCAtMTY3LDcgKzE2OCw3IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rv
cjx1aW50OF90Pj4gZmkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9CiAgICAg
UmV0YWluUHRyPENGRGF0YVJlZj4ga2V5RGF0YSA9IGFkb3B0Q0Yoa2V5RGF0YVJlZik7Ci0gICAg
cmV0dXJuIGJhc2U2NERlY29kZShDRkRhdGFHZXRCeXRlUHRyKGtleURhdGEuZ2V0KCkpLCBDRkRh
dGFHZXRMZW5ndGgoa2V5RGF0YS5nZXQoKSkpOworICAgIHJldHVybiBiYXNlNjREZWNvZGUoYXNC
eXRlcyhrZXlEYXRhLmdldCgpKSk7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+
PiBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTYwNiw3ICsxNjA2LDggQEAgRXhjZXB0aW9uT3I8dm9pZD4gTm9kZTo6c2V0VGV4dENv
bnRlbnQoYwogc3RhdGljIFNIQTE6OkRpZ2VzdCBoYXNoUG9pbnRlcihjb25zdCB2b2lkKiBwb2lu
dGVyKQogewogICAgIFNIQTEgc2hhMTsKLSAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KCZwb2ludGVyKSwgc2l6ZW9mKHBvaW50ZXIpKTsKKyAgICBzaGEx
LmFkZEJ5dGVzKFNwYW4geyAmcG9pbnRlciwgMSB9KTsKKwogICAgIFNIQTE6OkRpZ2VzdCBkaWdl
c3Q7CiAgICAgc2hhMS5jb21wdXRlSGFzaChkaWdlc3QpOwogICAgIHJldHVybiBkaWdlc3Q7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMzOCw3ICszMzgsNyBAQCB2b2lkIEZpbGVSZWFkZXJMb2Fk
ZXI6OmNvbnZlcnRUb0RhdGFVUkwoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX3N0
cmluZ1Jlc3VsdCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgbV9kYXRhVHlwZS5pc0VtcHR5KCkgPyAi
YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiA6IG1fZGF0YVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2
NEVuY29kZWQobV9yYXdEYXRhLT5kYXRhKCksIG1fYnl0ZXNMb2FkZWQpKTsKKyAgICBtX3N0cmlu
Z1Jlc3VsdCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgbV9kYXRhVHlwZS5pc0VtcHR5KCkgPyAiYXBw
bGljYXRpb24vb2N0ZXQtc3RyZWFtIiA6IG1fZGF0YVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2NEVu
Y29kZWQobV9yYXdEYXRhLT5ieXRlcygpKSk7CiB9CiAKIGJvb2wgRmlsZVJlYWRlckxvYWRlcjo6
aXNDb21wbGV0ZWQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3Jr
U2VuZFF1ZXVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL05ldHdv
cmtTZW5kUXVldWUuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxl
YXBpL05ldHdvcmtTZW5kUXVldWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MywxMSArNTMsMTAg
QEAgdm9pZCBOZXR3b3JrU2VuZFF1ZXVlOjplbnF1ZXVlKENTdHJpbmcmJgogdm9pZCBOZXR3b3Jr
U2VuZFF1ZXVlOjplbnF1ZXVlKGNvbnN0IEpTQzo6QXJyYXlCdWZmZXImIGJpbmFyeURhdGEsIHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCiB7CiAgICAgaWYgKG1fcXVl
dWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGF1dG8qIGRhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCB1
aW50OF90Kj4oYmluYXJ5RGF0YS5kYXRhKCkpOwotICAgICAgICBtX3dyaXRlUmF3RGF0YShTcGFu
IHsgZGF0YSArIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGggfSk7CisgICAgICAgIG1fd3JpdGVSYXdE
YXRhKGJpbmFyeURhdGEuYnl0ZXMoKS5zdWJzcGFuKGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtX3F1ZXVlLmFwcGVuZChTaGFyZWRCdWZmZXI6
OmNyZWF0ZShzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYmluYXJ5RGF0YS5kYXRhKCkpICsg
Ynl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkpOworICAgIG1fcXVldWUuYXBwZW5kKFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKGJpbmFyeURhdGEuYnl0ZXMoKS5zdWJzcGFuKGJ5dGVPZmZzZXQsIGJ5dGVMZW5n
dGgpKSk7CiB9CiAKIHZvaWQgTmV0d29ya1NlbmRRdWV1ZTo6ZW5xdWV1ZShXZWJDb3JlOjpCbG9i
JiBibG9iKQpAQCAtOTMsNyArOTIsOSBAQCB2b2lkIE5ldHdvcmtTZW5kUXVldWU6OnByb2Nlc3NN
ZXNzYWdlcygpCiAgICAgICAgIHN3aXRjaE9uKG1fcXVldWUuZmlyc3QoKSwgW3RoaXNdKGNvbnN0
IENTdHJpbmcmIHV0ZjgpIHsKICAgICAgICAgICAgIG1fd3JpdGVTdHJpbmcodXRmOCk7CiAgICAg
ICAgIH0sIFt0aGlzXShSZWY8U2hhcmVkQnVmZmVyPiYgZGF0YSkgewotICAgICAgICAgICAgZGF0
YS0+Zm9yRWFjaFNlZ21lbnQobV93cml0ZVJhd0RhdGEpOworICAgICAgICAgICAgZGF0YS0+Zm9y
RWFjaFNlZ21lbnQoW3RoaXNdKGF1dG8mIHNwYW4pIHsKKyAgICAgICAgICAgICAgICBtX3dyaXRl
UmF3RGF0YShhc0J5dGVzKHNwYW4pKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICB9LCBbdGhp
cywgJnNob3VsZFN0b3BQcm9jZXNzaW5nXShVbmlxdWVSZWY8QmxvYkxvYWRlcj4mIGxvYWRlcikg
ewogICAgICAgICAgICAgYXV0byBlcnJvckNvZGUgPSBsb2FkZXItPmVycm9yQ29kZSgpOwogICAg
ICAgICAgICAgaWYgKGxvYWRlci0+aXNMb2FkaW5nKCkgfHwgKGVycm9yQ29kZSAmJiBlcnJvckNv
ZGUudmFsdWUoKSA9PSBBYm9ydEVycm9yKSkgewpAQCAtMTAyLDcgKzEwMyw3IEBAIHZvaWQgTmV0
d29ya1NlbmRRdWV1ZTo6cHJvY2Vzc01lc3NhZ2VzKCkKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgaWYgKGNvbnN0IGF1dG8mIHJlc3VsdCA9IGxvYWRlci0+YXJyYXlCdWZmZXJSZXN1bHQo
KSkgewotICAgICAgICAgICAgICAgIG1fd3JpdGVSYXdEYXRhKFNwYW4geyBzdGF0aWNfY2FzdDxj
b25zdCB1aW50OF90Kj4ocmVzdWx0LT5kYXRhKCkpLCByZXN1bHQtPmJ5dGVMZW5ndGgoKSB9KTsK
KyAgICAgICAgICAgICAgICBtX3dyaXRlUmF3RGF0YShyZXN1bHQtPmJ5dGVzKCkpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEFTU0VSVChlcnJv
ckNvZGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmgJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTmV0d29ya1NlbmRR
dWV1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIGNsYXNzIFNoYXJlZEJ1ZmZl
cjsKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIE5ldHdvcmtTZW5kUXVldWUgOiBwdWJsaWMgQ29udGV4
dERlc3RydWN0aW9uT2JzZXJ2ZXIgewogcHVibGljOgogICAgIHVzaW5nIFdyaXRlU3RyaW5nID0g
RnVuY3Rpb248dm9pZChjb25zdCBDU3RyaW5nJiB1dGY4KT47Ci0gICAgdXNpbmcgV3JpdGVSYXdE
YXRhID0gRnVuY3Rpb248dm9pZChjb25zdCBTcGFuPGNvbnN0IHVpbnQ4X3Q+Jik+OworICAgIHVz
aW5nIFdyaXRlUmF3RGF0YSA9IEZ1bmN0aW9uPHZvaWQoY29uc3QgU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+Jik+OwogICAgIGVudW0gY2xhc3MgQ29udGludWUgeyBObywgWWVzIH07CiAgICAgdXNpbmcg
UHJvY2Vzc0Vycm9yID0gRnVuY3Rpb248Q29udGludWUoRXhjZXB0aW9uQ29kZSk+OwogICAgIE5l
dHdvcmtTZW5kUXVldWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdyaXRlU3RyaW5nJiYsIFdy
aXRlUmF3RGF0YSYmLCBQcm9jZXNzRXJyb3ImJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM5NCwyOCArMzk0LDIzIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IERPTVBhdGNoU3VwcG9ydDo6aW5u
ZXIKICAgICByZXR1cm4geyB9OwogfQogCi1zdGF0aWMgdm9pZCBhZGRTdHJpbmdUb1NIQTEoU0hB
MSYgc2hhMSwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgQ1N0cmluZyBjU3RyaW5nID0g
c3RyaW5nLnV0ZjgoKTsKLSAgICBzaGExLmFkZEJ5dGVzKGNTdHJpbmcuZGF0YUFzVUludDhQdHIo
KSwgY1N0cmluZy5sZW5ndGgoKSk7Ci19Ci0KIHN0ZDo6dW5pcXVlX3B0cjxET01QYXRjaFN1cHBv
cnQ6OkRpZ2VzdD4gRE9NUGF0Y2hTdXBwb3J0OjpjcmVhdGVEaWdlc3QoTm9kZSYgbm9kZSwgVW51
c2VkTm9kZXNNYXAqIHVudXNlZE5vZGVzTWFwKQogewogICAgIGF1dG8gZGlnZXN0ID0gbWFrZVVu
aXF1ZTxEaWdlc3Q+KCk7CiAgICAgZGlnZXN0LT5ub2RlID0gJm5vZGU7CisKICAgICBTSEExIHNo
YTE7CiAKICAgICBhdXRvIG5vZGVUeXBlID0gbm9kZS5ub2RlVHlwZSgpOwotICAgIHNoYTEuYWRk
Qnl0ZXMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oJm5vZGVUeXBlKSwgc2l6ZW9m
KG5vZGVUeXBlKSk7Ci0gICAgYWRkU3RyaW5nVG9TSEExKHNoYTEsIG5vZGUubm9kZU5hbWUoKSk7
Ci0gICAgYWRkU3RyaW5nVG9TSEExKHNoYTEsIG5vZGUubm9kZVZhbHVlKCkpOworICAgIHNoYTEu
YWRkQnl0ZXMoU3BhbiB7ICZub2RlVHlwZSwgMSB9KTsKKyAgICBzaGExLmFkZEJ5dGVzKG5vZGUu
bm9kZU5hbWUoKS51dGY4KCkuYnl0ZXMoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhub2RlLm5vZGVW
YWx1ZSgpLnV0ZjgoKS5ieXRlcygpKTsKIAogICAgIGlmIChub2RlLm5vZGVUeXBlKCkgPT0gTm9k
ZTo6RUxFTUVOVF9OT0RFKSB7CiAgICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS5maXJzdENoaWxk
KCk7CiAgICAgICAgIHdoaWxlIChjaGlsZCkgewogICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PERpZ2VzdD4gY2hpbGRJbmZvID0gY3JlYXRlRGlnZXN0KCpjaGlsZCwgdW51c2VkTm9kZXNNYXAp
OwotICAgICAgICAgICAgYWRkU3RyaW5nVG9TSEExKHNoYTEsIGNoaWxkSW5mby0+c2hhMSk7Cisg
ICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGNoaWxkSW5mby0+c2hhMS51dGY4KCkuYnl0ZXMoKSk7
CiAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwogICAgICAgICAgICAg
ZGlnZXN0LT5jaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShjaGlsZEluZm8pKTsKICAgICAgICAgfQpA
QCAtNDI0LDE5ICs0MTksMTkgQEAgc3RkOjp1bmlxdWVfcHRyPERPTVBhdGNoU3VwcG9ydDo6RGln
ZXN0PgogICAgICAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGVzV2l0aG91dFVwZGF0ZSgpKSB7
CiAgICAgICAgICAgICBTSEExIGF0dHJzU0hBMTsKICAgICAgICAgICAgIGZvciAoYXV0byYgYXR0
cmlidXRlIDogZWxlbWVudC5hdHRyaWJ1dGVzSXRlcmF0b3IoKSkgewotICAgICAgICAgICAgICAg
IGFkZFN0cmluZ1RvU0hBMShhdHRyc1NIQTEsIGF0dHJpYnV0ZS5uYW1lKCkudG9TdHJpbmcoKSk7
Ci0gICAgICAgICAgICAgICAgYWRkU3RyaW5nVG9TSEExKGF0dHJzU0hBMSwgYXR0cmlidXRlLnZh
bHVlKCkpOworICAgICAgICAgICAgICAgIGF0dHJzU0hBMS5hZGRCeXRlcyhhdHRyaWJ1dGUubmFt
ZSgpLnRvU3RyaW5nKCkudXRmOCgpLmJ5dGVzKCkpOworICAgICAgICAgICAgICAgIGF0dHJzU0hB
MS5hZGRCeXRlcyhhdHRyaWJ1dGUudmFsdWUoKS5zdHJpbmcoKS51dGY4KCkuYnl0ZXMoKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBTSEExOjpEaWdlc3QgYXR0cnNIYXNoOwogICAgICAg
ICAgICAgYXR0cnNTSEExLmNvbXB1dGVIYXNoKGF0dHJzSGFzaCk7Ci0gICAgICAgICAgICBkaWdl
c3QtPmF0dHJzU0hBMSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGF0dHJzSGFzaC5kYXRhKCksIDEw
KTsKLSAgICAgICAgICAgIGFkZFN0cmluZ1RvU0hBMShzaGExLCBkaWdlc3QtPmF0dHJzU0hBMSk7
CisgICAgICAgICAgICBkaWdlc3QtPmF0dHJzU0hBMSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGF0
dHJzSGFzaCk7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGRpZ2VzdC0+YXR0cnNTSEExLnV0
ZjgoKS5ieXRlcygpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIFNIQTE6OkRpZ2VzdCBoYXNo
OwogICAgIHNoYTEuY29tcHV0ZUhhc2goaGFzaCk7Ci0gICAgZGlnZXN0LT5zaGExID0gYmFzZTY0
RW5jb2RlVG9TdHJpbmcoaGFzaC5kYXRhKCksIDEwKTsKKyAgICBkaWdlc3QtPnNoYTEgPSBiYXNl
NjRFbmNvZGVUb1N0cmluZyhoYXNoKTsKICAgICBpZiAodW51c2VkTm9kZXNNYXApCiAgICAgICAg
IHVudXNlZE5vZGVzTWFwLT5hZGQoZGlnZXN0LT5zaGExLCBkaWdlc3QuZ2V0KCkpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0
LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kSG9zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwMiw3ICs2MDIsNyBAQCBi
b29sIEluc3BlY3RvckZyb250ZW5kSG9zdDo6c2hvd0NlcnRpZmljCiAgICAgaWYgKCFkYXRhKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRl
Y29kZXIoZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXplKCkpOworICAgIFdURjo6UGVyc2lzdGVuY2U6
OkRlY29kZXIgZGVjb2RlciB7ICpkYXRhIH07CiAgICAgc3RkOjpvcHRpb25hbDxDZXJ0aWZpY2F0
ZUluZm8+IGNlcnRpZmljYXRlSW5mbzsKICAgICBkZWNvZGVyID4+IGNlcnRpZmljYXRlSW5mbzsK
ICAgICBpZiAoIWNlcnRpZmljYXRlSW5mbykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBAIHVuc2lnbmVkIE5ldHdvcmtSZXNvdXJjZXNEYXRh
OjpSZXNvdXJjZUQKICAgICAgICAgbV9jb250ZW50ID0gbV9kZWNvZGVyLT5kZWNvZGVBbmRGbHVz
aChtX2RhdGFCdWZmZXItPmRhdGEoKSwgZGF0YUxlbmd0aCk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgbV9iYXNlNjRFbmNvZGVkID0gdHJ1ZTsKLSAgICAgICAgbV9jb250ZW50ID0gYmFzZTY0RW5j
b2RlVG9TdHJpbmcobV9kYXRhQnVmZmVyLT5kYXRhKCksIGRhdGFMZW5ndGgpOworICAgICAgICBt
X2NvbnRlbnQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhtX2RhdGFCdWZmZXItPmJ5dGVzKCkpOwog
ICAgIH0KIAogICAgIG1fZGF0YUJ1ZmZlciA9IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JET01BZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OTgsNyArMTY5OCw3IEBAIHN0YXRp
YyBTdHJpbmcgY29tcHV0ZUNvbnRlbnRTZWN1cml0eVBvbGkKICAgICBhdXRvIGNyeXB0b0RpZ2Vz
dCA9IFBBTDo6Q3J5cHRvRGlnZXN0OjpjcmVhdGUoUEFMOjpDcnlwdG9EaWdlc3Q6OkFsZ29yaXRo
bTo6U0hBXzI1Nik7CiAgICAgY3J5cHRvRGlnZXN0LT5hZGRCeXRlcyhjb250ZW50LmRhdGEoKSwg
Y29udGVudC5zaXplKCkpOwogICAgIGF1dG8gZGlnZXN0ID0gY3J5cHRvRGlnZXN0LT5jb21wdXRl
SGFzaCgpOwotICAgIHJldHVybiBtYWtlU3RyaW5nKCJzaGEyNTYtIiwgYmFzZTY0RW5jb2RlZChk
aWdlc3QuZGF0YSgpLCBkaWdlc3Quc2l6ZSgpKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoInNo
YTI1Ni0iLCBiYXNlNjRFbmNvZGVkKGRpZ2VzdCkpOwogfQogCiBSZWY8UHJvdG9jb2w6OkRPTTo6
Tm9kZT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZShOb2RlKiBub2RlLCBp
bnQgZGVwdGgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ck5ldHdvcmtBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE3NSw3ICsxNzUsNyBAQCBSZWY8UHJvdG9jb2w6Ok5ldHdvcms6
OldlYlNvY2tldEZyYW1lPiBiCiAgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2Nr
ZXRGcmFtZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldE9wY29kZShmcmFtZS5vcENvZGUpCiAgICAg
ICAgIC5zZXRNYXNrKGZyYW1lLm1hc2tlZCkKLSAgICAgICAgLnNldFBheWxvYWREYXRhKGZyYW1l
Lm9wQ29kZSA9PSAxID8gU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhmcmFtZS5w
YXlsb2FkLCBmcmFtZS5wYXlsb2FkTGVuZ3RoKSA6IGJhc2U2NEVuY29kZVRvU3RyaW5nKGZyYW1l
LnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgpKQorICAgICAgICAuc2V0UGF5bG9hZERhdGEo
ZnJhbWUub3BDb2RlID09IDEgPyBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKGZy
YW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgpIDogYmFzZTY0RW5jb2RlVG9TdHJpbmco
U3BhbiB7IGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGggfSkpCiAgICAgICAgIC5z
ZXRQYXlsb2FkTGVuZ3RoKGZyYW1lLnBheWxvYWRMZW5ndGgpCiAgICAgICAgIC5yZWxlYXNlKCk7
CiB9CkBAIC01ODksNyArNTg5LDcgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRpZFJl
Y2VpdmVEYQogICAgICAgICAvLyBPZnRlbiB0aGUgZGF0YSBpcyB0ZXh0IGFuZCB3ZSB3b3VsZCBo
YXZlIGEgZGVjb2RlciwgYnV0IGZvciBub24tdGV4dCB3ZSB3b24ndCBoYXZlIGEgZGVjb2Rlci4K
ICAgICAgICAgLy8gU3luYyBYSFJzIG1heSBub3QgaGF2ZSBhIGNhY2hlZCByZXNvdXJjZSwgd2hp
bGUgbm9uLXN5bmMgWEhScyB1c3VhbGx5IHRyYW5zZmVyIGRhdGEgb3ZlciBvbiBjb21wbGV0aW9u
LgogICAgICAgICBpZiAobV9sb2FkaW5nWEhSU3luY2hyb25vdXNseSAmJiByZXNvdXJjZURhdGEg
JiYgIXJlc291cmNlRGF0YS0+aGFzQnVmZmVyZWREYXRhKCkgJiYgIXJlc291cmNlRGF0YS0+Y2Fj
aGVkUmVzb3VyY2UoKSkKLSAgICAgICAgICAgIG1fcmVzb3VyY2VzRGF0YS0+c2V0UmVzb3VyY2VD
b250ZW50KHJlcXVlc3RJZCwgYmFzZTY0RW5jb2RlVG9TdHJpbmcoZGF0YSwgZGF0YUxlbmd0aCks
IHRydWUpOworICAgICAgICAgICAgbV9yZXNvdXJjZXNEYXRhLT5zZXRSZXNvdXJjZUNvbnRlbnQo
cmVxdWVzdElkLCBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgZGF0YSwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGRhdGFMZW5ndGgpIH0pLCB0cnVlKTsKICAgICB9CiAKICAgICBtX2Zyb250ZW5k
RGlzcGF0Y2hlci0+ZGF0YVJlY2VpdmVkKHJlcXVlc3RJZCwgdGltZXN0YW1wKCksIGRhdGFMZW5n
dGgsIGVuY29kZWREYXRhTGVuZ3RoKTsKQEAgLTEwMDUsNyArMTAwNSw3IEBAIFByb3RvY29sOjpF
cnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG8KIAogICAgIFdURjo6UGVyc2lzdGVuY2U6OkVu
Y29kZXIgZW5jb2RlcjsKICAgICBXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxXZWJDb3JlOjpDZXJ0
aWZpY2F0ZUluZm8+OjplbmNvZGUoZW5jb2RlciwgY2VydGlmaWNhdGUudmFsdWUoKSk7Ci0gICAg
cmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVm
ZmVyU2l6ZSgpKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoZW5jb2Rlci5idWZm
ZXIoKSk7CiB9CiAKIFdlYlNvY2tldCogSW5zcGVjdG9yTmV0d29ya0FnZW50Ojp3ZWJTb2NrZXRG
b3JSZXF1ZXN0SWQoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYgcmVxdWVzdElk
KQpAQCAtMTQxMCw3ICsxNDEwLDcgQEAgYm9vbCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmNhY2hl
ZFJlc291cgogICAgICAgICB9CiAKICAgICAgICAgKmJhc2U2NEVuY29kZWQgPSB0cnVlOwotICAg
ICAgICAqcmVzdWx0ID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoYnVmZmVyLT5kYXRhKCksIGJ1ZmZl
ci0+c2l6ZSgpKTsKKyAgICAgICAgKnJlc3VsdCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGJ1ZmZl
ci0+Ynl0ZXMoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2Vu
dC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsNyBA
QAogCiAjaWYgRU5BQkxFKFdFQl9BUkNISVZFKSAmJiBVU0UoQ0YpCiAjaW5jbHVkZSAiTGVnYWN5
V2ViQXJjaGl2ZS5oIgorI2luY2x1ZGUgPHd0Zi9jZi9TcGFuQ0YuaD4KICNlbmRpZgogCiAKQEAg
LTExMyw3ICsxMTQsNyBAQCBib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6c2hhcmVkQnVmZmVyQ29u
CiBib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGF0YUNvbnRlbnQoY29uc3QgdWludDhfdCogZGF0
YSwgdW5zaWduZWQgc2l6ZSwgY29uc3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmdOYW1lLCBib29sIHdp
dGhCYXNlNjRFbmNvZGUsIFN0cmluZyogcmVzdWx0KQogewogICAgIGlmICh3aXRoQmFzZTY0RW5j
b2RlKSB7Ci0gICAgICAgICpyZXN1bHQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhkYXRhLCBzaXpl
KTsKKyAgICAgICAgKnJlc3VsdCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKFNwYW4geyBkYXRhLCBz
aXplIH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTExMDIsNyArMTEwMyw3
IEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG8KICAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgY3JlYXRlIHdlYiBhcmNoaXZlIGZvciBtYWlu
IGZyYW1lIl9zKTsKIAogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGJ1ZmZlciA9IGFyY2hpdmUt
PnJhd0RhdGFSZXByZXNlbnRhdGlvbigpOwotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmlu
ZyhDRkRhdGFHZXRCeXRlUHRyKGJ1ZmZlci5nZXQoKSksIENGRGF0YUdldExlbmd0aChidWZmZXIu
Z2V0KCkpKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoYXNCeXRlcyhidWZmZXIu
Z2V0KCkpKTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2
ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4MSwxNiArMTgxLDE0IEBAIFJlZjxTaGFyZWRCdWZmZXI+IE1IVE1M
QXJjaGl2ZTo6Z2VuZXJhdGUKICAgICAgICAgbWh0bWxEYXRhLT5hcHBlbmQoYXNjaWlTdHJpbmcu
ZGF0YSgpLCBhc2NpaVN0cmluZy5sZW5ndGgoKSk7CiAKICAgICAgICAgLy8gRklYTUU6IGlkZWFs
bHkgd2Ugd291bGQgZW5jb2RlIHRoZSBjb250ZW50IGFzIGEgc3RyZWFtIHdpdGhvdXQgaGF2aW5n
IHRvIGZldGNoIGl0IGFsbC4KLSAgICAgICAgYXV0byogZGF0YSA9IHJlc291cmNlLmRhdGEtPmRh
dGEoKTsKLSAgICAgICAgc2l6ZV90IGRhdGFMZW5ndGggPSByZXNvdXJjZS5kYXRhLT5zaXplKCk7
CiAgICAgICAgIGlmICghc3RyY21wKGNvbnRlbnRFbmNvZGluZywgcXVvdGVkUHJpbnRhYmxlKSkg
ewotICAgICAgICAgICAgYXV0byBlbmNvZGVkRGF0YSA9IHF1b3RlZFByaW50YWJsZUVuY29kZShk
YXRhLCBkYXRhTGVuZ3RoKTsKKyAgICAgICAgICAgIGF1dG8gZW5jb2RlZERhdGEgPSBxdW90ZWRQ
cmludGFibGVFbmNvZGUocmVzb3VyY2UuZGF0YS0+Ynl0ZXMoKSk7CiAgICAgICAgICAgICBtaHRt
bERhdGEtPmFwcGVuZChlbmNvZGVkRGF0YS5kYXRhKCksIGVuY29kZWREYXRhLnNpemUoKSk7CiAg
ICAgICAgICAgICBtaHRtbERhdGEtPmFwcGVuZCgiXHJcbiIsIDIpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgQVNTRVJUKCFzdHJjbXAoY29udGVudEVuY29kaW5nLCBiYXNlNjQpKTsK
ICAgICAgICAgICAgIC8vIFdlIGFyZSBub3Qgc3BlY2lmeWluZyBpbnNlcnRMRnMgPSB0cnVlIGJl
bG93IGFzIGl0IHdvdWxkIGN1dCB0aGUgbGluZXMgd2l0aCBMRnMgYW5kIE1IVE1MIHJlcXVpcmVz
IENSTEZzLgotICAgICAgICAgICAgYXV0byBlbmNvZGVkRGF0YSA9IGJhc2U2NEVuY29kZVRvVmVj
dG9yKGRhdGEsIGRhdGFMZW5ndGgpOworICAgICAgICAgICAgYXV0byBlbmNvZGVkRGF0YSA9IGJh
c2U2NEVuY29kZVRvVmVjdG9yKHJlc291cmNlLmRhdGEtPmJ5dGVzKCkpOwogICAgICAgICAgICAg
Y29uc3Qgc2l6ZV90IG1heGltdW1MaW5lTGVuZ3RoID0gNzY7CiAgICAgICAgICAgICBzaXplX3Qg
aW5kZXggPSAwOwogICAgICAgICAgICAgc2l6ZV90IGVuY29kZWREYXRhTGVuZ3RoID0gZW5jb2Rl
ZERhdGEuc2l6ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwv
TUhUTUxQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNo
aXZlL21odG1sL01IVE1MUGFyc2VyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTUsNyArMTk1LDcgQEAgUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gTUhUTUxQYXJzZXI6
OnBhcgogICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAgIHN3aXRjaCAobWltZUhlYWRlci5j
b250ZW50VHJhbnNmZXJFbmNvZGluZygpKSB7CiAgICAgY2FzZSBNSU1FSGVhZGVyOjpCYXNlNjQ6
IHsKLSAgICAgICAgYXV0byBkZWNvZGVkRGF0YSA9IGJhc2U2NERlY29kZShjb250ZW50LT5kYXRh
KCksIGNvbnRlbnQtPnNpemUoKSk7CisgICAgICAgIGF1dG8gZGVjb2RlZERhdGEgPSBiYXNlNjRE
ZWNvZGUoY29udGVudC0+Ynl0ZXMoKSk7CiAgICAgICAgIGlmICghZGVjb2RlZERhdGEpIHsKICAg
ICAgICAgICAgIExPR19FUlJPUigiSW52YWxpZCBiYXNlNjQgY29udGVudCBmb3IgTUhUTUwgcGFy
dC4iKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMjA0LDcgKzIwNCw3IEBAIFJl
ZlB0cjxBcmNoaXZlUmVzb3VyY2U+IE1IVE1MUGFyc2VyOjpwYXIKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIGNhc2UgTUlNRUhlYWRlcjo6UXVvdGVkUHJpbnRhYmxlOgotICAgICAgICBkYXRh
ID0gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnRlbnQtPmRhdGEoKSwgY29udGVudC0+c2l6ZSgp
KTsKKyAgICAgICAgZGF0YSA9IHF1b3RlZFByaW50YWJsZURlY29kZShjb250ZW50LT5ieXRlcygp
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNSU1FSGVhZGVyOjpTZXZlbkJpdDoKICAgICBj
YXNlIE1JTUVIZWFkZXI6OkJpbmFyeToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29u
L0ljb25Mb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29u
L0ljb25Mb2FkZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvaWNvbi9JY29uTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBA
IHZvaWQgSWNvbkxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmUKICAgICAgICAgZGF0YSA9
IG51bGxwdHI7CiAKICAgICBjb25zdGV4cHIgdWludDhfdCBwZGZNYWdpY051bWJlcltdID0geyAn
JScsICdQJywgJ0QnLCAnRicgfTsKLSAgICBpZiAoZGF0YSAmJiBkYXRhLT5zdGFydHNXaXRoKFNw
YW4geyBwZGZNYWdpY051bWJlciwgc3RkOjpzaXplKHBkZk1hZ2ljTnVtYmVyKSB9KSkgeworICAg
IGlmIChkYXRhICYmIGRhdGEtPnN0YXJ0c1dpdGgocGRmTWFnaWNOdW1iZXIpKSB7CiAgICAgICAg
IExPRyhJY29uRGF0YWJhc2UsICJJY29uTG9hZGVyOjpmaW5pc2hMb2FkaW5nKCkgLSBJZ25vcmlu
ZyBpY29uIGF0ICVzIGJlY2F1c2UgaXQgYXBwZWFycyB0byBiZSBhIFBERiIsIG1fcmVzb3VyY2Ut
PnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKICAgICAgICAgZGF0YSA9IG51bGxwdHI7
CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9CYXNlNjRVdGlsaXRpZXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9CYXNlNjRVdGlsaXRpZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIEV4Y2VwdGlvbk9yPFN0cmluZz4gQmFz
ZTY0VXRpbGl0aWVzOjpidG8KICAgICBpZiAoIXN0cmluZ1RvRW5jb2RlLmlzQWxsTGF0aW4xKCkp
CiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IgfTsKIAot
ICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhzdHJpbmdUb0VuY29kZS5sYXRpbjEoKSk7
CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKHN0cmluZ1RvRW5jb2RlLmxhdGluMSgp
LmJ5dGVzKCkpOwogfQogCiBFeGNlcHRpb25PcjxTdHJpbmc+IEJhc2U2NFV0aWxpdGllczo6YXRv
Yihjb25zdCBTdHJpbmcmIGVuY29kZWRTdHJpbmcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgUmVmPFNoYXJlZEJ1ZmZlcj4gUGFzdGVib2FyZEN1
c3RvbURhdGE6OgogICAgIGVuY29kZXIgPDwgbV9vcmlnaW47CiAgICAgZW5jb2RlciA8PCBzYW1l
T3JpZ2luQ3VzdG9tU3RyaW5nRGF0YSgpOwogICAgIGVuY29kZXIgPDwgb3JkZXJlZFR5cGVzKCk7
Ci0gICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCksIGVuY29k
ZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZW5jb2Rl
ci5idWZmZXIoKSk7CiB9CiAKIFBhc3RlYm9hcmRDdXN0b21EYXRhIFBhc3RlYm9hcmRDdXN0b21E
YXRhOjpmcm9tUGVyc2lzdGVuY2VEZWNvZGVyKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXImJiBk
ZWNvZGVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwyMCArMzQsMTkgQEAKICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVVRGOENvbnZlcnNpb24u
aD4KIAotbmFtZXNwYWNlIFdlYkNvcmUgeworI2lmIFVTRShDRikKKyNpbmNsdWRlIDx3dGYvY2Yv
U3BhbkNGLmg+CisjZW5kaWYKIAotU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIoY29uc3QgdWlu
dDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCi17Ci0gICAgYXBwZW5kKGRhdGEsIHNpemUpOwotfQor
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1TaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihjb25zdCBj
aGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkKK1NoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKFNwYW48
Y29uc3Qgc3RkOjpieXRlPiBkYXRhKQogewotICAgIGFwcGVuZChyZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQ4X3QqPihkYXRhKSwgc2l6ZSk7CisgICAgYXBwZW5kKGRhdGEpOwogfQogCiBTaGFy
ZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIGZpbGVE
YXRhKQotICAgIDogbV9zaXplKGZpbGVEYXRhLnNpemUoKSkKKyAgICA6IG1fc2l6ZShmaWxlRGF0
YS5kYXRhKCkuc2l6ZSgpKQogewogICAgIG1fc2VnbWVudHMuYXBwZW5kKHswLCBEYXRhU2VnbWVu
dDo6Y3JlYXRlKFdURk1vdmUoZmlsZURhdGEpKX0pOwogfQpAQCAtMTg4LDEzICsxODcsMTMgQEAg
dm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVuZChjb25zdCBTaGFyZWRCdQogICAgIEFTU0VSVChpbnRl
cm5hbGx5Q29uc2lzdGVudCgpKTsKIH0KIAotdm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVuZChjb25z
dCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoKQordm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVu
ZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKICAgICBBU1NFUlQoIW1faGFzQmVlbkNv
bWJpbmVkSW50b09uZVNlZ21lbnQpOwogICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3I7Ci0gICAg
dmVjdG9yLmFwcGVuZChkYXRhLCBsZW5ndGgpOwotICAgIG1fc2VnbWVudHMuYXBwZW5kKHttX3Np
emUsIERhdGFTZWdtZW50OjpjcmVhdGUoV1RGTW92ZSh2ZWN0b3IpKX0pOwotICAgIG1fc2l6ZSAr
PSBsZW5ndGg7CisgICAgdmVjdG9yLmFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKTsKKyAgICBtX3NlZ21lbnRzLmFwcGVuZCh7
IG1fc2l6ZSwgRGF0YVNlZ21lbnQ6OmNyZWF0ZShXVEZNb3ZlKHZlY3RvcikpIH0pOworICAgIG1f
c2l6ZSArPSBkYXRhLnNpemUoKTsKICAgICBBU1NFUlQoaW50ZXJuYWxseUNvbnNpc3RlbnQoKSk7
CiB9CiAKQEAgLTIzMiw3ICsyMzEsNyBAQCB2b2lkIFNoYXJlZEJ1ZmZlcjo6Zm9yRWFjaFNlZ21l
bnQoY29uc3QgCiAgICAgICAgIGFwcGx5KFNwYW4geyBzZWdtZW50LnNlZ21lbnQtPmRhdGEoKSwg
c2VnbWVudC5zZWdtZW50LT5zaXplKCkgfSk7CiB9CiAKLWJvb2wgU2hhcmVkQnVmZmVyOjpzdGFy
dHNXaXRoKGNvbnN0IFNwYW48Y29uc3QgdWludDhfdD4mIHByZWZpeCkgY29uc3QKK2Jvb2wgU2hh
cmVkQnVmZmVyOjpzdGFydHNXaXRoKGNvbnN0IFNwYW48Y29uc3Qgc3RkOjpieXRlPiYgcHJlZml4
KSBjb25zdAogewogICAgIGlmIChwcmVmaXguZW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC0yNDAsNyArMjM5LDcgQEAgYm9vbCBTaGFyZWRCdWZmZXI6OnN0YXJ0c1dpdGgoY29uc3Qg
U3BhbgogICAgIGlmIChzaXplKCkgPCBwcmVmaXguc2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBjb25zdCB1aW50OF90KiBwcmVmaXhQdHIgPSBwcmVmaXguZGF0YSgpOworICAg
IGF1dG8qIHByZWZpeFB0ciA9IHByZWZpeC5kYXRhKCk7CiAgICAgc2l6ZV90IHJlbWFpbmluZyA9
IHByZWZpeC5zaXplKCk7CiAgICAgZm9yIChhdXRvJiBzZWdtZW50IDogbV9zZWdtZW50cykgewog
ICAgICAgICBzaXplX3QgYW1vdW50VG9Db21wYXJlVGhpc1RpbWUgPSBzdGQ6Om1pbihyZW1haW5p
bmcsIHNlZ21lbnQuc2VnbWVudC0+c2l6ZSgpKTsKQEAgLTMwMSw5ICszMDAsMzggQEAgY29uc3Qg
dWludDhfdCogU2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVudAogI2lmIFVTRShHU1RSRUFNRVIpCiAg
ICAgICAgIFtdKGNvbnN0IFJlZlB0cjxHc3RNYXBwZWRPd25lZEJ1ZmZlcj4mIGRhdGEpIHsgcmV0
dXJuIGRhdGEtPmRhdGEoKTsgfSwKICNlbmRpZgotICAgICAgICBbXShjb25zdCBGaWxlU3lzdGVt
OjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGRhdGEuZGF0YSgpKTsgfQorICAgICAgICBbXShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRG
aWxlRGF0YSYgZGF0YSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4o
ZGF0YS5kYXRhKCkuZGF0YSgpKTsgfQorICAgICk7CisgICAgcmV0dXJuIFdURjo6dmlzaXQodmlz
aXRvciwgbV9pbW11dGFibGVEYXRhKTsKK30KKworU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IFNoYXJl
ZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmJ5dGVzKCkgY29uc3QKK3sKKyAgICBhdXRvIHZpc2l0b3Ig
PSBXVEY6Om1ha2VWaXNpdG9yKAorICAgICAgICBbXShjb25zdCBWZWN0b3I8dWludDhfdD4mIGRh
dGEpIHsKKyAgICAgICAgICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBkYXRhIH0pOworICAgICAg
ICB9LAorI2lmIFVTRShDRikKKyAgICAgICAgW10oY29uc3QgUmV0YWluUHRyPENGRGF0YVJlZj4m
IGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBhc0J5dGVzKGRhdGEuZ2V0KCkpOworICAgICAg
ICB9LAorI2VuZGlmCisjaWYgVVNFKEdMSUIpCisgICAgICAgIFtdKGNvbnN0IEdSZWZQdHI8R0J5
dGVzPiYgZGF0YSkgeworICAgICAgICAgICAgcmV0dXJuIGFzQnl0ZXMoU3BhbiB7IHN0YXRpY19j
YXN0PGNvbnN0IHVpbnQ4X3QqPihnX2J5dGVzX2dldF9kYXRhKGRhdGEuZ2V0KCksIG51bGxwdHIp
KSwgZ19ieXRlc19nZXRfc2l6ZShkYXRhLmdldCgpKSB9KTsKKyAgICAgICAgfSwKKyNlbmRpZgor
I2lmIFVTRShHU1RSRUFNRVIpCisgICAgICAgIFtdKGNvbnN0IFJlZlB0cjxHc3RNYXBwZWRPd25l
ZEJ1ZmZlcj4mIGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBkYXRh
LT5kYXRhKCksIGRhdGEtPnNpemUoKSB9KTsKKyAgICAgICAgfSwKKyNlbmRpZgorICAgICAgICBb
XShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeworICAgICAgICAgICAg
cmV0dXJuIGRhdGEuZGF0YSgpOworICAgICAgICB9CiAgICAgKTsKICAgICByZXR1cm4gV1RGOjp2
aXNpdCh2aXNpdG9yLCBtX2ltbXV0YWJsZURhdGEpOworCiB9CiAKIGJvb2wgU2hhcmVkQnVmZmVy
OjpEYXRhU2VnbWVudDo6Y29udGFpbnNNYXBwZWRGaWxlRGF0YSgpIGNvbnN0CkBAIC0zMTksNyAr
MzQ3LDcgQEAgdm9pZCBTaGFyZWRCdWZmZXI6OmhpbnRNZW1vcnlOb3ROZWVkZWRTbwogCiBXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyIFNoYXJlZEJ1ZmZlcjo6ZGVjb2RlcigpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIHsgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSgpKSwgc2l6
ZSgpIH07CisgICAgcmV0dXJuIHsgYnl0ZXMoKSB9OwogfQogCiBib29sIFNoYXJlZEJ1ZmZlcjo6
b3BlcmF0b3I9PShjb25zdCBTaGFyZWRCdWZmZXImIG90aGVyKSBjb25zdApAQCAtMzg0LDcgKzQx
Miw3IEBAIHNpemVfdCBTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpzaXplKCkKICNpZiBVU0Uo
R1NUUkVBTUVSKQogICAgICAgICBbXShjb25zdCBSZWZQdHI8R3N0TWFwcGVkT3duZWRCdWZmZXI+
JiBkYXRhKSB7IHJldHVybiBkYXRhLT5zaXplKCk7IH0sCiAjZW5kaWYKLSAgICAgICAgW10oY29u
c3QgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsgcmV0dXJuIGRhdGEuc2l6ZSgp
OyB9CisgICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBkYXRhKSB7
IHJldHVybiBkYXRhLmRhdGEoKS5zaXplKCk7IH0KICAgICApOwogICAgIHJldHVybiBXVEY6OnZp
c2l0KHZpc2l0b3IsIG1faW1tdXRhYmxlRGF0YSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TaGFyZWRCdWZmZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDggKzY3LDEyIEBA
IGNsYXNzIFNoYXJlZEJ1ZmZlckRhdGFWaWV3OwogY2xhc3MgV0VCQ09SRV9FWFBPUlQgU2hhcmVk
QnVmZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8U2hhcmVkQnVmZmVyPiB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
U2hhcmVkQnVmZmVyKTsgfQotICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoY29u
c3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hh
cmVkQnVmZmVyKGRhdGEsIHNpemUpKTsgfQotICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBj
cmVhdGUoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpIHsgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU2hhcmVkQnVmZmVyKGRhdGEsIHNpemUpKTsgfQorICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVm
ZmVyPiBjcmVhdGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpIHsgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU2hhcmVkQnVmZmVyKGRhdGEpKTsgfQorICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVy
PiBjcmVhdGUoU3Bhbjxjb25zdCB1aW50OF90PiBkYXRhKSB7IHJldHVybiBjcmVhdGUoYXNCeXRl
cyhkYXRhKSk7IH0KKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKFNwYW48Y29u
c3QgY2hhcj4gZGF0YSkgeyByZXR1cm4gY3JlYXRlKGFzQnl0ZXMoZGF0YSkpOyB9CisgICAgc3Rh
dGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShjb25zdCBzdGQ6OmJ5dGUqIGRhdGEsIHNpemVf
dCBzaXplKSB7IHJldHVybiBjcmVhdGUoU3BhbiB7IGRhdGEsIHNpemUgfSk7IH0KKyAgICBzdGF0
aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBz
aXplKSB7IHJldHVybiBjcmVhdGUoU3BhbiB7IGRhdGEsIHNpemUgfSk7IH0KKyAgICBzdGF0aWMg
UmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKSB7
IHJldHVybiBjcmVhdGUoU3BhbiB7IGRhdGEsIHNpemUgfSk7IH0KICAgICBzdGF0aWMgUmVmPFNo
YXJlZEJ1ZmZlcj4gY3JlYXRlKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYgbWFwcGVkRmls
ZURhdGEpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hhcmVkQnVmZmVyKFdURk1vdmUobWFwcGVk
RmlsZURhdGEpKSk7IH0KIAogICAgIGVudW0gY2xhc3MgTWF5VXNlRmlsZU1hcHBpbmcgOiBib29s
IHsgTm8sIFllcyB9OwpAQCAtMTAxLDYgKzEwNSw4IEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTog
QXVkaXQgdGhlIGNhbGwgc2l0ZXMgb2YgdGhpcyBmdW5jdGlvbiBhbmQgcmVwbGFjZSB0aGVtIHdp
dGggaXRlcmF0aW9uIGlmIHBvc3NpYmxlLgogICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEoKSBjb25z
dDsKICAgICBjb25zdCBjaGFyKiBkYXRhQXNDaGFyUHRyKCkgY29uc3QgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSgpKTsgfQorICAgIFNwYW48Y29uc3Qgc3RkOjpi
eXRlPiBieXRlcygpIGNvbnN0IHsgcmV0dXJuIGFzQnl0ZXMoU3BhbiB7IGRhdGEoKSwgc2l6ZSgp
IH0pOyB9CisKICAgICBWZWN0b3I8dWludDhfdD4gY29weURhdGEoKSB7IHJldHVybiB7IGRhdGEo
KSwgc2l6ZSgpIH07IH0KIAogICAgIC8vIENvbWJpbmVzIGFsbCB0aGUgc2VnbWVudHMgaW50byBh
IFZlY3RvciBhbmQgcmV0dXJucyB0aGF0IHZlY3RvciBhZnRlciBjbGVhcmluZyB0aGUgU2hhcmVk
QnVmZmVyLgpAQCAtMTE1LDggKzEyMSwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gIXNpemUoKTsgfQogCiAgICAgdm9pZCBhcHBlbmQoY29uc3QgU2hhcmVk
QnVmZmVyJik7Ci0gICAgdm9pZCBhcHBlbmQoY29uc3QgdWludDhfdCosIHNpemVfdCk7Ci0gICAg
dm9pZCBhcHBlbmQoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCkgeyBhcHBlbmQocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSksIGxlbmd0aCk7IH0KKyAgICB2b2lk
IGFwcGVuZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOworICAgIHZvaWQgYXBwZW5kKFNwYW48Y29u
c3QgdWludDhfdD4gZGF0YSkgeyBhcHBlbmQoYXNCeXRlcyhkYXRhKSk7IH0KKyAgICB2b2lkIGFw
cGVuZChTcGFuPGNvbnN0IGNoYXI+IGRhdGEpIHsgYXBwZW5kKGFzQnl0ZXMoZGF0YSkpOyB9Cisg
ICAgdm9pZCBhcHBlbmQoY29uc3Qgc3RkOjpieXRlKiBkYXRhLCBzaXplX3QgbGVuZ3RoKSB7IGFw
cGVuZChTcGFuIHsgZGF0YSwgbGVuZ3RoIH0pOyB9CisgICAgdm9pZCBhcHBlbmQoY29uc3QgdWlu
dDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCkgeyBhcHBlbmQoU3BhbiB7IGRhdGEsIGxlbmd0aCB9
KTsgfQorICAgIHZvaWQgYXBwZW5kKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpIHsg
YXBwZW5kKFNwYW4geyBkYXRhLCBsZW5ndGggfSk7IH0KICAgICB2b2lkIGFwcGVuZChWZWN0b3I8
dWludDhfdD4mJik7CiAKICAgICB2b2lkIGNsZWFyKCk7CkBAIC0xMzEsNiArMTQxLDggQEAgcHVi
bGljOgogICAgICAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCB1aW50OF90KiBkYXRhKCkgY29uc3Q7
CiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIHNpemVfdCBzaXplKCkgY29uc3Q7CiAKKyAgICAgICAg
V0VCQ09SRV9FWFBPUlQgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGJ5dGVzKCkgY29uc3Q7CisKICAg
ICAgICAgc3RhdGljIFJlZjxEYXRhU2VnbWVudD4gY3JlYXRlKFZlY3Rvcjx1aW50OF90PiYmIGRh
dGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIGRhdGEuc2hyaW5rVG9GaXQoKTsKQEAgLTE4Nyw3
ICsxOTksOSBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIHZvaWQgZm9yRWFjaFNlZ21lbnQoY29u
c3QgRnVuY3Rpb248dm9pZChjb25zdCBTcGFuPGNvbnN0IHVpbnQ4X3Q+Jik+JikgY29uc3Q7Ci0g
ICAgYm9vbCBzdGFydHNXaXRoKGNvbnN0IFNwYW48Y29uc3QgdWludDhfdD4mIHByZWZpeCkgY29u
c3Q7CisKKyAgICBib29sIHN0YXJ0c1dpdGgoY29uc3QgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+JiBw
cmVmaXgpIGNvbnN0OworICAgIGJvb2wgc3RhcnRzV2l0aChjb25zdCBTcGFuPGNvbnN0IHVpbnQ4
X3Q+JiBwcmVmaXgpIGNvbnN0IHsgcmV0dXJuIHN0YXJ0c1dpdGgoYXNCeXRlcyhwcmVmaXgpKTsg
fQogCiAgICAgc3RydWN0IERhdGFTZWdtZW50VmVjdG9yRW50cnkgewogICAgICAgICBzaXplX3Qg
YmVnaW5Qb3NpdGlvbjsKQEAgLTIxMiw4ICsyMjYsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAg
ICAgZXhwbGljaXQgU2hhcmVkQnVmZmVyKCkgPSBkZWZhdWx0OwotICAgIGV4cGxpY2l0IFNoYXJl
ZEJ1ZmZlcihjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKLSAgICBleHBsaWNpdCBTaGFyZWRCdWZm
ZXIoY29uc3QgY2hhciosIHNpemVfdCk7CisgICAgZXhwbGljaXQgU2hhcmVkQnVmZmVyKFNwYW48
Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgZXhwbGljaXQgU2hhcmVkQnVmZmVyKFZlY3Rvcjx1aW50
OF90PiYmKTsKICAgICBleHBsaWNpdCBTaGFyZWRCdWZmZXIoRmlsZVN5c3RlbTo6TWFwcGVkRmls
ZURhdGEmJik7CiAjaWYgVVNFKENGKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vY29jb2EvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29h
L0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3
IEBACiAKICNpbmNsdWRlICJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSA8Q29y
ZUF1ZGlvL0NvcmVBdWRpb1R5cGVzLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC04MCwxMyArODEsMTMgQEAgcHJpdmF0ZToKIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+CiB2b2lkIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0CiB7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oJm1fc3RyZWFtRGVzY3JpcHRpb24pLCBz
aXplb2YobV9zdHJlYW1EZXNjcmlwdGlvbiksIDEpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKFNwYW4geyAmbV9zdHJlYW1EZXNjcmlwdGlvbiwgMSB9LCAxKTsKIH0KIAogdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4KIGJvb2wgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlciwgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBkZXNjcmlwdGlv
bikKIHsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oJmRlc2NyaXB0aW9uLm1fc3RyZWFtRGVzY3JpcHRpb24pLCBzaXpl
b2YoZGVzY3JpcHRpb24ubV9zdHJlYW1EZXNjcmlwdGlvbiksIDEpOworICAgIHJldHVybiBkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJmRlc2NyaXB0aW9uLm1fc3RyZWFtRGVz
Y3JpcHRpb24sIDEgfSwgMSk7CiB9CiAKIGlubGluZSBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24g
dG9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oY29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYg
ZGVzY3JpcHRpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRp
YS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVh
cmtleS9DRE1DbGVhcktleS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OCwxNSArMTk4LDEzIEBA
IHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBleHRyYWN0S2V5aWRzRnIKIHsKICAgICBSZWY8U2hh
cmVkQnVmZmVyPiBrZXlJZHMgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZSgpOwogCi0gICAgc3RkOjpw
YWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4ga2V5SWRzTWFwID0gZXh0cmFjdEtleWlkc0xvY2F0aW9u
RnJvbUNlbmNJbml0RGF0YShpbml0RGF0YSk7Ci0gICAgdW5zaWduZWQga2V5SWRDb3VudCA9IGtl
eUlkc01hcC5maXJzdDsKLSAgICB1bnNpZ25lZCBpbmRleCA9IGtleUlkc01hcC5zZWNvbmQ7Cisg
ICAgYXV0byBba2V5SWRDb3VudCwgaW5kZXhdID0gZXh0cmFjdEtleWlkc0xvY2F0aW9uRnJvbUNl
bmNJbml0RGF0YShpbml0RGF0YSk7CiAKICAgICAvLyBDaGVjayBpZiBpbml0RGF0YSBpcyBhIHZh
bGlkIENFTkMgaW5pdERhdGEuCiAgICAgaWYgKCFrZXlJZENvdW50IHx8ICFpbmRleCkKICAgICAg
ICAgcmV0dXJuIGtleUlkczsKIAotICAgIGF1dG8qIGRhdGEgPSBpbml0RGF0YS5kYXRhKCk7Cisg
ICAgYXV0byBkYXRhID0gaW5pdERhdGEuYnl0ZXMoKTsKIAogICAgIGF1dG8gb2JqZWN0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBhdXRvIGtleUlkc0FycmF5ID0gSlNPTjo6QXJyYXk6
OmNyZWF0ZSgpOwpAQCAtMjE4LDcgKzIxNiw3IEBAIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBl
eHRyYWN0S2V5aWRzRnIKICAgICAvLyAia2lkcyIKICAgICAvLyBBbiBhcnJheSBvZiBrZXkgSURz
LiBFYWNoIGVsZW1lbnQgb2YgdGhlIGFycmF5IGlzIHRoZSBiYXNlNjR1cmwgZW5jb2Rpbmcgb2Yg
dGhlIG9jdGV0IHNlcXVlbmNlIGNvbnRhaW5pbmcgdGhlIGtleSBJRCB2YWx1ZS4KICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5SWRDb3VudDsgaSsrKSB7Ci0gICAgICAgIGtleUlkc0Fy
cmF5LT5wdXNoU3RyaW5nKGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKCZkYXRhW2luZGV4XSwgQ2xl
YXJLZXk6OktleUlEU2l6ZUluQnl0ZXMpKTsKKyAgICAgICAga2V5SWRzQXJyYXktPnB1c2hTdHJp
bmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoZGF0YS5zdWJzcGFuKGluZGV4LCBDbGVhcktleTo6
S2V5SURTaXplSW5CeXRlcykpKTsKICAgICAgICAgaW5kZXggKz0gQ2xlYXJLZXk6OktleUlEU2l6
ZUluQnl0ZXM7CiAgICAgfQogCkBAIC0yNDUsNyArMjQzLDcgQEAgc3RhdGljIFJlZjxTaGFyZWRC
dWZmZXI+IGV4dHJhY3RLZXlJZEZybwogICAgIC8vIFRoZSBmb3JtYXQgaXMgYSBKU09OIG9iamVj
dCBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgbWVtYmVyczoKICAgICAvLyAia2lkcyIKICAgICAv
LyBBbiBhcnJheSBvZiBrZXkgSURzLiBFYWNoIGVsZW1lbnQgb2YgdGhlIGFycmF5IGlzIHRoZSBi
YXNlNjR1cmwgZW5jb2Rpbmcgb2YgdGhlIG9jdGV0IHNlcXVlbmNlIGNvbnRhaW5pbmcgdGhlIGtl
eSBJRCB2YWx1ZS4KLSAgICBrZXlJZHNBcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVU
b1N0cmluZyhpbml0RGF0YS5kYXRhKCksIGluaXREYXRhLnNpemUoKSkpOworICAgIGtleUlkc0Fy
cmF5LT5wdXNoU3RyaW5nKGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGluaXREYXRhLmJ5dGVzKCkp
KTsKIAogICAgIG9iamVjdC0+c2V0QXJyYXkoImtpZHMiLCBXVEZNb3ZlKGtleUlkc0FycmF5KSk7
CiAgICAgQ1N0cmluZyBqc29uRGF0YSA9IG9iamVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgpOwpA
QCAtNTc4LDkgKzU3Niw4IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlbW92
ZVMKIAogICAgIC8vIENvbnN0cnVjdCB0aGUgS2V5U3RhdHVzVmVjdG9yIG9iamVjdCwgcmVwcmVz
ZW50aW5nIHJlbGVhc2VkIGtleXMsIGFuZCB0aGUgbWVzc2FnZSBpbiB0aGUKICAgICAvLyAnbGlj
ZW5zZSByZWxlYXNlJyBmb3JtYXQuCi0gICAgS2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1c1ZlY3Rv
ciA9IG1fa2V5U3RvcmUuYWxsS2V5c0FzKENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpS
ZWxlYXNlZCk7Ci0gICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbWVzc2FnZTsKLSAgICB7CisgICAg
YXV0byBrZXlTdGF0dXNWZWN0b3IgPSBtX2tleVN0b3JlLmFsbEtleXNBcyhDRE1JbnN0YW5jZVNl
c3Npb246OktleVN0YXR1czo6UmVsZWFzZWQpOworICAgIGF1dG8gbWVzc2FnZSA9IFsmXXsKICAg
ICAgICAgLy8gQ29uc3RydWN0IEpTT04gdGhhdCByZXByZXNlbnRzIHRoZSAnbGljZW5zZSByZWxl
YXNlJyBmb3JtYXQsIGNyZWF0aW5nIGEgJ2tpZHMnIGFycmF5CiAgICAgICAgIC8vIG9mIGJhc2U2
NFVSTC1lbmNvZGVkIGtleSBJRHMgZm9yIGFsbCBrZXlzIHRoYXQgd2VyZSBhc3NvY2lhdGVkIHdp
dGggdGhpcyBzZXNzaW9uLgogICAgICAgICBhdXRvIHJvb3RPYmplY3QgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwpAQCAtNTg4LDcgKzU4NSw3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xl
YXJLZXk6OnJlbW92ZVMKICAgICAgICAgICAgIGF1dG8gYXJyYXkgPSBKU09OOjpBcnJheTo6Y3Jl
YXRlKCk7CiAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IG1fa2V5U3RvcmUpIHsK
ICAgICAgICAgICAgICAgICBBU1NFUlQoa2V5LT5pZCgpLnNpemUoKSA8PSBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOwotICAgICAgICAgICAgICAgIGFycmF5LT5wdXNoU3Ry
aW5nKGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGtleS0+aWQoKS5kYXRhKCksIGtleS0+aWQoKS5z
aXplKCkpKTsKKyAgICAgICAgICAgICAgICBhcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNv
ZGVUb1N0cmluZyhrZXktPmlkKCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJvb3RP
YmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92ZShhcnJheSkpOwogICAgICAgICB9CkBAIC01
OTYsMTEgKzU5MywxMSBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVT
CiAgICAgICAgIC8vIENvcHkgdGhlIEpTT04gZGF0YSBpbnRvIGEgU2hhcmVkQnVmZmVyIG9iamVj
dC4KICAgICAgICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmcgPSByb290T2JqZWN0LT50b0pTT05TdHJp
bmcoKTsKICAgICAgICAgQ1N0cmluZyBtZXNzYWdlQ1N0cmluZyA9IG1lc3NhZ2VTdHJpbmcudXRm
OCgpOwotICAgICAgICBtZXNzYWdlID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUobWVzc2FnZUNTdHJp
bmcuZGF0YSgpLCBtZXNzYWdlQ1N0cmluZy5sZW5ndGgoKSk7Ci0gICAgfQorICAgICAgICByZXR1
cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUobWVzc2FnZUNTdHJpbmcuZGF0YSgpLCBtZXNzYWdlQ1N0
cmluZy5sZW5ndGgoKSk7CisgICAgfSgpOwogCiAgICAgbV9rZXlTdG9yZS5yZW1vdmVBbGxLZXlz
KCk7Ci0gICAgZGlzcGF0Y2hDYWxsYmFjayhXVEZNb3ZlKGtleVN0YXR1c1ZlY3RvciksIFJlZjxT
aGFyZWRCdWZmZXI+KCptZXNzYWdlKSwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVkZWQpOworICAgIGRp
c3BhdGNoQ2FsbGJhY2soV1RGTW92ZShrZXlTdGF0dXNWZWN0b3IpLCBXVEZNb3ZlKG1lc3NhZ2Up
LCBTdWNjZXNzVmFsdWU6OlN1Y2NlZWRlZCk7CiB9CiAKIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9u
Q2xlYXJLZXk6OnN0b3JlUmVjb3JkT2ZLZXlVc2FnZShjb25zdCBTdHJpbmcmKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9LZXllZERlY29kZXJHZW5lcmljLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL0tleWVkRGVjb2Rlckdl
bmVyaWMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
ZW5lcmljL0tleWVkRGVjb2RlckdlbmVyaWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1
OCw3IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gcmVhZFN0cmluZygKICAgICAgICAg
cmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyKHNpemUu
dmFsdWUoKSk7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShidWZmZXIu
ZGF0YSgpLCBzaXplLnZhbHVlKCkpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0
aERhdGEoYnVmZmVyKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICBhdXRvIHJl
c3VsdCA9IFN0cmluZzo6ZnJvbVVURjgoYnVmZmVyLmRhdGEoKSwgc2l6ZS52YWx1ZSgpKTsKICAg
ICBpZiAocmVzdWx0LmlzTnVsbCgpKQpAQCAtODgsNyArODgsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8
S2V5ZWREZWNvZGVyPiBLZXllZERlY29kCiAKIEtleWVkRGVjb2RlckdlbmVyaWM6OktleWVkRGVj
b2RlckdlbmVyaWMoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCiB7Ci0gICAgV1RG
OjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOworICAgIFdURjo6UGVy
c2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihTcGFuIHsgZGF0YSwgc2l6ZSB9KTsKIAogICAgIG1f
cm9vdERpY3Rpb25hcnkgPSBtYWtlVW5pcXVlPERpY3Rpb25hcnk+KCk7CiAgICAgbV9kaWN0aW9u
YXJ5U3RhY2suYXBwZW5kKG1fcm9vdERpY3Rpb25hcnkuZ2V0KCkpOwpAQCAtMTE3LDcgKzExNyw3
IEBAIEtleWVkRGVjb2RlckdlbmVyaWM6OktleWVkRGVjb2RlckdlbmVyaWMKICAgICAgICAgICAg
IGlmICghb2spCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBWZWN0b3I8dWlu
dDhfdD4gYnVmZmVyKCpzaXplKTsKLSAgICAgICAgICAgIG9rID0gZGVjb2Rlci5kZWNvZGVGaXhl
ZExlbmd0aERhdGEoYnVmZmVyLmRhdGEoKSwgKnNpemUpOworICAgICAgICAgICAgb2sgPSBkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShidWZmZXIpOwogICAgICAgICAgICAgaWYgKCFvaykK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIG1fZGljdGlvbmFyeVN0YWNrLmxh
c3QoKS0+YWRkKCprZXksIFdURk1vdmUoYnVmZmVyKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9nZW5lcmljL0tleWVkRW5jb2RlckdlbmVyaWMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvS2V5ZWRFbmNvZGVyR2VuZXJpYy5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvS2V5ZWRF
bmNvZGVyR2VuZXJpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgdm9pZCBL
ZXllZEVuY29kZXJHZW5lcmljOjplbmNvZGVTdHJpbmcoYwogewogICAgIGF1dG8gdXRmOCA9IGtl
eS51dGY4KCk7CiAgICAgbV9lbmNvZGVyIDw8IHV0ZjgubGVuZ3RoKCk7Ci0gICAgbV9lbmNvZGVy
LmVuY29kZUZpeGVkTGVuZ3RoRGF0YSh1dGY4LmRhdGFBc1VJbnQ4UHRyKCksIHV0ZjgubGVuZ3Ro
KCkpOworICAgIG1fZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEodXRmOC5ieXRlcygpKTsK
IH0KIAogdm9pZCBLZXllZEVuY29kZXJHZW5lcmljOjplbmNvZGVCeXRlcyhjb25zdCBTdHJpbmcm
IGtleSwgY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBzaXplKQpAQCAtNDgsNyArNDgsNyBA
QCB2b2lkIEtleWVkRW5jb2RlckdlbmVyaWM6OmVuY29kZUJ5dGVzKGNvCiAgICAgbV9lbmNvZGVy
IDw8IFR5cGU6OkJ5dGVzOwogICAgIGVuY29kZVN0cmluZyhrZXkpOwogICAgIG1fZW5jb2RlciA8
PCBzaXplOwotICAgIG1fZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYnl0ZXMsIHNpemUp
OworICAgIG1fZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IGJ5dGVzLCBzaXpl
IH0pOwogfQogCiB2b2lkIEtleWVkRW5jb2RlckdlbmVyaWM6OmVuY29kZUJvb2woY29uc3QgU3Ry
aW5nJiBrZXksIGJvb2wgdmFsdWUpCkBAIC0xNDEsNyArMTQxLDcgQEAgdm9pZCBLZXllZEVuY29k
ZXJHZW5lcmljOjplbmRBcnJheSgpCiAKIFJlZlB0cjxTaGFyZWRCdWZmZXI+IEtleWVkRW5jb2Rl
ckdlbmVyaWM6OmZpbmlzaEVuY29kaW5nKCkKIHsKLSAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpj
cmVhdGUobV9lbmNvZGVyLmJ1ZmZlcigpLCBtX2VuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICBy
ZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUobV9lbmNvZGVyLmJ1ZmZlcigpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvTW9kZWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Nb2RlbC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Nb2RlbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+CiB2b2lkIE1vZGVsOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKIHsKICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHNpemVfdD4obV9kYXRhLT5zaXplKCkp
OwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKG1fZGF0YS0+ZGF0YSgpLCBtX2Rh
dGEtPnNpemUoKSwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEobV9kYXRh
LT5ieXRlcygpLCAxKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KQEAgLTc0LDcgKzc0
LDcgQEAgUmVmUHRyPE1vZGVsPiBNb2RlbDo6ZGVjb2RlKERlY29kZXImIGRlYwogCiAgICAgVmVj
dG9yPHVpbnQ4X3Q+IGRhdGE7CiAgICAgZGF0YS5ncm93KCpsZW5ndGgpOwotICAgIGlmICghZGVj
b2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAxKSkK
KyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGRhdGEsIDEpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBNb2RlbDo6Y3JlYXRlKFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKFdURk1vdmUoZGF0YSkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BpeGVsQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtODIsNyArODIsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIFBpeGVsQnVmZmVy
CiAKICAgICBlbmNvZGVyIDw8IG1fZm9ybWF0OwogICAgIGVuY29kZXIgPDwgbV9zaXplOwotICAg
IGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPmJ5
dGVMZW5ndGgoKSwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEobV9kYXRh
LT5ieXRlcygpLCAxKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RkOjpvcHRpb25h
bDxQaXhlbEJ1ZmZlcj4gUGl4ZWxCdWZmZXI6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQpAQCAt
MTEzLDcgKzExMyw3IEBAIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0ZDo6b3B0aW9uYWw8UGkK
ICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIGlm
ICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVzdWx0LT5tX2RhdGEtPmRhdGEoKSwg
cmVzdWx0LT5tX2RhdGEtPmJ5dGVMZW5ndGgoKSwgMSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZUZpeGVkTGVuZ3RoRGF0YShyZXN1bHQtPm1fZGF0YS0+d3JpdGFibGVCeXRlcygpLCAxKSkKICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0
YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQ
bGF5U3RyZWFtaW5nQVZGT2JqQy5tbQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxh
eVN0cmVhbWluZ0FWRk9iakMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAKICNp
bXBvcnQgPHd0Zi9GaWxlU3lzdGVtLmg+CiAjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgogI2lt
cG9ydCA8d3RmL0xvZ2dlckhlbHBlci5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1NwYW5Db2NvYS5o
PgogI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9C
YXNlNjQuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KQEAgLTcxNSw3ICs3MTYs
NyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nCiAgICAgICAgIGlk
ZW50aWZpZXIgPSBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTppbml0RGF0
YS0+Y3JlYXRlTlNEYXRhKCkuZ2V0KCkgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddKTsK
ICNpZiBIQVZFKEZBSVJQTEFZU1RSRUFNSU5HX0NFTkNfSU5JVERBVEEpCiAgICAgZWxzZSBpZiAo
aW5pdERhdGFUeXBlID09IEluaXREYXRhUmVnaXN0cnk6OmNlbmNOYW1lKCkpIHsKLSAgICAgICAg
YXV0byBwc3NoU3RyaW5nID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5pdERhdGEtPmRhdGEoKSwg
aW5pdERhdGEtPnNpemUoKSk7CisgICAgICAgIGF1dG8gcHNzaFN0cmluZyA9IGJhc2U2NEVuY29k
ZVRvU3RyaW5nKGluaXREYXRhLT5ieXRlcygpKTsKICAgICAgICAgaW5pdGlhbGl6YXRpb25EYXRh
ID0gW05TSlNPTlNlcmlhbGl6YXRpb24gZGF0YVdpdGhKU09OT2JqZWN0OkB7IEAicHNzaCI6IChO
U1N0cmluZyopcHNzaFN0cmluZyB9IG9wdGlvbnM6TlNKU09OV3JpdGluZ1ByZXR0eVByaW50ZWQg
ZXJyb3I6bmlsXTsKICAgICB9CiAjZW5kaWYKQEAgLTExOTEsMTIgKzExOTIsMTAgQEAgdm9pZCBD
RE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZwogICAgICAgICB9CiAKICAgICAgICAg
YXV0byByZXF1ZXN0SlNPTiA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKLSAgICAgICAgZm9yIChh
dXRvJiByZXF1ZXN0RGF0YSA6IHJlcXVlc3RzRGF0YSkgeworICAgICAgICBmb3IgKGF1dG8mIFtr
ZXlJRCwgcGF5bG9hZF0gOiByZXF1ZXN0c0RhdGEpIHsKICAgICAgICAgICAgIGF1dG8gZW50cnkg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICAgICAgYXV0byYga2V5SUQgPSByZXF1
ZXN0RGF0YS5maXJzdDsKLSAgICAgICAgICAgIGF1dG8mIHBheWxvYWQgPSByZXF1ZXN0RGF0YS5z
ZWNvbmQ7Ci0gICAgICAgICAgICBlbnRyeS0+c2V0U3RyaW5nKCJrZXlJRCIsIGJhc2U2NEVuY29k
ZVRvU3RyaW5nKGtleUlELT5kYXRhKCksIGtleUlELT5zaXplKCkpKTsKLSAgICAgICAgICAgIGVu
dHJ5LT5zZXRTdHJpbmcoInBheWxvYWQiLCBiYXNlNjRFbmNvZGVUb1N0cmluZyhwYXlsb2FkLmdl
dCgpLmJ5dGVzLCBwYXlsb2FkLmdldCgpLmxlbmd0aCkpOworICAgICAgICAgICAgZW50cnktPnNl
dFN0cmluZygia2V5SUQiLCBiYXNlNjRFbmNvZGVUb1N0cmluZyhrZXlJRC0+Ynl0ZXMoKSkpOwor
ICAgICAgICAgICAgZW50cnktPnNldFN0cmluZygicGF5bG9hZCIsIGJhc2U2NEVuY29kZVRvU3Ry
aW5nKGFzQnl0ZXMocGF5bG9hZC5nZXQoKSkpKTsKICAgICAgICAgICAgIHJlcXVlc3RKU09OLT5w
dXNoT2JqZWN0KFdURk1vdmUoZW50cnkpKTsKICAgICAgICAgfQogICAgICAgICBhdXRvIHJlcXVl
c3RCdWZmZXIgPSB1dGY4QnVmZmVyKHJlcXVlc3RKU09OLT50b0pTT05TdHJpbmcoKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
QmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
QmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw3ICsxMzIsNyBAQCBTdHJpbmcgSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YVVSCiAgICAgaWYgKGVuY29kZWRJbWFnZS5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiAiZGF0YTosIjsKIAotICAgIHJldHVybiBtYWtlU3RyaW5n
KCJkYXRhOiIsIG1pbWVUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKGVuY29kZWRJbWFn
ZS5kYXRhKCksIGVuY29kZWRJbWFnZS5zaXplKCkpKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygi
ZGF0YToiLCBtaW1lVHlwZSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChlbmNvZGVkSW1hZ2Up
KTsKIH0KIAogVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGEo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCShyZXZpc2lvbiAyNzg4MDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRm
b3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCBzdGF0aWMgU3Ry
aW5nIGNyZWF0ZVVuaXF1ZUZvbnROYW1lKCkKICAgICBHVUlEIGZvbnRVdWlkOwogICAgIENvQ3Jl
YXRlR3VpZCgmZm9udFV1aWQpOwogCi0gICAgYXV0byBmb250TmFtZSA9IGJhc2U2NEVuY29kZVRv
U3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZmb250VXVpZCksIHNpemVvZihmb250VXVp
ZCkpOworICAgIGF1dG8gZm9udE5hbWUgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgJmZv
bnRVdWlkLCAxIH0pOwogICAgIEFTU0VSVChmb250TmFtZS5sZW5ndGgoKSA8IExGX0ZBQ0VTSVpF
KTsKICAgICByZXR1cm4gZm9udE5hbWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRm
b3JtRGF0YUNhaXJvLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIFN0cmluZyBjcmVhdGVVbmlxdWVGb250
TmFtZSgpCiAgICAgR1VJRCBmb250VXVpZDsKICAgICBDb0NyZWF0ZUd1aWQoJmZvbnRVdWlkKTsK
IAotICAgIGF1dG8gZm9udE5hbWUgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhyZWludGVycHJldF9j
YXN0PGNoYXIqPigmZm9udFV1aWQpLCBzaXplb2YoZm9udFV1aWQpKTsKKyAgICBhdXRvIGZvbnRO
YW1lID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoU3BhbiB7ICZmb250VXVpZCwgMSB9KTsKICAgICBB
U1NFUlQoZm9udE5hbWUubGVuZ3RoKCkgPCBMRl9GQUNFU0laRSk7CiAgICAgcmV0dXJuIGZvbnRO
YW1lOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRv
ck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU1NMS2V5
R2VuZXJhdG9yTWFjLm1tCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvU1NMS2V5R2VuZXJhdG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksNyAr
MjE5LDcgQEAgc3RhdGljIFN0cmluZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZwogICAgIGlm
IChTZWNBc24xRW5jb2RlSXRlbShjb2RlciwgJnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZSwg
c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlVGVtcGxhdGUsICZlbmNvZGVkU2lnbmVkUHVibGlj
S2V5QW5kQ2hhbGxlbmdlKSAhPSBub0VycikKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0g
ICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGVuY29kZWRTaWduZWRQdWJsaWNLZXlBbmRD
aGFsbGVuZ2UuRGF0YSwgZW5jb2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZS5MZW5ndGgp
OworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgZW5jb2RlZFNpZ25lZFB1
YmxpY0tleUFuZENoYWxsZW5nZS5EYXRhLCBlbmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxl
bmdlLkxlbmd0aCB9KTsKIH0KIAogQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291
cmNlQ2FwYWJpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcy5oCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1l
ZGlhU291cmNlQ2FwYWJpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCwxNiArMTE0LDE2
IEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBDYXBhYmlsaXR5VmFs
dWVPclJhbmdlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKLSAgICBlbmNvZGVy
LmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigm
bV9taW5PclZhbHVlKSwgc2l6ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZhbHVlVW5pb24pKTsK
LSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPigmbV9tYXgpLCBzaXplb2YoVmFsdWVVbmlvbiksIGFsaWdub2YoVmFsdWVVbmlv
bikpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmbV9taW5PclZh
bHVlLCAxIH0sIGFsaWdub2YoVmFsdWVVbmlvbikpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKFNwYW4geyAmbV9tYXgsIDEgfSwgYWxpZ25vZihWYWx1ZVVuaW9uKSk7CiAgICAg
ZW5jb2RlciA8PCBtX3R5cGU7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CiBib29sIENh
cGFiaWxpdHlWYWx1ZU9yUmFuZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBDYXBhYmlsaXR5
VmFsdWVPclJhbmdlJiB2YWx1ZU9yUmFuZ2UpCiB7Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2YWx1ZU9yUmFuZ2Uu
bV9taW5PclZhbHVlKSwgc2l6ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZhbHVlVW5pb24pKQot
ICAgICAgICAmJiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0
PHVpbnQ4X3QqPigmdmFsdWVPclJhbmdlLm1fbWF4KSwgc2l6ZW9mKFZhbHVlVW5pb24pLCBhbGln
bm9mKFZhbHVlVW5pb24pKQorICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0
YShTcGFuIHsgJnZhbHVlT3JSYW5nZS5tX21pbk9yVmFsdWUsIDEgfSwgYWxpZ25vZihWYWx1ZVVu
aW9uKSkKKyAgICAgICAgJiYgZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZ2
YWx1ZU9yUmFuZ2UubV9tYXgsIDEgfSwgYWxpZ25vZihWYWx1ZVVuaW9uKSkKICAgICAgICAgJiYg
ZGVjb2Rlci5kZWNvZGUodmFsdWVPclJhbmdlLm1fdHlwZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0
aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTM5LDEzICsxMzksMTMgQEAgc3RhdGljIHZvaWQgYWRkU3RyaW5n
VG9TSEExKFNIQTEmIHNoYTEsIAogCiAgICAgaWYgKHN0cmluZy5pczhCaXQoKSAmJiBzdHJpbmcu
aXNBbGxBU0NJSSgpKSB7CiAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbnVsbEJ5dGUgPSAwOwotICAg
ICAgICBzaGExLmFkZEJ5dGVzKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkp
OwotICAgICAgICBzaGExLmFkZEJ5dGVzKCZudWxsQnl0ZSwgMSk7CisgICAgICAgIHNoYTEuYWRk
Qnl0ZXMoU3BhbiB7IHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkgfSk7Cisg
ICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZudWxsQnl0ZSwgMSB9KTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIGF1dG8gdXRmOCA9IHN0cmluZy51dGY4KCk7Ci0gICAgc2hhMS5h
ZGRCeXRlcyh1dGY4LmRhdGFBc1VJbnQ4UHRyKCksIHV0ZjgubGVuZ3RoKCkgKyAxKTsgLy8gSW5j
bHVkZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUuCisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgdXRm
OC5kYXRhQXNVSW50OFB0cigpLCB1dGY4Lmxlbmd0aCgpICsgMSB9KTsgLy8gSW5jbHVkZSB0ZXJt
aW5hdGluZyBudWxsIGJ5dGUuCiB9CiAKIFN0cmluZyBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVy
OjpoYXNoU3RyaW5nV2l0aFNhbHQoY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgU3RyaW5nJiBoYXNo
U2FsdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3Jl
ZGVudGlhbEJhc2UuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsOCAr
OTcsOSBAQCBib29sIENyZWRlbnRpYWxCYXNlOjpjb21wYXJlKGNvbnN0IENyZWRlCiAKIFN0cmlu
ZyBDcmVkZW50aWFsQmFzZTo6c2VyaWFsaXphdGlvbkZvckJhc2ljQXV0aG9yaXphdGlvbkhlYWRl
cigpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6IEFkZCBtYWtlU3RyaW5nIHZhcmlhbnQgdGhhdCBj
cmVhdGVzIGEgdXRmOCBidWZmZXIgZGlyZWN0bHkuCiAgICAgYXV0byBjcmVkZW50aWFsU3RyaW5n
RGF0YSA9IG1ha2VTdHJpbmcobV91c2VyLCAnOicsIG1fcGFzc3dvcmQpLnV0ZjgoKTsKLSAgICBy
ZXR1cm4gbWFrZVN0cmluZygiQmFzaWMgIiwgYmFzZTY0RW5jb2RlZChjcmVkZW50aWFsU3RyaW5n
RGF0YSkpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCJCYXNpYyAiLCBiYXNlNjRFbmNvZGVkKGNy
ZWRlbnRpYWxTdHJpbmdEYXRhLmJ5dGVzKCkpKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9D
Rk5ldC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2YvQ2VydGlmaWNhdGVJbmZvQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAs
NyArMjEwLDcgQEAgc3RhdGljIHZvaWQgZW5jb2RlQ0ZEYXRhKEVuY29kZXImIGVuY29kZQogICAg
IGNvbnN0IHVpbnQ4X3QqIGJ5dGVQdHIgPSBDRkRhdGFHZXRCeXRlUHRyKGRhdGEpOwogCiAgICAg
ZW5jb2RlciA8PCBsZW5ndGg7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYnl0
ZVB0ciwgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZp
eGVkTGVuZ3RoRGF0YShTcGFuIHsgYnl0ZVB0ciwgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgp
IH0pOwogfQogCiBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4gZGVj
b2RlQ0ZEYXRhKERlY29kZXImIGRlY29kZXIpCkBAIC0yMjUsNyArMjI1LDcgQEAgc3RhdGljIHN0
ZDo6b3B0aW9uYWw8UmV0YWluUHRyPENGRGF0YVJlZgogICAgIGlmICghcG9pbnRlcikKICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0
ZShudWxscHRyLCBwb2ludGVyLCAqc2l6ZSkpOworICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNy
ZWF0ZShudWxscHRyLCByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwb2ludGVyKSwg
KnNpemUpKTsKIH0KIAogI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ2VydGlmaWNhdGVJbmZvLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0NlcnRpZmlj
YXRlSW5mby5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvQ2VydGlmaWNhdGVJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1
LDcgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8R1JlZlB0cjxHQnl0ZUFycgogICAgIHN0YXRp
YyB2b2lkIGVuY29kZShFbmNvZGVyICZlbmNvZGVyLCBjb25zdCBHUmVmUHRyPEdCeXRlQXJyYXk+
JiBieXRlQXJyYXkpCiAgICAgewogICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQz
Ml90PihieXRlQXJyYXktPmxlbik7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKGJ5dGVBcnJheS0+ZGF0YSwgYnl0ZUFycmF5LT5sZW4pOworICAgICAgICBlbmNvZGVyLmVu
Y29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgYnl0ZUFycmF5LT5kYXRhLCBieXRlQXJyYXktPmxl
biB9KTsKICAgICB9CiAKICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxHUmVmUHRyPEdCeXRlQXJy
YXk+PiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKQEAgLTg3LDcgKzg3LDcgQEAgdGVtcGxhdGU8
PiBzdHJ1Y3QgQ29kZXI8R1JlZlB0cjxHQnl0ZUFycgogCiAgICAgICAgIEdSZWZQdHI8R0J5dGVB
cnJheT4gYnl0ZUFycmF5ID0gYWRvcHRHUmVmKGdfYnl0ZV9hcnJheV9zaXplZF9uZXcoKnNpemUp
KTsKICAgICAgICAgZ19ieXRlX2FycmF5X3NldF9zaXplKGJ5dGVBcnJheS5nZXQoKSwgKnNpemUp
OwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ5dGVBcnJheS0+
ZGF0YSwgKnNpemUpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KFNwYW4geyBieXRlQXJyYXktPmRhdGEsICpzaXplIH0pKQogICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKICAgICAgICAgcmV0dXJuIGJ5dGVBcnJheTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgYm9vbCBTUUxpdGVTdGF0ZW1l
bnQ6OmV4ZWN1dGVDb21tYW5kKCkKICAgICByZXR1cm4gc3RlcCgpID09IFNRTElURV9ET05FOwog
fQogCi1pbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kQmxvYihpbnQgaW5kZXgsIFNwYW48Y29uc3Qg
dWludDhfdD4gYmxvYikKK2ludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwg
U3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGJsb2IpCiB7CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAg
ICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNv
dW50KCkpOwpAQCAtOTUsNiArOTUsMTEgQEAgaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2Io
aW50IGluZGV4LAogICAgIHJldHVybiBzcWxpdGUzX2JpbmRfYmxvYihtX3N0YXRlbWVudCwgaW5k
ZXgsIGJsb2IuZGF0YSgpLCBibG9iLnNpemUoKSwgU1FMSVRFX1RSQU5TSUVOVCk7CiB9CiAKK2lu
dCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgU3Bhbjxjb25zdCB1aW50OF90
PiBibG9iKQoreworICAgIHJldHVybiBiaW5kQmxvYihpbmRleCwgYXNCeXRlcyhibG9iKSk7Cit9
CisKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgY29uc3QgU3RyaW5n
JiB0ZXh0KQogewogICAgIC8vIFN0cmluZzo6Y2hhcmFjdGVycygpIHJldHVybnMgMCBmb3IgdGhl
IGVtcHR5IHN0cmluZywgd2hpY2ggU1FMaXRlCkBAIC0xMDcsNyArMTEyLDcgQEAgaW50IFNRTGl0
ZVN0YXRlbWVudDo6YmluZEJsb2IoaW50IGluZGV4LAogICAgIGVsc2UKICAgICAgICAgY2hhcmFj
dGVycyA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKIAotICAgIHJldHVybiBiaW5kQmxvYihpbmRl
eCwgU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGNoYXJhY3RlcnMpLCB0
ZXh0Lmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSB9KTsKKyAgICByZXR1cm4gYmluZEJsb2IoaW5k
ZXgsIFNwYW4geyByZWludGVycHJldF9jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGNoYXJhY3RlcnMp
LCB0ZXh0Lmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSB9KTsKIH0KIAogaW50IFNRTGl0ZVN0YXRl
bWVudDo6YmluZFRleHQoaW50IGluZGV4LCBTdHJpbmdWaWV3IHRleHQpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JU
IH5TUUxpdGVTdGF0ZW1lbnQoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBTUUxpdGVTdGF0ZW1lbnQo
U1FMaXRlU3RhdGVtZW50JiYpOwogICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIGludCBiaW5kQmxv
YihpbnQgaW5kZXgsIFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgV0VCQ09SRV9FWFBPUlQg
aW50IGJpbmRCbG9iKGludCBpbmRleCwgU3Bhbjxjb25zdCB1aW50OF90Pik7CiAgICAgV0VCQ09S
RV9FWFBPUlQgaW50IGJpbmRCbG9iKGludCBpbmRleCwgY29uc3QgU3RyaW5nJik7CiAgICAgV0VC
Q09SRV9FWFBPUlQgaW50IGJpbmRUZXh0KGludCBpbmRleCwgU3RyaW5nVmlldyk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuY3BwCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFBy
aW50YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDEyICs1NSw3IEBAIHN0YXRpYyBzaXpl
X3QgbGVuZ3RoT2ZMaW5lRW5kaW5nQXRJbmRleCgKICAgICByZXR1cm4gMDsKIH0KIAotVmVjdG9y
PHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGlu
cHV0KQotewotICAgIHJldHVybiBxdW90ZWRQcmludGFibGVFbmNvZGUoaW5wdXQuZGF0YSgpLCBp
bnB1dC5zaXplKCkpOwotfQotCi1WZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2Rl
KGNvbnN0IHVpbnQ4X3QqIGlucHV0LCBzaXplX3QgaW5wdXRMZW5ndGgpCitzdGF0aWMgVmVjdG9y
PHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCB1aW50OF90KiBpbnB1dCwgc2l6
ZV90IGlucHV0TGVuZ3RoKQogewogICAgIFZlY3Rvcjx1aW50OF90PiBvdXQ7CiAgICAgb3V0LnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoaW5wdXRMZW5ndGgpOwpAQCAtMTE2LDEyICsxMTEsMTIgQEAg
VmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjbwogICAgIHJldHVybiBvdXQ7
CiB9CiAKLVZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBpbnB1dCkKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNvZGUo
U3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQogewotICAgIHJldHVybiBxdW90ZWRQcmludGFi
bGVEZWNvZGUoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkpOworICAgIHJldHVybiBxdW90ZWRQ
cmludGFibGVFbmNvZGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0
YSgpKSwgaW5wdXQuc2l6ZSgpKTsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJs
ZURlY29kZShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCkKK3N0YXRpYyBW
ZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGRhdGEs
IHNpemVfdCBkYXRhTGVuZ3RoKQogewogICAgIFZlY3Rvcjx1aW50OF90PiBvdXQ7CiAgICAgaWYg
KCFkYXRhTGVuZ3RoKQpAQCAtMTU2LDQgKzE1MSw5IEBAIFZlY3Rvcjx1aW50OF90PiBxdW90ZWRQ
cmludGFibGVEZWNvZGUoY28KICAgICByZXR1cm4gb3V0OwogfQogCitWZWN0b3I8dWludDhfdD4g
cXVvdGVkUHJpbnRhYmxlRGVjb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCkKK3sKKyAg
ICByZXR1cm4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KGlucHV0LmRhdGEoKSksIGlucHV0LnNpemUoKSk7Cit9CisKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVvdGVkUHJpbnRhYmxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuaAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTMgKzMxLDExIEBACiAjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1WZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYpOwotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29k
ZShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKLQotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50
YWJsZURlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mKTsKLVZlY3Rvcjx1aW50OF90PiBxdW90
ZWRQcmludGFibGVEZWNvZGUoY29uc3QgdWludDhfdCosIHNpemVfdCk7CitWZWN0b3I8dWludDhf
dD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CitWZWN0b3I8
dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9QYXN0ZWJvYXJkV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vUGFzdGVib2FyZFdpbi5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUx
LDcgKzI1MSw3IEBAIHN0ZDo6b3B0aW9uYWw8UGFzdGVib2FyZEN1c3RvbURhdGE+IFBhc3QKICAg
ICAgICAgaWYgKEhBTkRMRSBjYkRhdGEgPSA6OkdldENsaXBib2FyZERhdGEoQ3VzdG9tRGF0YUNs
aXBib2FyZEZvcm1hdCkpIHsKICAgICAgICAgICAgIHNpemVfdCBzaXplID0gR2xvYmFsU2l6ZShj
YkRhdGEpOwogICAgICAgICAgICAgYXV0byBkYXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KEds
b2JhbExvY2soY2JEYXRhKSk7Ci0gICAgICAgICAgICBhdXRvIGN1c3RvbURhdGEgPSBQYXN0ZWJv
YXJkQ3VzdG9tRGF0YTo6ZnJvbVBlcnNpc3RlbmNlRGVjb2Rlcih7ZGF0YSwgc2l6ZX0pOworICAg
ICAgICAgICAgYXV0byBjdXN0b21EYXRhID0gUGFzdGVib2FyZEN1c3RvbURhdGE6OmZyb21QZXJz
aXN0ZW5jZURlY29kZXIoU3BhbiB7IGRhdGEsIHNpemUgfSk7CiAKICAgICAgICAgICAgIEdsb2Jh
bFVubG9jayhjYkRhdGEpOwogICAgICAgICAgICAgOjpDbG9zZUNsaXBib2FyZCgpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZl
ci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NTksMTAgKzQ1OSwxMCBAQCBib29sIFJlZ2lzdHJhdGlvbkRhdGFi
YXNlOjpkb1B1c2hDaGFuZ2VzCiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRU
ZXh0KDYsIHVwZGF0ZVZpYUNhY2hlVG9TdHJpbmcoZGF0YS5yZWdpc3RyYXRpb24udXBkYXRlVmlh
Q2FjaGUpKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+Ymlu
ZFRleHQoNywgZGF0YS5zY3JpcHRVUkwuc3RyaW5nKCkpICE9IFNRTElURV9PSwogICAgICAgICAg
ICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCg4LCB3b3JrZXJUeXBlVG9TdHJpbmcoZGF0
YS53b3JrZXJUeXBlKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1l
bnQtPmJpbmRCbG9iKDksIFNwYW4geyBjc3BFbmNvZGVyLmJ1ZmZlcigpLCBjc3BFbmNvZGVyLmJ1
ZmZlclNpemUoKSB9KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVu
dC0+YmluZEJsb2IoOSwgY3NwRW5jb2Rlci5idWZmZXIoKSkgIT0gU1FMSVRFX09LCiAgICAgICAg
ICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDEwLCBkYXRhLnJlZmVycmVyUG9saWN5
KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2Io
MTEsIFNwYW4geyBzY3JpcHRSZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVyKCksIHNjcmlwdFJlc291
cmNlTWFwRW5jb2Rlci5idWZmZXJTaXplKCkgfSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8
fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDEyLCBTcGFuIHsgY2VydGlmaWNhdGVJbmZvRW5j
b2Rlci5idWZmZXIoKSwgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXJTaXplKCkgfSkgIT0g
U1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDExLCBz
Y3JpcHRSZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVyKCkpICE9IFNRTElURV9PSworICAgICAgICAg
ICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kQmxvYigxMiwgY2VydGlmaWNhdGVJbmZvRW5jb2Rl
ci5idWZmZXIoKSkgIT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQt
PnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Io
U2VydmljZVdvcmtlciwgIkZhaWxlZCB0byBzdG9yZSByZWdpc3RyYXRpb24gZGF0YSBpbnRvIHJl
Y29yZHMgdGFibGUgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJh
c2UtPmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTUxNyw3
ICs1MTcsNyBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yCiAgICAg
ICAgIHN0ZDo6b3B0aW9uYWw8Q29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzPiBj
b250ZW50U2VjdXJpdHlQb2xpY3k7CiAgICAgICAgIGF1dG8gY29udGVudFNlY3VyaXR5UG9saWN5
RGF0YVNwYW4gPSBzcWwtPmNvbHVtbkJsb2JBc1NwYW4oOCk7CiAgICAgICAgIGlmIChjb250ZW50
U2VjdXJpdHlQb2xpY3lEYXRhU3Bhbi5zaXplKCkpIHsKLSAgICAgICAgICAgIFdURjo6UGVyc2lz
dGVuY2U6OkRlY29kZXIgY3NwRGVjb2Rlcihjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhU3Bhbi5k
YXRhKCksIGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGFTcGFuLnNpemUoKSk7CisgICAgICAgICAg
ICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGNzcERlY29kZXIgeyBjb250ZW50U2VjdXJpdHlQ
b2xpY3lEYXRhU3BhbiB9OwogICAgICAgICAgICAgY3NwRGVjb2RlciA+PiBjb250ZW50U2VjdXJp
dHlQb2xpY3k7CiAgICAgICAgICAgICBpZiAoIWNvbnRlbnRTZWN1cml0eVBvbGljeSkgewogICAg
ICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIsICJSZWdpc3RyYXRp
b25EYXRhYmFzZTo6aW1wb3J0UmVjb3JkczogRmFpbGVkIHRvIGRlY29kZSBjb250ZW50U2VjdXJp
dHlQb2xpY3kiKTsKQEAgLTUzMCw3ICs1MzAsNyBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJh
c2U6OmltcG9ydFJlY29yCiAgICAgICAgIEhhc2hNYXA8VVJMLCBTZXJ2aWNlV29ya2VyQ29udGV4
dERhdGE6OkltcG9ydGVkU2NyaXB0PiBzY3JpcHRSZXNvdXJjZU1hcDsKICAgICAgICAgYXV0byBz
Y3JpcHRSZXNvdXJjZU1hcERhdGFTcGFuID0gc3FsLT5jb2x1bW5CbG9iQXNTcGFuKDEwKTsKICAg
ICAgICAgaWYgKHNjcmlwdFJlc291cmNlTWFwRGF0YVNwYW4uc2l6ZSgpKSB7Ci0gICAgICAgICAg
ICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIHNjcmlwdFJlc291cmNlTWFwRGVjb2RlcihzY3Jp
cHRSZXNvdXJjZU1hcERhdGFTcGFuLmRhdGEoKSwgc2NyaXB0UmVzb3VyY2VNYXBEYXRhU3Bhbi5z
aXplKCkpOworICAgICAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBzY3JpcHRSZXNv
dXJjZU1hcERlY29kZXIgeyBzY3JpcHRSZXNvdXJjZU1hcERhdGFTcGFuIH07CiAgICAgICAgICAg
ICBzdGQ6Om9wdGlvbmFsPEhhc2hNYXA8VVJMLCBJbXBvcnRlZFNjcmlwdEF0dHJpYnV0ZXM+PiBz
Y3JpcHRSZXNvdXJjZU1hcFdpdGhvdXRTY3JpcHRzOwogICAgICAgICAgICAgc2NyaXB0UmVzb3Vy
Y2VNYXBEZWNvZGVyID4+IHNjcmlwdFJlc291cmNlTWFwV2l0aG91dFNjcmlwdHM7CiAgICAgICAg
ICAgICBpZiAoIXNjcmlwdFJlc291cmNlTWFwV2l0aG91dFNjcmlwdHMpIHsKQEAgLTU0Myw3ICs1
NDMsNyBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yCiAgICAgICAg
IGF1dG8gY2VydGlmaWNhdGVJbmZvRGF0YVNwYW4gPSBzcWwtPmNvbHVtbkJsb2JBc1NwYW4oMTEp
OwogICAgICAgICBzdGQ6Om9wdGlvbmFsPENlcnRpZmljYXRlSW5mbz4gY2VydGlmaWNhdGVJbmZv
OwogCi0gICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgY2VydGlmaWNhdGVJbmZvRGVj
b2RlcihjZXJ0aWZpY2F0ZUluZm9EYXRhU3Bhbi5kYXRhKCksIGNlcnRpZmljYXRlSW5mb0RhdGFT
cGFuLnNpemUoKSk7CisgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgY2VydGlmaWNh
dGVJbmZvRGVjb2RlciB7IGNlcnRpZmljYXRlSW5mb0RhdGFTcGFuIH07CiAgICAgICAgIGNlcnRp
ZmljYXRlSW5mb0RlY29kZXIgPj4gY2VydGlmaWNhdGVJbmZvOwogICAgICAgICBpZiAoIWNlcnRp
ZmljYXRlSW5mbykgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtl
ciwgIlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzOiBGYWlsZWQgdG8gZGVjb2Rl
IGNlcnRpZmljYXRlSW5mbyIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNl
L3NlcnZlci9TV1NjcmlwdFN0b3JhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTY3JpcHRTdG9yYWdlLmNwcAkocmV2aXNpb24gMjc4
ODA5KQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NjcmlwdFN0
b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIFN0cmluZyBTV1Njcmlw
dFN0b3JhZ2U6OnNoYTJIYXNoKGNvbnN0IFMKICAgICBhdXRvIGlucHV0VXRmOCA9IGlucHV0LnV0
ZjgoKTsKICAgICBjcnlwdG8tPmFkZEJ5dGVzKGlucHV0VXRmOC5kYXRhKCksIGlucHV0VXRmOC5s
ZW5ndGgoKSk7CiAgICAgYXV0byBoYXNoID0gY3J5cHRvLT5jb21wdXRlSGFzaCgpOwotICAgIHJl
dHVybiBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhoYXNoLmRhdGEoKSwgaGFzaC5zaXplKCkpOwor
ICAgIHJldHVybiBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhoYXNoKTsKIH0KIAogU3RyaW5nIFNX
U2NyaXB0U3RvcmFnZTo6c2hhMkhhc2goY29uc3QgVVJMJiBpbnB1dCkgY29uc3QKQEAgLTg2LDkg
Kzg2LDkgQEAgU2NyaXB0QnVmZmVyIFNXU2NyaXB0U3RvcmFnZTo6c3RvcmUoY29ucwogICAgIGF1
dG8gc2NyaXB0UGF0aCA9IHRoaXMtPnNjcmlwdFBhdGgocmVnaXN0cmF0aW9uS2V5LCBzY3JpcHRV
UkwpOwogICAgIEZpbGVTeXN0ZW06Om1ha2VBbGxEaXJlY3RvcmllcyhGaWxlU3lzdGVtOjpwYXJl
bnRQYXRoKHNjcmlwdFBhdGgpKTsKIAotICAgIGF1dG8gaXRlcmF0ZU92ZXJCdWZmZXJBbmRXcml0
ZURhdGEgPSBbJl0oY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4m
IHdyaXRlRGF0YSkgewotICAgICAgICBmb3IgKGF1dG8gaXQgPSBzY3JpcHQuYnVmZmVyKCktPmJl
Z2luKCk7IGl0ICE9IHNjcmlwdC5idWZmZXIoKS0+ZW5kKCk7ICsraXQpCi0gICAgICAgICAgICB3
cml0ZURhdGEoaXQtPnNlZ21lbnQtPmRhdGEoKSwgaXQtPnNlZ21lbnQtPnNpemUoKSk7CisgICAg
YXV0byBpdGVyYXRlT3ZlckJ1ZmZlckFuZFdyaXRlRGF0YSA9IFsmXShjb25zdCBGdW5jdGlvbjxi
b29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+JiB3cml0ZURhdGEpIHsKKyAgICAgICAgZm9yIChh
dXRvJiBzZWdtZW50RW50cnkgOiAqc2NyaXB0LmJ1ZmZlcigpKQorICAgICAgICAgICAgd3JpdGVE
YXRhKHNlZ21lbnRFbnRyeS5zZWdtZW50LT5ieXRlcygpKTsKICAgICB9OwogCiAgICAgaWYgKCFz
aG91bGRVc2VGaWxlTWFwcGluZyhzY3JpcHQuYnVmZmVyKCktPnNpemUoKSkpIHsKQEAgLTk3LDgg
Kzk3LDggQEAgU2NyaXB0QnVmZmVyIFNXU2NyaXB0U3RvcmFnZTo6c3RvcmUoY29ucwogICAgICAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIlNXU2NyaXB0U3RvcmFnZTo6
c3RvcmU6IEZhaWx1cmUgdG8gc3RvcmUgJXMsIEZpbGVTeXN0ZW06Om9wZW5GaWxlKCkgZmFpbGVk
Iiwgc2NyaXB0UGF0aC51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIHJldHVybiB7IH07CiAg
ICAgICAgIH0KLSAgICAgICAgaXRlcmF0ZU92ZXJCdWZmZXJBbmRXcml0ZURhdGEoWyZdKGNvbnN0
IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gICAgICAgICAgICBGaWxlU3lzdGVtOjp3
cml0ZVRvRmlsZShoYW5kbGUsIGRhdGEsIHNpemUpOworICAgICAgICBpdGVyYXRlT3ZlckJ1ZmZl
ckFuZFdyaXRlRGF0YShbJl0oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpIHsKKyAgICAgICAg
ICAgIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKGhhbmRsZSwgZGF0YS5kYXRhKCksIGRhdGEuc2l6
ZSgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9KTsKICAgICAgICAgRmls
ZVN5c3RlbTo6Y2xvc2VGaWxlKGhhbmRsZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw4
MSBAQAorMjAyMS0wNi0xMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAg
ICAgQWRvcHQgU3BhbiBpbiBtb3JlIHBsYWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2Nh
Y2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVT
dG9yYWdlOjpDYWNoZTo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpD
YWNoZTo6ZGVjb2RlUmVjb3JkSGVhZGVyKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0
b3JhZ2U6OkNhY2hlczo6c3RvcmVPcmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3Jh
Z2U6OkNhY2hlczo6cmVhZE9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6
ZW5jb2RlQ2FjaGVOYW1lcyk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6ZGVjb2Rl
Q2FjaGVzTmFtZXMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZURhdGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6Om1hcFRvRmls
ZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Y29tcHV0ZVNIQTEpOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaDoKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhOjpEYXRhKToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtDYWNoZTo6RGF0YTo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ2FjaGU6OkRhdGE6OmFkb3B0TWFwKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
RW50cnk6OmVuY29kZUFzU3RvcmFnZVJlY29yZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6RW50cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQpOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6aGFzaFN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
S2V5Ojpjb21wdXRlSGFzaCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
S2V5Ojpjb21wdXRlUGFydGl0aW9uSGFzaCBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6ZGVjb2RlUmVjb3JkTWV0YURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FjaGU6OmVuY29kZVJlY29yZE1ldGFEYXRhKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5jcHA6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtDYWNoZTo6U3VicmVzb3VyY2VzRW50cnk6OmVuY29kZUFzU3RvcmFnZVJlY29yZCBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3VicmVzb3VyY2VzRW50cnk6
OmRlY29kZVN0b3JhZ2VSZWNvcmQpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Bcmd1bWVudENv
ZGVyLmg6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAg
ICAgKElQQzo6QXJndW1lbnRDb2RlcjxDU3RyaW5nPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6
QXJndW1lbnRDb2RlcjxDU3RyaW5nPjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRD
b2RlcjxTdHJpbmc+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpkZWNvZGVTdHJpbmdUZXh0KToK
KyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUpOgorICAg
ICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29kZSk6CisgICAgICAg
ICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgIChJUEM6OlNpbXBsZUFy
Z3VtZW50Q29kZXI6OmVuY29kZSk6CisgICAgICAgIChJUEM6OlNpbXBsZUFyZ3VtZW50Q29kZXI6
OmRlY29kZSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FycmF5UmVmZXJlbmNlLmg6CisgICAg
ICAgICogUGxhdGZvcm0vSVBDL0RlY29kZXIuY3BwOgorICAgICAgICAoSVBDOjpEZWNvZGVyOjpk
ZWNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9EZWNvZGVyLmg6
CisgICAgICAgIChJUEM6OkRlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAg
ICogUGxhdGZvcm0vSVBDL0VuY29kZXIuY3BwOgorICAgICAgICAoSVBDOjpFbmNvZGVyOjplbmNv
ZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9FbmNvZGVyLmg6Cisg
ICAgICAgICogUGxhdGZvcm0vSVBDL1NoYXJlZEJ1ZmZlckNvcHkuY3BwOgorICAgICAgICAoSVBD
OjpTaGFyZWRCdWZmZXJDb3B5OjplbmNvZGUgY29uc3QpOgorICAgICAgICAqIFBsYXRmb3JtL0lQ
Qy9TdHJlYW1Db25uZWN0aW9uRW5jb2Rlci5oOgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJn
dW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoSVBDOjplbmNvZGVTaGFyZWRCdWZmZXIpOgorICAg
ICAgICAoSVBDOjpkZWNvZGVTaGFyZWRCdWZmZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
QVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuY3BwOgorICAgICAgICAoQVBJOjplbmNvZGVDb250ZW50
UnVsZUxpc3RNZXRhRGF0YSk6CisgICAgICAgIChBUEk6OmdldERhdGEpOgorICAgICAgICAoQVBJ
OjpkZWNvZGVDb250ZW50UnVsZUxpc3RNZXRhRGF0YSk6CisgICAgICAgIChBUEk6OndyaXRlRGF0
YVRvRmlsZSk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9MZWdhY3lTZXNzaW9uU3RhdGVDb2Rp
bmcuY3BwOgorICAgICAgICAoV2ViS2l0OjpIaXN0b3J5RW50cnlEYXRhRW5jb2Rlcjo6b3BlcmF0
b3I8PCk6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFFbmNvZGVyOjplbmNvZGVB
cml0aG1ldGljVHlwZSk6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFFbmNvZGVy
OjplbmNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAoV2ViS2l0OjpIaXN0b3J5RW50cnlE
YXRhRGVjb2Rlcjo6b3BlcmF0b3I+Pik6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURh
dGFEZWNvZGVyOjpkZWNvZGVBcml0aG1ldGljVHlwZSk6CisgICAgICAgIChXZWJLaXQ6Okhpc3Rv
cnlFbnRyeURhdGFEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SVBD
VGVzdGluZ0FQSTo6ZW5jb2RlVHlwZWRBcnJheSk6CisKIDIwMjEtMDYtMTEgIFJ5YW4gSGFkZGFk
ICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5n
IHIyNzg3NTQuCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlj
a01lYXN1cmVtZW50TWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXIuY3BwCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1
cmVtZW50TWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMyw3ICszMjMsNyBAQCB2b2lk
IFByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlcjo6ZmlyCiAgICAgICAgIGNyeXB0by0+YWRk
Qnl0ZXMocHVibGljS2V5RGF0YS0+ZGF0YSgpLCBwdWJsaWNLZXlEYXRhLT5zaXplKCkpOwogICAg
ICAgICBhdXRvIHB1YmxpY0tleURhdGFIYXNoID0gY3J5cHRvLT5jb21wdXRlSGFzaCgpOwogCi0g
ICAgICAgIGF1dG8ga2V5SUQgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhwdWJsaWNLZXlEYXRh
SGFzaC5kYXRhKCksIHB1YmxpY0tleURhdGFIYXNoLnNpemUoKSk7CisgICAgICAgIGF1dG8ga2V5
SUQgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhwdWJsaWNLZXlEYXRhSGFzaCk7CiAgICAgICAg
IGlmIChrZXlJRCAhPSBhdHRyaWJ1dGlvbi5zb3VyY2VVbmxpbmthYmxlVG9rZW4oKS0+a2V5SURC
YXNlNjRVUkwpCiAgICAgICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGUuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTY1LDcgKzU2NSw3IEBAIFN0b3JhZ2U6OlJlY29yZCBDYWNoZTo6ZW5jb2RlKGNvbnN0IFJlY28K
IAogICAgIGVuY29kZXIuZW5jb2RlQ2hlY2tzdW0oKTsKIAotICAgIERhdGEgaGVhZGVyKGVuY29k
ZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICBEYXRhIGhlYWRlcihlbmNv
ZGVyLmJ1ZmZlcigpKTsKICAgICBEYXRhIGJvZHk7CiAgICAgV1RGOjpzd2l0Y2hPbihyZWNvcmQu
cmVzcG9uc2VCb2R5LCBbXShjb25zdCBSZWY8V2ViQ29yZTo6Rm9ybURhdGE+JiBmb3JtRGF0YSkg
ewogICAgICAgICAvLyBGSVhNRTogU3RvcmUgZm9ybSBkYXRhIGJvZHkuCkBAIC02MjgsOSArNjI4
LDkgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RE9NQ2FjaGVFbgogICAgIH19Owog
fQogCi1zdGQ6Om9wdGlvbmFsPENhY2hlOjpEZWNvZGVkUmVjb3JkPiBDYWNoZTo6ZGVjb2RlUmVj
b3JkSGVhZGVyKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYgc3RvcmFnZSkKK3N0ZDo6b3B0aW9uYWw8
Q2FjaGU6OkRlY29kZWRSZWNvcmQ+IENhY2hlOjpkZWNvZGVSZWNvcmRIZWFkZXIoY29uc3QgU3Rv
cmFnZTo6UmVjb3JkJiBzdG9yYWdlRW50cnkpCiB7Ci0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVj
b2RlciBkZWNvZGVyKHN0b3JhZ2UuaGVhZGVyLmRhdGEoKSwgc3RvcmFnZS5oZWFkZXIuc2l6ZSgp
KTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyBzdG9yYWdlRW50cnku
aGVhZGVyIH07CiAKICAgICBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gaW5zZXJ0aW9uVGltZTsKICAg
ICBkZWNvZGVyID4+IGluc2VydGlvblRpbWU7CkBAIC02NTMsMTUgKzY1MywxNSBAQCBzdGQ6Om9w
dGlvbmFsPENhY2hlOjpEZWNvZGVkUmVjb3JkPiBDYWNoCiAgICAgfX07CiB9CiAKLXN0ZDo6b3B0
aW9uYWw8UmVjb3JkPiBDYWNoZTo6ZGVjb2RlKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYgc3RvcmFn
ZSkKK3N0ZDo6b3B0aW9uYWw8UmVjb3JkPiBDYWNoZTo6ZGVjb2RlKGNvbnN0IFN0b3JhZ2U6OlJl
Y29yZCYgc3RvcmFnZUVudHJ5KQogewotICAgIGF1dG8gcmVzdWx0ID0gZGVjb2RlUmVjb3JkSGVh
ZGVyKHN0b3JhZ2UpOworICAgIGF1dG8gcmVzdWx0ID0gZGVjb2RlUmVjb3JkSGVhZGVyKHN0b3Jh
Z2VFbnRyeSk7CiAKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKIAogICAgIGF1dG8gcmVjb3JkID0gV1RGTW92ZShyZXN1bHQtPnJlY29yZCk7Ci0gICAgcmVj
b3JkLnJlc3BvbnNlQm9keSA9IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHN0b3JhZ2Uu
Ym9keS5kYXRhKCksIHN0b3JhZ2UuYm9keS5zaXplKCkpOworICAgIHJlY29yZC5yZXNwb25zZUJv
ZHkgPSBXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZShzdG9yYWdlRW50cnkuYm9keSk7CiAK
ICAgICByZXR1cm4gcmVjb3JkOwogfQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNw
cAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsMTQg
KzEwNSwxNCBAQCB2b2lkIENhY2hlczo6c3RvcmVPcmlnaW4oQ29tcGxldGlvbkNhbGxiCiAgICAg
ZW5jb2RlciA8PCBtX29yaWdpbi5jbGllbnRPcmlnaW4ucHJvdG9jb2w7CiAgICAgZW5jb2RlciA8
PCBtX29yaWdpbi5jbGllbnRPcmlnaW4uaG9zdDsKICAgICBlbmNvZGVyIDw8IG1fb3JpZ2luLmNs
aWVudE9yaWdpbi5wb3J0OwotICAgIG1fZW5naW5lLT53cml0ZUZpbGUoY2FjaGVzT3JpZ2luRmls
ZW5hbWUobV9yb290UGF0aCksIERhdGEgeyBlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZl
clNpemUoKSB9LCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoc3RkOjpvcHRpb25hbDxFcnJvcj4m
JiBlcnJvcikgbXV0YWJsZSB7CisgICAgbV9lbmdpbmUtPndyaXRlRmlsZShjYWNoZXNPcmlnaW5G
aWxlbmFtZShtX3Jvb3RQYXRoKSwgRGF0YSB7IGVuY29kZXIuYnVmZmVyKCkgfSwgW3Byb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0gKHN0ZDo6b3B0aW9uYWw8RXJyb3I+JiYgZXJyb3IpIG11dGFibGUgewog
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGVycm9yKSk7CiAgICAgfSk7CiB9CiAK
IHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiBDYWNoZXM6OnJlYWRPcmlnaW4o
Y29uc3QgRGF0YSYgZGF0YSkKIHsKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29k
ZXIoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNv
ZGVyIGRlY29kZXIgeyBkYXRhIH07CiAKICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlNlY3Vy
aXR5T3JpZ2luRGF0YT4gdG9wT3JpZ2luOwogICAgIGRlY29kZXIgPj4gdG9wT3JpZ2luOwpAQCAt
NDA0LDEyICs0MDQsMTMgQEAgc3RhdGljIGlubGluZSBEYXRhIGVuY29kZUNhY2hlTmFtZXMoY29u
cwogICAgICAgICBlbmNvZGVyIDw8IGNhY2hlLnVuaXF1ZU5hbWUoKTsKICAgICB9CiAKLSAgICBy
ZXR1cm4gRGF0YSB7IGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpIH07Cisg
ICAgcmV0dXJuIERhdGEgeyBlbmNvZGVyLmJ1ZmZlcigpIH07CiB9CiAKIHN0YXRpYyBpbmxpbmUg
RXhwZWN0ZWQ8VmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+LCBFcnJvcj4gZGVjb2Rl
Q2FjaGVzTmFtZXMoY29uc3QgRGF0YSYgZGF0YSkKIHsKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpE
ZWNvZGVyIGRlY29kZXIoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNp
c3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyBkYXRhIH07CisKICAgICBzdGQ6Om9wdGlvbmFsPHVp
bnQ2NF90PiBjb3VudDsKICAgICBkZWNvZGVyID4+IGNvdW50OwogICAgIGlmICghY291bnQpCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlRGF0YS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiBEYXRhIERhdGE6Om1hcFRv
RmlsZShjb25zdCBTdHJpbmcmIHBhdGgpIGNvbnN0CiB7CiAgICAgRmlsZVN5c3RlbTo6UGxhdGZv
cm1GaWxlSGFuZGxlIGhhbmRsZTsKLSAgICBhdXRvIGFwcGx5RGF0YSA9IFsmXShjb25zdCBGdW5j
dGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYgYXBwbGllcikgeyBhcHBseShhcHBs
aWVyKTsgfTsKKyAgICBhdXRvIGFwcGx5RGF0YSA9IFsmXShjb25zdCBGdW5jdGlvbjxib29sKFNw
YW48Y29uc3Qgc3RkOjpieXRlPik+JiBhcHBsaWVyKSB7IGFwcGx5KGFwcGxpZXIpOyB9OwogICAg
IGF1dG8gbWFwcGVkRmlsZSA9IEZpbGVTeXN0ZW06Om1hcFRvRmlsZShwYXRoLCBzaXplKCksIFdU
Rk1vdmUoYXBwbHlEYXRhKSwgJmhhbmRsZSk7CiAgICAgaWYgKCFtYXBwZWRGaWxlKQogICAgICAg
ICByZXR1cm4geyB9OwpAQCAtODYsOSArODYsOSBAQCBEYXRhIGFkb3B0QW5kTWFwRmlsZShGaWxl
U3lzdGVtOjpQbGF0Zm9yCiBTSEExOjpEaWdlc3QgY29tcHV0ZVNIQTEoY29uc3QgRGF0YSYgZGF0
YSwgY29uc3QgU2FsdCYgc2FsdCkKIHsKICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRl
cyhzYWx0LmRhdGEoKSwgc2FsdC5zaXplKCkpOwotICAgIGRhdGEuYXBwbHkoWyZzaGExXShjb25z
dCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgewotICAgICAgICBzaGExLmFkZEJ5dGVzKGRh
dGEsIHNpemUpOworICAgIHNoYTEuYWRkQnl0ZXMoc2FsdCk7CisgICAgZGF0YS5hcHBseShbJnNo
YTFdKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhKSB7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMo
ZGF0YSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0pOwogCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaAko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNs
dWRlIDx3dGYvRmlsZVN5c3RlbS5oPgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbkRpc3BhdGNoZXIu
aD4KICNpbmNsdWRlIDx3dGYvU0hBMS5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVk
ZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKQEAgLTUyLDggKzUzLDE0IEBAIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCiBj
bGFzcyBEYXRhIHsKIHB1YmxpYzoKKyAgICB1c2luZyB2YWx1ZV90eXBlID0gdWludDhfdDsKKwog
ICAgIERhdGEoKSB7IH0KICAgICBEYXRhKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOworICAgIERh
dGEoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpCisgICAgICAgIDogRGF0YShyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKQorICAgIHsK
KyAgICB9CiAKICAgICB+RGF0YSgpIHsgfQogCkBAIC03NCwxMiArODEsMTMgQEAgcHVibGljOgog
CiAgICAgY29uc3QgdWludDhfdCogZGF0YSgpIGNvbnN0OwogICAgIHNpemVfdCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9zaXplOyB9CisKICAgICBib29sIGlzTWFwKCkgY29uc3QgeyByZXR1cm4g
bV9pc01hcDsgfQogICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHRyeUNyZWF0ZVNoYXJlZE1lbW9y
eSgpIGNvbnN0OwogCiAgICAgRGF0YSBzdWJyYW5nZShzaXplX3Qgb2Zmc2V0LCBzaXplX3QpIGNv
bnN0OwogCi0gICAgYm9vbCBhcHBseShjb25zdCBGdW5jdGlvbjxib29sIChjb25zdCB1aW50OF90
Kiwgc2l6ZV90KT4mKSBjb25zdDsKKyAgICBib29sIGFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2wg
KFNwYW48Y29uc3Qgc3RkOjpieXRlPik+JikgY29uc3Q7CiAKICAgICBEYXRhIG1hcFRvRmlsZShj
b25zdCBTdHJpbmcmIHBhdGgpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTY5LDEyICs2OSwxMiBA
QCBib29sIERhdGE6OmlzTnVsbCgpIGNvbnN0CiAgICAgcmV0dXJuICFtX2Rpc3BhdGNoRGF0YTsK
IH0KIAotYm9vbCBEYXRhOjphcHBseShjb25zdCBGdW5jdGlvbjxib29sIChjb25zdCB1aW50OF90
Kiwgc2l6ZV90KT4mIGFwcGxpZXIpIGNvbnN0Citib29sIERhdGE6OmFwcGx5KGNvbnN0IEZ1bmN0
aW9uPGJvb2wgKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+JiBhcHBsaWVyKSBjb25zdAogewogICAg
IGlmICghbV9zaXplKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIGRpc3BhdGNo
X2RhdGFfYXBwbHkobV9kaXNwYXRjaERhdGEuZ2V0KCksIFsmYXBwbGllcl0oZGlzcGF0Y2hfZGF0
YV90LCBzaXplX3QsIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gICAgICAgIHJl
dHVybiBhcHBsaWVyKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgc2l6ZSk7Cisg
ICAgICAgIHJldHVybiBhcHBsaWVyKFNwYW4geyBzdGF0aWNfY2FzdDxjb25zdCBzdGQ6OmJ5dGUq
PihkYXRhKSwgc2l6ZSB9KTsKICAgICB9KTsKIH0KIApAQCAtOTQsMTQgKzk0LDExIEBAIERhdGEg
Y29uY2F0ZW5hdGUoY29uc3QgRGF0YSYgYSwgY29uc3QgRGEKIAogRGF0YSBEYXRhOjphZG9wdE1h
cChGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIG1hcHBlZEZpbGUsIEZpbGVTeXN0ZW06OlBs
YXRmb3JtRmlsZUhhbmRsZSBmZCkKIHsKLSAgICBzaXplX3Qgc2l6ZSA9IG1hcHBlZEZpbGUuc2l6
ZSgpOwotICAgIHZvaWQqIG1hcCA9IG1hcHBlZEZpbGUubGVha0hhbmRsZSgpOwotICAgIEFTU0VS
VChtYXApOwotICAgIEFTU0VSVChtYXAgIT0gTUFQX0ZBSUxFRCk7CisgICAgYXV0byBtYXAgPSBt
YXBwZWRGaWxlLmxlYWtIYW5kbGUoKTsKKyAgICBBU1NFUlQobWFwLmRhdGEoKSk7CisgICAgQVNT
RVJUKG1hcC5kYXRhKCkgIT0gTUFQX0ZBSUxFRCk7CiAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxl
KGZkKTsKLSAgICBhdXRvIGJvZHlNYXAgPSBhZG9wdE9TT2JqZWN0KGRpc3BhdGNoX2RhdGFfY3Jl
YXRlKG1hcCwgc2l6ZSwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9Q
UklPUklUWV9ERUZBVUxULCAwKSwgW21hcCwgc2l6ZV0gewotICAgICAgICBtdW5tYXAobWFwLCBz
aXplKTsKLSAgICB9KSk7CisgICAgYXV0byBib2R5TWFwID0gYWRvcHRPU09iamVjdChkaXNwYXRj
aF9kYXRhX2NyZWF0ZShtYXAuZGF0YSgpLCBtYXAuc2l6ZSgpLCBkaXNwYXRjaF9nZXRfZ2xvYmFs
X3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCBESVNQQVRDSF9EQVRB
X0RFU1RSVUNUT1JfTVVOTUFQKSk7CiAgICAgcmV0dXJuIHsgV1RGTW92ZShib2R5TWFwKSwgRGF0
YTo6QmFja2luZzo6TWFwIH07CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUdMaWIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUdMaWIuY3BwCShyZXZp
c2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZURhdGFHTGliLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTQgKzczLDE0IEBAIGJv
b2wgRGF0YTo6aXNOdWxsKCkgY29uc3QKICAgICByZXR1cm4gIW1fYnVmZmVyOwogfQogCi1ib29s
IERhdGE6OmFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCosIHNpemVfdCk+
JiBhcHBsaWVyKSBjb25zdAorYm9vbCBEYXRhOjphcHBseShjb25zdCBGdW5jdGlvbjxib29sKFNw
YW48Y29uc3Qgc3RkOjpieXRlPik+JiBhcHBsaWVyKSBjb25zdAogewogICAgIGlmICghbV9zaXpl
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBnc2l6ZSBsZW5ndGg7CiAgICAgY29uc3Qg
YXV0byogZGF0YSA9IGdfYnl0ZXNfZ2V0X2RhdGEobV9idWZmZXIuZ2V0KCksICZsZW5ndGgpOwot
ICAgIHJldHVybiBhcHBsaWVyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEp
LCBsZW5ndGgpOworICAgIHJldHVybiBhcHBsaWVyKGFzQnl0ZXMoU3BhbiB7IGRhdGEsIGxlbmd0
aCB9KSk7CiB9CiAKIERhdGEgRGF0YTo6c3VicmFuZ2Uoc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNp
emUpIGNvbnN0CkBAIC0xMTUsMTIgKzExNSwxMSBAQCBzdHJ1Y3QgTWFwV3JhcHBlciB7CiAKICAg
ICB+TWFwV3JhcHBlcigpCiAgICAgewotICAgICAgICBtdW5tYXAobWFwLCBzaXplKTsKKyAgICAg
ICAgRmlsZVN5c3RlbTo6dW5tYXBWaWV3T2ZGaWxlKG1hcCk7CiAgICAgICAgIEZpbGVTeXN0ZW06
OmNsb3NlRmlsZShmaWxlRGVzY3JpcHRvcik7CiAgICAgfQogCi0gICAgdm9pZCogbWFwOwotICAg
IHNpemVfdCBzaXplOworICAgIFNwYW48c3RkOjpieXRlPiBtYXA7CiAgICAgRmlsZVN5c3RlbTo6
UGxhdGZvcm1GaWxlSGFuZGxlIGZpbGVEZXNjcmlwdG9yOwogfTsKIApAQCAtMTMxLDEyICsxMzAs
MTEgQEAgc3RhdGljIHZvaWQgZGVsZXRlTWFwV3JhcHBlcihNYXBXcmFwcGVyKgogCiBEYXRhIERh
dGE6OmFkb3B0TWFwKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYgbWFwcGVkRmlsZSwgRmls
ZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkKQogewotICAgIHNpemVfdCBzaXplID0gbWFw
cGVkRmlsZS5zaXplKCk7Ci0gICAgdm9pZCogbWFwID0gbWFwcGVkRmlsZS5sZWFrSGFuZGxlKCk7
Ci0gICAgQVNTRVJUKG1hcCk7Ci0gICAgQVNTRVJUKG1hcCAhPSBNQVBfRkFJTEVEKTsKLSAgICBN
YXBXcmFwcGVyKiB3cmFwcGVyID0gbmV3IE1hcFdyYXBwZXIgeyBtYXAsIHNpemUsIGZkIH07Ci0g
ICAgcmV0dXJuIHsgYWRvcHRHUmVmKGdfYnl0ZXNfbmV3X3dpdGhfZnJlZV9mdW5jKG1hcCwgc2l6
ZSwgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oZGVsZXRlTWFwV3JhcHBlciksIHdy
YXBwZXIpKSwgZmQgfTsKKyAgICBhdXRvIG1hcCA9IG1hcHBlZEZpbGUubGVha0hhbmRsZSgpOwor
ICAgIEFTU0VSVChtYXAuZGF0YSgpKTsKKyAgICBBU1NFUlQobWFwLmRhdGEoKSAhPSBNQVBfRkFJ
TEVEKTsKKyAgICBNYXBXcmFwcGVyKiB3cmFwcGVyID0gbmV3IE1hcFdyYXBwZXIgeyBtYXAsIGZk
IH07CisgICAgcmV0dXJuIHsgYWRvcHRHUmVmKGdfYnl0ZXNfbmV3X3dpdGhfZnJlZV9mdW5jKG1h
cC5kYXRhKCksIG1hcC5zaXplKCksIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGRl
bGV0ZU1hcFdyYXBwZXIpLCB3cmFwcGVyKSksIGZkIH07CiB9CiAKIFJlZlB0cjxTaGFyZWRNZW1v
cnk+IERhdGE6OnRyeUNyZWF0ZVNoYXJlZE1lbW9yeSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5
LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDEwICs5OSwx
MCBAQCBTdG9yYWdlOjpSZWNvcmQgRW50cnk6OmVuY29kZUFzU3RvcmFnZVJlCiAgICAgCiAgICAg
ZW5jb2Rlci5lbmNvZGVDaGVja3N1bSgpOwogCi0gICAgRGF0YSBoZWFkZXIoZW5jb2Rlci5idWZm
ZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOworICAgIERhdGEgaGVhZGVyIHsgZW5jb2Rlci5i
dWZmZXIoKSB9OwogICAgIERhdGEgYm9keTsKICAgICBpZiAobV9idWZmZXIpCi0gICAgICAgIGJv
ZHkgPSB7IG1fYnVmZmVyLT5kYXRhKCksIG1fYnVmZmVyLT5zaXplKCkgfTsKKyAgICAgICAgYm9k
eSA9IHsgbV9idWZmZXItPmJ5dGVzKCkgfTsKIAogICAgIHJldHVybiB7IG1fa2V5LCBtX3RpbWVT
dGFtcCwgaGVhZGVyLCBib2R5LCB7IH0gfTsKIH0KQEAgLTExMSw3ICsxMTEsNyBAQCBzdGQ6OnVu
aXF1ZV9wdHI8RW50cnk+IEVudHJ5OjpkZWNvZGVTdG9yCiB7CiAgICAgYXV0byBlbnRyeSA9IG1h
a2VVbmlxdWU8RW50cnk+KHN0b3JhZ2VFbnRyeSk7CiAKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpE
ZWNvZGVyIGRlY29kZXIoc3RvcmFnZUVudHJ5LmhlYWRlci5kYXRhKCksIHN0b3JhZ2VFbnRyeS5o
ZWFkZXIuc2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyBz
dG9yYWdlRW50cnkuaGVhZGVyIH07CiAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNw
b25zZTsKICAgICBpZiAoIVdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2U6OmRlY29kZShkZWNvZGVy
LCByZXNwb25zZSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTkxLDcgKzE5MSw3IEBA
IHZvaWQgRW50cnk6OmluaXRpYWxpemVCdWZmZXJGcm9tU3RvcmFnZVIKICAgICAgICAgICAgIHJl
dHVybjsKICAgICB9CiAjZW5kaWYKLSAgICBtX2J1ZmZlciA9IFdlYkNvcmU6OlNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKG1fc291cmNlU3RvcmFnZVJlY29yZC5ib2R5LmRhdGEoKSwgbV9zb3VyY2VTdG9y
YWdlUmVjb3JkLmJvZHkuc2l6ZSgpKTsKKyAgICBtX2J1ZmZlciA9IFdlYkNvcmU6OlNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKG1fc291cmNlU3RvcmFnZVJlY29yZC5ib2R5KTsKIH0KIAogV2ViQ29yZTo6
U2hhcmVkQnVmZmVyKiBFbnRyeTo6YnVmZmVyKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlS2V5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTMgKzg4LDEzIEBAIHN0YXRp
YyB2b2lkIGhhc2hTdHJpbmcoU0hBMSYgc2hhMSwgY29uc3QKIAogICAgIGlmIChzdHJpbmcuaXM4
Qml0KCkgJiYgc3RyaW5nLmlzQWxsQVNDSUkoKSkgewogICAgICAgICBjb25zdCB1aW50OF90IG51
bGxCeXRlID0gMDsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhzdHJpbmcuY2hhcmFjdGVyczgoKSwg
c3RyaW5nLmxlbmd0aCgpKTsKLSAgICAgICAgc2hhMS5hZGRCeXRlcygmbnVsbEJ5dGUsIDEpOwor
ICAgICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyBzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5n
Lmxlbmd0aCgpIH0pOworICAgICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmbnVsbEJ5dGUsIDEg
fSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byBjU3RyaW5nID0gc3RyaW5nLnV0
ZjgoKTsKICAgICAvLyBJbmNsdWRlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4KLSAgICBzaGExLmFk
ZEJ5dGVzKGNTdHJpbmcuZGF0YUFzVUludDhQdHIoKSwgY1N0cmluZy5sZW5ndGgoKSArIDEpOwor
ICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IGNTdHJpbmcuZGF0YUFzVUludDhQdHIoKSwgY1N0cmlu
Zy5sZW5ndGgoKSArIDEgfSk7CiB9CiAKIEtleTo6SGFzaFR5cGUgS2V5Ojpjb21wdXRlSGFzaChj
b25zdCBTYWx0JiBzYWx0KSBjb25zdApAQCAtMTAyLDcgKzEwMiw3IEBAIEtleTo6SGFzaFR5cGUg
S2V5Ojpjb21wdXRlSGFzaChjb25zdCBTYWwKICAgICAvLyBXZSBkb24ndCByZWFsbHkgbmVlZCBh
IGNyeXB0b2dyYXBoaWMgaGFzaC4gVGhlIGtleSBpcyBhbHdheXMgdmVyaWZpZWQgYWdhaW5zdCB0
aGUgZW50cnkgaGVhZGVyLgogICAgIC8vIFNIQTEganVzdCBoYXBwZW5zIHRvIGJlIHN1aXRhYmx5
IHNpemVkLCBmYXN0IGFuZCBhdmFpbGFibGUuCiAgICAgU0hBMSBzaGExOwotICAgIHNoYTEuYWRk
Qnl0ZXMoc2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKTsKKyAgICBzaGExLmFkZEJ5dGVzKHNhbHQp
OwogCiAgICAgaGFzaFN0cmluZyhzaGExLCBtX3BhcnRpdGlvbik7CiAgICAgaGFzaFN0cmluZyhz
aGExLCBtX3R5cGUpOwpAQCAtMTE3LDcgKzExNyw3IEBAIEtleTo6SGFzaFR5cGUgS2V5Ojpjb21w
dXRlSGFzaChjb25zdCBTYWwKIEtleTo6SGFzaFR5cGUgS2V5Ojpjb21wdXRlUGFydGl0aW9uSGFz
aChjb25zdCBTYWx0JiBzYWx0KSBjb25zdAogewogICAgIFNIQTEgc2hhMTsKLSAgICBzaGExLmFk
ZEJ5dGVzKHNhbHQuZGF0YSgpLCBzYWx0LnNpemUoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhzYWx0
KTsKIAogICAgIGhhc2hTdHJpbmcoc2hhMSwgbV9wYXJ0aXRpb24pOwogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
U3RvcmFnZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1
NCw4ICs0NTQsOCBAQCBzdHJ1Y3QgUmVjb3JkTWV0YURhdGEgewogc3RhdGljIFdBUk5fVU5VU0VE
X1JFVFVSTiBib29sIGRlY29kZVJlY29yZE1ldGFEYXRhKFJlY29yZE1ldGFEYXRhJiBtZXRhRGF0
YSwgY29uc3QgRGF0YSYgZmlsZURhdGEpCiB7CiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0g
ICAgZmlsZURhdGEuYXBwbHkoWyZtZXRhRGF0YSwgJnN1Y2Nlc3NdKGNvbnN0IHVpbnQ4X3QqIGRh
dGEsIHNpemVfdCBzaXplKSB7Ci0gICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVj
b2RlcihkYXRhLCBzaXplKTsKKyAgICBmaWxlRGF0YS5hcHBseShbJm1ldGFEYXRhLCAmc3VjY2Vz
c10oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpIHsKKyAgICAgICAgV1RGOjpQZXJzaXN0ZW5j
ZTo6RGVjb2RlciBkZWNvZGVyIHsgZGF0YSB9OwogICAgICAgICAKICAgICAgICAgc3RkOjpvcHRp
b25hbDx1bnNpZ25lZD4gY2FjaGVTdG9yYWdlVmVyc2lvbjsKICAgICAgICAgZGVjb2RlciA+PiBj
YWNoZVN0b3JhZ2VWZXJzaW9uOwpAQCAtNTg2LDcgKzU4Niw3IEBAIHN0YXRpYyBEYXRhIGVuY29k
ZVJlY29yZE1ldGFEYXRhKGNvbnN0IFIKIAogICAgIGVuY29kZXIuZW5jb2RlQ2hlY2tzdW0oKTsK
IAotICAgIHJldHVybiBEYXRhKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgp
KTsKKyAgICByZXR1cm4geyBlbmNvZGVyLmJ1ZmZlcigpIH07CiB9CiAKIHN0ZDo6b3B0aW9uYWw8
QmxvYlN0b3JhZ2U6OkJsb2I+IFN0b3JhZ2U6OnN0b3JlQm9keUFzQmxvYihXcml0ZU9wZXJhdGlv
biYgd3JpdGVPcGVyYXRpb24pCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0Vu
dHJ5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyMywxNCArMTIzLDE0IEBAIFN0b3JhZ2U6OlJlY29yZCBTdWJyZXNvdXJjZXNFbnRyeTo6
ZW5jb2QKIAogICAgIGVuY29kZXIuZW5jb2RlQ2hlY2tzdW0oKTsKIAotICAgIHJldHVybiB7IG1f
a2V5LCBtX3RpbWVTdGFtcCwgeyBlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUo
KSB9LCB7IH0sIHsgfX07CisgICAgcmV0dXJuIHsgbV9rZXksIG1fdGltZVN0YW1wLCB7IGVuY29k
ZXIuYnVmZmVyKCkgfSwgeyB9LCB7IH19OwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8U3VicmVzb3Vy
Y2VzRW50cnk+IFN1YnJlc291cmNlc0VudHJ5OjpkZWNvZGVTdG9yYWdlUmVjb3JkKGNvbnN0IFN0
b3JhZ2U6OlJlY29yZCYgc3RvcmFnZUVudHJ5KQogewogICAgIGF1dG8gZW50cnkgPSBtYWtlVW5p
cXVlPFN1YnJlc291cmNlc0VudHJ5PihzdG9yYWdlRW50cnkpOwogCi0gICAgV1RGOjpQZXJzaXN0
ZW5jZTo6RGVjb2RlciBkZWNvZGVyKHN0b3JhZ2VFbnRyeS5oZWFkZXIuZGF0YSgpLCBzdG9yYWdl
RW50cnkuaGVhZGVyLnNpemUoKSk7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNv
ZGVyIHsgc3RvcmFnZUVudHJ5LmhlYWRlciB9OwogICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFN1
YnJlc291cmNlSW5mbz4+IHN1YnJlc291cmNlczsKICAgICBkZWNvZGVyID4+IHN1YnJlc291cmNl
czsKICAgICBpZiAoIXN1YnJlc291cmNlcykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0v
SVBDL0FyZ3VtZW50Q29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0lQQy9Bcmd1bWVudENvZGVyLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzksMTMgKzc5
LDEzIEBAIHN0cnVjdCBBcmd1bWVudENvZGVyPFQsIHR5cGVuYW1lIHN0ZDo6ZW4KICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBUIHZhbHVlKQogICAgIHsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oJnZhbHVlKSwgc2l6ZW9mKFQp
LCBhbGlnbm9mKFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoU3Bh
biB7ICZ2YWx1ZSwgMSB9KTsKICAgICB9CiAKICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxUPiBk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7CiAgICAgICAgIFQgcmVzdWx0OwotICAgICAg
ICBpZiAoZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oJnJlc3VsdCksIHNpemVvZihUKSwgYWxpZ25vZihUKSkpCisgICAgICAgIGlmIChkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJnJlc3VsdCwgMSB9KSkKICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQpJ
bmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmNwcAko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRD
b2RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgQXJndW1lbnRD
b2RlcjxDU3RyaW5nPjo6ZW5jb2RlKEVuY28KIAogICAgIHVpbnQzMl90IGxlbmd0aCA9IHN0cmlu
Zy5sZW5ndGgoKTsKICAgICBlbmNvZGVyIDw8IGxlbmd0aDsKLSAgICBlbmNvZGVyLmVuY29kZUZp
eGVkTGVuZ3RoRGF0YShzdHJpbmcuZGF0YUFzVUludDhQdHIoKSwgbGVuZ3RoLCAxKTsKKyAgICBl
bmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShzdHJpbmcuYnl0ZXMoKSk7CiB9CiAKIFdBUk5f
VU5VU0VEX1JFVFVSTiBib29sIEFyZ3VtZW50Q29kZXI8Q1N0cmluZz46OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyLCBDU3RyaW5nJiByZXN1bHQpCkBAIC0xMDMsNyArMTAzLDcgQEAgV0FSTl9VTlVT
RURfUkVUVVJOIGJvb2wgQXJndW1lbnRDb2RlcjxDUwogCiAgICAgY2hhciogYnVmZmVyOwogICAg
IENTdHJpbmcgc3RyaW5nID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZl
cik7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9j
YXN0PHVpbnQ4X3QqPihidWZmZXIpLCBsZW5ndGgsIDEpKQorICAgIGlmICghZGVjb2Rlci5kZWNv
ZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IGJ1ZmZlciwgbGVuZ3RoIH0pKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICByZXN1bHQgPSBzdHJpbmc7CkBAIC0xMjMsMTEgKzEyMyw3IEBAIHZv
aWQgQXJndW1lbnRDb2RlcjxTdHJpbmc+OjplbmNvZGUoRW5jb2QKICAgICBib29sIGlzOEJpdCA9
IHN0cmluZy5pczhCaXQoKTsKIAogICAgIGVuY29kZXIgPDwgbGVuZ3RoIDw8IGlzOEJpdDsKLQot
ICAgIGlmIChpczhCaXQpCi0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0
cmluZy5jaGFyYWN0ZXJzOCgpLCBsZW5ndGggKiBzaXplb2YoTENoYXIpLCBhbGlnbm9mKExDaGFy
KSk7Ci0gICAgZWxzZQotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzdHJpbmcuY2hhcmFjdGVyczE2KCkpLCBsZW5n
dGggKiBzaXplb2YoVUNoYXIpLCBhbGlnbm9mKFVDaGFyKSk7CisgICAgZW5jb2Rlci5lbmNvZGVG
aXhlZExlbmd0aERhdGEoc3RyaW5nLmJ5dGVzKCkpOwogfQogdGVtcGxhdGUKIHZvaWQgQXJndW1l
bnRDb2RlcjxTdHJpbmc+OjplbmNvZGU8RW5jb2Rlcj4oRW5jb2RlciYsIGNvbnN0IFN0cmluZyYp
OwpAQCAtMTQzLDcgKzEzOSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RkOjpvcHRpb25hbDxTdHJpbmc+
IGRlY28KICAgICAKICAgICBDaGFyYWN0ZXJUeXBlKiBidWZmZXI7CiAgICAgU3RyaW5nIHN0cmlu
ZyA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYg
KCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3Qq
PihidWZmZXIpLCBsZW5ndGggKiBzaXplb2YoQ2hhcmFjdGVyVHlwZSksIGFsaWdub2YoQ2hhcmFj
dGVyVHlwZSkpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7
IGJ1ZmZlciwgbGVuZ3RoIH0pKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIAog
ICAgIHJldHVybiBzdHJpbmc7CkBAIC0xODEsMTIgKzE3NywxMiBAQCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYm9vbCBBcmd1bWVudENvZGVyPFN0CiAKIHZvaWQgQXJndW1lbnRDb2RlcjxTSEExOjpEaWdl
c3Q+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU0hBMTo6RGlnZXN0JiBkaWdlc3Qp
CiB7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0LmRhdGEoKSwgc2l6
ZW9mKGRpZ2VzdCksIDEpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGRpZ2Vz
dCk7CiB9CiAKIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIEFyZ3VtZW50Q29kZXI8U0hBMTo6RGln
ZXN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQogewot
ICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3QuZGF0YSgpLCBz
aXplb2YoZGlnZXN0KSwgMSk7CisgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhE
YXRhKGRpZ2VzdCk7CiB9CiAKICNpZiBIQVZFKEFVRElUX1RPS0VOKQpJbmRleDogU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NSwxMiArNDUsMTIgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFNpbXBs
ZUFyZ3VtZQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+CiAgICAgc3RhdGljIHZvaWQg
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFQmIHQpCiAgICAgewotICAgICAgICBlbmNv
ZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3Qq
PigmdCksIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKFNwYW4geyAmdCwgMSB9KTsKICAgICB9CiAKICAgICBzdGF0aWMgV0FSTl9V
TlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFQmIHQpCiAgICAgewot
ICAgICAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4oJnQpLCBzaXplb2YoVCksIGFsaWdub2YoVCkpOworICAgICAgICByZXR1
cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZ0LCAxIH0pOwogICAgIH0K
IH07CiAKQEAgLTYxLDEzICs2MSwxNCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgRXh0
ZW50PiBzdHJ1CiAgICAgewogICAgICAgICBpZiAoIUV4dGVudCkKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4oYXJyYXlSZWZlcmVuY2UuZGF0YSgpKSwgYXJyYXlSZWZlcmVuY2Uu
c2l6ZSgpICogc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVG
aXhlZExlbmd0aERhdGEoU3BhbiB7IGFycmF5UmVmZXJlbmNlLmRhdGEoKSwgYXJyYXlSZWZlcmVu
Y2Uuc2l6ZSgpIH0pOwogICAgIH0KICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxBcnJheVJlZmVy
ZW5jZVR5cGU+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKICAgICAgICAgaWYgKCFF
eHRlbnQpCiAgICAgICAgICAgICByZXR1cm4gQXJyYXlSZWZlcmVuY2VUeXBlKCk7Ci0gICAgICAg
IGNvbnN0IHVpbnQ4X3QqIGRhdGEgPSBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoUmVmZXJlbmNl
KEV4dGVudCAqIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CisKKyAgICAgICAgY29uc3QgYXV0byog
ZGF0YSA9IGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhSZWZlcmVuY2UoRXh0ZW50ICogc2l6ZW9m
KFQpLCBhbGlnbm9mKFQpKTsKICAgICAgICAgaWYgKCFkYXRhKQogICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKICAgICAgICAgcmV0dXJuIEFycmF5UmVmZXJlbmNlVHlwZShyZWludGVy
cHJldF9jYXN0PGNvbnN0IFQqPihkYXRhKSwgRXh0ZW50KTsKQEAgLTgyLDcgKzgzLDcgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEFyZ3VtZW50Q29kZQogICAgICAgICBlbmNvZGVyIDw8
IHN0YXRpY19jYXN0PHVpbnQ2NF90PihhcnJheVJlZmVyZW5jZS5zaXplKCkpOwogICAgICAgICBp
ZiAoIWFycmF5UmVmZXJlbmNlLnNpemUoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90Kj4oYXJyYXlSZWZlcmVuY2UuZGF0YSgpKSwgYXJyYXlSZWZlcmVuY2Uuc2l6ZSgpICogc2l6
ZW9mKFQpLCBhbGlnbm9mKFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERh
dGEoU3BhbiB7IGFycmF5UmVmZXJlbmNlLmRhdGEoKSwgYXJyYXlSZWZlcmVuY2Uuc2l6ZSgpIH0p
OwogICAgIH0KICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxBcnJheVJlZmVyZW5jZVR5cGU+IGRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKQEAgLTk2LDcgKzk3LDcgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEFyZ3VtZW50Q29kZQogICAgICAgICBpZiAoVU5MSUtFTFkoZGF0
YVNpemUuaGFzT3ZlcmZsb3dlZCgpKSkKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CiAKLSAgICAgICAgY29uc3QgdWludDhfdCogZGF0YSA9IGRlY29kZXIuZGVjb2RlRml4ZWRMZW5n
dGhSZWZlcmVuY2UoZGF0YVNpemUsIGFsaWdub2YoVCkpOworICAgICAgICBjb25zdCBhdXRvKiBk
YXRhID0gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aFJlZmVyZW5jZShkYXRhU2l6ZSwgYWxpZ25v
ZihUKSk7CiAgICAgICAgIGlmICghZGF0YSkKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CiAgICAgICAgIHJldHVybiBBcnJheVJlZmVyZW5jZVR5cGUocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBUKj4oZGF0YSksIHN0YXRpY19jYXN0PHNpemVfdD4oc2l6ZSkpOwpAQCAtNDIzLDcgKzQy
NCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICBzdGF0
aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiYgdmVjdG9yKQogICAgIHsKICAg
ICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odmVjdG9yLnNpemUoKSk7Ci0g
ICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6ZSgpICogc2l6ZW9mKFQpLCBh
bGlnbm9mKFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEodmVjdG9y
KTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyLCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlciwgbWluQ2FwYWNpdHk+JiB2ZWN0b3IpCkBAIC00NDYsNyArNDQ3LDcgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAgICAgICBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+IHRlbXA7CiAgICAgICAgIHRl
bXAuZ3JvdyhzaXplKTsKIAotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhE
YXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHRlbXAuZGF0YSgpKSwgc2l6ZSAqIHNpemVv
ZihUKSwgYWxpZ25vZihUKSkpCisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0
aERhdGEodGVtcCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgdmVjdG9y
LnN3YXAodGVtcCk7CkBAIC00NzMsNyArNDc0LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IGlubGluZUNhcGFjaQogICAgICAgICBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlciwgbWluQ2FwYWNpdHk+IHZlY3RvcjsKICAgICAgICAgdmVjdG9yLmdyb3coc2l6
ZSk7CiAKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVy
cHJldF9jYXN0PHVpbnQ4X3QqPih2ZWN0b3IuZGF0YSgpKSwgc2l6ZSAqIHNpemVvZihUKSwgYWxp
Z25vZihUKSkpCisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEodmVj
dG9yKSkKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKICAgICAgICAgcmV0dXJu
IHZlY3RvcjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FycmF5UmVmZXJlbmNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJyYXlSZWZlcmVu
Y2UuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJy
YXlSZWZlcmVuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOCBAQAogCiBuYW1lc3Bh
Y2UgSVBDIHsKIAorLy8gRklYTUU6IFJlcGxhY2Ugd2l0aCA8d3RmL1NwYW4uaD4KKwogaW5saW5l
IGNvbnN0ZXhwciBzaXplX3QgYXJyYXlSZWZlcmVuY2VEeW5hbWljRXh0ZW50ID0gc3RkOjpudW1l
cmljX2xpbWl0czxzaXplX3Q+OjptYXgoKTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVf
dCBFeHRlbnQgPSBhcnJheVJlZmVyZW5jZUR5bmFtaWNFeHRlbnQ+CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiwxMyAr
MjA2LDEzIEBAIGJvb2wgRGVjb2Rlcjo6YnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGEKICAgICBy
ZXR1cm4gYWxpZ25lZEJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4ocm91bmRVcFRvQWxpZ25t
ZW50KG1fYnVmZmVyUG9zLCBhbGlnbm1lbnQpLCBtX2J1ZmZlciwgbV9idWZmZXJFbmQsIHNpemUp
OwogfQogCi1ib29sIERlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSh1aW50OF90KiBkYXRh
LCBzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVudCkKK2Jvb2wgRGVjb2Rlcjo6ZGVjb2RlRml4
ZWRMZW5ndGhEYXRhKFNwYW48c3RkOjpieXRlPiBkYXRhLCBzaXplX3QgYWxpZ25tZW50KQogewot
ICAgIGlmICghYWxpZ25CdWZmZXJQb3NpdGlvbihhbGlnbm1lbnQsIHNpemUpKQorICAgIGlmICgh
YWxpZ25CdWZmZXJQb3NpdGlvbihhbGlnbm1lbnQsIGRhdGEuc2l6ZSgpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgbWVtY3B5KGRhdGEsIG1fYnVmZmVyUG9zLCBzaXplKTsKLSAgICBt
X2J1ZmZlclBvcyArPSBzaXplOworICAgIG1lbWNweShkYXRhLmRhdGEoKSwgbV9idWZmZXJQb3Ms
IGRhdGEuc2l6ZSgpKTsKKyAgICBtX2J1ZmZlclBvcyArPSBkYXRhLnNpemUoKTsKIAogICAgIHJl
dHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuaAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSwxMyBAQCBwdWJsaWM6CiAgICAgV0FSTl9VTlVTRURf
UkVUVVJOIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyUG9zICE9IG51bGxw
dHI7IH0KICAgICB2b2lkIG1hcmtJbnZhbGlkKCkgeyBtX2J1ZmZlclBvcyA9IG51bGxwdHI7IH0K
IAotICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZUZpeGVkTGVuZ3RoRGF0YSh1aW50
OF90KiBkYXRhLCBzaXplX3QsIHNpemVfdCBhbGlnbm1lbnQpOworICAgIFdBUk5fVU5VU0VEX1JF
VFVSTiBib29sIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPHN0ZDo6Ynl0ZT4sIHNpemVfdCBh
bGlnbm1lbnQpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBXQVJOX1VOVVNFRF9S
RVRVUk4gYm9vbCBkZWNvZGVGaXhlZExlbmd0aERhdGEoVCYmIGRhdGEsIHNpemVfdCBhbGlnbm1l
bnQgPSBhbGlnbm9mKHR5cGVuYW1lIGRlY2x0eXBlKFNwYW4oc3RkOjpkZWNsdmFsPFQ+KCkpKTo6
dmFsdWVfdHlwZSkpCisgICAgeworICAgICAgICByZXR1cm4gZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KGFzV3JpdGFibGVCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pLCBhbGlnbm1l
bnQpOworICAgIH0KIAogICAgIC8vIFRoZSBkYXRhIGluIHRoZSByZXR1cm5lZCBwb2ludGVyIGhl
cmUgd2lsbCBvbmx5IGJlIHZhbGlkIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIERlY29kZXIgb2Jq
ZWN0LgogICAgIC8vIFJldHVybnMgbnVsbHB0ciBvbiBmYWlsdXJlLgpJbmRleDogU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsMTIg
KzIwMiwxMiBAQCB1aW50OF90KiBFbmNvZGVyOjpncm93KHNpemVfdCBhbGlnbm1lbnQsCiAgICAg
cmV0dXJuIG1fYnVmZmVyICsgYWxpZ25lZFNpemU7CiB9CiAKLXZvaWQgRW5jb2Rlcjo6ZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBzaXplX3Qg
YWxpZ25tZW50KQordm9pZCBFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEoU3Bhbjxjb25z
dCBzdGQ6OmJ5dGU+IGRhdGEsIHNpemVfdCBhbGlnbm1lbnQpCiB7Ci0gICAgQVNTRVJUKCEocmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGRhdGEpICUgYWxpZ25tZW50KSk7CisgICAgQVNTRVJU
KCEocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGRhdGEuZGF0YSgpKSAlIGFsaWdubWVudCkp
OwogCi0gICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQsIHNpemUpOwotICAgIG1l
bWNweShidWZmZXIsIGRhdGEsIHNpemUpOworICAgIGF1dG8qIGJ1ZmZlciA9IGdyb3coYWxpZ25t
ZW50LCBkYXRhLnNpemUoKSk7CisgICAgbWVtY3B5KGJ1ZmZlciwgZGF0YS5kYXRhKCksIGRhdGEu
c2l6ZSgpKTsKIH0KIAogdm9pZCBFbmNvZGVyOjphZGRBdHRhY2htZW50KEF0dGFjaG1lbnQmJiBh
dHRhY2htZW50KQpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29kZXIuaAkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZm
ZXIuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQu
aD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFt
ZXNwYWNlIElQQyB7CkBAIC02MCw3ICs2MSwxMyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHdyYXBG
b3JUZXN0aW5nKFVuaXF1ZVJlZjxFbmNvZGVyPiYmKTsKIAotICAgIHZvaWQgZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCwgc2l6ZV90IGFsaWdubWVudCk7
CisgICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRh
dGEsIHNpemVfdCBhbGlnbm1lbnQpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2
b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShUJiYgZGF0YSwgc2l6ZV90IGFsaWdubWVudCA9IGFs
aWdub2YodHlwZW5hbWUgZGVjbHR5cGUoU3BhbihzdGQ6OmRlY2x2YWw8VD4oKSkpOjp2YWx1ZV90
eXBlKSkKKyAgICB7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShhc0J5dGVzKFNwYW4g
eyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSksIGFsaWdubWVudCk7CisgICAgfQogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KICAgICBFbmNvZGVyJiBvcGVyYXRvcjw8KFQmJiB0KQpJbmRleDog
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU2hhcmVkQnVmZmVyQ29weS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU2hhcmVkQnVmZmVyQ29weS5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1NoYXJlZEJ1ZmZl
ckNvcHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHZvaWQgU2hhcmVkQnVm
ZmVyQ29weTo6ZW5jb2RlKEVuY29kZXImIGUKICAgICBpZiAoIWJ1ZmZlclNpemUpCiAgICAgICAg
IHJldHVybjsKICAgICBmb3IgKGF1dG8mIHNlZ21lbnQgOiAqbV9idWZmZXIpCi0gICAgICAgIGVu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHNlZ21lbnQuc2VnbWVudC0+ZGF0YSgpLCBzZWdt
ZW50LnNlZ21lbnQtPnNpemUoKSwgMSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKHNlZ21lbnQuc2VnbWVudC0+Ynl0ZXMoKSk7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8U2hh
cmVkQnVmZmVyQ29weT4gU2hhcmVkQnVmZmVyQ29weTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uRW5jb2Rl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5l
Y3Rpb25FbmNvZGVyLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25FbmNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYg
KzI3LDcgQEAKIAogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiTWVzc2Fn
ZU5hbWVzLmgiCisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CiAKIG5hbWVzcGFjZSBJUEMgewpAQCAtNTMsMjIgKzU0LDI4IEBAIHB1YmxpYzoKIAog
ICAgIH5TdHJlYW1Db25uZWN0aW9uRW5jb2RlcigpID0gZGVmYXVsdDsKIAotICAgIGJvb2wgZW5j
b2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBzaXpl
X3QgYWxpZ25tZW50KQorICAgIGJvb2wgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48Y29uc3Qg
c3RkOjpieXRlPiBkYXRhLCBzaXplX3QgYWxpZ25tZW50KQogICAgIHsKICAgICAgICAgc2l6ZV90
IGJ1ZmZlclBvaW50ZXIgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50
cHRyX3Q+KG1fYnVmZmVyICsgbV9lbmNvZGVkU2l6ZSkpOwogICAgICAgICBzaXplX3QgbmV3QnVm
ZmVyUG9pbnRlciA9IHJvdW5kVXBUb011bHRpcGxlT2YoYWxpZ25tZW50LCBidWZmZXJQb2ludGVy
KTsKICAgICAgICAgaWYgKG5ld0J1ZmZlclBvaW50ZXIgPCBidWZmZXJQb2ludGVyKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpbnRwdHJfdCBhbGlnbmVkU2l6ZSA9IG1fZW5j
b2RlZFNpemUgKyAobmV3QnVmZmVyUG9pbnRlciAtIGJ1ZmZlclBvaW50ZXIpOwotICAgICAgICBp
ZiAoIXJlc2VydmUoYWxpZ25lZFNpemUsIHNpemUpKQorICAgICAgICBpZiAoIXJlc2VydmUoYWxp
Z25lZFNpemUsIGRhdGEuc2l6ZSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgdWludDhfdCogYnVmZmVyID0gbV9idWZmZXIgKyBhbGlnbmVkU2l6ZTsKLSAgICAgICAgbWVt
Y3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7Ci0gICAgICAgIG1fZW5jb2RlZFNpemUgPSBhbGlnbmVk
U2l6ZSArIHNpemU7CisgICAgICAgIGF1dG8qIGJ1ZmZlciA9IG1fYnVmZmVyICsgYWxpZ25lZFNp
emU7CisgICAgICAgIG1lbWNweShidWZmZXIsIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7Cisg
ICAgICAgIG1fZW5jb2RlZFNpemUgPSBhbGlnbmVkU2l6ZSArIGRhdGEuc2l6ZSgpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZv
aWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCBzaXplX3QgYWxpZ25tZW50ID0gYWxp
Z25vZih0eXBlbmFtZSBkZWNsdHlwZShTcGFuKHN0ZDo6ZGVjbHZhbDxUPigpKSk6OnZhbHVlX3R5
cGUpKQorICAgIHsKKyAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGFzQnl0ZXMoU3BhbiB7
IHN0ZDo6Zm9yd2FyZDxUPihkYXRhKSB9KSwgYWxpZ25tZW50KTsKKyAgICB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgogICAgIFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyJiBvcGVyYXRvcjw8
KFQmJiB0KQogICAgIHsKICAgICAgICAgQXJndW1lbnRDb2RlcjxzdGQ6OnJlbW92ZV9jb25zdF90
PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+Piwgdm9pZD46OmVuY29kZSgqdGhpcywgc3RkOjpm
b3J3YXJkPFQ+KHQpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVu
dENvZGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFy
Z3VtZW50Q29kZXJzLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9TaGFy
ZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDcgKzE0
NCw3IEBAIHN0YXRpYyB2b2lkIGVuY29kZVNoYXJlZEJ1ZmZlcihFbmNvZGVyJiAKICAgICAvLyBv
dmVyIHRoZSBJUEMuIENvbm5lY3Rpb25Vbml4LmNwcCBhbHJlYWR5IHVzZXMgc2hhcmVkIG1lbW9y
eSB0byBzZW5kIGFueSBJUEMgbWVzc2FnZSB0aGF0IGlzCiAgICAgLy8gdG9vIGxhcmdlLiBTZWUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODU3MS4KICAgICBmb3Ig
KGNvbnN0IGF1dG8mIGVsZW1lbnQgOiAqYnVmZmVyKQotICAgICAgICBlbmNvZGVyLmVuY29kZUZp
eGVkTGVuZ3RoRGF0YShlbGVtZW50LnNlZ21lbnQtPmRhdGEoKSwgZWxlbWVudC5zZWdtZW50LT5z
aXplKCksIDEpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShlbGVtZW50
LnNlZ21lbnQtPmJ5dGVzKCkpOwogI2Vsc2UKICAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5k
bGU7CiAgICAgYXV0byBzaGFyZWRNZW1vcnlCdWZmZXIgPSBTaGFyZWRNZW1vcnk6OmNvcHlCdWZm
ZXIoKmJ1ZmZlcik7CkBAIC0xODAsNyArMTgwLDcgQEAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVS
TiBib29sIGRlY29kZVNoYQogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CiAgICAgZGF0YS5n
cm93KGJ1ZmZlclNpemUpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEo
ZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAxKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4
ZWRMZW5ndGhEYXRhKGRhdGEpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBidWZmZXIg
PSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGRhdGEpKTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvU2hhcmVkL21hYy9BdXhpbGlhcnlQcm9jZXNzTWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvU2hhcmVkL21hYy9BdXhpbGlhcnlQcm9jZXNzTWFjLm1tCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQXV4aWxpYXJ5UHJvY2Vzc01hYy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMzIxLDcgKzMyMSw3IEBAIHN0YXRpYyBTdHJpbmcgc2FuZGJveEZp
bGVQYXRoKGNvbnN0IFN0cmkKICAgICBjcnlwdG8tPmFkZEJ5dGVzKGhlYWRlci5kYXRhKCksIGhl
YWRlci5sZW5ndGgoKSk7CiAgICAgYXV0byBoYXNoID0gY3J5cHRvLT5jb21wdXRlSGFzaCgpOwog
Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoZGlyZWN0b3J5UGF0aCwgIi9Db21waWxlZFNhbmRib3gr
IiwgYmFzZTY0VVJMRW5jb2RlZChoYXNoLmRhdGEoKSwgaGFzaC5zaXplKCkpKTsKKyAgICByZXR1
cm4gbWFrZVN0cmluZyhkaXJlY3RvcnlQYXRoLCAiL0NvbXBpbGVkU2FuZGJveCsiLCBiYXNlNjRV
UkxFbmNvZGVkKGhhc2gpKTsKIH0KIAogc3RhdGljIGJvb2wgZW5zdXJlU2FuZGJveENhY2hlRGly
ZWN0b3J5KGNvbnN0IFNhbmRib3hJbmZvJiBpbmZvKQpJbmRleDogU291cmNlL1dlYktpdC9TaGFy
ZWQvd2luL1dlYkNvcmVBcmd1bWVudENvZGVyc1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9TaGFyZWQvd2luL1dlYkNvcmVBcmd1bWVudENvZGVyc1dpbi5jcHAJKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9XZWJDb3JlQXJndW1lbnRDb2Rl
cnNXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxMiArNTEsMTIgQEAgc3RkOjpvcHRpb25h
bDxGb250QXR0cmlidXRlcz4gQXJndW1lbnRDbwogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRD
b2RlcjxMT0dGT05UPiB7CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIs
IGNvbnN0IExPR0ZPTlQmIGxvZ0ZvbnQpCiAgICAgewotICAgICAgICBlbmNvZGVyLmVuY29kZUZp
eGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmbG9nRm9udCks
IHNpemVvZiBsb2dGb250LCAxKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERh
dGEoU3BhbiB7ICZsb2dGb250LCAxIH0sIDEpOwogICAgIH0KICAgICBzdGF0aWMgc3RkOjpvcHRp
b25hbDxMT0dGT05UPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7CiAgICAgICAgIExP
R0ZPTlQgbG9nRm9udDsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0
YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmbG9nRm9udCksIHNpemVvZihsb2dGb250KSwg
MSkpCisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZs
b2dGb250LCAxIH0sIDEpKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAg
ICAgcmV0dXJuIGxvZ0ZvbnQ7CiAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuY3BwCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0
U3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsMTggKzEzMSwyMCBAQCBzdGF0aWMgV2Vi
S2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGEgZW5jb2RlCiAgICAgZW5jb2RlciA8PCBtZXRhRGF0YS5j
b25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNpemU7CiAgICAgZW5jb2RlciA8PCBtZXRhRGF0YS5j
b25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW47CiAKLSAgICBBU1NFUlQoZW5jb2Rlci5idWZmZXJT
aXplKCkgPT0gQ29udGVudFJ1bGVMaXN0RmlsZUhlYWRlclNpemUpOwotICAgIHJldHVybiBXZWJL
aXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNp
emUoKSk7CisgICAgQVNTRVJUKGVuY29kZXIuYnVmZmVyKCkuc2l6ZSgpID09IENvbnRlbnRSdWxl
TGlzdEZpbGVIZWFkZXJTaXplKTsKKyAgICByZXR1cm4gV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRh
dGEgeyBlbmNvZGVyLmJ1ZmZlcigpIH07CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQg
Z2V0RGF0YShjb25zdCBUJiwgY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6
ZV90KT4mKTsKLXRlbXBsYXRlPD4gdm9pZCBnZXREYXRhKGNvbnN0IFdlYktpdDo6TmV0d29ya0Nh
Y2hlOjpEYXRhJiBkYXRhLCBjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXpl
X3QpPiYgZnVuY3Rpb24pCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGdldERhdGEoY29uc3Qg
VCYsIGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mKTsKKwordGVt
cGxhdGU8PiB2b2lkIGdldERhdGEoY29uc3QgV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGEmIGRh
dGEsIGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mIGZ1bmN0aW9u
KQogewogICAgIGRhdGEuYXBwbHkoZnVuY3Rpb24pOwogfQotdGVtcGxhdGU8PiB2b2lkIGdldERh
dGEoY29uc3QgV2ViQ29yZTo6U2hhcmVkQnVmZmVyJiBkYXRhLCBjb25zdCBGdW5jdGlvbjxib29s
KGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYgZnVuY3Rpb24pCisKK3RlbXBsYXRlPD4gdm9pZCBn
ZXREYXRhKGNvbnN0IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlciYgZGF0YSwgY29uc3QgRnVuY3Rpb248
Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYgZnVuY3Rpb24pCiB7Ci0gICAgZnVuY3Rpb24o
ZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICBmdW5jdGlvbihkYXRhLmJ5dGVzKCkpOwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpAQCAtMTUwLDEzICsxNTIsMTMgQEAgc3RhdGljIHN0
ZDo6b3B0aW9uYWw8Q29udGVudFJ1bGVMaXN0TWV0YQogewogICAgIGJvb2wgc3VjY2VzcyA9IGZh
bHNlOwogICAgIENvbnRlbnRSdWxlTGlzdE1ldGFEYXRhIG1ldGFEYXRhOwotICAgIGdldERhdGEo
ZmlsZURhdGEsIFsmbWV0YURhdGEsICZzdWNjZXNzLCAmZmlsZURhdGFdKGNvbnN0IHVpbnQ4X3Qq
IGRhdGEsIHNpemVfdCBzaXplKSB7CisgICAgZ2V0RGF0YShmaWxlRGF0YSwgWyZtZXRhRGF0YSwg
JnN1Y2Nlc3MsICZmaWxlRGF0YV0oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpIHsKICAgICAg
ICAgLy8gVGhlIGZpbGUgZGF0YSBzaG91bGQgYmUgbWFwcGVkIGludG8gb25lIGNvbnRpbnVvdXMg
bWVtb3J5IHNlZ21lbnQgc28gdGhlIHNpemUKICAgICAgICAgLy8gcGFzc2VkIHRvIHRoZSBhcHBs
aWVyIHNob3VsZCBhbHdheXMgZXF1YWwgdGhlIGRhdGEgc2l6ZS4KLSAgICAgICAgaWYgKHNpemUg
IT0gZmlsZURhdGEuc2l6ZSgpKQorICAgICAgICBpZiAoZGF0YS5zaXplKCkgIT0gZmlsZURhdGEu
c2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIFdURjo6UGVyc2lz
dGVuY2U6OkRlY29kZXIgZGVjb2RlcihkYXRhLCBzaXplKTsKKyAgICAgICAgV1RGOjpQZXJzaXN0
ZW5jZTo6RGVjb2RlciBkZWNvZGVyIHsgZGF0YSB9OwogICAgICAgICAKICAgICAgICAgc3RkOjpv
cHRpb25hbDx1aW50MzJfdD4gdmVyc2lvbjsKICAgICAgICAgZGVjb2RlciA+PiB2ZXJzaW9uOwpA
QCAtMjI4LDggKzIzMCw4IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPE1hcHBlZERhdGE+IG9wZW5B
bmQKIHN0YXRpYyBib29sIHdyaXRlRGF0YVRvRmlsZShjb25zdCBXZWJLaXQ6Ok5ldHdvcmtDYWNo
ZTo6RGF0YSYgZmlsZURhdGEsIFBsYXRmb3JtRmlsZUhhbmRsZSBmZCkKIHsKICAgICBib29sIHN1
Y2Nlc3MgPSB0cnVlOwotICAgIGZpbGVEYXRhLmFwcGx5KFtmZCwgJnN1Y2Nlc3NdKGNvbnN0IHVp
bnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gICAgICAgIGlmICh3cml0ZVRvRmlsZShmZCwg
ZGF0YSwgc2l6ZSkgPT0gLTEpIHsKKyAgICBmaWxlRGF0YS5hcHBseShbZmQsICZzdWNjZXNzXShT
cGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkgeworICAgICAgICBpZiAod3JpdGVUb0ZpbGUoZmQs
IGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSkgPT0gLTEpIHsKICAgICAgICAgICAgIHN1Y2Nlc3Mg
PSBmYWxzZTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dl
YkF1dGhlbnRpY2F0aW9uUGFuZWwubW0JKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3IEBACiAjaW1wb3J0IDxwYWwvY3J5cHRvL0NyeXB0b0Rp
Z2VzdC5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRy
Lmg+CisjaW1wb3J0IDx3dGYvY29jb2EvU3BhbkNvY29hLmg+CiAjaW1wb3J0IDx3dGYvY29jb2Ev
VmVjdG9yQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogCkBAIC03MCw3ICs3
MSw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNEYXRhPiBwcm9kdWNlQ2xpZW50RGEKICAgICAgICAg
W2RpY3Rpb25hcnkgc2V0T2JqZWN0OkAid2ViYXV0aG4uZ2V0IiBmb3JLZXk6QCJ0eXBlIl07CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6YmFzZTY0VVJM
RW5jb2RlVG9TdHJpbmcoY2hhbGxlbmdlLmJ5dGVzLCBjaGFsbGVuZ2UubGVuZ3RoKSBmb3JLZXk6
QCJjaGFsbGVuZ2UiXTsKKyAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6YmFzZTY0VVJMRW5jb2Rl
VG9TdHJpbmcoYXNCeXRlcyhjaGFsbGVuZ2UpKSBmb3JLZXk6QCJjaGFsbGVuZ2UiXTsKICAgICBb
ZGljdGlvbmFyeSBzZXRPYmplY3Q6b3JpZ2luIGZvcktleTpAIm9yaWdpbiJdOwogCiAgICAgcmV0
dXJuIFtOU0pTT05TZXJpYWxpemF0aW9uIGRhdGFXaXRoSlNPTk9iamVjdDpkaWN0aW9uYXJ5Lmdl
dCgpIG9wdGlvbnM6TlNKU09OV3JpdGluZ1NvcnRlZEtleXMgZXJyb3I6bmlsXTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsQXV0aGVu
dGljYXRvci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRo
ZW50aWNhdGlvbi9Db2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3IubW0JKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2Fs
QXV0aGVudGljYXRvci5tbQkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCBzdGF0aWMg
aW5saW5lIEhhc2hTZXQ8U3RyaW5nPiBwcm9kdWNlSGFzCiAgICAgSGFzaFNldDxTdHJpbmc+IHJl
c3VsdDsKICAgICBmb3IgKGF1dG8mIGNyZWRlbnRpYWxEZXNjcmlwdG9yIDogY3JlZGVudGlhbERl
c2NyaXB0b3JzKSB7CiAgICAgICAgIGlmIChlbXB0eVRyYW5zcG9ydHNPckNvbnRhaW4oY3JlZGVu
dGlhbERlc2NyaXB0b3IudHJhbnNwb3J0cywgQXV0aGVudGljYXRvclRyYW5zcG9ydDo6SW50ZXJu
YWwpICYmIGNyZWRlbnRpYWxEZXNjcmlwdG9yLnR5cGUgPT0gUHVibGljS2V5Q3JlZGVudGlhbFR5
cGU6OlB1YmxpY0tleSAmJiBjcmVkZW50aWFsRGVzY3JpcHRvci5pZFZlY3Rvci5zaXplKCkgPT0g
Y3JlZGVudGlhbElkTGVuZ3RoKQotICAgICAgICAgICAgcmVzdWx0LmFkZChiYXNlNjRFbmNvZGVU
b1N0cmluZyhjcmVkZW50aWFsRGVzY3JpcHRvci5pZFZlY3Rvci5kYXRhKCksIGNyZWRlbnRpYWxE
ZXNjcmlwdG9yLmlkVmVjdG9yLnNpemUoKSkpOworICAgICAgICAgICAgcmVzdWx0LmFkZChiYXNl
NjRFbmNvZGVUb1N0cmluZyhjcmVkZW50aWFsRGVzY3JpcHRvci5pZFZlY3RvcikpOwogICAgIH0K
ICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgTG9jYWxBdXRo
ZW50aWNhdG9yOjptYWtlQ3JlZGVudGlhbCgKICAgICAgICAgaWYgKG5vdEZvdW5kICE9IG1fZXhp
c3RpbmdDcmVkZW50aWFscy5maW5kTWF0Y2hpbmcoWyZleGNsdWRlQ3JlZGVudGlhbElkc10gKGF1
dG8mIGNyZWRlbnRpYWwpIHsKICAgICAgICAgICAgIGF1dG8qIHJhd0lkID0gY3JlZGVudGlhbC0+
cmF3SWQoKTsKICAgICAgICAgICAgIEFTU0VSVChyYXdJZCk7Ci0gICAgICAgICAgICByZXR1cm4g
ZXhjbHVkZUNyZWRlbnRpYWxJZHMuY29udGFpbnMoYmFzZTY0RW5jb2RlVG9TdHJpbmcocmF3SWQt
PmRhdGEoKSwgcmF3SWQtPmJ5dGVMZW5ndGgoKSkpOworICAgICAgICAgICAgcmV0dXJuIGV4Y2x1
ZGVDcmVkZW50aWFsSWRzLmNvbnRhaW5zKGJhc2U2NEVuY29kZVRvU3RyaW5nKHJhd0lkLT5ieXRl
cygpKSk7CiAgICAgICAgIH0pKSB7CiAgICAgICAgICAgICByZWNlaXZlRXhjZXB0aW9uKHsgTm90
QWxsb3dlZEVycm9yLCAiQXQgbGVhc3Qgb25lIGNyZWRlbnRpYWwgbWF0Y2hlcyBhbiBlbnRyeSBv
ZiB0aGUgZXhjbHVkZUNyZWRlbnRpYWxzIGxpc3QgaW4gdGhlIHBsYXRmb3JtIGF0dGFjaGVkIGF1
dGhlbnRpY2F0b3IuIl9zIH0sIFdlYkF1dGhlbnRpY2F0aW9uU3RhdHVzOjpMQUV4Y2x1ZGVDcmVk
ZW50aWFsc01hdGNoZWQpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNTEwLDcgKzUxMCw3IEBA
IHZvaWQgTG9jYWxBdXRoZW50aWNhdG9yOjpnZXRBc3NlcnRpb24oKQogICAgICAgICB9CiAKICAg
ICAgICAgYXV0byogcmF3SWQgPSBjcmVkZW50aWFsLT5yYXdJZCgpOwotICAgICAgICBpZiAoYWxs
b3dDcmVkZW50aWFsSWRzLmNvbnRhaW5zKGJhc2U2NEVuY29kZVRvU3RyaW5nKHJhd0lkLT5kYXRh
KCksIHJhd0lkLT5ieXRlTGVuZ3RoKCkpKSkKKyAgICAgICAgaWYgKGFsbG93Q3JlZGVudGlhbElk
cy5jb250YWlucyhiYXNlNjRFbmNvZGVUb1N0cmluZyhyYXdJZC0+Ynl0ZXMoKSkpKQogICAgICAg
ICAgICAgYXNzZXJ0aW9uUmVzcG9uc2VzLnVuY2hlY2tlZEFwcGVuZChjcmVkZW50aWFsLmNvcHlS
ZWYoKSk7CiAgICAgfQogICAgIGlmIChhc3NlcnRpb25SZXNwb25zZXMuaXNFbXB0eSgpKSB7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tM
b2NhbENvbm5lY3Rpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViQXV0aGVudGljYXRpb24vTW9jay9Nb2NrTG9jYWxDb25uZWN0aW9uLm1tCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2Nr
L01vY2tMb2NhbENvbm5lY3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTE2Miw3ICsxNjIsNyBA
QCB2b2lkIE1vY2tMb2NhbENvbm5lY3Rpb246OmZpbHRlclJlc3BvbnNlCiAgICAgZm9yICg7IGl0
ciAhPSByZXNwb25zZXMuZW5kKCk7ICsraXRyKSB7CiAgICAgICAgIGF1dG8qIHJhd0lkID0gaXRy
LT5nZXQoKS5yYXdJZCgpOwogICAgICAgICBBU1NFUlQocmF3SWQpOwotICAgICAgICBhdXRvIHJh
d0lkQmFzZTY0ID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcocmF3SWQtPmRhdGEoKSwgcmF3SWQtPmJ5
dGVMZW5ndGgoKSk7CisgICAgICAgIGF1dG8gcmF3SWRCYXNlNjQgPSBiYXNlNjRFbmNvZGVUb1N0
cmluZyhyYXdJZC0+Ynl0ZXMoKSk7CiAgICAgICAgIGlmIChyYXdJZEJhc2U2NCA9PSBwcmVmZXJy
ZWRDcmVkZW50aWFsSWRCYXNlNjQpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvTGVnYWN5U2Vzc2lvblN0
YXRlQ29kaW5nLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvbWFjL0xlZ2FjeVNlc3Npb25TdGF0ZUNvZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
OSw3ICsxMjksNyBAQCBwdWJsaWM6CiAgICAgICAgICp0aGlzIDw8IGxlbmd0aDsKIAogICAgICAg
ICAqdGhpcyA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4obGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7
Ci0gICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQ4X3QqPihTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKS5nZXQoKSks
IGxlbmd0aCAqIHNpemVvZihVQ2hhciksIGFsaWdub2YoVUNoYXIpKTsKKyAgICAgICAgZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKFNwYW4geyBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJh
Y3RlcnMoKS5nZXQoKSwgbGVuZ3RoIH0pOwogCiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9
CkBAIC0xMzcsNyArMTM3LDcgQEAgcHVibGljOgogICAgIEhpc3RvcnlFbnRyeURhdGFFbmNvZGVy
JiBvcGVyYXRvcjw8KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmFsdWUpCiAgICAgewogICAgICAg
ICAqdGhpcyA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUuc2l6ZSgpKTsKLSAgICAgICAg
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHZhbHVlLmRhdGEoKSwgdmFsdWUuc2l6ZSgpLCAxKTsKKyAg
ICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHZhbHVlKTsKIAogICAgICAgICByZXR1cm4gKnRo
aXM7CiAgICAgfQpAQCAtMTQ1LDcgKzE0NSw3IEBAIHB1YmxpYzoKICAgICBIaXN0b3J5RW50cnlE
YXRhRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBWZWN0b3I8Y2hhcj4mIHZhbHVlKQogICAgIHsK
ICAgICAgICAgKnRoaXMgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZhbHVlLnNpemUoKSk7Ci0g
ICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPih2YWx1ZS5kYXRhKCkpLCB2YWx1ZS5zaXplKCksIDEpOworICAgICAgICBlbmNvZGVGaXhl
ZExlbmd0aERhdGEodmFsdWUpOwogCiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CkBAIC0y
MDYsMTcgKzIwNiwyMyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX2FyaXRobWV0aWM8VHlwZT46OnZhbHVlLCAiIik7CiAKLSAgICAgICAgZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2YWx1ZSksIHNpemVvZih2
YWx1ZSksIHNpemVvZih2YWx1ZSkpOworICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEoU3Bh
biB7ICZ2YWx1ZSwgMSB9LCBzaXplb2YodmFsdWUpKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwog
ICAgIH0KIAotICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqIGRh
dGEsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBhbGlnbm1lbnQpCisgICAgdm9pZCBlbmNvZGVGaXhl
ZExlbmd0aERhdGEoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEsIHVuc2lnbmVkIGFsaWdubWVu
dCkKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGRhdGEgfHwgIXNpemUpOwotICAgICAg
ICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZGF0YSkgJSBhbGlnbm1lbnQp
KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGF0YS5kYXRhKCkgfHwgIWRhdGEuc2l6ZSgpKTsK
KyAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGRhdGEuZGF0YSgp
KSAlIGFsaWdubWVudCkpOwogCi0gICAgICAgIHVpbnQ4X3QqIGJ1ZmZlciA9IGdyb3coYWxpZ25t
ZW50LCBzaXplKTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7CisgICAgICAg
IGF1dG8qIGJ1ZmZlciA9IGdyb3coYWxpZ25tZW50LCBkYXRhLnNpemUoKSk7CisgICAgICAgIG1l
bWNweShidWZmZXIsIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShUJiYgZGF0
YSwgdW5zaWduZWQgYWxpZ25tZW50ID0gYWxpZ25vZih0eXBlbmFtZSBkZWNsdHlwZShTcGFuKHN0
ZDo6ZGVjbHZhbDxUPigpKSk6OnZhbHVlX3R5cGUpKQorICAgIHsKKyAgICAgICAgZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKGFzQnl0ZXMoU3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihkYXRhKSB9KSwgYWxp
Z25tZW50KTsKICAgICB9CiAKICAgICB1aW50OF90KiBncm93KHVuc2lnbmVkIGFsaWdubWVudCwg
c2l6ZV90IHNpemUpCkBAIC02MDEsNyArNjA3LDcgQEAgcHVibGljOgogCiAgICAgICAgIFVDaGFy
KiBidWZmZXI7CiAgICAgICAgIGF1dG8gc3RyaW5nID0gU3RyaW5nOjpjcmVhdGVVbmluaXRpYWxp
emVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICAgICAgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1ZmZlciksIGxlbmd0aCAqIHNpemVvZihVQ2hhciksIGFs
aWdub2YoVUNoYXIpKTsKKyAgICAgICAgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBidWZm
ZXIsIGxlbmd0aCB9KTsKIAogICAgICAgICB2YWx1ZSA9IHN0cmluZzsKICAgICAgICAgcmV0dXJu
ICp0aGlzOwpAQCAtNzM3LDE3ICs3NDMsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX2FyaXRobWV0aWM8VHlwZT46OnZhbHVlLCAiIik7CiAgICAgICAgIHZhbHVl
ID0gVHlwZSgpOwogCi0gICAgICAgIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9j
YXN0PHVpbnQ4X3QqPigmdmFsdWUpLCBzaXplb2YodmFsdWUpLCBzaXplb2YodmFsdWUpKTsKKyAg
ICAgICAgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmdmFsdWUsIDEgfSwgc2l6ZW9mKHZh
bHVlKSk7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKLSAgICB2b2lkIGRlY29kZUZp
eGVkTGVuZ3RoRGF0YSh1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgYWxpZ25t
ZW50KQorICAgIHZvaWQgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48c3RkOjpieXRlPiBkYXRh
LCB1bnNpZ25lZCBhbGlnbm1lbnQpCiAgICAgewotICAgICAgICBpZiAoIWFsaWduQnVmZmVyUG9z
aXRpb24oYWxpZ25tZW50LCBzaXplKSkKKyAgICAgICAgaWYgKCFhbGlnbkJ1ZmZlclBvc2l0aW9u
KGFsaWdubWVudCwgZGF0YS5zaXplKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAg
IG1lbWNweShkYXRhLCBtX2J1ZmZlciwgc2l6ZSk7Ci0gICAgICAgIG1fYnVmZmVyICs9IHNpemU7
CisgICAgICAgIG1lbWNweShkYXRhLmRhdGEoKSwgbV9idWZmZXIsIGRhdGEuc2l6ZSgpKTsKKyAg
ICAgICAgbV9idWZmZXIgKz0gZGF0YS5zaXplKCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KKyAgICB2b2lkIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShUJiYgZGF0YSwgdW5zaWdu
ZWQgYWxpZ25tZW50ID0gYWxpZ25vZih0eXBlbmFtZSBkZWNsdHlwZShTcGFuKHN0ZDo6ZGVjbHZh
bDxUPigpKSk6OnZhbHVlX3R5cGUpKQorICAgIHsKKyAgICAgICAgZGVjb2RlRml4ZWRMZW5ndGhE
YXRhKGFzV3JpdGFibGVCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pLCBhbGln
bm1lbnQpOwogICAgIH0KIAogICAgIGJvb2wgYWxpZ25CdWZmZXJQb3NpdGlvbih1bnNpZ25lZCBh
bGlnbm1lbnQsIHNpemVfdCBzaXplKQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05l
dHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5jcHAJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01OSw4ICs1OSw4IEBAIE5ldHdvcmtTZW5kUXVldWUgV2ViU29j
a2V0Q2hhbm5lbDo6Y3JlYXQKICAgICAgICAgY2hhbm5lbC5ub3RpZnlTZW5kRnJhbWUoV2ViU29j
a2V0RnJhbWU6Ok9wQ29kZTo6T3BDb2RlVGV4dCwgdXRmOFN0cmluZy5kYXRhQXNVSW50OFB0cigp
LCB1dGY4U3RyaW5nLmxlbmd0aCgpKTsKICAgICAgICAgY2hhbm5lbC5zZW5kTWVzc2FnZShNZXNz
YWdlczo6TmV0d29ya1NvY2tldENoYW5uZWw6OlNlbmRTdHJpbmcgeyBJUEM6OkRhdGFSZWZlcmVu
Y2UgeyB1dGY4U3RyaW5nLmRhdGFBc1VJbnQ4UHRyKCksIHV0ZjhTdHJpbmcubGVuZ3RoKCkgfSB9
LCB1dGY4U3RyaW5nLmxlbmd0aCgpKTsKICAgICB9LCBbJmNoYW5uZWxdKGF1dG8mIHNwYW4pIHsK
LSAgICAgICAgY2hhbm5lbC5ub3RpZnlTZW5kRnJhbWUoV2ViU29ja2V0RnJhbWU6Ok9wQ29kZTo6
T3BDb2RlQmluYXJ5LCBzcGFuLmRhdGEoKSwgc3Bhbi5zaXplKCkpOwotICAgICAgICBjaGFubmVs
LnNlbmRNZXNzYWdlKE1lc3NhZ2VzOjpOZXR3b3JrU29ja2V0Q2hhbm5lbDo6U2VuZERhdGEgeyBJ
UEM6OkRhdGFSZWZlcmVuY2UgeyBzcGFuLmRhdGEoKSwgc3Bhbi5zaXplKCkgfSB9LCBzcGFuLnNp
emUoKSk7CisgICAgICAgIGNoYW5uZWwubm90aWZ5U2VuZEZyYW1lKFdlYlNvY2tldEZyYW1lOjpP
cENvZGU6Ok9wQ29kZUJpbmFyeSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3Bh
bi5kYXRhKCkpLCBzcGFuLnNpemUoKSk7CisgICAgICAgIGNoYW5uZWwuc2VuZE1lc3NhZ2UoTWVz
c2FnZXM6Ok5ldHdvcmtTb2NrZXRDaGFubmVsOjpTZW5kRGF0YSB7IElQQzo6RGF0YVJlZmVyZW5j
ZSB7IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNwYW4uZGF0YSgpKSwgc3Bhbi5z
aXplKCkgfSB9LCBzcGFuLnNpemUoKSk7CiAgICAgfSwgWyZjaGFubmVsXShFeGNlcHRpb25Db2Rl
IGV4Y2VwdGlvbkNvZGUpIHsKICAgICAgICAgYXV0byBjb2RlID0gc3RhdGljX2Nhc3Q8aW50Pihl
eGNlcHRpb25Db2RlKTsKICAgICAgICAgY2hhbm5lbC5mYWlsKG1ha2VTdHJpbmcoIkZhaWxlZCB0
byBsb2FkIEJsb2I6IGV4Y2VwdGlvbiBjb2RlID0gIiwgY29kZSkpOwpJbmRleDogU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3Rp
bmdBUEkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDMsMTIgKzQ0Myw3IEBAIEpTVmFsdWVSZWYg
SlNTaGFyZWRNZW1vcnk6OnJlYWRCeXRlcyhKU0MKICAgICByZXR1cm4gdG9SZWYoanNBcnJheUJ1
ZmZlcik7CiB9CiAKLXN0cnVjdCBBcnJheUJ1ZmZlckRhdGEgewotICAgIHZvaWQqIGJ1ZmZlciB7
IG51bGxwdHIgfTsKLSAgICBzaXplX3QgbGVuZ3RoIHsgMCB9OwotfTsKLQotc3RhdGljIEFycmF5
QnVmZmVyRGF0YSBhcnJheUJ1ZmZlckRhdGFGcm9tVmFsdWVSZWYoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTVHlwZWRBcnJheVR5cGUgdHlwZSwgSlNWYWx1ZVJlZiB2YWx1ZVJlZiwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQorc3RhdGljIFNwYW48c3RkOjpieXRlPiBhcnJheUJ1ZmZlckRhdGFGcm9t
VmFsdWVSZWYoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVHlwZWRBcnJheVR5cGUgdHlwZSwgSlNW
YWx1ZVJlZiB2YWx1ZVJlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIGF1dG8gb2Jq
ZWN0UmVmID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIHZhbHVlUmVmLCBleGNlcHRpb24pOwog
ICAgIGlmICghb2JqZWN0UmVmKQpAQCAtNDY5LDcgKzQ2NCw3IEBAIHN0YXRpYyBBcnJheUJ1ZmZl
ckRhdGEgYXJyYXlCdWZmZXJEYXRhRnIKICAgICBlbHNlCiAgICAgICAgIGxlbmd0aCA9IEpTT2Jq
ZWN0R2V0VHlwZWRBcnJheUJ5dGVMZW5ndGgoY29udGV4dCwgb2JqZWN0UmVmLCBleGNlcHRpb24p
OwogCi0gICAgcmV0dXJuIHsgYnVmZmVyLCBsZW5ndGggfTsKKyAgICByZXR1cm4geyBzdGF0aWNf
Y2FzdDxzdGQ6OmJ5dGUqPihidWZmZXIpLCBsZW5ndGggfTsKIH0KIAogSlNWYWx1ZVJlZiBKU1No
YXJlZE1lbW9yeTo6d3JpdGVCeXRlcyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYs
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCkBAIC00ODcsMTMgKzQ4
MiwxMyBAQCBKU1ZhbHVlUmVmIEpTU2hhcmVkTWVtb3J5Ojp3cml0ZUJ5dGVzKEpTCiAgICAgfQog
CiAgICAgYXV0byBkYXRhID0gYXJyYXlCdWZmZXJEYXRhRnJvbVZhbHVlUmVmKGNvbnRleHQsIHR5
cGUsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKTsKLSAgICBpZiAoIWRhdGEuYnVmZmVyKSB7Cisg
ICAgaWYgKCFkYXRhLmRhdGEoKSkgewogICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVy
cm9yKGNvbnRleHQsICJDb3VsZCBub3QgcmVhZCB0aGUgYnVmZmVyIl9zKTsKICAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogICAgIH0KIAogICAgIHNpemVfdCBv
ZmZzZXQgPSAwOwotICAgIHNpemVfdCBsZW5ndGggPSBkYXRhLmxlbmd0aDsKKyAgICBzaXplX3Qg
bGVuZ3RoID0gZGF0YS5zaXplKCk7CiAgICAgc2l6ZV90IHNoYXJlZE1lbW9yeVNpemUgPSBqc1No
YXJlZE1lbW9yeS0+bV9zaGFyZWRNZW1vcnktPnNpemUoKTsKIAogICAgIGF1dG8qIGdsb2JhbE9i
amVjdCA9IHRvSlMoY29udGV4dCk7CkBAIC01MjYsNyArNTIxLDcgQEAgSlNWYWx1ZVJlZiBKU1No
YXJlZE1lbW9yeTo6d3JpdGVCeXRlcyhKUwogICAgICAgICBsZW5ndGggPSAqbGVuZ3RoVmFsdWU7
CiAgICAgfQogCi0gICAgbWVtY3B5KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihqc1NoYXJlZE1lbW9y
eS0+bV9zaGFyZWRNZW1vcnktPmRhdGEoKSkgKyBvZmZzZXQsIGRhdGEuYnVmZmVyLCBsZW5ndGgp
OworICAgIG1lbWNweShzdGF0aWNfY2FzdDx1aW50OF90Kj4oanNTaGFyZWRNZW1vcnktPm1fc2hh
cmVkTWVtb3J5LT5kYXRhKCkpICsgb2Zmc2V0LCBkYXRhLmRhdGEoKSwgbGVuZ3RoKTsKIAogICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KQEAgLTY4OCwxMCArNjgz
LDEwIEBAIHN0YXRpYyBib29sIGVuY29kZVR5cGVkQXJyYXkoSVBDOjpFbmNvZGUKICAgICBBU1NF
UlQodHlwZSAhPSBrSlNUeXBlZEFycmF5VHlwZU5vbmUpOwogCiAgICAgYXV0byBkYXRhID0gYXJy
YXlCdWZmZXJEYXRhRnJvbVZhbHVlUmVmKGNvbnRleHQsIHR5cGUsIHZhbHVlUmVmLCBleGNlcHRp
b24pOwotICAgIGlmICghZGF0YS5idWZmZXIpCisgICAgaWYgKCFkYXRhLmRhdGEoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5idWZmZXIpLCBkYXRhLmxlbmd0aCwg
MSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoZGF0YSk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRW52aXJvbm1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRW52aXJvbm1lbnQuY3BwCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0Vudmlyb25tZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDcgKzE1Niw3IEBAIGJvb2wgRW52aXJvbm1lbnQ6OmNv
bXB1dGVJc0RlYnVnSGVhcEVuYWIKICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogCi0gICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9j
CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwyNyBAQAorMjAyMS0wNi0xMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgQWRvcHQgU3BhbiBpbiBtb3JlIHBsYWNlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL2NhaXJvL1BpeGVsRHVtcFN1cHBvcnRDYWlyby5jcHA6CisgICAgICAgIChjb21wdXRlU0hB
MUhhc2hTdHJpbmdGb3JCaXRtYXBDb250ZXh0KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9j
Zy9QaXhlbER1bXBTdXBwb3J0Q0cuY3BwOgorICAgICAgICAoY29tcHV0ZVNIQTFIYXNoU3RyaW5n
Rm9yQml0bWFwQ29udGV4dCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQmxv
b21GaWx0ZXIuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Z2VuZXJhdGVSYW5kb21EaWdl
c3RzKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcDoK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9jb2NvYS9IVFRQU2VydmVyLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Q29ubmVjdGlv
bjo6d2ViU29ja2V0SGFuZHNoYWtlKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NhaXJv
L1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwOgorICAgICAgICAoV1RSOjpjb21wdXRlU0hBMUhhc2hT
dHJpbmdGb3JDYWlyb1N1cmZhY2UpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvY2cvVGVz
dEludm9jYXRpb25DRy5jcHA6CisgICAgICAgIChXVFI6OmNvbXB1dGVTSEExSGFzaFN0cmluZ0Zv
ckNvbnRleHQpOgorCiAyMDIxLTA2LTExICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlp
QHNvbnkuY29tPgogCiAgICAgICAgIFtXaW5dW0R1bXBSZW5kZXJUcmVlXSAtLW5vLXRpbWVvdXQg
c3dpdGNoIGRvZXNuJ3Qgd29yawpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2Fpcm8vUGl4
ZWxEdW1wU3VwcG9ydENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJl
ZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fpcm8uY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBU
b29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fpcm8uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHZvaWQgY29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9y
Qml0bWFwQ29udGUKICAgICBTSEExIHNoYTE7CiAgICAgdW5zaWduZWQgY2hhciogYml0bWFwRGF0
YSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9k
YXRhKHN1cmZhY2UpKTsKICAgICBmb3IgKHVuc2lnbmVkIHJvdyA9IDA7IHJvdyA8IHBpeGVsc0hp
Z2g7IHJvdysrKSB7Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMoYml0bWFwRGF0YSwgNCAqIHBpeGVs
c1dpZGUpOworICAgICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyBiaXRtYXBEYXRhLCA0ICogcGl4
ZWxzV2lkZSB9KTsKICAgICAgICAgYml0bWFwRGF0YSArPSBieXRlc1BlclJvdzsKICAgICB9CiAg
ICAgU0hBMTo6RGlnZXN0IGhhc2g7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jZy9QaXhl
bER1bXBTdXBwb3J0Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nn
L1BpeGVsRHVtcFN1cHBvcnRDRy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4
LDE0ICs4OCwxNCBAQCB2b2lkIGNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckJpdG1hcENvbnRlCiAg
ICAgICAgICAgICB1aW50MzJfdCBidWZmZXJbcGl4ZWxzV2lkZV07CiAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGNvbHVtbiA9IDA7IGNvbHVtbiA8IHBpeGVsc1dpZGU7IGNvbHVtbisrKQogICAg
ICAgICAgICAgICAgIGJ1ZmZlcltjb2x1bW5dID0gT1NSZWFkTGl0dGxlSW50MzIoYml0bWFwRGF0
YSwgNCAqIGNvbHVtbik7Ci0gICAgICAgICAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZlciksIDQgKiBwaXhlbHNXaWRlKTsKKyAgICAgICAgICAg
IHNoYTEuYWRkQnl0ZXMoU3BhbiB7IGJ1ZmZlciwgcGl4ZWxzV2lkZSB9KTsKICAgICAgICAgICAg
IGJpdG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7CiAgICAgICAgIH0KICAgICB9IGVsc2UKICNlbmRp
ZgogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCByb3cgPSAwOyByb3cgPCBwaXhlbHNIaWdo
OyByb3crKykgewotICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhiaXRtYXBEYXRhLCA0ICogcGl4
ZWxzV2lkZSk7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyBiaXRtYXBEYXRhLCA0
ICogcGl4ZWxzV2lkZSB9KTsKICAgICAgICAgICAgIGJpdG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7
CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9C
bG9vbUZpbHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvQmxvb21GaWx0ZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9CbG9vbUZpbHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1
LDcgQEAgc3RhdGljIFZlY3RvcjxTSEExOjpEaWdlc3Q+IGdlbmVyYXRlUmFuZAogICAgIFNIQTEg
c2hhMTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaGFzaENvdW50OyArK2kpIHsKICAg
ICAgICAgZG91YmxlIHJhbmRvbSA9IHJhbmRvbU51bWJlcigpOwotICAgICAgICBzaGExLmFkZEJ5
dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZyYW5kb20pLCBzaXplb2YoZG91YmxlKSk7
CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZyYW5kb20sIDEgfSk7CiAgICAgICAgIFNI
QTE6OkRpZ2VzdCBkaWdlc3Q7CiAgICAgICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsKICAg
ICAgICAgaGFzaGVzLmFwcGVuZChkaWdlc3QpOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzMsOCArMTMzLDggQEAgVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBNYXBwaW5nRXhpc3RpbmdGaQog
ICAgIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhIG1hcHBlZEZpbGVEYXRhKHRlbXBGaWxlUGF0
aCgpLCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlTW9kZTo6U2hhcmVkLCBzdWNjZXNzKTsKICAgICBF
WFBFQ1RfVFJVRShzdWNjZXNzKTsKICAgICBFWFBFQ1RfVFJVRSghIW1hcHBlZEZpbGVEYXRhKTsK
LSAgICBFWFBFQ1RfVFJVRShtYXBwZWRGaWxlRGF0YS5zaXplKCkgPT0gc3RybGVuKEZpbGVTeXN0
ZW1UZXN0RGF0YSkpOwotICAgIEVYUEVDVF9UUlVFKHN0cm5zdHIoRmlsZVN5c3RlbVRlc3REYXRh
LCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4obWFwcGVkRmlsZURhdGEuZGF0YSgpKSwgbWFwcGVk
RmlsZURhdGEuc2l6ZSgpKSk7CisgICAgRVhQRUNUX1RSVUUobWFwcGVkRmlsZURhdGEuZGF0YSgp
LnNpemUoKSA9PSBzdHJsZW4oRmlsZVN5c3RlbVRlc3REYXRhKSk7CisgICAgRVhQRUNUX1RSVUUo
c3RybnN0cihGaWxlU3lzdGVtVGVzdERhdGEsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+
KG1hcHBlZEZpbGVEYXRhLmRhdGEoKS5kYXRhKCkpLCBtYXBwZWRGaWxlRGF0YS5kYXRhKCkuc2l6
ZSgpKSk7CiB9CiAKIFRFU1RfRihGaWxlU3lzdGVtVGVzdCwgTWFwcGluZ0V4aXN0aW5nRW1wdHlG
aWxlKQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU0hBMS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU0hBMS5jcHAJKHJldmlzaW9u
IDI3ODgwOSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1NIQTEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHN0YXRpYyB2b2lkIGV4cGVjdFNIQTEoQ1N0cmlu
ZyBpbnB1dCwgaW4KIHsKICAgICBTSEExIHNoYTE7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBy
ZXBlYXQ7ICsraSkKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhpbnB1dCk7CisgICAgICAgIHNoYTEu
YWRkQnl0ZXMoaW5wdXQuYnl0ZXMoKSk7CiAgICAgQ1N0cmluZyBhY3R1YWwgPSBzaGExLmNvbXB1
dGVIZXhEaWdlc3QoKTsKIAogICAgIEFTU0VSVF9FUShleHBlY3RlZC5sZW5ndGgoKSwgYWN0dWFs
Lmxlbmd0aCgpKTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW0J
KHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZl
ci5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQwLDExICszNDAsMTEgQEAgdm9pZCBDb25uZWN0aW9u
Ojp3ZWJTb2NrZXRIYW5kc2hha2UoQ29tcAogCiAgICAgICAgICAgICBjb25zdGV4cHIgYXV0byog
d2ViU29ja2V0S2V5R1VJRCA9ICIyNThFQUZBNS1FOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTEi
OwogICAgICAgICAgICAgU0hBMSBzaGExOwotICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhyZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihrZXlCZWdpbiksIGtleUVuZCAtIGtleUJlZ2lu
KTsKLSAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90Kj4od2ViU29ja2V0S2V5R1VJRCksIHN0cmxlbih3ZWJTb2NrZXRLZXlHVUlEKSk7CisgICAg
ICAgICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyBrZXlCZWdpbiwga2V5RW5kIH0pOworICAgICAg
ICAgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgd2ViU29ja2V0S2V5R1VJRCwgc3RybGVuKHdlYlNv
Y2tldEtleUdVSUQpIH0pOwogICAgICAgICAgICAgU0hBMTo6RGlnZXN0IGhhc2g7CiAgICAgICAg
ICAgICBzaGExLmNvbXB1dGVIYXNoKGhhc2gpOwotICAgICAgICAgICAgcmV0dXJuIGJhc2U2NEVu
Y29kZVRvU3RyaW5nKGhhc2guZGF0YSgpLCBTSEExOjpoYXNoU2l6ZSk7CisgICAgICAgICAgICBy
ZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaGFzaCk7CiAgICAgICAgIH07CiAKICAgICAgICAg
Y29ubmVjdGlvbi5zZW5kKEhUVFBSZXNwb25zZSgxMDEsIHsKSW5kZXg6IFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvY2Fpcm8vVGVzdEludm9jYXRpb25DYWlyby5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9jYWlyby9UZXN0SW52b2NhdGlvbkNhaXJvLmNwcAkocmV2aXNp
b24gMjc4ODA5KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jYWlyby9UZXN0SW52b2NhdGlv
bkNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBzdGF0aWMgdm9pZCBj
b21wdXRlU0hBMUhhc2hTdHJpbmdGb3JDYWlyCiAgICAgU0hBMSBzaGExOwogICAgIHVuc2lnbmVk
IGNoYXIqIGJpdG1hcERhdGEgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlKSk7CiAgICAgZm9yIChzaXplX3Qgcm93ID0gMDsg
cm93IDwgcGl4ZWxzSGlnaDsgKytyb3cpIHsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhiaXRtYXBE
YXRhLCA0ICogcGl4ZWxzV2lkZSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IGJpdG1h
cERhdGEsIDQgKiBwaXhlbHNXaWRlIH0pOwogICAgICAgICBiaXRtYXBEYXRhICs9IGJ5dGVzUGVy
Um93OwogICAgIH0KICAgICBTSEExOjpEaWdlc3QgaGFzaDsKSW5kZXg6IFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvY2cvVGVzdEludm9jYXRpb25DRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcAkocmV2aXNpb24gMjc4ODA5KQor
KysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQCB2b2lkIGNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckNv
bnRleHQoQ0dDCiAjZW5kaWYKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgcm93ID0gMDsg
cm93IDwgcGl4ZWxzSGlnaDsgcm93KyspIHsKLSAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoYml0
bWFwRGF0YSwgNCAqIHBpeGVsc1dpZGUpOworICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFu
IHsgYml0bWFwRGF0YSwgNCAqIHBpeGVsc1dpZGUgfSk7CiAgICAgICAgICAgICBiaXRtYXBEYXRh
ICs9IGJ5dGVzUGVyUm93OwogICAgICAgICB9CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431332</attachid>
            <date>2021-06-14 09:22:12 -0700</date>
            <delta_ts>2021-06-14 09:25:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226887-20210614092211.patch</filename>
            <type>text/plain</type>
            <size>204913</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBA
CisyMDIxLTA2LTEyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogQVBJL0pTU2NyaXB0Lm1tOgorICAg
ICAgICAoK1tKU1NjcmlwdCBzY3JpcHRPZlR5cGU6bWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTp3
aXRoU291cmNlVVJMOmFuZEJ5dGVjb2RlQ2FjaGU6aW5WaXJ0dWFsTWFjaGluZTplcnJvcjpdKToK
KyAgICAgICAgKC1bSlNTY3JpcHQgcmVhZENhY2hlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHdy
aXRlQ2FjaGU6XSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9ja0hhc2g6OkNvZGVCbG9ja0hhc2gpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHA6CisgICAgICAgIChJbnNw
ZWN0b3I6OmJhY2tlbmRDb21tYW5kc0hhc2gpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZm
ZXIuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJDb250ZW50czo6d3JpdGFibGVCeXRlcyk6
CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyQ29udGVudHM6OmJ5dGVzIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6QXJyYXlCdWZmZXI6OndyaXRhYmxlQnl0ZXMpOgorICAgICAgICAoSlNDOjpBcnJh
eUJ1ZmZlcjo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
Lmg6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6d3JpdGFibGVCeXRlcyk6CisgICAg
ICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRp
bWUvQ2FjaGVQYXlsb2FkLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVQYXlsb2FkOjptYWtlTWFw
cGVkUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6bWFrZU1hbGxvY1BheWxv
YWQpOgorICAgICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6Om1ha2VFbXB0eVBheWxvYWQpOgorICAg
ICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6OkNhY2hlUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNh
Y2hlUGF5bG9hZDo6ZnJlZURhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVQYXlsb2FkLmg6
CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6ZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlUGF5bG9hZDo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6
Q2FjaGVQYXlsb2FkKToKKyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKToKKwogMjAyMS0w
Ni0xMSAgUGF0cmljayBBbmdsZSAgPHBhbmdsZUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogQWRkIGluc3RydW1lbnRhdGlvbiB0byBub2RlIGRlc3RydWN0aW9uIGZvciBJbnNw
ZWN0b3JET01BZ2VudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMTMgKzEzNCwxMyBAQCArIChpbnN0YW5jZXR5cGUpc2Ny
aXB0T2ZUeXBlOihKU1NjcmlwdFR5CiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4g
Y3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJGaWxlIGF0IHBhdGggJUAg
Y291bGQgbm90IGJlIG1hcHBlZC4iLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihzeXN0ZW1QYXRo
KV0sIGVycm9yKTsKIAotICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCkpKQor
ICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmlsZURhdGEuZGF0YSgpLnNpemUoKSkpCiAg
ICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIk5v
dCBhbGwgY2hhcmFjdGVycyBpbiBmaWxlIGF0ICVAIGFyZSBBU0NJSS4iLCBzdGF0aWNfY2FzdDxO
U1N0cmluZyAqPihzeXN0ZW1QYXRoKV0sIGVycm9yKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gYWRv
cHROUyhbW0pTU2NyaXB0IGFsbG9jXSBpbml0XSk7CiAgICAgcmVzdWx0LT5tX3ZpcnR1YWxNYWNo
aW5lID0gdm07CiAgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOwotICAgIHJlc3VsdC0+bV9zb3Vy
Y2UgPSBTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcoYml0d2lzZV9jYXN0
PGNvbnN0IExDaGFyKj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpKSk7CisgICAg
cmVzdWx0LT5tX3NvdXJjZSA9IFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWlu
ZyhiaXR3aXNlX2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmls
ZURhdGEuZGF0YSgpLnNpemUoKSkpOwogICAgIHJlc3VsdC0+bV9tYXBwZWRTb3VyY2UgPSBXVEZN
b3ZlKGZpbGVEYXRhKTsKICAgICByZXN1bHQtPm1fc291cmNlVVJMID0gc291cmNlVVJMOwogICAg
IHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7CkBAIC0xNjgsMjQgKzE2OCwyMyBAQCAt
ICh2b2lkKXJlYWRDYWNoZQogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgY29uc3QgdWludDhfdCogZmlsZURhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihtYXBwZWRGaWxlLmRhdGEoKSk7Ci0gICAgdW5zaWduZWQgZmlsZVRvdGFsU2l6ZSA9IG1h
cHBlZEZpbGUuc2l6ZSgpOworICAgIGF1dG8gZmlsZURhdGEgPSBtYXBwZWRGaWxlLmRhdGEoKTsK
IAogICAgIC8vIEVuc3VyZSB3ZSBhdCBsZWFzdCBoYXZlIGEgU0hBMTo6RGlnZXN0IHRvIHJlYWQu
Ci0gICAgaWYgKGZpbGVUb3RhbFNpemUgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgeworICAgIGlm
IChmaWxlRGF0YS5zaXplKCkgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgewogICAgICAgICBGaWxl
U3lzdGVtOjpkZWxldGVGaWxlKGNhY2hlRmlsZW5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgdW5zaWduZWQgZmlsZURhdGFTaXplID0gZmlsZVRvdGFsU2l6ZSAtIHNpemVvZihT
SEExOjpEaWdlc3QpOworICAgIHVuc2lnbmVkIGZpbGVEYXRhU2l6ZSA9IGZpbGVEYXRhLnNpemUo
KSAtIHNpemVvZihTSEExOjpEaWdlc3QpOwogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFz
aDsKICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhmaWxlRGF0YSwgZmlsZURhdGFT
aXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKGZpbGVEYXRhLmZpcnN0KGZpbGVEYXRhU2l6ZSkpOwog
ICAgIHNoYTEuY29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2VzdCBm
aWxlSGFzaDsKLSAgICBtZW1jcHkoJmZpbGVIYXNoLCBmaWxlRGF0YSArIGZpbGVEYXRhU2l6ZSwg
c2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOworICAgIG1lbWNweSgmZmlsZUhhc2gsIGZpbGVEYXRhLmRh
dGEoKSArIGZpbGVEYXRhU2l6ZSwgc2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOwogCiAgICAgaWYgKGNv
bXB1dGVkSGFzaCAhPSBmaWxlSGFzaCkgewogICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxl
KGNhY2hlRmlsZW5hbWUpOwpAQCAtMzQzLDcgKzM0Miw3IEBAIC0gKEJPT0wpd3JpdGVDYWNoZToo
U3RyaW5nJillcnJvcgogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFzaDsKICAgICBTSEEx
IHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhtX2NhY2hlZEJ5dGVjb2RlLT5kYXRhKCksIG1fY2Fj
aGVkQnl0ZWNvZGUtPnNpemUoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgbV9jYWNoZWRC
eXRlY29kZS0+ZGF0YSgpLCBtX2NhY2hlZEJ5dGVjb2RlLT5zaXplKCkgfSk7CiAgICAgc2hhMS5j
b21wdXRlSGFzaChjb21wdXRlZEhhc2gpOwogICAgIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKHRl
bXBGRCwgY29tcHV0ZWRIYXNoLmRhdGEoKSwgc2l6ZW9mKGNvbXB1dGVkSGFzaCkpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0hhc2guY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgQ29kZUJsb2Nr
SGFzaDo6Q29kZUJsb2NrSGFzaChjb25zdCBTb3VyYwogICAgIEFTU0VSVChzb3VyY2VDb2RlLmxl
bmd0aCgpID49IDApOwogICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhTb3VyY2VDb2RlTGVuZ3Ro
VG9IYXNoID0gNTAwICogTUI7CiAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzb3VyY2VD
b2RlLmxlbmd0aCgpKSA8IG1heFNvdXJjZUNvZGVMZW5ndGhUb0hhc2gpCi0gICAgICAgIHNoYTEu
YWRkQnl0ZXMoc291cmNlQ29kZS50b1VURjgoKSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoc291
cmNlQ29kZS50b1VURjgoKS5ieXRlcygpKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gSnVzdCBo
YXNoIHdpdGggdGhlIGxlbmd0aCBhbmQgc2FtcGxlcyBvZiB0aGUgc291cmNlIHN0cmluZyBpbnN0
ZWFkLgogICAgICAgICBTdHJpbmdWaWV3IHN0ciA9IHNvdXJjZUNvZGUucHJvdmlkZXIoKS0+c291
cmNlKCk7CkBAIC02MiwxMCArNjIsMTAgQEAgQ29kZUJsb2NrSGFzaDo6Q29kZUJsb2NrSGFzaChj
b25zdCBTb3VyYwogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHIubGVuZ3RoKCk7CiAgICAg
ICAgIHVuc2lnbmVkIHN0ZXAgPSAobGVuZ3RoID4+IDEwKSArIDE7CiAKLSAgICAgICAgc2hhMS5h
ZGRCeXRlcyhiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KCZsZW5ndGgpLCBzaXplb2YobGVuZ3RoKSk7
CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZsZW5ndGgsIDEgfSk7CiAgICAgICAgIGRv
IHsKICAgICAgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IHN0cltpbmRleF07Ci0gICAgICAgICAg
ICBzaGExLmFkZEJ5dGVzKGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oJmNoYXJhY3RlciksIHNpemVv
ZihjaGFyYWN0ZXIpKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZjaGFyYWN0
ZXIsIDEgfSk7CiAgICAgICAgICAgICBvbGRJbmRleCA9IGluZGV4OwogICAgICAgICAgICAgaW5k
ZXggKz0gc3RlcDsKICAgICAgICAgfSB3aGlsZSAoaW5kZXggPiBvbGRJbmRleCAmJiBpbmRleCA8
IGxlbmd0aCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VIYXNo
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VI
YXNoLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BhcnNlSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiBQYXJzZUhhc2g6OlBhcnNlSGFzaChjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VD
b2RlKQogewogICAgIFNIQTEgc2hhMTsKLSAgICBzaGExLmFkZEJ5dGVzKHNvdXJjZUNvZGUudG9V
VEY4KCkpOworICAgIHNoYTEuYWRkQnl0ZXMoc291cmNlQ29kZS50b1VURjgoKS5ieXRlcygpKTsK
ICAgICBTSEExOjpEaWdlc3QgZGlnZXN0OwogICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsK
ICAgICB1bnNpZ25lZCBoYXNoID0gZGlnZXN0WzBdIHwgKGRpZ2VzdFsxXSA8PCA4KSB8IChkaWdl
c3RbMl0gPDwgMTYpIHwgKGRpZ2VzdFszXSA8PCAyNCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1JlbW90ZUluc3BlY3RvclV0aWxzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1Jl
bW90ZUluc3BlY3RvclV0aWxzLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgY29uc3QgQ1N0cmluZyYgYmFja2VuZENv
bW1hbmRzSGFzaCgpCiAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSA9IGdfYnl0ZXNfZ2V0X2Rh
dGEoYnl0ZXMuZ2V0KCksICZkYXRhU2l6ZSk7CiAgICAgICAgIEFTU0VSVChkYXRhU2l6ZSk7CiAg
ICAgICAgIFNIQTEgc2hhMTsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhzdGF0aWNfY2FzdDxjb25z
dCB1aW50OF90Kj4oZGF0YSksIGRhdGFTaXplKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFu
IHsgc3RhdGljX2Nhc3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSksIGRhdGFTaXplIH0pOwogICAg
ICAgICBoZXhEaWdlc3QgPSBzaGExLmNvbXB1dGVIZXhEaWdlc3QoKTsKICAgICB9CiAgICAgcmV0
dXJuIGhleERpZ2VzdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogI2luY2x1ZGUgPHd0Zi9QYWNrZWRSZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZl
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtODAsNyAr
ODEsMTAgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBt
X2RhdGEuZ2V0TWF5QmVOdWxsKHNpemVJbkJ5dGVzKCkpOyB9CiAgICAgdW5zaWduZWQgc2l6ZUlu
Qnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX3NpemVJbkJ5dGVzOyB9Ci0gICAgCisKKyAgICBTcGFu
PHN0ZDo6Ynl0ZT4gd3JpdGFibGVCeXRlcygpIHsgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8c3RkOjpi
eXRlKj4oZGF0YSgpKSwgc2l6ZUluQnl0ZXMoKSB9OyB9CisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4geyBzdGF0aWNfY2FzdDxjb25zdCBzdGQ6OmJ5dGUq
PihkYXRhKCkpLCBzaXplSW5CeXRlcygpIH07IH0KKwogICAgIGJvb2wgaXNTaGFyZWQoKSBjb25z
dCB7IHJldHVybiBtX3NoYXJlZDsgfQogICAgIAogcHJpdmF0ZToKQEAgLTEyNyw3ICsxMzEsOSBA
QCBwdWJsaWM6CiAgICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKICAgICBpbmxpbmUgY29uc3Qgdm9p
ZCogZGF0YSgpIGNvbnN0OwogICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7
Ci0gICAgCisgICAgaW5saW5lIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCk7CisgICAg
aW5saW5lIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAgICAgdm9pZCBt
YWtlU2hhcmVkKCk7CiAgICAgdm9pZCBzZXRTaGFyaW5nTW9kZShBcnJheUJ1ZmZlclNoYXJpbmdN
b2RlKTsKICAgICBpbmxpbmUgYm9vbCBpc1NoYXJlZCgpIGNvbnN0OwpAQCAtMTk3LDYgKzIwMywx
NiBAQCB1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJu
IG1fY29udGVudHMuc2l6ZUluQnl0ZXMoKTsKIH0KIAorU3BhbjxzdGQ6OmJ5dGU+IEFycmF5QnVm
ZmVyOjp3cml0YWJsZUJ5dGVzKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZW50cy53cml0YWJsZUJ5
dGVzKCk7Cit9CisKK1NwYW48Y29uc3Qgc3RkOjpieXRlPiBBcnJheUJ1ZmZlcjo6Ynl0ZXMoKSBj
b25zdAoreworICAgIHJldHVybiBtX2NvbnRlbnRzLmJ5dGVzKCk7Cit9CisKIGJvb2wgQXJyYXlC
dWZmZXI6OmlzU2hhcmVkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb250ZW50cy5pc1NoYXJl
ZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZm
ZXJWaWV3LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4Niw5IEBAIHB1
YmxpYzoKIAogICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVM
ZW5ndGg7IH0KIAorICAgIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCkgeyByZXR1cm4g
eyBzdGF0aWNfY2FzdDxzdGQ6OmJ5dGUqPihkYXRhKCkpLCBieXRlTGVuZ3RoKCkgfTsgfQorICAg
IFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0IHsgcmV0dXJuIHsgc3RhdGljX2Nh
c3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSgpKSwgYnl0ZUxlbmd0aCgpIH07IH0KKwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0RGV0YWNoYWJsZShib29sKTsKICAgICBib29sIGlzRGV0
YWNoYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNEZXRhY2hhYmxlOyB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlUGF5bG9hZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsMjcgKzMwLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogCiBD
YWNoZVBheWxvYWQgQ2FjaGVQYXlsb2FkOjptYWtlTWFwcGVkUGF5bG9hZChGaWxlU3lzdGVtOjpN
YXBwZWRGaWxlRGF0YSYmIGRhdGEpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZCh0cnVlLCBk
YXRhLmxlYWtIYW5kbGUoKSwgZGF0YS5zaXplKCkpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQo
dHJ1ZSwgZGF0YS5sZWFrSGFuZGxlKCkpOwogfQogCiBDYWNoZVBheWxvYWQgQ2FjaGVQYXlsb2Fk
OjptYWtlTWFsbG9jUGF5bG9hZChNYWxsb2NQdHI8dWludDhfdCwgVk1NYWxsb2M+JiYgZGF0YSwg
c2l6ZV90IHNpemUpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZChmYWxzZSwgZGF0YS5sZWFr
UHRyKCksIHNpemUpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQoZmFsc2UsIGFzV3JpdGFibGVC
eXRlcyhTcGFuIHsgZGF0YS5sZWFrUHRyKCksIHNpemUgfSkpOwogfQogCiBDYWNoZVBheWxvYWQg
Q2FjaGVQYXlsb2FkOjptYWtlRW1wdHlQYXlsb2FkKCkKIHsKLSAgICByZXR1cm4gQ2FjaGVQYXls
b2FkKHRydWUsIG51bGxwdHIsIDApOworICAgIHJldHVybiBDYWNoZVBheWxvYWQodHJ1ZSwgeyB9
KTsKIH0KIAogQ2FjaGVQYXlsb2FkOjpDYWNoZVBheWxvYWQoQ2FjaGVQYXlsb2FkJiYgb3RoZXIp
CiB7Ci0gICAgbV9tYXBwZWQgPSBvdGhlci5tX21hcHBlZDsKLSAgICBtX3NpemUgPSBvdGhlci5t
X3NpemU7Ci0gICAgbV9kYXRhID0gb3RoZXIubV9kYXRhOwotICAgIG90aGVyLm1fbWFwcGVkID0g
ZmFsc2U7Ci0gICAgb3RoZXIubV9kYXRhID0gbnVsbHB0cjsKLSAgICBvdGhlci5tX3NpemUgPSAw
OworICAgIG1fbWFwcGVkID0gc3RkOjpleGNoYW5nZShvdGhlci5tX21hcHBlZCwgZmFsc2UpOwor
ICAgIG1fZGF0YSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLCB7IH0pOwogfQogCiBDYWNo
ZVBheWxvYWQ6On5DYWNoZVBheWxvYWQoKQpAQCAtNjcsMTIgKzYzLDEzIEBAIENhY2hlUGF5bG9h
ZCYgQ2FjaGVQYXlsb2FkOjpvcGVyYXRvcj0oQ2EKIAogdm9pZCBDYWNoZVBheWxvYWQ6OmZyZWVE
YXRhKCkKIHsKLSAgICBpZiAoIW1fZGF0YSkKKyAgICBpZiAoIW1fZGF0YS5kYXRhKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBpZiAobV9tYXBwZWQpIHsKLSAgICAgICAgRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1fZGF0YSwgbV9zaXplKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZmFzdEZy
ZWUobV9kYXRhKTsKKworICAgIGlmIChtX21hcHBlZCkKKyAgICAgICAgRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1fZGF0YSk7CisgICAgZWxzZQorICAgICAgICBmYXN0RnJlZShtX2RhdGEu
ZGF0YSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHd0Zi9GaWxlU3lz
dGVtLmg+CiAjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MSwyMiArNDIsMjAgQEAgcHVibGljOgogICAgIEpT
X0VYUE9SVF9QUklWQVRFIH5DYWNoZVBheWxvYWQoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBD
YWNoZVBheWxvYWQmIG9wZXJhdG9yPShDYWNoZVBheWxvYWQmJiBvdGhlcik7CiAKLSAgICBjb25z
dCB1aW50OF90KiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBjb25zdCB1aW50OF90KiBkYXRhKCkg
Y29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9kYXRhLmRhdGEoKSk7
IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5zaXplKCk7IH0KIAog
cHJpdmF0ZToKLSAgICBDYWNoZVBheWxvYWQoYm9vbCBtYXBwZWQsIHZvaWQqIGRhdGEsIHNpemVf
dCBzaXplKQorICAgIENhY2hlUGF5bG9hZChib29sIG1hcHBlZCwgU3BhbjxzdGQ6OmJ5dGU+IGRh
dGEpCiAgICAgICAgIDogbV9tYXBwZWQobWFwcGVkKQotICAgICAgICAsIG1fc2l6ZShzaXplKQot
ICAgICAgICAsIG1fZGF0YShzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGF0YSkpCisgICAgICAgICwg
bV9kYXRhKGRhdGEpCiAgICAgewogICAgIH0KIAogICAgIHZvaWQgZnJlZURhdGEoKTsKIAogICAg
IGJvb2wgbV9tYXBwZWQ7Ci0gICAgc2l6ZV90IG1fc2l6ZTsKLSAgICB1aW50OF90KiBtX2RhdGE7
CisgICAgU3BhbjxzdGQ6OmJ5dGU+IG1fZGF0YTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1Bh
cnNlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNyArMjYxLDcg
QEAgYXV0byBTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKGNvbnN0IHVpbgogICAgIH0KIAogICAg
IGlmIChVTkxJS0VMWShPcHRpb25zOjp1c2VFYWdlcldlYkFzc2VtYmx5TW9kdWxlSGFzaGluZygp
KSkKLSAgICAgICAgbV9oYXNoZXIuYWRkQnl0ZXMoYnl0ZXMsIGJ5dGVzU2l6ZSk7CisgICAgICAg
IG1faGFzaGVyLmFkZEJ5dGVzKFNwYW4geyBieXRlcywgYnl0ZXNTaXplIH0pOwogCiAgICAgc2l6
ZV90IG9mZnNldEluQnl0ZXMgPSAwOwogICAgIHdoaWxlICh0cnVlKSB7CkluZGV4OiBTb3VyY2Uv
V1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw2OCBAQAorMjAyMS0wNi0xMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgQWRvcHQgU3BhbiBpbiBtb3JlIHBsYWNlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIFdURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmNwcDoKKyAgICAg
ICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjp+TWFwcGVkRmlsZURhdGEp
OgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6TWFwcGVkRmlsZURhdGE6Om1hcEZpbGVI
YW5kbGUpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6dW5tYXBWaWV3T2ZGaWxlKToK
KyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Om1hcFRvRmlsZSk6CisgICAgICAgICogd3Rm
L0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVE
YXRhOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6
Ok1hcHBlZEZpbGVEYXRhOjpkYXRhIGNvbnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUlt
cGw6Ok1hcHBlZEZpbGVEYXRhOjpsZWFrSGFuZGxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3Rl
bUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YSk6CisgICAgICAgIChXVEY6OkZp
bGVTeXN0ZW1JbXBsOjpNYXBwZWRGaWxlRGF0YTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6
RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpzaXplIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1NIQTEuY3BwOgorICAgICAgICAoV1RG
OjpTSEExOjphZGRCeXRlcyk6CisgICAgICAgIChXVEY6OlNIQTE6OmZpbmFsaXplKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6U0hBMTo6cHJvY2Vzc0Jsb2NrKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6U0hBMTo6cmVzZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTSEExOjpoZXhEaWdl
c3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTSEExOjpjb21wdXRlSGV4RGlnZXN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3dGYvU0hBMS5oOgorICAgICAgICAoV1RGOjpTSEExOjphZGRCeXRl
cyk6CisgICAgICAgICogd3RmL1ZlY3Rvci5oOgorICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZS9Q
ZXJzaXN0ZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPENT
dHJpbmc+OjplbmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8Q1N0cmlu
Zz46OmRlY29kZSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTdHJpbmc+Ojpl
bmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVjb2RlU3RyaW5nVGV4dCk6Cisg
ICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUpOgor
ICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKToK
KyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oOgorICAgICAgICAq
IHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5jcHA6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyOjpEZWNvZGVyKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6
OkRlY29kZXI6OmJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFkKToKKyAgICAgICAgKFdURjo6UGVy
c2lzdGVuY2U6OkRlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjp2ZXJpZnlDaGVja3N1bSk6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyOjp+RGVjb2Rlcik6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3Bl
cnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmg6CisgICAgICAgICogd3RmL3BlcnNpc3RlbmNl
L1BlcnNpc3RlbnRFbmNvZGVyLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29k
ZXI6Omdyb3cpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6dXBkYXRlQ2hl
Y2tzdW1Gb3JEYXRhKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6OmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjpl
bmNvZGVOdW1iZXIpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6ZW5jb2Rl
Q2hlY2tzdW0pOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6RW5jb2Rlcik6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjp+RW5jb2Rlcik6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmg6
CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjpidWZmZXIgY29uc3QpOgorICAg
ICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIp
OgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6YnVmZmVyU2l6ZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL3RleHQvQmFzZTY0Lmg6CisgICAgICAgIChXVEY6OmJh
c2U2NEVuY29kZVRvVmVjdG9yKToKKyAgICAgICAgKFdURjo6YmFzZTY0RW5jb2RlVG9TdHJpbmcp
OgorICAgICAgICAqIHd0Zi90ZXh0L0NTdHJpbmcuaDoKKwogMjAyMS0wNi0xMSAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgV2Vha0hhc2hNYXAKSW5kZXg6
IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtNjkyLDYgKzY5Miw4IEBACiAJCUFEODlCNkI5MUU2NDE1MEYwMDkwNzA3RiAvKiBN
ZW1vcnlQcmVzc3VyZUhhbmRsZXJDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IE1lbW9yeVByZXNzdXJlSGFuZGxlckNvY29hLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBREYyQ0U2NDFFMzlGMTA2MDA2ODg5REIgLyogTWVtb3J5Rm9vdHBy
aW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lbW9yeUZvb3RwcmludC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREYyQ0U2NTFFMzlGMTA2MDA2ODg5REIg
LyogTWVtb3J5Rm9vdHByaW50Q29jb2EuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTWVtb3J5Rm9vdHByaW50Q29jb2EuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlCQzcwMEI0NDI2NzY2ODM0MDA0OUVERjIgLyogU3BhbkNvY29hLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNwYW5Db2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzcwMEI0
NTI2NzY2OUMxMDA0OUVERjIgLyogU3BhbkNGLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwYW5DRi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0EzMEM3RjI2NkQzMDM0MDAwRDIzMEMgLyog
U3Bhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTcGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyQkNGQzNFMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5ndWFnZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYW5ndWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyQkNGQzNGMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5ndWFnZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYW5ndWFnZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtODQwLDYgKzg0Miw3IEBACiAJCQkJQzJCQ0ZDNDExRjYxRDYxNjAwQzky
MjJDIC8qIExhbmd1YWdlQ0YuY3BwICovLAogCQkJCTJDREVEMEVFMTgxMTVDMzgwMDREQkE3MCAv
KiBSdW5Mb29wQ0YuY3BwICovLAogCQkJCUEzRUU1QzNCMjFGRkFDN0MwMEZBQkQ2MSAvKiBTY2hl
ZHVsZVBhaXJDRi5jcHAgKi8sCisJCQkJQkM3MDBCNDUyNjc2NjlDMTAwNDlFREYyIC8qIFNwYW5D
Ri5oICovLAogCQkJCTFBRkRFNjQ3MTk1MjAxQzMwMEM0OEZGQSAvKiBUeXBlQ2FzdHNDRi5oICov
LAogCQkJCTVDMUYwNTk0MjE2NDM3QjMwMDM5MzAyQyAvKiBVUkxDRi5jcHAgKi8sCiAJCQkpOwpA
QCAtMTU4MSw2ICsxNTg0LDcgQEAKIAkJCQkxQ0E4NUNBODI0MUIwQjI2MDA3MUMyRjUgLyogUnVu
dGltZUFwcGxpY2F0aW9uQ2hlY2tzQ29jb2EuY3BwICovLAogCQkJCTFDQTg1Q0E3MjQxQjBCMTEw
MDcxQzJGNSAvKiBSdW50aW1lQXBwbGljYXRpb25DaGVja3NDb2NvYS5oICovLAogCQkJCUEzMEQ0
MTJDMUYwREUwQkEwMEI3MTk1NCAvKiBTb2Z0TGlua2luZy5oICovLAorCQkJCUJDNzAwQjQ0MjY3
NjY4MzQwMDQ5RURGMiAvKiBTcGFuQ29jb2EuaCAqLywKIAkJCQlFQjYxRURDNjI0MDlDQ0MwMDAx
RUZFMzYgLyogU3lzdGVtVHJhY2luZ0NvY29hLmNwcCAqLywKIAkJCQk1Q0MwRUU4NjIxNjJCQzIy
MDBBMUE4NDIgLyogVVJMQ29jb2EubW0gKi8sCiAJCQkJOTMyNDE2NTcyNDNCQzJFNTAwMzJGQUFF
IC8qIFZlY3RvckNvY29hLmggKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxOSw5ICszMTksOSBAQCBib29sIGV4Y2x1ZGVGcm9tQmFja3VwKGNvbnN0IFN0cmluZyYp
CiAKIE1hcHBlZEZpbGVEYXRhOjp+TWFwcGVkRmlsZURhdGEoKQogewotICAgIGlmICghbV9maWxl
RGF0YSkKKyAgICBpZiAoIW1fZmlsZURhdGEuZGF0YSgpKQogICAgICAgICByZXR1cm47Ci0gICAg
dW5tYXBWaWV3T2ZGaWxlKG1fZmlsZURhdGEsIG1fZmlsZVNpemUpOworICAgIHVubWFwVmlld09m
RmlsZShtX2ZpbGVEYXRhKTsKIH0KIAogTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKGNv
bnN0IFN0cmluZyYgZmlsZVBhdGgsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUsIGJvb2wmIHN1Y2Nl
c3MpCkBAIC0zODMsMTQgKzM4MywxMyBAQCBib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFu
ZGxlKFBsYXRmCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBtX2ZpbGVEYXRh
ID0gZGF0YTsKLSAgICBtX2ZpbGVTaXplID0gc2l6ZTsKKyAgICBtX2ZpbGVEYXRhID0gU3BhbiB7
IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpieXRlKj4oZGF0YSksIHNpemUgfTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCB1bm1hcFZpZXdPZkZpbGUodm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6
ZSkKK2Jvb2wgdW5tYXBWaWV3T2ZGaWxlKFNwYW48c3RkOjpieXRlPiBkYXRhKQogewotICAgIHJl
dHVybiAhbXVubWFwKGJ1ZmZlciwgc2l6ZSk7CisgICAgcmV0dXJuICFtdW5tYXAoZGF0YS5kYXRh
KCksIGRhdGEuc2l6ZSgpKTsKIH0KIAogI2VuZGlmCkBAIC00MzgsNyArNDM3LDcgQEAgU3RyaW5n
IGNyZWF0ZVRlbXBvcmFyeVppcEFyY2hpdmUoY29uc3QgUwogfQogI2VuZGlmCiAKLU1hcHBlZEZp
bGVEYXRhIG1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIHNpemVfdCBieXRlc1NpemUsIEZ1
bmN0aW9uPHZvaWQoY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4m
KT4mJiBhcHBseSwgUGxhdGZvcm1GaWxlSGFuZGxlKiBvdXRwdXRIYW5kbGUpCitNYXBwZWRGaWxl
RGF0YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBzaXplX3QgYnl0ZXNTaXplLCBGdW5j
dGlvbjx2b2lkKGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mKT4m
JiBhcHBseSwgUGxhdGZvcm1GaWxlSGFuZGxlKiBvdXRwdXRIYW5kbGUpCiB7CiAgICAgY29uc3Rl
eHByIGJvb2wgZmFpbElmRmlsZUV4aXN0cyA9IHRydWU7CiAgICAgYXV0byBoYW5kbGUgPSBGaWxl
U3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWRXcml0
ZSwgRmlsZVN5c3RlbTo6RmlsZUFjY2Vzc1Blcm1pc3Npb246OlVzZXIsIGZhaWxJZkZpbGVFeGlz
dHMpOwpAQCAtNDU1LDEyICs0NTQsMTIgQEAgTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxlKGNvbnN0
IFN0cmluZyYgcAogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIHZvaWQqIG1hcCA9
IGNvbnN0X2Nhc3Q8dm9pZCo+KG1hcHBlZEZpbGUuZGF0YSgpKTsKLSAgICB1aW50OF90KiBtYXBE
YXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1hcCk7CisgICAgYXV0byBtYXAgPSBtYXBwZWRG
aWxlLmRhdGEoKS5kYXRhKCk7CisgICAgYXV0byBtYXBEYXRhID0gbWFwOwogCi0gICAgYXBwbHko
WyZtYXBEYXRhXShjb25zdCB1aW50OF90KiBjaHVuaywgc2l6ZV90IGNodW5rU2l6ZSkgewotICAg
ICAgICBtZW1jcHkobWFwRGF0YSwgY2h1bmssIGNodW5rU2l6ZSk7Ci0gICAgICAgIG1hcERhdGEg
Kz0gY2h1bmtTaXplOworICAgIGFwcGx5KFsmbWFwRGF0YV0oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+
IGNodW5rKSB7CisgICAgICAgIG1lbWNweShtYXBEYXRhLCBjaHVuay5kYXRhKCksIGNodW5rLnNp
emUoKSk7CisgICAgICAgIG1hcERhdGEgKz0gY2h1bmsuc2l6ZSgpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9KTsKIApJbmRleDogU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICsz
NCw3IEBACiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KQEAgLTIxMCw3ICsyMTEsNyBAQCBXVEZfRVhQT1JUX1BSSVZBVEUg
U3RyaW5nIHJlYWxQYXRoKGNvbnN0CiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc1NhZmVUb1Vz
ZU1lbW9yeU1hcEZvclBhdGgoY29uc3QgU3RyaW5nJik7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBtYWtlU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChjb25zdCBTdHJpbmcmKTsKIAotV1RGX0VY
UE9SVF9QUklWQVRFIGJvb2wgdW5tYXBWaWV3T2ZGaWxlKHZvaWQqIGJ1ZmZlciwgc2l6ZV90KTsK
K1dURl9FWFBPUlRfUFJJVkFURSBib29sIHVubWFwVmlld09mRmlsZShTcGFuPHN0ZDo6Ynl0ZT4p
OwogCiBjbGFzcyBNYXBwZWRGaWxlRGF0YSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CkBAIC0yMjMsMTcgKzIyNCwxNSBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5N
YXBwZWRGaWxlRGF0YSgpOwogICAgIE1hcHBlZEZpbGVEYXRhJiBvcGVyYXRvcj0oTWFwcGVkRmls
ZURhdGEmJik7CiAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
ISFtX2ZpbGVEYXRhOyB9Ci0gICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZmlsZURhdGE7IH0KLSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9maWxlU2l6
ZTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fZmls
ZURhdGEuZGF0YSgpOyB9CisgICAgU3BhbjxzdGQ6OmJ5dGU+IGRhdGEoKSBjb25zdCB7IHJldHVy
biBtX2ZpbGVEYXRhOyB9CiAKLSAgICB2b2lkKiBsZWFrSGFuZGxlKCkgeyByZXR1cm4gc3RkOjpl
eGNoYW5nZShtX2ZpbGVEYXRhLCBudWxscHRyKTsgfQorICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBT
cGFuPHN0ZDo6Ynl0ZT4gbGVha0hhbmRsZSgpIHsgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9maWxl
RGF0YSwgeyB9KTsgfQogCiBwcml2YXRlOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIG1h
cEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBGaWxlT3Blbk1vZGUsIE1hcHBlZEZpbGVN
b2RlKTsKIAotICAgIHZvaWQqIG1fZmlsZURhdGEgeyBudWxscHRyIH07Ci0gICAgdW5zaWduZWQg
bV9maWxlU2l6ZSB7IDAgfTsKKyAgICBTcGFuPHN0ZDo6Ynl0ZT4gbV9maWxlRGF0YTsKIH07CiAK
IGlubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGxhdGZvcm1GaWxlSGFuZGxl
IGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUgbWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKQEAgLTI0Nywy
MSArMjQ2LDE5IEBAIGlubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGwKIH0K
IAogaW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShNYXBwZWRGaWxlRGF0YSYm
IG90aGVyKQotICAgIDogbV9maWxlRGF0YShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEs
IG51bGxwdHIpKQotICAgICwgbV9maWxlU2l6ZShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZVNp
emUsIDApKQorICAgIDogbV9maWxlRGF0YShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEs
IHsgfSkpCiB7CiB9CiAKIGlubGluZSBNYXBwZWRGaWxlRGF0YSYgTWFwcGVkRmlsZURhdGE6Om9w
ZXJhdG9yPShNYXBwZWRGaWxlRGF0YSYmIG90aGVyKQogewotICAgIG1fZmlsZURhdGEgPSBzdGQ6
OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEsIG51bGxwdHIpOwotICAgIG1fZmlsZVNpemUgPSBz
dGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZVNpemUsIDApOworICAgIG1fZmlsZURhdGEgPSBzdGQ6
OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEsIHsgfSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQog
CiAvLyBUaGlzIGNyZWF0ZXMgdGhlIGRlc3RpbmF0aW9uIGZpbGUsIG1hcHMgaXQsIHdyaXRlIHRo
ZSBwcm92aWRlZCBkYXRhIHRvIGl0IGFuZCByZXR1cm5zIHRoZSBtYXBwZWQgZmlsZS4KIC8vIFRo
aXMgZnVuY3Rpb24gZmFpbHMgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIGZpbGUgYXQgdGhlIGRlc3Rp
bmF0aW9uIHBhdGguCi1XVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVuY3Rpb248dm9pZChjb25z
dCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYpPiYmIGFwcGx5LCBQbGF0
Zm9ybUZpbGVIYW5kbGUqID0gbnVsbHB0cik7CitXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmls
ZURhdGEgbWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVu
Y3Rpb248dm9pZChjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+Jik+
JiYgYXBwbHksIFBsYXRmb3JtRmlsZUhhbmRsZSogPSBudWxscHRyKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgRmlsZVN5c3RlbUltcGwKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93
dGYvU0hBMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU0hBMS5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL1NIQTEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NiwxMCArNDYsMTAgQEAgU0hBMTo6U0hBMSgpCiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNM
QVJBVElPTlNfRU5ECiB9CiAKLXZvaWQgU0hBMTo6YWRkQnl0ZXMoY29uc3QgdWludDhfdCogaW5w
dXQsIHNpemVfdCBsZW5ndGgpCit2b2lkIFNIQTE6OmFkZEJ5dGVzKFNwYW48Y29uc3Qgc3RkOjpi
eXRlPiBpbnB1dCkKIHsKICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgot
ICAgIENDX1NIQTFfVXBkYXRlKCZtX2NvbnRleHQsIGlucHV0LCBsZW5ndGgpOworICAgIENDX1NI
QTFfVXBkYXRlKCZtX2NvbnRleHQsIGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpKTsKICAgICBB
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIH0KIApAQCAtMTAxLDExICsxMDEsMTEg
QEAgU0hBMTo6U0hBMSgpCiAgICAgcmVzZXQoKTsKIH0KIAotdm9pZCBTSEExOjphZGRCeXRlcyhj
b25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGxlbmd0aCkKK3ZvaWQgU0hBMTo6YWRkQnl0ZXMo
U3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQogewotICAgIHdoaWxlIChsZW5ndGgtLSkgewor
ICAgIGZvciAoYXV0byBieXRlIDogaW5wdXQpIHsKICAgICAgICAgQVNTRVJUKG1fY3Vyc29yIDwg
NjQpOwotICAgICAgICBtX2J1ZmZlclttX2N1cnNvcisrXSA9ICppbnB1dCsrOworICAgICAgICBt
X2J1ZmZlclttX2N1cnNvcisrXSA9IHN0ZDo6dG9faW50ZWdlcjx1aW50OF90PihieXRlKTsKICAg
ICAgICAgKyttX3RvdGFsQnl0ZXM7CiAgICAgICAgIGlmIChtX2N1cnNvciA9PSA2NCkKICAgICAg
ICAgICAgIHByb2Nlc3NCbG9jaygpOwpJbmRleDogU291cmNlL1dURi93dGYvU0hBMS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NIQTEuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dURi93dGYvU0hBMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgPGFycmF5PgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAt
NDUsMTUgKzQ2LDExIEBAIGNsYXNzIFNIQTEgewogcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBTSEExKCk7CiAKLSAgICB2b2lkIGFkZEJ5dGVzKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
aW5wdXQpCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkQnl0ZXMoU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkZEJ5dGVzKFQmJiBk
YXRhKQogICAgIHsKLSAgICAgICAgYWRkQnl0ZXMoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkp
OworICAgICAgICByZXR1cm4gYWRkQnl0ZXMoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+
KGRhdGEpIH0pKTsKICAgICB9Ci0gICAgdm9pZCBhZGRCeXRlcyhjb25zdCBDU3RyaW5nJiBpbnB1
dCkKLSAgICB7Ci0gICAgICAgIGFkZEJ5dGVzKGlucHV0LmRhdGFBc1VJbnQ4UHRyKCksIGlucHV0
Lmxlbmd0aCgpKTsKLSAgICB9Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkQnl0ZXMo
Y29uc3QgdWludDhfdCogaW5wdXQsIHNpemVfdCBsZW5ndGgpOwogCiAgICAgLy8gU2l6ZSBvZiB0
aGUgU0hBMSBoYXNoCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBjb25zdGV4cHIgc2l6
ZV90IGhhc2hTaXplID0gMjA7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dURi93dGYvVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxMyw2ICs2MTMsNyBAQCBw
cml2YXRlOgogCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBUIFZhbHVlVHlwZTsKKyAgICB0eXBlZGVm
IFQgdmFsdWVfdHlwZTsKIAogICAgIHR5cGVkZWYgVCogaXRlcmF0b3I7CiAgICAgdHlwZWRlZiBj
b25zdCBUKiBjb25zdF9pdGVyYXRvcjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL2NmL1NwYW5DRi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL2NmL1NwYW5DRi5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XVEYvd3RmL2NmL1NwYW5DRi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPENvcmVGb3VuZGF0
aW9uL0NvcmVGb3VuZGF0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KKworbmFtZXNwYWNl
IFdURiB7CisKK2lubGluZSBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYXNCeXRlcyhDRkRhdGFSZWYg
ZGF0YSkKK3sKKyAgICByZXR1cm4geyByZWludGVycHJldF9jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+
KENGRGF0YUdldEJ5dGVQdHIoZGF0YSkpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KENGRGF0YUdldExl
bmd0aChkYXRhKSkgfTsKK30KKworfQorCit1c2luZyBXVEY6OmFzQnl0ZXM7CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9jb2NvYS9TcGFuQ29jb2EuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9jb2NvYS9TcGFuQ29jb2EuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9jb2Nv
YS9TcGFuQ29jb2EuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNp
bmNsdWRlIDx3dGYvU3Bhbi5oPgorCituYW1lc3BhY2UgV1RGIHsKKworaW5saW5lIFNwYW48Y29u
c3Qgc3RkOjpieXRlPiBhc0J5dGVzKE5TRGF0YSAqZGF0YSkKK3sKKyAgICByZXR1cm4geyByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxlbmd0aCB9
OworfQorCit9CisKK3VzaW5nIFdURjo6YXNCeXRlczsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3Bl
cnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIENvZGVyPENTdHJpbmc+OjplbmNvZGUoRW5j
b2RlciYgZW5jCiAKICAgICB1aW50MzJfdCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAg
ZW5jb2RlciA8PCBsZW5ndGg7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3Ry
aW5nLmRhdGFBc1VJbnQ4UHRyKCksIGxlbmd0aCk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoc3RyaW5nLmJ5dGVzKCkpOwogfQogCiBzdGQ6Om9wdGlvbmFsPENTdHJpbmc+IENv
ZGVyPENTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKQEAgLTc4LDcgKzc4LDcgQEAg
c3RkOjpvcHRpb25hbDxDU3RyaW5nPiBDb2RlcjxDU3RyaW5nPjo6ZAogCiAgICAgY2hhciogYnVm
ZmVyOwogICAgIENTdHJpbmcgc3RyaW5nID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZCgqbGVu
Z3RoLCBidWZmZXIpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgKmxlbmd0aCkpCisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgcmVpbnRlcnByZXRfY2FzdDxzdGQ6OmJ5
dGUqPihidWZmZXIpLCAqbGVuZ3RoIH0pKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owog
CiAgICAgcmV0dXJuIHN0cmluZzsKQEAgLTk2LDExICs5Niw3IEBAIHZvaWQgQ29kZXI8U3RyaW5n
Pjo6ZW5jb2RlKEVuY29kZXImIGVuY28KICAgICBib29sIGlzOEJpdCA9IHN0cmluZy5pczhCaXQo
KTsKIAogICAgIGVuY29kZXIgPDwgbGVuZ3RoIDw8IGlzOEJpdDsKLQotICAgIGlmIChpczhCaXQp
Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0cmluZy5jaGFyYWN0ZXJz
OCgpLCBsZW5ndGgpOwotICAgIGVsc2UKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnMx
NigpKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoc3RyaW5nLmJ5dGVzKCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KQEAgLTExMiw3ICsxMDgsNyBAQCBzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8
U3RyaW5nPiBkZWNvCiAKICAgICBDaGFyYWN0ZXJUeXBlKiBidWZmZXI7CiAgICAgU3RyaW5nIHN0
cmluZyA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihidWZmZXIpLCBsZW5ndGggKiBzaXplb2YoQ2hhcmFjdGVyVHlwZSkpKQorICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8c3Rk
OjpieXRlKj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJhY3RlclR5cGUpIH0pKQogICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIAogICAgIHJldHVybiBzdHJpbmc7CkBAIC0x
NDIsMTMgKzEzOCwxMyBAQCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gQ29kZXI8U3RyaW5nPjo6ZGVj
CiAKIHZvaWQgQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQogewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpKTsKKyAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3QpOwogfQogCiBzdGQ6Om9wdGlvbmFsPFNIQTE6OkRpZ2Vz
dD4gQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAg
U0hBMTo6RGlnZXN0IHRtcDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHRtcC5kYXRhKCksIHNpemVvZih0bXApKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKHRtcCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgcmV0dXJu
IHRtcDsKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2Rl
cnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50
Q29kZXJzLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNl
L1BlcnNpc3RlbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYg
dmVjdG9yKQogICAgIHsKICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
dmVjdG9yLnNpemUoKSk7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6
ZSgpICogc2l6ZW9mKFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEo
dmVjdG9yKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5Pj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCkBAIC0xNzMsNyArMTcz
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAgICAgICBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IHRlbXA7CiAgICAgICAgIHRlbXAuZ3JvdyhzaXplKTsK
IAotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KHRlbXAuZGF0YSgpKSwgc2l6ZSAqIHNpemVvZihUKSkpCisgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEodGVtcCkpCiAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgICAgIHJldHVybiB0ZW1wOwpJbmRleDogU291cmNl
L1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmNwcAkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29k
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyMyArMzEsMjEgQEAKIG5hbWVzcGFjZSBXVEYg
ewogbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAotRGVjb2Rlcjo6RGVjb2Rlcihjb25zdCB1aW50
OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKQotICAgIDogbV9idWZmZXIoYnVmZmVyKQot
ICAgICwgbV9idWZmZXJQb3NpdGlvbihidWZmZXIpCi0gICAgLCBtX2J1ZmZlckVuZChidWZmZXIg
KyBidWZmZXJTaXplKQorRGVjb2Rlcjo6RGVjb2RlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnVm
ZmVyKQorICAgIDogbV9idWZmZXIoYnVmZmVyLmRhdGEoKSkKKyAgICAsIG1fYnVmZmVyUG9zaXRp
b24oYnVmZmVyLmRhdGEoKSkKKyAgICAsIG1fYnVmZmVyRW5kKGJ1ZmZlci5kYXRhKCkgKyBidWZm
ZXIuc2l6ZSgpKQogewogfQogCi1EZWNvZGVyOjp+RGVjb2RlcigpCi17Ci19CitEZWNvZGVyOjp+
RGVjb2RlcigpID0gZGVmYXVsdDsKIAogYm9vbCBEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdo
VG9Db250YWluKHNpemVfdCBzaXplKSBjb25zdAogewogICAgIHJldHVybiBzaXplIDw9IHN0YXRp
Y19jYXN0PHNpemVfdD4obV9idWZmZXJFbmQgLSBtX2J1ZmZlclBvc2l0aW9uKTsKIH0KIAotY29u
c3QgdWludDhfdCogRGVjb2Rlcjo6YnVmZmVyUG9pbnRlckZvckRpcmVjdFJlYWQoc2l6ZV90IHNp
emUpCitjb25zdCBzdGQ6OmJ5dGUqIERlY29kZXI6OmJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFk
KHNpemVfdCBzaXplKQogewogICAgIGlmICghYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihz
aXplKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC01NSwxNiArNTMsMTYgQEAgY29uc3Qg
dWludDhfdCogRGVjb2Rlcjo6YnVmZmVyUG9pbnRlckZvcgogICAgIGF1dG8gZGF0YSA9IG1fYnVm
ZmVyUG9zaXRpb247CiAgICAgbV9idWZmZXJQb3NpdGlvbiArPSBzaXplOwogCi0gICAgRW5jb2Rl
cjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgZGF0YSwgc2l6ZSk7CisgICAgRW5jb2Rl
cjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgU3BhbiB7IGRhdGEsIHNpemUgfSk7CiAg
ICAgcmV0dXJuIGRhdGE7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQorYm9vbCBEZWNvZGVyOjpkZWNvZGVGaXhlZExl
bmd0aERhdGEoU3BhbjxzdGQ6OmJ5dGU+IGRhdGEpCiB7Ci0gICAgYXV0byBidWZmZXIgPSBidWZm
ZXJQb2ludGVyRm9yRGlyZWN0UmVhZChzaXplKTsKKyAgICBhdXRvIGJ1ZmZlciA9IGJ1ZmZlclBv
aW50ZXJGb3JEaXJlY3RSZWFkKGRhdGEuc2l6ZSgpKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIG1lbWNweShkYXRhLCBidWZmZXIsIHNpemUpOworICAgIG1l
bWNweShkYXRhLmRhdGEoKSwgYnVmZmVyLCBkYXRhLnNpemUoKSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTEzOSw3ICsxMzcsNyBAQCBib29sIERlY29kZXI6OnZlcmlmeUNoZWNrc3VtKCkK
ICAgICBtX3NoYTEuY29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2Vz
dCBzYXZlZEhhc2g7Ci0gICAgaWYgKCFkZWNvZGVGaXhlZExlbmd0aERhdGEoc2F2ZWRIYXNoLmRh
dGEoKSwgc2l6ZW9mKHNhdmVkSGFzaCkpKQorICAgIGlmICghZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHNhdmVkSGFzaCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBjb21wdXRl
ZEhhc2ggPT0gc2F2ZWRIYXNoOwpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVy
c2lzdGVudERlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5j
ZS9QZXJzaXN0ZW50RGVjb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0
Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw3IEBACiAKICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9T
SEExLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2Uv
UGVyc2lzdGVudENvZGVyLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMzUsNyArMzYsMTIgQEAg
bmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIGNsYXNzIERlY29kZXIgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyKGNv
bnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IERlY29kZXIoVCYmIGRhdGEpCisgICAgICAgIDogRGVjb2RlciB7IGFzQnl0ZXMo
U3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihkYXRhKSB9KSB9CisgICAgeworICAgIH0KKworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIH5EZWNvZGVyKCk7CiAKICAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3Qg
eyByZXR1cm4gbV9idWZmZXJFbmQgLSBtX2J1ZmZlcjsgfQpAQCAtNDMsNyArNDksMTEgQEAgcHVi
bGljOgogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIHZl
cmlmeUNoZWNrc3VtKCk7CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgV0FSTl9VTlVTRURfUkVU
VVJOIGJvb2wgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqLCBzaXplX3QpOworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVGaXhlZExlbmd0
aERhdGEoU3BhbjxzdGQ6OmJ5dGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIGRl
Y29kZUZpeGVkTGVuZ3RoRGF0YShUJiYgZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNv
ZGVGaXhlZExlbmd0aERhdGEoYXNXcml0YWJsZUJ5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4o
ZGF0YSkgfSkpOworICAgIH0KIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVy
YXRvcj4+KHN0ZDo6b3B0aW9uYWw8Ym9vbD4mKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVj
b2RlciYgb3BlcmF0b3I+PihzdGQ6Om9wdGlvbmFsPHVpbnQ4X3Q+Jik7CkBAIC04NCw3ICs5NCw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG51bUVsZW1lbnRzIDw9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8c2l6ZV90Pjo6bWF4KCkgLyBzaXplb2YoVCkgJiYgYnVmZmVySXNMYXJnZUVub3VnaFRv
Q29udGFpbihudW1FbGVtZW50cyAqIHNpemVvZihUKSk7CiAgICAgfQogCi0gICAgV1RGX0VYUE9S
VF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBjb25zdCB1aW50OF90KiBidWZmZXJQb2ludGVy
Rm9yRGlyZWN0UmVhZChzaXplX3QgbnVtQnl0ZXMpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBX
QVJOX1VOVVNFRF9SRVRVUk4gY29uc3Qgc3RkOjpieXRlKiBidWZmZXJQb2ludGVyRm9yRGlyZWN0
UmVhZChzaXplX3QgbnVtQnl0ZXMpOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSVBD
RGVjb2RlciA9IGZhbHNlOwogCkBAIC05Miw5ICsxMDIsOSBAQCBwcml2YXRlOgogICAgIFdURl9F
WFBPUlRfUFJJVkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBidWZmZXJJc0xhcmdlRW5vdWdo
VG9Db250YWluKHNpemVfdCkgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4gRGVj
b2RlciYgZGVjb2RlTnVtYmVyKHN0ZDo6b3B0aW9uYWw8VHlwZT4mKTsKIAotICAgIGNvbnN0IHVp
bnQ4X3QqIG1fYnVmZmVyOwotICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyUG9zaXRpb247Ci0g
ICAgY29uc3QgdWludDhfdCogbV9idWZmZXJFbmQ7CisgICAgY29uc3Qgc3RkOjpieXRlKiBtX2J1
ZmZlcjsKKyAgICBjb25zdCBzdGQ6OmJ5dGUqIG1fYnVmZmVyUG9zaXRpb247CisgICAgY29uc3Qg
c3RkOjpieXRlKiBtX2J1ZmZlckVuZDsKIAogICAgIFNIQTEgbV9zaGExOwogfTsKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRF
bmNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMzQgKzMxLDM0IEBACiBuYW1lc3BhY2Ug
V1RGIHsKIG5hbWVzcGFjZSBQZXJzaXN0ZW5jZSB7CiAKLUVuY29kZXI6OkVuY29kZXIoKQotewot
fQotCi1FbmNvZGVyOjp+RW5jb2RlcigpCi17Ci19CitFbmNvZGVyOjpFbmNvZGVyKCkgPSBkZWZh
dWx0OworRW5jb2Rlcjo6fkVuY29kZXIoKSA9IGRlZmF1bHQ7CiAKLXVpbnQ4X3QqIEVuY29kZXI6
Omdyb3coc2l6ZV90IHNpemUpCitzdGQ6OmJ5dGUqIEVuY29kZXI6Omdyb3coc2l6ZV90IHNpemUp
CiB7CiAgICAgc2l6ZV90IG5ld1Bvc2l0aW9uID0gbV9idWZmZXIuc2l6ZSgpOwogICAgIG1fYnVm
ZmVyLmdyb3cobV9idWZmZXIuc2l6ZSgpICsgc2l6ZSk7CiAgICAgcmV0dXJuIG1fYnVmZmVyLmRh
dGEoKSArIG5ld1Bvc2l0aW9uOwogfQogCi12b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9y
RGF0YShTSEExJiBzaGExLCBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3ZvaWQg
RW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmIHNoYTEsIFNwYW48Y29uc3QgdWlu
dDhfdD4gZGF0YSkKK3sKKyAgICByZXR1cm4gdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKHNoYTEsIGFz
Qnl0ZXMoZGF0YSkpOworfQorCit2b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yRGF0YShT
SEExJiBzaGExLCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKICAgICBhdXRvIHR5cGVT
YWx0ID0gU2FsdDx1aW50OF90Kj46OnZhbHVlOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7Ci0gICAgc2hh
MS5hZGRCeXRlcyhkYXRhLCBzaXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmdHlwZVNh
bHQsIDEgfSk7CisgICAgc2hhMS5hZGRCeXRlcyhkYXRhKTsKIH0KIAotdm9pZCBFbmNvZGVyOjpl
bmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCit2
b2lkIEVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
ZGF0YSkKIHsKLSAgICB1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhLCBzaXplKTsK
KyAgICB1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhKTsKIAotICAgIHVpbnQ4X3Qq
IGJ1ZmZlciA9IGdyb3coc2l6ZSk7Ci0gICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7Cisg
ICAgYXV0byogYnVmZmVyID0gZ3JvdyhkYXRhLnNpemUoKSk7CisgICAgbWVtY3B5KGJ1ZmZlciwg
ZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4K
QEAgLTY2LDcgKzY2LDcgQEAgRW5jb2RlciYgRW5jb2Rlcjo6ZW5jb2RlTnVtYmVyKFR5cGUgdmFs
dQogewogICAgIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKG1fc2hhMSwgdmFsdWUp
OwogCi0gICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhzaXplb2YoVHlwZSkpOworICAgIGF1dG8q
IGJ1ZmZlciA9IGdyb3coc2l6ZW9mKFR5cGUpKTsKICAgICBtZW1jcHkoYnVmZmVyLCAmdmFsdWUs
IHNpemVvZihUeXBlKSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQpAQCAtMTI1LDcgKzEyNSw3IEBA
IHZvaWQgRW5jb2Rlcjo6ZW5jb2RlQ2hlY2tzdW0oKQogewogICAgIFNIQTE6OkRpZ2VzdCBoYXNo
OwogICAgIG1fc2hhMS5jb21wdXRlSGFzaChoYXNoKTsKLSAgICBlbmNvZGVGaXhlZExlbmd0aERh
dGEoaGFzaC5kYXRhKCksIGhhc2guc2l6ZSgpKTsKKyAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEo
aGFzaCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3Rl
bnRFbmNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVy
c2lzdGVudEVuY29kZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvcGVy
c2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcs
NyBAQAogCiAjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvU0hBMS5o
PgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1
ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaD4KIApAQCAtNDMsNyArNDQsMTEg
QEAgcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSB+RW5jb2RlcigpOwogCiAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlQ2hlY2tzdW0oKTsKLSAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCosIHNpemVfdCk7
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48
Y29uc3Qgc3RkOjpieXRlPik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBlbmNvZGVG
aXhlZExlbmd0aERhdGEoVCYmIGRhdGEpCisgICAgeworICAgICAgICBlbmNvZGVGaXhlZExlbmd0
aERhdGEoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KGFzQnl0ZXMoU3BhbihzdGQ6OmZvcndhcmQ8VD4o
ZGF0YSkpKSkpOworICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxl
X2lmX3Q8c3RkOjppc19lbnVtPFQ+Ojp2YWx1ZT4qID0gbnVsbHB0cj4KICAgICBFbmNvZGVyJiBv
cGVyYXRvcjw8KGNvbnN0IFQmIHQpCkBAIC03MCwyMyArNzUsMjIgQEAgcHVibGljOgogICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBFbmNvZGVyJiBvcGVyYXRvcjw8KGZsb2F0KTsKICAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgRW5jb2RlciYgb3BlcmF0b3I8PChkb3VibGUpOwogCi0gICAgY29uc3QgdWlu
dDhfdCogYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuZGF0YSgpOyB9Ci0gICAgc2l6
ZV90IGJ1ZmZlclNpemUoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5zaXplKCk7IH0KLQotICAg
IFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZvckRhdGEoU0hB
MSYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOworICAgIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBi
dWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlcjsgfQorICAgIAorICAgIFdURl9FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZvckRhdGEoU0hBMSYsIFNwYW48Y29u
c3QgdWludDhfdD4pOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB1cGRhdGVD
aGVja3N1bUZvckRhdGEoU0hBMSYsIFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFR5cGU+IHN0YXRpYyB2b2lkIHVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKFNI
QTEmLCBUeXBlKTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lQQ0VuY29kZXIgPSBm
YWxzZTsKIAogcHJpdmF0ZToKLQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+IEVuY29kZXIm
IGVuY29kZU51bWJlcihUeXBlKTsKIAotICAgIHVpbnQ4X3QqIGdyb3coc2l6ZV90KTsKKyAgICBz
dGQ6OmJ5dGUqIGdyb3coc2l6ZV90KTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPiBz
dHJ1Y3QgU2FsdDsKIAotICAgIFZlY3Rvcjx1aW50OF90LCA0MDk2PiBtX2J1ZmZlcjsKKyAgICBW
ZWN0b3I8c3RkOjpieXRlLCA0MDk2PiBtX2J1ZmZlcjsKICAgICBTSEExIG1fc2hhMTsKIH07CiAK
QEAgLTEwNiw4ICsxMTAsOCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4KIHZvaWQgRW5jb2Rl
cjo6dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIoU0hBMSYgc2hhMSwgVHlwZSB2YWx1ZSkKIHsKICAg
ICBhdXRvIHR5cGVTYWx0ID0gU2FsdDxUeXBlPjo6dmFsdWU7Ci0gICAgc2hhMS5hZGRCeXRlcyhy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdHlwZVNhbHQpLCBzaXplb2YodHlwZVNhbHQpKTsK
LSAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2YWx1ZSksIHNp
emVvZih2YWx1ZSkpOworICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZ0eXBlU2FsdCwgMSB9KTsK
KyAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmdmFsdWUsIDEgfSk7CiB9CiAKIH0KSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi90ZXh0L0Jhc2U2NC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3Rl
eHQvQmFzZTY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDM5ICsxNDAsMzkgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIAogICAgICAgICBkZXN0aW5hdGlvbkRh
dGFCdWZmZXJbZGlkeCsrXSA9ICc9JzsKIH0KIAotc3RhdGljIFZlY3Rvcjx1aW50OF90PiBiYXNl
NjRFbmNvZGVJbnRlcm5hbChjb25zdCB1aW50OF90KiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVk
IGlucHV0TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAg
bWFwKQorc3RhdGljIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVJbnRlcm5hbChTcGFuPGNv
bnN0IHN0ZDo6Ynl0ZT4gaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVu
Y29kZU1hcCBtYXApCiB7Ci0gICAgYXV0byBkZXN0aW5hdGlvbkxlbmd0aCA9IGNhbGN1bGF0ZUJh
c2U2NEVuY29kZWRTaXplKGlucHV0TGVuZ3RoLCBwb2xpY3kpOworICAgIGF1dG8gZGVzdGluYXRp
b25MZW5ndGggPSBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShpbnB1dC5zaXplKCksIHBvbGlj
eSk7CiAgICAgaWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkKICAgICAgICAgcmV0dXJuIHsgfTsKIAog
ICAgIFZlY3Rvcjx1aW50OF90PiBkZXN0aW5hdGlvblZlY3RvcihkZXN0aW5hdGlvbkxlbmd0aCk7
Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoaW5wdXREYXRhQnVmZmVyLCBpbnB1dExlbmd0aCwg
ZGVzdGluYXRpb25WZWN0b3IuZGF0YSgpLCBkZXN0aW5hdGlvbkxlbmd0aCwgcG9saWN5LCBtYXAp
OworICAgIGJhc2U2NEVuY29kZUludGVybmFsKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGlucHV0LmRhdGEoKSksIGlucHV0LnNpemUoKSwgZGVzdGluYXRpb25WZWN0b3IuZGF0YSgp
LCBkZXN0aW5hdGlvbkxlbmd0aCwgcG9saWN5LCBtYXApOwogICAgIHJldHVybiBkZXN0aW5hdGlv
blZlY3RvcjsKIH0KIAotdm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCogaW5wdXREYXRhQnVm
ZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgVUNoYXIqIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwg
dW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJh
c2U2NEVuY29kZU1hcCBtYXApCit2b2lkIGJhc2U2NEVuY29kZShTcGFuPGNvbnN0IHN0ZDo6Ynl0
ZT4gaW5wdXQsIFVDaGFyKiBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0
aW9uTGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFw
KQogewogICAgIGlmICghZGVzdGluYXRpb25MZW5ndGgpCiAgICAgICAgIHJldHVybjsKLSAgICBi
YXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXREYXRh
QnVmZmVyKSwgaW5wdXRMZW5ndGgsIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgZGVzdGluYXRpb25M
ZW5ndGgsIHBvbGljeSwgbWFwKTsKKyAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCksIGRlc3Rp
bmF0aW9uRGF0YUJ1ZmZlciwgZGVzdGluYXRpb25MZW5ndGgsIHBvbGljeSwgbWFwKTsKIH0KIAot
dm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBp
bnB1dExlbmd0aCwgTENoYXIqIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgdW5zaWduZWQgZGVzdGlu
YXRpb25MZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBt
YXApCit2b2lkIGJhc2U2NEVuY29kZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQsIExDaGFy
KiBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uTGVuZ3RoLCBCYXNl
NjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewogICAgIGlmICgh
ZGVzdGluYXRpb25MZW5ndGgpCiAgICAgICAgIHJldHVybjsKLSAgICBiYXNlNjRFbmNvZGVJbnRl
cm5hbChzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXREYXRhQnVmZmVyKSwgaW5wdXRM
ZW5ndGgsIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgZGVzdGluYXRpb25MZW5ndGgsIHBvbGljeSwg
bWFwKTsKKyAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCksIGRlc3RpbmF0aW9uRGF0YUJ1ZmZl
ciwgZGVzdGluYXRpb25MZW5ndGgsIHBvbGljeSwgbWFwKTsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+
IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWdu
ZWQgaW5wdXRMZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1h
cCBtYXApCitWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+IGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVN
YXAgbWFwKQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxj
b25zdCB1aW50OF90Kj4oaW5wdXREYXRhQnVmZmVyKSwgaW5wdXRMZW5ndGgsIHBvbGljeSwgbWFw
KTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoaW5wdXQsIHBvbGljeSwgbWFwKTsK
IH0KIAotU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1
ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJh
c2U2NEVuY29kZU1hcCBtYXApCitTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoU3Bhbjxjb25z
dCBzdGQ6OmJ5dGU+IGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNv
ZGVNYXAgbWFwKQogewotICAgIHJldHVybiBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoaW5wdXRE
YXRhQnVmZmVyLCBpbnB1dExlbmd0aCwgcG9saWN5LCBtYXApKTsKKyAgICByZXR1cm4gbWFrZVN0
cmluZyhiYXNlNjRFbmNvZGVkKGlucHV0LCBwb2xpY3ksIG1hcCkpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERl
Y29kZUludGVybmFsKGNvbnN0IFQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5n
dGgsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRpb25zLCBCYXNlNjREZWNvZGVN
YXAgbWFwKQpAQCAtMjU0LDg0ICsyNTQsMjcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGlj
IHN0ZDo6b3B0aW9uYQogICAgIHJldHVybiBkZXN0aW5hdGlvbjsKIH0KIAotc3RkOjpvcHRpb25h
bDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBTdHJpbmcmIGlucHV0LCBPcHRp
b25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkK
LXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBpbnB1dC5sZW5ndGgoKTsKLSAgICBpZiAoIWxlbmd0
aCB8fCBpbnB1dC5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFs
KGlucHV0LmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKLSAgICByZXR1cm4g
YmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczE2KCksIGxlbmd0aCwgb3B0aW9u
cywgbWFwKTsKLX0KLQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29k
ZShTdHJpbmdWaWV3IGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9u
cywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKLXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBpbnB1dC5s
ZW5ndGgoKTsKLSAgICBpZiAoIWxlbmd0aCB8fCBpbnB1dC5pczhCaXQoKSkKLSAgICAgICAgcmV0
dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgb3B0
aW9ucywgbWFwKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFj
dGVyczE2KCksIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKLX0KLQotc3RkOjpvcHRpb25hbDxWZWN0
b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0LCBP
cHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1h
cCkKLXsKLSAgICBpZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHJldHVybiBiYXNl
NjREZWNvZGVJbnRlcm5hbChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgb3B0aW9ucywgbWFw
KTsKLX0KLQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25z
dCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0
aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+
PiBiYXNlNjREZWNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0LCBPcHRpb25TZXQ8QmFz
ZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKICAgICBp
ZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQog
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRl
cm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1
dC5zaXplKCksIG9wdGlvbnMsIG1hcCk7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgdWludDhfdCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCBP
cHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1h
cCkKLXsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoZGF0YSwgbGVuZ3RoLCBvcHRp
b25zLCBtYXApOwotfQotCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVj
b2RlKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgT3B0aW9uU2V0PEJhc2U2NERl
Y29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgcmV0dXJu
IGJhc2U2NERlY29kZUludGVybmFsKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihkYXRh
KSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOwotfQotCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50
OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFN0cmluZyYgaW5wdXQpCitzdGQ6Om9wdGlvbmFs
PFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IFN0cmluZyYgaW5wdXQsIE9wdGlv
blNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRpb25zLCBCYXNlNjREZWNvZGVNYXAgbWFwKQog
ewogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgpOwogICAgIGlmICghbGVuZ3Ro
IHx8IGlucHV0LmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwo
aW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsK
LSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczE2KCksIGxl
bmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CisgICAgICAgIHJldHVybiBiYXNlNjRE
ZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7
CisgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnMxNigpLCBs
ZW5ndGgsIG9wdGlvbnMsIG1hcCk7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+
PiBiYXNlNjRVUkxEZWNvZGUoU3RyaW5nVmlldyBpbnB1dCkKK3N0ZDo6b3B0aW9uYWw8VmVjdG9y
PHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3RyaW5nVmlldyBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2
NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7CiAgICAgdW5z
aWduZWQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7CiAgICAgaWYgKCFsZW5ndGggfHwgaW5wdXQu
aXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFy
YWN0ZXJzOCgpLCBsZW5ndGgsIHsgfSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOwotICAgIHJldHVy
biBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCB7IH0s
IEJhc2U2NERlY29kZU1hcDo6VVJMKTsKLX0KLQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQotewotICAg
IGlmIChpbnB1dC5zaXplKCkgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkp
Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUlu
dGVybmFsKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6
VVJMKTsKLX0KLQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29k
ZShjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0KQotewotICAgIGlmIChpbnB1dC5zaXplKCkgPiBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCi0gICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KGlucHV0LmRhdGEoKSksIGlucHV0LnNpemUoKSwgeyB9LCBCYXNl
NjREZWNvZGVNYXA6OlVSTCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjRVUkxEZWNvZGUoY29uc3QgdWludDhfdCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQotewot
ICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChkYXRhLCBsZW5ndGgsIHsgfSwgQmFzZTY0
RGVjb2RlTWFwOjpVUkwpOwotfQotCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFz
ZTY0VVJMRGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBy
ZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oZGF0YSksIGxlbmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CisgICAgICAgIHJl
dHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG9w
dGlvbnMsIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJh
Y3RlcnMxNigpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdU
RgpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RG
L3d0Zi90ZXh0L0Jhc2U2NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKyNpbmNs
dWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTU2LDU0ICs1NywzNSBAQCBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heGltdW1CYXNlNjRMCiAvLyBSYXRoZXIgdGhhbiBi
ZWluZyBwZXJmZWN0bHkgcHJlY2lzZSwgdGhpcyBpcyBhIGJpdCBjb25zZXJ2YXRpdmUuCiBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIG1heGltdW1CYXNlNjRFbmNvZGVySW5wdXRCdWZmZXJTaXpl
ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC8gNzcgKiA3NiAvIDQgKiAz
IC0gMjsKIAotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQq
LCB1bnNpZ25lZCwgVUNoYXIqLCB1bnNpZ25lZCwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0
RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5j
b2RlTWFwOjpEZWZhdWx0KTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShj
b25zdCB2b2lkKiwgdW5zaWduZWQsIExDaGFyKiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGlj
eSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9
IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNl
NjRFbmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+LCBVQ2hhciogZGVzdGluYXRpb25CdWZmZXIs
IHVuc2lnbmVkIGRlc3RpbmF0aW9uQnVmZmVyU2l6ZSwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFz
ZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0
RW5jb2RlTWFwOjpEZWZhdWx0KTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29k
ZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4sIExDaGFyKiBkZXN0aW5hdGlvbkJ1ZmZlciwgdW5zaWdu
ZWQgZGVzdGluYXRpb25CdWZmZXJTaXplLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNv
ZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVN
YXA6OkRlZmF1bHQpOwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2
NEVuY29kZVRvVmVjdG9yKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgQmFzZTY0RW5jb2RlUG9saWN5
ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0g
QmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKLVZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVU
b1ZlY3Rvcihjb25zdCBWZWN0b3I8dWludDhfdD4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNl
NjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRF
bmNvZGVNYXA6OkRlZmF1bHQpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9y
KGNvbnN0IFZlY3RvcjxjaGFyPiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBv
bGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6
RGVmYXVsdCk7Ci1WZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgQ1N0
cmluZyYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNl
cnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci0KLVdU
Rl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3Qgdm9pZCos
IHVuc2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90
SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwot
U3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIEJhc2U2
NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2
NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci1TdHJpbmcgYmFzZTY0RW5j
b2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPGNoYXI+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFz
ZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0
RW5jb2RlTWFwOjpEZWZhdWx0KTsKLVN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdCBD
U3RyaW5nJiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdElu
c2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKK1dU
Rl9FWFBPUlRfUFJJVkFURSBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoU3Bh
bjxjb25zdCBzdGQ6OmJ5dGU+LCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xp
Y3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRl
ZmF1bHQpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29k
ZVRvVmVjdG9yKFQmJiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpE
b05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0
KTsKIAorV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFu
PGNvbnN0IHN0ZDo6Ynl0ZT4sIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGlj
eTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVm
YXVsdCk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmco
VCYmLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0
TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOworCitXVEZf
RVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29k
ZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4sIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9
IHsgfSwgQmFzZTY0RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKIFdURl9F
WFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2Rl
KGNvbnN0IFN0cmluZyYsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFz
ZTY0RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKIFdURl9FWFBPUlRfUFJJ
VkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKFN0cmluZ1Zp
ZXcsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFw
ID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9w
dGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFw
ID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9w
dGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYs
IE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFwID0g
QmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlv
bmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IHVpbnQ4X3QqLCB1bnNpZ25l
ZCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAg
PSBCYXNlNjREZWNvZGVNYXA6OkRlZmF1bHQpOwotV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0
aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgY2hhciosIHVuc2lnbmVk
LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9
IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7Ci0KLWlubGluZSBWZWN0b3I8dWludDhfdD4gYmFz
ZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCwgQmFzZTY0RW5j
b2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKLXsKLSAgICByZXR1cm4gYmFz
ZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSwgbWFw
KTsKLX0KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2Ft
ZV92PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJp
bmc+ICYmICFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3ZlX3Jl
ZmVyZW5jZV90PFQ+PiwgU3RyaW5nVmlldz4+KiA9IG51bGxwdHI+CitzdGQ6Om9wdGlvbmFsPFZl
Y3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKFQmJiwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9w
dGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRlZmF1bHQp
OwogCi1pbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IFZl
Y3RvcjxjaGFyPiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29k
ZU1hcCBtYXApCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5j
b2RlVG9WZWN0b3IoVCYmIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRF
bmNvZGVNYXAgbWFwKQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5k
YXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5LCBtYXApOworICAgIHJldHVybiBiYXNlNjRFbmNv
ZGVUb1ZlY3Rvcihhc0J5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oaW5wdXQpIH0pLCBwb2xp
Y3ksIG1hcCk7CiB9CiAKLWlubGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0
b3IoY29uc3QgQ1N0cmluZyYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2
NEVuY29kZU1hcCBtYXApCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgYmFzZTY0RW5jb2Rl
VG9TdHJpbmcoVCYmIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNv
ZGVNYXAgbWFwKQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRh
KCksIGlucHV0Lmxlbmd0aCgpLCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29k
ZVRvU3RyaW5nKGFzQnl0ZXMoU3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCkgfSksIHBvbGlj
eSwgbWFwKTsKIH0KIAotaW5saW5lIFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdCBW
ZWN0b3I8dWludDhfdD4mIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRF
bmNvZGVNYXAgbWFwKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc3RkOjplbmFibGVfaWZfdDwhc3Rk
Ojppc19zYW1lX3Y8c3RkOjpyZW1vdmVfY29uc3RfdDxzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxU
Pj4sIFN0cmluZz4gJiYgIXN0ZDo6aXNfc2FtZV92PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpy
ZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmdWaWV3Pj4qPgorc3RkOjpvcHRpb25hbDxWZWN0
b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShUJiYgaW5wdXQsIE9wdGlvblNldDxCYXNlNjREZWNv
ZGVPcHRpb25zPiBvcHRpb25zLCBCYXNlNjREZWNvZGVNYXAgbWFwKQogewotICAgIHJldHVybiBi
YXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5LCBt
YXApOwotfQotCi1pbmxpbmUgU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3Rv
cjxjaGFyPiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1h
cCBtYXApCi17Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LmRhdGEoKSwg
aW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7Ci19Ci0KLWlubGluZSBTdHJpbmcgYmFzZTY0RW5j
b2RlVG9TdHJpbmcoY29uc3QgQ1N0cmluZyYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xp
Y3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCi17Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3Ry
aW5nKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIHBvbGljeSwgbWFwKTsKKyAgICByZXR1
cm4gYmFzZTY0RGVjb2RlKGFzQnl0ZXMoU3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCkgfSks
IG9wdGlvbnMsIG1hcCk7CiB9CiAKIApAQCAtMTEyLDYxICs5NCw1NyBAQCBpbmxpbmUgU3RyaW5n
IGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0CiAvLyBUaGlzIGZvcm1hdCB1c2VzICctJyBhbmQg
J18nIGluc3RlYWQgb2YgJysnIGFuZCAnLycgcmVzcGVjdGl2ZWx5LgogLy8gPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KIAotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVj
dG9yKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCk7Ci1WZWN0b3I8dWludDhfdD4gYmFzZTY0VVJMRW5j
b2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik7Ci1WZWN0b3I8dWludDhfdD4gYmFz
ZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPGNoYXI+Jik7Ci1WZWN0b3I8dWludDhf
dD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgQ1N0cmluZyYpOworVmVjdG9yPHVpbnQ4
X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3Io
VCYmKTsKIAotU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqLCB1bnNp
Z25lZCk7Ci1TdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+Jik7Ci1TdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPGNoYXI+
Jik7Ci1TdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY29uc3QgQ1N0cmluZyYpOworU3Ry
aW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoVCYmKTsKIAot
V1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRV
UkxEZWNvZGUoY29uc3QgU3RyaW5nJik7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25h
bDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShTdHJpbmdWaWV3KTsKLVdURl9FWFBP
UlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2Rl
KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOwotV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0aW9u
YWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+Jik7
Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2
NFVSTERlY29kZShjb25zdCB1aW50OF90KiwgdW5zaWduZWQpOwotV1RGX0VYUE9SVF9QUklWQVRF
IHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgY2hh
ciosIHVuc2lnbmVkKTsKK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxE
ZWNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KTsKK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgU3RyaW5nJik7CitzdGQ6Om9wdGlvbmFsPFZlY3Rv
cjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFN0cmluZ1ZpZXcpOwordGVtcGxhdGU8dHlwZW5h
bWUgVCwgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lX3Y8c3RkOjpyZW1vdmVfY29uc3Rf
dDxzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxUPj4sIFN0cmluZz4gJiYgIXN0ZDo6aXNfc2FtZV92
PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmdW
aWV3Pj4qID0gbnVsbHB0cj4KK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRV
UkxEZWNvZGUoVCYmKTsKIAotaW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVU
b1ZlY3Rvcihjb25zdCB2b2lkKiBpbnB1dCwgdW5zaWduZWQgbGVuZ3RoKQoraW5saW5lIFZlY3Rv
cjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3RvcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
aW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlucHV0LCBsZW5ndGgs
IEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0
dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwg
QmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQogCi1pbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2
NFVSTEVuY29kZVRvVmVjdG9yKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoVCYm
IGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRhKCks
IGlucHV0LnNpemUoKSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6
VVJMKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3Ioc3RkOjpmb3J3YXJkPFQ+KGlu
cHV0KSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKIH0K
IAotaW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihjb25zdCBW
ZWN0b3I8Y2hhcj4mIGlucHV0KQoraW5saW5lIFN0cmluZyBiYXNlNjRVUkxFbmNvZGVUb1N0cmlu
ZyhTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29k
ZVRvVmVjdG9yKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6
OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0
cmluZyhpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJM
KTsKIH0KIAotaW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihj
b25zdCBDU3RyaW5nJiBpbnB1dCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBiYXNlNjRV
UkxFbmNvZGVUb1N0cmluZyhUJiYgaW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRv
VmVjdG9yKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIEJhc2U2NEVuY29kZVBvbGljeTo6
VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3Ry
aW5nKHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCksIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNl
NjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9T
dHJpbmcoY29uc3Qgdm9pZCogaW5wdXQsIHVuc2lnbmVkIGxlbmd0aCkKK2lubGluZSBzdGQ6Om9w
dGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFNwYW48Y29uc3Qgc3RkOjpi
eXRlPiBpbnB1dCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5wdXQsIGxl
bmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKKyAg
ICByZXR1cm4gYmFzZTY0RGVjb2RlKGlucHV0LCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsK
IH0KIAotaW5saW5lIFN0cmluZyBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhjb25zdCBWZWN0b3I8
dWludDhfdD4mIGlucHV0KQoraW5saW5lIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjRVUkxEZWNvZGUoY29uc3QgU3RyaW5nJiBpbnB1dCkKIHsKLSAgICByZXR1cm4gYmFzZTY0
RW5jb2RlVG9TdHJpbmcoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29k
ZShpbnB1dCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBTdHJpbmcg
YmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCkKK2lubGlu
ZSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFN0cmluZ1Zp
ZXcgaW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LmRhdGEo
KSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFw
OjpVUkwpOworICAgIHJldHVybiBiYXNlNjREZWNvZGUoaW5wdXQsIHsgfSwgQmFzZTY0RGVjb2Rl
TWFwOjpVUkwpOwogfQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNv
bnN0IENTdHJpbmcmIGlucHV0KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc3RkOjplbmFibGVfaWZf
dDwhc3RkOjppc19zYW1lX3Y8c3RkOjpyZW1vdmVfY29uc3RfdDxzdGQ6OnJlbW92ZV9yZWZlcmVu
Y2VfdDxUPj4sIFN0cmluZz4gJiYgIXN0ZDo6aXNfc2FtZV92PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8
c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmdWaWV3Pj4qPgorc3RkOjpvcHRpb25h
bDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShUJiYgaW5wdXQpCiB7Ci0gICAgcmV0
dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIEJh
c2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJu
IGJhc2U2NFVSTERlY29kZShhc0J5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oaW5wdXQpIH0p
KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGlubGluZSBi
b29sIGlzQmFzZTY0T3JCYXNlNjRVUkxDaGFyYWN0ZXIoQ2hhcmFjdGVyVHlwZSBjKQpAQCAtMjA4
LDU3ICsxODYsMzYgQEAgaW5saW5lIHVuc2lnbmVkIGNhbGN1bGF0ZUJhc2U2NEVuY29kZWRTaQog
fQogCiBzdHJ1Y3QgQmFzZTY0U3BlY2lmaWNhdGlvbiB7Ci0gICAgY29uc3Qgdm9pZCogaW5wdXRE
YXRhOwotICAgIHVuc2lnbmVkIGlucHV0TGVuZ3RoOworICAgIFNwYW48Y29uc3Qgc3RkOjpieXRl
PiBpbnB1dERhdGE7CiAgICAgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeTsKICAgICBCYXNlNjRF
bmNvZGVNYXAgbWFwOwogfTsKIAotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5j
b2RlZChjb25zdCB2b2lkKiBpbnB1dERhdGEsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNlNjRF
bmNvZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywg
QmFzZTY0RW5jb2RlTWFwIG1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCkKLXsKLSAgICBy
ZXR1cm4geyBpbnB1dERhdGEsIGlucHV0TGVuZ3RoLCBwb2xpY3ksIG1hcCB9OwotfQotCi1pbmxp
bmUgQmFzZTY0U3BlY2lmaWNhdGlvbiBiYXNlNjRFbmNvZGVkKGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6
OkRvTm90SW5zZXJ0TEZzKQotewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEo
KSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3kpOwotfQotCi1pbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlv
biBiYXNlNjRFbmNvZGVkKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW5wdXQsIEJhc2U2NEVuY29kZVBv
bGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzKQotewotICAg
IHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3kp
OwotfQotCi1pbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlvbiBiYXNlNjRFbmNvZGVkKGNvbnN0IENT
dHJpbmcmIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0RW5jb2RlUG9s
aWN5OjpEb05vdEluc2VydExGcykKLXsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5k
YXRhKCksIGlucHV0Lmxlbmd0aCgpLCBwb2xpY3kpOwotfQotCi1pbmxpbmUgQmFzZTY0U3BlY2lm
aWNhdGlvbiBiYXNlNjRVUkxFbmNvZGVkKGNvbnN0IHZvaWQqIGlucHV0RGF0YSwgdW5zaWduZWQg
aW5wdXRMZW5ndGgpCitpbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlvbiBiYXNlNjRFbmNvZGVkKFNw
YW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9IEJh
c2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCBtYXAgPSBC
YXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5w
dXREYXRhLCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29k
ZU1hcDo6VVJMKTsKKyAgICByZXR1cm4geyBpbnB1dCwgcG9saWN5LCBtYXAgfTsKIH0KIAotaW5s
aW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIGlucHV0KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gQmFzZTY0U3BlY2lmaWNhdGlvbiBi
YXNlNjRFbmNvZGVkKFQmJiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9IEJhc2U2
NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCBtYXAgPSBCYXNl
NjRFbmNvZGVNYXA6OkRlZmF1bHQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQu
ZGF0YSgpLCBpbnB1dC5zaXplKCksIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNv
ZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoYXNCeXRlcyhTcGFuIHsgc3Rk
Ojpmb3J3YXJkPFQ+KGlucHV0KSB9KSwgcG9saWN5LCBtYXApOwogfQogCi1pbmxpbmUgQmFzZTY0
U3BlY2lmaWNhdGlvbiBiYXNlNjRVUkxFbmNvZGVkKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW5wdXQp
CitpbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlvbiBiYXNlNjRVUkxFbmNvZGVkKFNwYW48Y29uc3Qg
c3RkOjpieXRlPiBpbnB1dCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5kYXRh
KCksIGlucHV0LnNpemUoKSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1h
cDo6VVJMKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dCwgQmFzZTY0RW5jb2RlUG9s
aWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKIH0KIAotaW5saW5lIEJhc2U2NFNwZWNp
ZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChjb25zdCBDU3RyaW5nJiBpbnB1dCkKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChUJiYgaW5w
dXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5n
dGgoKSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKKyAg
ICByZXR1cm4gYmFzZTY0RW5jb2RlZChhc0J5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oaW5w
dXQpIH0pLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwog
fQogCiB0ZW1wbGF0ZTw+IGNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPEJhc2U2NFNwZWNpZmljYXRp
b24+IHsKIHB1YmxpYzoKICAgICBTdHJpbmdUeXBlQWRhcHRlcihjb25zdCBCYXNlNjRTcGVjaWZp
Y2F0aW9uJiBiYXNlNjQpCiAgICAgICAgIDogbV9iYXNlNjQgeyBiYXNlNjQgfQotICAgICAgICAs
IG1fZW5jb2RlZExlbmd0aCB7IGNhbGN1bGF0ZUJhc2U2NEVuY29kZWRTaXplKGJhc2U2NC5pbnB1
dExlbmd0aCwgYmFzZTY0LnBvbGljeSkgfQorICAgICAgICAsIG1fZW5jb2RlZExlbmd0aCB7IGNh
bGN1bGF0ZUJhc2U2NEVuY29kZWRTaXplKGJhc2U2NC5pbnB1dERhdGEuc2l6ZSgpLCBiYXNlNjQu
cG9saWN5KSB9CiAgICAgewogICAgIH0KIApAQCAtMjY3LDcgKzIyNCw3IEBAIHB1YmxpYzoKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZvaWQgd3JpdGVUbyhDaGFyYWN0
ZXJUeXBlKiBkZXN0aW5hdGlvbikgY29uc3QKICAgICB7Ci0gICAgICAgIGJhc2U2NEVuY29kZSht
X2Jhc2U2NC5pbnB1dERhdGEsIG1fYmFzZTY0LmlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvbiwgbV9l
bmNvZGVkTGVuZ3RoLCBtX2Jhc2U2NC5wb2xpY3ksIG1fYmFzZTY0Lm1hcCk7CisgICAgICAgIGJh
c2U2NEVuY29kZShtX2Jhc2U2NC5pbnB1dERhdGEsIGRlc3RpbmF0aW9uLCBtX2VuY29kZWRMZW5n
dGgsIG1fYmFzZTY0LnBvbGljeSwgbV9iYXNlNjQubWFwKTsKICAgICB9CiAKIHByaXZhdGU6Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi90ZXh0L0NTdHJpbmcuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93
dGYvdGV4dC9DU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNs
dWRlIDx3dGYvSGFzaFRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAKIG5hbWVzcGFjZSBXVEYg
ewogCkBAIC0zOSw5ICs0MCwxMSBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJ
RklFUihDCiBjbGFzcyBDU3RyaW5nQnVmZmVyIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8Q1N0
cmluZ0J1ZmZlcj4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVO
VElGSUVSKENTdHJpbmdCdWZmZXIpOwogcHVibGljOgotICAgIGNvbnN0IGNoYXIqIGRhdGEoKSB7
IHJldHVybiBtdXRhYmxlRGF0YSgpOyB9CisgICAgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0IHsg
cmV0dXJuIGNvbnN0X2Nhc3Q8Q1N0cmluZ0J1ZmZlcio+KHRoaXMpLT5tdXRhYmxlRGF0YSgpOyB9
CiAgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CiAKKyAgICBT
cGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25zdCB7IHJldHVybiBhc0J5dGVzKFNwYW4g
eyBkYXRhKCksIGxlbmd0aCgpIH0pOyB9CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIENT
dHJpbmc7CiAKQEAgLTY2LDYgKzY5LDIwIEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIENTdHJpbmcgbmV3VW5pbml0aWFsaXplZChzaXplX3QgbGVuZ3RoLCBjaGFyKiYg
Y2hhcmFjdGVyQnVmZmVyKTsKICAgICBDU3RyaW5nKEhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUp
IDogbV9idWZmZXIoSGFzaFRhYmxlRGVsZXRlZFZhbHVlKSB7IH0KIAorICAgIFNwYW48Y29uc3Qg
c3RkOjpieXRlPiBieXRlcygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9idWZmZXIpCisg
ICAgICAgICAgICByZXR1cm4gbV9idWZmZXItPmJ5dGVzKCk7CisgICAgICAgIHJldHVybiB7IH07
CisgICAgfQorCisgICAgU3BhbjxzdGQ6OmJ5dGU+IG11dGFibGVCeXRlcygpCisgICAgeworICAg
ICAgICBpZiAoYXV0byBtdXRhYmxlRGF0YSA9IHRoaXMtPm11dGFibGVEYXRhKCkpCisgICAgICAg
ICAgICByZXR1cm4gYXNXcml0YWJsZUJ5dGVzKFNwYW4geyBtdXRhYmxlRGF0YSwgbV9idWZmZXIt
Pmxlbmd0aCgpIH0pOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKwogICAgIGNvbnN0IGNo
YXIqIGRhdGEoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fYnVmZmVyID8gbV9idWZm
ZXItPmRhdGEoKSA6IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1Zp
ZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgJKHdvcmtp
bmcgY29weSkKQEAgLTk0LDYgKzk0LDggQEAgcHVibGljOgogICAgIGNvbnN0IExDaGFyKiBjaGFy
YWN0ZXJzOCgpIGNvbnN0OwogICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzMTYoKSBjb25zdDsK
IAorICAgIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAgICAgYm9vbCBp
c0FsbEFTQ0lJKCkgY29uc3Q7CiAKICAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKQEAgLTQy
NCw2ICs0MjYsMTMgQEAgaW5saW5lIGNvbnN0IFVDaGFyKiBTdHJpbmdWaWV3OjpjaGFyYWN0ZQog
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBVQ2hhcio+KG1fY2hhcmFjdGVycyk7CiB9CiAK
K2lubGluZSBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gU3RyaW5nVmlldzo6Ynl0ZXMoKSBjb25zdAor
eworICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGFzQnl0ZXMoU3BhbiB7IGNoYXJh
Y3RlcnM4KCksIGxlbmd0aCgpIH0pOworICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBjaGFyYWN0
ZXJzMTYoKSwgbGVuZ3RoKCkgfSk7Cit9CisKIGlubGluZSBib29sIFN0cmluZ1ZpZXc6OmlzQWxs
QVNDSUkoKSBjb25zdAogewogICAgIGlmIChpczhCaXQoKSkKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L3RleHQvV1RGU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9XVEZT
dHJpbmcuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJp
bmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSA8c3RkYXJn
Lmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9BU0NJSUxpdGVyYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9JbnRl
Z2VyVG9TdHJpbmdDb252ZXJzaW9uLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5o
PgpAQCAtMTM0LDYgKzEzNSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsg
cmV0dXJuICFtX2ltcGwgfHwgbV9pbXBsLT5pczhCaXQoKTsgfQogCiAgICAgdW5zaWduZWQgc2l6
ZUluQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmxlbmd0aCgpICogKGlz
OEJpdCgpID8gc2l6ZW9mKExDaGFyKSA6IHNpemVvZihVQ2hhcikpIDogMDsgfQorICAgIFNwYW48
Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OwogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRF
IENTdHJpbmcgYXNjaWkoKSBjb25zdDsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgQ1N0cmluZyBs
YXRpbjEoKSBjb25zdDsKQEAgLTQ4Myw2ICs0ODUsMTYgQEAgdGVtcGxhdGU8PiBpbmxpbmUgY29u
c3QgVUNoYXIqIFN0cmluZzo6YwogICAgIHJldHVybiBjaGFyYWN0ZXJzMTYoKTsKIH0KIAoraW5s
aW5lIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBTdHJpbmc6OmJ5dGVzKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1faW1wbCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmIChtX2ltcGwtPmlzOEJp
dCgpKQorICAgICAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgbV9pbXBsLT5jaGFyYWN0ZXJzOCgp
LCBtX2ltcGwtPmxlbmd0aCgpIH0pOworICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBtX2ltcGwt
PmNoYXJhY3RlcnMxNigpLCBtX2ltcGwtPmxlbmd0aCgpIH0pOworfQorCiBpbmxpbmUgVUNoYXIg
U3RyaW5nOjpjaGFyYWN0ZXJBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKICAgICBpZiAoIW1f
aW1wbCB8fCBpbmRleCA+PSBtX2ltcGwtPmxlbmd0aCgpKQpJbmRleDogU291cmNlL1dURi93dGYv
d2luL0ZpbGVTeXN0ZW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3dpbi9G
aWxlU3lzdGVtV2luLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvd2lu
L0ZpbGVTeXN0ZW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjMsOSArMzYzLDkgQEAgU3Ry
aW5nIGNyZWF0ZVRlbXBvcmFyeURpcmVjdG9yeSgpCiAgICAgfSk7CiB9CiAKLWJvb2wgdW5tYXBW
aWV3T2ZGaWxlKHZvaWQqIGJ1ZmZlciwgc2l6ZV90KQorYm9vbCB1bm1hcFZpZXdPZkZpbGUoU3Bh
bjxzdGQ6OmJ5dGU+IGRhdGEpCiB7Ci0gICAgcmV0dXJuIFVubWFwVmlld09mRmlsZShidWZmZXIp
OworICAgIHJldHVybiBVbm1hcFZpZXdPZkZpbGUoZGF0YS5kYXRhKCkpOwogfQogCiBib29sIE1h
cHBlZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIEZp
bGVPcGVuTW9kZSBvcGVuTW9kZSwgTWFwcGVkRmlsZU1vZGUpCkBAIC0zNzQsNyArMzc0LDcgQEAg
Ym9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0ZgogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBhdXRvIHNpemUgPSBmaWxlU2l6ZShoYW5kbGUpOwotICAgIGlmICghc2l6
ZSB8fCAqc2l6ZSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgfHwgKnNpemUg
PiBzdGQ6Om51bWVyaWNfbGltaXRzPGRlY2x0eXBlKG1fZmlsZVNpemUpPjo6bWF4KCkpIHsKKyAg
ICBpZiAoIXNpemUgfHwgKnNpemUgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgp
IHx8ICpzaXplID4gc3RkOjpudW1lcmljX2xpbWl0czxkZWNsdHlwZShtX2ZpbGVEYXRhLnNpemUo
KSk+OjptYXgoKSkgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC00MDMsMTEg
KzQwMywxMiBAQCBib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmCiAgICAg
aWYgKCFtYXBwaW5nKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2ZpbGVEYXRhID0g
TWFwVmlld09mRmlsZShtYXBwaW5nLCBkZXNpcmVkQWNjZXNzLCAwLCAwLCAqc2l6ZSk7CisgICAg
YXV0byBkYXRhID0gTWFwVmlld09mRmlsZShtYXBwaW5nLCBkZXNpcmVkQWNjZXNzLCAwLCAwLCAq
c2l6ZSk7CiAgICAgQ2xvc2VIYW5kbGUobWFwcGluZyk7Ci0gICAgaWYgKCFtX2ZpbGVEYXRhKQor
ICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fZmlsZVNpemUgPSAq
c2l6ZTsKKworICAgIG1fZmlsZURhdGEgPSBTcGFuIHsgcmVpbnRlcnByZXRfY2FzdDxzdGQ6OmJ5
dGUqPihkYXRhKSwgKnNpemUgfTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsODAgQEAKKzIwMjEtMDYtMTEgIFNhbSBXZWluaWcgIDx3ZWluaWdA
YXBwbGUuY29tPgorCisgICAgICAgIEFkb3B0IFNwYW4gaW4gbW9yZSBwbGFjZXMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjg4NworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtXSVBdCisKKyAgICAgICAg
KiBNb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFw
cEhpZ2hsaWdodDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcEhpZ2hsaWdo
dDo6ZGVjb2RlKToKKyAgICAgICAgKiBNb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHRSYW5n
ZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwSGlnaGxpZ2h0UmFuZ2VEYXRhOjp0b1No
YXJlZEJ1ZmZlciBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNh
dG9yUmVzcG9uc2VEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjplbmNvZGVBcnJheUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpkZWNvZGVBcnJheUJ1ZmZlcik6CisgICAgICAgICogTW9kdWxl
cy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmg6CisgICAgICAg
IChXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjplbmNvZGUgY29u
c3QpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbERlc2Ny
aXB0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9y
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRI
YW5kc2hha2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpnZXRF
eHBlY3RlZFdlYlNvY2tldEFjY2VwdCk6CisgICAgICAgICogYmluZGluZ3MvanMvQnVmZmVyU291
cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJTb3VyY2U6OmJ5dGVzIGNvbnN0KToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVjb2RlKToKKyAgICAgICAgKiBjb250ZW50
ZXh0ZW5zaW9ucy9TZXJpYWxpemVkTkZBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpTZXJpYWxpemVkTkZBOjpwb2ludGVyQXRPZmZzZXRJbkZpbGUgY29uc3QpOgor
ICAgICAgICAqIGNyeXB0by9tYWMvU2VyaWFsaXplZENyeXB0b0tleVdyYXBNYWMubW06CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVBbmRTdG9yZU1hc3RlcktleSk6CisgICAgICAgICogZG9tL05v
ZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFzaFBvaW50ZXIpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NUGF0Y2hTdXBw
b3J0OjpjcmVhdGVEaWdlc3QpOgorICAgICAgICAoV2ViQ29yZTo6YWRkU3RyaW5nVG9TSEExKTog
RGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6c2hvd0NlcnRpZmljYXRl
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmdldFNlcmlhbGl6ZWRD
ZXJ0aWZpY2F0ZSk6CisgICAgICAgICogcGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGE6OmNyZWF0ZVNoYXJlZEJ1
ZmZlciBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNoYXJlZEJ1ZmZlcjo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZl
cjo6RGF0YVNlZ21lbnQ6OmRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVm
ZmVyOjpEYXRhU2VnbWVudDo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVk
QnVmZmVyOjpkZWNvZGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6
RGF0YVNlZ21lbnQ6OnNpemUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZl
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2NvY29hL0NBQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjplbmNv
ZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpk
ZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01vZGVsLmg6CisgICAgICAgIChX
ZWJDb3JlOjpNb2RlbDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1vZGVsOjpk
ZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlBpeGVsQnVmZmVyOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFt
L1JlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNh
cGFiaWxpdHlWYWx1ZU9yUmFuZ2U6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpD
YXBhYmlsaXR5VmFsdWVPclJhbmdlOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlh
c3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
YWRkU3RyaW5nVG9TSEExKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL0NlcnRpZmlj
YXRlSW5mb0NGTmV0LmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OmVuY29kZUNGRGF0
YSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpkZWNvZGVDRkRhdGEpOgorICAgICAgICAq
IHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50OjpiaW5kQmxvYik6CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZVN0
YXRlbWVudC5oOgorICAgICAgICAqIHdvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9u
RGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVnaXN0cmF0aW9uRGF0YWJhc2U6OmRv
UHVzaENoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaXN0cmF0aW9uRGF0YWJhc2U6Omlt
cG9ydFJlY29yZHMpOgorICAgICAgICAqIHdvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTY3JpcHRT
dG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNXU2NyaXB0U3RvcmFnZTo6c3RvcmUpOgor
CiAyMDIxLTA2LTExICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAg
TGF6aWx5IGNvbXB1dGUgU2VjdXJpdHlPcmlnaW46Om1faXNQb3RlbnRpYWxseVRydXN0d29ydGh5
IGZvciBwZXJmb3JtYW5jZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRt
ZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2VuY3J5cHRlZG1lZGlhL0luaXREYXRhUmVnaXN0cnkuY3BwCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0luaXREYXRhUmVn
aXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAgc3RhdGljIFJlZlB0
cjxTaGFyZWRCdWZmZXI+IHNhbml0aXplS2V5aQogICAgIGF1dG8gb2JqZWN0ID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKICAgICBhdXRvIGtpZHNBcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUo
KTsKICAgICBmb3IgKGF1dG8mIGJ1ZmZlciA6IGtleUlEQnVmZmVyLnZhbHVlKCkpCi0gICAgICAg
IGtpZHNBcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhidWZmZXItPmRh
dGEoKSwgYnVmZmVyLT5zaXplKCkpKTsKKyAgICAgICAga2lkc0FycmF5LT5wdXNoU3RyaW5nKGJh
c2U2NFVSTEVuY29kZVRvU3RyaW5nKGJ1ZmZlci0+Ynl0ZXMoKSkpOwogICAgIG9iamVjdC0+c2V0
QXJyYXkoImtpZHMiLCBXVEZNb3ZlKGtpZHNBcnJheSkpOwogCiAgICAgQ1N0cmluZyBqc29uRGF0
YSA9IG9iamVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0LmgJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lk
IEFwcEhpZ2hsaWdodDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5j
b2RlciA8PCBzdGF0aWNfY2FzdDxzaXplX3Q+KGhpZ2hsaWdodC0+c2l6ZSgpKTsKLSAgICBlbmNv
ZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShoaWdobGlnaHQtPmRhdGEoKSwgaGlnaGxpZ2h0LT5z
aXplKCksIDEpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKCpoaWdobGlnaHQs
IDEpOwogCiAgICAgZW5jb2RlciA8PCB0ZXh0OwogCkBAIC03NSw3ICs3NSw3IEBAIHN0ZDo6b3B0
aW9uYWw8QXBwSGlnaGxpZ2h0PiBBcHBIaWdobGlnaHQKIAogICAgIFZlY3Rvcjx1aW50OF90PiBo
aWdobGlnaHQ7CiAgICAgaGlnaGxpZ2h0Lmdyb3coKmxlbmd0aCk7Ci0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZUZpeGVkTGVuZ3RoRGF0YShoaWdobGlnaHQuZGF0YSgpLCBoaWdobGlnaHQuc2l6ZSgp
LCAxKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGhpZ2hsaWdodCwg
MSkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKICAgICBzdGQ6Om9wdGlvbmFsPHN0
ZDo6b3B0aW9uYWw8U3RyaW5nPj4gdGV4dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFJhbmdlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhLmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9oaWdobGlnaHQvQXBwSGln
aGxpZ2h0UmFuZ2VEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBSZWY8
U2hhcmVkQnVmZmVyPiBBcHBIaWdobGlnaHRSYW5nZURhdGE6CiB7CiAgICAgV1RGOjpQZXJzaXN0
ZW5jZTo6RW5jb2RlciBlbmNvZGVyOwogICAgIGVuY29kZXIgPDwgKnRoaXM7Ci0gICAgcmV0dXJu
IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6
ZSgpKTsKKyAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZW5jb2Rlci5idWZmZXIoKSk7
CiB9CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgQXBwSGlnaGxpZ2h0UmFuZ2VEYXRh
OjpOb2RlUGF0aENvbXBvbmVudDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFD
aGFubmVsLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgw
LDcgQEAgTmV0d29ya1NlbmRRdWV1ZSBSVENEYXRhQ2hhbm5lbDo6Y3JlYXRlTQogICAgICAgICBp
ZiAoIWNoYW5uZWwubV9oYW5kbGVyLT5zZW5kU3RyaW5nRGF0YSh1dGY4KSkKICAgICAgICAgICAg
IGNoYW5uZWwuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNz
YWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgIkVycm9yIHNlbmRpbmcgc3RyaW5n
IHRocm91Z2ggUlRDRGF0YUNoYW5uZWwuIl9zKTsKICAgICB9LCBbJmNoYW5uZWxdKGF1dG8mIHNw
YW4pIHsKLSAgICAgICAgaWYgKCFjaGFubmVsLm1faGFuZGxlci0+c2VuZFJhd0RhdGEoc3Bhbi5k
YXRhKCksIHNwYW4uc2l6ZSgpKSkKKyAgICAgICAgaWYgKCFjaGFubmVsLm1faGFuZGxlci0+c2Vu
ZFJhd0RhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3Bhbi5kYXRhKCkpLCBz
cGFuLnNpemUoKSkpCiAgICAgICAgICAgICBjaGFubmVsLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJy
b3IsICJFcnJvciBzZW5kaW5nIGJpbmFyeSBkYXRhIHRocm91Z2ggUlRDRGF0YUNoYW5uZWwuIl9z
KTsKICAgICB9LCBbJmNoYW5uZWxdKEV4Y2VwdGlvbkNvZGUgZXJyb3JDb2RlKSB7CiAgICAgICAg
IGlmIChhdXRvKiBjb250ZXh0ID0gY2hhbm5lbC5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBs
YWNlbWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMv
UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0JKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQko
d29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQAogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
Q2F0Y2hTY29wZS5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4K
ICNpbXBvcnQgPG9iamMvcnVudGltZS5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1NwYW5Db2NvYS5o
PgogI2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+CiAKICNpbXBvcnQgPHBhbC9jZi9Db3JlTWVk
aWFTb2Z0TGluay5oPgpAQCAtMjQ2LDkgKzI0Nyw5IEBAIHN0YXRpYyBKU1ZhbHVlICpqc1ZhbHVl
V2l0aERhdGFJbkNvbnRleHQKICAgICAvLyBGSVhNRTogQWRkIG1ha2VDRlN0cmluZy9tYWtlTlNT
dHJpbmcgdG8gYXZvaWQgdW5uZWNlc3NhcnkgU3RyaW5nIGFsbG9jYXRpb24uCiAgICAgU3RyaW5n
IGRhdGE2NDsKICAgICBpZiAoIW1pbWVUeXBlLmlzRW1wdHkoKSkKLSAgICAgICAgZGF0YTY0ID0g
bWFrZVN0cmluZygiZGF0YToiLCBtaW1lVHlwZSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChb
ZGF0YSBieXRlc10sIFtkYXRhIGxlbmd0aF0pKTsKKyAgICAgICAgZGF0YTY0ID0gbWFrZVN0cmlu
ZygiZGF0YToiLCBtaW1lVHlwZSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChhc0J5dGVzKGRh
dGEpKSk7CiAgICAgZWxzZQotICAgICAgICBkYXRhNjQgPSBtYWtlU3RyaW5nKCJkYXRhOnRleHQv
cGxhaW47YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoW2RhdGEgYnl0ZXNdLCBbZGF0YSBsZW5ndGhd
KSk7CisgICAgICAgIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6dGV4dC9wbGFpbjtiYXNlNjQs
IiwgYmFzZTY0RW5jb2RlZChhc0J5dGVzKGRhdGEpKSk7CiAKICAgICByZXR1cm4gW0pTVmFsdWUg
dmFsdWVXaXRoT2JqZWN0OihpZClkYXRhNjQuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSBpbkNvbnRl
eHQ6Y29udGV4dF07CiB9CkBAIC0zNDAsNyArMzQxLDcgQEAgc3RhdGljIEpTVmFsdWUgKmpzVmFs
dWVXaXRoQVZNZXRhZGF0YUl0ZQogICAgICAgICBpZCB2YWx1ZSA9IGl0ZW0udmFsdWU7CiAgICAg
ICAgIE5TU3RyaW5nICptaW1lVHlwZSA9IFtbaXRlbSBleHRyYUF0dHJpYnV0ZXNdIG9iamVjdEZv
cktleTpAIk1JTUV0eXBlIl07CiAgICAgICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNE
YXRhIGNsYXNzXV0gJiYgbWltZVR5cGUpIHsKLSAgICAgICAgICAgIGF1dG8gZGF0YTY0ID0gbWFr
ZVN0cmluZygiZGF0YToiLCBTdHJpbmcobWltZVR5cGUpLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNv
ZGVkKFt2YWx1ZSBieXRlc10sIFt2YWx1ZSBsZW5ndGhdKSk7CisgICAgICAgICAgICBhdXRvIGRh
dGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgU3RyaW5nKG1pbWVUeXBlKSwgIjtiYXNlNjQsIiwg
YmFzZTY0RW5jb2RlZChhc0J5dGVzKChOU0RhdGEgKil2YWx1ZSkpKTsKICAgICAgICAgICAgIFtk
aWN0aW9uYXJ5IHNldE9iamVjdDooX19icmlkZ2UgTlNTdHJpbmcgKilkYXRhNjQuY3JlYXRlQ0ZT
dHJpbmcoKS5nZXQoKSBmb3JLZXk6QCJ2YWx1ZSJdOwogICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDp2YWx1ZSBmb3JLZXk6QCJ2YWx1ZSJdOwpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yQ29vcmRpbmF0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0aGVu
dGljYXRvckNvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yQ29vcmRpbmF0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHN0YXRpYyBSZWY8QXJyYXlCdWZmZXI+IHByb2R1Y2VD
bGllbnREYXQKICAgICAgICAgb2JqZWN0LT5zZXRTdHJpbmcoInR5cGUiX3MsICJ3ZWJhdXRobi5n
ZXQiX3MpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgb2JqZWN0LT5zZXRTdHJpbmcoImNo
YWxsZW5nZSJfcywgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY2hhbGxlbmdlLmRhdGEoKSwgY2hh
bGxlbmdlLmxlbmd0aCgpKSk7CisgICAgb2JqZWN0LT5zZXRTdHJpbmcoImNoYWxsZW5nZSJfcywg
YmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY2hhbGxlbmdlLmJ5dGVzKCkpKTsKICAgICBvYmplY3Qt
PnNldFN0cmluZygib3JpZ2luIl9zLCBvcmlnaW4udG9SYXdTdHJpbmcoKSk7CiAKICAgICBhdXRv
IHV0ZjhKU09OU3RyaW5nID0gb2JqZWN0LT50b0pTT05TdHJpbmcoKS51dGY4KCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRpY2F0b3JSZXNwb25zZURhdGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRp
Y2F0b3JSZXNwb25zZURhdGEuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yUmVzcG9uc2VEYXRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU5LDcgKzU5LDcgQEAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHN0YXRpYyB2b2lk
IGVuY29kZUFycmF5QnVmZmVyKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEFycmF5QnVmZmVyJiBi
dWZmZXIpCiB7CiAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYnVmZmVyLmJ5
dGVMZW5ndGgoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RhdGljX2Nh
c3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZlci5kYXRhKCkpLCBidWZmZXIuYnl0ZUxlbmd0aCgpLCAx
KTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShidWZmZXIuYnl0ZXMoKSwgMSk7
CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CkBAIC03NSw3ICs3NSw3IEBAIFJlZlB0cjxB
cnJheUJ1ZmZlcj4gZGVjb2RlQXJyYXlCdWZmZXIoRGUKICAgICBhdXRvIGJ1ZmZlciA9IEFycmF5
QnVmZmVyOjp0cnlDcmVhdGUobGVuZ3RoLnZhbHVlKCksIHNpemVvZih1aW50OF90KSk7CiAgICAg
aWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGVGaXhlZExlbmd0aERhdGEoc3RhdGljX2Nhc3Q8dWludDhfdCo+KGJ1ZmZlci0+ZGF0YSgp
KSwgbGVuZ3RoLnZhbHVlKCksIDEpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0
aERhdGEoYnVmZmVyLT53cml0YWJsZUJ5dGVzKCksIDEpKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICByZXR1cm4gYnVmZmVyOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWwuY3BwCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRl
bnRpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIEF1dGhlbnRpY2F0aW9u
RXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgUHUKIH0KIAogUHVibGljS2V5Q3JlZGVudGlhbDo6UHVi
bGljS2V5Q3JlZGVudGlhbChSZWY8QXV0aGVudGljYXRvclJlc3BvbnNlPiYmIHJlc3BvbnNlKQot
ICAgIDogQmFzaWNDcmVkZW50aWFsKGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKHJlc3BvbnNlLT5y
YXdJZCgpLT5kYXRhKCksIHJlc3BvbnNlLT5yYXdJZCgpLT5ieXRlTGVuZ3RoKCkpLCBUeXBlOjpQ
dWJsaWNLZXksIERpc2NvdmVyeTo6UmVtb3RlKQorICAgIDogQmFzaWNDcmVkZW50aWFsKGJhc2U2
NFVSTEVuY29kZVRvU3RyaW5nKHJlc3BvbnNlLT5yYXdJZCgpLT5ieXRlcygpKSwgVHlwZTo6UHVi
bGljS2V5LCBEaXNjb3Zlcnk6OlJlbW90ZSkKICAgICAsIG1fcmVzcG9uc2UoV1RGTW92ZShyZXNw
b25zZSkpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1Ymxp
Y0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMu
aAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9Q
dWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0
MSw4ICsxNDEsOCBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBQdWJsaWNLZXlDcmVk
ZW50aWFsQ3JlYXRpb25PcHRpb25zOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsK
ICAgICBlbmNvZGVyIDw8IHJwLmlkIDw8IHJwLm5hbWUgPDwgcnAuaWNvbjsKLSAgICBlbmNvZGVy
IDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih1c2VyLmlkLmxlbmd0aCgpKTsKLSAgICBlbmNvZGVy
LmVuY29kZUZpeGVkTGVuZ3RoRGF0YSh1c2VyLmlkLmRhdGEoKSwgdXNlci5pZC5sZW5ndGgoKSwg
MSk7CisgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odXNlci5pZC5ieXRlcygp
LnNpemUoKSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEodXNlci5pZC5ieXRl
cygpLCAxKTsKICAgICBlbmNvZGVyIDw8IHVzZXIuZGlzcGxheU5hbWUgPDwgdXNlci5uYW1lIDw8
IHVzZXIuaWNvbiA8PCBwdWJLZXlDcmVkUGFyYW1zIDw8IHRpbWVvdXQgPDwgZXhjbHVkZUNyZWRl
bnRpYWxzIDw8IGF1dGhlbnRpY2F0b3JTZWxlY3Rpb24gPDwgYXR0ZXN0YXRpb24gPDwgZXh0ZW5z
aW9uczsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNL
ZXlDcmVkZW50aWFsRGVzY3JpcHRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVk
ZW50aWFsRGVzY3JpcHRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw4ICs0Nyw4IEBAIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yOjpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IHR5cGU7Ci0g
ICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaWQubGVuZ3RoKCkpOwotICAgIGVu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGlkLmRhdGEoKSwgaWQubGVuZ3RoKCksIDEpOwor
ICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGlkLmJ5dGVzKCkuc2l6ZSgpKTsK
KyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShpZC5ieXRlcygpLCAxKTsKICAgICBl
bmNvZGVyIDw8IHRyYW5zcG9ydHM7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0
SGFuZHNoYWtlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsMTkgKzk3LDIwIEBAIHN0YXRpYyBT
dHJpbmcgZ2VuZXJhdGVTZWNXZWJTb2NrZXRLZXkoKQogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
bm9uY2VTaXplID0gMTY7CiAgICAgdW5zaWduZWQgY2hhciBrZXlbbm9uY2VTaXplXTsKICAgICBj
cnlwdG9ncmFwaGljYWxseVJhbmRvbVZhbHVlcyhrZXksIG5vbmNlU2l6ZSk7Ci0gICAgcmV0dXJu
IGJhc2U2NEVuY29kZVRvU3RyaW5nKGtleSwgbm9uY2VTaXplKTsKKyAgICByZXR1cm4gYmFzZTY0
RW5jb2RlVG9TdHJpbmcoa2V5KTsKIH0KIAogU3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Z2V0
RXhwZWN0ZWRXZWJTb2NrZXRBY2NlcHQoY29uc3QgU3RyaW5nJiBzZWNXZWJTb2NrZXRLZXkpCiB7
CiAgICAgY29uc3RleHByIHVpbnQ4X3Qgd2ViU29ja2V0S2V5R1VJRFtdID0gIjI1OEVBRkE1LUU5
MTQtNDdEQS05NUNBLUM1QUIwREM4NUIxMSI7CisKICAgICBTSEExIHNoYTE7Ci0gICAgQ1N0cmlu
ZyBrZXlEYXRhID0gc2VjV2ViU29ja2V0S2V5LmFzY2lpKCk7Ci0gICAgc2hhMS5hZGRCeXRlcyhr
ZXlEYXRhLmRhdGFBc1VJbnQ4UHRyKCksIGtleURhdGEubGVuZ3RoKCkpOwotICAgIHNoYTEuYWRk
Qnl0ZXMod2ViU29ja2V0S2V5R1VJRCwgc3RkOjpzaXplKHdlYlNvY2tldEtleUdVSUQpIC0gMSk7
CisgICAgc2hhMS5hZGRCeXRlcyhzZWNXZWJTb2NrZXRLZXkuYXNjaWkoKS5ieXRlcygpKTsKKyAg
ICBzaGExLmFkZEJ5dGVzKHdlYlNvY2tldEtleUdVSUQpOworCiAgICAgU0hBMTo6RGlnZXN0IGhh
c2g7CiAgICAgc2hhMS5jb21wdXRlSGFzaChoYXNoKTsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2Rl
VG9TdHJpbmcoaGFzaC5kYXRhKCksIFNIQTE6Omhhc2hTaXplKTsKKyAgICByZXR1cm4gYmFzZTY0
RW5jb2RlVG9TdHJpbmcoaGFzaCk7CiB9CiAKIFdlYlNvY2tldEhhbmRzaGFrZTo6V2ViU29ja2V0
SGFuZHNoYWtlKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHByb3RvY29sLCBjb25zdCBT
dHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBjbGllbnRPcmlnaW4sIGJvb2wgYWxsb3dD
b29raWVzKQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2oveGNzaGFyZWRk
YXRhL3hjc2NoZW1lcy9XZWJDb3JlLnhjc2NoZW1lCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvV2ViQ29yZS54Y3Nj
aGVtZQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2oveGNzaGFyZWRkYXRhL3hjc2NoZW1lcy9XZWJDb3JlLnhjc2NoZW1lCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw3ICszOSw5IEBACiAgICAgICBpZ25vcmVzUGVyc2lzdGVudFN0YXRlT25MYXVuY2gg
PSAiTk8iCiAgICAgICBkZWJ1Z0RvY3VtZW50VmVyc2lvbmluZyA9ICJZRVMiCiAgICAgICBkZWJ1
Z1NlcnZpY2VFeHRlbnNpb24gPSAiaW50ZXJuYWwiCi0gICAgICBhbGxvd0xvY2F0aW9uU2ltdWxh
dGlvbiA9ICJZRVMiPgorICAgICAgZW5hYmxlR1BVRnJhbWVDYXB0dXJlTW9kZSA9ICIzIgorICAg
ICAgYWxsb3dMb2NhdGlvblNpbXVsYXRpb24gPSAiWUVTIgorICAgICAgR1BVUHJvZmlsZXJFbmFi
bGVkID0gIk5vIj4KICAgIDwvTGF1bmNoQWN0aW9uPgogICAgPFByb2ZpbGVBY3Rpb24KICAgICAg
IGJ1aWxkQ29uZmlndXJhdGlvbiA9ICJSZWxlYXNlIgpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvQnVmZmVyU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvQnVmZmVyU291cmNlLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0J1ZmZlclNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1
NywxMyBAQCBwdWJsaWM6CiAgICAgICAgIH0sIG1fdmFyaWFudCk7CiAgICAgfQogCisgICAgU3Bh
bjxjb25zdCB1aW50OF90PiBieXRlcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RG
Ojp2aXNpdChbXShhdXRvJiBidWZmZXIpIC0+IFNwYW48Y29uc3QgdWludDhfdD4geworICAgICAg
ICAgICAgcmV0dXJuIGJ1ZmZlciA/IFNwYW48Y29uc3QgdWludDhfdD4geyBzdGF0aWNfY2FzdDxj
b25zdCB1aW50OF90Kj4oYnVmZmVyLT5kYXRhKCkpLCBidWZmZXItPmJ5dGVMZW5ndGgoKSB9IDog
U3Bhbjxjb25zdCB1aW50OF90PiB7IH07CisgICAgICAgIH0sIG1fdmFyaWFudCk7CisgICAgfQor
CiBwcml2YXRlOgogICAgIFZhcmlhbnRUeXBlIG1fdmFyaWFudDsKIH07CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NCwxNSArMTY0LDE1IEBAIHZvaWQgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjplbmNvZGUoRW5jb2QKIAogICAgIGlmIChoYXNBcnJheSkgewog
ICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihtX2FycmF5QnVmZmVyQ29u
dGVudHNBcnJheS0+c2l6ZSgpKTsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvICZhcnJheUJ1ZmZl
ckNvbnRlbnRzIDogKm1fYXJyYXlCdWZmZXJDb250ZW50c0FycmF5KSB7CisgICAgICAgIGZvciAo
Y29uc3QgYXV0byYgYXJyYXlCdWZmZXJDb250ZW50cyA6ICptX2FycmF5QnVmZmVyQ29udGVudHNB
cnJheSkgewogICAgICAgICAgICAgZW5jb2RlciA8PCBhcnJheUJ1ZmZlckNvbnRlbnRzLnNpemVJ
bkJ5dGVzKCk7Ci0gICAgICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShzdGF0
aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYXJyYXlCdWZmZXJDb250ZW50cy5kYXRhKCkpLCBhcnJh
eUJ1ZmZlckNvbnRlbnRzLnNpemVJbkJ5dGVzKCksIDEpOworICAgICAgICAgICAgZW5jb2Rlci5l
bmNvZGVGaXhlZExlbmd0aERhdGEoYXJyYXlCdWZmZXJDb250ZW50cy5ieXRlcygpLCAxKTsKICAg
ICAgICAgfQogICAgIH0KIAogI2lmIEVOQUJMRShXRUJfUlRDKQogICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KG1fZGV0YWNoZWRSVENEYXRhQ2hhbm5lbHMuc2l6ZSgpKTsKLSAg
ICBmb3IgKGNvbnN0IGF1dG8gJmNoYW5uZWwgOiBtX2RldGFjaGVkUlRDRGF0YUNoYW5uZWxzKQor
ICAgIGZvciAoY29uc3QgYXV0byYgY2hhbm5lbCA6IG1fZGV0YWNoZWRSVENEYXRhQ2hhbm5lbHMp
CiAgICAgICAgIGVuY29kZXIgPDwgKmNoYW5uZWw7CiAjZW5kaWYKIH0KQEAgLTIwNiw3ICsyMDYs
NyBAQCBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkCiAgICAgICAgICAg
ICBhdXRvIGJ1ZmZlciA9IEdpZ2FjYWdlOjp0cnlNYWxsb2MoR2lnYWNhZ2U6OlByaW1pdGl2ZSwg
YnVmZmVyU2l6ZSk7CiAgICAgICAgICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0
aERhdGEoc3RhdGljX2Nhc3Q8dWludDhfdCo+KGJ1ZmZlciksIGJ1ZmZlclNpemUsIDEpKSB7Cisg
ICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBzdGF0
aWNfY2FzdDxzdGQ6OmJ5dGUqPihidWZmZXIpLCBidWZmZXJTaXplIH0sIDEpKSB7CiAgICAgICAg
ICAgICAgICAgR2lnYWNhZ2U6OmZyZWUoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgYnVmZmVyKTsKICAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL1NlcmlhbGl6ZWRORkEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL1NlcmlhbGl6ZWRORkEuY3BwCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9TZXJp
YWxpemVkTkZBLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3IEBAIFNlcmlhbGl6
ZWRORkE6OlNlcmlhbGl6ZWRORkEoRmlsZVN5c3RlbToKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBj
b25zdCBUKiBTZXJpYWxpemVkTkZBOjpwb2ludGVyQXRPZmZzZXRJbkZpbGUoc2l6ZV90IG9mZnNl
dCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4oc3RhdGlj
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1fZmlsZS5kYXRhKCkpICsgb2Zmc2V0KTsKKyAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4obV9maWxlLmRhdGEoKS5kYXRhKCkgKyBvZmZz
ZXQpOwogfQogCiBhdXRvIFNlcmlhbGl6ZWRORkE6Om5vZGVzKCkgY29uc3QgLT4gY29uc3QgUmFu
Z2U8SW1tdXRhYmxlTkZBTm9kZT4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5
cHRvS2V5RUNNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMv
Q3J5cHRvS2V5RUNNYWMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDEwICsx
OTcsMTAgQEAgYm9vbCBDcnlwdG9LZXlFQzo6cGxhdGZvcm1BZGRGaWVsZEVsZW1lbgogCiAgICAg
aWYgKFVOTElLRUxZKChzaXplICE9IHB1YmxpY0tleVNpemUpICYmIChzaXplICE9IHByaXZhdGVL
ZXlTaXplKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBqd2sueCA9IGJhc2U2NFVSTEVu
Y29kZVRvU3RyaW5nKHJlc3VsdC5kYXRhKCkgKyAxLCBrZXlTaXplSW5CeXRlcyk7Ci0gICAgandr
LnkgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhyZXN1bHQuZGF0YSgpICsga2V5U2l6ZUluQnl0
ZXMgKyAxLCBrZXlTaXplSW5CeXRlcyk7CisgICAgandrLnggPSBiYXNlNjRVUkxFbmNvZGVUb1N0
cmluZyhTcGFuIHsgcmVzdWx0IH0uc3Vic3BhbigxLCBrZXlTaXplSW5CeXRlcykpOworICAgIGp3
ay55ID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoU3BhbiB7IHJlc3VsdCB9LnN1YnNwYW4oMSAr
IGtleVNpemVJbkJ5dGVzLCBrZXlTaXplSW5CeXRlcykpOwogICAgIGlmIChzaXplID4gcHVibGlj
S2V5U2l6ZSkKLSAgICAgICAgandrLmQgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhyZXN1bHQu
ZGF0YSgpICsgcHVibGljS2V5U2l6ZSwga2V5U2l6ZUluQnl0ZXMpOworICAgICAgICBqd2suZCA9
IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKFNwYW4geyByZXN1bHQgfS5zdWJzcGFuKHB1YmxpY0tl
eVNpemUsIGtleVNpemVJbkJ5dGVzKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvU2VyaWFsaXplZENyeXB0b0tleVdyYXBNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9TZXJpYWxpemVkQ3J5cHRvS2V5
V3JhcE1hYy5tbQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL21h
Yy9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzUsNiAr
MzUsNyBAQAogI2ltcG9ydCA8d3RmL0NyeXB0b2dyYXBoaWNVdGlsaXRpZXMuaD4KICNpbXBvcnQg
PHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1w
b3J0IDx3dGYvY2YvU3BhbkNGLmg+CiAjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4K
ICNpbXBvcnQgPHd0Zi9zcGkvY29jb2EvU2VjdXJpdHlTUEkuaD4KICNpbXBvcnQgPHd0Zi90ZXh0
L0Jhc2U2NC5oPgpAQCAtMTY3LDcgKzE2OCw3IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rv
cjx1aW50OF90Pj4gZmkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9CiAgICAg
UmV0YWluUHRyPENGRGF0YVJlZj4ga2V5RGF0YSA9IGFkb3B0Q0Yoa2V5RGF0YVJlZik7Ci0gICAg
cmV0dXJuIGJhc2U2NERlY29kZShDRkRhdGFHZXRCeXRlUHRyKGtleURhdGEuZ2V0KCkpLCBDRkRh
dGFHZXRMZW5ndGgoa2V5RGF0YS5nZXQoKSkpOworICAgIHJldHVybiBiYXNlNjREZWNvZGUoYXNC
eXRlcyhrZXlEYXRhLmdldCgpKSk7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+
PiBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTYwNiw3ICsxNjA2LDggQEAgRXhjZXB0aW9uT3I8dm9pZD4gTm9kZTo6c2V0VGV4dENv
bnRlbnQoYwogc3RhdGljIFNIQTE6OkRpZ2VzdCBoYXNoUG9pbnRlcihjb25zdCB2b2lkKiBwb2lu
dGVyKQogewogICAgIFNIQTEgc2hhMTsKLSAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KCZwb2ludGVyKSwgc2l6ZW9mKHBvaW50ZXIpKTsKKyAgICBzaGEx
LmFkZEJ5dGVzKFNwYW4geyAmcG9pbnRlciwgMSB9KTsKKwogICAgIFNIQTE6OkRpZ2VzdCBkaWdl
c3Q7CiAgICAgc2hhMS5jb21wdXRlSGFzaChkaWdlc3QpOwogICAgIHJldHVybiBkaWdlc3Q7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMzOCw3ICszMzgsNyBAQCB2b2lkIEZpbGVSZWFkZXJMb2Fk
ZXI6OmNvbnZlcnRUb0RhdGFVUkwoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX3N0
cmluZ1Jlc3VsdCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgbV9kYXRhVHlwZS5pc0VtcHR5KCkgPyAi
YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiA6IG1fZGF0YVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2
NEVuY29kZWQobV9yYXdEYXRhLT5kYXRhKCksIG1fYnl0ZXNMb2FkZWQpKTsKKyAgICBtX3N0cmlu
Z1Jlc3VsdCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgbV9kYXRhVHlwZS5pc0VtcHR5KCkgPyAiYXBw
bGljYXRpb24vb2N0ZXQtc3RyZWFtIiA6IG1fZGF0YVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2NEVu
Y29kZWQobV9yYXdEYXRhLT5ieXRlcygpKSk7CiB9CiAKIGJvb2wgRmlsZVJlYWRlckxvYWRlcjo6
aXNDb21wbGV0ZWQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3Jr
U2VuZFF1ZXVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL05ldHdv
cmtTZW5kUXVldWUuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxl
YXBpL05ldHdvcmtTZW5kUXVldWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MywxMSArNTMsMTAg
QEAgdm9pZCBOZXR3b3JrU2VuZFF1ZXVlOjplbnF1ZXVlKENTdHJpbmcmJgogdm9pZCBOZXR3b3Jr
U2VuZFF1ZXVlOjplbnF1ZXVlKGNvbnN0IEpTQzo6QXJyYXlCdWZmZXImIGJpbmFyeURhdGEsIHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCiB7CiAgICAgaWYgKG1fcXVl
dWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGF1dG8qIGRhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCB1
aW50OF90Kj4oYmluYXJ5RGF0YS5kYXRhKCkpOwotICAgICAgICBtX3dyaXRlUmF3RGF0YShTcGFu
IHsgZGF0YSArIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGggfSk7CisgICAgICAgIG1fd3JpdGVSYXdE
YXRhKGJpbmFyeURhdGEuYnl0ZXMoKS5zdWJzcGFuKGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtX3F1ZXVlLmFwcGVuZChTaGFyZWRCdWZmZXI6
OmNyZWF0ZShzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYmluYXJ5RGF0YS5kYXRhKCkpICsg
Ynl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkpOworICAgIG1fcXVldWUuYXBwZW5kKFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKGJpbmFyeURhdGEuYnl0ZXMoKS5zdWJzcGFuKGJ5dGVPZmZzZXQsIGJ5dGVMZW5n
dGgpKSk7CiB9CiAKIHZvaWQgTmV0d29ya1NlbmRRdWV1ZTo6ZW5xdWV1ZShXZWJDb3JlOjpCbG9i
JiBibG9iKQpAQCAtOTMsNyArOTIsOSBAQCB2b2lkIE5ldHdvcmtTZW5kUXVldWU6OnByb2Nlc3NN
ZXNzYWdlcygpCiAgICAgICAgIHN3aXRjaE9uKG1fcXVldWUuZmlyc3QoKSwgW3RoaXNdKGNvbnN0
IENTdHJpbmcmIHV0ZjgpIHsKICAgICAgICAgICAgIG1fd3JpdGVTdHJpbmcodXRmOCk7CiAgICAg
ICAgIH0sIFt0aGlzXShSZWY8U2hhcmVkQnVmZmVyPiYgZGF0YSkgewotICAgICAgICAgICAgZGF0
YS0+Zm9yRWFjaFNlZ21lbnQobV93cml0ZVJhd0RhdGEpOworICAgICAgICAgICAgZGF0YS0+Zm9y
RWFjaFNlZ21lbnQoW3RoaXNdKGF1dG8mIHNwYW4pIHsKKyAgICAgICAgICAgICAgICBtX3dyaXRl
UmF3RGF0YShhc0J5dGVzKHNwYW4pKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICB9LCBbdGhp
cywgJnNob3VsZFN0b3BQcm9jZXNzaW5nXShVbmlxdWVSZWY8QmxvYkxvYWRlcj4mIGxvYWRlcikg
ewogICAgICAgICAgICAgYXV0byBlcnJvckNvZGUgPSBsb2FkZXItPmVycm9yQ29kZSgpOwogICAg
ICAgICAgICAgaWYgKGxvYWRlci0+aXNMb2FkaW5nKCkgfHwgKGVycm9yQ29kZSAmJiBlcnJvckNv
ZGUudmFsdWUoKSA9PSBBYm9ydEVycm9yKSkgewpAQCAtMTAyLDcgKzEwMyw3IEBAIHZvaWQgTmV0
d29ya1NlbmRRdWV1ZTo6cHJvY2Vzc01lc3NhZ2VzKCkKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgaWYgKGNvbnN0IGF1dG8mIHJlc3VsdCA9IGxvYWRlci0+YXJyYXlCdWZmZXJSZXN1bHQo
KSkgewotICAgICAgICAgICAgICAgIG1fd3JpdGVSYXdEYXRhKFNwYW4geyBzdGF0aWNfY2FzdDxj
b25zdCB1aW50OF90Kj4ocmVzdWx0LT5kYXRhKCkpLCByZXN1bHQtPmJ5dGVMZW5ndGgoKSB9KTsK
KyAgICAgICAgICAgICAgICBtX3dyaXRlUmF3RGF0YShyZXN1bHQtPmJ5dGVzKCkpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEFTU0VSVChlcnJv
ckNvZGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmgJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTmV0d29ya1NlbmRR
dWV1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIGNsYXNzIFNoYXJlZEJ1ZmZl
cjsKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIE5ldHdvcmtTZW5kUXVldWUgOiBwdWJsaWMgQ29udGV4
dERlc3RydWN0aW9uT2JzZXJ2ZXIgewogcHVibGljOgogICAgIHVzaW5nIFdyaXRlU3RyaW5nID0g
RnVuY3Rpb248dm9pZChjb25zdCBDU3RyaW5nJiB1dGY4KT47Ci0gICAgdXNpbmcgV3JpdGVSYXdE
YXRhID0gRnVuY3Rpb248dm9pZChjb25zdCBTcGFuPGNvbnN0IHVpbnQ4X3Q+Jik+OworICAgIHVz
aW5nIFdyaXRlUmF3RGF0YSA9IEZ1bmN0aW9uPHZvaWQoY29uc3QgU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+Jik+OwogICAgIGVudW0gY2xhc3MgQ29udGludWUgeyBObywgWWVzIH07CiAgICAgdXNpbmcg
UHJvY2Vzc0Vycm9yID0gRnVuY3Rpb248Q29udGludWUoRXhjZXB0aW9uQ29kZSk+OwogICAgIE5l
dHdvcmtTZW5kUXVldWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdyaXRlU3RyaW5nJiYsIFdy
aXRlUmF3RGF0YSYmLCBQcm9jZXNzRXJyb3ImJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM5NCwyOCArMzk0LDIzIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IERPTVBhdGNoU3VwcG9ydDo6aW5u
ZXIKICAgICByZXR1cm4geyB9OwogfQogCi1zdGF0aWMgdm9pZCBhZGRTdHJpbmdUb1NIQTEoU0hB
MSYgc2hhMSwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgQ1N0cmluZyBjU3RyaW5nID0g
c3RyaW5nLnV0ZjgoKTsKLSAgICBzaGExLmFkZEJ5dGVzKGNTdHJpbmcuZGF0YUFzVUludDhQdHIo
KSwgY1N0cmluZy5sZW5ndGgoKSk7Ci19Ci0KIHN0ZDo6dW5pcXVlX3B0cjxET01QYXRjaFN1cHBv
cnQ6OkRpZ2VzdD4gRE9NUGF0Y2hTdXBwb3J0OjpjcmVhdGVEaWdlc3QoTm9kZSYgbm9kZSwgVW51
c2VkTm9kZXNNYXAqIHVudXNlZE5vZGVzTWFwKQogewogICAgIGF1dG8gZGlnZXN0ID0gbWFrZVVu
aXF1ZTxEaWdlc3Q+KCk7CiAgICAgZGlnZXN0LT5ub2RlID0gJm5vZGU7CisKICAgICBTSEExIHNo
YTE7CiAKICAgICBhdXRvIG5vZGVUeXBlID0gbm9kZS5ub2RlVHlwZSgpOwotICAgIHNoYTEuYWRk
Qnl0ZXMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oJm5vZGVUeXBlKSwgc2l6ZW9m
KG5vZGVUeXBlKSk7Ci0gICAgYWRkU3RyaW5nVG9TSEExKHNoYTEsIG5vZGUubm9kZU5hbWUoKSk7
Ci0gICAgYWRkU3RyaW5nVG9TSEExKHNoYTEsIG5vZGUubm9kZVZhbHVlKCkpOworICAgIHNoYTEu
YWRkQnl0ZXMoU3BhbiB7ICZub2RlVHlwZSwgMSB9KTsKKyAgICBzaGExLmFkZEJ5dGVzKG5vZGUu
bm9kZU5hbWUoKS51dGY4KCkuYnl0ZXMoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhub2RlLm5vZGVW
YWx1ZSgpLnV0ZjgoKS5ieXRlcygpKTsKIAogICAgIGlmIChub2RlLm5vZGVUeXBlKCkgPT0gTm9k
ZTo6RUxFTUVOVF9OT0RFKSB7CiAgICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS5maXJzdENoaWxk
KCk7CiAgICAgICAgIHdoaWxlIChjaGlsZCkgewogICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PERpZ2VzdD4gY2hpbGRJbmZvID0gY3JlYXRlRGlnZXN0KCpjaGlsZCwgdW51c2VkTm9kZXNNYXAp
OwotICAgICAgICAgICAgYWRkU3RyaW5nVG9TSEExKHNoYTEsIGNoaWxkSW5mby0+c2hhMSk7Cisg
ICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGNoaWxkSW5mby0+c2hhMS51dGY4KCkuYnl0ZXMoKSk7
CiAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwogICAgICAgICAgICAg
ZGlnZXN0LT5jaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShjaGlsZEluZm8pKTsKICAgICAgICAgfQpA
QCAtNDI0LDE5ICs0MTksMTkgQEAgc3RkOjp1bmlxdWVfcHRyPERPTVBhdGNoU3VwcG9ydDo6RGln
ZXN0PgogICAgICAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGVzV2l0aG91dFVwZGF0ZSgpKSB7
CiAgICAgICAgICAgICBTSEExIGF0dHJzU0hBMTsKICAgICAgICAgICAgIGZvciAoYXV0byYgYXR0
cmlidXRlIDogZWxlbWVudC5hdHRyaWJ1dGVzSXRlcmF0b3IoKSkgewotICAgICAgICAgICAgICAg
IGFkZFN0cmluZ1RvU0hBMShhdHRyc1NIQTEsIGF0dHJpYnV0ZS5uYW1lKCkudG9TdHJpbmcoKSk7
Ci0gICAgICAgICAgICAgICAgYWRkU3RyaW5nVG9TSEExKGF0dHJzU0hBMSwgYXR0cmlidXRlLnZh
bHVlKCkpOworICAgICAgICAgICAgICAgIGF0dHJzU0hBMS5hZGRCeXRlcyhhdHRyaWJ1dGUubmFt
ZSgpLnRvU3RyaW5nKCkudXRmOCgpLmJ5dGVzKCkpOworICAgICAgICAgICAgICAgIGF0dHJzU0hB
MS5hZGRCeXRlcyhhdHRyaWJ1dGUudmFsdWUoKS5zdHJpbmcoKS51dGY4KCkuYnl0ZXMoKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBTSEExOjpEaWdlc3QgYXR0cnNIYXNoOwogICAgICAg
ICAgICAgYXR0cnNTSEExLmNvbXB1dGVIYXNoKGF0dHJzSGFzaCk7Ci0gICAgICAgICAgICBkaWdl
c3QtPmF0dHJzU0hBMSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGF0dHJzSGFzaC5kYXRhKCksIDEw
KTsKLSAgICAgICAgICAgIGFkZFN0cmluZ1RvU0hBMShzaGExLCBkaWdlc3QtPmF0dHJzU0hBMSk7
CisgICAgICAgICAgICBkaWdlc3QtPmF0dHJzU0hBMSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGF0
dHJzSGFzaCk7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGRpZ2VzdC0+YXR0cnNTSEExLnV0
ZjgoKS5ieXRlcygpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIFNIQTE6OkRpZ2VzdCBoYXNo
OwogICAgIHNoYTEuY29tcHV0ZUhhc2goaGFzaCk7Ci0gICAgZGlnZXN0LT5zaGExID0gYmFzZTY0
RW5jb2RlVG9TdHJpbmcoaGFzaC5kYXRhKCksIDEwKTsKKyAgICBkaWdlc3QtPnNoYTEgPSBiYXNl
NjRFbmNvZGVUb1N0cmluZyhoYXNoKTsKICAgICBpZiAodW51c2VkTm9kZXNNYXApCiAgICAgICAg
IHVudXNlZE5vZGVzTWFwLT5hZGQoZGlnZXN0LT5zaGExLCBkaWdlc3QuZ2V0KCkpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0
LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kSG9zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwMiw3ICs2MDIsNyBAQCBi
b29sIEluc3BlY3RvckZyb250ZW5kSG9zdDo6c2hvd0NlcnRpZmljCiAgICAgaWYgKCFkYXRhKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRl
Y29kZXIoZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXplKCkpOworICAgIFdURjo6UGVyc2lzdGVuY2U6
OkRlY29kZXIgZGVjb2RlciB7ICpkYXRhIH07CiAgICAgc3RkOjpvcHRpb25hbDxDZXJ0aWZpY2F0
ZUluZm8+IGNlcnRpZmljYXRlSW5mbzsKICAgICBkZWNvZGVyID4+IGNlcnRpZmljYXRlSW5mbzsK
ICAgICBpZiAoIWNlcnRpZmljYXRlSW5mbykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBAIHVuc2lnbmVkIE5ldHdvcmtSZXNvdXJjZXNEYXRh
OjpSZXNvdXJjZUQKICAgICAgICAgbV9jb250ZW50ID0gbV9kZWNvZGVyLT5kZWNvZGVBbmRGbHVz
aChtX2RhdGFCdWZmZXItPmRhdGEoKSwgZGF0YUxlbmd0aCk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgbV9iYXNlNjRFbmNvZGVkID0gdHJ1ZTsKLSAgICAgICAgbV9jb250ZW50ID0gYmFzZTY0RW5j
b2RlVG9TdHJpbmcobV9kYXRhQnVmZmVyLT5kYXRhKCksIGRhdGFMZW5ndGgpOworICAgICAgICBt
X2NvbnRlbnQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhtX2RhdGFCdWZmZXItPmJ5dGVzKCkpOwog
ICAgIH0KIAogICAgIG1fZGF0YUJ1ZmZlciA9IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JET01BZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OTgsNyArMTY5OCw3IEBAIHN0YXRp
YyBTdHJpbmcgY29tcHV0ZUNvbnRlbnRTZWN1cml0eVBvbGkKICAgICBhdXRvIGNyeXB0b0RpZ2Vz
dCA9IFBBTDo6Q3J5cHRvRGlnZXN0OjpjcmVhdGUoUEFMOjpDcnlwdG9EaWdlc3Q6OkFsZ29yaXRo
bTo6U0hBXzI1Nik7CiAgICAgY3J5cHRvRGlnZXN0LT5hZGRCeXRlcyhjb250ZW50LmRhdGEoKSwg
Y29udGVudC5zaXplKCkpOwogICAgIGF1dG8gZGlnZXN0ID0gY3J5cHRvRGlnZXN0LT5jb21wdXRl
SGFzaCgpOwotICAgIHJldHVybiBtYWtlU3RyaW5nKCJzaGEyNTYtIiwgYmFzZTY0RW5jb2RlZChk
aWdlc3QuZGF0YSgpLCBkaWdlc3Quc2l6ZSgpKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoInNo
YTI1Ni0iLCBiYXNlNjRFbmNvZGVkKGRpZ2VzdCkpOwogfQogCiBSZWY8UHJvdG9jb2w6OkRPTTo6
Tm9kZT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZShOb2RlKiBub2RlLCBp
bnQgZGVwdGgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ck5ldHdvcmtBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE3NSw3ICsxNzUsNyBAQCBSZWY8UHJvdG9jb2w6Ok5ldHdvcms6
OldlYlNvY2tldEZyYW1lPiBiCiAgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2Nr
ZXRGcmFtZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldE9wY29kZShmcmFtZS5vcENvZGUpCiAgICAg
ICAgIC5zZXRNYXNrKGZyYW1lLm1hc2tlZCkKLSAgICAgICAgLnNldFBheWxvYWREYXRhKGZyYW1l
Lm9wQ29kZSA9PSAxID8gU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhmcmFtZS5w
YXlsb2FkLCBmcmFtZS5wYXlsb2FkTGVuZ3RoKSA6IGJhc2U2NEVuY29kZVRvU3RyaW5nKGZyYW1l
LnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgpKQorICAgICAgICAuc2V0UGF5bG9hZERhdGEo
ZnJhbWUub3BDb2RlID09IDEgPyBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKGZy
YW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgpIDogYmFzZTY0RW5jb2RlVG9TdHJpbmco
U3BhbiB7IGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGggfSkpCiAgICAgICAgIC5z
ZXRQYXlsb2FkTGVuZ3RoKGZyYW1lLnBheWxvYWRMZW5ndGgpCiAgICAgICAgIC5yZWxlYXNlKCk7
CiB9CkBAIC01ODksNyArNTg5LDcgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRpZFJl
Y2VpdmVEYQogICAgICAgICAvLyBPZnRlbiB0aGUgZGF0YSBpcyB0ZXh0IGFuZCB3ZSB3b3VsZCBo
YXZlIGEgZGVjb2RlciwgYnV0IGZvciBub24tdGV4dCB3ZSB3b24ndCBoYXZlIGEgZGVjb2Rlci4K
ICAgICAgICAgLy8gU3luYyBYSFJzIG1heSBub3QgaGF2ZSBhIGNhY2hlZCByZXNvdXJjZSwgd2hp
bGUgbm9uLXN5bmMgWEhScyB1c3VhbGx5IHRyYW5zZmVyIGRhdGEgb3ZlciBvbiBjb21wbGV0aW9u
LgogICAgICAgICBpZiAobV9sb2FkaW5nWEhSU3luY2hyb25vdXNseSAmJiByZXNvdXJjZURhdGEg
JiYgIXJlc291cmNlRGF0YS0+aGFzQnVmZmVyZWREYXRhKCkgJiYgIXJlc291cmNlRGF0YS0+Y2Fj
aGVkUmVzb3VyY2UoKSkKLSAgICAgICAgICAgIG1fcmVzb3VyY2VzRGF0YS0+c2V0UmVzb3VyY2VD
b250ZW50KHJlcXVlc3RJZCwgYmFzZTY0RW5jb2RlVG9TdHJpbmcoZGF0YSwgZGF0YUxlbmd0aCks
IHRydWUpOworICAgICAgICAgICAgbV9yZXNvdXJjZXNEYXRhLT5zZXRSZXNvdXJjZUNvbnRlbnQo
cmVxdWVzdElkLCBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgZGF0YSwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGRhdGFMZW5ndGgpIH0pLCB0cnVlKTsKICAgICB9CiAKICAgICBtX2Zyb250ZW5k
RGlzcGF0Y2hlci0+ZGF0YVJlY2VpdmVkKHJlcXVlc3RJZCwgdGltZXN0YW1wKCksIGRhdGFMZW5n
dGgsIGVuY29kZWREYXRhTGVuZ3RoKTsKQEAgLTEwMDUsNyArMTAwNSw3IEBAIFByb3RvY29sOjpF
cnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG8KIAogICAgIFdURjo6UGVyc2lzdGVuY2U6OkVu
Y29kZXIgZW5jb2RlcjsKICAgICBXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxXZWJDb3JlOjpDZXJ0
aWZpY2F0ZUluZm8+OjplbmNvZGUoZW5jb2RlciwgY2VydGlmaWNhdGUudmFsdWUoKSk7Ci0gICAg
cmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVm
ZmVyU2l6ZSgpKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoZW5jb2Rlci5idWZm
ZXIoKSk7CiB9CiAKIFdlYlNvY2tldCogSW5zcGVjdG9yTmV0d29ya0FnZW50Ojp3ZWJTb2NrZXRG
b3JSZXF1ZXN0SWQoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYgcmVxdWVzdElk
KQpAQCAtMTQxMCw3ICsxNDEwLDcgQEAgYm9vbCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmNhY2hl
ZFJlc291cgogICAgICAgICB9CiAKICAgICAgICAgKmJhc2U2NEVuY29kZWQgPSB0cnVlOwotICAg
ICAgICAqcmVzdWx0ID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoYnVmZmVyLT5kYXRhKCksIGJ1ZmZl
ci0+c2l6ZSgpKTsKKyAgICAgICAgKnJlc3VsdCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGJ1ZmZl
ci0+Ynl0ZXMoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2Vu
dC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsNyBA
QAogCiAjaWYgRU5BQkxFKFdFQl9BUkNISVZFKSAmJiBVU0UoQ0YpCiAjaW5jbHVkZSAiTGVnYWN5
V2ViQXJjaGl2ZS5oIgorI2luY2x1ZGUgPHd0Zi9jZi9TcGFuQ0YuaD4KICNlbmRpZgogCiAKQEAg
LTExMyw3ICsxMTQsNyBAQCBib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6c2hhcmVkQnVmZmVyQ29u
CiBib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGF0YUNvbnRlbnQoY29uc3QgdWludDhfdCogZGF0
YSwgdW5zaWduZWQgc2l6ZSwgY29uc3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmdOYW1lLCBib29sIHdp
dGhCYXNlNjRFbmNvZGUsIFN0cmluZyogcmVzdWx0KQogewogICAgIGlmICh3aXRoQmFzZTY0RW5j
b2RlKSB7Ci0gICAgICAgICpyZXN1bHQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhkYXRhLCBzaXpl
KTsKKyAgICAgICAgKnJlc3VsdCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKFNwYW4geyBkYXRhLCBz
aXplIH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTExMDIsNyArMTEwMyw3
IEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG8KICAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgY3JlYXRlIHdlYiBhcmNoaXZlIGZvciBtYWlu
IGZyYW1lIl9zKTsKIAogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGJ1ZmZlciA9IGFyY2hpdmUt
PnJhd0RhdGFSZXByZXNlbnRhdGlvbigpOwotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmlu
ZyhDRkRhdGFHZXRCeXRlUHRyKGJ1ZmZlci5nZXQoKSksIENGRGF0YUdldExlbmd0aChidWZmZXIu
Z2V0KCkpKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoYXNCeXRlcyhidWZmZXIu
Z2V0KCkpKTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2
ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4MSwxNiArMTgxLDE0IEBAIFJlZjxTaGFyZWRCdWZmZXI+IE1IVE1M
QXJjaGl2ZTo6Z2VuZXJhdGUKICAgICAgICAgbWh0bWxEYXRhLT5hcHBlbmQoYXNjaWlTdHJpbmcu
ZGF0YSgpLCBhc2NpaVN0cmluZy5sZW5ndGgoKSk7CiAKICAgICAgICAgLy8gRklYTUU6IGlkZWFs
bHkgd2Ugd291bGQgZW5jb2RlIHRoZSBjb250ZW50IGFzIGEgc3RyZWFtIHdpdGhvdXQgaGF2aW5n
IHRvIGZldGNoIGl0IGFsbC4KLSAgICAgICAgYXV0byogZGF0YSA9IHJlc291cmNlLmRhdGEtPmRh
dGEoKTsKLSAgICAgICAgc2l6ZV90IGRhdGFMZW5ndGggPSByZXNvdXJjZS5kYXRhLT5zaXplKCk7
CiAgICAgICAgIGlmICghc3RyY21wKGNvbnRlbnRFbmNvZGluZywgcXVvdGVkUHJpbnRhYmxlKSkg
ewotICAgICAgICAgICAgYXV0byBlbmNvZGVkRGF0YSA9IHF1b3RlZFByaW50YWJsZUVuY29kZShk
YXRhLCBkYXRhTGVuZ3RoKTsKKyAgICAgICAgICAgIGF1dG8gZW5jb2RlZERhdGEgPSBxdW90ZWRQ
cmludGFibGVFbmNvZGUocmVzb3VyY2UuZGF0YS0+Ynl0ZXMoKSk7CiAgICAgICAgICAgICBtaHRt
bERhdGEtPmFwcGVuZChlbmNvZGVkRGF0YS5kYXRhKCksIGVuY29kZWREYXRhLnNpemUoKSk7CiAg
ICAgICAgICAgICBtaHRtbERhdGEtPmFwcGVuZCgiXHJcbiIsIDIpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgQVNTRVJUKCFzdHJjbXAoY29udGVudEVuY29kaW5nLCBiYXNlNjQpKTsK
ICAgICAgICAgICAgIC8vIFdlIGFyZSBub3Qgc3BlY2lmeWluZyBpbnNlcnRMRnMgPSB0cnVlIGJl
bG93IGFzIGl0IHdvdWxkIGN1dCB0aGUgbGluZXMgd2l0aCBMRnMgYW5kIE1IVE1MIHJlcXVpcmVz
IENSTEZzLgotICAgICAgICAgICAgYXV0byBlbmNvZGVkRGF0YSA9IGJhc2U2NEVuY29kZVRvVmVj
dG9yKGRhdGEsIGRhdGFMZW5ndGgpOworICAgICAgICAgICAgYXV0byBlbmNvZGVkRGF0YSA9IGJh
c2U2NEVuY29kZVRvVmVjdG9yKHJlc291cmNlLmRhdGEtPmJ5dGVzKCkpOwogICAgICAgICAgICAg
Y29uc3Qgc2l6ZV90IG1heGltdW1MaW5lTGVuZ3RoID0gNzY7CiAgICAgICAgICAgICBzaXplX3Qg
aW5kZXggPSAwOwogICAgICAgICAgICAgc2l6ZV90IGVuY29kZWREYXRhTGVuZ3RoID0gZW5jb2Rl
ZERhdGEuc2l6ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwv
TUhUTUxQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNo
aXZlL21odG1sL01IVE1MUGFyc2VyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTUsNyArMTk1LDcgQEAgUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gTUhUTUxQYXJzZXI6
OnBhcgogICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAgIHN3aXRjaCAobWltZUhlYWRlci5j
b250ZW50VHJhbnNmZXJFbmNvZGluZygpKSB7CiAgICAgY2FzZSBNSU1FSGVhZGVyOjpCYXNlNjQ6
IHsKLSAgICAgICAgYXV0byBkZWNvZGVkRGF0YSA9IGJhc2U2NERlY29kZShjb250ZW50LT5kYXRh
KCksIGNvbnRlbnQtPnNpemUoKSk7CisgICAgICAgIGF1dG8gZGVjb2RlZERhdGEgPSBiYXNlNjRE
ZWNvZGUoY29udGVudC0+Ynl0ZXMoKSk7CiAgICAgICAgIGlmICghZGVjb2RlZERhdGEpIHsKICAg
ICAgICAgICAgIExPR19FUlJPUigiSW52YWxpZCBiYXNlNjQgY29udGVudCBmb3IgTUhUTUwgcGFy
dC4iKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMjA0LDcgKzIwNCw3IEBAIFJl
ZlB0cjxBcmNoaXZlUmVzb3VyY2U+IE1IVE1MUGFyc2VyOjpwYXIKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIGNhc2UgTUlNRUhlYWRlcjo6UXVvdGVkUHJpbnRhYmxlOgotICAgICAgICBkYXRh
ID0gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnRlbnQtPmRhdGEoKSwgY29udGVudC0+c2l6ZSgp
KTsKKyAgICAgICAgZGF0YSA9IHF1b3RlZFByaW50YWJsZURlY29kZShjb250ZW50LT5ieXRlcygp
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNSU1FSGVhZGVyOjpTZXZlbkJpdDoKICAgICBj
YXNlIE1JTUVIZWFkZXI6OkJpbmFyeToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29u
L0ljb25Mb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29u
L0ljb25Mb2FkZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvaWNvbi9JY29uTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBA
IHZvaWQgSWNvbkxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmUKICAgICAgICAgZGF0YSA9
IG51bGxwdHI7CiAKICAgICBjb25zdGV4cHIgdWludDhfdCBwZGZNYWdpY051bWJlcltdID0geyAn
JScsICdQJywgJ0QnLCAnRicgfTsKLSAgICBpZiAoZGF0YSAmJiBkYXRhLT5zdGFydHNXaXRoKFNw
YW4geyBwZGZNYWdpY051bWJlciwgc3RkOjpzaXplKHBkZk1hZ2ljTnVtYmVyKSB9KSkgeworICAg
IGlmIChkYXRhICYmIGRhdGEtPnN0YXJ0c1dpdGgocGRmTWFnaWNOdW1iZXIpKSB7CiAgICAgICAg
IExPRyhJY29uRGF0YWJhc2UsICJJY29uTG9hZGVyOjpmaW5pc2hMb2FkaW5nKCkgLSBJZ25vcmlu
ZyBpY29uIGF0ICVzIGJlY2F1c2UgaXQgYXBwZWFycyB0byBiZSBhIFBERiIsIG1fcmVzb3VyY2Ut
PnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKICAgICAgICAgZGF0YSA9IG51bGxwdHI7
CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9CYXNlNjRVdGlsaXRpZXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9CYXNlNjRVdGlsaXRpZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIEV4Y2VwdGlvbk9yPFN0cmluZz4gQmFz
ZTY0VXRpbGl0aWVzOjpidG8KICAgICBpZiAoIXN0cmluZ1RvRW5jb2RlLmlzQWxsTGF0aW4xKCkp
CiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IgfTsKIAot
ICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhzdHJpbmdUb0VuY29kZS5sYXRpbjEoKSk7
CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKHN0cmluZ1RvRW5jb2RlLmxhdGluMSgp
LmJ5dGVzKCkpOwogfQogCiBFeGNlcHRpb25PcjxTdHJpbmc+IEJhc2U2NFV0aWxpdGllczo6YXRv
Yihjb25zdCBTdHJpbmcmIGVuY29kZWRTdHJpbmcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgUmVmPFNoYXJlZEJ1ZmZlcj4gUGFzdGVib2FyZEN1
c3RvbURhdGE6OgogICAgIGVuY29kZXIgPDwgbV9vcmlnaW47CiAgICAgZW5jb2RlciA8PCBzYW1l
T3JpZ2luQ3VzdG9tU3RyaW5nRGF0YSgpOwogICAgIGVuY29kZXIgPDwgb3JkZXJlZFR5cGVzKCk7
Ci0gICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCksIGVuY29k
ZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZW5jb2Rl
ci5idWZmZXIoKSk7CiB9CiAKIFBhc3RlYm9hcmRDdXN0b21EYXRhIFBhc3RlYm9hcmRDdXN0b21E
YXRhOjpmcm9tUGVyc2lzdGVuY2VEZWNvZGVyKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXImJiBk
ZWNvZGVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwyMCArMzQsMTkgQEAKICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVVRGOENvbnZlcnNpb24u
aD4KIAotbmFtZXNwYWNlIFdlYkNvcmUgeworI2lmIFVTRShDRikKKyNpbmNsdWRlIDx3dGYvY2Yv
U3BhbkNGLmg+CisjZW5kaWYKIAotU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIoY29uc3QgdWlu
dDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCi17Ci0gICAgYXBwZW5kKGRhdGEsIHNpemUpOwotfQor
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1TaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihjb25zdCBj
aGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkKK1NoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKFNwYW48
Y29uc3Qgc3RkOjpieXRlPiBkYXRhKQogewotICAgIGFwcGVuZChyZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQ4X3QqPihkYXRhKSwgc2l6ZSk7CisgICAgYXBwZW5kKGRhdGEpOwogfQogCiBTaGFy
ZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIGZpbGVE
YXRhKQotICAgIDogbV9zaXplKGZpbGVEYXRhLnNpemUoKSkKKyAgICA6IG1fc2l6ZShmaWxlRGF0
YS5kYXRhKCkuc2l6ZSgpKQogewogICAgIG1fc2VnbWVudHMuYXBwZW5kKHswLCBEYXRhU2VnbWVu
dDo6Y3JlYXRlKFdURk1vdmUoZmlsZURhdGEpKX0pOwogfQpAQCAtMTg4LDEzICsxODcsMTMgQEAg
dm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVuZChjb25zdCBTaGFyZWRCdQogICAgIEFTU0VSVChpbnRl
cm5hbGx5Q29uc2lzdGVudCgpKTsKIH0KIAotdm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVuZChjb25z
dCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoKQordm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVu
ZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKICAgICBBU1NFUlQoIW1faGFzQmVlbkNv
bWJpbmVkSW50b09uZVNlZ21lbnQpOwogICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3I7Ci0gICAg
dmVjdG9yLmFwcGVuZChkYXRhLCBsZW5ndGgpOwotICAgIG1fc2VnbWVudHMuYXBwZW5kKHttX3Np
emUsIERhdGFTZWdtZW50OjpjcmVhdGUoV1RGTW92ZSh2ZWN0b3IpKX0pOwotICAgIG1fc2l6ZSAr
PSBsZW5ndGg7CisgICAgdmVjdG9yLmFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKTsKKyAgICBtX3NlZ21lbnRzLmFwcGVuZCh7
IG1fc2l6ZSwgRGF0YVNlZ21lbnQ6OmNyZWF0ZShXVEZNb3ZlKHZlY3RvcikpIH0pOworICAgIG1f
c2l6ZSArPSBkYXRhLnNpemUoKTsKICAgICBBU1NFUlQoaW50ZXJuYWxseUNvbnNpc3RlbnQoKSk7
CiB9CiAKQEAgLTIzMiw3ICsyMzEsNyBAQCB2b2lkIFNoYXJlZEJ1ZmZlcjo6Zm9yRWFjaFNlZ21l
bnQoY29uc3QgCiAgICAgICAgIGFwcGx5KFNwYW4geyBzZWdtZW50LnNlZ21lbnQtPmRhdGEoKSwg
c2VnbWVudC5zZWdtZW50LT5zaXplKCkgfSk7CiB9CiAKLWJvb2wgU2hhcmVkQnVmZmVyOjpzdGFy
dHNXaXRoKGNvbnN0IFNwYW48Y29uc3QgdWludDhfdD4mIHByZWZpeCkgY29uc3QKK2Jvb2wgU2hh
cmVkQnVmZmVyOjpzdGFydHNXaXRoKGNvbnN0IFNwYW48Y29uc3Qgc3RkOjpieXRlPiYgcHJlZml4
KSBjb25zdAogewogICAgIGlmIChwcmVmaXguZW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC0yNDAsNyArMjM5LDcgQEAgYm9vbCBTaGFyZWRCdWZmZXI6OnN0YXJ0c1dpdGgoY29uc3Qg
U3BhbgogICAgIGlmIChzaXplKCkgPCBwcmVmaXguc2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBjb25zdCB1aW50OF90KiBwcmVmaXhQdHIgPSBwcmVmaXguZGF0YSgpOworICAg
IGF1dG8qIHByZWZpeFB0ciA9IHByZWZpeC5kYXRhKCk7CiAgICAgc2l6ZV90IHJlbWFpbmluZyA9
IHByZWZpeC5zaXplKCk7CiAgICAgZm9yIChhdXRvJiBzZWdtZW50IDogbV9zZWdtZW50cykgewog
ICAgICAgICBzaXplX3QgYW1vdW50VG9Db21wYXJlVGhpc1RpbWUgPSBzdGQ6Om1pbihyZW1haW5p
bmcsIHNlZ21lbnQuc2VnbWVudC0+c2l6ZSgpKTsKQEAgLTMwMSw5ICszMDAsMzggQEAgY29uc3Qg
dWludDhfdCogU2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVudAogI2lmIFVTRShHU1RSRUFNRVIpCiAg
ICAgICAgIFtdKGNvbnN0IFJlZlB0cjxHc3RNYXBwZWRPd25lZEJ1ZmZlcj4mIGRhdGEpIHsgcmV0
dXJuIGRhdGEtPmRhdGEoKTsgfSwKICNlbmRpZgotICAgICAgICBbXShjb25zdCBGaWxlU3lzdGVt
OjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGRhdGEuZGF0YSgpKTsgfQorICAgICAgICBbXShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRG
aWxlRGF0YSYgZGF0YSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4o
ZGF0YS5kYXRhKCkuZGF0YSgpKTsgfQorICAgICk7CisgICAgcmV0dXJuIFdURjo6dmlzaXQodmlz
aXRvciwgbV9pbW11dGFibGVEYXRhKTsKK30KKworU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IFNoYXJl
ZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmJ5dGVzKCkgY29uc3QKK3sKKyAgICBhdXRvIHZpc2l0b3Ig
PSBXVEY6Om1ha2VWaXNpdG9yKAorICAgICAgICBbXShjb25zdCBWZWN0b3I8dWludDhfdD4mIGRh
dGEpIHsKKyAgICAgICAgICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBkYXRhIH0pOworICAgICAg
ICB9LAorI2lmIFVTRShDRikKKyAgICAgICAgW10oY29uc3QgUmV0YWluUHRyPENGRGF0YVJlZj4m
IGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBhc0J5dGVzKGRhdGEuZ2V0KCkpOworICAgICAg
ICB9LAorI2VuZGlmCisjaWYgVVNFKEdMSUIpCisgICAgICAgIFtdKGNvbnN0IEdSZWZQdHI8R0J5
dGVzPiYgZGF0YSkgeworICAgICAgICAgICAgcmV0dXJuIGFzQnl0ZXMoU3BhbiB7IHN0YXRpY19j
YXN0PGNvbnN0IHVpbnQ4X3QqPihnX2J5dGVzX2dldF9kYXRhKGRhdGEuZ2V0KCksIG51bGxwdHIp
KSwgZ19ieXRlc19nZXRfc2l6ZShkYXRhLmdldCgpKSB9KTsKKyAgICAgICAgfSwKKyNlbmRpZgor
I2lmIFVTRShHU1RSRUFNRVIpCisgICAgICAgIFtdKGNvbnN0IFJlZlB0cjxHc3RNYXBwZWRPd25l
ZEJ1ZmZlcj4mIGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBkYXRh
LT5kYXRhKCksIGRhdGEtPnNpemUoKSB9KTsKKyAgICAgICAgfSwKKyNlbmRpZgorICAgICAgICBb
XShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeworICAgICAgICAgICAg
cmV0dXJuIGRhdGEuZGF0YSgpOworICAgICAgICB9CiAgICAgKTsKICAgICByZXR1cm4gV1RGOjp2
aXNpdCh2aXNpdG9yLCBtX2ltbXV0YWJsZURhdGEpOworCiB9CiAKIGJvb2wgU2hhcmVkQnVmZmVy
OjpEYXRhU2VnbWVudDo6Y29udGFpbnNNYXBwZWRGaWxlRGF0YSgpIGNvbnN0CkBAIC0zMTksNyAr
MzQ3LDcgQEAgdm9pZCBTaGFyZWRCdWZmZXI6OmhpbnRNZW1vcnlOb3ROZWVkZWRTbwogCiBXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyIFNoYXJlZEJ1ZmZlcjo6ZGVjb2RlcigpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIHsgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSgpKSwgc2l6
ZSgpIH07CisgICAgcmV0dXJuIHsgYnl0ZXMoKSB9OwogfQogCiBib29sIFNoYXJlZEJ1ZmZlcjo6
b3BlcmF0b3I9PShjb25zdCBTaGFyZWRCdWZmZXImIG90aGVyKSBjb25zdApAQCAtMzg0LDcgKzQx
Miw3IEBAIHNpemVfdCBTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpzaXplKCkKICNpZiBVU0Uo
R1NUUkVBTUVSKQogICAgICAgICBbXShjb25zdCBSZWZQdHI8R3N0TWFwcGVkT3duZWRCdWZmZXI+
JiBkYXRhKSB7IHJldHVybiBkYXRhLT5zaXplKCk7IH0sCiAjZW5kaWYKLSAgICAgICAgW10oY29u
c3QgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsgcmV0dXJuIGRhdGEuc2l6ZSgp
OyB9CisgICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBkYXRhKSB7
IHJldHVybiBkYXRhLmRhdGEoKS5zaXplKCk7IH0KICAgICApOwogICAgIHJldHVybiBXVEY6OnZp
c2l0KHZpc2l0b3IsIG1faW1tdXRhYmxlRGF0YSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TaGFyZWRCdWZmZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDggKzY3LDEyIEBA
IGNsYXNzIFNoYXJlZEJ1ZmZlckRhdGFWaWV3OwogY2xhc3MgV0VCQ09SRV9FWFBPUlQgU2hhcmVk
QnVmZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8U2hhcmVkQnVmZmVyPiB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
U2hhcmVkQnVmZmVyKTsgfQotICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoY29u
c3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hh
cmVkQnVmZmVyKGRhdGEsIHNpemUpKTsgfQotICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBj
cmVhdGUoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpIHsgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU2hhcmVkQnVmZmVyKGRhdGEsIHNpemUpKTsgfQorICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVm
ZmVyPiBjcmVhdGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpIHsgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU2hhcmVkQnVmZmVyKGRhdGEpKTsgfQorICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVy
PiBjcmVhdGUoU3Bhbjxjb25zdCB1aW50OF90PiBkYXRhKSB7IHJldHVybiBjcmVhdGUoYXNCeXRl
cyhkYXRhKSk7IH0KKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKFNwYW48Y29u
c3QgY2hhcj4gZGF0YSkgeyByZXR1cm4gY3JlYXRlKGFzQnl0ZXMoZGF0YSkpOyB9CisgICAgc3Rh
dGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShjb25zdCBzdGQ6OmJ5dGUqIGRhdGEsIHNpemVf
dCBzaXplKSB7IHJldHVybiBjcmVhdGUoU3BhbiB7IGRhdGEsIHNpemUgfSk7IH0KKyAgICBzdGF0
aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBz
aXplKSB7IHJldHVybiBjcmVhdGUoU3BhbiB7IGRhdGEsIHNpemUgfSk7IH0KKyAgICBzdGF0aWMg
UmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKSB7
IHJldHVybiBjcmVhdGUoU3BhbiB7IGRhdGEsIHNpemUgfSk7IH0KICAgICBzdGF0aWMgUmVmPFNo
YXJlZEJ1ZmZlcj4gY3JlYXRlKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYgbWFwcGVkRmls
ZURhdGEpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hhcmVkQnVmZmVyKFdURk1vdmUobWFwcGVk
RmlsZURhdGEpKSk7IH0KIAogICAgIGVudW0gY2xhc3MgTWF5VXNlRmlsZU1hcHBpbmcgOiBib29s
IHsgTm8sIFllcyB9OwpAQCAtMTAxLDYgKzEwNSw4IEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTog
QXVkaXQgdGhlIGNhbGwgc2l0ZXMgb2YgdGhpcyBmdW5jdGlvbiBhbmQgcmVwbGFjZSB0aGVtIHdp
dGggaXRlcmF0aW9uIGlmIHBvc3NpYmxlLgogICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEoKSBjb25z
dDsKICAgICBjb25zdCBjaGFyKiBkYXRhQXNDaGFyUHRyKCkgY29uc3QgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSgpKTsgfQorICAgIFNwYW48Y29uc3Qgc3RkOjpi
eXRlPiBieXRlcygpIGNvbnN0IHsgcmV0dXJuIGFzQnl0ZXMoU3BhbiB7IGRhdGEoKSwgc2l6ZSgp
IH0pOyB9CisKICAgICBWZWN0b3I8dWludDhfdD4gY29weURhdGEoKSB7IHJldHVybiB7IGRhdGEo
KSwgc2l6ZSgpIH07IH0KIAogICAgIC8vIENvbWJpbmVzIGFsbCB0aGUgc2VnbWVudHMgaW50byBh
IFZlY3RvciBhbmQgcmV0dXJucyB0aGF0IHZlY3RvciBhZnRlciBjbGVhcmluZyB0aGUgU2hhcmVk
QnVmZmVyLgpAQCAtMTE1LDggKzEyMSwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gIXNpemUoKTsgfQogCiAgICAgdm9pZCBhcHBlbmQoY29uc3QgU2hhcmVk
QnVmZmVyJik7Ci0gICAgdm9pZCBhcHBlbmQoY29uc3QgdWludDhfdCosIHNpemVfdCk7Ci0gICAg
dm9pZCBhcHBlbmQoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCkgeyBhcHBlbmQocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSksIGxlbmd0aCk7IH0KKyAgICB2b2lk
IGFwcGVuZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOworICAgIHZvaWQgYXBwZW5kKFNwYW48Y29u
c3QgdWludDhfdD4gZGF0YSkgeyBhcHBlbmQoYXNCeXRlcyhkYXRhKSk7IH0KKyAgICB2b2lkIGFw
cGVuZChTcGFuPGNvbnN0IGNoYXI+IGRhdGEpIHsgYXBwZW5kKGFzQnl0ZXMoZGF0YSkpOyB9Cisg
ICAgdm9pZCBhcHBlbmQoY29uc3Qgc3RkOjpieXRlKiBkYXRhLCBzaXplX3QgbGVuZ3RoKSB7IGFw
cGVuZChTcGFuIHsgZGF0YSwgbGVuZ3RoIH0pOyB9CisgICAgdm9pZCBhcHBlbmQoY29uc3QgdWlu
dDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCkgeyBhcHBlbmQoU3BhbiB7IGRhdGEsIGxlbmd0aCB9
KTsgfQorICAgIHZvaWQgYXBwZW5kKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpIHsg
YXBwZW5kKFNwYW4geyBkYXRhLCBsZW5ndGggfSk7IH0KICAgICB2b2lkIGFwcGVuZChWZWN0b3I8
dWludDhfdD4mJik7CiAKICAgICB2b2lkIGNsZWFyKCk7CkBAIC0xMzEsNiArMTQxLDggQEAgcHVi
bGljOgogICAgICAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCB1aW50OF90KiBkYXRhKCkgY29uc3Q7
CiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIHNpemVfdCBzaXplKCkgY29uc3Q7CiAKKyAgICAgICAg
V0VCQ09SRV9FWFBPUlQgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGJ5dGVzKCkgY29uc3Q7CisKICAg
ICAgICAgc3RhdGljIFJlZjxEYXRhU2VnbWVudD4gY3JlYXRlKFZlY3Rvcjx1aW50OF90PiYmIGRh
dGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIGRhdGEuc2hyaW5rVG9GaXQoKTsKQEAgLTE4Nyw3
ICsxOTksOSBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIHZvaWQgZm9yRWFjaFNlZ21lbnQoY29u
c3QgRnVuY3Rpb248dm9pZChjb25zdCBTcGFuPGNvbnN0IHVpbnQ4X3Q+Jik+JikgY29uc3Q7Ci0g
ICAgYm9vbCBzdGFydHNXaXRoKGNvbnN0IFNwYW48Y29uc3QgdWludDhfdD4mIHByZWZpeCkgY29u
c3Q7CisKKyAgICBib29sIHN0YXJ0c1dpdGgoY29uc3QgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+JiBw
cmVmaXgpIGNvbnN0OworICAgIGJvb2wgc3RhcnRzV2l0aChjb25zdCBTcGFuPGNvbnN0IHVpbnQ4
X3Q+JiBwcmVmaXgpIGNvbnN0IHsgcmV0dXJuIHN0YXJ0c1dpdGgoYXNCeXRlcyhwcmVmaXgpKTsg
fQogCiAgICAgc3RydWN0IERhdGFTZWdtZW50VmVjdG9yRW50cnkgewogICAgICAgICBzaXplX3Qg
YmVnaW5Qb3NpdGlvbjsKQEAgLTIxMiw4ICsyMjYsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAg
ICAgZXhwbGljaXQgU2hhcmVkQnVmZmVyKCkgPSBkZWZhdWx0OwotICAgIGV4cGxpY2l0IFNoYXJl
ZEJ1ZmZlcihjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKLSAgICBleHBsaWNpdCBTaGFyZWRCdWZm
ZXIoY29uc3QgY2hhciosIHNpemVfdCk7CisgICAgZXhwbGljaXQgU2hhcmVkQnVmZmVyKFNwYW48
Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgZXhwbGljaXQgU2hhcmVkQnVmZmVyKFZlY3Rvcjx1aW50
OF90PiYmKTsKICAgICBleHBsaWNpdCBTaGFyZWRCdWZmZXIoRmlsZVN5c3RlbTo6TWFwcGVkRmls
ZURhdGEmJik7CiAjaWYgVVNFKENGKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vY29jb2EvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29h
L0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3
IEBACiAKICNpbmNsdWRlICJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSA8Q29y
ZUF1ZGlvL0NvcmVBdWRpb1R5cGVzLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC04MCwxMyArODEsMTMgQEAgcHJpdmF0ZToKIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+CiB2b2lkIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0CiB7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oJm1fc3RyZWFtRGVzY3JpcHRpb24pLCBz
aXplb2YobV9zdHJlYW1EZXNjcmlwdGlvbiksIDEpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKFNwYW4geyAmbV9zdHJlYW1EZXNjcmlwdGlvbiwgMSB9LCAxKTsKIH0KIAogdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4KIGJvb2wgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlciwgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBkZXNjcmlwdGlv
bikKIHsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oJmRlc2NyaXB0aW9uLm1fc3RyZWFtRGVzY3JpcHRpb24pLCBzaXpl
b2YoZGVzY3JpcHRpb24ubV9zdHJlYW1EZXNjcmlwdGlvbiksIDEpOworICAgIHJldHVybiBkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJmRlc2NyaXB0aW9uLm1fc3RyZWFtRGVz
Y3JpcHRpb24sIDEgfSwgMSk7CiB9CiAKIGlubGluZSBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24g
dG9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oY29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYg
ZGVzY3JpcHRpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRp
YS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVh
cmtleS9DRE1DbGVhcktleS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OCwxNSArMTk4LDEzIEBA
IHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBleHRyYWN0S2V5aWRzRnIKIHsKICAgICBSZWY8U2hh
cmVkQnVmZmVyPiBrZXlJZHMgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZSgpOwogCi0gICAgc3RkOjpw
YWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4ga2V5SWRzTWFwID0gZXh0cmFjdEtleWlkc0xvY2F0aW9u
RnJvbUNlbmNJbml0RGF0YShpbml0RGF0YSk7Ci0gICAgdW5zaWduZWQga2V5SWRDb3VudCA9IGtl
eUlkc01hcC5maXJzdDsKLSAgICB1bnNpZ25lZCBpbmRleCA9IGtleUlkc01hcC5zZWNvbmQ7Cisg
ICAgYXV0byBba2V5SWRDb3VudCwgaW5kZXhdID0gZXh0cmFjdEtleWlkc0xvY2F0aW9uRnJvbUNl
bmNJbml0RGF0YShpbml0RGF0YSk7CiAKICAgICAvLyBDaGVjayBpZiBpbml0RGF0YSBpcyBhIHZh
bGlkIENFTkMgaW5pdERhdGEuCiAgICAgaWYgKCFrZXlJZENvdW50IHx8ICFpbmRleCkKICAgICAg
ICAgcmV0dXJuIGtleUlkczsKIAotICAgIGF1dG8qIGRhdGEgPSBpbml0RGF0YS5kYXRhKCk7Cisg
ICAgYXV0byBkYXRhID0gaW5pdERhdGEuYnl0ZXMoKTsKIAogICAgIGF1dG8gb2JqZWN0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBhdXRvIGtleUlkc0FycmF5ID0gSlNPTjo6QXJyYXk6
OmNyZWF0ZSgpOwpAQCAtMjE4LDcgKzIxNiw3IEBAIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBl
eHRyYWN0S2V5aWRzRnIKICAgICAvLyAia2lkcyIKICAgICAvLyBBbiBhcnJheSBvZiBrZXkgSURz
LiBFYWNoIGVsZW1lbnQgb2YgdGhlIGFycmF5IGlzIHRoZSBiYXNlNjR1cmwgZW5jb2Rpbmcgb2Yg
dGhlIG9jdGV0IHNlcXVlbmNlIGNvbnRhaW5pbmcgdGhlIGtleSBJRCB2YWx1ZS4KICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5SWRDb3VudDsgaSsrKSB7Ci0gICAgICAgIGtleUlkc0Fy
cmF5LT5wdXNoU3RyaW5nKGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKCZkYXRhW2luZGV4XSwgQ2xl
YXJLZXk6OktleUlEU2l6ZUluQnl0ZXMpKTsKKyAgICAgICAga2V5SWRzQXJyYXktPnB1c2hTdHJp
bmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoZGF0YS5zdWJzcGFuKGluZGV4LCBDbGVhcktleTo6
S2V5SURTaXplSW5CeXRlcykpKTsKICAgICAgICAgaW5kZXggKz0gQ2xlYXJLZXk6OktleUlEU2l6
ZUluQnl0ZXM7CiAgICAgfQogCkBAIC0yNDUsNyArMjQzLDcgQEAgc3RhdGljIFJlZjxTaGFyZWRC
dWZmZXI+IGV4dHJhY3RLZXlJZEZybwogICAgIC8vIFRoZSBmb3JtYXQgaXMgYSBKU09OIG9iamVj
dCBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgbWVtYmVyczoKICAgICAvLyAia2lkcyIKICAgICAv
LyBBbiBhcnJheSBvZiBrZXkgSURzLiBFYWNoIGVsZW1lbnQgb2YgdGhlIGFycmF5IGlzIHRoZSBi
YXNlNjR1cmwgZW5jb2Rpbmcgb2YgdGhlIG9jdGV0IHNlcXVlbmNlIGNvbnRhaW5pbmcgdGhlIGtl
eSBJRCB2YWx1ZS4KLSAgICBrZXlJZHNBcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVU
b1N0cmluZyhpbml0RGF0YS5kYXRhKCksIGluaXREYXRhLnNpemUoKSkpOworICAgIGtleUlkc0Fy
cmF5LT5wdXNoU3RyaW5nKGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGluaXREYXRhLmJ5dGVzKCkp
KTsKIAogICAgIG9iamVjdC0+c2V0QXJyYXkoImtpZHMiLCBXVEZNb3ZlKGtleUlkc0FycmF5KSk7
CiAgICAgQ1N0cmluZyBqc29uRGF0YSA9IG9iamVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgpOwpA
QCAtNTc4LDkgKzU3Niw4IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlbW92
ZVMKIAogICAgIC8vIENvbnN0cnVjdCB0aGUgS2V5U3RhdHVzVmVjdG9yIG9iamVjdCwgcmVwcmVz
ZW50aW5nIHJlbGVhc2VkIGtleXMsIGFuZCB0aGUgbWVzc2FnZSBpbiB0aGUKICAgICAvLyAnbGlj
ZW5zZSByZWxlYXNlJyBmb3JtYXQuCi0gICAgS2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1c1ZlY3Rv
ciA9IG1fa2V5U3RvcmUuYWxsS2V5c0FzKENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpS
ZWxlYXNlZCk7Ci0gICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbWVzc2FnZTsKLSAgICB7CisgICAg
YXV0byBrZXlTdGF0dXNWZWN0b3IgPSBtX2tleVN0b3JlLmFsbEtleXNBcyhDRE1JbnN0YW5jZVNl
c3Npb246OktleVN0YXR1czo6UmVsZWFzZWQpOworICAgIGF1dG8gbWVzc2FnZSA9IFsmXXsKICAg
ICAgICAgLy8gQ29uc3RydWN0IEpTT04gdGhhdCByZXByZXNlbnRzIHRoZSAnbGljZW5zZSByZWxl
YXNlJyBmb3JtYXQsIGNyZWF0aW5nIGEgJ2tpZHMnIGFycmF5CiAgICAgICAgIC8vIG9mIGJhc2U2
NFVSTC1lbmNvZGVkIGtleSBJRHMgZm9yIGFsbCBrZXlzIHRoYXQgd2VyZSBhc3NvY2lhdGVkIHdp
dGggdGhpcyBzZXNzaW9uLgogICAgICAgICBhdXRvIHJvb3RPYmplY3QgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwpAQCAtNTg4LDcgKzU4NSw3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xl
YXJLZXk6OnJlbW92ZVMKICAgICAgICAgICAgIGF1dG8gYXJyYXkgPSBKU09OOjpBcnJheTo6Y3Jl
YXRlKCk7CiAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IG1fa2V5U3RvcmUpIHsK
ICAgICAgICAgICAgICAgICBBU1NFUlQoa2V5LT5pZCgpLnNpemUoKSA8PSBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOwotICAgICAgICAgICAgICAgIGFycmF5LT5wdXNoU3Ry
aW5nKGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGtleS0+aWQoKS5kYXRhKCksIGtleS0+aWQoKS5z
aXplKCkpKTsKKyAgICAgICAgICAgICAgICBhcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNv
ZGVUb1N0cmluZyhrZXktPmlkKCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJvb3RP
YmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92ZShhcnJheSkpOwogICAgICAgICB9CkBAIC01
OTYsMTEgKzU5MywxMSBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVT
CiAgICAgICAgIC8vIENvcHkgdGhlIEpTT04gZGF0YSBpbnRvIGEgU2hhcmVkQnVmZmVyIG9iamVj
dC4KICAgICAgICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmcgPSByb290T2JqZWN0LT50b0pTT05TdHJp
bmcoKTsKICAgICAgICAgQ1N0cmluZyBtZXNzYWdlQ1N0cmluZyA9IG1lc3NhZ2VTdHJpbmcudXRm
OCgpOwotICAgICAgICBtZXNzYWdlID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUobWVzc2FnZUNTdHJp
bmcuZGF0YSgpLCBtZXNzYWdlQ1N0cmluZy5sZW5ndGgoKSk7Ci0gICAgfQorICAgICAgICByZXR1
cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUobWVzc2FnZUNTdHJpbmcuZGF0YSgpLCBtZXNzYWdlQ1N0
cmluZy5sZW5ndGgoKSk7CisgICAgfSgpOwogCiAgICAgbV9rZXlTdG9yZS5yZW1vdmVBbGxLZXlz
KCk7Ci0gICAgZGlzcGF0Y2hDYWxsYmFjayhXVEZNb3ZlKGtleVN0YXR1c1ZlY3RvciksIFJlZjxT
aGFyZWRCdWZmZXI+KCptZXNzYWdlKSwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVkZWQpOworICAgIGRp
c3BhdGNoQ2FsbGJhY2soV1RGTW92ZShrZXlTdGF0dXNWZWN0b3IpLCBXVEZNb3ZlKG1lc3NhZ2Up
LCBTdWNjZXNzVmFsdWU6OlN1Y2NlZWRlZCk7CiB9CiAKIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9u
Q2xlYXJLZXk6OnN0b3JlUmVjb3JkT2ZLZXlVc2FnZShjb25zdCBTdHJpbmcmKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9LZXllZERlY29kZXJHZW5lcmljLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL0tleWVkRGVjb2Rlckdl
bmVyaWMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
ZW5lcmljL0tleWVkRGVjb2RlckdlbmVyaWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1
OCw3IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gcmVhZFN0cmluZygKICAgICAgICAg
cmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyKHNpemUu
dmFsdWUoKSk7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShidWZmZXIu
ZGF0YSgpLCBzaXplLnZhbHVlKCkpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0
aERhdGEoYnVmZmVyKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICBhdXRvIHJl
c3VsdCA9IFN0cmluZzo6ZnJvbVVURjgoYnVmZmVyLmRhdGEoKSwgc2l6ZS52YWx1ZSgpKTsKICAg
ICBpZiAocmVzdWx0LmlzTnVsbCgpKQpAQCAtODgsNyArODgsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8
S2V5ZWREZWNvZGVyPiBLZXllZERlY29kCiAKIEtleWVkRGVjb2RlckdlbmVyaWM6OktleWVkRGVj
b2RlckdlbmVyaWMoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCiB7Ci0gICAgV1RG
OjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOworICAgIFdURjo6UGVy
c2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihTcGFuIHsgZGF0YSwgc2l6ZSB9KTsKIAogICAgIG1f
cm9vdERpY3Rpb25hcnkgPSBtYWtlVW5pcXVlPERpY3Rpb25hcnk+KCk7CiAgICAgbV9kaWN0aW9u
YXJ5U3RhY2suYXBwZW5kKG1fcm9vdERpY3Rpb25hcnkuZ2V0KCkpOwpAQCAtMTE3LDcgKzExNyw3
IEBAIEtleWVkRGVjb2RlckdlbmVyaWM6OktleWVkRGVjb2RlckdlbmVyaWMKICAgICAgICAgICAg
IGlmICghb2spCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBWZWN0b3I8dWlu
dDhfdD4gYnVmZmVyKCpzaXplKTsKLSAgICAgICAgICAgIG9rID0gZGVjb2Rlci5kZWNvZGVGaXhl
ZExlbmd0aERhdGEoYnVmZmVyLmRhdGEoKSwgKnNpemUpOworICAgICAgICAgICAgb2sgPSBkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShidWZmZXIpOwogICAgICAgICAgICAgaWYgKCFvaykK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIG1fZGljdGlvbmFyeVN0YWNrLmxh
c3QoKS0+YWRkKCprZXksIFdURk1vdmUoYnVmZmVyKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9nZW5lcmljL0tleWVkRW5jb2RlckdlbmVyaWMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvS2V5ZWRFbmNvZGVyR2VuZXJpYy5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvS2V5ZWRF
bmNvZGVyR2VuZXJpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgdm9pZCBL
ZXllZEVuY29kZXJHZW5lcmljOjplbmNvZGVTdHJpbmcoYwogewogICAgIGF1dG8gdXRmOCA9IGtl
eS51dGY4KCk7CiAgICAgbV9lbmNvZGVyIDw8IHV0ZjgubGVuZ3RoKCk7Ci0gICAgbV9lbmNvZGVy
LmVuY29kZUZpeGVkTGVuZ3RoRGF0YSh1dGY4LmRhdGFBc1VJbnQ4UHRyKCksIHV0ZjgubGVuZ3Ro
KCkpOworICAgIG1fZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEodXRmOC5ieXRlcygpKTsK
IH0KIAogdm9pZCBLZXllZEVuY29kZXJHZW5lcmljOjplbmNvZGVCeXRlcyhjb25zdCBTdHJpbmcm
IGtleSwgY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBzaXplKQpAQCAtNDgsNyArNDgsNyBA
QCB2b2lkIEtleWVkRW5jb2RlckdlbmVyaWM6OmVuY29kZUJ5dGVzKGNvCiAgICAgbV9lbmNvZGVy
IDw8IFR5cGU6OkJ5dGVzOwogICAgIGVuY29kZVN0cmluZyhrZXkpOwogICAgIG1fZW5jb2RlciA8
PCBzaXplOwotICAgIG1fZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYnl0ZXMsIHNpemUp
OworICAgIG1fZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IGJ5dGVzLCBzaXpl
IH0pOwogfQogCiB2b2lkIEtleWVkRW5jb2RlckdlbmVyaWM6OmVuY29kZUJvb2woY29uc3QgU3Ry
aW5nJiBrZXksIGJvb2wgdmFsdWUpCkBAIC0xNDEsNyArMTQxLDcgQEAgdm9pZCBLZXllZEVuY29k
ZXJHZW5lcmljOjplbmRBcnJheSgpCiAKIFJlZlB0cjxTaGFyZWRCdWZmZXI+IEtleWVkRW5jb2Rl
ckdlbmVyaWM6OmZpbmlzaEVuY29kaW5nKCkKIHsKLSAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpj
cmVhdGUobV9lbmNvZGVyLmJ1ZmZlcigpLCBtX2VuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICBy
ZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUobV9lbmNvZGVyLmJ1ZmZlcigpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvTW9kZWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Nb2RlbC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Nb2RlbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+CiB2b2lkIE1vZGVsOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKIHsKICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHNpemVfdD4obV9kYXRhLT5zaXplKCkp
OwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKG1fZGF0YS0+ZGF0YSgpLCBtX2Rh
dGEtPnNpemUoKSwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEobV9kYXRh
LT5ieXRlcygpLCAxKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KQEAgLTc0LDcgKzc0
LDcgQEAgUmVmUHRyPE1vZGVsPiBNb2RlbDo6ZGVjb2RlKERlY29kZXImIGRlYwogCiAgICAgVmVj
dG9yPHVpbnQ4X3Q+IGRhdGE7CiAgICAgZGF0YS5ncm93KCpsZW5ndGgpOwotICAgIGlmICghZGVj
b2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAxKSkK
KyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGRhdGEsIDEpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBNb2RlbDo6Y3JlYXRlKFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKFdURk1vdmUoZGF0YSkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BpeGVsQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtODIsNyArODIsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIFBpeGVsQnVmZmVy
CiAKICAgICBlbmNvZGVyIDw8IG1fZm9ybWF0OwogICAgIGVuY29kZXIgPDwgbV9zaXplOwotICAg
IGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPmJ5
dGVMZW5ndGgoKSwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEobV9kYXRh
LT5ieXRlcygpLCAxKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RkOjpvcHRpb25h
bDxQaXhlbEJ1ZmZlcj4gUGl4ZWxCdWZmZXI6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQpAQCAt
MTEzLDcgKzExMyw3IEBAIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0ZDo6b3B0aW9uYWw8UGkK
ICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIGlm
ICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVzdWx0LT5tX2RhdGEtPmRhdGEoKSwg
cmVzdWx0LT5tX2RhdGEtPmJ5dGVMZW5ndGgoKSwgMSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZUZpeGVkTGVuZ3RoRGF0YShyZXN1bHQtPm1fZGF0YS0+d3JpdGFibGVCeXRlcygpLCAxKSkKICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0
YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQ
bGF5U3RyZWFtaW5nQVZGT2JqQy5tbQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxh
eVN0cmVhbWluZ0FWRk9iakMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAKICNp
bXBvcnQgPHd0Zi9GaWxlU3lzdGVtLmg+CiAjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgogI2lt
cG9ydCA8d3RmL0xvZ2dlckhlbHBlci5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1NwYW5Db2NvYS5o
PgogI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9C
YXNlNjQuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KQEAgLTcxNSw3ICs3MTYs
NyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nCiAgICAgICAgIGlk
ZW50aWZpZXIgPSBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTppbml0RGF0
YS0+Y3JlYXRlTlNEYXRhKCkuZ2V0KCkgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddKTsK
ICNpZiBIQVZFKEZBSVJQTEFZU1RSRUFNSU5HX0NFTkNfSU5JVERBVEEpCiAgICAgZWxzZSBpZiAo
aW5pdERhdGFUeXBlID09IEluaXREYXRhUmVnaXN0cnk6OmNlbmNOYW1lKCkpIHsKLSAgICAgICAg
YXV0byBwc3NoU3RyaW5nID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5pdERhdGEtPmRhdGEoKSwg
aW5pdERhdGEtPnNpemUoKSk7CisgICAgICAgIGF1dG8gcHNzaFN0cmluZyA9IGJhc2U2NEVuY29k
ZVRvU3RyaW5nKGluaXREYXRhLT5ieXRlcygpKTsKICAgICAgICAgaW5pdGlhbGl6YXRpb25EYXRh
ID0gW05TSlNPTlNlcmlhbGl6YXRpb24gZGF0YVdpdGhKU09OT2JqZWN0OkB7IEAicHNzaCI6IChO
U1N0cmluZyopcHNzaFN0cmluZyB9IG9wdGlvbnM6TlNKU09OV3JpdGluZ1ByZXR0eVByaW50ZWQg
ZXJyb3I6bmlsXTsKICAgICB9CiAjZW5kaWYKQEAgLTExOTEsMTIgKzExOTIsMTAgQEAgdm9pZCBD
RE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZwogICAgICAgICB9CiAKICAgICAgICAg
YXV0byByZXF1ZXN0SlNPTiA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKLSAgICAgICAgZm9yIChh
dXRvJiByZXF1ZXN0RGF0YSA6IHJlcXVlc3RzRGF0YSkgeworICAgICAgICBmb3IgKGF1dG8mIFtr
ZXlJRCwgcGF5bG9hZF0gOiByZXF1ZXN0c0RhdGEpIHsKICAgICAgICAgICAgIGF1dG8gZW50cnkg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICAgICAgYXV0byYga2V5SUQgPSByZXF1
ZXN0RGF0YS5maXJzdDsKLSAgICAgICAgICAgIGF1dG8mIHBheWxvYWQgPSByZXF1ZXN0RGF0YS5z
ZWNvbmQ7Ci0gICAgICAgICAgICBlbnRyeS0+c2V0U3RyaW5nKCJrZXlJRCIsIGJhc2U2NEVuY29k
ZVRvU3RyaW5nKGtleUlELT5kYXRhKCksIGtleUlELT5zaXplKCkpKTsKLSAgICAgICAgICAgIGVu
dHJ5LT5zZXRTdHJpbmcoInBheWxvYWQiLCBiYXNlNjRFbmNvZGVUb1N0cmluZyhwYXlsb2FkLmdl
dCgpLmJ5dGVzLCBwYXlsb2FkLmdldCgpLmxlbmd0aCkpOworICAgICAgICAgICAgZW50cnktPnNl
dFN0cmluZygia2V5SUQiLCBiYXNlNjRFbmNvZGVUb1N0cmluZyhrZXlJRC0+Ynl0ZXMoKSkpOwor
ICAgICAgICAgICAgZW50cnktPnNldFN0cmluZygicGF5bG9hZCIsIGJhc2U2NEVuY29kZVRvU3Ry
aW5nKGFzQnl0ZXMocGF5bG9hZC5nZXQoKSkpKTsKICAgICAgICAgICAgIHJlcXVlc3RKU09OLT5w
dXNoT2JqZWN0KFdURk1vdmUoZW50cnkpKTsKICAgICAgICAgfQogICAgICAgICBhdXRvIHJlcXVl
c3RCdWZmZXIgPSB1dGY4QnVmZmVyKHJlcXVlc3RKU09OLT50b0pTT05TdHJpbmcoKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
QmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
QmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw3ICsxMzIsNyBAQCBTdHJpbmcgSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YVVSCiAgICAgaWYgKGVuY29kZWRJbWFnZS5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiAiZGF0YTosIjsKIAotICAgIHJldHVybiBtYWtlU3RyaW5n
KCJkYXRhOiIsIG1pbWVUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKGVuY29kZWRJbWFn
ZS5kYXRhKCksIGVuY29kZWRJbWFnZS5zaXplKCkpKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygi
ZGF0YToiLCBtaW1lVHlwZSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChlbmNvZGVkSW1hZ2Up
KTsKIH0KIAogVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGEo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCShyZXZpc2lvbiAyNzg4MDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRm
b3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCBzdGF0aWMgU3Ry
aW5nIGNyZWF0ZVVuaXF1ZUZvbnROYW1lKCkKICAgICBHVUlEIGZvbnRVdWlkOwogICAgIENvQ3Jl
YXRlR3VpZCgmZm9udFV1aWQpOwogCi0gICAgYXV0byBmb250TmFtZSA9IGJhc2U2NEVuY29kZVRv
U3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZmb250VXVpZCksIHNpemVvZihmb250VXVp
ZCkpOworICAgIGF1dG8gZm9udE5hbWUgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgJmZv
bnRVdWlkLCAxIH0pOwogICAgIEFTU0VSVChmb250TmFtZS5sZW5ndGgoKSA8IExGX0ZBQ0VTSVpF
KTsKICAgICByZXR1cm4gZm9udE5hbWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRm
b3JtRGF0YUNhaXJvLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIFN0cmluZyBjcmVhdGVVbmlxdWVGb250
TmFtZSgpCiAgICAgR1VJRCBmb250VXVpZDsKICAgICBDb0NyZWF0ZUd1aWQoJmZvbnRVdWlkKTsK
IAotICAgIGF1dG8gZm9udE5hbWUgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhyZWludGVycHJldF9j
YXN0PGNoYXIqPigmZm9udFV1aWQpLCBzaXplb2YoZm9udFV1aWQpKTsKKyAgICBhdXRvIGZvbnRO
YW1lID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoU3BhbiB7ICZmb250VXVpZCwgMSB9KTsKICAgICBB
U1NFUlQoZm9udE5hbWUubGVuZ3RoKCkgPCBMRl9GQUNFU0laRSk7CiAgICAgcmV0dXJuIGZvbnRO
YW1lOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRv
ck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU1NMS2V5
R2VuZXJhdG9yTWFjLm1tCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvU1NMS2V5R2VuZXJhdG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksNyAr
MjE5LDcgQEAgc3RhdGljIFN0cmluZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZwogICAgIGlm
IChTZWNBc24xRW5jb2RlSXRlbShjb2RlciwgJnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZSwg
c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlVGVtcGxhdGUsICZlbmNvZGVkU2lnbmVkUHVibGlj
S2V5QW5kQ2hhbGxlbmdlKSAhPSBub0VycikKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0g
ICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGVuY29kZWRTaWduZWRQdWJsaWNLZXlBbmRD
aGFsbGVuZ2UuRGF0YSwgZW5jb2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZS5MZW5ndGgp
OworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgZW5jb2RlZFNpZ25lZFB1
YmxpY0tleUFuZENoYWxsZW5nZS5EYXRhLCBlbmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxl
bmdlLkxlbmd0aCB9KTsKIH0KIAogQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291
cmNlQ2FwYWJpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcy5oCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1l
ZGlhU291cmNlQ2FwYWJpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCwxNiArMTE0LDE2
IEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBDYXBhYmlsaXR5VmFs
dWVPclJhbmdlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKLSAgICBlbmNvZGVy
LmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigm
bV9taW5PclZhbHVlKSwgc2l6ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZhbHVlVW5pb24pKTsK
LSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPigmbV9tYXgpLCBzaXplb2YoVmFsdWVVbmlvbiksIGFsaWdub2YoVmFsdWVVbmlv
bikpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmbV9taW5PclZh
bHVlLCAxIH0sIGFsaWdub2YoVmFsdWVVbmlvbikpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKFNwYW4geyAmbV9tYXgsIDEgfSwgYWxpZ25vZihWYWx1ZVVuaW9uKSk7CiAgICAg
ZW5jb2RlciA8PCBtX3R5cGU7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CiBib29sIENh
cGFiaWxpdHlWYWx1ZU9yUmFuZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBDYXBhYmlsaXR5
VmFsdWVPclJhbmdlJiB2YWx1ZU9yUmFuZ2UpCiB7Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2YWx1ZU9yUmFuZ2Uu
bV9taW5PclZhbHVlKSwgc2l6ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZhbHVlVW5pb24pKQot
ICAgICAgICAmJiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0
PHVpbnQ4X3QqPigmdmFsdWVPclJhbmdlLm1fbWF4KSwgc2l6ZW9mKFZhbHVlVW5pb24pLCBhbGln
bm9mKFZhbHVlVW5pb24pKQorICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0
YShTcGFuIHsgJnZhbHVlT3JSYW5nZS5tX21pbk9yVmFsdWUsIDEgfSwgYWxpZ25vZihWYWx1ZVVu
aW9uKSkKKyAgICAgICAgJiYgZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZ2
YWx1ZU9yUmFuZ2UubV9tYXgsIDEgfSwgYWxpZ25vZihWYWx1ZVVuaW9uKSkKICAgICAgICAgJiYg
ZGVjb2Rlci5kZWNvZGUodmFsdWVPclJhbmdlLm1fdHlwZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0
aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTM5LDEzICsxMzksMTMgQEAgc3RhdGljIHZvaWQgYWRkU3RyaW5n
VG9TSEExKFNIQTEmIHNoYTEsIAogCiAgICAgaWYgKHN0cmluZy5pczhCaXQoKSAmJiBzdHJpbmcu
aXNBbGxBU0NJSSgpKSB7CiAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbnVsbEJ5dGUgPSAwOwotICAg
ICAgICBzaGExLmFkZEJ5dGVzKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkp
OwotICAgICAgICBzaGExLmFkZEJ5dGVzKCZudWxsQnl0ZSwgMSk7CisgICAgICAgIHNoYTEuYWRk
Qnl0ZXMoU3BhbiB7IHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkgfSk7Cisg
ICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZudWxsQnl0ZSwgMSB9KTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIGF1dG8gdXRmOCA9IHN0cmluZy51dGY4KCk7Ci0gICAgc2hhMS5h
ZGRCeXRlcyh1dGY4LmRhdGFBc1VJbnQ4UHRyKCksIHV0ZjgubGVuZ3RoKCkgKyAxKTsgLy8gSW5j
bHVkZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUuCisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgdXRm
OC5kYXRhQXNVSW50OFB0cigpLCB1dGY4Lmxlbmd0aCgpICsgMSB9KTsgLy8gSW5jbHVkZSB0ZXJt
aW5hdGluZyBudWxsIGJ5dGUuCiB9CiAKIFN0cmluZyBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVy
OjpoYXNoU3RyaW5nV2l0aFNhbHQoY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgU3RyaW5nJiBoYXNo
U2FsdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3Jl
ZGVudGlhbEJhc2UuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsOCAr
OTcsOSBAQCBib29sIENyZWRlbnRpYWxCYXNlOjpjb21wYXJlKGNvbnN0IENyZWRlCiAKIFN0cmlu
ZyBDcmVkZW50aWFsQmFzZTo6c2VyaWFsaXphdGlvbkZvckJhc2ljQXV0aG9yaXphdGlvbkhlYWRl
cigpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6IEFkZCBtYWtlU3RyaW5nIHZhcmlhbnQgdGhhdCBj
cmVhdGVzIGEgdXRmOCBidWZmZXIgZGlyZWN0bHkuCiAgICAgYXV0byBjcmVkZW50aWFsU3RyaW5n
RGF0YSA9IG1ha2VTdHJpbmcobV91c2VyLCAnOicsIG1fcGFzc3dvcmQpLnV0ZjgoKTsKLSAgICBy
ZXR1cm4gbWFrZVN0cmluZygiQmFzaWMgIiwgYmFzZTY0RW5jb2RlZChjcmVkZW50aWFsU3RyaW5n
RGF0YSkpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCJCYXNpYyAiLCBiYXNlNjRFbmNvZGVkKGNy
ZWRlbnRpYWxTdHJpbmdEYXRhLmJ5dGVzKCkpKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9D
Rk5ldC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2YvQ2VydGlmaWNhdGVJbmZvQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAs
NyArMjEwLDcgQEAgc3RhdGljIHZvaWQgZW5jb2RlQ0ZEYXRhKEVuY29kZXImIGVuY29kZQogICAg
IGNvbnN0IHVpbnQ4X3QqIGJ5dGVQdHIgPSBDRkRhdGFHZXRCeXRlUHRyKGRhdGEpOwogCiAgICAg
ZW5jb2RlciA8PCBsZW5ndGg7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYnl0
ZVB0ciwgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZp
eGVkTGVuZ3RoRGF0YShTcGFuIHsgYnl0ZVB0ciwgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgp
IH0pOwogfQogCiBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4gZGVj
b2RlQ0ZEYXRhKERlY29kZXImIGRlY29kZXIpCkBAIC0yMjUsNyArMjI1LDcgQEAgc3RhdGljIHN0
ZDo6b3B0aW9uYWw8UmV0YWluUHRyPENGRGF0YVJlZgogICAgIGlmICghcG9pbnRlcikKICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0
ZShudWxscHRyLCBwb2ludGVyLCAqc2l6ZSkpOworICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNy
ZWF0ZShudWxscHRyLCByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwb2ludGVyKSwg
KnNpemUpKTsKIH0KIAogI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlRW50cnkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ2Fj
aGVFbnRyeS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9DdXJsQ2FjaGVFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMiw3
ICsyMTIsNyBAQCB2b2lkIEN1cmxDYWNoZUVudHJ5OjpkaWRGaW5pc2hMb2FkaW5nKCkKIHZvaWQg
Q3VybENhY2hlRW50cnk6OmdlbmVyYXRlQmFzZUZpbGVuYW1lKGNvbnN0IENTdHJpbmcmIHVybCkK
IHsKICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyh1cmwuZGF0YUFzVUludDhQdHIo
KSwgdXJsLmxlbmd0aCgpKTsKKyAgICBzaGExLmFkZEJ5dGVzKHVybC5ieXRlcygpKTsKIAogICAg
IFNIQTE6OkRpZ2VzdCBzdW07CiAgICAgc2hhMS5jb21wdXRlSGFzaChzdW0pOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0NlcnRpZmljYXRlSW5mby5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9DZXJ0aWZpY2F0
ZUluZm8uaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL0NlcnRpZmljYXRlSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3
IEBAIHRlbXBsYXRlPD4gc3RydWN0IENvZGVyPEdSZWZQdHI8R0J5dGVBcnIKICAgICBzdGF0aWMg
dm9pZCBlbmNvZGUoRW5jb2RlciAmZW5jb2RlciwgY29uc3QgR1JlZlB0cjxHQnl0ZUFycmF5PiYg
Ynl0ZUFycmF5KQogICAgIHsKICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50MzJf
dD4oYnl0ZUFycmF5LT5sZW4pOwotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0
YShieXRlQXJyYXktPmRhdGEsIGJ5dGVBcnJheS0+bGVuKTsKKyAgICAgICAgZW5jb2Rlci5lbmNv
ZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IGJ5dGVBcnJheS0+ZGF0YSwgYnl0ZUFycmF5LT5sZW4g
fSk7CiAgICAgfQogCiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8R1JlZlB0cjxHQnl0ZUFycmF5
Pj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCkBAIC04Nyw3ICs4Nyw3IEBAIHRlbXBsYXRlPD4g
c3RydWN0IENvZGVyPEdSZWZQdHI8R0J5dGVBcnIKIAogICAgICAgICBHUmVmUHRyPEdCeXRlQXJy
YXk+IGJ5dGVBcnJheSA9IGFkb3B0R1JlZihnX2J5dGVfYXJyYXlfc2l6ZWRfbmV3KCpzaXplKSk7
CiAgICAgICAgIGdfYnl0ZV9hcnJheV9zZXRfc2l6ZShieXRlQXJyYXkuZ2V0KCksICpzaXplKTsK
LSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShieXRlQXJyYXktPmRh
dGEsICpzaXplKSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShT
cGFuIHsgYnl0ZUFycmF5LT5kYXRhLCAqc2l6ZSB9KSkKICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CiAgICAgICAgIHJldHVybiBieXRlQXJyYXk7CiAgICAgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAJKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIGJvb2wgU1FMaXRlU3RhdGVtZW50
OjpleGVjdXRlQ29tbWFuZCgpCiAgICAgcmV0dXJuIHN0ZXAoKSA9PSBTUUxJVEVfRE9ORTsKIH0K
IAotaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IoaW50IGluZGV4LCBTcGFuPGNvbnN0IHVp
bnQ4X3Q+IGJsb2IpCitpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kQmxvYihpbnQgaW5kZXgsIFNw
YW48Y29uc3Qgc3RkOjpieXRlPiBibG9iKQogewogICAgIEFTU0VSVChpbmRleCA+IDApOwogICAg
IEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpIDw9IGJpbmRQYXJhbWV0ZXJDb3Vu
dCgpKTsKQEAgLTk1LDYgKzk1LDExIEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGlu
dCBpbmRleCwKICAgICByZXR1cm4gc3FsaXRlM19iaW5kX2Jsb2IobV9zdGF0ZW1lbnQsIGluZGV4
LCBibG9iLmRhdGEoKSwgYmxvYi5zaXplKCksIFNRTElURV9UUkFOU0lFTlQpOwogfQogCitpbnQg
U1FMaXRlU3RhdGVtZW50OjpiaW5kQmxvYihpbnQgaW5kZXgsIFNwYW48Y29uc3QgdWludDhfdD4g
YmxvYikKK3sKKyAgICByZXR1cm4gYmluZEJsb2IoaW5kZXgsIGFzQnl0ZXMoYmxvYikpOworfQor
CiBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kQmxvYihpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYg
dGV4dCkKIHsKICAgICAvLyBTdHJpbmc6OmNoYXJhY3RlcnMoKSByZXR1cm5zIDAgZm9yIHRoZSBl
bXB0eSBzdHJpbmcsIHdoaWNoIFNRTGl0ZQpAQCAtMTA3LDcgKzExMiw3IEBAIGludCBTUUxpdGVT
dGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwKICAgICBlbHNlCiAgICAgICAgIGNoYXJhY3Rl
cnMgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7CiAKLSAgICByZXR1cm4gYmluZEJsb2IoaW5kZXgs
IFNwYW4geyByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihjaGFyYWN0ZXJzKSwgdGV4
dC5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcikgfSk7CisgICAgcmV0dXJuIGJpbmRCbG9iKGluZGV4
LCBTcGFuIHsgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBzdGQ6OmJ5dGUqPihjaGFyYWN0ZXJzKSwg
dGV4dC5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcikgfSk7CiB9CiAKIGludCBTUUxpdGVTdGF0ZW1l
bnQ6OmJpbmRUZXh0KGludCBpbmRleCwgU3RyaW5nVmlldyB0ZXh0KQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaAkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB+
U1FMaXRlU3RhdGVtZW50KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgU1FMaXRlU3RhdGVtZW50KFNR
TGl0ZVN0YXRlbWVudCYmKTsKICAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCBpbnQgYmluZEJsb2Io
aW50IGluZGV4LCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwogICAgIFdFQkNPUkVfRVhQT1JUIGlu
dCBiaW5kQmxvYihpbnQgaW5kZXgsIFNwYW48Y29uc3QgdWludDhfdD4pOwogICAgIFdFQkNPUkVf
RVhQT1JUIGludCBiaW5kQmxvYihpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYpOwogICAgIFdFQkNP
UkVfRVhQT1JUIGludCBiaW5kVGV4dChpbnQgaW5kZXgsIFN0cmluZ1ZpZXcpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVvdGVkUHJpbnRhYmxlLmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmlu
dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxMiArNTUsNyBAQCBzdGF0aWMgc2l6ZV90
IGxlbmd0aE9mTGluZUVuZGluZ0F0SW5kZXgoCiAgICAgcmV0dXJuIDA7CiB9CiAKLVZlY3Rvcjx1
aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1
dCkKLXsKLSAgICByZXR1cm4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGlucHV0LmRhdGEoKSwgaW5w
dXQuc2l6ZSgpKTsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShj
b25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGlucHV0TGVuZ3RoKQorc3RhdGljIFZlY3Rvcjx1
aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNvZGUoY29uc3QgdWludDhfdCogaW5wdXQsIHNpemVf
dCBpbnB1dExlbmd0aCkKIHsKICAgICBWZWN0b3I8dWludDhfdD4gb3V0OwogICAgIG91dC5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KGlucHV0TGVuZ3RoKTsKQEAgLTExNiwxMiArMTExLDEyIEBAIFZl
Y3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNvZGUoY28KICAgICByZXR1cm4gb3V0Owog
fQogCi1WZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYgaW5wdXQpCitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKFNw
YW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCkKIHsKLSAgICByZXR1cm4gcXVvdGVkUHJpbnRhYmxl
RGVjb2RlKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpKTsKKyAgICByZXR1cm4gcXVvdGVkUHJp
bnRhYmxlRW5jb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0LmRhdGEo
KSksIGlucHV0LnNpemUoKSk7CiB9CiAKLVZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVE
ZWNvZGUoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGRhdGFMZW5ndGgpCitzdGF0aWMgVmVj
dG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCB1aW50OF90KiBkYXRhLCBz
aXplX3QgZGF0YUxlbmd0aCkKIHsKICAgICBWZWN0b3I8dWludDhfdD4gb3V0OwogICAgIGlmICgh
ZGF0YUxlbmd0aCkKQEAgLTE1Niw0ICsxNTEsOSBAQCBWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJp
bnRhYmxlRGVjb2RlKGNvCiAgICAgcmV0dXJuIG91dDsKIH0KIAorVmVjdG9yPHVpbnQ4X3Q+IHF1
b3RlZFByaW50YWJsZURlY29kZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCit7CisgICAg
cmV0dXJuIHF1b3RlZFByaW50YWJsZURlY29kZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCkpOworfQorCiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVvdGVkUHJpbnRhYmxlLmgJKHJldmlzaW9uIDI3
ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVvdGVkUHJpbnRhYmxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDEzICszMSwxMSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCBW
ZWN0b3I8dWludDhfdD4mKTsKLVZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNvZGUo
Y29uc3QgdWludDhfdCosIHNpemVfdCk7Ci0KLVZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFi
bGVEZWNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik7Ci1WZWN0b3I8dWludDhfdD4gcXVvdGVk
UHJpbnRhYmxlRGVjb2RlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOworVmVjdG9yPHVpbnQ4X3Q+
IHF1b3RlZFByaW50YWJsZUVuY29kZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOworVmVjdG9yPHVp
bnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
UGFzdGVib2FyZFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL1Bhc3RlYm9hcmRXaW4uY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MSw3
ICsyNTEsNyBAQCBzdGQ6Om9wdGlvbmFsPFBhc3RlYm9hcmRDdXN0b21EYXRhPiBQYXN0CiAgICAg
ICAgIGlmIChIQU5ETEUgY2JEYXRhID0gOjpHZXRDbGlwYm9hcmREYXRhKEN1c3RvbURhdGFDbGlw
Ym9hcmRGb3JtYXQpKSB7CiAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IEdsb2JhbFNpemUoY2JE
YXRhKTsKICAgICAgICAgICAgIGF1dG8gZGF0YSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihHbG9i
YWxMb2NrKGNiRGF0YSkpOwotICAgICAgICAgICAgYXV0byBjdXN0b21EYXRhID0gUGFzdGVib2Fy
ZEN1c3RvbURhdGE6OmZyb21QZXJzaXN0ZW5jZURlY29kZXIoe2RhdGEsIHNpemV9KTsKKyAgICAg
ICAgICAgIGF1dG8gY3VzdG9tRGF0YSA9IFBhc3RlYm9hcmRDdXN0b21EYXRhOjpmcm9tUGVyc2lz
dGVuY2VEZWNvZGVyKFNwYW4geyBkYXRhLCBzaXplIH0pOwogCiAgICAgICAgICAgICBHbG9iYWxV
bmxvY2soY2JEYXRhKTsKICAgICAgICAgICAgIDo6Q2xvc2VDbGlwYm9hcmQoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIv
UmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDU5LDEwICs0NTksMTAgQEAgYm9vbCBSZWdpc3RyYXRpb25EYXRhYmFz
ZTo6ZG9QdXNoQ2hhbmdlcwogICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4
dCg2LCB1cGRhdGVWaWFDYWNoZVRvU3RyaW5nKGRhdGEucmVnaXN0cmF0aW9uLnVwZGF0ZVZpYUNh
Y2hlKSkgIT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRU
ZXh0KDcsIGRhdGEuc2NyaXB0VVJMLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAg
IHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRleHQoOCwgd29ya2VyVHlwZVRvU3RyaW5nKGRhdGEu
d29ya2VyVHlwZSkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50
LT5iaW5kQmxvYig5LCBTcGFuIHsgY3NwRW5jb2Rlci5idWZmZXIoKSwgY3NwRW5jb2Rlci5idWZm
ZXJTaXplKCkgfSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQt
PmJpbmRCbG9iKDksIGNzcEVuY29kZXIuYnVmZmVyKCkpICE9IFNRTElURV9PSwogICAgICAgICAg
ICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCgxMCwgZGF0YS5yZWZlcnJlclBvbGljeSkg
IT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDEx
LCBTcGFuIHsgc2NyaXB0UmVzb3VyY2VNYXBFbmNvZGVyLmJ1ZmZlcigpLCBzY3JpcHRSZXNvdXJj
ZU1hcEVuY29kZXIuYnVmZmVyU2l6ZSgpIH0pICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwg
aW5zZXJ0U3RhdGVtZW50LT5iaW5kQmxvYigxMiwgU3BhbiB7IGNlcnRpZmljYXRlSW5mb0VuY29k
ZXIuYnVmZmVyKCksIGNlcnRpZmljYXRlSW5mb0VuY29kZXIuYnVmZmVyU2l6ZSgpIH0pICE9IFNR
TElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kQmxvYigxMSwgc2Ny
aXB0UmVzb3VyY2VNYXBFbmNvZGVyLmJ1ZmZlcigpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAg
IHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoMTIsIGNlcnRpZmljYXRlSW5mb0VuY29kZXIu
YnVmZmVyKCkpICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNl
cnZpY2VXb3JrZXIsICJGYWlsZWQgdG8gc3RvcmUgcmVnaXN0cmF0aW9uIGRhdGEgaW50byByZWNv
cmRzIHRhYmxlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNl
LT5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01MTcsNyAr
NTE3LDcgQEAgU3RyaW5nIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcgogICAgICAg
ICBzdGQ6Om9wdGlvbmFsPENvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycz4gY29u
dGVudFNlY3VyaXR5UG9saWN5OwogICAgICAgICBhdXRvIGNvbnRlbnRTZWN1cml0eVBvbGljeURh
dGFTcGFuID0gc3FsLT5jb2x1bW5CbG9iQXNTcGFuKDgpOwogICAgICAgICBpZiAoY29udGVudFNl
Y3VyaXR5UG9saWN5RGF0YVNwYW4uc2l6ZSgpKSB7Ci0gICAgICAgICAgICBXVEY6OlBlcnNpc3Rl
bmNlOjpEZWNvZGVyIGNzcERlY29kZXIoY29udGVudFNlY3VyaXR5UG9saWN5RGF0YVNwYW4uZGF0
YSgpLCBjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhU3Bhbi5zaXplKCkpOworICAgICAgICAgICAg
V1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBjc3BEZWNvZGVyIHsgY29udGVudFNlY3VyaXR5UG9s
aWN5RGF0YVNwYW4gfTsKICAgICAgICAgICAgIGNzcERlY29kZXIgPj4gY29udGVudFNlY3VyaXR5
UG9saWN5OwogICAgICAgICAgICAgaWYgKCFjb250ZW50U2VjdXJpdHlQb2xpY3kpIHsKICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTZXJ2aWNlV29ya2VyLCAiUmVnaXN0cmF0aW9u
RGF0YWJhc2U6OmltcG9ydFJlY29yZHM6IEZhaWxlZCB0byBkZWNvZGUgY29udGVudFNlY3VyaXR5
UG9saWN5Iik7CkBAIC01MzAsNyArNTMwLDcgQEAgU3RyaW5nIFJlZ2lzdHJhdGlvbkRhdGFiYXNl
OjppbXBvcnRSZWNvcgogICAgICAgICBIYXNoTWFwPFVSTCwgU2VydmljZVdvcmtlckNvbnRleHRE
YXRhOjpJbXBvcnRlZFNjcmlwdD4gc2NyaXB0UmVzb3VyY2VNYXA7CiAgICAgICAgIGF1dG8gc2Ny
aXB0UmVzb3VyY2VNYXBEYXRhU3BhbiA9IHNxbC0+Y29sdW1uQmxvYkFzU3BhbigxMCk7CiAgICAg
ICAgIGlmIChzY3JpcHRSZXNvdXJjZU1hcERhdGFTcGFuLnNpemUoKSkgewotICAgICAgICAgICAg
V1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBzY3JpcHRSZXNvdXJjZU1hcERlY29kZXIoc2NyaXB0
UmVzb3VyY2VNYXBEYXRhU3Bhbi5kYXRhKCksIHNjcmlwdFJlc291cmNlTWFwRGF0YVNwYW4uc2l6
ZSgpKTsKKyAgICAgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgc2NyaXB0UmVzb3Vy
Y2VNYXBEZWNvZGVyIHsgc2NyaXB0UmVzb3VyY2VNYXBEYXRhU3BhbiB9OwogICAgICAgICAgICAg
c3RkOjpvcHRpb25hbDxIYXNoTWFwPFVSTCwgSW1wb3J0ZWRTY3JpcHRBdHRyaWJ1dGVzPj4gc2Ny
aXB0UmVzb3VyY2VNYXBXaXRob3V0U2NyaXB0czsKICAgICAgICAgICAgIHNjcmlwdFJlc291cmNl
TWFwRGVjb2RlciA+PiBzY3JpcHRSZXNvdXJjZU1hcFdpdGhvdXRTY3JpcHRzOwogICAgICAgICAg
ICAgaWYgKCFzY3JpcHRSZXNvdXJjZU1hcFdpdGhvdXRTY3JpcHRzKSB7CkBAIC01NDMsNyArNTQz
LDcgQEAgU3RyaW5nIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcgogICAgICAgICBh
dXRvIGNlcnRpZmljYXRlSW5mb0RhdGFTcGFuID0gc3FsLT5jb2x1bW5CbG9iQXNTcGFuKDExKTsK
ICAgICAgICAgc3RkOjpvcHRpb25hbDxDZXJ0aWZpY2F0ZUluZm8+IGNlcnRpZmljYXRlSW5mbzsK
IAotICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGNlcnRpZmljYXRlSW5mb0RlY29k
ZXIoY2VydGlmaWNhdGVJbmZvRGF0YVNwYW4uZGF0YSgpLCBjZXJ0aWZpY2F0ZUluZm9EYXRhU3Bh
bi5zaXplKCkpOworICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGNlcnRpZmljYXRl
SW5mb0RlY29kZXIgeyBjZXJ0aWZpY2F0ZUluZm9EYXRhU3BhbiB9OwogICAgICAgICBjZXJ0aWZp
Y2F0ZUluZm9EZWNvZGVyID4+IGNlcnRpZmljYXRlSW5mbzsKICAgICAgICAgaWYgKCFjZXJ0aWZp
Y2F0ZUluZm8pIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIs
ICJSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3JkczogRmFpbGVkIHRvIGRlY29kZSBj
ZXJ0aWZpY2F0ZUluZm8iKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9z
ZXJ2ZXIvU1dTY3JpcHRTdG9yYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93
b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHAJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTY3JpcHRTdG9y
YWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBTdHJpbmcgU1dTY3JpcHRT
dG9yYWdlOjpzaGEySGFzaChjb25zdCBTCiAgICAgYXV0byBpbnB1dFV0ZjggPSBpbnB1dC51dGY4
KCk7CiAgICAgY3J5cHRvLT5hZGRCeXRlcyhpbnB1dFV0ZjguZGF0YSgpLCBpbnB1dFV0ZjgubGVu
Z3RoKCkpOwogICAgIGF1dG8gaGFzaCA9IGNyeXB0by0+Y29tcHV0ZUhhc2goKTsKLSAgICByZXR1
cm4gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoaGFzaC5kYXRhKCksIGhhc2guc2l6ZSgpKTsKKyAg
ICByZXR1cm4gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoaGFzaCk7CiB9CiAKIFN0cmluZyBTV1Nj
cmlwdFN0b3JhZ2U6OnNoYTJIYXNoKGNvbnN0IFVSTCYgaW5wdXQpIGNvbnN0CkBAIC04Niw5ICs4
Niw5IEBAIFNjcmlwdEJ1ZmZlciBTV1NjcmlwdFN0b3JhZ2U6OnN0b3JlKGNvbnMKICAgICBhdXRv
IHNjcmlwdFBhdGggPSB0aGlzLT5zY3JpcHRQYXRoKHJlZ2lzdHJhdGlvbktleSwgc2NyaXB0VVJM
KTsKICAgICBGaWxlU3lzdGVtOjptYWtlQWxsRGlyZWN0b3JpZXMoRmlsZVN5c3RlbTo6cGFyZW50
UGF0aChzY3JpcHRQYXRoKSk7CiAKLSAgICBhdXRvIGl0ZXJhdGVPdmVyQnVmZmVyQW5kV3JpdGVE
YXRhID0gWyZdKGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCosIHNpemVfdCk+JiB3
cml0ZURhdGEpIHsKLSAgICAgICAgZm9yIChhdXRvIGl0ID0gc2NyaXB0LmJ1ZmZlcigpLT5iZWdp
bigpOyBpdCAhPSBzY3JpcHQuYnVmZmVyKCktPmVuZCgpOyArK2l0KQotICAgICAgICAgICAgd3Jp
dGVEYXRhKGl0LT5zZWdtZW50LT5kYXRhKCksIGl0LT5zZWdtZW50LT5zaXplKCkpOworICAgIGF1
dG8gaXRlcmF0ZU92ZXJCdWZmZXJBbmRXcml0ZURhdGEgPSBbJl0oY29uc3QgRnVuY3Rpb248Ym9v
bChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYgd3JpdGVEYXRhKSB7CisgICAgICAgIGZvciAoYXV0
byYgc2VnbWVudEVudHJ5IDogKnNjcmlwdC5idWZmZXIoKSkKKyAgICAgICAgICAgIHdyaXRlRGF0
YShzZWdtZW50RW50cnkuc2VnbWVudC0+Ynl0ZXMoKSk7CiAgICAgfTsKIAogICAgIGlmICghc2hv
dWxkVXNlRmlsZU1hcHBpbmcoc2NyaXB0LmJ1ZmZlcigpLT5zaXplKCkpKSB7CkBAIC05Nyw4ICs5
Nyw4IEBAIFNjcmlwdEJ1ZmZlciBTV1NjcmlwdFN0b3JhZ2U6OnN0b3JlKGNvbnMKICAgICAgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIsICJTV1NjcmlwdFN0b3JhZ2U6OnN0
b3JlOiBGYWlsdXJlIHRvIHN0b3JlICVzLCBGaWxlU3lzdGVtOjpvcGVuRmlsZSgpIGZhaWxlZCIs
IHNjcmlwdFBhdGgudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAg
ICAgICB9Ci0gICAgICAgIGl0ZXJhdGVPdmVyQnVmZmVyQW5kV3JpdGVEYXRhKFsmXShjb25zdCB1
aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgewotICAgICAgICAgICAgRmlsZVN5c3RlbTo6d3Jp
dGVUb0ZpbGUoaGFuZGxlLCBkYXRhLCBzaXplKTsKKyAgICAgICAgaXRlcmF0ZU92ZXJCdWZmZXJB
bmRXcml0ZURhdGEoWyZdKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhKSB7CisgICAgICAgICAg
ICBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShoYW5kbGUsIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUo
KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSk7CiAgICAgICAgIEZpbGVT
eXN0ZW06OmNsb3NlRmlsZShoYW5kbGUpOwpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODEg
QEAKKzIwMjEtMDYtMTEgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAg
IEFkb3B0IFNwYW4gaW4gbW9yZSBwbGFjZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIyNjg4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtXSVBdCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3Rv
cmFnZTo6Q2FjaGU6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2Fj
aGU6OmRlY29kZVJlY29yZEhlYWRlcik6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUv
Q2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9y
YWdlOjpDYWNoZXM6OnN0b3JlT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdl
OjpDYWNoZXM6OnJlYWRPcmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OmVu
Y29kZUNhY2hlTmFtZXMpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OmRlY29kZUNh
Y2hlc05hbWVzKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVE
YXRhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhOjptYXBUb0ZpbGUg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmNvbXB1dGVTSEExKToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmg6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YTo6RGF0YSk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FjaGU6OkRhdGE6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhY2hlOjpEYXRhOjphZG9wdE1hcCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlRW50cnkuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVu
dHJ5OjplbmNvZGVBc1N0b3JhZ2VSZWNvcmQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ2FjaGU6OkVudHJ5OjpkZWNvZGVTdG9yYWdlUmVjb3JkKToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ2FjaGU6Omhhc2hTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6Oktl
eTo6Y29tcHV0ZUhhc2ggY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6Oktl
eTo6Y29tcHV0ZVBhcnRpdGlvbkhhc2ggY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FjaGU6OmRlY29kZVJlY29yZE1ldGFEYXRhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
Y2hlOjplbmNvZGVSZWNvcmRNZXRhRGF0YSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FjaGU6OlN1YnJlc291cmNlc0VudHJ5OjplbmNvZGVBc1N0b3JhZ2VSZWNvcmQgY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN1YnJlc291cmNlc0VudHJ5Ojpk
ZWNvZGVTdG9yYWdlUmVjb3JkKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2Rl
ci5oOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5jcHA6CisgICAgICAg
IChJUEM6OkFyZ3VtZW50Q29kZXI8Q1N0cmluZz46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFy
Z3VtZW50Q29kZXI8Q1N0cmluZz46OmRlY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29k
ZXI8U3RyaW5nPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6ZGVjb2RlU3RyaW5nVGV4dCk6Cisg
ICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKToKKyAgICAg
ICAgKElQQzo6QXJndW1lbnRDb2RlcjxTSEExOjpEaWdlc3Q+OjpkZWNvZGUpOgorICAgICAgICAq
IFBsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oOgorICAgICAgICAoSVBDOjpTaW1wbGVBcmd1
bWVudENvZGVyOjplbmNvZGUpOgorICAgICAgICAoSVBDOjpTaW1wbGVBcmd1bWVudENvZGVyOjpk
ZWNvZGUpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9BcnJheVJlZmVyZW5jZS5oOgorICAgICAg
ICAqIFBsYXRmb3JtL0lQQy9EZWNvZGVyLmNwcDoKKyAgICAgICAgKElQQzo6RGVjb2Rlcjo6ZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvRGVjb2Rlci5oOgor
ICAgICAgICAoSVBDOjpEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAq
IFBsYXRmb3JtL0lQQy9FbmNvZGVyLmNwcDoKKyAgICAgICAgKElQQzo6RW5jb2Rlcjo6ZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvRW5jb2Rlci5oOgorICAg
ICAgICAqIFBsYXRmb3JtL0lQQy9TaGFyZWRCdWZmZXJDb3B5LmNwcDoKKyAgICAgICAgKElQQzo6
U2hhcmVkQnVmZmVyQ29weTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMv
U3RyZWFtQ29ubmVjdGlvbkVuY29kZXIuaDoKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6ZW5jb2RlU2hhcmVkQnVmZmVyKToKKyAgICAg
ICAgKElQQzo6ZGVjb2RlU2hhcmVkQnVmZmVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQ
SUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNwcDoKKyAgICAgICAgKEFQSTo6ZW5jb2RlQ29udGVudFJ1
bGVMaXN0TWV0YURhdGEpOgorICAgICAgICAoQVBJOjpnZXREYXRhKToKKyAgICAgICAgKEFQSTo6
ZGVjb2RlQ29udGVudFJ1bGVMaXN0TWV0YURhdGEpOgorICAgICAgICAoQVBJOjp3cml0ZURhdGFU
b0ZpbGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5n
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SGlzdG9yeUVudHJ5RGF0YUVuY29kZXI6Om9wZXJhdG9y
PDwpOgorICAgICAgICAoV2ViS2l0OjpIaXN0b3J5RW50cnlEYXRhRW5jb2Rlcjo6ZW5jb2RlQXJp
dGhtZXRpY1R5cGUpOgorICAgICAgICAoV2ViS2l0OjpIaXN0b3J5RW50cnlEYXRhRW5jb2Rlcjo6
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKToKKyAgICAgICAgKFdlYktpdDo6SGlzdG9yeUVudHJ5RGF0
YURlY29kZXI6Om9wZXJhdG9yPj4pOgorICAgICAgICAoV2ViS2l0OjpIaXN0b3J5RW50cnlEYXRh
RGVjb2Rlcjo6ZGVjb2RlQXJpdGhtZXRpY1R5cGUpOgorICAgICAgICAoV2ViS2l0OjpIaXN0b3J5
RW50cnlEYXRhRGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHA6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rl
c3RpbmdBUEk6OmVuY29kZVR5cGVkQXJyYXkpOgorCiAyMDIxLTA2LTExICBSeWFuIEhhZGRhZCAg
PHJ5YW5oYWRkYWRAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyBy
Mjc4NzU0LgpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Qcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudE1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmNwcAkocmV2aXNpb24gMjc4
ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJl
bWVudE1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjMsNyArMzIzLDcgQEAgdm9pZCBQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXI6OmZpcgogICAgICAgICBjcnlwdG8tPmFkZEJ5
dGVzKHB1YmxpY0tleURhdGEtPmRhdGEoKSwgcHVibGljS2V5RGF0YS0+c2l6ZSgpKTsKICAgICAg
ICAgYXV0byBwdWJsaWNLZXlEYXRhSGFzaCA9IGNyeXB0by0+Y29tcHV0ZUhhc2goKTsKIAotICAg
ICAgICBhdXRvIGtleUlEID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcocHVibGljS2V5RGF0YUhh
c2guZGF0YSgpLCBwdWJsaWNLZXlEYXRhSGFzaC5zaXplKCkpOworICAgICAgICBhdXRvIGtleUlE
ID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcocHVibGljS2V5RGF0YUhhc2gpOwogICAgICAgICBp
ZiAoa2V5SUQgIT0gYXR0cmlidXRpb24uc291cmNlVW5saW5rYWJsZVRva2VuKCktPmtleUlEQmFz
ZTY0VVJMKQogICAgICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNh
Y2hlLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2
NSw3ICs1NjUsNyBAQCBTdG9yYWdlOjpSZWNvcmQgQ2FjaGU6OmVuY29kZShjb25zdCBSZWNvCiAK
ICAgICBlbmNvZGVyLmVuY29kZUNoZWNrc3VtKCk7CiAKLSAgICBEYXRhIGhlYWRlcihlbmNvZGVy
LmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgRGF0YSBoZWFkZXIoZW5jb2Rl
ci5idWZmZXIoKSk7CiAgICAgRGF0YSBib2R5OwogICAgIFdURjo6c3dpdGNoT24ocmVjb3JkLnJl
c3BvbnNlQm9keSwgW10oY29uc3QgUmVmPFdlYkNvcmU6OkZvcm1EYXRhPiYgZm9ybURhdGEpIHsK
ICAgICAgICAgLy8gRklYTUU6IFN0b3JlIGZvcm0gZGF0YSBib2R5LgpAQCAtNjI4LDkgKzYyOCw5
IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkRPTUNhY2hlRW4KICAgICB9fTsKIH0K
IAotc3RkOjpvcHRpb25hbDxDYWNoZTo6RGVjb2RlZFJlY29yZD4gQ2FjaGU6OmRlY29kZVJlY29y
ZEhlYWRlcihjb25zdCBTdG9yYWdlOjpSZWNvcmQmIHN0b3JhZ2UpCitzdGQ6Om9wdGlvbmFsPENh
Y2hlOjpEZWNvZGVkUmVjb3JkPiBDYWNoZTo6ZGVjb2RlUmVjb3JkSGVhZGVyKGNvbnN0IFN0b3Jh
Z2U6OlJlY29yZCYgc3RvcmFnZUVudHJ5KQogewotICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29k
ZXIgZGVjb2RlcihzdG9yYWdlLmhlYWRlci5kYXRhKCksIHN0b3JhZ2UuaGVhZGVyLnNpemUoKSk7
CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyIHsgc3RvcmFnZUVudHJ5Lmhl
YWRlciB9OwogCiAgICAgc3RkOjpvcHRpb25hbDxkb3VibGU+IGluc2VydGlvblRpbWU7CiAgICAg
ZGVjb2RlciA+PiBpbnNlcnRpb25UaW1lOwpAQCAtNjUzLDE1ICs2NTMsMTUgQEAgc3RkOjpvcHRp
b25hbDxDYWNoZTo6RGVjb2RlZFJlY29yZD4gQ2FjaAogICAgIH19OwogfQogCi1zdGQ6Om9wdGlv
bmFsPFJlY29yZD4gQ2FjaGU6OmRlY29kZShjb25zdCBTdG9yYWdlOjpSZWNvcmQmIHN0b3JhZ2Up
CitzdGQ6Om9wdGlvbmFsPFJlY29yZD4gQ2FjaGU6OmRlY29kZShjb25zdCBTdG9yYWdlOjpSZWNv
cmQmIHN0b3JhZ2VFbnRyeSkKIHsKLSAgICBhdXRvIHJlc3VsdCA9IGRlY29kZVJlY29yZEhlYWRl
cihzdG9yYWdlKTsKKyAgICBhdXRvIHJlc3VsdCA9IGRlY29kZVJlY29yZEhlYWRlcihzdG9yYWdl
RW50cnkpOwogCiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CiAKICAgICBhdXRvIHJlY29yZCA9IFdURk1vdmUocmVzdWx0LT5yZWNvcmQpOwotICAgIHJlY29y
ZC5yZXNwb25zZUJvZHkgPSBXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZShzdG9yYWdlLmJv
ZHkuZGF0YSgpLCBzdG9yYWdlLmJvZHkuc2l6ZSgpKTsKKyAgICByZWNvcmQucmVzcG9uc2VCb2R5
ID0gV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUoc3RvcmFnZUVudHJ5LmJvZHkpOwogCiAg
ICAgcmV0dXJuIHJlY29yZDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
Q2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDE0ICsx
MDUsMTQgQEAgdm9pZCBDYWNoZXM6OnN0b3JlT3JpZ2luKENvbXBsZXRpb25DYWxsYgogICAgIGVu
Y29kZXIgPDwgbV9vcmlnaW4uY2xpZW50T3JpZ2luLnByb3RvY29sOwogICAgIGVuY29kZXIgPDwg
bV9vcmlnaW4uY2xpZW50T3JpZ2luLmhvc3Q7CiAgICAgZW5jb2RlciA8PCBtX29yaWdpbi5jbGll
bnRPcmlnaW4ucG9ydDsKLSAgICBtX2VuZ2luZS0+d3JpdGVGaWxlKGNhY2hlc09yaWdpbkZpbGVu
YW1lKG1fcm9vdFBhdGgpLCBEYXRhIHsgZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJT
aXplKCkgfSwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKHN0ZDo6b3B0aW9uYWw8RXJyb3I+JiYg
ZXJyb3IpIG11dGFibGUgeworICAgIG1fZW5naW5lLT53cml0ZUZpbGUoY2FjaGVzT3JpZ2luRmls
ZW5hbWUobV9yb290UGF0aCksIERhdGEgeyBlbmNvZGVyLmJ1ZmZlcigpIH0sIFtwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildIChzdGQ6Om9wdGlvbmFsPEVycm9yPiYmIGVycm9yKSBtdXRhYmxlIHsKICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShlcnJvcikpOwogICAgIH0pOwogfQogCiBz
dGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gQ2FjaGVzOjpyZWFkT3JpZ2luKGNv
bnN0IERhdGEmIGRhdGEpCiB7Ci0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVy
KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2Rl
ciBkZWNvZGVyIHsgZGF0YSB9OwogCiAgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpTZWN1cml0
eU9yaWdpbkRhdGE+IHRvcE9yaWdpbjsKICAgICBkZWNvZGVyID4+IHRvcE9yaWdpbjsKQEAgLTQw
NCwxMiArNDA0LDEzIEBAIHN0YXRpYyBpbmxpbmUgRGF0YSBlbmNvZGVDYWNoZU5hbWVzKGNvbnMK
ICAgICAgICAgZW5jb2RlciA8PCBjYWNoZS51bmlxdWVOYW1lKCk7CiAgICAgfQogCi0gICAgcmV0
dXJuIERhdGEgeyBlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSB9OworICAg
IHJldHVybiBEYXRhIHsgZW5jb2Rlci5idWZmZXIoKSB9OwogfQogCiBzdGF0aWMgaW5saW5lIEV4
cGVjdGVkPFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiwgRXJyb3I+IGRlY29kZUNh
Y2hlc05hbWVzKGNvbnN0IERhdGEmIGRhdGEpCiB7Ci0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVj
b2RlciBkZWNvZGVyKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgV1RGOjpQZXJzaXN0
ZW5jZTo6RGVjb2RlciBkZWNvZGVyIHsgZGF0YSB9OworCiAgICAgc3RkOjpvcHRpb25hbDx1aW50
NjRfdD4gY291bnQ7CiAgICAgZGVjb2RlciA+PiBjb3VudDsKICAgICBpZiAoIWNvdW50KQpJbmRl
eDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZURhdGEuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogRGF0YSBEYXRhOjptYXBUb0Zp
bGUoY29uc3QgU3RyaW5nJiBwYXRoKSBjb25zdAogewogICAgIEZpbGVTeXN0ZW06OlBsYXRmb3Jt
RmlsZUhhbmRsZSBoYW5kbGU7Ci0gICAgYXV0byBhcHBseURhdGEgPSBbJl0oY29uc3QgRnVuY3Rp
b248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIGFwcGxpZXIpIHsgYXBwbHkoYXBwbGll
cik7IH07CisgICAgYXV0byBhcHBseURhdGEgPSBbJl0oY29uc3QgRnVuY3Rpb248Ym9vbChTcGFu
PGNvbnN0IHN0ZDo6Ynl0ZT4pPiYgYXBwbGllcikgeyBhcHBseShhcHBsaWVyKTsgfTsKICAgICBh
dXRvIG1hcHBlZEZpbGUgPSBGaWxlU3lzdGVtOjptYXBUb0ZpbGUocGF0aCwgc2l6ZSgpLCBXVEZN
b3ZlKGFwcGx5RGF0YSksICZoYW5kbGUpOwogICAgIGlmICghbWFwcGVkRmlsZSkKICAgICAgICAg
cmV0dXJuIHsgfTsKQEAgLTg2LDkgKzg2LDkgQEAgRGF0YSBhZG9wdEFuZE1hcEZpbGUoRmlsZVN5
c3RlbTo6UGxhdGZvcgogU0hBMTo6RGlnZXN0IGNvbXB1dGVTSEExKGNvbnN0IERhdGEmIGRhdGEs
IGNvbnN0IFNhbHQmIHNhbHQpCiB7CiAgICAgU0hBMSBzaGExOwotICAgIHNoYTEuYWRkQnl0ZXMo
c2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKTsKLSAgICBkYXRhLmFwcGx5KFsmc2hhMV0oY29uc3Qg
dWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhkYXRh
LCBzaXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKHNhbHQpOworICAgIGRhdGEuYXBwbHkoWyZzaGEx
XShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkgeworICAgICAgICBzaGExLmFkZEJ5dGVzKGRh
dGEpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9KTsKIApJbmRleDogU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVk
ZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rpb25EaXNwYXRjaGVyLmg+
CiAjaW5jbHVkZSA8d3RmL1NIQTEuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUg
PHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCkBAIC01Miw4ICs1MywxNCBAQCBuYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIAogY2xh
c3MgRGF0YSB7CiBwdWJsaWM6CisgICAgdXNpbmcgdmFsdWVfdHlwZSA9IHVpbnQ4X3Q7CisKICAg
ICBEYXRhKCkgeyB9CiAgICAgRGF0YShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKKyAgICBEYXRh
KFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhKQorICAgICAgICA6IERhdGEocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5kYXRhKCkpLCBkYXRhLnNpemUoKSkKKyAgICB7Cisg
ICAgfQogCiAgICAgfkRhdGEoKSB7IH0KIApAQCAtNzQsMTIgKzgxLDEzIEBAIHB1YmxpYzoKIAog
ICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEoKSBjb25zdDsKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2l6ZTsgfQorCiAgICAgYm9vbCBpc01hcCgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNNYXA7IH0KICAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiB0cnlDcmVhdGVTaGFyZWRNZW1vcnko
KSBjb25zdDsKIAogICAgIERhdGEgc3VicmFuZ2Uoc2l6ZV90IG9mZnNldCwgc2l6ZV90KSBjb25z
dDsKIAotICAgIGJvb2wgYXBwbHkoY29uc3QgRnVuY3Rpb248Ym9vbCAoY29uc3QgdWludDhfdCos
IHNpemVfdCk+JikgY29uc3Q7CisgICAgYm9vbCBhcHBseShjb25zdCBGdW5jdGlvbjxib29sIChT
cGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYpIGNvbnN0OwogCiAgICAgRGF0YSBtYXBUb0ZpbGUoY29u
c3QgU3RyaW5nJiBwYXRoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0JKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlRGF0YUNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02OSwxMiArNjksMTIgQEAg
Ym9vbCBEYXRhOjppc051bGwoKSBjb25zdAogICAgIHJldHVybiAhbV9kaXNwYXRjaERhdGE7CiB9
CiAKLWJvb2wgRGF0YTo6YXBwbHkoY29uc3QgRnVuY3Rpb248Ym9vbCAoY29uc3QgdWludDhfdCos
IHNpemVfdCk+JiBhcHBsaWVyKSBjb25zdAorYm9vbCBEYXRhOjphcHBseShjb25zdCBGdW5jdGlv
bjxib29sIChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYgYXBwbGllcikgY29uc3QKIHsKICAgICBp
ZiAoIW1fc2l6ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBkaXNwYXRjaF9k
YXRhX2FwcGx5KG1fZGlzcGF0Y2hEYXRhLmdldCgpLCBbJmFwcGxpZXJdKGRpc3BhdGNoX2RhdGFf
dCwgc2l6ZV90LCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkgewotICAgICAgICByZXR1
cm4gYXBwbGllcihzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSksIHNpemUpOworICAg
ICAgICByZXR1cm4gYXBwbGllcihTcGFuIHsgc3RhdGljX2Nhc3Q8Y29uc3Qgc3RkOjpieXRlKj4o
ZGF0YSksIHNpemUgfSk7CiAgICAgfSk7CiB9CiAKQEAgLTk0LDE0ICs5NCwxMSBAQCBEYXRhIGNv
bmNhdGVuYXRlKGNvbnN0IERhdGEmIGEsIGNvbnN0IERhCiAKIERhdGEgRGF0YTo6YWRvcHRNYXAo
RmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmJiBtYXBwZWRGaWxlLCBGaWxlU3lzdGVtOjpQbGF0
Zm9ybUZpbGVIYW5kbGUgZmQpCiB7Ci0gICAgc2l6ZV90IHNpemUgPSBtYXBwZWRGaWxlLnNpemUo
KTsKLSAgICB2b2lkKiBtYXAgPSBtYXBwZWRGaWxlLmxlYWtIYW5kbGUoKTsKLSAgICBBU1NFUlQo
bWFwKTsKLSAgICBBU1NFUlQobWFwICE9IE1BUF9GQUlMRUQpOworICAgIGF1dG8gbWFwID0gbWFw
cGVkRmlsZS5sZWFrSGFuZGxlKCk7CisgICAgQVNTRVJUKG1hcC5kYXRhKCkpOworICAgIEFTU0VS
VChtYXAuZGF0YSgpICE9IE1BUF9GQUlMRUQpOwogICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShm
ZCk7Ci0gICAgYXV0byBib2R5TWFwID0gYWRvcHRPU09iamVjdChkaXNwYXRjaF9kYXRhX2NyZWF0
ZShtYXAsIHNpemUsIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJ
T1JJVFlfREVGQVVMVCwgMCksIFttYXAsIHNpemVdIHsKLSAgICAgICAgbXVubWFwKG1hcCwgc2l6
ZSk7Ci0gICAgfSkpOworICAgIGF1dG8gYm9keU1hcCA9IGFkb3B0T1NPYmplY3QoZGlzcGF0Y2hf
ZGF0YV9jcmVhdGUobWFwLmRhdGEoKSwgbWFwLnNpemUoKSwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9x
dWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9ERUZBVUxULCAwKSwgRElTUEFUQ0hfREFUQV9E
RVNUUlVDVE9SX01VTk1BUCkpOwogICAgIHJldHVybiB7IFdURk1vdmUoYm9keU1hcCksIERhdGE6
OkJhY2tpbmc6Ok1hcCB9OwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZURhdGFHTGliLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFHTGliLmNwcAkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVEYXRhR0xpYi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDE0ICs3MywxNCBAQCBib29s
IERhdGE6OmlzTnVsbCgpIGNvbnN0CiAgICAgcmV0dXJuICFtX2J1ZmZlcjsKIH0KIAotYm9vbCBE
YXRhOjphcHBseShjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYg
YXBwbGllcikgY29uc3QKK2Jvb2wgRGF0YTo6YXBwbHkoY29uc3QgRnVuY3Rpb248Ym9vbChTcGFu
PGNvbnN0IHN0ZDo6Ynl0ZT4pPiYgYXBwbGllcikgY29uc3QKIHsKICAgICBpZiAoIW1fc2l6ZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgZ3NpemUgbGVuZ3RoOwogICAgIGNvbnN0IGF1
dG8qIGRhdGEgPSBnX2J5dGVzX2dldF9kYXRhKG1fYnVmZmVyLmdldCgpLCAmbGVuZ3RoKTsKLSAg
ICByZXR1cm4gYXBwbGllcihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwg
bGVuZ3RoKTsKKyAgICByZXR1cm4gYXBwbGllcihTcGFuIHsgc3RhdGljX2Nhc3Q8Y29uc3Qgc3Rk
OjpieXRlKj4oZGF0YSksIGxlbmd0aCB9KTsKIH0KIAogRGF0YSBEYXRhOjpzdWJyYW5nZShzaXpl
X3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkgY29uc3QKQEAgLTExNSwxMiArMTE1LDExIEBAIHN0cnVj
dCBNYXBXcmFwcGVyIHsKIAogICAgIH5NYXBXcmFwcGVyKCkKICAgICB7Ci0gICAgICAgIG11bm1h
cChtYXAsIHNpemUpOworICAgICAgICBGaWxlU3lzdGVtOjp1bm1hcFZpZXdPZkZpbGUobWFwKTsK
ICAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGZpbGVEZXNjcmlwdG9yKTsKICAgICB9CiAK
LSAgICB2b2lkKiBtYXA7Ci0gICAgc2l6ZV90IHNpemU7CisgICAgU3BhbjxzdGQ6OmJ5dGU+IG1h
cDsKICAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZURlc2NyaXB0b3I7CiB9
OwogCkBAIC0xMzEsMTIgKzEzMCwxMSBAQCBzdGF0aWMgdm9pZCBkZWxldGVNYXBXcmFwcGVyKE1h
cFdyYXBwZXIqCiAKIERhdGEgRGF0YTo6YWRvcHRNYXAoRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURh
dGEmJiBtYXBwZWRGaWxlLCBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmQpCiB7Ci0g
ICAgc2l6ZV90IHNpemUgPSBtYXBwZWRGaWxlLnNpemUoKTsKLSAgICB2b2lkKiBtYXAgPSBtYXBw
ZWRGaWxlLmxlYWtIYW5kbGUoKTsKLSAgICBBU1NFUlQobWFwKTsKLSAgICBBU1NFUlQobWFwICE9
IE1BUF9GQUlMRUQpOwotICAgIE1hcFdyYXBwZXIqIHdyYXBwZXIgPSBuZXcgTWFwV3JhcHBlciB7
IG1hcCwgc2l6ZSwgZmQgfTsKLSAgICByZXR1cm4geyBhZG9wdEdSZWYoZ19ieXRlc19uZXdfd2l0
aF9mcmVlX2Z1bmMobWFwLCBzaXplLCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5Pihk
ZWxldGVNYXBXcmFwcGVyKSwgd3JhcHBlcikpLCBmZCB9OworICAgIGF1dG8gbWFwID0gbWFwcGVk
RmlsZS5sZWFrSGFuZGxlKCk7CisgICAgQVNTRVJUKG1hcC5kYXRhKCkpOworICAgIEFTU0VSVCht
YXAuZGF0YSgpICE9IE1BUF9GQUlMRUQpOworICAgIE1hcFdyYXBwZXIqIHdyYXBwZXIgPSBuZXcg
TWFwV3JhcHBlciB7IG1hcCwgZmQgfTsKKyAgICByZXR1cm4geyBhZG9wdEdSZWYoZ19ieXRlc19u
ZXdfd2l0aF9mcmVlX2Z1bmMobWFwLmRhdGEoKSwgbWFwLnNpemUoKSwgcmVpbnRlcnByZXRfY2Fz
dDxHRGVzdHJveU5vdGlmeT4oZGVsZXRlTWFwV3JhcHBlciksIHdyYXBwZXIpKSwgZmQgfTsKIH0K
IAogUmVmUHRyPFNoYXJlZE1lbW9yeT4gRGF0YTo6dHJ5Q3JlYXRlU2hhcmVkTWVtb3J5KCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
RW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTksMTAgKzk5LDEwIEBAIFN0b3JhZ2U6OlJlY29yZCBFbnRyeTo6ZW5jb2RlQXNT
dG9yYWdlUmUKICAgICAKICAgICBlbmNvZGVyLmVuY29kZUNoZWNrc3VtKCk7CiAKLSAgICBEYXRh
IGhlYWRlcihlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgRGF0
YSBoZWFkZXIgeyBlbmNvZGVyLmJ1ZmZlcigpIH07CiAgICAgRGF0YSBib2R5OwogICAgIGlmICht
X2J1ZmZlcikKLSAgICAgICAgYm9keSA9IHsgbV9idWZmZXItPmRhdGEoKSwgbV9idWZmZXItPnNp
emUoKSB9OworICAgICAgICBib2R5ID0geyBtX2J1ZmZlci0+Ynl0ZXMoKSB9OwogCiAgICAgcmV0
dXJuIHsgbV9rZXksIG1fdGltZVN0YW1wLCBoZWFkZXIsIGJvZHksIHsgfSB9OwogfQpAQCAtMTEx
LDcgKzExMSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gRW50cnk6OmRlY29kZVN0b3IKIHsK
ICAgICBhdXRvIGVudHJ5ID0gbWFrZVVuaXF1ZTxFbnRyeT4oc3RvcmFnZUVudHJ5KTsKIAotICAg
IFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihzdG9yYWdlRW50cnkuaGVhZGVyLmRh
dGEoKSwgc3RvcmFnZUVudHJ5LmhlYWRlci5zaXplKCkpOworICAgIFdURjo6UGVyc2lzdGVuY2U6
OkRlY29kZXIgZGVjb2RlciB7IHN0b3JhZ2VFbnRyeS5oZWFkZXIgfTsKICAgICBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwogICAgIGlmICghV2ViQ29yZTo6UmVzb3VyY2VSZXNw
b25zZTo6ZGVjb2RlKGRlY29kZXIsIHJlc3BvbnNlKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CkBAIC0xOTEsNyArMTkxLDcgQEAgdm9pZCBFbnRyeTo6aW5pdGlhbGl6ZUJ1ZmZlckZyb21TdG9y
YWdlUgogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgotICAgIG1fYnVmZmVyID0g
V2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUobV9zb3VyY2VTdG9yYWdlUmVjb3JkLmJvZHku
ZGF0YSgpLCBtX3NvdXJjZVN0b3JhZ2VSZWNvcmQuYm9keS5zaXplKCkpOworICAgIG1fYnVmZmVy
ID0gV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUobV9zb3VyY2VTdG9yYWdlUmVjb3JkLmJv
ZHkpOwogfQogCiBXZWJDb3JlOjpTaGFyZWRCdWZmZXIqIEVudHJ5OjpidWZmZXIoKSBjb25zdApJ
bmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlS2V5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
OCwxMyArODgsMTMgQEAgc3RhdGljIHZvaWQgaGFzaFN0cmluZyhTSEExJiBzaGExLCBjb25zdAog
CiAgICAgaWYgKHN0cmluZy5pczhCaXQoKSAmJiBzdHJpbmcuaXNBbGxBU0NJSSgpKSB7CiAgICAg
ICAgIGNvbnN0IHVpbnQ4X3QgbnVsbEJ5dGUgPSAwOwotICAgICAgICBzaGExLmFkZEJ5dGVzKHN0
cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAgICAgICBzaGExLmFkZEJ5
dGVzKCZudWxsQnl0ZSwgMSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IHN0cmluZy5j
aGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkgfSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMo
U3BhbiB7ICZudWxsQnl0ZSwgMSB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRv
IGNTdHJpbmcgPSBzdHJpbmcudXRmOCgpOwogICAgIC8vIEluY2x1ZGUgdGVybWluYXRpbmcgbnVs
bCBieXRlLgotICAgIHNoYTEuYWRkQnl0ZXMoY1N0cmluZy5kYXRhQXNVSW50OFB0cigpLCBjU3Ry
aW5nLmxlbmd0aCgpICsgMSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgY1N0cmluZy5kYXRh
QXNVSW50OFB0cigpLCBjU3RyaW5nLmxlbmd0aCgpICsgMSB9KTsKIH0KIAogS2V5OjpIYXNoVHlw
ZSBLZXk6OmNvbXB1dGVIYXNoKGNvbnN0IFNhbHQmIHNhbHQpIGNvbnN0CkBAIC0xMDIsNyArMTAy
LDcgQEAgS2V5OjpIYXNoVHlwZSBLZXk6OmNvbXB1dGVIYXNoKGNvbnN0IFNhbAogICAgIC8vIFdl
IGRvbid0IHJlYWxseSBuZWVkIGEgY3J5cHRvZ3JhcGhpYyBoYXNoLiBUaGUga2V5IGlzIGFsd2F5
cyB2ZXJpZmllZCBhZ2FpbnN0IHRoZSBlbnRyeSBoZWFkZXIuCiAgICAgLy8gU0hBMSBqdXN0IGhh
cHBlbnMgdG8gYmUgc3VpdGFibHkgc2l6ZWQsIGZhc3QgYW5kIGF2YWlsYWJsZS4KICAgICBTSEEx
IHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhzYWx0LmRhdGEoKSwgc2FsdC5zaXplKCkpOworICAg
IHNoYTEuYWRkQnl0ZXMoc2FsdCk7CiAKICAgICBoYXNoU3RyaW5nKHNoYTEsIG1fcGFydGl0aW9u
KTsKICAgICBoYXNoU3RyaW5nKHNoYTEsIG1fdHlwZSk7CkBAIC0xMTcsNyArMTE3LDcgQEAgS2V5
OjpIYXNoVHlwZSBLZXk6OmNvbXB1dGVIYXNoKGNvbnN0IFNhbAogS2V5OjpIYXNoVHlwZSBLZXk6
OmNvbXB1dGVQYXJ0aXRpb25IYXNoKGNvbnN0IFNhbHQmIHNhbHQpIGNvbnN0CiB7CiAgICAgU0hB
MSBzaGExOwotICAgIHNoYTEuYWRkQnl0ZXMoc2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKTsKKyAg
ICBzaGExLmFkZEJ5dGVzKHNhbHQpOwogCiAgICAgaGFzaFN0cmluZyhzaGExLCBtX3BhcnRpdGlv
bik7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlU3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDU0LDggKzQ1NCw4IEBAIHN0cnVjdCBSZWNvcmRNZXRhRGF0YSB7
CiBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlUmVjb3JkTWV0YURhdGEoUmVj
b3JkTWV0YURhdGEmIG1ldGFEYXRhLCBjb25zdCBEYXRhJiBmaWxlRGF0YSkKIHsKICAgICBib29s
IHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBmaWxlRGF0YS5hcHBseShbJm1ldGFEYXRhLCAmc3VjY2Vz
c10oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgV1RGOjpQZXJz
aXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOworICAgIGZpbGVEYXRhLmFwcGx5
KFsmbWV0YURhdGEsICZzdWNjZXNzXShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkgeworICAg
ICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyBkYXRhIH07CiAgICAgICAg
IAogICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBjYWNoZVN0b3JhZ2VWZXJzaW9uOwog
ICAgICAgICBkZWNvZGVyID4+IGNhY2hlU3RvcmFnZVZlcnNpb247CkBAIC01ODYsNyArNTg2LDcg
QEAgc3RhdGljIERhdGEgZW5jb2RlUmVjb3JkTWV0YURhdGEoY29uc3QgUgogCiAgICAgZW5jb2Rl
ci5lbmNvZGVDaGVja3N1bSgpOwogCi0gICAgcmV0dXJuIERhdGEoZW5jb2Rlci5idWZmZXIoKSwg
ZW5jb2Rlci5idWZmZXJTaXplKCkpOworICAgIHJldHVybiB7IGVuY29kZXIuYnVmZmVyKCkgfTsK
IH0KIAogc3RkOjpvcHRpb25hbDxCbG9iU3RvcmFnZTo6QmxvYj4gU3RvcmFnZTo6c3RvcmVCb2R5
QXNCbG9iKFdyaXRlT3BlcmF0aW9uJiB3cml0ZU9wZXJhdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDE0ICsxMjMsMTQgQEAgU3RvcmFnZTo6UmVjb3Jk
IFN1YnJlc291cmNlc0VudHJ5OjplbmNvZAogCiAgICAgZW5jb2Rlci5lbmNvZGVDaGVja3N1bSgp
OwogCi0gICAgcmV0dXJuIHsgbV9rZXksIG1fdGltZVN0YW1wLCB7IGVuY29kZXIuYnVmZmVyKCks
IGVuY29kZXIuYnVmZmVyU2l6ZSgpIH0sIHsgfSwgeyB9fTsKKyAgICByZXR1cm4geyBtX2tleSwg
bV90aW1lU3RhbXAsIHsgZW5jb2Rlci5idWZmZXIoKSB9LCB7IH0sIHsgfX07CiB9CiAKIHN0ZDo6
dW5pcXVlX3B0cjxTdWJyZXNvdXJjZXNFbnRyeT4gU3VicmVzb3VyY2VzRW50cnk6OmRlY29kZVN0
b3JhZ2VSZWNvcmQoY29uc3QgU3RvcmFnZTo6UmVjb3JkJiBzdG9yYWdlRW50cnkpCiB7CiAgICAg
YXV0byBlbnRyeSA9IG1ha2VVbmlxdWU8U3VicmVzb3VyY2VzRW50cnk+KHN0b3JhZ2VFbnRyeSk7
CiAKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoc3RvcmFnZUVudHJ5Lmhl
YWRlci5kYXRhKCksIHN0b3JhZ2VFbnRyeS5oZWFkZXIuc2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNp
c3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyBzdG9yYWdlRW50cnkuaGVhZGVyIH07CiAgICAgc3Rk
OjpvcHRpb25hbDxWZWN0b3I8U3VicmVzb3VyY2VJbmZvPj4gc3VicmVzb3VyY2VzOwogICAgIGRl
Y29kZXIgPj4gc3VicmVzb3VyY2VzOwogICAgIGlmICghc3VicmVzb3VyY2VzKQpJbmRleDogU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2Rlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXIuaAkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2Rlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC03OSwxMyArNzksMTMgQEAgc3RydWN0IEFyZ3VtZW50Q29kZXI8VCwgdHlwZW5h
bWUgc3RkOjplbgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+CiAgICAgc3RhdGljIHZv
aWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIFQgdmFsdWUpCiAgICAgewotICAgICAgICBlbmNv
ZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3Qq
PigmdmFsdWUpLCBzaXplb2YoVCksIGFsaWdub2YoVCkpOworICAgICAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJnZhbHVlLCAxIH0pOwogICAgIH0KIAogICAgIHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPFQ+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKICAgICAg
ICAgVCByZXN1bHQ7Ci0gICAgICAgIGlmIChkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmcmVzdWx0KSwgc2l6ZW9mKFQpLCBhbGlnbm9mKFQp
KSkKKyAgICAgICAgaWYgKGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmcmVz
dWx0LCAxIH0pKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1
bWVudENvZGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
QXJndW1lbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgy
LDcgQEAgdm9pZCBBcmd1bWVudENvZGVyPENTdHJpbmc+OjplbmNvZGUoRW5jbwogCiAgICAgdWlu
dDMyX3QgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwogICAgIGVuY29kZXIgPDwgbGVuZ3RoOwot
ICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0cmluZy5kYXRhQXNVSW50OFB0cigp
LCBsZW5ndGgsIDEpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0cmluZy5i
eXRlcygpKTsKIH0KIAogV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgQXJndW1lbnRDb2RlcjxDU3Ry
aW5nPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIENTdHJpbmcmIHJlc3VsdCkKQEAgLTEwMyw3
ICsxMDMsNyBAQCBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBBcmd1bWVudENvZGVyPENTCiAKICAg
ICBjaGFyKiBidWZmZXI7CiAgICAgQ1N0cmluZyBzdHJpbmcgPSBDU3RyaW5nOjpuZXdVbmluaXRp
YWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5n
dGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1ZmZlciksIGxlbmd0aCwgMSkpCisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgYnVmZmVyLCBsZW5n
dGggfSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJlc3VsdCA9IHN0cmluZzsKQEAg
LTEyMywxMSArMTIzLDcgQEAgdm9pZCBBcmd1bWVudENvZGVyPFN0cmluZz46OmVuY29kZShFbmNv
ZAogICAgIGJvb2wgaXM4Qml0ID0gc3RyaW5nLmlzOEJpdCgpOwogCiAgICAgZW5jb2RlciA8PCBs
ZW5ndGggPDwgaXM4Qml0OwotCi0gICAgaWYgKGlzOEJpdCkKLSAgICAgICAgZW5jb2Rlci5lbmNv
ZGVGaXhlZExlbmd0aERhdGEoc3RyaW5nLmNoYXJhY3RlcnM4KCksIGxlbmd0aCAqIHNpemVvZihM
Q2hhciksIGFsaWdub2YoTENoYXIpKTsKLSAgICBlbHNlCi0gICAgICAgIGVuY29kZXIuZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHN0cmluZy5j
aGFyYWN0ZXJzMTYoKSksIGxlbmd0aCAqIHNpemVvZihVQ2hhciksIGFsaWdub2YoVUNoYXIpKTsK
KyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShzdHJpbmcuYnl0ZXMoKSk7CiB9CiB0
ZW1wbGF0ZQogdm9pZCBBcmd1bWVudENvZGVyPFN0cmluZz46OmVuY29kZTxFbmNvZGVyPihFbmNv
ZGVyJiwgY29uc3QgU3RyaW5nJik7CkBAIC0xNDMsNyArMTM5LDcgQEAgc3RhdGljIGlubGluZSBz
dGQ6Om9wdGlvbmFsPFN0cmluZz4gZGVjbwogICAgIAogICAgIENoYXJhY3RlclR5cGUqIGJ1ZmZl
cjsKICAgICBTdHJpbmcgc3RyaW5nID0gU3RyaW5nOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0
aCwgYnVmZmVyKTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1ZmZlciksIGxlbmd0aCAqIHNpemVvZihDaGFyYWN0ZXJU
eXBlKSwgYWxpZ25vZihDaGFyYWN0ZXJUeXBlKSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZp
eGVkTGVuZ3RoRGF0YShTcGFuIHsgYnVmZmVyLCBsZW5ndGggfSkpCiAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CiAgICAgCiAgICAgcmV0dXJuIHN0cmluZzsKQEAgLTE4MSwxMiArMTc3LDEy
IEBAIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIEFyZ3VtZW50Q29kZXI8U3QKIAogdm9pZCBBcmd1
bWVudENvZGVyPFNIQTE6OkRpZ2VzdD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBT
SEExOjpEaWdlc3QmIGRpZ2VzdCkKIHsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0
YShkaWdlc3QuZGF0YSgpLCBzaXplb2YoZGlnZXN0KSwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVG
aXhlZExlbmd0aERhdGEoZGlnZXN0KTsKIH0KIAogV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgQXJn
dW1lbnRDb2RlcjxTSEExOjpEaWdlc3Q+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgU0hBMTo6
RGlnZXN0JiBkaWdlc3QpCiB7Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhE
YXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpLCAxKTsKKyAgICByZXR1cm4gZGVjb2Rl
ci5kZWNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0KTsKIH0KIAogI2lmIEhBVkUoQVVESVRfVE9L
RU4pCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50
Q29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEyICs0NSwxMiBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgU2ltcGxlQXJndW1lCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rl
cj4KICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVCYgdCkK
ICAgICB7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZ0KSwgc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKKyAgICAg
ICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZ0LCAxIH0pOwogICAgIH0K
IAogICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVj
b2RlciwgVCYgdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVu
Z3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdCksIHNpemVvZihUKSwgYWxpZ25v
ZihUKSk7CisgICAgICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFu
IHsgJnQsIDEgfSk7CiAgICAgfQogfTsKIApAQCAtNjEsMTMgKzYxLDE0IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBFeHRlbnQ+IHN0cnUKICAgICB7CiAgICAgICAgIGlmICghRXh0ZW50
KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3Ro
RGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihhcnJheVJlZmVyZW5jZS5kYXRh
KCkpLCBhcnJheVJlZmVyZW5jZS5zaXplKCkgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpOworICAg
ICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgYXJyYXlSZWZlcmVuY2Uu
ZGF0YSgpLCBhcnJheVJlZmVyZW5jZS5zaXplKCkgfSk7CiAgICAgfQogICAgIHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPEFycmF5UmVmZXJlbmNlVHlwZT4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAg
ICAgewogICAgICAgICBpZiAoIUV4dGVudCkKICAgICAgICAgICAgIHJldHVybiBBcnJheVJlZmVy
ZW5jZVR5cGUoKTsKLSAgICAgICAgY29uc3QgdWludDhfdCogZGF0YSA9IGRlY29kZXIuZGVjb2Rl
Rml4ZWRMZW5ndGhSZWZlcmVuY2UoRXh0ZW50ICogc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKKwor
ICAgICAgICBjb25zdCBhdXRvKiBkYXRhID0gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aFJlZmVy
ZW5jZShFeHRlbnQgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpOwogICAgICAgICBpZiAoIWRhdGEp
CiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAgICByZXR1cm4gQXJyYXlS
ZWZlcmVuY2VUeXBlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KGRhdGEpLCBFeHRlbnQpOwpA
QCAtODIsNyArODMsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQXJndW1lbnRDb2Rl
CiAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGFycmF5UmVmZXJlbmNl
LnNpemUoKSk7CiAgICAgICAgIGlmICghYXJyYXlSZWZlcmVuY2Uuc2l6ZSgpKQogICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihhcnJheVJlZmVyZW5jZS5kYXRhKCkpLCBhcnJheVJl
ZmVyZW5jZS5zaXplKCkgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpOworICAgICAgICBlbmNvZGVy
LmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgYXJyYXlSZWZlcmVuY2UuZGF0YSgpLCBhcnJh
eVJlZmVyZW5jZS5zaXplKCkgfSk7CiAgICAgfQogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEFy
cmF5UmVmZXJlbmNlVHlwZT4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewpAQCAtOTYs
NyArOTcsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQXJndW1lbnRDb2RlCiAgICAg
ICAgIGlmIChVTkxJS0VMWShkYXRhU2l6ZS5oYXNPdmVyZmxvd2VkKCkpKQogICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgICAgICBjb25zdCB1aW50OF90KiBkYXRhID0gZGVj
b2Rlci5kZWNvZGVGaXhlZExlbmd0aFJlZmVyZW5jZShkYXRhU2l6ZSwgYWxpZ25vZihUKSk7Cisg
ICAgICAgIGNvbnN0IGF1dG8qIGRhdGEgPSBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoUmVmZXJl
bmNlKGRhdGFTaXplLCBhbGlnbm9mKFQpKTsKICAgICAgICAgaWYgKCFkYXRhKQogICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAgICAgcmV0dXJuIEFycmF5UmVmZXJlbmNlVHlw
ZShyZWludGVycHJldF9jYXN0PGNvbnN0IFQqPihkYXRhKSwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihz
aXplKSk7CkBAIC00MjMsNyArNDI0LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlu
bGluZUNhcGFjaQogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25z
dCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+
JiB2ZWN0b3IpCiAgICAgewogICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90
Pih2ZWN0b3Iuc2l6ZSgpKTsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4odmVjdG9yLmRhdGEoKSksIHZlY3Rvci5z
aXplKCkgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZp
eGVkTGVuZ3RoRGF0YSh2ZWN0b3IpOwogICAgIH0KICAgICAKICAgICBzdGF0aWMgV0FSTl9VTlVT
RURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mIHZlY3RvcikKQEAgLTQ0Niw3
ICs0NDcsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpCiAgICAg
ICAgIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0
eT4gdGVtcDsKICAgICAgICAgdGVtcC5ncm93KHNpemUpOwogCi0gICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4odGVtcC5k
YXRhKCkpLCBzaXplICogc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKSkKKyAgICAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YSh0ZW1wKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgICAgICB2ZWN0b3Iuc3dhcCh0ZW1wKTsKQEAgLTQ3Myw3ICs0NzQsNyBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpCiAgICAgICAgIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4gdmVjdG9yOwogICAg
ICAgICB2ZWN0b3IuZ3JvdyhzaXplKTsKIAotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4
ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCBz
aXplICogc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZUZpeGVkTGVuZ3RoRGF0YSh2ZWN0b3IpKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKIAogICAgICAgICByZXR1cm4gdmVjdG9yOwpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvQXJyYXlSZWZlcmVuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9BcnJheVJlZmVyZW5jZS5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL0lQQy9BcnJheVJlZmVyZW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2
ICszMCw4IEBACiAKIG5hbWVzcGFjZSBJUEMgewogCisvLyBGSVhNRTogUmVwbGFjZSB3aXRoIDx3
dGYvU3Bhbi5oPgorCiBpbmxpbmUgY29uc3RleHByIHNpemVfdCBhcnJheVJlZmVyZW5jZUR5bmFt
aWNFeHRlbnQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpOwogCiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IEV4dGVudCA9IGFycmF5UmVmZXJlbmNlRHluYW1pY0V4dGVu
dD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuY3BwCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjA2LDEzICsyMDYsMTMgQEAgYm9vbCBEZWNvZGVyOjpidWZmZXJJc0xhcmdl
RW5vdWdoVG9Db250YQogICAgIHJldHVybiBhbGlnbmVkQnVmZmVySXNMYXJnZUVub3VnaFRvQ29u
dGFpbihyb3VuZFVwVG9BbGlnbm1lbnQobV9idWZmZXJQb3MsIGFsaWdubWVudCksIG1fYnVmZmVy
LCBtX2J1ZmZlckVuZCwgc2l6ZSk7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5n
dGhEYXRhKHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50KQorYm9v
bCBEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbjxzdGQ6OmJ5dGU+IGRhdGEsIHNp
emVfdCBhbGlnbm1lbnQpCiB7Ci0gICAgaWYgKCFhbGlnbkJ1ZmZlclBvc2l0aW9uKGFsaWdubWVu
dCwgc2l6ZSkpCisgICAgaWYgKCFhbGlnbkJ1ZmZlclBvc2l0aW9uKGFsaWdubWVudCwgZGF0YS5z
aXplKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtZW1jcHkoZGF0YSwgbV9idWZm
ZXJQb3MsIHNpemUpOwotICAgIG1fYnVmZmVyUG9zICs9IHNpemU7CisgICAgbWVtY3B5KGRhdGEu
ZGF0YSgpLCBtX2J1ZmZlclBvcywgZGF0YS5zaXplKCkpOworICAgIG1fYnVmZmVyUG9zICs9IGRh
dGEuc2l6ZSgpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0lQQy9EZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvRGVjb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9EZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDEzIEBAIHB1Ymxp
YzoKICAgICBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4g
bV9idWZmZXJQb3MgIT0gbnVsbHB0cjsgfQogICAgIHZvaWQgbWFya0ludmFsaWQoKSB7IG1fYnVm
ZmVyUG9zID0gbnVsbHB0cjsgfQogCi0gICAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqIGRhdGEsIHNpemVfdCwgc2l6ZV90IGFsaWdubWVudCk7
CisgICAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48
c3RkOjpieXRlPiwgc2l6ZV90IGFsaWdubWVudCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShUJiYg
ZGF0YSwgc2l6ZV90IGFsaWdubWVudCA9IGFsaWdub2YodHlwZW5hbWUgZGVjbHR5cGUoU3Bhbihz
dGQ6OmRlY2x2YWw8VD4oKSkpOjp2YWx1ZV90eXBlKSkKKyAgICB7CisgICAgICAgIHJldHVybiBk
ZWNvZGVGaXhlZExlbmd0aERhdGEoYXNXcml0YWJsZUJ5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8
VD4oZGF0YSkgfSksIGFsaWdubWVudCk7CisgICAgfQogCiAgICAgLy8gVGhlIGRhdGEgaW4gdGhl
IHJldHVybmVkIHBvaW50ZXIgaGVyZSB3aWxsIG9ubHkgYmUgdmFsaWQgZm9yIHRoZSBsaWZldGlt
ZSBvZiB0aGUgRGVjb2RlciBvYmplY3QuCiAgICAgLy8gUmV0dXJucyBudWxscHRyIG9uIGZhaWx1
cmUuCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwMiwxMiArMjAyLDEyIEBAIHVpbnQ4X3QqIEVuY29kZXI6Omdyb3coc2l6
ZV90IGFsaWdubWVudCwKICAgICByZXR1cm4gbV9idWZmZXIgKyBhbGlnbmVkU2l6ZTsKIH0KIAot
dm9pZCBFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwg
c2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQpCit2b2lkIEVuY29kZXI6OmVuY29kZUZpeGVk
TGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSwgc2l6ZV90IGFsaWdubWVudCkK
IHsKLSAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZGF0YSkgJSBhbGln
bm1lbnQpKTsKKyAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZGF0YS5k
YXRhKCkpICUgYWxpZ25tZW50KSk7CiAKLSAgICB1aW50OF90KiBidWZmZXIgPSBncm93KGFsaWdu
bWVudCwgc2l6ZSk7Ci0gICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7CisgICAgYXV0byog
YnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQsIGRhdGEuc2l6ZSgpKTsKKyAgICBtZW1jcHkoYnVmZmVy
LCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwogfQogCiB2b2lkIEVuY29kZXI6OmFkZEF0dGFj
aG1lbnQoQXR0YWNobWVudCYmIGF0dGFjaG1lbnQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9FbmNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9J
UEMvRW5jb2Rlci5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0lQQy9FbmNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRl
IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5j
bHVkZSA8d3RmL09wdGlvblNldC5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSVBDIHsKQEAgLTYwLDcgKzYxLDEzIEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgd3JhcEZvclRlc3RpbmcoVW5pcXVlUmVmPEVuY29kZXI+JiYpOwogCi0g
ICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90
LCBzaXplX3QgYWxpZ25tZW50KTsKKyAgICB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFu
PGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSwgc2l6ZV90IGFsaWdubWVudCk7CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCBz
aXplX3QgYWxpZ25tZW50ID0gYWxpZ25vZih0eXBlbmFtZSBkZWNsdHlwZShTcGFuKHN0ZDo6ZGVj
bHZhbDxUPigpKSk6OnZhbHVlX3R5cGUpKQorICAgIHsKKyAgICAgICAgZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKGFzQnl0ZXMoU3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihkYXRhKSB9KSwgYWxpZ25tZW50
KTsKKyAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIEVuY29kZXImIG9wZXJh
dG9yPDwoVCYmIHQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TaGFyZWRCdWZm
ZXJDb3B5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TaGFy
ZWRCdWZmZXJDb3B5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvU2hhcmVkQnVmZmVyQ29weS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQz
LDcgQEAgdm9pZCBTaGFyZWRCdWZmZXJDb3B5OjplbmNvZGUoRW5jb2RlciYgZQogICAgIGlmICgh
YnVmZmVyU2l6ZSkKICAgICAgICAgcmV0dXJuOwogICAgIGZvciAoYXV0byYgc2VnbWVudCA6ICpt
X2J1ZmZlcikKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc2VnbWVudC5z
ZWdtZW50LT5kYXRhKCksIHNlZ21lbnQuc2VnbWVudC0+c2l6ZSgpLCAxKTsKKyAgICAgICAgZW5j
b2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc2VnbWVudC5zZWdtZW50LT5ieXRlcygpKTsKIH0K
IAogc3RkOjpvcHRpb25hbDxTaGFyZWRCdWZmZXJDb3B5PiBTaGFyZWRCdWZmZXJDb3B5OjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0
cmVhbUNvbm5lY3Rpb25FbmNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlvbkVuY29kZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlvbkVuY29kZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMu
aCIKICNpbmNsdWRlICJNZXNzYWdlTmFtZXMuaCIKKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIElQQyB7CkBAIC01MywyMiAr
NTQsMjggQEAgcHVibGljOgogCiAgICAgflN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyKCkgPSBkZWZh
dWx0OwogCi0gICAgYm9vbCBlbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0
YSwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQpCisgICAgYm9vbCBlbmNvZGVGaXhlZExl
bmd0aERhdGEoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEsIHNpemVfdCBhbGlnbm1lbnQpCiAg
ICAgewogICAgICAgICBzaXplX3QgYnVmZmVyUG9pbnRlciA9IHN0YXRpY19jYXN0PHNpemVfdD4o
cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9idWZmZXIgKyBtX2VuY29kZWRTaXplKSk7CiAg
ICAgICAgIHNpemVfdCBuZXdCdWZmZXJQb2ludGVyID0gcm91bmRVcFRvTXVsdGlwbGVPZihhbGln
bm1lbnQsIGJ1ZmZlclBvaW50ZXIpOwogICAgICAgICBpZiAobmV3QnVmZmVyUG9pbnRlciA8IGJ1
ZmZlclBvaW50ZXIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGludHB0cl90
IGFsaWduZWRTaXplID0gbV9lbmNvZGVkU2l6ZSArIChuZXdCdWZmZXJQb2ludGVyIC0gYnVmZmVy
UG9pbnRlcik7Ci0gICAgICAgIGlmICghcmVzZXJ2ZShhbGlnbmVkU2l6ZSwgc2l6ZSkpCisgICAg
ICAgIGlmICghcmVzZXJ2ZShhbGlnbmVkU2l6ZSwgZGF0YS5zaXplKCkpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB1aW50OF90KiBidWZmZXIgPSBtX2J1ZmZlciArIGFsaWdu
ZWRTaXplOwotICAgICAgICBtZW1jcHkoYnVmZmVyLCBkYXRhLCBzaXplKTsKLSAgICAgICAgbV9l
bmNvZGVkU2l6ZSA9IGFsaWduZWRTaXplICsgc2l6ZTsKKyAgICAgICAgYXV0byogYnVmZmVyID0g
bV9idWZmZXIgKyBhbGlnbmVkU2l6ZTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciwgZGF0YS5kYXRh
KCksIGRhdGEuc2l6ZSgpKTsKKyAgICAgICAgbV9lbmNvZGVkU2l6ZSA9IGFsaWduZWRTaXplICsg
ZGF0YS5zaXplKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CisgICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoVCYmIGRhdGEsIHNp
emVfdCBhbGlnbm1lbnQgPSBhbGlnbm9mKHR5cGVuYW1lIGRlY2x0eXBlKFNwYW4oc3RkOjpkZWNs
dmFsPFQ+KCkpKTo6dmFsdWVfdHlwZSkpCisgICAgeworICAgICAgICBlbmNvZGVGaXhlZExlbmd0
aERhdGEoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pLCBhbGlnbm1lbnQp
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgU3RyZWFtQ29ubmVjdGlv
bkVuY29kZXImIG9wZXJhdG9yPDwoVCYmIHQpCiAgICAgewogICAgICAgICBBcmd1bWVudENvZGVy
PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCB2b2lkPjo6
ZW5jb2RlKCp0aGlzLCBzdGQ6OmZvcndhcmQ8VD4odCkpOwpJbmRleDogU291cmNlL1dlYktpdC9T
aGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDQsNyArMTQ0LDcgQEAgc3RhdGljIHZvaWQgZW5jb2RlU2hhcmVkQnVmZmVy
KEVuY29kZXImIAogICAgIC8vIG92ZXIgdGhlIElQQy4gQ29ubmVjdGlvblVuaXguY3BwIGFscmVh
ZHkgdXNlcyBzaGFyZWQgbWVtb3J5IHRvIHNlbmQgYW55IElQQyBtZXNzYWdlIHRoYXQgaXMKICAg
ICAvLyB0b28gbGFyZ2UuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjA4NTcxLgogICAgIGZvciAoY29uc3QgYXV0byYgZWxlbWVudCA6ICpidWZmZXIpCi0gICAg
ICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGVsZW1lbnQuc2VnbWVudC0+ZGF0YSgp
LCBlbGVtZW50LnNlZ21lbnQtPnNpemUoKSwgMSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKGVsZW1lbnQuc2VnbWVudC0+Ynl0ZXMoKSk7CiAjZWxzZQogICAgIFNoYXJl
ZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKICAgICBhdXRvIHNoYXJlZE1lbW9yeUJ1ZmZlciA9IFNo
YXJlZE1lbW9yeTo6Y29weUJ1ZmZlcigqYnVmZmVyKTsKQEAgLTE4MCw3ICsxODAsNyBAQCBzdGF0
aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlU2hhCiAKICAgICBWZWN0b3I8dWludDhf
dD4gZGF0YTsKICAgICBkYXRhLmdyb3coYnVmZmVyU2l6ZSk7Ci0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZUZpeGVkTGVuZ3RoRGF0YShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksIDEpKQorICAgIGlm
ICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoZGF0YSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoZGF0YSkp
OwpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL0F1eGlsaWFyeVByb2Nlc3NNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL0F1eGlsaWFyeVByb2Nlc3NN
YWMubW0JKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9BdXhp
bGlhcnlQcm9jZXNzTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMjEsNyArMzIxLDcgQEAgc3Rh
dGljIFN0cmluZyBzYW5kYm94RmlsZVBhdGgoY29uc3QgU3RyaQogICAgIGNyeXB0by0+YWRkQnl0
ZXMoaGVhZGVyLmRhdGEoKSwgaGVhZGVyLmxlbmd0aCgpKTsKICAgICBhdXRvIGhhc2ggPSBjcnlw
dG8tPmNvbXB1dGVIYXNoKCk7CiAKLSAgICByZXR1cm4gbWFrZVN0cmluZyhkaXJlY3RvcnlQYXRo
LCAiL0NvbXBpbGVkU2FuZGJveCsiLCBiYXNlNjRVUkxFbmNvZGVkKGhhc2guZGF0YSgpLCBoYXNo
LnNpemUoKSkpOworICAgIHJldHVybiBtYWtlU3RyaW5nKGRpcmVjdG9yeVBhdGgsICIvQ29tcGls
ZWRTYW5kYm94KyIsIGJhc2U2NFVSTEVuY29kZWQoaGFzaCkpOwogfQogCiBzdGF0aWMgYm9vbCBl
bnN1cmVTYW5kYm94Q2FjaGVEaXJlY3RvcnkoY29uc3QgU2FuZGJveEluZm8mIGluZm8pCkluZGV4
OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vV2ViQ29yZUFyZ3VtZW50Q29kZXJzV2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzV2luLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvd2lu
L1dlYkNvcmVBcmd1bWVudENvZGVyc1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDEyICs1
MSwxMiBAQCBzdGQ6Om9wdGlvbmFsPEZvbnRBdHRyaWJ1dGVzPiBBcmd1bWVudENvCiB0ZW1wbGF0
ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPExPR0ZPTlQ+IHsKICAgICBzdGF0aWMgdm9pZCBlbmNv
ZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgTE9HRk9OVCYgbG9nRm9udCkKICAgICB7Ci0gICAg
ICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KCZsb2dGb250KSwgc2l6ZW9mIGxvZ0ZvbnQsIDEpOworICAgICAgICBlbmNvZGVy
LmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJmxvZ0ZvbnQsIDEgfSwgMSk7CiAgICAgfQog
ICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPExPR0ZPTlQ+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQogICAgIHsKICAgICAgICAgTE9HRk9OVCBsb2dGb250OwotICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZsb2dGb250
KSwgc2l6ZW9mKGxvZ0ZvbnQpLCAxKSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVk
TGVuZ3RoRGF0YShTcGFuIHsgJmxvZ0ZvbnQsIDEgfSwgMSkpCiAgICAgICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwogICAgICAgICByZXR1cm4gbG9nRm9udDsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RT
dG9yZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSwxOCAr
MTMxLDIwIEBAIHN0YXRpYyBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YSBlbmNvZGUKICAgICBl
bmNvZGVyIDw8IG1ldGFEYXRhLmNvbmRpdGlvbmVkRmlsdGVyc0J5dGVjb2RlU2l6ZTsKICAgICBl
bmNvZGVyIDw8IG1ldGFEYXRhLmNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbjsKIAotICAgIEFT
U0VSVChlbmNvZGVyLmJ1ZmZlclNpemUoKSA9PSBDb250ZW50UnVsZUxpc3RGaWxlSGVhZGVyU2l6
ZSk7Ci0gICAgcmV0dXJuIFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhKGVuY29kZXIuYnVmZmVy
KCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICBBU1NFUlQoZW5jb2Rlci5idWZmZXIoKS5z
aXplKCkgPT0gQ29udGVudFJ1bGVMaXN0RmlsZUhlYWRlclNpemUpOworICAgIHJldHVybiBXZWJL
aXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YSB7IGVuY29kZXIuYnVmZmVyKCkgfTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gdm9pZCBnZXREYXRhKGNvbnN0IFQmLCBjb25zdCBGdW5jdGlvbjxib29s
KGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYpOwotdGVtcGxhdGU8PiB2b2lkIGdldERhdGEoY29u
c3QgV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGEmIGRhdGEsIGNvbnN0IEZ1bmN0aW9uPGJvb2wo
Y29uc3QgdWludDhfdCosIHNpemVfdCk+JiBmdW5jdGlvbikKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHZvaWQgZ2V0RGF0YShjb25zdCBUJiwgY29uc3QgRnVuY3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0
ZDo6Ynl0ZT4pPiYpOworCit0ZW1wbGF0ZTw+IHZvaWQgZ2V0RGF0YShjb25zdCBXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6RGF0YSYgZGF0YSwgY29uc3QgRnVuY3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0
ZDo6Ynl0ZT4pPiYgZnVuY3Rpb24pCiB7CiAgICAgZGF0YS5hcHBseShmdW5jdGlvbik7CiB9Ci10
ZW1wbGF0ZTw+IHZvaWQgZ2V0RGF0YShjb25zdCBXZWJDb3JlOjpTaGFyZWRCdWZmZXImIGRhdGEs
IGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCosIHNpemVfdCk+JiBmdW5jdGlvbikK
KwordGVtcGxhdGU8PiB2b2lkIGdldERhdGEoY29uc3QgV2ViQ29yZTo6U2hhcmVkQnVmZmVyJiBk
YXRhLCBjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+JiBmdW5jdGlv
bikKIHsKLSAgICBmdW5jdGlvbihkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOworICAgIGZ1bmN0
aW9uKGRhdGEuYnl0ZXMoKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC0xNTAsMTMg
KzE1MiwxMyBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxDb250ZW50UnVsZUxpc3RNZXRhCiB7CiAg
ICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CiAgICAgQ29udGVudFJ1bGVMaXN0TWV0YURhdGEgbWV0
YURhdGE7Ci0gICAgZ2V0RGF0YShmaWxlRGF0YSwgWyZtZXRhRGF0YSwgJnN1Y2Nlc3MsICZmaWxl
RGF0YV0oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKKyAgICBnZXREYXRhKGZp
bGVEYXRhLCBbJm1ldGFEYXRhLCAmc3VjY2VzcywgJmZpbGVEYXRhXShTcGFuPGNvbnN0IHN0ZDo6
Ynl0ZT4gZGF0YSkgewogICAgICAgICAvLyBUaGUgZmlsZSBkYXRhIHNob3VsZCBiZSBtYXBwZWQg
aW50byBvbmUgY29udGludW91cyBtZW1vcnkgc2VnbWVudCBzbyB0aGUgc2l6ZQogICAgICAgICAv
LyBwYXNzZWQgdG8gdGhlIGFwcGxpZXIgc2hvdWxkIGFsd2F5cyBlcXVhbCB0aGUgZGF0YSBzaXpl
LgotICAgICAgICBpZiAoc2l6ZSAhPSBmaWxlRGF0YS5zaXplKCkpCisgICAgICAgIGlmIChkYXRh
LnNpemUoKSAhPSBmaWxlRGF0YS5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOwor
ICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyBkYXRhIH07CiAgICAg
ICAgIAogICAgICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiB2ZXJzaW9uOwogICAgICAgICBk
ZWNvZGVyID4+IHZlcnNpb247CkBAIC0yMjgsOCArMjMwLDggQEAgc3RhdGljIHN0ZDo6b3B0aW9u
YWw8TWFwcGVkRGF0YT4gb3BlbkFuZAogc3RhdGljIGJvb2wgd3JpdGVEYXRhVG9GaWxlKGNvbnN0
IFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhJiBmaWxlRGF0YSwgUGxhdGZvcm1GaWxlSGFuZGxl
IGZkKQogewogICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7Ci0gICAgZmlsZURhdGEuYXBwbHkoW2Zk
LCAmc3VjY2Vzc10oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAg
aWYgKHdyaXRlVG9GaWxlKGZkLCBkYXRhLCBzaXplKSA9PSAtMSkgeworICAgIGZpbGVEYXRhLmFw
cGx5KFtmZCwgJnN1Y2Nlc3NdKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhKSB7CisgICAgICAg
IGlmICh3cml0ZVRvRmlsZShmZCwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKSA9PSAtMSkgewog
ICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2Vi
QXV0aGVudGljYXRpb25QYW5lbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQkocmV2aXNpb24gMjc4
ODA5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRp
Y2F0aW9uUGFuZWwubW0JKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDcgQEAKICNpbXBvcnQg
PHBhbC9jcnlwdG8vQ3J5cHRvRGlnZXN0Lmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KICNp
bXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9TcGFuQ29jb2EuaD4K
ICNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQvQmFz
ZTY0Lmg+CiAKQEAgLTcwLDcgKzcxLDcgQEAgc3RhdGljIFJldGFpblB0cjxOU0RhdGE+IHByb2R1
Y2VDbGllbnREYQogICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6QCJ3ZWJhdXRobi5nZXQi
IGZvcktleTpAInR5cGUiXTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIFtkaWN0aW9uYXJ5
IHNldE9iamVjdDpiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhjaGFsbGVuZ2UuYnl0ZXMsIGNoYWxs
ZW5nZS5sZW5ndGgpIGZvcktleTpAImNoYWxsZW5nZSJdOworICAgIFtkaWN0aW9uYXJ5IHNldE9i
amVjdDpiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhhc0J5dGVzKGNoYWxsZW5nZSkpIGZvcktleTpA
ImNoYWxsZW5nZSJdOwogICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpvcmlnaW4gZm9yS2V5OkAi
b3JpZ2luIl07CiAKICAgICByZXR1cm4gW05TSlNPTlNlcmlhbGl6YXRpb24gZGF0YVdpdGhKU09O
T2JqZWN0OmRpY3Rpb25hcnkuZ2V0KCkgb3B0aW9uczpOU0pTT05Xcml0aW5nU29ydGVkS2V5cyBl
cnJvcjpuaWxdOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRp
b24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsQXV0aGVudGljYXRvci5t
bQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVu
dGljYXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04
NSw3ICs4NSw3IEBAIHN0YXRpYyBpbmxpbmUgSGFzaFNldDxTdHJpbmc+IHByb2R1Y2VIYXMKICAg
ICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0OwogICAgIGZvciAoYXV0byYgY3JlZGVudGlhbERlc2Ny
aXB0b3IgOiBjcmVkZW50aWFsRGVzY3JpcHRvcnMpIHsKICAgICAgICAgaWYgKGVtcHR5VHJhbnNw
b3J0c09yQ29udGFpbihjcmVkZW50aWFsRGVzY3JpcHRvci50cmFuc3BvcnRzLCBBdXRoZW50aWNh
dG9yVHJhbnNwb3J0OjpJbnRlcm5hbCkgJiYgY3JlZGVudGlhbERlc2NyaXB0b3IudHlwZSA9PSBQ
dWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5ICYmIGNyZWRlbnRpYWxEZXNjcmlwdG9y
LmlkVmVjdG9yLnNpemUoKSA9PSBjcmVkZW50aWFsSWRMZW5ndGgpCi0gICAgICAgICAgICByZXN1
bHQuYWRkKGJhc2U2NEVuY29kZVRvU3RyaW5nKGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9y
LmRhdGEoKSwgY3JlZGVudGlhbERlc2NyaXB0b3IuaWRWZWN0b3Iuc2l6ZSgpKSk7CisgICAgICAg
ICAgICByZXN1bHQuYWRkKGJhc2U2NEVuY29kZVRvU3RyaW5nKGNyZWRlbnRpYWxEZXNjcmlwdG9y
LmlkVmVjdG9yKSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0yMzMsNyArMjMz
LDcgQEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6Om1ha2VDcmVkZW50aWFsKAogICAgICAgICBp
ZiAobm90Rm91bmQgIT0gbV9leGlzdGluZ0NyZWRlbnRpYWxzLmZpbmRNYXRjaGluZyhbJmV4Y2x1
ZGVDcmVkZW50aWFsSWRzXSAoYXV0byYgY3JlZGVudGlhbCkgewogICAgICAgICAgICAgYXV0byog
cmF3SWQgPSBjcmVkZW50aWFsLT5yYXdJZCgpOwogICAgICAgICAgICAgQVNTRVJUKHJhd0lkKTsK
LSAgICAgICAgICAgIHJldHVybiBleGNsdWRlQ3JlZGVudGlhbElkcy5jb250YWlucyhiYXNlNjRF
bmNvZGVUb1N0cmluZyhyYXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgpKSk7CisgICAg
ICAgICAgICByZXR1cm4gZXhjbHVkZUNyZWRlbnRpYWxJZHMuY29udGFpbnMoYmFzZTY0RW5jb2Rl
VG9TdHJpbmcocmF3SWQtPmJ5dGVzKCkpKTsKICAgICAgICAgfSkpIHsKICAgICAgICAgICAgIHJl
Y2VpdmVFeGNlcHRpb24oeyBOb3RBbGxvd2VkRXJyb3IsICJBdCBsZWFzdCBvbmUgY3JlZGVudGlh
bCBtYXRjaGVzIGFuIGVudHJ5IG9mIHRoZSBleGNsdWRlQ3JlZGVudGlhbHMgbGlzdCBpbiB0aGUg
cGxhdGZvcm0gYXR0YWNoZWQgYXV0aGVudGljYXRvci4iX3MgfSwgV2ViQXV0aGVudGljYXRpb25T
dGF0dXM6OkxBRXhjbHVkZUNyZWRlbnRpYWxzTWF0Y2hlZCk7CiAgICAgICAgICAgICByZXR1cm47
CkBAIC01MTAsNyArNTEwLDcgQEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6OmdldEFzc2VydGlv
bigpCiAgICAgICAgIH0KIAogICAgICAgICBhdXRvKiByYXdJZCA9IGNyZWRlbnRpYWwtPnJhd0lk
KCk7Ci0gICAgICAgIGlmIChhbGxvd0NyZWRlbnRpYWxJZHMuY29udGFpbnMoYmFzZTY0RW5jb2Rl
VG9TdHJpbmcocmF3SWQtPmRhdGEoKSwgcmF3SWQtPmJ5dGVMZW5ndGgoKSkpKQorICAgICAgICBp
ZiAoYWxsb3dDcmVkZW50aWFsSWRzLmNvbnRhaW5zKGJhc2U2NEVuY29kZVRvU3RyaW5nKHJhd0lk
LT5ieXRlcygpKSkpCiAgICAgICAgICAgICBhc3NlcnRpb25SZXNwb25zZXMudW5jaGVja2VkQXBw
ZW5kKGNyZWRlbnRpYWwuY29weVJlZigpKTsKICAgICB9CiAgICAgaWYgKGFzc2VydGlvblJlc3Bv
bnNlcy5pc0VtcHR5KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhl
bnRpY2F0aW9uL01vY2svTW9ja0xvY2FsQ29ubmVjdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tMb2NhbENvbm5l
Y3Rpb24ubW0JKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0xvY2FsQ29ubmVjdGlvbi5tbQkod29ya2luZyBjb3B5
KQpAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgTW9ja0xvY2FsQ29ubmVjdGlvbjo6ZmlsdGVyUmVz
cG9uc2UKICAgICBmb3IgKDsgaXRyICE9IHJlc3BvbnNlcy5lbmQoKTsgKytpdHIpIHsKICAgICAg
ICAgYXV0byogcmF3SWQgPSBpdHItPmdldCgpLnJhd0lkKCk7CiAgICAgICAgIEFTU0VSVChyYXdJ
ZCk7Ci0gICAgICAgIGF1dG8gcmF3SWRCYXNlNjQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhyYXdJ
ZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgYXV0byByYXdJZEJhc2U2
NCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKHJhd0lkLT5ieXRlcygpKTsKICAgICAgICAgaWYgKHJh
d0lkQmFzZTY0ID09IHByZWZlcnJlZENyZWRlbnRpYWxJZEJhc2U2NCkKICAgICAgICAgICAgIGJy
ZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9MZWdhY3lTZXNz
aW9uU3RhdGVDb2RpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTI5LDcgKzEyOSw3IEBAIHB1YmxpYzoKICAgICAgICAgKnRoaXMg
PDwgbGVuZ3RoOwogCiAgICAgICAgICp0aGlzIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihsZW5n
dGggKiBzaXplb2YoVUNoYXIpKTsKLSAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVk
Q2hhcmFjdGVycygpLmdldCgpKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSwgYWxpZ25vZihVQ2hh
cikpOworICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IFN0cmluZ1ZpZXcodmFs
dWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpLmdldCgpLCBsZW5ndGggfSk7CiAKICAgICAgICAg
cmV0dXJuICp0aGlzOwogICAgIH0KQEAgLTEzNyw3ICsxMzcsNyBAQCBwdWJsaWM6CiAgICAgSGlz
dG9yeUVudHJ5RGF0YUVuY29kZXImIG9wZXJhdG9yPDwoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2
YWx1ZSkKICAgICB7CiAgICAgICAgICp0aGlzIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1
ZS5zaXplKCkpOwotICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEodmFsdWUuZGF0YSgpLCB2
YWx1ZS5zaXplKCksIDEpOworICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEodmFsdWUpOwog
CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CkBAIC0xNDUsNyArMTQ1LDcgQEAgcHVibGlj
OgogICAgIEhpc3RvcnlFbnRyeURhdGFFbmNvZGVyJiBvcGVyYXRvcjw8KGNvbnN0IFZlY3Rvcjxj
aGFyPiYgdmFsdWUpCiAgICAgewogICAgICAgICAqdGhpcyA8PCBzdGF0aWNfY2FzdDx1aW50NjRf
dD4odmFsdWUuc2l6ZSgpKTsKLSAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZhbHVlLmRhdGEoKSksIHZhbHVlLnNpemUoKSwgMSk7
CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YSh2YWx1ZSk7CiAKICAgICAgICAgcmV0dXJu
ICp0aGlzOwogICAgIH0KQEAgLTIwNiwxNyArMjA2LDIzIEBAIHByaXZhdGU6CiAgICAgewogICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYXJpdGhtZXRpYzxUeXBlPjo6dmFsdWUsICIiKTsK
IAotICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4oJnZhbHVlKSwgc2l6ZW9mKHZhbHVlKSwgc2l6ZW9mKHZhbHVlKSk7CisgICAgICAgIGVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJnZhbHVlLCAxIH0sIHNpemVvZih2YWx1ZSkpOwogICAg
ICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCi0gICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERh
dGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGFsaWdubWVudCkK
KyAgICB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0
YSwgdW5zaWduZWQgYWxpZ25tZW50KQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGF0
YSB8fCAhc2l6ZSk7Ci0gICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
PihkYXRhKSAlIGFsaWdubWVudCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChkYXRhLmRhdGEo
KSB8fCAhZGF0YS5zaXplKCkpOworICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4oZGF0YS5kYXRhKCkpICUgYWxpZ25tZW50KSk7CiAKLSAgICAgICAgdWludDhfdCog
YnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQsIHNpemUpOwotICAgICAgICBtZW1jcHkoYnVmZmVyLCBk
YXRhLCBzaXplKTsKKyAgICAgICAgYXV0byogYnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQsIGRhdGEu
c2l6ZSgpKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgp
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCB1bnNpZ25lZCBhbGlnbm1lbnQgPSBhbGlnbm9mKHR5cGVu
YW1lIGRlY2x0eXBlKFNwYW4oc3RkOjpkZWNsdmFsPFQ+KCkpKTo6dmFsdWVfdHlwZSkpCisgICAg
eworICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3
YXJkPFQ+KGRhdGEpIH0pLCBhbGlnbm1lbnQpOwogICAgIH0KIAogICAgIHVpbnQ4X3QqIGdyb3co
dW5zaWduZWQgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKQEAgLTYwMSw3ICs2MDcsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgVUNoYXIqIGJ1ZmZlcjsKICAgICAgICAgYXV0byBzdHJpbmcgPSBTdHJp
bmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgICAgICBkZWNvZGVG
aXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3Ro
ICogc2l6ZW9mKFVDaGFyKSwgYWxpZ25vZihVQ2hhcikpOworICAgICAgICBkZWNvZGVGaXhlZExl
bmd0aERhdGEoU3BhbiB7IGJ1ZmZlciwgbGVuZ3RoIH0pOwogCiAgICAgICAgIHZhbHVlID0gc3Ry
aW5nOwogICAgICAgICByZXR1cm4gKnRoaXM7CkBAIC03MzcsMTcgKzc0MywyMyBAQCBwcml2YXRl
OgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYXJpdGhtZXRpYzxUeXBlPjo6dmFsdWUs
ICIiKTsKICAgICAgICAgdmFsdWUgPSBUeXBlKCk7CiAKLSAgICAgICAgZGVjb2RlRml4ZWRMZW5n
dGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2YWx1ZSksIHNpemVvZih2YWx1ZSks
IHNpemVvZih2YWx1ZSkpOworICAgICAgICBkZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZ2
YWx1ZSwgMSB9LCBzaXplb2YodmFsdWUpKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0K
IAotICAgIHZvaWQgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBz
aXplLCB1bnNpZ25lZCBhbGlnbm1lbnQpCisgICAgdm9pZCBkZWNvZGVGaXhlZExlbmd0aERhdGEo
U3BhbjxzdGQ6OmJ5dGU+IGRhdGEsIHVuc2lnbmVkIGFsaWdubWVudCkKICAgICB7Ci0gICAgICAg
IGlmICghYWxpZ25CdWZmZXJQb3NpdGlvbihhbGlnbm1lbnQsIHNpemUpKQorICAgICAgICBpZiAo
IWFsaWduQnVmZmVyUG9zaXRpb24oYWxpZ25tZW50LCBkYXRhLnNpemUoKSkpCiAgICAgICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgbWVtY3B5KGRhdGEsIG1fYnVmZmVyLCBzaXplKTsKLSAgICAg
ICAgbV9idWZmZXIgKz0gc2l6ZTsKKyAgICAgICAgbWVtY3B5KGRhdGEuZGF0YSgpLCBtX2J1ZmZl
ciwgZGF0YS5zaXplKCkpOworICAgICAgICBtX2J1ZmZlciArPSBkYXRhLnNpemUoKTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgZGVjb2RlRml4ZWRMZW5ndGhE
YXRhKFQmJiBkYXRhLCB1bnNpZ25lZCBhbGlnbm1lbnQgPSBhbGlnbm9mKHR5cGVuYW1lIGRlY2x0
eXBlKFNwYW4oc3RkOjpkZWNsdmFsPFQ+KCkpKTo6dmFsdWVfdHlwZSkpCisgICAgeworICAgICAg
ICBkZWNvZGVGaXhlZExlbmd0aERhdGEoYXNXcml0YWJsZUJ5dGVzKFNwYW4geyBzdGQ6OmZvcndh
cmQ8VD4oZGF0YSkgfSksIGFsaWdubWVudCk7CiAgICAgfQogCiAgICAgYm9vbCBhbGlnbkJ1ZmZl
clBvc2l0aW9uKHVuc2lnbmVkIGFsaWdubWVudCwgc2l6ZV90IHNpemUpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRDaGFubmVsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRDaGFubmVsLmNw
cAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsv
V2ViU29ja2V0Q2hhbm5lbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDggKzU5LDggQEAgTmV0
d29ya1NlbmRRdWV1ZSBXZWJTb2NrZXRDaGFubmVsOjpjcmVhdAogICAgICAgICBjaGFubmVsLm5v
dGlmeVNlbmRGcmFtZShXZWJTb2NrZXRGcmFtZTo6T3BDb2RlOjpPcENvZGVUZXh0LCB1dGY4U3Ry
aW5nLmRhdGFBc1VJbnQ4UHRyKCksIHV0ZjhTdHJpbmcubGVuZ3RoKCkpOwogICAgICAgICBjaGFu
bmVsLnNlbmRNZXNzYWdlKE1lc3NhZ2VzOjpOZXR3b3JrU29ja2V0Q2hhbm5lbDo6U2VuZFN0cmlu
ZyB7IElQQzo6RGF0YVJlZmVyZW5jZSB7IHV0ZjhTdHJpbmcuZGF0YUFzVUludDhQdHIoKSwgdXRm
OFN0cmluZy5sZW5ndGgoKSB9IH0sIHV0ZjhTdHJpbmcubGVuZ3RoKCkpOwogICAgIH0sIFsmY2hh
bm5lbF0oYXV0byYgc3BhbikgewotICAgICAgICBjaGFubmVsLm5vdGlmeVNlbmRGcmFtZShXZWJT
b2NrZXRGcmFtZTo6T3BDb2RlOjpPcENvZGVCaW5hcnksIHNwYW4uZGF0YSgpLCBzcGFuLnNpemUo
KSk7Ci0gICAgICAgIGNoYW5uZWwuc2VuZE1lc3NhZ2UoTWVzc2FnZXM6Ok5ldHdvcmtTb2NrZXRD
aGFubmVsOjpTZW5kRGF0YSB7IElQQzo6RGF0YVJlZmVyZW5jZSB7IHNwYW4uZGF0YSgpLCBzcGFu
LnNpemUoKSB9IH0sIHNwYW4uc2l6ZSgpKTsKKyAgICAgICAgY2hhbm5lbC5ub3RpZnlTZW5kRnJh
bWUoV2ViU29ja2V0RnJhbWU6Ok9wQ29kZTo6T3BDb2RlQmluYXJ5LCByZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQ4X3QqPihzcGFuLmRhdGEoKSksIHNwYW4uc2l6ZSgpKTsKKyAgICAgICAgY2hh
bm5lbC5zZW5kTWVzc2FnZShNZXNzYWdlczo6TmV0d29ya1NvY2tldENoYW5uZWw6OlNlbmREYXRh
IHsgSVBDOjpEYXRhUmVmZXJlbmNlIHsgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4o
c3Bhbi5kYXRhKCkpLCBzcGFuLnNpemUoKSB9IH0sIHNwYW4uc2l6ZSgpKTsKICAgICB9LCBbJmNo
YW5uZWxdKEV4Y2VwdGlvbkNvZGUgZXhjZXB0aW9uQ29kZSkgewogICAgICAgICBhdXRvIGNvZGUg
PSBzdGF0aWNfY2FzdDxpbnQ+KGV4Y2VwdGlvbkNvZGUpOwogICAgICAgICBjaGFubmVsLmZhaWwo
bWFrZVN0cmluZygiRmFpbGVkIHRvIGxvYWQgQmxvYjogZXhjZXB0aW9uIGNvZGUgPSAiLCBjb2Rl
KSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJ
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENU
ZXN0aW5nQVBJLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0MywxMiAr
NDQzLDcgQEAgSlNWYWx1ZVJlZiBKU1NoYXJlZE1lbW9yeTo6cmVhZEJ5dGVzKEpTQwogICAgIHJl
dHVybiB0b1JlZihqc0FycmF5QnVmZmVyKTsKIH0KIAotc3RydWN0IEFycmF5QnVmZmVyRGF0YSB7
Ci0gICAgdm9pZCogYnVmZmVyIHsgbnVsbHB0ciB9OwotICAgIHNpemVfdCBsZW5ndGggeyAwIH07
Ci19OwotCi1zdGF0aWMgQXJyYXlCdWZmZXJEYXRhIGFycmF5QnVmZmVyRGF0YUZyb21WYWx1ZVJl
ZihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNUeXBlZEFycmF5VHlwZSB0eXBlLCBKU1ZhbHVlUmVm
IHZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCitzdGF0aWMgU3BhbjxzdGQ6OmJ5dGU+
IGFycmF5QnVmZmVyRGF0YUZyb21WYWx1ZVJlZihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNUeXBl
ZEFycmF5VHlwZSB0eXBlLCBKU1ZhbHVlUmVmIHZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCiB7CiAgICAgYXV0byBvYmplY3RSZWYgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgdmFs
dWVSZWYsIGV4Y2VwdGlvbik7CiAgICAgaWYgKCFvYmplY3RSZWYpCkBAIC00NjksNyArNDY0LDcg
QEAgc3RhdGljIEFycmF5QnVmZmVyRGF0YSBhcnJheUJ1ZmZlckRhdGFGcgogICAgIGVsc2UKICAg
ICAgICAgbGVuZ3RoID0gSlNPYmplY3RHZXRUeXBlZEFycmF5Qnl0ZUxlbmd0aChjb250ZXh0LCBv
YmplY3RSZWYsIGV4Y2VwdGlvbik7CiAKLSAgICByZXR1cm4geyBidWZmZXIsIGxlbmd0aCB9Owor
ICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHN0ZDo6Ynl0ZSo+KGJ1ZmZlciksIGxlbmd0aCB9Owog
fQogCiBKU1ZhbHVlUmVmIEpTU2hhcmVkTWVtb3J5Ojp3cml0ZUJ5dGVzKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKQEAgLTQ4NywxMyArNDgyLDEzIEBAIEpTVmFsdWVSZWYgSlNTaGFyZWRNZW1vcnk6Ondy
aXRlQnl0ZXMoSlMKICAgICB9CiAKICAgICBhdXRvIGRhdGEgPSBhcnJheUJ1ZmZlckRhdGFGcm9t
VmFsdWVSZWYoY29udGV4dCwgdHlwZSwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOwotICAgIGlm
ICghZGF0YS5idWZmZXIpIHsKKyAgICBpZiAoIWRhdGEuZGF0YSgpKSB7CiAgICAgICAgICpleGNl
cHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIkNvdWxkIG5vdCByZWFkIHRoZSBidWZm
ZXIiX3MpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAg
ICAgfQogCiAgICAgc2l6ZV90IG9mZnNldCA9IDA7Ci0gICAgc2l6ZV90IGxlbmd0aCA9IGRhdGEu
bGVuZ3RoOworICAgIHNpemVfdCBsZW5ndGggPSBkYXRhLnNpemUoKTsKICAgICBzaXplX3Qgc2hh
cmVkTWVtb3J5U2l6ZSA9IGpzU2hhcmVkTWVtb3J5LT5tX3NoYXJlZE1lbW9yeS0+c2l6ZSgpOwog
CiAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjb250ZXh0KTsKQEAgLTUyNiw3ICs1MjEs
NyBAQCBKU1ZhbHVlUmVmIEpTU2hhcmVkTWVtb3J5Ojp3cml0ZUJ5dGVzKEpTCiAgICAgICAgIGxl
bmd0aCA9ICpsZW5ndGhWYWx1ZTsKICAgICB9CiAKLSAgICBtZW1jcHkoc3RhdGljX2Nhc3Q8dWlu
dDhfdCo+KGpzU2hhcmVkTWVtb3J5LT5tX3NoYXJlZE1lbW9yeS0+ZGF0YSgpKSArIG9mZnNldCwg
ZGF0YS5idWZmZXIsIGxlbmd0aCk7CisgICAgbWVtY3B5KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihq
c1NoYXJlZE1lbW9yeS0+bV9zaGFyZWRNZW1vcnktPmRhdGEoKSkgKyBvZmZzZXQsIGRhdGEuZGF0
YSgpLCBsZW5ndGgpOwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OwogfQpAQCAtNjg4LDEwICs2ODMsMTAgQEAgc3RhdGljIGJvb2wgZW5jb2RlVHlwZWRBcnJheShJ
UEM6OkVuY29kZQogICAgIEFTU0VSVCh0eXBlICE9IGtKU1R5cGVkQXJyYXlUeXBlTm9uZSk7CiAK
ICAgICBhdXRvIGRhdGEgPSBhcnJheUJ1ZmZlckRhdGFGcm9tVmFsdWVSZWYoY29udGV4dCwgdHlw
ZSwgdmFsdWVSZWYsIGV4Y2VwdGlvbik7Ci0gICAgaWYgKCFkYXRhLmJ1ZmZlcikKKyAgICBpZiAo
IWRhdGEuZGF0YSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmJ1
ZmZlciksIGRhdGEubGVuZ3RoLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0
YShkYXRhKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9FbnZpcm9ubWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9FbnZpcm9ubWVudC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvRW52aXJvbm1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNyArMTU2LDcgQEAg
Ym9vbCBFbnZpcm9ubWVudDo6Y29tcHV0ZUlzRGVidWdIZWFwRW5hYgogICAgIHJldHVybiB0cnVl
OwogI2VuZGlmCiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIGJtYWxsb2MKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDIxLTA2LTExICBTYW0gV2VpbmlnICA8
d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBBZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbV0lQXQorCisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvY2Fpcm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmNwcDoK
KyAgICAgICAgKGNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckJpdG1hcENvbnRleHQpOgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRDRy5jcHA6CisgICAgICAgIChj
b21wdXRlU0hBMUhhc2hTdHJpbmdGb3JCaXRtYXBDb250ZXh0KToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9CbG9vbUZpbHRlci5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpnZW5lcmF0ZVJhbmRvbURpZ2VzdHMpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL0ZpbGVTeXN0ZW0uY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW06CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpDb25uZWN0aW9uOjp3ZWJTb2NrZXRIYW5kc2hha2UpOgorICAgICAgICAqIFdl
YktpdFRlc3RSdW5uZXIvY2Fpcm8vVGVzdEludm9jYXRpb25DYWlyby5jcHA6CisgICAgICAgIChX
VFI6OmNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckNhaXJvU3VyZmFjZSk6CisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcDoKKyAgICAgICAgKFdUUjo6Y29t
cHV0ZVNIQTFIYXNoU3RyaW5nRm9yQ29udGV4dCk6CisKIDIwMjEtMDYtMTEgIEZ1amlpIEhpcm9u
b3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW1dpbl1bRHVtcFJlbmRl
clRyZWVdIC0tbm8tdGltZW91dCBzd2l0Y2ggZG9lc24ndCB3b3JrCkluZGV4OiBUb29scy9EdW1w
UmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fpcm8uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NhaXJvL1BpeGVsRHVtcFN1cHBvcnRDYWlyby5jcHAJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NhaXJvL1BpeGVsRHVtcFN1
cHBvcnRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBjb21w
dXRlU0hBMUhhc2hTdHJpbmdGb3JCaXRtYXBDb250ZQogICAgIFNIQTEgc2hhMTsKICAgICB1bnNp
Z25lZCBjaGFyKiBiaXRtYXBEYXRhID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGNhaXJv
X2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZSkpOwogICAgIGZvciAodW5zaWduZWQgcm93
ID0gMDsgcm93IDwgcGl4ZWxzSGlnaDsgcm93KyspIHsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhi
aXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lkZSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7
IGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlIH0pOwogICAgICAgICBiaXRtYXBEYXRhICs9IGJ5
dGVzUGVyUm93OwogICAgIH0KICAgICBTSEExOjpEaWdlc3QgaGFzaDsKSW5kZXg6IFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRDRy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1wU3VwcG9ydENHLmNwcAkocmV2aXNpb24gMjc4
ODA5KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1wU3VwcG9ydENHLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODgsMTQgKzg4LDE0IEBAIHZvaWQgY29tcHV0ZVNIQTFIYXNoU3Ry
aW5nRm9yQml0bWFwQ29udGUKICAgICAgICAgICAgIHVpbnQzMl90IGJ1ZmZlcltwaXhlbHNXaWRl
XTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY29sdW1uID0gMDsgY29sdW1uIDwgcGl4ZWxz
V2lkZTsgY29sdW1uKyspCiAgICAgICAgICAgICAgICAgYnVmZmVyW2NvbHVtbl0gPSBPU1JlYWRM
aXR0bGVJbnQzMihiaXRtYXBEYXRhLCA0ICogY29sdW1uKTsKLSAgICAgICAgICAgIHNoYTEuYWRk
Qnl0ZXMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYnVmZmVyKSwgNCAqIHBpeGVs
c1dpZGUpOworICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgYnVmZmVyLCBwaXhlbHNX
aWRlIH0pOwogICAgICAgICAgICAgYml0bWFwRGF0YSArPSBieXRlc1BlclJvdzsKICAgICAgICAg
fQogICAgIH0gZWxzZQogI2VuZGlmCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIHJvdyA9
IDA7IHJvdyA8IHBpeGVsc0hpZ2g7IHJvdysrKSB7Ci0gICAgICAgICAgICBzaGExLmFkZEJ5dGVz
KGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMo
U3BhbiB7IGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlIH0pOwogICAgICAgICAgICAgYml0bWFw
RGF0YSArPSBieXRlc1BlclJvdzsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL0Jsb29tRmlsdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9CbG9vbUZpbHRlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0Jsb29tRmlsdGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBzdGF0aWMgVmVjdG9yPFNIQTE6OkRpZ2VzdD4gZ2Vu
ZXJhdGVSYW5kCiAgICAgU0hBMSBzaGExOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBo
YXNoQ291bnQ7ICsraSkgewogICAgICAgICBkb3VibGUgcmFuZG9tID0gcmFuZG9tTnVtYmVyKCk7
Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnJhbmRv
bSksIHNpemVvZihkb3VibGUpKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgJnJhbmRv
bSwgMSB9KTsKICAgICAgICAgU0hBMTo6RGlnZXN0IGRpZ2VzdDsKICAgICAgICAgc2hhMS5jb21w
dXRlSGFzaChkaWdlc3QpOwogICAgICAgICBoYXNoZXMuYXBwZW5kKGRpZ2VzdCk7CkluZGV4OiBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEzMyw4ICsxMzMsOCBAQCBURVNUX0YoRmlsZVN5c3RlbVRlc3Qs
IE1hcHBpbmdFeGlzdGluZ0ZpCiAgICAgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEgbWFwcGVk
RmlsZURhdGEodGVtcEZpbGVQYXRoKCksIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVNb2RlOjpTaGFy
ZWQsIHN1Y2Nlc3MpOwogICAgIEVYUEVDVF9UUlVFKHN1Y2Nlc3MpOwogICAgIEVYUEVDVF9UUlVF
KCEhbWFwcGVkRmlsZURhdGEpOwotICAgIEVYUEVDVF9UUlVFKG1hcHBlZEZpbGVEYXRhLnNpemUo
KSA9PSBzdHJsZW4oRmlsZVN5c3RlbVRlc3REYXRhKSk7Ci0gICAgRVhQRUNUX1RSVUUoc3RybnN0
cihGaWxlU3lzdGVtVGVzdERhdGEsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihtYXBwZWRGaWxl
RGF0YS5kYXRhKCkpLCBtYXBwZWRGaWxlRGF0YS5zaXplKCkpKTsKKyAgICBFWFBFQ1RfVFJVRSht
YXBwZWRGaWxlRGF0YS5kYXRhKCkuc2l6ZSgpID09IHN0cmxlbihGaWxlU3lzdGVtVGVzdERhdGEp
KTsKKyAgICBFWFBFQ1RfVFJVRShzdHJuc3RyKEZpbGVTeXN0ZW1UZXN0RGF0YSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4obWFwcGVkRmlsZURhdGEuZGF0YSgpLmRhdGEoKSksIG1hcHBl
ZEZpbGVEYXRhLmRhdGEoKS5zaXplKCkpKTsKIH0KIAogVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBN
YXBwaW5nRXhpc3RpbmdFbXB0eUZpbGUpCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9TSEExLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9TSEExLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvU0hBMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgc3RhdGljIHZv
aWQgZXhwZWN0U0hBMShDU3RyaW5nIGlucHV0LCBpbgogewogICAgIFNIQTEgc2hhMTsKICAgICBm
b3IgKGludCBpID0gMDsgaSA8IHJlcGVhdDsgKytpKQotICAgICAgICBzaGExLmFkZEJ5dGVzKGlu
cHV0KTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhpbnB1dC5ieXRlcygpKTsKICAgICBDU3RyaW5n
IGFjdHVhbCA9IHNoYTEuY29tcHV0ZUhleERpZ2VzdCgpOwogCiAgICAgQVNTRVJUX0VRKGV4cGVj
dGVkLmxlbmd0aCgpLCBhY3R1YWwubGVuZ3RoKCkpOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQ
SS9jb2NvYS9IVFRQU2VydmVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
Y29jb2EvSFRUUFNlcnZlci5tbQkocmV2aXNpb24gMjc4ODA5KQorKysgVG9vbHMvVGVzdFdlYktp
dEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNDAsMTEgKzM0MCwx
MSBAQCB2b2lkIENvbm5lY3Rpb246OndlYlNvY2tldEhhbmRzaGFrZShDb21wCiAKICAgICAgICAg
ICAgIGNvbnN0ZXhwciBhdXRvKiB3ZWJTb2NrZXRLZXlHVUlEID0gIjI1OEVBRkE1LUU5MTQtNDdE
QS05NUNBLUM1QUIwREM4NUIxMSI7CiAgICAgICAgICAgICBTSEExIHNoYTE7Ci0gICAgICAgICAg
ICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGtleUJlZ2lu
KSwga2V5RW5kIC0ga2V5QmVnaW4pOwotICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih3ZWJTb2NrZXRLZXlHVUlEKSwgc3RybGVuKHdlYlNv
Y2tldEtleUdVSUQpKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IGtleUJlZ2lu
LCBrZXlFbmQgfSk7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyB3ZWJTb2NrZXRL
ZXlHVUlELCBzdHJsZW4od2ViU29ja2V0S2V5R1VJRCkgfSk7CiAgICAgICAgICAgICBTSEExOjpE
aWdlc3QgaGFzaDsKICAgICAgICAgICAgIHNoYTEuY29tcHV0ZUhhc2goaGFzaCk7Ci0gICAgICAg
ICAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaGFzaC5kYXRhKCksIFNIQTE6Omhhc2hT
aXplKTsKKyAgICAgICAgICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhoYXNoKTsKICAg
ICAgICAgfTsKIAogICAgICAgICBjb25uZWN0aW9uLnNlbmQoSFRUUFJlc3BvbnNlKDEwMSwgewpJ
bmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jYWlyby9UZXN0SW52b2NhdGlvbkNhaXJvLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0
aW9uQ2Fpcm8uY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVy
L2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1
Miw3IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckNhaXIKICAgICBTSEEx
IHNoYTE7CiAgICAgdW5zaWduZWQgY2hhciogYml0bWFwRGF0YSA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpKTsKICAgICBm
b3IgKHNpemVfdCByb3cgPSAwOyByb3cgPCBwaXhlbHNIaWdoOyArK3JvdykgewotICAgICAgICBz
aGExLmFkZEJ5dGVzKGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRlKTsKKyAgICAgICAgc2hhMS5h
ZGRCeXRlcyhTcGFuIHsgYml0bWFwRGF0YSwgNCAqIHBpeGVsc1dpZGUgfSk7CiAgICAgICAgIGJp
dG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7CiAgICAgfQogICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwpJ
bmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZv
Y2F0aW9uQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHZvaWQgY29tcHV0
ZVNIQTFIYXNoU3RyaW5nRm9yQ29udGV4dChDR0MKICNlbmRpZgogICAgIHsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCByb3cgPSAwOyByb3cgPCBwaXhlbHNIaWdoOyByb3crKykgewotICAgICAgICAg
ICAgc2hhMS5hZGRCeXRlcyhiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lkZSk7CisgICAgICAgICAg
ICBzaGExLmFkZEJ5dGVzKFNwYW4geyBiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lkZSB9KTsKICAg
ICAgICAgICAgIGJpdG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7CiAgICAgICAgIH0KICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431334</attachid>
            <date>2021-06-14 09:25:49 -0700</date>
            <delta_ts>2021-06-14 10:45:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226887-20210614092548.patch</filename>
            <type>text/plain</type>
            <size>205114</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBA
CisyMDIxLTA2LTEyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogQVBJL0pTU2NyaXB0Lm1tOgorICAg
ICAgICAoK1tKU1NjcmlwdCBzY3JpcHRPZlR5cGU6bWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTp3
aXRoU291cmNlVVJMOmFuZEJ5dGVjb2RlQ2FjaGU6aW5WaXJ0dWFsTWFjaGluZTplcnJvcjpdKToK
KyAgICAgICAgKC1bSlNTY3JpcHQgcmVhZENhY2hlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHdy
aXRlQ2FjaGU6XSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9ja0hhc2g6OkNvZGVCbG9ja0hhc2gpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHA6CisgICAgICAgIChJbnNw
ZWN0b3I6OmJhY2tlbmRDb21tYW5kc0hhc2gpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZm
ZXIuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJDb250ZW50czo6d3JpdGFibGVCeXRlcyk6
CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyQ29udGVudHM6OmJ5dGVzIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6QXJyYXlCdWZmZXI6OndyaXRhYmxlQnl0ZXMpOgorICAgICAgICAoSlNDOjpBcnJh
eUJ1ZmZlcjo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
Lmg6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6d3JpdGFibGVCeXRlcyk6CisgICAg
ICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRp
bWUvQ2FjaGVQYXlsb2FkLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVQYXlsb2FkOjptYWtlTWFw
cGVkUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6bWFrZU1hbGxvY1BheWxv
YWQpOgorICAgICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6Om1ha2VFbXB0eVBheWxvYWQpOgorICAg
ICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6OkNhY2hlUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNh
Y2hlUGF5bG9hZDo6ZnJlZURhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVQYXlsb2FkLmg6
CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6ZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlUGF5bG9hZDo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6
Q2FjaGVQYXlsb2FkKToKKyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKToKKwogMjAyMS0w
Ni0xMSAgUGF0cmljayBBbmdsZSAgPHBhbmdsZUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogQWRkIGluc3RydW1lbnRhdGlvbiB0byBub2RlIGRlc3RydWN0aW9uIGZvciBJbnNw
ZWN0b3JET01BZ2VudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMTMgKzEzNCwxMyBAQCArIChpbnN0YW5jZXR5cGUpc2Ny
aXB0T2ZUeXBlOihKU1NjcmlwdFR5CiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4g
Y3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJGaWxlIGF0IHBhdGggJUAg
Y291bGQgbm90IGJlIG1hcHBlZC4iLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihzeXN0ZW1QYXRo
KV0sIGVycm9yKTsKIAotICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCkpKQor
ICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmlsZURhdGEuZGF0YSgpLnNpemUoKSkpCiAg
ICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIk5v
dCBhbGwgY2hhcmFjdGVycyBpbiBmaWxlIGF0ICVAIGFyZSBBU0NJSS4iLCBzdGF0aWNfY2FzdDxO
U1N0cmluZyAqPihzeXN0ZW1QYXRoKV0sIGVycm9yKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gYWRv
cHROUyhbW0pTU2NyaXB0IGFsbG9jXSBpbml0XSk7CiAgICAgcmVzdWx0LT5tX3ZpcnR1YWxNYWNo
aW5lID0gdm07CiAgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOwotICAgIHJlc3VsdC0+bV9zb3Vy
Y2UgPSBTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcoYml0d2lzZV9jYXN0
PGNvbnN0IExDaGFyKj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpKSk7CisgICAg
cmVzdWx0LT5tX3NvdXJjZSA9IFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWlu
ZyhiaXR3aXNlX2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmls
ZURhdGEuZGF0YSgpLnNpemUoKSkpOwogICAgIHJlc3VsdC0+bV9tYXBwZWRTb3VyY2UgPSBXVEZN
b3ZlKGZpbGVEYXRhKTsKICAgICByZXN1bHQtPm1fc291cmNlVVJMID0gc291cmNlVVJMOwogICAg
IHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7CkBAIC0xNjgsMjQgKzE2OCwyMyBAQCAt
ICh2b2lkKXJlYWRDYWNoZQogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgY29uc3QgdWludDhfdCogZmlsZURhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihtYXBwZWRGaWxlLmRhdGEoKSk7Ci0gICAgdW5zaWduZWQgZmlsZVRvdGFsU2l6ZSA9IG1h
cHBlZEZpbGUuc2l6ZSgpOworICAgIGF1dG8gZmlsZURhdGEgPSBtYXBwZWRGaWxlLmRhdGEoKTsK
IAogICAgIC8vIEVuc3VyZSB3ZSBhdCBsZWFzdCBoYXZlIGEgU0hBMTo6RGlnZXN0IHRvIHJlYWQu
Ci0gICAgaWYgKGZpbGVUb3RhbFNpemUgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgeworICAgIGlm
IChmaWxlRGF0YS5zaXplKCkgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgewogICAgICAgICBGaWxl
U3lzdGVtOjpkZWxldGVGaWxlKGNhY2hlRmlsZW5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgdW5zaWduZWQgZmlsZURhdGFTaXplID0gZmlsZVRvdGFsU2l6ZSAtIHNpemVvZihT
SEExOjpEaWdlc3QpOworICAgIHVuc2lnbmVkIGZpbGVEYXRhU2l6ZSA9IGZpbGVEYXRhLnNpemUo
KSAtIHNpemVvZihTSEExOjpEaWdlc3QpOwogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFz
aDsKICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhmaWxlRGF0YSwgZmlsZURhdGFT
aXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKGZpbGVEYXRhLmZpcnN0KGZpbGVEYXRhU2l6ZSkpOwog
ICAgIHNoYTEuY29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2VzdCBm
aWxlSGFzaDsKLSAgICBtZW1jcHkoJmZpbGVIYXNoLCBmaWxlRGF0YSArIGZpbGVEYXRhU2l6ZSwg
c2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOworICAgIG1lbWNweSgmZmlsZUhhc2gsIGZpbGVEYXRhLmRh
dGEoKSArIGZpbGVEYXRhU2l6ZSwgc2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOwogCiAgICAgaWYgKGNv
bXB1dGVkSGFzaCAhPSBmaWxlSGFzaCkgewogICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxl
KGNhY2hlRmlsZW5hbWUpOwpAQCAtMzQzLDcgKzM0Miw3IEBAIC0gKEJPT0wpd3JpdGVDYWNoZToo
U3RyaW5nJillcnJvcgogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFzaDsKICAgICBTSEEx
IHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhtX2NhY2hlZEJ5dGVjb2RlLT5kYXRhKCksIG1fY2Fj
aGVkQnl0ZWNvZGUtPnNpemUoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgbV9jYWNoZWRC
eXRlY29kZS0+ZGF0YSgpLCBtX2NhY2hlZEJ5dGVjb2RlLT5zaXplKCkgfSk7CiAgICAgc2hhMS5j
b21wdXRlSGFzaChjb21wdXRlZEhhc2gpOwogICAgIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKHRl
bXBGRCwgY29tcHV0ZWRIYXNoLmRhdGEoKSwgc2l6ZW9mKGNvbXB1dGVkSGFzaCkpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0hhc2guY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgQ29kZUJsb2Nr
SGFzaDo6Q29kZUJsb2NrSGFzaChjb25zdCBTb3VyYwogICAgIEFTU0VSVChzb3VyY2VDb2RlLmxl
bmd0aCgpID49IDApOwogICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhTb3VyY2VDb2RlTGVuZ3Ro
VG9IYXNoID0gNTAwICogTUI7CiAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzb3VyY2VD
b2RlLmxlbmd0aCgpKSA8IG1heFNvdXJjZUNvZGVMZW5ndGhUb0hhc2gpCi0gICAgICAgIHNoYTEu
YWRkQnl0ZXMoc291cmNlQ29kZS50b1VURjgoKSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoc291
cmNlQ29kZS50b1VURjgoKS5ieXRlcygpKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gSnVzdCBo
YXNoIHdpdGggdGhlIGxlbmd0aCBhbmQgc2FtcGxlcyBvZiB0aGUgc291cmNlIHN0cmluZyBpbnN0
ZWFkLgogICAgICAgICBTdHJpbmdWaWV3IHN0ciA9IHNvdXJjZUNvZGUucHJvdmlkZXIoKS0+c291
cmNlKCk7CkBAIC02MiwxMCArNjIsMTAgQEAgQ29kZUJsb2NrSGFzaDo6Q29kZUJsb2NrSGFzaChj
b25zdCBTb3VyYwogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHIubGVuZ3RoKCk7CiAgICAg
ICAgIHVuc2lnbmVkIHN0ZXAgPSAobGVuZ3RoID4+IDEwKSArIDE7CiAKLSAgICAgICAgc2hhMS5h
ZGRCeXRlcyhiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KCZsZW5ndGgpLCBzaXplb2YobGVuZ3RoKSk7
CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZsZW5ndGgsIDEgfSk7CiAgICAgICAgIGRv
IHsKICAgICAgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IHN0cltpbmRleF07Ci0gICAgICAgICAg
ICBzaGExLmFkZEJ5dGVzKGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oJmNoYXJhY3RlciksIHNpemVv
ZihjaGFyYWN0ZXIpKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZjaGFyYWN0
ZXIsIDEgfSk7CiAgICAgICAgICAgICBvbGRJbmRleCA9IGluZGV4OwogICAgICAgICAgICAgaW5k
ZXggKz0gc3RlcDsKICAgICAgICAgfSB3aGlsZSAoaW5kZXggPiBvbGRJbmRleCAmJiBpbmRleCA8
IGxlbmd0aCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VIYXNo
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VI
YXNoLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BhcnNlSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiBQYXJzZUhhc2g6OlBhcnNlSGFzaChjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VD
b2RlKQogewogICAgIFNIQTEgc2hhMTsKLSAgICBzaGExLmFkZEJ5dGVzKHNvdXJjZUNvZGUudG9V
VEY4KCkpOworICAgIHNoYTEuYWRkQnl0ZXMoc291cmNlQ29kZS50b1VURjgoKS5ieXRlcygpKTsK
ICAgICBTSEExOjpEaWdlc3QgZGlnZXN0OwogICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsK
ICAgICB1bnNpZ25lZCBoYXNoID0gZGlnZXN0WzBdIHwgKGRpZ2VzdFsxXSA8PCA4KSB8IChkaWdl
c3RbMl0gPDwgMTYpIHwgKGRpZ2VzdFszXSA8PCAyNCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1JlbW90ZUluc3BlY3RvclV0aWxzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1Jl
bW90ZUluc3BlY3RvclV0aWxzLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgY29uc3QgQ1N0cmluZyYgYmFja2VuZENv
bW1hbmRzSGFzaCgpCiAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSA9IGdfYnl0ZXNfZ2V0X2Rh
dGEoYnl0ZXMuZ2V0KCksICZkYXRhU2l6ZSk7CiAgICAgICAgIEFTU0VSVChkYXRhU2l6ZSk7CiAg
ICAgICAgIFNIQTEgc2hhMTsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhzdGF0aWNfY2FzdDxjb25z
dCB1aW50OF90Kj4oZGF0YSksIGRhdGFTaXplKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFu
IHsgc3RhdGljX2Nhc3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSksIGRhdGFTaXplIH0pOwogICAg
ICAgICBoZXhEaWdlc3QgPSBzaGExLmNvbXB1dGVIZXhEaWdlc3QoKTsKICAgICB9CiAgICAgcmV0
dXJuIGhleERpZ2VzdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogI2luY2x1ZGUgPHd0Zi9QYWNrZWRSZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZl
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtODAsNyAr
ODEsMTAgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBt
X2RhdGEuZ2V0TWF5QmVOdWxsKHNpemVJbkJ5dGVzKCkpOyB9CiAgICAgdW5zaWduZWQgc2l6ZUlu
Qnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX3NpemVJbkJ5dGVzOyB9Ci0gICAgCisKKyAgICBTcGFu
PHN0ZDo6Ynl0ZT4gd3JpdGFibGVCeXRlcygpIHsgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8c3RkOjpi
eXRlKj4oZGF0YSgpKSwgc2l6ZUluQnl0ZXMoKSB9OyB9CisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4geyBzdGF0aWNfY2FzdDxjb25zdCBzdGQ6OmJ5dGUq
PihkYXRhKCkpLCBzaXplSW5CeXRlcygpIH07IH0KKwogICAgIGJvb2wgaXNTaGFyZWQoKSBjb25z
dCB7IHJldHVybiBtX3NoYXJlZDsgfQogICAgIAogcHJpdmF0ZToKQEAgLTEyNyw3ICsxMzEsOSBA
QCBwdWJsaWM6CiAgICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKICAgICBpbmxpbmUgY29uc3Qgdm9p
ZCogZGF0YSgpIGNvbnN0OwogICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7
Ci0gICAgCisgICAgaW5saW5lIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCk7CisgICAg
aW5saW5lIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAgICAgdm9pZCBt
YWtlU2hhcmVkKCk7CiAgICAgdm9pZCBzZXRTaGFyaW5nTW9kZShBcnJheUJ1ZmZlclNoYXJpbmdN
b2RlKTsKICAgICBpbmxpbmUgYm9vbCBpc1NoYXJlZCgpIGNvbnN0OwpAQCAtMTk3LDYgKzIwMywx
NiBAQCB1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJu
IG1fY29udGVudHMuc2l6ZUluQnl0ZXMoKTsKIH0KIAorU3BhbjxzdGQ6OmJ5dGU+IEFycmF5QnVm
ZmVyOjp3cml0YWJsZUJ5dGVzKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZW50cy53cml0YWJsZUJ5
dGVzKCk7Cit9CisKK1NwYW48Y29uc3Qgc3RkOjpieXRlPiBBcnJheUJ1ZmZlcjo6Ynl0ZXMoKSBj
b25zdAoreworICAgIHJldHVybiBtX2NvbnRlbnRzLmJ5dGVzKCk7Cit9CisKIGJvb2wgQXJyYXlC
dWZmZXI6OmlzU2hhcmVkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb250ZW50cy5pc1NoYXJl
ZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZm
ZXJWaWV3LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4Niw5IEBAIHB1
YmxpYzoKIAogICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVM
ZW5ndGg7IH0KIAorICAgIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCkgeyByZXR1cm4g
eyBzdGF0aWNfY2FzdDxzdGQ6OmJ5dGUqPihkYXRhKCkpLCBieXRlTGVuZ3RoKCkgfTsgfQorICAg
IFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0IHsgcmV0dXJuIHsgc3RhdGljX2Nh
c3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSgpKSwgYnl0ZUxlbmd0aCgpIH07IH0KKwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0RGV0YWNoYWJsZShib29sKTsKICAgICBib29sIGlzRGV0
YWNoYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNEZXRhY2hhYmxlOyB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlUGF5bG9hZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsMjcgKzMwLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogCiBD
YWNoZVBheWxvYWQgQ2FjaGVQYXlsb2FkOjptYWtlTWFwcGVkUGF5bG9hZChGaWxlU3lzdGVtOjpN
YXBwZWRGaWxlRGF0YSYmIGRhdGEpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZCh0cnVlLCBk
YXRhLmxlYWtIYW5kbGUoKSwgZGF0YS5zaXplKCkpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQo
dHJ1ZSwgZGF0YS5sZWFrSGFuZGxlKCkpOwogfQogCiBDYWNoZVBheWxvYWQgQ2FjaGVQYXlsb2Fk
OjptYWtlTWFsbG9jUGF5bG9hZChNYWxsb2NQdHI8dWludDhfdCwgVk1NYWxsb2M+JiYgZGF0YSwg
c2l6ZV90IHNpemUpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZChmYWxzZSwgZGF0YS5sZWFr
UHRyKCksIHNpemUpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQoZmFsc2UsIGFzV3JpdGFibGVC
eXRlcyhTcGFuIHsgZGF0YS5sZWFrUHRyKCksIHNpemUgfSkpOwogfQogCiBDYWNoZVBheWxvYWQg
Q2FjaGVQYXlsb2FkOjptYWtlRW1wdHlQYXlsb2FkKCkKIHsKLSAgICByZXR1cm4gQ2FjaGVQYXls
b2FkKHRydWUsIG51bGxwdHIsIDApOworICAgIHJldHVybiBDYWNoZVBheWxvYWQodHJ1ZSwgeyB9
KTsKIH0KIAogQ2FjaGVQYXlsb2FkOjpDYWNoZVBheWxvYWQoQ2FjaGVQYXlsb2FkJiYgb3RoZXIp
CiB7Ci0gICAgbV9tYXBwZWQgPSBvdGhlci5tX21hcHBlZDsKLSAgICBtX3NpemUgPSBvdGhlci5t
X3NpemU7Ci0gICAgbV9kYXRhID0gb3RoZXIubV9kYXRhOwotICAgIG90aGVyLm1fbWFwcGVkID0g
ZmFsc2U7Ci0gICAgb3RoZXIubV9kYXRhID0gbnVsbHB0cjsKLSAgICBvdGhlci5tX3NpemUgPSAw
OworICAgIG1fbWFwcGVkID0gc3RkOjpleGNoYW5nZShvdGhlci5tX21hcHBlZCwgZmFsc2UpOwor
ICAgIG1fZGF0YSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLCB7IH0pOwogfQogCiBDYWNo
ZVBheWxvYWQ6On5DYWNoZVBheWxvYWQoKQpAQCAtNjcsMTIgKzYzLDEzIEBAIENhY2hlUGF5bG9h
ZCYgQ2FjaGVQYXlsb2FkOjpvcGVyYXRvcj0oQ2EKIAogdm9pZCBDYWNoZVBheWxvYWQ6OmZyZWVE
YXRhKCkKIHsKLSAgICBpZiAoIW1fZGF0YSkKKyAgICBpZiAoIW1fZGF0YS5kYXRhKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBpZiAobV9tYXBwZWQpIHsKLSAgICAgICAgRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1fZGF0YSwgbV9zaXplKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZmFzdEZy
ZWUobV9kYXRhKTsKKworICAgIGlmIChtX21hcHBlZCkKKyAgICAgICAgRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1fZGF0YSk7CisgICAgZWxzZQorICAgICAgICBmYXN0RnJlZShtX2RhdGEu
ZGF0YSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHd0Zi9GaWxlU3lz
dGVtLmg+CiAjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MSwyMiArNDIsMjAgQEAgcHVibGljOgogICAgIEpT
X0VYUE9SVF9QUklWQVRFIH5DYWNoZVBheWxvYWQoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBD
YWNoZVBheWxvYWQmIG9wZXJhdG9yPShDYWNoZVBheWxvYWQmJiBvdGhlcik7CiAKLSAgICBjb25z
dCB1aW50OF90KiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBjb25zdCB1aW50OF90KiBkYXRhKCkg
Y29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9kYXRhLmRhdGEoKSk7
IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5zaXplKCk7IH0KIAog
cHJpdmF0ZToKLSAgICBDYWNoZVBheWxvYWQoYm9vbCBtYXBwZWQsIHZvaWQqIGRhdGEsIHNpemVf
dCBzaXplKQorICAgIENhY2hlUGF5bG9hZChib29sIG1hcHBlZCwgU3BhbjxzdGQ6OmJ5dGU+IGRh
dGEpCiAgICAgICAgIDogbV9tYXBwZWQobWFwcGVkKQotICAgICAgICAsIG1fc2l6ZShzaXplKQot
ICAgICAgICAsIG1fZGF0YShzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGF0YSkpCisgICAgICAgICwg
bV9kYXRhKGRhdGEpCiAgICAgewogICAgIH0KIAogICAgIHZvaWQgZnJlZURhdGEoKTsKIAogICAg
IGJvb2wgbV9tYXBwZWQ7Ci0gICAgc2l6ZV90IG1fc2l6ZTsKLSAgICB1aW50OF90KiBtX2RhdGE7
CisgICAgU3BhbjxzdGQ6OmJ5dGU+IG1fZGF0YTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1Bh
cnNlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNyArMjYxLDcg
QEAgYXV0byBTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKGNvbnN0IHVpbgogICAgIH0KIAogICAg
IGlmIChVTkxJS0VMWShPcHRpb25zOjp1c2VFYWdlcldlYkFzc2VtYmx5TW9kdWxlSGFzaGluZygp
KSkKLSAgICAgICAgbV9oYXNoZXIuYWRkQnl0ZXMoYnl0ZXMsIGJ5dGVzU2l6ZSk7CisgICAgICAg
IG1faGFzaGVyLmFkZEJ5dGVzKFNwYW4geyBieXRlcywgYnl0ZXNTaXplIH0pOwogCiAgICAgc2l6
ZV90IG9mZnNldEluQnl0ZXMgPSAwOwogICAgIHdoaWxlICh0cnVlKSB7CkluZGV4OiBTb3VyY2Uv
V1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw2OCBAQAorMjAyMS0wNi0xMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgQWRvcHQgU3BhbiBpbiBtb3JlIHBsYWNlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIFdURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmNwcDoKKyAgICAg
ICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjp+TWFwcGVkRmlsZURhdGEp
OgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6TWFwcGVkRmlsZURhdGE6Om1hcEZpbGVI
YW5kbGUpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6dW5tYXBWaWV3T2ZGaWxlKToK
KyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Om1hcFRvRmlsZSk6CisgICAgICAgICogd3Rm
L0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVE
YXRhOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6
Ok1hcHBlZEZpbGVEYXRhOjpkYXRhIGNvbnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUlt
cGw6Ok1hcHBlZEZpbGVEYXRhOjpsZWFrSGFuZGxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3Rl
bUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YSk6CisgICAgICAgIChXVEY6OkZp
bGVTeXN0ZW1JbXBsOjpNYXBwZWRGaWxlRGF0YTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6
RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpzaXplIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1NIQTEuY3BwOgorICAgICAgICAoV1RG
OjpTSEExOjphZGRCeXRlcyk6CisgICAgICAgIChXVEY6OlNIQTE6OmZpbmFsaXplKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6U0hBMTo6cHJvY2Vzc0Jsb2NrKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6U0hBMTo6cmVzZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTSEExOjpoZXhEaWdl
c3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTSEExOjpjb21wdXRlSGV4RGlnZXN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3dGYvU0hBMS5oOgorICAgICAgICAoV1RGOjpTSEExOjphZGRCeXRl
cyk6CisgICAgICAgICogd3RmL1ZlY3Rvci5oOgorICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZS9Q
ZXJzaXN0ZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPENT
dHJpbmc+OjplbmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8Q1N0cmlu
Zz46OmRlY29kZSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTdHJpbmc+Ojpl
bmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVjb2RlU3RyaW5nVGV4dCk6Cisg
ICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUpOgor
ICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKToK
KyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oOgorICAgICAgICAq
IHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5jcHA6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyOjpEZWNvZGVyKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6
OkRlY29kZXI6OmJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFkKToKKyAgICAgICAgKFdURjo6UGVy
c2lzdGVuY2U6OkRlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjp2ZXJpZnlDaGVja3N1bSk6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyOjp+RGVjb2Rlcik6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3Bl
cnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmg6CisgICAgICAgICogd3RmL3BlcnNpc3RlbmNl
L1BlcnNpc3RlbnRFbmNvZGVyLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29k
ZXI6Omdyb3cpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6dXBkYXRlQ2hl
Y2tzdW1Gb3JEYXRhKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6OmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjpl
bmNvZGVOdW1iZXIpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6ZW5jb2Rl
Q2hlY2tzdW0pOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6RW5jb2Rlcik6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjp+RW5jb2Rlcik6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmg6
CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjpidWZmZXIgY29uc3QpOgorICAg
ICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIp
OgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6YnVmZmVyU2l6ZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL3RleHQvQmFzZTY0Lmg6CisgICAgICAgIChXVEY6OmJh
c2U2NEVuY29kZVRvVmVjdG9yKToKKyAgICAgICAgKFdURjo6YmFzZTY0RW5jb2RlVG9TdHJpbmcp
OgorICAgICAgICAqIHd0Zi90ZXh0L0NTdHJpbmcuaDoKKwogMjAyMS0wNi0xMSAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgV2Vha0hhc2hNYXAKSW5kZXg6
IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtNjkyLDYgKzY5Miw4IEBACiAJCUFEODlCNkI5MUU2NDE1MEYwMDkwNzA3RiAvKiBN
ZW1vcnlQcmVzc3VyZUhhbmRsZXJDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IE1lbW9yeVByZXNzdXJlSGFuZGxlckNvY29hLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBREYyQ0U2NDFFMzlGMTA2MDA2ODg5REIgLyogTWVtb3J5Rm9vdHBy
aW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lbW9yeUZvb3RwcmludC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREYyQ0U2NTFFMzlGMTA2MDA2ODg5REIg
LyogTWVtb3J5Rm9vdHByaW50Q29jb2EuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTWVtb3J5Rm9vdHByaW50Q29jb2EuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlCQzcwMEI0NDI2NzY2ODM0MDA0OUVERjIgLyogU3BhbkNvY29hLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNwYW5Db2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzcwMEI0
NTI2NzY2OUMxMDA0OUVERjIgLyogU3BhbkNGLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwYW5DRi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0EzMEM3RjI2NkQzMDM0MDAwRDIzMEMgLyog
U3Bhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTcGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyQkNGQzNFMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5ndWFnZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYW5ndWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyQkNGQzNGMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5ndWFnZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYW5ndWFnZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtODQwLDYgKzg0Miw3IEBACiAJCQkJQzJCQ0ZDNDExRjYxRDYxNjAwQzky
MjJDIC8qIExhbmd1YWdlQ0YuY3BwICovLAogCQkJCTJDREVEMEVFMTgxMTVDMzgwMDREQkE3MCAv
KiBSdW5Mb29wQ0YuY3BwICovLAogCQkJCUEzRUU1QzNCMjFGRkFDN0MwMEZBQkQ2MSAvKiBTY2hl
ZHVsZVBhaXJDRi5jcHAgKi8sCisJCQkJQkM3MDBCNDUyNjc2NjlDMTAwNDlFREYyIC8qIFNwYW5D
Ri5oICovLAogCQkJCTFBRkRFNjQ3MTk1MjAxQzMwMEM0OEZGQSAvKiBUeXBlQ2FzdHNDRi5oICov
LAogCQkJCTVDMUYwNTk0MjE2NDM3QjMwMDM5MzAyQyAvKiBVUkxDRi5jcHAgKi8sCiAJCQkpOwpA
QCAtMTU4MSw2ICsxNTg0LDcgQEAKIAkJCQkxQ0E4NUNBODI0MUIwQjI2MDA3MUMyRjUgLyogUnVu
dGltZUFwcGxpY2F0aW9uQ2hlY2tzQ29jb2EuY3BwICovLAogCQkJCTFDQTg1Q0E3MjQxQjBCMTEw
MDcxQzJGNSAvKiBSdW50aW1lQXBwbGljYXRpb25DaGVja3NDb2NvYS5oICovLAogCQkJCUEzMEQ0
MTJDMUYwREUwQkEwMEI3MTk1NCAvKiBTb2Z0TGlua2luZy5oICovLAorCQkJCUJDNzAwQjQ0MjY3
NjY4MzQwMDQ5RURGMiAvKiBTcGFuQ29jb2EuaCAqLywKIAkJCQlFQjYxRURDNjI0MDlDQ0MwMDAx
RUZFMzYgLyogU3lzdGVtVHJhY2luZ0NvY29hLmNwcCAqLywKIAkJCQk1Q0MwRUU4NjIxNjJCQzIy
MDBBMUE4NDIgLyogVVJMQ29jb2EubW0gKi8sCiAJCQkJOTMyNDE2NTcyNDNCQzJFNTAwMzJGQUFF
IC8qIFZlY3RvckNvY29hLmggKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxOSw5ICszMTksOSBAQCBib29sIGV4Y2x1ZGVGcm9tQmFja3VwKGNvbnN0IFN0cmluZyYp
CiAKIE1hcHBlZEZpbGVEYXRhOjp+TWFwcGVkRmlsZURhdGEoKQogewotICAgIGlmICghbV9maWxl
RGF0YSkKKyAgICBpZiAoIW1fZmlsZURhdGEuZGF0YSgpKQogICAgICAgICByZXR1cm47Ci0gICAg
dW5tYXBWaWV3T2ZGaWxlKG1fZmlsZURhdGEsIG1fZmlsZVNpemUpOworICAgIHVubWFwVmlld09m
RmlsZShtX2ZpbGVEYXRhKTsKIH0KIAogTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKGNv
bnN0IFN0cmluZyYgZmlsZVBhdGgsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUsIGJvb2wmIHN1Y2Nl
c3MpCkBAIC0zODMsMTQgKzM4MywxMyBAQCBib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFu
ZGxlKFBsYXRmCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBtX2ZpbGVEYXRh
ID0gZGF0YTsKLSAgICBtX2ZpbGVTaXplID0gc2l6ZTsKKyAgICBtX2ZpbGVEYXRhID0gU3BhbiB7
IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpieXRlKj4oZGF0YSksIHNpemUgfTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCB1bm1hcFZpZXdPZkZpbGUodm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6
ZSkKK2Jvb2wgdW5tYXBWaWV3T2ZGaWxlKFNwYW48c3RkOjpieXRlPiBkYXRhKQogewotICAgIHJl
dHVybiAhbXVubWFwKGJ1ZmZlciwgc2l6ZSk7CisgICAgcmV0dXJuICFtdW5tYXAoZGF0YS5kYXRh
KCksIGRhdGEuc2l6ZSgpKTsKIH0KIAogI2VuZGlmCkBAIC00MzgsNyArNDM3LDcgQEAgU3RyaW5n
IGNyZWF0ZVRlbXBvcmFyeVppcEFyY2hpdmUoY29uc3QgUwogfQogI2VuZGlmCiAKLU1hcHBlZEZp
bGVEYXRhIG1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIHNpemVfdCBieXRlc1NpemUsIEZ1
bmN0aW9uPHZvaWQoY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4m
KT4mJiBhcHBseSwgUGxhdGZvcm1GaWxlSGFuZGxlKiBvdXRwdXRIYW5kbGUpCitNYXBwZWRGaWxl
RGF0YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBzaXplX3QgYnl0ZXNTaXplLCBGdW5j
dGlvbjx2b2lkKGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mKT4m
JiBhcHBseSwgUGxhdGZvcm1GaWxlSGFuZGxlKiBvdXRwdXRIYW5kbGUpCiB7CiAgICAgY29uc3Rl
eHByIGJvb2wgZmFpbElmRmlsZUV4aXN0cyA9IHRydWU7CiAgICAgYXV0byBoYW5kbGUgPSBGaWxl
U3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWRXcml0
ZSwgRmlsZVN5c3RlbTo6RmlsZUFjY2Vzc1Blcm1pc3Npb246OlVzZXIsIGZhaWxJZkZpbGVFeGlz
dHMpOwpAQCAtNDU1LDEyICs0NTQsMTIgQEAgTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxlKGNvbnN0
IFN0cmluZyYgcAogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIHZvaWQqIG1hcCA9
IGNvbnN0X2Nhc3Q8dm9pZCo+KG1hcHBlZEZpbGUuZGF0YSgpKTsKLSAgICB1aW50OF90KiBtYXBE
YXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1hcCk7CisgICAgYXV0byBtYXAgPSBtYXBwZWRG
aWxlLmRhdGEoKS5kYXRhKCk7CisgICAgYXV0byBtYXBEYXRhID0gbWFwOwogCi0gICAgYXBwbHko
WyZtYXBEYXRhXShjb25zdCB1aW50OF90KiBjaHVuaywgc2l6ZV90IGNodW5rU2l6ZSkgewotICAg
ICAgICBtZW1jcHkobWFwRGF0YSwgY2h1bmssIGNodW5rU2l6ZSk7Ci0gICAgICAgIG1hcERhdGEg
Kz0gY2h1bmtTaXplOworICAgIGFwcGx5KFsmbWFwRGF0YV0oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+
IGNodW5rKSB7CisgICAgICAgIG1lbWNweShtYXBEYXRhLCBjaHVuay5kYXRhKCksIGNodW5rLnNp
emUoKSk7CisgICAgICAgIG1hcERhdGEgKz0gY2h1bmsuc2l6ZSgpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9KTsKIApJbmRleDogU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICsz
NCw3IEBACiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KQEAgLTIxMCw3ICsyMTEsNyBAQCBXVEZfRVhQT1JUX1BSSVZBVEUg
U3RyaW5nIHJlYWxQYXRoKGNvbnN0CiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc1NhZmVUb1Vz
ZU1lbW9yeU1hcEZvclBhdGgoY29uc3QgU3RyaW5nJik7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBtYWtlU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChjb25zdCBTdHJpbmcmKTsKIAotV1RGX0VY
UE9SVF9QUklWQVRFIGJvb2wgdW5tYXBWaWV3T2ZGaWxlKHZvaWQqIGJ1ZmZlciwgc2l6ZV90KTsK
K1dURl9FWFBPUlRfUFJJVkFURSBib29sIHVubWFwVmlld09mRmlsZShTcGFuPHN0ZDo6Ynl0ZT4p
OwogCiBjbGFzcyBNYXBwZWRGaWxlRGF0YSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CkBAIC0yMjMsMTcgKzIyNCwxNSBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5N
YXBwZWRGaWxlRGF0YSgpOwogICAgIE1hcHBlZEZpbGVEYXRhJiBvcGVyYXRvcj0oTWFwcGVkRmls
ZURhdGEmJik7CiAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
ISFtX2ZpbGVEYXRhOyB9Ci0gICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZmlsZURhdGE7IH0KLSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9maWxlU2l6
ZTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fZmls
ZURhdGEuZGF0YSgpOyB9CisgICAgU3BhbjxzdGQ6OmJ5dGU+IGRhdGEoKSBjb25zdCB7IHJldHVy
biBtX2ZpbGVEYXRhOyB9CiAKLSAgICB2b2lkKiBsZWFrSGFuZGxlKCkgeyByZXR1cm4gc3RkOjpl
eGNoYW5nZShtX2ZpbGVEYXRhLCBudWxscHRyKTsgfQorICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBT
cGFuPHN0ZDo6Ynl0ZT4gbGVha0hhbmRsZSgpIHsgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9maWxl
RGF0YSwgeyB9KTsgfQogCiBwcml2YXRlOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIG1h
cEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBGaWxlT3Blbk1vZGUsIE1hcHBlZEZpbGVN
b2RlKTsKIAotICAgIHZvaWQqIG1fZmlsZURhdGEgeyBudWxscHRyIH07Ci0gICAgdW5zaWduZWQg
bV9maWxlU2l6ZSB7IDAgfTsKKyAgICBTcGFuPHN0ZDo6Ynl0ZT4gbV9maWxlRGF0YTsKIH07CiAK
IGlubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGxhdGZvcm1GaWxlSGFuZGxl
IGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUgbWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKQEAgLTI0Nywy
MSArMjQ2LDE5IEBAIGlubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGwKIH0K
IAogaW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShNYXBwZWRGaWxlRGF0YSYm
IG90aGVyKQotICAgIDogbV9maWxlRGF0YShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEs
IG51bGxwdHIpKQotICAgICwgbV9maWxlU2l6ZShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZVNp
emUsIDApKQorICAgIDogbV9maWxlRGF0YShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEs
IHsgfSkpCiB7CiB9CiAKIGlubGluZSBNYXBwZWRGaWxlRGF0YSYgTWFwcGVkRmlsZURhdGE6Om9w
ZXJhdG9yPShNYXBwZWRGaWxlRGF0YSYmIG90aGVyKQogewotICAgIG1fZmlsZURhdGEgPSBzdGQ6
OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEsIG51bGxwdHIpOwotICAgIG1fZmlsZVNpemUgPSBz
dGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZVNpemUsIDApOworICAgIG1fZmlsZURhdGEgPSBzdGQ6
OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEsIHsgfSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQog
CiAvLyBUaGlzIGNyZWF0ZXMgdGhlIGRlc3RpbmF0aW9uIGZpbGUsIG1hcHMgaXQsIHdyaXRlIHRo
ZSBwcm92aWRlZCBkYXRhIHRvIGl0IGFuZCByZXR1cm5zIHRoZSBtYXBwZWQgZmlsZS4KIC8vIFRo
aXMgZnVuY3Rpb24gZmFpbHMgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIGZpbGUgYXQgdGhlIGRlc3Rp
bmF0aW9uIHBhdGguCi1XVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVuY3Rpb248dm9pZChjb25z
dCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYpPiYmIGFwcGx5LCBQbGF0
Zm9ybUZpbGVIYW5kbGUqID0gbnVsbHB0cik7CitXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmls
ZURhdGEgbWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVu
Y3Rpb248dm9pZChjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+Jik+
JiYgYXBwbHksIFBsYXRmb3JtRmlsZUhhbmRsZSogPSBudWxscHRyKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgRmlsZVN5c3RlbUltcGwKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93
dGYvU0hBMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU0hBMS5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL1NIQTEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NiwxMCArNDYsMTAgQEAgU0hBMTo6U0hBMSgpCiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNM
QVJBVElPTlNfRU5ECiB9CiAKLXZvaWQgU0hBMTo6YWRkQnl0ZXMoY29uc3QgdWludDhfdCogaW5w
dXQsIHNpemVfdCBsZW5ndGgpCit2b2lkIFNIQTE6OmFkZEJ5dGVzKFNwYW48Y29uc3Qgc3RkOjpi
eXRlPiBpbnB1dCkKIHsKICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgot
ICAgIENDX1NIQTFfVXBkYXRlKCZtX2NvbnRleHQsIGlucHV0LCBsZW5ndGgpOworICAgIENDX1NI
QTFfVXBkYXRlKCZtX2NvbnRleHQsIGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpKTsKICAgICBB
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIH0KIApAQCAtMTAxLDExICsxMDEsMTEg
QEAgU0hBMTo6U0hBMSgpCiAgICAgcmVzZXQoKTsKIH0KIAotdm9pZCBTSEExOjphZGRCeXRlcyhj
b25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGxlbmd0aCkKK3ZvaWQgU0hBMTo6YWRkQnl0ZXMo
U3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQogewotICAgIHdoaWxlIChsZW5ndGgtLSkgewor
ICAgIGZvciAoYXV0byBieXRlIDogaW5wdXQpIHsKICAgICAgICAgQVNTRVJUKG1fY3Vyc29yIDwg
NjQpOwotICAgICAgICBtX2J1ZmZlclttX2N1cnNvcisrXSA9ICppbnB1dCsrOworICAgICAgICBt
X2J1ZmZlclttX2N1cnNvcisrXSA9IHN0ZDo6dG9faW50ZWdlcjx1aW50OF90PihieXRlKTsKICAg
ICAgICAgKyttX3RvdGFsQnl0ZXM7CiAgICAgICAgIGlmIChtX2N1cnNvciA9PSA2NCkKICAgICAg
ICAgICAgIHByb2Nlc3NCbG9jaygpOwpJbmRleDogU291cmNlL1dURi93dGYvU0hBMS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NIQTEuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dURi93dGYvU0hBMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgPGFycmF5PgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAt
NDUsMTUgKzQ2LDExIEBAIGNsYXNzIFNIQTEgewogcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBTSEExKCk7CiAKLSAgICB2b2lkIGFkZEJ5dGVzKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
aW5wdXQpCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkQnl0ZXMoU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkZEJ5dGVzKFQmJiBk
YXRhKQogICAgIHsKLSAgICAgICAgYWRkQnl0ZXMoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkp
OworICAgICAgICByZXR1cm4gYWRkQnl0ZXMoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KGFzQnl0ZXMo
U3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihkYXRhKSB9KSkpOwogICAgIH0KLSAgICB2b2lkIGFkZEJ5
dGVzKGNvbnN0IENTdHJpbmcmIGlucHV0KQotICAgIHsKLSAgICAgICAgYWRkQnl0ZXMoaW5wdXQu
ZGF0YUFzVUludDhQdHIoKSwgaW5wdXQubGVuZ3RoKCkpOwotICAgIH0KLSAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBhZGRCeXRlcyhjb25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGxlbmd0
aCk7CiAKICAgICAvLyBTaXplIG9mIHRoZSBTSEExIGhhc2gKICAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgaGFzaFNpemUgPSAyMDsKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL1ZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtNjEzLDYgKzYxMyw3IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKICAgICB0eXBlZGVmIFQg
VmFsdWVUeXBlOworICAgIHR5cGVkZWYgVCB2YWx1ZV90eXBlOwogCiAgICAgdHlwZWRlZiBUKiBp
dGVyYXRvcjsKICAgICB0eXBlZGVmIGNvbnN0IFQqIGNvbnN0X2l0ZXJhdG9yOwpJbmRleDogU291
cmNlL1dURi93dGYvY2YvU3BhbkNGLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvY2Yv
U3BhbkNGLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvY2YvU3BhbkNGLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KKyNpbmNsdWRlIDx3
dGYvU3Bhbi5oPgorCituYW1lc3BhY2UgV1RGIHsKKworaW5saW5lIFNwYW48Y29uc3Qgc3RkOjpi
eXRlPiBhc0J5dGVzKENGRGF0YVJlZiBkYXRhKQoreworICAgIHJldHVybiB7IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3Qgc3RkOjpieXRlKj4oQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKSksIHN0YXRpY19j
YXN0PHNpemVfdD4oQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEpKSB9OworfQorCit9CisKK3VzaW5nIFdU
Rjo6YXNCeXRlczsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL2NvY29hL1NwYW5Db2NvYS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL2NvY29hL1NwYW5Db2NvYS5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XVEYvd3RmL2NvY29hL1NwYW5Db2NvYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEZvdW5k
YXRpb24vRm91bmRhdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CisKK25hbWVzcGFjZSBX
VEYgeworCitpbmxpbmUgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGFzQnl0ZXMoTlNEYXRhICpkYXRh
KQoreworICAgIHJldHVybiB7IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0
YS5ieXRlcyksIGRhdGEubGVuZ3RoIH07Cit9CisKK30KKwordXNpbmcgV1RGOjphc0J5dGVzOwpJ
bmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5j
cHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNp
c3RlbnRDb2RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgQ29k
ZXI8Q1N0cmluZz46OmVuY29kZShFbmNvZGVyJiBlbmMKIAogICAgIHVpbnQzMl90IGxlbmd0aCA9
IHN0cmluZy5sZW5ndGgoKTsKICAgICBlbmNvZGVyIDw8IGxlbmd0aDsKLSAgICBlbmNvZGVyLmVu
Y29kZUZpeGVkTGVuZ3RoRGF0YShzdHJpbmcuZGF0YUFzVUludDhQdHIoKSwgbGVuZ3RoKTsKKyAg
ICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShzdHJpbmcuYnl0ZXMoKSk7CiB9CiAKIHN0
ZDo6b3B0aW9uYWw8Q1N0cmluZz4gQ29kZXI8Q1N0cmluZz46OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQpAQCAtNzgsNyArNzgsNyBAQCBzdGQ6Om9wdGlvbmFsPENTdHJpbmc+IENvZGVyPENTdHJp
bmc+OjpkCiAKICAgICBjaGFyKiBidWZmZXI7CiAgICAgQ1N0cmluZyBzdHJpbmcgPSBDU3RyaW5n
OjpuZXdVbmluaXRpYWxpemVkKCpsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIpLCAq
bGVuZ3RoKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBy
ZWludGVycHJldF9jYXN0PHN0ZDo6Ynl0ZSo+KGJ1ZmZlciksICpsZW5ndGggfSkpCiAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKICAgICByZXR1cm4gc3RyaW5nOwpAQCAtOTYsMTEgKzk2
LDcgQEAgdm9pZCBDb2RlcjxTdHJpbmc+OjplbmNvZGUoRW5jb2RlciYgZW5jbwogICAgIGJvb2wg
aXM4Qml0ID0gc3RyaW5nLmlzOEJpdCgpOwogCiAgICAgZW5jb2RlciA8PCBsZW5ndGggPDwgaXM4
Qml0OwotCi0gICAgaWYgKGlzOEJpdCkKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEoc3RyaW5nLmNoYXJhY3RlcnM4KCksIGxlbmd0aCk7Ci0gICAgZWxzZQotICAgICAgICBl
bmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihzdHJpbmcuY2hhcmFjdGVyczE2KCkpLCBsZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAg
ICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShzdHJpbmcuYnl0ZXMoKSk7CiB9CiAKIHRl
bXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgpAQCAtMTEyLDcgKzEwOCw3IEBAIHN0YXRp
YyBpbmxpbmUgc3RkOjpvcHRpb25hbDxTdHJpbmc+IGRlY28KIAogICAgIENoYXJhY3RlclR5cGUq
IGJ1ZmZlcjsKICAgICBTdHJpbmcgc3RyaW5nID0gU3RyaW5nOjpjcmVhdGVVbmluaXRpYWxpemVk
KGxlbmd0aCwgYnVmZmVyKTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1ZmZlciksIGxlbmd0aCAqIHNpemVvZihDaGFy
YWN0ZXJUeXBlKSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFu
IHsgcmVpbnRlcnByZXRfY2FzdDxzdGQ6OmJ5dGUqPihidWZmZXIpLCBsZW5ndGggKiBzaXplb2Yo
Q2hhcmFjdGVyVHlwZSkgfSkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgCiAg
ICAgcmV0dXJuIHN0cmluZzsKQEAgLTE0MiwxMyArMTM4LDEzIEBAIHN0ZDo6b3B0aW9uYWw8U3Ry
aW5nPiBDb2RlcjxTdHJpbmc+OjpkZWMKIAogdm9pZCBDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU0hBMTo6RGlnZXN0JiBkaWdlc3QpCiB7Ci0gICAg
ZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0LmRhdGEoKSwgc2l6ZW9mKGRpZ2Vz
dCkpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGRpZ2VzdCk7CiB9CiAKIHN0
ZDo6b3B0aW9uYWw8U0hBMTo6RGlnZXN0PiBDb2RlcjxTSEExOjpEaWdlc3Q+OjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKIHsKICAgICBTSEExOjpEaWdlc3QgdG1wOwotICAgIGlmICghZGVjb2Rl
ci5kZWNvZGVGaXhlZExlbmd0aERhdGEodG1wLmRhdGEoKSwgc2l6ZW9mKHRtcCkpKQorICAgIGlm
ICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEodG1wKSkKICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKICAgICByZXR1cm4gdG1wOwogfQpJbmRleDogU291cmNlL1dURi93dGYvcGVy
c2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDksNyArMTQ5LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNh
cGFjaQogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCiAgICAgewogICAgICAgICBlbmNvZGVyIDw8
IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2ZWN0b3Iuc2l6ZSgpKTsKLSAgICAgICAgZW5jb2Rlci5l
bmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4odmVj
dG9yLmRhdGEoKSksIHZlY3Rvci5zaXplKCkgKiBzaXplb2YoVCkpOworICAgICAgICBlbmNvZGVy
LmVuY29kZUZpeGVkTGVuZ3RoRGF0YSh2ZWN0b3IpOwogICAgIH0KICAgICAKICAgICBzdGF0aWMg
c3RkOjpvcHRpb25hbDxWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+PiBkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKQEAgLTE3Myw3ICsxNzMsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
aW5saW5lQ2FwYWNpCiAgICAgICAgIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4gdGVtcDsKICAg
ICAgICAgdGVtcC5ncm93KHNpemUpOwogCi0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhl
ZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4odGVtcC5kYXRhKCkpLCBzaXpl
ICogc2l6ZW9mKFQpKSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0
YSh0ZW1wKSkKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKICAgICAgICAgcmV0
dXJuIHRlbXA7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVj
b2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lz
dGVudERlY29kZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJz
aXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDIzICsz
MSwyMSBAQAogbmFtZXNwYWNlIFdURiB7CiBuYW1lc3BhY2UgUGVyc2lzdGVuY2UgewogCi1EZWNv
ZGVyOjpEZWNvZGVyKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpCi0g
ICAgOiBtX2J1ZmZlcihidWZmZXIpCi0gICAgLCBtX2J1ZmZlclBvc2l0aW9uKGJ1ZmZlcikKLSAg
ICAsIG1fYnVmZmVyRW5kKGJ1ZmZlciArIGJ1ZmZlclNpemUpCitEZWNvZGVyOjpEZWNvZGVyKFNw
YW48Y29uc3Qgc3RkOjpieXRlPiBidWZmZXIpCisgICAgOiBtX2J1ZmZlcihidWZmZXIuZGF0YSgp
KQorICAgICwgbV9idWZmZXJQb3NpdGlvbihidWZmZXIuZGF0YSgpKQorICAgICwgbV9idWZmZXJF
bmQoYnVmZmVyLmRhdGEoKSArIGJ1ZmZlci5zaXplKCkpCiB7CiB9CiAKLURlY29kZXI6On5EZWNv
ZGVyKCkKLXsKLX0KK0RlY29kZXI6On5EZWNvZGVyKCkgPSBkZWZhdWx0OwogCiBib29sIERlY29k
ZXI6OmJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZV90IHNpemUpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIHNpemUgPD0gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2J1ZmZlckVuZCAtIG1fYnVm
ZmVyUG9zaXRpb24pOwogfQogCi1jb25zdCB1aW50OF90KiBEZWNvZGVyOjpidWZmZXJQb2ludGVy
Rm9yRGlyZWN0UmVhZChzaXplX3Qgc2l6ZSkKK2NvbnN0IHN0ZDo6Ynl0ZSogRGVjb2Rlcjo6YnVm
ZmVyUG9pbnRlckZvckRpcmVjdFJlYWQoc2l6ZV90IHNpemUpCiB7CiAgICAgaWYgKCFidWZmZXJJ
c0xhcmdlRW5vdWdoVG9Db250YWluKHNpemUpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAg
LTU1LDE2ICs1MywxNiBAQCBjb25zdCB1aW50OF90KiBEZWNvZGVyOjpidWZmZXJQb2ludGVyRm9y
CiAgICAgYXV0byBkYXRhID0gbV9idWZmZXJQb3NpdGlvbjsKICAgICBtX2J1ZmZlclBvc2l0aW9u
ICs9IHNpemU7CiAKLSAgICBFbmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBk
YXRhLCBzaXplKTsKKyAgICBFbmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBT
cGFuIHsgZGF0YSwgc2l6ZSB9KTsKICAgICByZXR1cm4gZGF0YTsKIH0KIAotYm9vbCBEZWNvZGVy
OjpkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCitib29s
IERlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPHN0ZDo6Ynl0ZT4gZGF0YSkKIHsK
LSAgICBhdXRvIGJ1ZmZlciA9IGJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFkKHNpemUpOworICAg
IGF1dG8gYnVmZmVyID0gYnVmZmVyUG9pbnRlckZvckRpcmVjdFJlYWQoZGF0YS5zaXplKCkpOwog
ICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbWVtY3B5KGRhdGEs
IGJ1ZmZlciwgc2l6ZSk7CisgICAgbWVtY3B5KGRhdGEuZGF0YSgpLCBidWZmZXIsIGRhdGEuc2l6
ZSgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTM5LDcgKzEzNyw3IEBAIGJvb2wgRGVj
b2Rlcjo6dmVyaWZ5Q2hlY2tzdW0oKQogICAgIG1fc2hhMS5jb21wdXRlSGFzaChjb21wdXRlZEhh
c2gpOwogCiAgICAgU0hBMTo6RGlnZXN0IHNhdmVkSGFzaDsKLSAgICBpZiAoIWRlY29kZUZpeGVk
TGVuZ3RoRGF0YShzYXZlZEhhc2guZGF0YSgpLCBzaXplb2Yoc2F2ZWRIYXNoKSkpCisgICAgaWYg
KCFkZWNvZGVGaXhlZExlbmd0aERhdGEoc2F2ZWRIYXNoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgcmV0dXJuIGNvbXB1dGVkSGFzaCA9PSBzYXZlZEhhc2g7CkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmgJKHJldmlzaW9uIDI3
ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9FbnVtVHJh
aXRzLmg+CiAjaW5jbHVkZSA8d3RmL1NIQTEuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2lu
Y2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaD4KIAogbmFtZXNwYWNlIFdU
RiB7CkBAIC0zNSw3ICszNiwxMiBAQCBuYW1lc3BhY2UgUGVyc2lzdGVuY2UgewogY2xhc3MgRGVj
b2RlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgV1RGX0VY
UE9SVF9QUklWQVRFIERlY29kZXIoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVy
U2l6ZSk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gRGVjb2RlcihUJiYgZGF0YSkKKyAgICAg
ICAgOiBEZWNvZGVyIHsgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KGFzQnl0ZXMoU3BhbiB7IHN0ZDo6
Zm9yd2FyZDxUPihkYXRhKSB9KSkgfQorICAgIHsKKyAgICB9CisKKyAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgRGVjb2RlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwogICAgIFdURl9FWFBPUlRfUFJJ
VkFURSB+RGVjb2RlcigpOwogCiAgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
YnVmZmVyRW5kIC0gbV9idWZmZXI7IH0KQEAgLTQzLDcgKzQ5LDExIEBAIHB1YmxpYzoKIAogICAg
IFdURl9FWFBPUlRfUFJJVkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCB2ZXJpZnlDaGVja3N1
bSgpOwogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRl
Y29kZUZpeGVkTGVuZ3RoRGF0YSh1aW50OF90Kiwgc2l6ZV90KTsKKyAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48
c3RkOjpieXRlPik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBkZWNvZGVGaXhlZExl
bmd0aERhdGEoVCYmIGRhdGEpCisgICAgeworICAgICAgICByZXR1cm4gZGVjb2RlRml4ZWRMZW5n
dGhEYXRhKFNwYW48c3RkOjpieXRlPihhc1dyaXRhYmxlQnl0ZXMoU3BhbiB7IHN0ZDo6Zm9yd2Fy
ZDxUPihkYXRhKSB9KSkpOworICAgIH0KIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVy
JiBvcGVyYXRvcj4+KHN0ZDo6b3B0aW9uYWw8Ym9vbD4mKTsKICAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgRGVjb2RlciYgb3BlcmF0b3I+PihzdGQ6Om9wdGlvbmFsPHVpbnQ4X3Q+Jik7CkBAIC04NCw3
ICs5NCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG51bUVsZW1lbnRzIDw9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgLyBzaXplb2YoVCkgJiYgYnVmZmVySXNMYXJnZUVu
b3VnaFRvQ29udGFpbihudW1FbGVtZW50cyAqIHNpemVvZihUKSk7CiAgICAgfQogCi0gICAgV1RG
X0VYUE9SVF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBjb25zdCB1aW50OF90KiBidWZmZXJQ
b2ludGVyRm9yRGlyZWN0UmVhZChzaXplX3QgbnVtQnl0ZXMpOworICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gY29uc3Qgc3RkOjpieXRlKiBidWZmZXJQb2ludGVyRm9y
RGlyZWN0UmVhZChzaXplX3QgbnVtQnl0ZXMpOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzSVBDRGVjb2RlciA9IGZhbHNlOwogCkBAIC05Miw5ICsxMDIsOSBAQCBwcml2YXRlOgogICAg
IFdURl9FWFBPUlRfUFJJVkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBidWZmZXJJc0xhcmdl
RW5vdWdoVG9Db250YWluKHNpemVfdCkgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlw
ZT4gRGVjb2RlciYgZGVjb2RlTnVtYmVyKHN0ZDo6b3B0aW9uYWw8VHlwZT4mKTsKIAotICAgIGNv
bnN0IHVpbnQ4X3QqIG1fYnVmZmVyOwotICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyUG9zaXRp
b247Ci0gICAgY29uc3QgdWludDhfdCogbV9idWZmZXJFbmQ7CisgICAgY29uc3Qgc3RkOjpieXRl
KiBtX2J1ZmZlcjsKKyAgICBjb25zdCBzdGQ6OmJ5dGUqIG1fYnVmZmVyUG9zaXRpb247CisgICAg
Y29uc3Qgc3RkOjpieXRlKiBtX2J1ZmZlckVuZDsKIAogICAgIFNIQTEgbV9zaGExOwogfTsKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5j
cHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNp
c3RlbnRFbmNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMzQgKzMxLDM0IEBACiBuYW1l
c3BhY2UgV1RGIHsKIG5hbWVzcGFjZSBQZXJzaXN0ZW5jZSB7CiAKLUVuY29kZXI6OkVuY29kZXIo
KQotewotfQotCi1FbmNvZGVyOjp+RW5jb2RlcigpCi17Ci19CitFbmNvZGVyOjpFbmNvZGVyKCkg
PSBkZWZhdWx0OworRW5jb2Rlcjo6fkVuY29kZXIoKSA9IGRlZmF1bHQ7CiAKLXVpbnQ4X3QqIEVu
Y29kZXI6Omdyb3coc2l6ZV90IHNpemUpCitzdGQ6OmJ5dGUqIEVuY29kZXI6Omdyb3coc2l6ZV90
IHNpemUpCiB7CiAgICAgc2l6ZV90IG5ld1Bvc2l0aW9uID0gbV9idWZmZXIuc2l6ZSgpOwogICAg
IG1fYnVmZmVyLmdyb3cobV9idWZmZXIuc2l6ZSgpICsgc2l6ZSk7CiAgICAgcmV0dXJuIG1fYnVm
ZmVyLmRhdGEoKSArIG5ld1Bvc2l0aW9uOwogfQogCi12b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNr
c3VtRm9yRGF0YShTSEExJiBzaGExLCBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkK
K3ZvaWQgRW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmIHNoYTEsIFNwYW48Y29u
c3QgdWludDhfdD4gZGF0YSkKK3sKKyAgICByZXR1cm4gdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKHNo
YTEsIGFzQnl0ZXMoZGF0YSkpOworfQorCit2b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9y
RGF0YShTSEExJiBzaGExLCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkKIHsKICAgICBhdXRv
IHR5cGVTYWx0ID0gU2FsdDx1aW50OF90Kj46OnZhbHVlOwotICAgIHNoYTEuYWRkQnl0ZXMocmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7Ci0g
ICAgc2hhMS5hZGRCeXRlcyhkYXRhLCBzaXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAm
dHlwZVNhbHQsIDEgfSk7CisgICAgc2hhMS5hZGRCeXRlcyhkYXRhKTsKIH0KIAotdm9pZCBFbmNv
ZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNp
emUpCit2b2lkIEVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6
Ynl0ZT4gZGF0YSkKIHsKLSAgICB1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhLCBz
aXplKTsKKyAgICB1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhKTsKIAotICAgIHVp
bnQ4X3QqIGJ1ZmZlciA9IGdyb3coc2l6ZSk7Ci0gICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6
ZSk7CisgICAgYXV0byogYnVmZmVyID0gZ3JvdyhkYXRhLnNpemUoKSk7CisgICAgbWVtY3B5KGJ1
ZmZlciwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
VHlwZT4KQEAgLTY2LDcgKzY2LDcgQEAgRW5jb2RlciYgRW5jb2Rlcjo6ZW5jb2RlTnVtYmVyKFR5
cGUgdmFsdQogewogICAgIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKG1fc2hhMSwg
dmFsdWUpOwogCi0gICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhzaXplb2YoVHlwZSkpOworICAg
IGF1dG8qIGJ1ZmZlciA9IGdyb3coc2l6ZW9mKFR5cGUpKTsKICAgICBtZW1jcHkoYnVmZmVyLCAm
dmFsdWUsIHNpemVvZihUeXBlKSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQpAQCAtMTI1LDcgKzEy
NSw3IEBAIHZvaWQgRW5jb2Rlcjo6ZW5jb2RlQ2hlY2tzdW0oKQogewogICAgIFNIQTE6OkRpZ2Vz
dCBoYXNoOwogICAgIG1fc2hhMS5jb21wdXRlSGFzaChoYXNoKTsKLSAgICBlbmNvZGVGaXhlZExl
bmd0aERhdGEoaGFzaC5kYXRhKCksIGhhc2guc2l6ZSgpKTsKKyAgICBlbmNvZGVGaXhlZExlbmd0
aERhdGEoaGFzaCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1Bl
cnNpc3RlbnRFbmNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVu
Y2UvUGVyc2lzdGVudEVuY29kZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93
dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NiArMjcsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYv
U0hBMS5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
I2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaD4KIApAQCAtNDMsNyAr
NDQsMTEgQEAgcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSB+RW5jb2RlcigpOwogCiAg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlQ2hlY2tzdW0oKTsKLSAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCosIHNp
emVfdCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBl
bmNvZGVGaXhlZExlbmd0aERhdGEoVCYmIGRhdGEpCisgICAgeworICAgICAgICBlbmNvZGVGaXhl
ZExlbmd0aERhdGEoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KGFzQnl0ZXMoU3BhbihzdGQ6OmZvcndh
cmQ8VD4oZGF0YSkpKSkpOworICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6
ZW5hYmxlX2lmX3Q8c3RkOjppc19lbnVtPFQ+Ojp2YWx1ZT4qID0gbnVsbHB0cj4KICAgICBFbmNv
ZGVyJiBvcGVyYXRvcjw8KGNvbnN0IFQmIHQpCkBAIC03MCwyMyArNzUsMjIgQEAgcHVibGljOgog
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBFbmNvZGVyJiBvcGVyYXRvcjw8KGZsb2F0KTsKICAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgRW5jb2RlciYgb3BlcmF0b3I8PChkb3VibGUpOwogCi0gICAgY29u
c3QgdWludDhfdCogYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuZGF0YSgpOyB9Ci0g
ICAgc2l6ZV90IGJ1ZmZlclNpemUoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5zaXplKCk7IH0K
LQotICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZvckRh
dGEoU0hBMSYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOworICAgIFNwYW48Y29uc3Qgc3RkOjpi
eXRlPiBidWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlcjsgfQorICAgIAorICAgIFdURl9F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZvckRhdGEoU0hBMSYsIFNw
YW48Y29uc3QgdWludDhfdD4pOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB1
cGRhdGVDaGVja3N1bUZvckRhdGEoU0hBMSYsIFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+IHN0YXRpYyB2b2lkIHVwZGF0ZUNoZWNrc3VtRm9yTnVt
YmVyKFNIQTEmLCBUeXBlKTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lQQ0VuY29k
ZXIgPSBmYWxzZTsKIAogcHJpdmF0ZToKLQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+IEVu
Y29kZXImIGVuY29kZU51bWJlcihUeXBlKTsKIAotICAgIHVpbnQ4X3QqIGdyb3coc2l6ZV90KTsK
KyAgICBzdGQ6OmJ5dGUqIGdyb3coc2l6ZV90KTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBU
eXBlPiBzdHJ1Y3QgU2FsdDsKIAotICAgIFZlY3Rvcjx1aW50OF90LCA0MDk2PiBtX2J1ZmZlcjsK
KyAgICBWZWN0b3I8c3RkOjpieXRlLCA0MDk2PiBtX2J1ZmZlcjsKICAgICBTSEExIG1fc2hhMTsK
IH07CiAKQEAgLTEwNiw4ICsxMTAsOCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4KIHZvaWQg
RW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIoU0hBMSYgc2hhMSwgVHlwZSB2YWx1ZSkK
IHsKICAgICBhdXRvIHR5cGVTYWx0ID0gU2FsdDxUeXBlPjo6dmFsdWU7Ci0gICAgc2hhMS5hZGRC
eXRlcyhyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdHlwZVNhbHQpLCBzaXplb2YodHlwZVNh
bHQpKTsKLSAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2YWx1
ZSksIHNpemVvZih2YWx1ZSkpOworICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZ0eXBlU2FsdCwg
MSB9KTsKKyAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmdmFsdWUsIDEgfSk7CiB9CiAKIH0KSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi90ZXh0L0Jhc2U2NC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYv
d3RmL3RleHQvQmFzZTY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDM5ICsxNDAsMzkgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIAogICAgICAgICBkZXN0aW5h
dGlvbkRhdGFCdWZmZXJbZGlkeCsrXSA9ICc9JzsKIH0KIAotc3RhdGljIFZlY3Rvcjx1aW50OF90
PiBiYXNlNjRFbmNvZGVJbnRlcm5hbChjb25zdCB1aW50OF90KiBpbnB1dERhdGFCdWZmZXIsIHVu
c2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNv
ZGVNYXAgbWFwKQorc3RhdGljIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVJbnRlcm5hbChT
cGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJh
c2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgYXV0byBkZXN0aW5hdGlvbkxlbmd0aCA9IGNhbGN1
bGF0ZUJhc2U2NEVuY29kZWRTaXplKGlucHV0TGVuZ3RoLCBwb2xpY3kpOworICAgIGF1dG8gZGVz
dGluYXRpb25MZW5ndGggPSBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShpbnB1dC5zaXplKCks
IHBvbGljeSk7CiAgICAgaWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkKICAgICAgICAgcmV0dXJuIHsg
fTsKIAogICAgIFZlY3Rvcjx1aW50OF90PiBkZXN0aW5hdGlvblZlY3RvcihkZXN0aW5hdGlvbkxl
bmd0aCk7Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoaW5wdXREYXRhQnVmZmVyLCBpbnB1dExl
bmd0aCwgZGVzdGluYXRpb25WZWN0b3IuZGF0YSgpLCBkZXN0aW5hdGlvbkxlbmd0aCwgcG9saWN5
LCBtYXApOworICAgIGJhc2U2NEVuY29kZUludGVybmFsKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KGlucHV0LmRhdGEoKSksIGlucHV0LnNpemUoKSwgZGVzdGluYXRpb25WZWN0b3Iu
ZGF0YSgpLCBkZXN0aW5hdGlvbkxlbmd0aCwgcG9saWN5LCBtYXApOwogICAgIHJldHVybiBkZXN0
aW5hdGlvblZlY3RvcjsKIH0KIAotdm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCogaW5wdXRE
YXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgVUNoYXIqIGRlc3RpbmF0aW9uRGF0YUJ1
ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xp
Y3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCit2b2lkIGJhc2U2NEVuY29kZShTcGFuPGNvbnN0IHN0
ZDo6Ynl0ZT4gaW5wdXQsIFVDaGFyKiBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRl
c3RpbmF0aW9uTGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVN
YXAgbWFwKQogewogICAgIGlmICghZGVzdGluYXRpb25MZW5ndGgpCiAgICAgICAgIHJldHVybjsK
LSAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5w
dXREYXRhQnVmZmVyKSwgaW5wdXRMZW5ndGgsIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgZGVzdGlu
YXRpb25MZW5ndGgsIHBvbGljeSwgbWFwKTsKKyAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChyZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCks
IGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgZGVzdGluYXRpb25MZW5ndGgsIHBvbGljeSwgbWFwKTsK
IH0KIAotdm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCogaW5wdXREYXRhQnVmZmVyLCB1bnNp
Z25lZCBpbnB1dExlbmd0aCwgTENoYXIqIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgdW5zaWduZWQg
ZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29k
ZU1hcCBtYXApCit2b2lkIGJhc2U2NEVuY29kZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQs
IExDaGFyKiBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uTGVuZ3Ro
LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewogICAg
IGlmICghZGVzdGluYXRpb25MZW5ndGgpCiAgICAgICAgIHJldHVybjsKLSAgICBiYXNlNjRFbmNv
ZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXREYXRhQnVmZmVyKSwg
aW5wdXRMZW5ndGgsIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgZGVzdGluYXRpb25MZW5ndGgsIHBv
bGljeSwgbWFwKTsKKyAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCksIGRlc3RpbmF0aW9uRGF0
YUJ1ZmZlciwgZGVzdGluYXRpb25MZW5ndGgsIHBvbGljeSwgbWFwKTsKIH0KIAotVmVjdG9yPHVp
bnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwg
dW5zaWduZWQgaW5wdXRMZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVu
Y29kZU1hcCBtYXApCitWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoU3Bhbjxj
b25zdCBzdGQ6OmJ5dGU+IGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRF
bmNvZGVNYXAgbWFwKQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNf
Y2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXREYXRhQnVmZmVyKSwgaW5wdXRMZW5ndGgsIHBvbGlj
eSwgbWFwKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoaW5wdXQsIHBvbGljeSwg
bWFwKTsKIH0KIAotU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqIGlucHV0
RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xp
Y3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCitTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoU3Bh
bjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNl
NjRFbmNvZGVNYXAgbWFwKQogewotICAgIHJldHVybiBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQo
aW5wdXREYXRhQnVmZmVyLCBpbnB1dExlbmd0aCwgcG9saWN5LCBtYXApKTsKKyAgICByZXR1cm4g
bWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKGlucHV0LCBwb2xpY3ksIG1hcCkpOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJh
c2U2NERlY29kZUludGVybmFsKGNvbnN0IFQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5w
dXRMZW5ndGgsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRpb25zLCBCYXNlNjRE
ZWNvZGVNYXAgbWFwKQpAQCAtMjU0LDg0ICsyNTQsMjcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RhdGljIHN0ZDo6b3B0aW9uYQogICAgIHJldHVybiBkZXN0aW5hdGlvbjsKIH0KIAotc3RkOjpv
cHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBTdHJpbmcmIGlucHV0
LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFw
IG1hcCkKLXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBpbnB1dC5sZW5ndGgoKTsKLSAgICBpZiAo
IWxlbmd0aCB8fCBpbnB1dC5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGJhc2U2NERlY29kZUlu
dGVybmFsKGlucHV0LmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKLSAgICBy
ZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczE2KCksIGxlbmd0aCwg
b3B0aW9ucywgbWFwKTsKLX0KLQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2
NERlY29kZShTdHJpbmdWaWV3IGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4g
b3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKLXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBp
bnB1dC5sZW5ndGgoKTsKLSAgICBpZiAoIWxlbmd0aCB8fCBpbnB1dC5pczhCaXQoKSkKLSAgICAg
ICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnM4KCksIGxlbmd0
aCwgb3B0aW9ucywgbWFwKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQu
Y2hhcmFjdGVyczE2KCksIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKLX0KLQotc3RkOjpvcHRpb25h
bDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGlu
cHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2Rl
TWFwIG1hcCkKLXsKLSAgICBpZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHJldHVy
biBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgb3B0aW9u
cywgbWFwKTsKLX0KLQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29k
ZShjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9u
cz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVp
bnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0LCBPcHRpb25T
ZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsK
ICAgICBpZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1h
eCgpKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIHJldHVybiBiYXNlNjREZWNv
ZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkp
LCBpbnB1dC5zaXplKCksIG9wdGlvbnMsIG1hcCk7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8VmVjdG9y
PHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgdWludDhfdCogZGF0YSwgdW5zaWduZWQgbGVu
Z3RoLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2Rl
TWFwIG1hcCkKLXsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoZGF0YSwgbGVuZ3Ro
LCBvcHRpb25zLCBtYXApOwotfQotCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFz
ZTY0RGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgT3B0aW9uU2V0PEJh
c2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAg
cmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PihkYXRhKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOwotfQotCi1zdGQ6Om9wdGlvbmFsPFZlY3Rv
cjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFN0cmluZyYgaW5wdXQpCitzdGQ6Om9w
dGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IFN0cmluZyYgaW5wdXQs
IE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRpb25zLCBCYXNlNjREZWNvZGVNYXAg
bWFwKQogewogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgpOwogICAgIGlmICgh
bGVuZ3RoIHx8IGlucHV0LmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50
ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6
VVJMKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczE2
KCksIGxlbmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CisgICAgICAgIHJldHVybiBi
YXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG9wdGlvbnMs
IG1hcCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnMx
NigpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVp
bnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoU3RyaW5nVmlldyBpbnB1dCkKK3N0ZDo6b3B0aW9uYWw8
VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3RyaW5nVmlldyBpbnB1dCwgT3B0aW9uU2V0
PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7CiAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7CiAgICAgaWYgKCFsZW5ndGggfHwg
aW5wdXQuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1
dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIHsgfSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOwotICAg
IHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3Ro
LCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKLX0KLQotc3RkOjpvcHRpb25hbDxWZWN0b3I8
dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQot
ewotICAgIGlmIChpbnB1dC5zaXplKCkgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6
bWF4KCkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIGJhc2U2NERl
Y29kZUludGVybmFsKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCB7IH0sIEJhc2U2NERlY29k
ZU1hcDo6VVJMKTsKLX0KLQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVS
TERlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0KQotewotICAgIGlmIChpbnB1dC5zaXpl
KCkgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCi0gICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0LmRhdGEoKSksIGlucHV0LnNpemUoKSwgeyB9
LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgdWludDhfdCogZGF0YSwgdW5zaWduZWQgbGVuZ3Ro
KQotewotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChkYXRhLCBsZW5ndGgsIHsgfSwg
QmFzZTY0RGVjb2RlTWFwOjpVUkwpOwotfQotCi1zdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90
Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKLXsK
LSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50OF90Kj4oZGF0YSksIGxlbmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CisgICAg
ICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5n
dGgsIG9wdGlvbnMsIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0
LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdURgpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBA
CiAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4K
KyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVu
YXRlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTU2LDU0ICs1Nywz
NSBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heGltdW1CYXNlNjRMCiAvLyBSYXRoZXIg
dGhhbiBiZWluZyBwZXJmZWN0bHkgcHJlY2lzZSwgdGhpcyBpcyBhIGJpdCBjb25zZXJ2YXRpdmUu
CiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heGltdW1CYXNlNjRFbmNvZGVySW5wdXRCdWZm
ZXJTaXplID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC8gNzcgKiA3NiAv
IDQgKiAzIC0gMjsKIAotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0
IHZvaWQqLCB1bnNpZ25lZCwgVUNoYXIqLCB1bnNpZ25lZCwgQmFzZTY0RW5jb2RlUG9saWN5ID0g
QmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFz
ZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVu
Y29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQsIExDaGFyKiwgdW5zaWduZWQsIEJhc2U2NEVuY29k
ZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29k
ZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBiYXNlNjRFbmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+LCBVQ2hhciogZGVzdGluYXRpb25C
dWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uQnVmZmVyU2l6ZSwgQmFzZTY0RW5jb2RlUG9saWN5
ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0g
QmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2
NEVuY29kZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4sIExDaGFyKiBkZXN0aW5hdGlvbkJ1ZmZlciwg
dW5zaWduZWQgZGVzdGluYXRpb25CdWZmZXJTaXplLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNl
NjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRF
bmNvZGVNYXA6OkRlZmF1bHQpOwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgVmVjdG9yPHVpbnQ4X3Q+
IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgQmFzZTY0RW5jb2Rl
UG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2Rl
TWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKLVZlY3Rvcjx1aW50OF90PiBiYXNlNjRF
bmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8dWludDhfdD4mLCBCYXNlNjRFbmNvZGVQb2xpY3kg
PSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBC
YXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRv
VmVjdG9yKGNvbnN0IFZlY3RvcjxjaGFyPiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVu
Y29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29k
ZU1hcDo6RGVmYXVsdCk7Ci1WZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29u
c3QgQ1N0cmluZyYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9O
b3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7
Ci0KLVdURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3Qg
dm9pZCosIHVuc2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6
OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1
bHQpOwotU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYs
IEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMs
IEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci1TdHJpbmcgYmFz
ZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPGNoYXI+JiwgQmFzZTY0RW5jb2RlUG9saWN5
ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0g
QmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKLVN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhj
b25zdCBDU3RyaW5nJiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpE
b05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0
KTsKK1dURl9FWFBPUlRfUFJJVkFURSBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0
b3IoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+LCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNv
ZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVN
YXA6OkRlZmF1bHQpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2
NEVuY29kZVRvVmVjdG9yKFQmJiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9s
aWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpE
ZWZhdWx0KTsKIAorV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmlu
ZyhTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4sIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29k
ZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1h
cDo6RGVmYXVsdCk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgYmFzZTY0RW5jb2RlVG9T
dHJpbmcoVCYmLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90
SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwor
CitXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2
NERlY29kZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4sIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRp
b25zPiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsK
IFdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0
RGVjb2RlKGNvbnN0IFN0cmluZyYsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsg
fSwgQmFzZTY0RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKIFdURl9FWFBP
UlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKFN0
cmluZ1ZpZXcsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVj
b2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKLVdURl9FWFBPUlRfUFJJVkFURSBz
dGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVj
b2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKLVdURl9FWFBPUlRfUFJJVkFURSBz
dGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IFZlY3Rvcjxj
aGFyPiYsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2Rl
TWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6
Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IHVpbnQ4X3QqLCB1
bnNpZ25lZCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+ID0geyB9LCBCYXNlNjREZWNv
ZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRlZmF1bHQpOwotV1RGX0VYUE9SVF9QUklWQVRFIHN0
ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgY2hhciosIHVu
c2lnbmVkLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29k
ZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7Ci0KLWlubGluZSBWZWN0b3I8dWludDhf
dD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCwgQmFz
ZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKLXsKLSAgICByZXR1
cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIHBvbGlj
eSwgbWFwKTsKLX0KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6
aXNfc2FtZV92PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+
LCBTdHJpbmc+ICYmICFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVt
b3ZlX3JlZmVyZW5jZV90PFQ+PiwgU3RyaW5nVmlldz4+KiA9IG51bGxwdHI+CitzdGQ6Om9wdGlv
bmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKFQmJiwgT3B0aW9uU2V0PEJhc2U2NERl
Y29kZU9wdGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRl
ZmF1bHQpOwogCi1pbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNv
bnN0IFZlY3RvcjxjaGFyPiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2
NEVuY29kZU1hcCBtYXApCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBWZWN0b3I8dWludDhfdD4gYmFz
ZTY0RW5jb2RlVG9WZWN0b3IoVCYmIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBC
YXNlNjRFbmNvZGVNYXAgbWFwKQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihp
bnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5LCBtYXApOworICAgIHJldHVybiBiYXNl
NjRFbmNvZGVUb1ZlY3RvcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4oYXNCeXRlcyhTcGFuIHsgc3Rk
Ojpmb3J3YXJkPFQ+KGlucHV0KSB9KSksIHBvbGljeSwgbWFwKTsKIH0KIAotaW5saW5lIFZlY3Rv
cjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBDU3RyaW5nJiBpbnB1dCwgQmFz
ZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhUJiYgaW5wdXQsIEJhc2U2NEVu
Y29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgcmV0dXJuIGJh
c2U2NEVuY29kZVRvVmVjdG9yKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIHBvbGljeSwg
bWFwKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+KGFzQnl0ZXMoU3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCkgfSkpLCBwb2xpY3ksIG1h
cCk7CiB9CiAKLWlubGluZSBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2Rl
TWFwIG1hcCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNf
c2FtZV92PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBT
dHJpbmc+ICYmICFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3Zl
X3JlZmVyZW5jZV90PFQ+PiwgU3RyaW5nVmlldz4+Kj4KK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVp
bnQ4X3Q+PiBiYXNlNjREZWNvZGUoVCYmIGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0
aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gYmFzZTY0
RW5jb2RlVG9TdHJpbmcoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSwgbWFwKTsK
LX0KLQotaW5saW5lIFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdCBWZWN0b3I8Y2hh
cj4mIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFw
KQotewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0
LnNpemUoKSwgcG9saWN5LCBtYXApOwotfQotCi1pbmxpbmUgU3RyaW5nIGJhc2U2NEVuY29kZVRv
U3RyaW5nKGNvbnN0IENTdHJpbmcmIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBC
YXNlNjRFbmNvZGVNYXAgbWFwKQotewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhp
bnB1dC5kYXRhKCksIGlucHV0Lmxlbmd0aCgpLCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGJh
c2U2NERlY29kZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4oYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3
YXJkPFQ+KGlucHV0KSB9KSksIG9wdGlvbnMsIG1hcCk7CiB9CiAKIApAQCAtMTEyLDYxICs5NCw1
NyBAQCBpbmxpbmUgU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0CiAvLyBUaGlzIGZv
cm1hdCB1c2VzICctJyBhbmQgJ18nIGluc3RlYWQgb2YgJysnIGFuZCAnLycgcmVzcGVjdGl2ZWx5
LgogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotVmVjdG9yPHVpbnQ4X3Q+IGJh
c2U2NFVSTEVuY29kZVRvVmVjdG9yKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCk7Ci1WZWN0b3I8dWlu
dDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik7Ci1W
ZWN0b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPGNoYXI+
Jik7Ci1WZWN0b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgQ1N0cmlu
ZyYpOworVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKFNwYW48Y29uc3Qg
c3RkOjpieXRlPik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBWZWN0b3I8dWludDhfdD4gYmFzZTY0
VVJMRW5jb2RlVG9WZWN0b3IoVCYmKTsKIAotU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5n
KGNvbnN0IHZvaWQqLCB1bnNpZ25lZCk7Ci1TdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmco
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik7Ci1TdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmco
Y29uc3QgVmVjdG9yPGNoYXI+Jik7Ci1TdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY29u
c3QgQ1N0cmluZyYpOworU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKFNwYW48Y29uc3Qg
c3RkOjpieXRlPik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgYmFzZTY0VVJMRW5jb2Rl
VG9TdHJpbmcoVCYmKTsKIAotV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0aW9uYWw8VmVjdG9y
PHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgU3RyaW5nJik7Ci1XVEZfRVhQT1JUX1BS
SVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShTdHJp
bmdWaWV3KTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90
Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOwotV1RGX0VYUE9SVF9Q
UklWQVRFIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29u
c3QgVmVjdG9yPGNoYXI+Jik7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0
b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCB1aW50OF90KiwgdW5zaWduZWQpOwot
V1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRV
UkxEZWNvZGUoY29uc3QgY2hhciosIHVuc2lnbmVkKTsKK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVp
bnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KTsKK3N0ZDo6b3B0
aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgU3RyaW5nJik7Citz
dGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFN0cmluZ1ZpZXcp
OwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lX3Y8
c3RkOjpyZW1vdmVfY29uc3RfdDxzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxUPj4sIFN0cmluZz4g
JiYgIXN0ZDo6aXNfc2FtZV92PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJl
bmNlX3Q8VD4+LCBTdHJpbmdWaWV3Pj4qID0gbnVsbHB0cj4KK3N0ZDo6b3B0aW9uYWw8VmVjdG9y
PHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoVCYmKTsKIAotaW5saW5lIFZlY3Rvcjx1aW50OF90
PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihjb25zdCB2b2lkKiBpbnB1dCwgdW5zaWduZWQgbGVu
Z3RoKQoraW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3RvcihTcGFu
PGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvVmVj
dG9yKGlucHV0LCBsZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVN
YXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlucHV0LCBCYXNlNjRF
bmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQogCi1pbmxpbmUgVmVj
dG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYgaW5wdXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJM
RW5jb2RlVG9WZWN0b3IoVCYmIGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1Zl
Y3RvcihpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkws
IEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3Io
c3RkOjpmb3J3YXJkPFQ+KGlucHV0KSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVu
Y29kZU1hcDo6VVJMKTsKIH0KIAotaW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNv
ZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0KQoraW5saW5lIFN0cmluZyBiYXNl
NjRVUkxFbmNvZGVUb1N0cmluZyhTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCiB7Ci0gICAg
cmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBC
YXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJldHVy
biBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJh
c2U2NEVuY29kZU1hcDo6VVJMKTsKIH0KIAotaW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRV
UkxFbmNvZGVUb1ZlY3Rvcihjb25zdCBDU3RyaW5nJiBpbnB1dCkKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IFN0cmluZyBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhUJiYgaW5wdXQpCiB7Ci0gICAgcmV0
dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIEJh
c2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJu
IGJhc2U2NEVuY29kZVRvU3RyaW5nKHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCksIEJhc2U2NEVuY29k
ZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBTdHJpbmcg
YmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY29uc3Qgdm9pZCogaW5wdXQsIHVuc2lnbmVkIGxlbmd0
aCkKK2lubGluZSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2Rl
KFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2Rl
VG9TdHJpbmcoaW5wdXQsIGxlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVu
Y29kZU1hcDo6VVJMKTsKKyAgICByZXR1cm4gYmFzZTY0RGVjb2RlKGlucHV0LCB7IH0sIEJhc2U2
NERlY29kZU1hcDo6VVJMKTsKIH0KIAotaW5saW5lIFN0cmluZyBiYXNlNjRVUkxFbmNvZGVUb1N0
cmluZyhjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQoraW5saW5lIHN0ZDo6b3B0aW9uYWw8
VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgU3RyaW5nJiBpbnB1dCkKIHsK
LSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXpl
KCksIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAg
cmV0dXJuIGJhc2U2NERlY29kZShpbnB1dCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CiB9
CiAKLWlubGluZSBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPGNo
YXI+JiBpbnB1dCkKK2lubGluZSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0
VVJMRGVjb2RlKFN0cmluZ1ZpZXcgaW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRv
U3RyaW5nKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVS
TCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjREZWNvZGUoaW5wdXQs
IHsgfSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOwogfQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NFVS
TEVuY29kZVRvU3RyaW5nKGNvbnN0IENTdHJpbmcmIGlucHV0KQordGVtcGxhdGU8dHlwZW5hbWUg
VCwgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lX3Y8c3RkOjpyZW1vdmVfY29uc3RfdDxz
dGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxUPj4sIFN0cmluZz4gJiYgIXN0ZDo6aXNfc2FtZV92PHN0
ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmdWaWV3
Pj4qPgorc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShUJiYg
aW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LmRhdGEoKSwg
aW5wdXQubGVuZ3RoKCksIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6
OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NFVSTERlY29kZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4o
YXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGlucHV0KSB9KSkpOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgaW5saW5lIGJvb2wgaXNCYXNlNjRPckJh
c2U2NFVSTENoYXJhY3RlcihDaGFyYWN0ZXJUeXBlIGMpCkBAIC0yMDgsNTcgKzE4NiwzNiBAQCBp
bmxpbmUgdW5zaWduZWQgY2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpCiB9CiAKIHN0cnVjdCBCYXNl
NjRTcGVjaWZpY2F0aW9uIHsKLSAgICBjb25zdCB2b2lkKiBpbnB1dERhdGE7Ci0gICAgdW5zaWdu
ZWQgaW5wdXRMZW5ndGg7CisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0RGF0YTsKICAg
ICBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5OwogICAgIEJhc2U2NEVuY29kZU1hcCBtYXA7CiB9
OwogCi1pbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlvbiBiYXNlNjRFbmNvZGVkKGNvbnN0IHZvaWQq
IGlucHV0RGF0YSwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xp
Y3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAg
bWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KQotewotICAgIHJldHVybiB7IGlucHV0RGF0
YSwgaW5wdXRMZW5ndGgsIHBvbGljeSwgbWFwIH07Ci19Ci0KLWlubGluZSBCYXNlNjRTcGVjaWZp
Y2F0aW9uIGJhc2U2NEVuY29kZWQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCwgQmFzZTY0
RW5jb2RlUG9saWN5IHBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMp
Ci17Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCks
IHBvbGljeSk7Ci19Ci0KLWlubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NEVuY29kZWQo
Y29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9IEJh
c2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMpCi17Ci0gICAgcmV0dXJuIGJhc2U2NEVu
Y29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSk7Ci19Ci0KLWlubGluZSBC
YXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NEVuY29kZWQoY29uc3QgQ1N0cmluZyYgaW5wdXQsIEJh
c2U2NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0
TEZzKQotewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQubGVu
Z3RoKCksIHBvbGljeSk7Ci19Ci0KLWlubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NFVS
TEVuY29kZWQoY29uc3Qgdm9pZCogaW5wdXREYXRhLCB1bnNpZ25lZCBpbnB1dExlbmd0aCkKK2lu
bGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NEVuY29kZWQoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5
OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwIG1hcCA9IEJhc2U2NEVuY29kZU1hcDo6
RGVmYXVsdCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dERhdGEsIGlucHV0TGVu
Z3RoLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAg
IHJldHVybiB7IGlucHV0LCBwb2xpY3ksIG1hcCB9OwogfQogCi1pbmxpbmUgQmFzZTY0U3BlY2lm
aWNhdGlvbiBiYXNlNjRVUkxFbmNvZGVkKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NEVuY29kZWQoVCYm
IGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpE
b05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwIG1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVm
YXVsdCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5kYXRhKCksIGlucHV0LnNp
emUoKSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKKyAg
ICByZXR1cm4gYmFzZTY0RW5jb2RlZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4oYXNCeXRlcyhTcGFu
IHsgc3RkOjpmb3J3YXJkPFQ+KGlucHV0KSB9KSksIHBvbGljeSwgbWFwKTsKIH0KIAotaW5saW5l
IEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChjb25zdCBWZWN0b3I8Y2hhcj4m
IGlucHV0KQoraW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChTcGFu
PGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5w
dXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRF
bmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQsIEJhc2U2NEVu
Y29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBCYXNl
NjRTcGVjaWZpY2F0aW9uIGJhc2U2NFVSTEVuY29kZWQoY29uc3QgQ1N0cmluZyYgaW5wdXQpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NFVSTEVuY29kZWQo
VCYmIGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5w
dXQubGVuZ3RoKCksIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVS
TCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KGFzQnl0
ZXMoU3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCkgfSkpLCBCYXNlNjRFbmNvZGVQb2xpY3k6
OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQogCiB0ZW1wbGF0ZTw+IGNsYXNzIFN0cmlu
Z1R5cGVBZGFwdGVyPEJhc2U2NFNwZWNpZmljYXRpb24+IHsKIHB1YmxpYzoKICAgICBTdHJpbmdU
eXBlQWRhcHRlcihjb25zdCBCYXNlNjRTcGVjaWZpY2F0aW9uJiBiYXNlNjQpCiAgICAgICAgIDog
bV9iYXNlNjQgeyBiYXNlNjQgfQotICAgICAgICAsIG1fZW5jb2RlZExlbmd0aCB7IGNhbGN1bGF0
ZUJhc2U2NEVuY29kZWRTaXplKGJhc2U2NC5pbnB1dExlbmd0aCwgYmFzZTY0LnBvbGljeSkgfQor
ICAgICAgICAsIG1fZW5jb2RlZExlbmd0aCB7IGNhbGN1bGF0ZUJhc2U2NEVuY29kZWRTaXplKGJh
c2U2NC5pbnB1dERhdGEuc2l6ZSgpLCBiYXNlNjQucG9saWN5KSB9CiAgICAgewogICAgIH0KIApA
QCAtMjY3LDcgKzIyNCw3IEBAIHB1YmxpYzoKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IHZvaWQgd3JpdGVUbyhDaGFyYWN0ZXJUeXBlKiBkZXN0aW5hdGlvbikgY29uc3QK
ICAgICB7Ci0gICAgICAgIGJhc2U2NEVuY29kZShtX2Jhc2U2NC5pbnB1dERhdGEsIG1fYmFzZTY0
LmlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvbiwgbV9lbmNvZGVkTGVuZ3RoLCBtX2Jhc2U2NC5wb2xp
Y3ksIG1fYmFzZTY0Lm1hcCk7CisgICAgICAgIGJhc2U2NEVuY29kZShtX2Jhc2U2NC5pbnB1dERh
dGEsIGRlc3RpbmF0aW9uLCBtX2VuY29kZWRMZW5ndGgsIG1fYmFzZTY0LnBvbGljeSwgbV9iYXNl
NjQubWFwKTsKICAgICB9CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0NT
dHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJpbmcuaAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvdGV4dC9DU3RyaW5nLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUg
PHd0Zi9TcGFuLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC0zOSw5ICs0MCwxMSBAQCBERUNM
QVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihDCiBjbGFzcyBDU3RyaW5nQnVmZmVy
IGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8Q1N0cmluZ0J1ZmZlcj4gewogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKENTdHJpbmdCdWZmZXIpOwogcHVi
bGljOgotICAgIGNvbnN0IGNoYXIqIGRhdGEoKSB7IHJldHVybiBtdXRhYmxlRGF0YSgpOyB9Cisg
ICAgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Q1N0cmluZ0J1
ZmZlcio+KHRoaXMpLT5tdXRhYmxlRGF0YSgpOyB9CiAgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CiAKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMo
KSBjb25zdCB7IHJldHVybiBhc0J5dGVzKFNwYW4geyBkYXRhKCksIGxlbmd0aCgpIH0pOyB9CisK
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIENTdHJpbmc7CiAKQEAgLTY2LDYgKzY5LDIwIEBA
IHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIENTdHJpbmcgbmV3VW5pbml0
aWFsaXplZChzaXplX3QgbGVuZ3RoLCBjaGFyKiYgY2hhcmFjdGVyQnVmZmVyKTsKICAgICBDU3Ry
aW5nKEhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpIDogbV9idWZmZXIoSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlKSB7IH0KIAorICAgIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0Cisg
ICAgeworICAgICAgICBpZiAobV9idWZmZXIpCisgICAgICAgICAgICByZXR1cm4gbV9idWZmZXIt
PmJ5dGVzKCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgU3BhbjxzdGQ6OmJ5
dGU+IG11dGFibGVCeXRlcygpCisgICAgeworICAgICAgICBpZiAoYXV0byBtdXRhYmxlRGF0YSA9
IHRoaXMtPm11dGFibGVEYXRhKCkpCisgICAgICAgICAgICByZXR1cm4gYXNXcml0YWJsZUJ5dGVz
KFNwYW4geyBtdXRhYmxlRGF0YSwgbV9idWZmZXItPmxlbmd0aCgpIH0pOworICAgICAgICByZXR1
cm4geyB9OworICAgIH0KKwogICAgIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdAogICAgIHsKICAg
ICAgICAgcmV0dXJuIG1fYnVmZmVyID8gbV9idWZmZXItPmRhdGEoKSA6IG51bGxwdHI7CkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDYgKzk0LDggQEAg
cHVibGljOgogICAgIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzOCgpIGNvbnN0OwogICAgIGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzMTYoKSBjb25zdDsKIAorICAgIFNwYW48Y29uc3Qgc3RkOjpieXRl
PiBieXRlcygpIGNvbnN0OworCiAgICAgYm9vbCBpc0FsbEFTQ0lJKCkgY29uc3Q7CiAKICAgICBT
dHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKQEAgLTQyNCw2ICs0MjYsMTMgQEAgaW5saW5lIGNvbnN0
IFVDaGFyKiBTdHJpbmdWaWV3OjpjaGFyYWN0ZQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25z
dCBVQ2hhcio+KG1fY2hhcmFjdGVycyk7CiB9CiAKK2lubGluZSBTcGFuPGNvbnN0IHN0ZDo6Ynl0
ZT4gU3RyaW5nVmlldzo6Ynl0ZXMoKSBjb25zdAoreworICAgIGlmIChpczhCaXQoKSkKKyAgICAg
ICAgcmV0dXJuIGFzQnl0ZXMoU3BhbiB7IGNoYXJhY3RlcnM4KCksIGxlbmd0aCgpIH0pOworICAg
IHJldHVybiBhc0J5dGVzKFNwYW4geyBjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCkgfSk7Cit9CisK
IGlubGluZSBib29sIFN0cmluZ1ZpZXc6OmlzQWxsQVNDSUkoKSBjb25zdAogewogICAgIGlmIChp
czhCaXQoKSkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NiArMjYsNyBAQAogCiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9u
Lmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BU0NJSUxpdGVy
YWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9JbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgpAQCAtMTM0LDYgKzEzNSw3IEBAIHB1Ymxp
YzoKICAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuICFtX2ltcGwgfHwgbV9pbXBsLT5p
czhCaXQoKTsgfQogCiAgICAgdW5zaWduZWQgc2l6ZUluQnl0ZXMoKSBjb25zdCB7IHJldHVybiBt
X2ltcGwgPyBtX2ltcGwtPmxlbmd0aCgpICogKGlzOEJpdCgpID8gc2l6ZW9mKExDaGFyKSA6IHNp
emVvZihVQ2hhcikpIDogMDsgfQorICAgIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNv
bnN0OwogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIENTdHJpbmcgYXNjaWkoKSBjb25zdDsKICAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgQ1N0cmluZyBsYXRpbjEoKSBjb25zdDsKQEAgLTQ4Myw2ICs0
ODUsMTYgQEAgdGVtcGxhdGU8PiBpbmxpbmUgY29uc3QgVUNoYXIqIFN0cmluZzo6YwogICAgIHJl
dHVybiBjaGFyYWN0ZXJzMTYoKTsKIH0KIAoraW5saW5lIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBT
dHJpbmc6OmJ5dGVzKCkgY29uc3QKK3sKKyAgICBpZiAoIW1faW1wbCkKKyAgICAgICAgcmV0dXJu
IHsgfTsKKworICAgIGlmIChtX2ltcGwtPmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gYXNCeXRl
cyhTcGFuIHsgbV9pbXBsLT5jaGFyYWN0ZXJzOCgpLCBtX2ltcGwtPmxlbmd0aCgpIH0pOworICAg
IHJldHVybiBhc0J5dGVzKFNwYW4geyBtX2ltcGwtPmNoYXJhY3RlcnMxNigpLCBtX2ltcGwtPmxl
bmd0aCgpIH0pOworfQorCiBpbmxpbmUgVUNoYXIgU3RyaW5nOjpjaGFyYWN0ZXJBdCh1bnNpZ25l
ZCBpbmRleCkgY29uc3QKIHsKICAgICBpZiAoIW1faW1wbCB8fCBpbmRleCA+PSBtX2ltcGwtPmxl
bmd0aCgpKQpJbmRleDogU291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNjMsOSArMzYzLDkgQEAgU3RyaW5nIGNyZWF0ZVRlbXBvcmFyeURpcmVjdG9y
eSgpCiAgICAgfSk7CiB9CiAKLWJvb2wgdW5tYXBWaWV3T2ZGaWxlKHZvaWQqIGJ1ZmZlciwgc2l6
ZV90KQorYm9vbCB1bm1hcFZpZXdPZkZpbGUoU3BhbjxzdGQ6OmJ5dGU+IGRhdGEpCiB7Ci0gICAg
cmV0dXJuIFVubWFwVmlld09mRmlsZShidWZmZXIpOworICAgIHJldHVybiBVbm1hcFZpZXdPZkZp
bGUoZGF0YS5kYXRhKCkpOwogfQogCiBib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxl
KFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIEZpbGVPcGVuTW9kZSBvcGVuTW9kZSwgTWFwcGVk
RmlsZU1vZGUpCkBAIC0zNzQsNyArMzc0LDcgQEAgYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmls
ZUhhbmRsZShQbGF0ZgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBhdXRvIHNpemUgPSBm
aWxlU2l6ZShoYW5kbGUpOwotICAgIGlmICghc2l6ZSB8fCAqc2l6ZSA+IHN0ZDo6bnVtZXJpY19s
aW1pdHM8c2l6ZV90Pjo6bWF4KCkgfHwgKnNpemUgPiBzdGQ6Om51bWVyaWNfbGltaXRzPGRlY2x0
eXBlKG1fZmlsZVNpemUpPjo6bWF4KCkpIHsKKyAgICBpZiAoIXNpemUgfHwgKnNpemUgPiBzdGQ6
Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIHx8ICpzaXplID4gc3RkOjpudW1lcmljX2xp
bWl0czxkZWNsdHlwZShtX2ZpbGVEYXRhLnNpemUoKSk+OjptYXgoKSkgewogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCkBAIC00MDMsMTEgKzQwMywxMiBAQCBib29sIE1hcHBlZEZpbGVE
YXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmCiAgICAgaWYgKCFtYXBwaW5nKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBtX2ZpbGVEYXRhID0gTWFwVmlld09mRmlsZShtYXBwaW5nLCBkZXNp
cmVkQWNjZXNzLCAwLCAwLCAqc2l6ZSk7CisgICAgYXV0byBkYXRhID0gTWFwVmlld09mRmlsZSht
YXBwaW5nLCBkZXNpcmVkQWNjZXNzLCAwLCAwLCAqc2l6ZSk7CiAgICAgQ2xvc2VIYW5kbGUobWFw
cGluZyk7Ci0gICAgaWYgKCFtX2ZpbGVEYXRhKQorICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIG1fZmlsZVNpemUgPSAqc2l6ZTsKKworICAgIG1fZmlsZURhdGEgPSBT
cGFuIHsgcmVpbnRlcnByZXRfY2FzdDxzdGQ6OmJ5dGUqPihkYXRhKSwgKnNpemUgfTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODAgQEAKKzIw
MjEtMDYtMTEgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIEFkb3B0
IFNwYW4gaW4gbW9yZSBwbGFjZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyNjg4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFtXSVBdCisKKyAgICAgICAgKiBNb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdo
bGlnaHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcEhpZ2hsaWdodDo6ZW5jb2RlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcEhpZ2hsaWdodDo6ZGVjb2RlKToKKyAgICAgICAgKiBNb2R1
bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHRSYW5nZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwSGlnaGxpZ2h0UmFuZ2VEYXRhOjp0b1NoYXJlZEJ1ZmZlciBjb25zdCk6CisgICAgICAg
ICogTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yUmVzcG9uc2VEYXRhLmg6CisgICAgICAg
IChXZWJDb3JlOjplbmNvZGVBcnJheUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpkZWNvZGVB
cnJheUJ1ZmZlcik6CisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50
aWFsQ3JlYXRpb25PcHRpb25zLmg6CisgICAgICAgIChXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50
aWFsQ3JlYXRpb25PcHRpb25zOjplbmNvZGUgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvd2Vi
YXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yOjplbmNvZGUgY29uc3QpOgorICAgICAgICAq
IE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpnZXRFeHBlY3RlZFdlYlNvY2tldEFjY2VwdCk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvQnVmZmVyU291cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpC
dWZmZXJTb3VyY2U6OmJ5dGVzIGNvbnN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6ZGVjb2RlKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9TZXJpYWxpemVkTkZBLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpTZXJpYWxpemVkTkZBOjpw
b2ludGVyQXRPZmZzZXRJbkZpbGUgY29uc3QpOgorICAgICAgICAqIGNyeXB0by9tYWMvU2VyaWFs
aXplZENyeXB0b0tleVdyYXBNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBbmRTdG9y
ZU1hc3RlcktleSk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
aGFzaFBvaW50ZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RE9NUGF0Y2hTdXBwb3J0OjpjcmVhdGVEaWdlc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6YWRkU3RyaW5nVG9TSEExKTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckZyb250ZW5kSG9zdDo6c2hvd0NlcnRpZmljYXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JOZXR3b3JrQWdlbnQ6OmdldFNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZSk6CisgICAgICAgICogcGxh
dGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVi
b2FyZEN1c3RvbURhdGE6OmNyZWF0ZVNoYXJlZEJ1ZmZlciBjb25zdCk6CisgICAgICAgICogcGxh
dGZvcm0vU2hhcmVkQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6
U2hhcmVkQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6YXBwZW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmRhdGEgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVudDo6Ynl0ZXMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpkZWNvZGVyIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OnNpemUgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2F1
ZGlvL2NvY29hL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6
Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL01vZGVsLmg6CisgICAgICAgIChXZWJDb3JlOjpNb2RlbDo6ZW5jb2RlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1vZGVsOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL1BpeGVsQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBpeGVsQnVmZmVyOjpkZWNvZGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmls
aXRpZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNhcGFiaWxpdHlWYWx1ZU9yUmFuZ2U6OmVuY29k
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYXBhYmlsaXR5VmFsdWVPclJhbmdlOjpkZWNv
ZGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VD
ZW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRkU3RyaW5nVG9TSEExKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL2NmL0NlcnRpZmljYXRlSW5mb0NGTmV0LmNwcDoKKyAgICAgICAg
KFdURjo6UGVyc2lzdGVuY2U6OmVuY29kZUNGRGF0YSk6CisgICAgICAgIChXVEY6OlBlcnNpc3Rl
bmNlOjpkZWNvZGVDRkRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpiaW5kQmxvYik6Cisg
ICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oOgorICAgICAgICAqIHdvcmtl
cnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVnaXN0cmF0aW9uRGF0YWJhc2U6OmRvUHVzaENoYW5nZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yZHMpOgorICAgICAgICAqIHdv
cmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTY3JpcHRTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNXU2NyaXB0U3RvcmFnZTo6c3RvcmUpOgorCiAyMDIxLTA2LTExICBDaHJpcyBEdW1leiAg
PGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgTGF6aWx5IGNvbXB1dGUgU2VjdXJpdHlPcmln
aW46Om1faXNQb3RlbnRpYWxseVRydXN0d29ydGh5IGZvciBwZXJmb3JtYW5jZQpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0luaXRE
YXRhUmVnaXN0cnkuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2VuY3J5cHRlZG1lZGlhL0luaXREYXRhUmVnaXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDQsNyArMTA0LDcgQEAgc3RhdGljIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHNhbml0aXplS2V5
aQogICAgIGF1dG8gb2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBhdXRvIGtp
ZHNBcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICBmb3IgKGF1dG8mIGJ1ZmZlciA6
IGtleUlEQnVmZmVyLnZhbHVlKCkpCi0gICAgICAgIGtpZHNBcnJheS0+cHVzaFN0cmluZyhiYXNl
NjRVUkxFbmNvZGVUb1N0cmluZyhidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpKTsKKyAg
ICAgICAga2lkc0FycmF5LT5wdXNoU3RyaW5nKGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGJ1ZmZl
ci0+Ynl0ZXMoKSkpOwogICAgIG9iamVjdC0+c2V0QXJyYXkoImtpZHMiLCBXVEZNb3ZlKGtpZHNB
cnJheSkpOwogCiAgICAgQ1N0cmluZyBqc29uRGF0YSA9IG9iamVjdC0+dG9KU09OU3RyaW5nKCku
dXRmOCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxp
Z2h0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9oaWdobGlnaHQvQXBw
SGlnaGxpZ2h0LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aGlnaGxpZ2h0L0FwcEhpZ2hsaWdodC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBA
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIEFwcEhpZ2hsaWdodDo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxzaXplX3Q+
KGhpZ2hsaWdodC0+c2l6ZSgpKTsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YSho
aWdobGlnaHQtPmRhdGEoKSwgaGlnaGxpZ2h0LT5zaXplKCksIDEpOworICAgIGVuY29kZXIuZW5j
b2RlRml4ZWRMZW5ndGhEYXRhKCpoaWdobGlnaHQsIDEpOwogCiAgICAgZW5jb2RlciA8PCB0ZXh0
OwogCkBAIC03NSw3ICs3NSw3IEBAIHN0ZDo6b3B0aW9uYWw8QXBwSGlnaGxpZ2h0PiBBcHBIaWdo
bGlnaHQKIAogICAgIFZlY3Rvcjx1aW50OF90PiBoaWdobGlnaHQ7CiAgICAgaGlnaGxpZ2h0Lmdy
b3coKmxlbmd0aCk7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShoaWdo
bGlnaHQuZGF0YSgpLCBoaWdobGlnaHQuc2l6ZSgpLCAxKSkKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKGhpZ2hsaWdodCwgMSkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CiAKICAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4gdGV4dDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFJhbmdl
RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9oaWdobGlnaHQv
QXBwSGlnaGxpZ2h0UmFuZ2VEYXRhLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBSZWY8U2hhcmVkQnVmZmVyPiBBcHBIaWdobGlnaHRS
YW5nZURhdGE6CiB7CiAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciBlbmNvZGVyOwogICAg
IGVuY29kZXIgPDwgKnRoaXM7Ci0gICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29k
ZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICByZXR1cm4gU2hhcmVkQnVm
ZmVyOjpjcmVhdGUoZW5jb2Rlci5idWZmZXIoKSk7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhOjpOb2RlUGF0aENvbXBvbmVudDo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsLmNwcAkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgTmV0d29ya1NlbmRRdWV1ZSBSVENE
YXRhQ2hhbm5lbDo6Y3JlYXRlTQogICAgICAgICBpZiAoIWNoYW5uZWwubV9oYW5kbGVyLT5zZW5k
U3RyaW5nRGF0YSh1dGY4KSkKICAgICAgICAgICAgIGNoYW5uZWwuc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVs
OjpFcnJvciwgIkVycm9yIHNlbmRpbmcgc3RyaW5nIHRocm91Z2ggUlRDRGF0YUNoYW5uZWwuIl9z
KTsKICAgICB9LCBbJmNoYW5uZWxdKGF1dG8mIHNwYW4pIHsKLSAgICAgICAgaWYgKCFjaGFubmVs
Lm1faGFuZGxlci0+c2VuZFJhd0RhdGEoc3Bhbi5kYXRhKCksIHNwYW4uc2l6ZSgpKSkKKyAgICAg
ICAgaWYgKCFjaGFubmVsLm1faGFuZGxlci0+c2VuZFJhd0RhdGEocmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50OF90Kj4oc3Bhbi5kYXRhKCkpLCBzcGFuLnNpemUoKSkpCiAgICAgICAgICAgICBj
aGFubmVsLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2Fn
ZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsICJFcnJvciBzZW5kaW5nIGJpbmFyeSBk
YXRhIHRocm91Z2ggUlRDRGF0YUNoYW5uZWwuIl9zKTsKICAgICB9LCBbJmNoYW5uZWxdKEV4Y2Vw
dGlvbkNvZGUgZXJyb3JDb2RlKSB7CiAgICAgICAgIGlmIChhdXRvKiBjb250ZXh0ID0gY2hhbm5l
bC5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQu
bW0JKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9R
dWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIs
NyBAQAogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQ2F0Y2hTY29wZS5oPgogI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KICNpbXBvcnQgPG9iamMvcnVudGltZS5oPgor
I2ltcG9ydCA8d3RmL2NvY29hL1NwYW5Db2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0
Lmg+CiAKICNpbXBvcnQgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oPgpAQCAtMjQ2LDkgKzI0
Nyw5IEBAIHN0YXRpYyBKU1ZhbHVlICpqc1ZhbHVlV2l0aERhdGFJbkNvbnRleHQKICAgICAvLyBG
SVhNRTogQWRkIG1ha2VDRlN0cmluZy9tYWtlTlNTdHJpbmcgdG8gYXZvaWQgdW5uZWNlc3Nhcnkg
U3RyaW5nIGFsbG9jYXRpb24uCiAgICAgU3RyaW5nIGRhdGE2NDsKICAgICBpZiAoIW1pbWVUeXBl
LmlzRW1wdHkoKSkKLSAgICAgICAgZGF0YTY0ID0gbWFrZVN0cmluZygiZGF0YToiLCBtaW1lVHlw
ZSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChbZGF0YSBieXRlc10sIFtkYXRhIGxlbmd0aF0p
KTsKKyAgICAgICAgZGF0YTY0ID0gbWFrZVN0cmluZygiZGF0YToiLCBtaW1lVHlwZSwgIjtiYXNl
NjQsIiwgYmFzZTY0RW5jb2RlZChhc0J5dGVzKGRhdGEpKSk7CiAgICAgZWxzZQotICAgICAgICBk
YXRhNjQgPSBtYWtlU3RyaW5nKCJkYXRhOnRleHQvcGxhaW47YmFzZTY0LCIsIGJhc2U2NEVuY29k
ZWQoW2RhdGEgYnl0ZXNdLCBbZGF0YSBsZW5ndGhdKSk7CisgICAgICAgIGRhdGE2NCA9IG1ha2VT
dHJpbmcoImRhdGE6dGV4dC9wbGFpbjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChhc0J5dGVzKGRh
dGEpKSk7CiAKICAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoT2JqZWN0OihpZClkYXRhNjQu
Y3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSBpbkNvbnRleHQ6Y29udGV4dF07CiB9CkBAIC0zNDAsNyAr
MzQxLDcgQEAgc3RhdGljIEpTVmFsdWUgKmpzVmFsdWVXaXRoQVZNZXRhZGF0YUl0ZQogICAgICAg
ICBpZCB2YWx1ZSA9IGl0ZW0udmFsdWU7CiAgICAgICAgIE5TU3RyaW5nICptaW1lVHlwZSA9IFtb
aXRlbSBleHRyYUF0dHJpYnV0ZXNdIG9iamVjdEZvcktleTpAIk1JTUV0eXBlIl07CiAgICAgICAg
IGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNEYXRhIGNsYXNzXV0gJiYgbWltZVR5cGUpIHsK
LSAgICAgICAgICAgIGF1dG8gZGF0YTY0ID0gbWFrZVN0cmluZygiZGF0YToiLCBTdHJpbmcobWlt
ZVR5cGUpLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKFt2YWx1ZSBieXRlc10sIFt2YWx1ZSBs
ZW5ndGhdKSk7CisgICAgICAgICAgICBhdXRvIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6Iiwg
U3RyaW5nKG1pbWVUeXBlKSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChhc0J5dGVzKChOU0Rh
dGEgKil2YWx1ZSkpKTsKICAgICAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDooX19icmlk
Z2UgTlNTdHJpbmcgKilkYXRhNjQuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSBmb3JLZXk6QCJ2YWx1
ZSJdOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDp2
YWx1ZSBmb3JLZXk6QCJ2YWx1ZSJdOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dXRobi9BdXRoZW50aWNhdG9yQ29vcmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50
aWNhdG9yQ29vcmRpbmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHN0
YXRpYyBSZWY8QXJyYXlCdWZmZXI+IHByb2R1Y2VDbGllbnREYXQKICAgICAgICAgb2JqZWN0LT5z
ZXRTdHJpbmcoInR5cGUiX3MsICJ3ZWJhdXRobi5nZXQiX3MpOwogICAgICAgICBicmVhazsKICAg
ICB9Ci0gICAgb2JqZWN0LT5zZXRTdHJpbmcoImNoYWxsZW5nZSJfcywgYmFzZTY0VVJMRW5jb2Rl
VG9TdHJpbmcoY2hhbGxlbmdlLmRhdGEoKSwgY2hhbGxlbmdlLmxlbmd0aCgpKSk7CisgICAgb2Jq
ZWN0LT5zZXRTdHJpbmcoImNoYWxsZW5nZSJfcywgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY2hh
bGxlbmdlLmJ5dGVzKCkpKTsKICAgICBvYmplY3QtPnNldFN0cmluZygib3JpZ2luIl9zLCBvcmln
aW4udG9SYXdTdHJpbmcoKSk7CiAKICAgICBhdXRvIHV0ZjhKU09OU3RyaW5nID0gb2JqZWN0LT50
b0pTT05TdHJpbmcoKS51dGY4KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
dGhuL0F1dGhlbnRpY2F0b3JSZXNwb25zZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRpY2F0b3JSZXNwb25zZURhdGEuaAkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNh
dG9yUmVzcG9uc2VEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4KIHN0YXRpYyB2b2lkIGVuY29kZUFycmF5QnVmZmVyKEVuY29kZXIm
IGVuY29kZXIsIGNvbnN0IEFycmF5QnVmZmVyJiBidWZmZXIpCiB7CiAgICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDx1aW50NjRfdD4oYnVmZmVyLmJ5dGVMZW5ndGgoKSk7Ci0gICAgZW5jb2Rlci5l
bmNvZGVGaXhlZExlbmd0aERhdGEoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZlci5k
YXRhKCkpLCBidWZmZXIuYnl0ZUxlbmd0aCgpLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVk
TGVuZ3RoRGF0YShidWZmZXIuYnl0ZXMoKSwgMSk7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+CkBAIC03NSw3ICs3NSw3IEBAIFJlZlB0cjxBcnJheUJ1ZmZlcj4gZGVjb2RlQXJyYXlCdWZm
ZXIoRGUKICAgICBhdXRvIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjp0cnlDcmVhdGUobGVuZ3RoLnZh
bHVlKCksIHNpemVvZih1aW50OF90KSk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoc3RhdGlj
X2Nhc3Q8dWludDhfdCo+KGJ1ZmZlci0+ZGF0YSgpKSwgbGVuZ3RoLnZhbHVlKCksIDEpKQorICAg
IGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLT53cml0YWJsZUJ5dGVz
KCksIDEpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gYnVmZmVyOwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1Ymxp
Y0tleUNyZWRlbnRpYWwuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NCw3ICs1NCw3IEBAIEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgUHUK
IH0KIAogUHVibGljS2V5Q3JlZGVudGlhbDo6UHVibGljS2V5Q3JlZGVudGlhbChSZWY8QXV0aGVu
dGljYXRvclJlc3BvbnNlPiYmIHJlc3BvbnNlKQotICAgIDogQmFzaWNDcmVkZW50aWFsKGJhc2U2
NFVSTEVuY29kZVRvU3RyaW5nKHJlc3BvbnNlLT5yYXdJZCgpLT5kYXRhKCksIHJlc3BvbnNlLT5y
YXdJZCgpLT5ieXRlTGVuZ3RoKCkpLCBUeXBlOjpQdWJsaWNLZXksIERpc2NvdmVyeTo6UmVtb3Rl
KQorICAgIDogQmFzaWNDcmVkZW50aWFsKGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKHJlc3BvbnNl
LT5yYXdJZCgpLT5ieXRlcygpKSwgVHlwZTo6UHVibGljS2V5LCBEaXNjb3Zlcnk6OlJlbW90ZSkK
ICAgICAsIG1fcmVzcG9uc2UoV1RGTW92ZShyZXNwb25zZSkpCiB7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlv
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1Ymxp
Y0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25P
cHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw4ICsxNDEsOCBAQCB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPgogdm9pZCBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IHJwLmlkIDw8IHJw
Lm5hbWUgPDwgcnAuaWNvbjsKLSAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih1
c2VyLmlkLmxlbmd0aCgpKTsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YSh1c2Vy
LmlkLmRhdGEoKSwgdXNlci5pZC5sZW5ndGgoKSwgMSk7CisgICAgZW5jb2RlciA8PCBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4odXNlci5pZC5ieXRlcygpLnNpemUoKSk7CisgICAgZW5jb2Rlci5lbmNv
ZGVGaXhlZExlbmd0aERhdGEodXNlci5pZC5ieXRlcygpLCAxKTsKICAgICBlbmNvZGVyIDw8IHVz
ZXIuZGlzcGxheU5hbWUgPDwgdXNlci5uYW1lIDw8IHVzZXIuaWNvbiA8PCBwdWJLZXlDcmVkUGFy
YW1zIDw8IHRpbWVvdXQgPDwgZXhjbHVkZUNyZWRlbnRpYWxzIDw8IGF1dGhlbnRpY2F0b3JTZWxl
Y3Rpb24gPDwgYXR0ZXN0YXRpb24gPDwgZXh0ZW5zaW9uczsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3Jl
ZGVudGlhbERlc2NyaXB0b3IuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Nyw4ICs0Nyw4IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIFB1
YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKIHsKICAgICBlbmNvZGVyIDw8IHR5cGU7Ci0gICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1
aW50NjRfdD4oaWQubGVuZ3RoKCkpOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KGlkLmRhdGEoKSwgaWQubGVuZ3RoKCksIDEpOworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KGlkLmJ5dGVzKCkuc2l6ZSgpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShpZC5ieXRlcygpLCAxKTsKICAgICBlbmNvZGVyIDw8IHRyYW5zcG9ydHM7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hh
a2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9X
ZWJTb2NrZXRIYW5kc2hha2UuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTcsMTkgKzk3LDIwIEBAIHN0YXRpYyBTdHJpbmcgZ2VuZXJhdGVTZWNXZWJTb2NrZXRL
ZXkoKQogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgbm9uY2VTaXplID0gMTY7CiAgICAgdW5zaWdu
ZWQgY2hhciBrZXlbbm9uY2VTaXplXTsKICAgICBjcnlwdG9ncmFwaGljYWxseVJhbmRvbVZhbHVl
cyhrZXksIG5vbmNlU2l6ZSk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGtleSwg
bm9uY2VTaXplKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoa2V5KTsKIH0KIAog
U3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRXZWJTb2NrZXRBY2NlcHQoY29u
c3QgU3RyaW5nJiBzZWNXZWJTb2NrZXRLZXkpCiB7CiAgICAgY29uc3RleHByIHVpbnQ4X3Qgd2Vi
U29ja2V0S2V5R1VJRFtdID0gIjI1OEVBRkE1LUU5MTQtNDdEQS05NUNBLUM1QUIwREM4NUIxMSI7
CisKICAgICBTSEExIHNoYTE7Ci0gICAgQ1N0cmluZyBrZXlEYXRhID0gc2VjV2ViU29ja2V0S2V5
LmFzY2lpKCk7Ci0gICAgc2hhMS5hZGRCeXRlcyhrZXlEYXRhLmRhdGFBc1VJbnQ4UHRyKCksIGtl
eURhdGEubGVuZ3RoKCkpOwotICAgIHNoYTEuYWRkQnl0ZXMod2ViU29ja2V0S2V5R1VJRCwgc3Rk
OjpzaXplKHdlYlNvY2tldEtleUdVSUQpIC0gMSk7CisgICAgc2hhMS5hZGRCeXRlcyhzZWNXZWJT
b2NrZXRLZXkuYXNjaWkoKS5ieXRlcygpKTsKKyAgICBzaGExLmFkZEJ5dGVzKHdlYlNvY2tldEtl
eUdVSUQpOworCiAgICAgU0hBMTo6RGlnZXN0IGhhc2g7CiAgICAgc2hhMS5jb21wdXRlSGFzaCho
YXNoKTsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaGFzaC5kYXRhKCksIFNIQTE6
Omhhc2hTaXplKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaGFzaCk7CiB9CiAK
IFdlYlNvY2tldEhhbmRzaGFrZTo6V2ViU29ja2V0SGFuZHNoYWtlKGNvbnN0IFVSTCYgdXJsLCBj
b25zdCBTdHJpbmcmIHByb3RvY29sLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3Ry
aW5nJiBjbGllbnRPcmlnaW4sIGJvb2wgYWxsb3dDb29raWVzKQpJbmRleDogU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2oveGNzaGFyZWRkYXRhL3hjc2NoZW1lcy9XZWJDb3JlLnhjc2No
ZW1lCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3hjc2hh
cmVkZGF0YS94Y3NjaGVtZXMvV2ViQ29yZS54Y3NjaGVtZQkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2oveGNzaGFyZWRkYXRhL3hjc2NoZW1lcy9X
ZWJDb3JlLnhjc2NoZW1lCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw5IEBACiAgICAgICBp
Z25vcmVzUGVyc2lzdGVudFN0YXRlT25MYXVuY2ggPSAiTk8iCiAgICAgICBkZWJ1Z0RvY3VtZW50
VmVyc2lvbmluZyA9ICJZRVMiCiAgICAgICBkZWJ1Z1NlcnZpY2VFeHRlbnNpb24gPSAiaW50ZXJu
YWwiCi0gICAgICBhbGxvd0xvY2F0aW9uU2ltdWxhdGlvbiA9ICJZRVMiPgorICAgICAgZW5hYmxl
R1BVRnJhbWVDYXB0dXJlTW9kZSA9ICIzIgorICAgICAgYWxsb3dMb2NhdGlvblNpbXVsYXRpb24g
PSAiWUVTIgorICAgICAgR1BVUHJvZmlsZXJFbmFibGVkID0gIk5vIj4KICAgIDwvTGF1bmNoQWN0
aW9uPgogICAgPFByb2ZpbGVBY3Rpb24KICAgICAgIGJ1aWxkQ29uZmlndXJhdGlvbiA9ICJSZWxl
YXNlIgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQnVmZmVyU291cmNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQnVmZmVyU291cmNlLmgJKHJl
dmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0J1ZmZlclNvdXJj
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1NywxMyBAQCBwdWJsaWM6CiAgICAgICAgIH0s
IG1fdmFyaWFudCk7CiAgICAgfQogCisgICAgU3Bhbjxjb25zdCB1aW50OF90PiBieXRlcygpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjp2aXNpdChbXShhdXRvJiBidWZmZXIpIC0+
IFNwYW48Y29uc3QgdWludDhfdD4geworICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlciA/IFNwYW48
Y29uc3QgdWludDhfdD4geyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYnVmZmVyLT5kYXRh
KCkpLCBidWZmZXItPmJ5dGVMZW5ndGgoKSB9IDogU3Bhbjxjb25zdCB1aW50OF90PiB7IH07Cisg
ICAgICAgIH0sIG1fdmFyaWFudCk7CisgICAgfQorCiBwcml2YXRlOgogICAgIFZhcmlhbnRUeXBl
IG1fdmFyaWFudDsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE2NCwxNSArMTY0LDE1IEBAIHZvaWQgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjplbmNvZGUo
RW5jb2QKIAogICAgIGlmIChoYXNBcnJheSkgewogICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19j
YXN0PHVpbnQ2NF90PihtX2FycmF5QnVmZmVyQ29udGVudHNBcnJheS0+c2l6ZSgpKTsKLSAgICAg
ICAgZm9yIChjb25zdCBhdXRvICZhcnJheUJ1ZmZlckNvbnRlbnRzIDogKm1fYXJyYXlCdWZmZXJD
b250ZW50c0FycmF5KSB7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgYXJyYXlCdWZmZXJDb250
ZW50cyA6ICptX2FycmF5QnVmZmVyQ29udGVudHNBcnJheSkgewogICAgICAgICAgICAgZW5jb2Rl
ciA8PCBhcnJheUJ1ZmZlckNvbnRlbnRzLnNpemVJbkJ5dGVzKCk7Ci0gICAgICAgICAgICBlbmNv
ZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYXJy
YXlCdWZmZXJDb250ZW50cy5kYXRhKCkpLCBhcnJheUJ1ZmZlckNvbnRlbnRzLnNpemVJbkJ5dGVz
KCksIDEpOworICAgICAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYXJyYXlC
dWZmZXJDb250ZW50cy5ieXRlcygpLCAxKTsKICAgICAgICAgfQogICAgIH0KIAogI2lmIEVOQUJM
RShXRUJfUlRDKQogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1fZGV0YWNo
ZWRSVENEYXRhQ2hhbm5lbHMuc2l6ZSgpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8gJmNoYW5uZWwg
OiBtX2RldGFjaGVkUlRDRGF0YUNoYW5uZWxzKQorICAgIGZvciAoY29uc3QgYXV0byYgY2hhbm5l
bCA6IG1fZGV0YWNoZWRSVENEYXRhQ2hhbm5lbHMpCiAgICAgICAgIGVuY29kZXIgPDwgKmNoYW5u
ZWw7CiAjZW5kaWYKIH0KQEAgLTIwNiw3ICsyMDYsNyBAQCBSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBTZXJpYWxpemVkCiAgICAgICAgICAgICBhdXRvIGJ1ZmZlciA9IEdpZ2FjYWdlOjp0
cnlNYWxsb2MoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgYnVmZmVyU2l6ZSk7CiAgICAgICAgICAgICBp
ZiAoIWJ1ZmZlcikKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoc3RhdGljX2Nhc3Q8dWludDhfdCo+
KGJ1ZmZlciksIGJ1ZmZlclNpemUsIDEpKSB7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBzdGF0aWNfY2FzdDxzdGQ6OmJ5dGUqPihidWZmZXIp
LCBidWZmZXJTaXplIH0sIDEpKSB7CiAgICAgICAgICAgICAgICAgR2lnYWNhZ2U6OmZyZWUoR2ln
YWNhZ2U6OlByaW1pdGl2ZSwgYnVmZmVyKTsKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25z
L1NlcmlhbGl6ZWRORkEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL1NlcmlhbGl6ZWRORkEuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9TZXJpYWxpemVkTkZBLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA3LDcgKzEwNyw3IEBAIFNlcmlhbGl6ZWRORkE6OlNlcmlhbGl6ZWRORkEoRmlsZVN5
c3RlbToKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBjb25zdCBUKiBTZXJpYWxpemVkTkZBOjpwb2lu
dGVyQXRPZmZzZXRJbkZpbGUoc2l6ZV90IG9mZnNldCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBUKj4oc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1fZmls
ZS5kYXRhKCkpICsgb2Zmc2V0KTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBU
Kj4obV9maWxlLmRhdGEoKS5kYXRhKCkgKyBvZmZzZXQpOwogfQogCiBhdXRvIFNlcmlhbGl6ZWRO
RkE6Om5vZGVzKCkgY29uc3QgLT4gY29uc3QgUmFuZ2U8SW1tdXRhYmxlTkZBTm9kZT4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5RUNNYWMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5RUNNYWMuY3BwCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDEwICsxOTcsMTAgQEAgYm9vbCBDcnlwdG9LZXlFQzo6
cGxhdGZvcm1BZGRGaWVsZEVsZW1lbgogCiAgICAgaWYgKFVOTElLRUxZKChzaXplICE9IHB1Ymxp
Y0tleVNpemUpICYmIChzaXplICE9IHByaXZhdGVLZXlTaXplKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBqd2sueCA9IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKHJlc3VsdC5kYXRhKCkg
KyAxLCBrZXlTaXplSW5CeXRlcyk7Ci0gICAgandrLnkgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmlu
ZyhyZXN1bHQuZGF0YSgpICsga2V5U2l6ZUluQnl0ZXMgKyAxLCBrZXlTaXplSW5CeXRlcyk7Cisg
ICAgandrLnggPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhTcGFuIHsgcmVzdWx0IH0uc3Vic3Bh
bigxLCBrZXlTaXplSW5CeXRlcykpOworICAgIGp3ay55ID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJp
bmcoU3BhbiB7IHJlc3VsdCB9LnN1YnNwYW4oMSArIGtleVNpemVJbkJ5dGVzLCBrZXlTaXplSW5C
eXRlcykpOwogICAgIGlmIChzaXplID4gcHVibGljS2V5U2l6ZSkKLSAgICAgICAgandrLmQgPSBi
YXNlNjRVUkxFbmNvZGVUb1N0cmluZyhyZXN1bHQuZGF0YSgpICsgcHVibGljS2V5U2l6ZSwga2V5
U2l6ZUluQnl0ZXMpOworICAgICAgICBqd2suZCA9IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKFNw
YW4geyByZXN1bHQgfS5zdWJzcGFuKHB1YmxpY0tleVNpemUsIGtleVNpemVJbkJ5dGVzKSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvU2Vy
aWFsaXplZENyeXB0b0tleVdyYXBNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3J5cHRvL21hYy9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5tbQkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2ltcG9ydCA8d3RmL0NyeXB0
b2dyYXBoaWNVdGlsaXRpZXMuaD4KICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+CiAj
aW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvY2YvU3BhbkNGLmg+CiAjaW1w
b3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi9zcGkvY29jb2EvU2Vj
dXJpdHlTUEkuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L0Jhc2U2NC5oPgpAQCAtMTY3LDcgKzE2OCw3
IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZmkKICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9CiAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4ga2V5RGF0
YSA9IGFkb3B0Q0Yoa2V5RGF0YVJlZik7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZShDRkRhdGFH
ZXRCeXRlUHRyKGtleURhdGEuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgoa2V5RGF0YS5nZXQoKSkp
OworICAgIHJldHVybiBiYXNlNjREZWNvZGUoYXNCeXRlcyhrZXlEYXRhLmdldCgpKSk7CiB9CiAK
IHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5
KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYwNiw3ICsxNjA2LDggQEAgRXhj
ZXB0aW9uT3I8dm9pZD4gTm9kZTo6c2V0VGV4dENvbnRlbnQoYwogc3RhdGljIFNIQTE6OkRpZ2Vz
dCBoYXNoUG9pbnRlcihjb25zdCB2b2lkKiBwb2ludGVyKQogewogICAgIFNIQTEgc2hhMTsKLSAg
ICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZwb2ludGVy
KSwgc2l6ZW9mKHBvaW50ZXIpKTsKKyAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmcG9pbnRlciwg
MSB9KTsKKwogICAgIFNIQTE6OkRpZ2VzdCBkaWdlc3Q7CiAgICAgc2hhMS5jb21wdXRlSGFzaChk
aWdlc3QpOwogICAgIHJldHVybiBkaWdlc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBp
L0ZpbGVSZWFkZXJMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVh
cGkvRmlsZVJlYWRlckxvYWRlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzOCw3
ICszMzgsNyBAQCB2b2lkIEZpbGVSZWFkZXJMb2FkZXI6OmNvbnZlcnRUb0RhdGFVUkwoCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX3N0cmluZ1Jlc3VsdCA9IG1ha2VTdHJpbmcoImRh
dGE6IiwgbV9kYXRhVHlwZS5pc0VtcHR5KCkgPyAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiA6
IG1fZGF0YVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQobV9yYXdEYXRhLT5kYXRhKCks
IG1fYnl0ZXNMb2FkZWQpKTsKKyAgICBtX3N0cmluZ1Jlc3VsdCA9IG1ha2VTdHJpbmcoImRhdGE6
IiwgbV9kYXRhVHlwZS5pc0VtcHR5KCkgPyAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiA6IG1f
ZGF0YVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQobV9yYXdEYXRhLT5ieXRlcygpKSk7
CiB9CiAKIGJvb2wgRmlsZVJlYWRlckxvYWRlcjo6aXNDb21wbGV0ZWQoKSBjb25zdApJbmRleDog
U291cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL05ldHdvcmtTZW5kUXVldWUuY3BwCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL05ldHdvcmtTZW5kUXVldWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MywxMSArNTMsMTAgQEAgdm9pZCBOZXR3b3JrU2VuZFF1ZXVlOjpl
bnF1ZXVlKENTdHJpbmcmJgogdm9pZCBOZXR3b3JrU2VuZFF1ZXVlOjplbnF1ZXVlKGNvbnN0IEpT
Qzo6QXJyYXlCdWZmZXImIGJpbmFyeURhdGEsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVk
IGJ5dGVMZW5ndGgpCiB7CiAgICAgaWYgKG1fcXVldWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGF1
dG8qIGRhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYmluYXJ5RGF0YS5kYXRhKCkp
OwotICAgICAgICBtX3dyaXRlUmF3RGF0YShTcGFuIHsgZGF0YSArIGJ5dGVPZmZzZXQsIGJ5dGVM
ZW5ndGggfSk7CisgICAgICAgIG1fd3JpdGVSYXdEYXRhKGJpbmFyeURhdGEuYnl0ZXMoKS5zdWJz
cGFuKGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBtX3F1ZXVlLmFwcGVuZChTaGFyZWRCdWZmZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDxjb25zdCB1
aW50OF90Kj4oYmluYXJ5RGF0YS5kYXRhKCkpICsgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkpOwor
ICAgIG1fcXVldWUuYXBwZW5kKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGJpbmFyeURhdGEuYnl0ZXMo
KS5zdWJzcGFuKGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKSk7CiB9CiAKIHZvaWQgTmV0d29ya1Nl
bmRRdWV1ZTo6ZW5xdWV1ZShXZWJDb3JlOjpCbG9iJiBibG9iKQpAQCAtOTMsNyArOTIsOSBAQCB2
b2lkIE5ldHdvcmtTZW5kUXVldWU6OnByb2Nlc3NNZXNzYWdlcygpCiAgICAgICAgIHN3aXRjaE9u
KG1fcXVldWUuZmlyc3QoKSwgW3RoaXNdKGNvbnN0IENTdHJpbmcmIHV0ZjgpIHsKICAgICAgICAg
ICAgIG1fd3JpdGVTdHJpbmcodXRmOCk7CiAgICAgICAgIH0sIFt0aGlzXShSZWY8U2hhcmVkQnVm
ZmVyPiYgZGF0YSkgewotICAgICAgICAgICAgZGF0YS0+Zm9yRWFjaFNlZ21lbnQobV93cml0ZVJh
d0RhdGEpOworICAgICAgICAgICAgZGF0YS0+Zm9yRWFjaFNlZ21lbnQoW3RoaXNdKGF1dG8mIHNw
YW4pIHsKKyAgICAgICAgICAgICAgICBtX3dyaXRlUmF3RGF0YShhc0J5dGVzKHNwYW4pKTsKKyAg
ICAgICAgICAgIH0pOwogICAgICAgICB9LCBbdGhpcywgJnNob3VsZFN0b3BQcm9jZXNzaW5nXShV
bmlxdWVSZWY8QmxvYkxvYWRlcj4mIGxvYWRlcikgewogICAgICAgICAgICAgYXV0byBlcnJvckNv
ZGUgPSBsb2FkZXItPmVycm9yQ29kZSgpOwogICAgICAgICAgICAgaWYgKGxvYWRlci0+aXNMb2Fk
aW5nKCkgfHwgKGVycm9yQ29kZSAmJiBlcnJvckNvZGUudmFsdWUoKSA9PSBBYm9ydEVycm9yKSkg
ewpAQCAtMTAyLDcgKzEwMyw3IEBAIHZvaWQgTmV0d29ya1NlbmRRdWV1ZTo6cHJvY2Vzc01lc3Nh
Z2VzKCkKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGNvbnN0IGF1dG8mIHJlc3Vs
dCA9IGxvYWRlci0+YXJyYXlCdWZmZXJSZXN1bHQoKSkgewotICAgICAgICAgICAgICAgIG1fd3Jp
dGVSYXdEYXRhKFNwYW4geyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4ocmVzdWx0LT5kYXRh
KCkpLCByZXN1bHQtPmJ5dGVMZW5ndGgoKSB9KTsKKyAgICAgICAgICAgICAgICBtX3dyaXRlUmF3
RGF0YShyZXN1bHQtPmJ5dGVzKCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIEFTU0VSVChlcnJvckNvZGUpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvTmV0d29ya1NlbmRRdWV1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OCw3ICs0OCw3IEBAIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIE5l
dHdvcmtTZW5kUXVldWUgOiBwdWJsaWMgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIgewogcHVi
bGljOgogICAgIHVzaW5nIFdyaXRlU3RyaW5nID0gRnVuY3Rpb248dm9pZChjb25zdCBDU3RyaW5n
JiB1dGY4KT47Ci0gICAgdXNpbmcgV3JpdGVSYXdEYXRhID0gRnVuY3Rpb248dm9pZChjb25zdCBT
cGFuPGNvbnN0IHVpbnQ4X3Q+Jik+OworICAgIHVzaW5nIFdyaXRlUmF3RGF0YSA9IEZ1bmN0aW9u
PHZvaWQoY29uc3QgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+Jik+OwogICAgIGVudW0gY2xhc3MgQ29u
dGludWUgeyBObywgWWVzIH07CiAgICAgdXNpbmcgUHJvY2Vzc0Vycm9yID0gRnVuY3Rpb248Q29u
dGludWUoRXhjZXB0aW9uQ29kZSk+OwogICAgIE5ldHdvcmtTZW5kUXVldWUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYsIFdyaXRlU3RyaW5nJiYsIFdyaXRlUmF3RGF0YSYmLCBQcm9jZXNzRXJyb3Im
Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNw
cAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNo
U3VwcG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5NCwyOCArMzk0LDIzIEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IERPTVBhdGNoU3VwcG9ydDo6aW5uZXIKICAgICByZXR1cm4geyB9OwogfQogCi1z
dGF0aWMgdm9pZCBhZGRTdHJpbmdUb1NIQTEoU0hBMSYgc2hhMSwgY29uc3QgU3RyaW5nJiBzdHJp
bmcpCi17Ci0gICAgQ1N0cmluZyBjU3RyaW5nID0gc3RyaW5nLnV0ZjgoKTsKLSAgICBzaGExLmFk
ZEJ5dGVzKGNTdHJpbmcuZGF0YUFzVUludDhQdHIoKSwgY1N0cmluZy5sZW5ndGgoKSk7Ci19Ci0K
IHN0ZDo6dW5pcXVlX3B0cjxET01QYXRjaFN1cHBvcnQ6OkRpZ2VzdD4gRE9NUGF0Y2hTdXBwb3J0
OjpjcmVhdGVEaWdlc3QoTm9kZSYgbm9kZSwgVW51c2VkTm9kZXNNYXAqIHVudXNlZE5vZGVzTWFw
KQogewogICAgIGF1dG8gZGlnZXN0ID0gbWFrZVVuaXF1ZTxEaWdlc3Q+KCk7CiAgICAgZGlnZXN0
LT5ub2RlID0gJm5vZGU7CisKICAgICBTSEExIHNoYTE7CiAKICAgICBhdXRvIG5vZGVUeXBlID0g
bm9kZS5ub2RlVHlwZSgpOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OF90Kj4oJm5vZGVUeXBlKSwgc2l6ZW9mKG5vZGVUeXBlKSk7Ci0gICAgYWRkU3RyaW5n
VG9TSEExKHNoYTEsIG5vZGUubm9kZU5hbWUoKSk7Ci0gICAgYWRkU3RyaW5nVG9TSEExKHNoYTEs
IG5vZGUubm9kZVZhbHVlKCkpOworICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZub2RlVHlwZSwg
MSB9KTsKKyAgICBzaGExLmFkZEJ5dGVzKG5vZGUubm9kZU5hbWUoKS51dGY4KCkuYnl0ZXMoKSk7
CisgICAgc2hhMS5hZGRCeXRlcyhub2RlLm5vZGVWYWx1ZSgpLnV0ZjgoKS5ieXRlcygpKTsKIAog
ICAgIGlmIChub2RlLm5vZGVUeXBlKCkgPT0gTm9kZTo6RUxFTUVOVF9OT0RFKSB7CiAgICAgICAg
IE5vZGUqIGNoaWxkID0gbm9kZS5maXJzdENoaWxkKCk7CiAgICAgICAgIHdoaWxlIChjaGlsZCkg
ewogICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPERpZ2VzdD4gY2hpbGRJbmZvID0gY3JlYXRl
RGlnZXN0KCpjaGlsZCwgdW51c2VkTm9kZXNNYXApOwotICAgICAgICAgICAgYWRkU3RyaW5nVG9T
SEExKHNoYTEsIGNoaWxkSW5mby0+c2hhMSk7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGNo
aWxkSW5mby0+c2hhMS51dGY4KCkuYnl0ZXMoKSk7CiAgICAgICAgICAgICBjaGlsZCA9IGNoaWxk
LT5uZXh0U2libGluZygpOwogICAgICAgICAgICAgZGlnZXN0LT5jaGlsZHJlbi5hcHBlbmQoV1RG
TW92ZShjaGlsZEluZm8pKTsKICAgICAgICAgfQpAQCAtNDI0LDE5ICs0MTksMTkgQEAgc3RkOjp1
bmlxdWVfcHRyPERPTVBhdGNoU3VwcG9ydDo6RGlnZXN0PgogICAgICAgICBpZiAoZWxlbWVudC5o
YXNBdHRyaWJ1dGVzV2l0aG91dFVwZGF0ZSgpKSB7CiAgICAgICAgICAgICBTSEExIGF0dHJzU0hB
MTsKICAgICAgICAgICAgIGZvciAoYXV0byYgYXR0cmlidXRlIDogZWxlbWVudC5hdHRyaWJ1dGVz
SXRlcmF0b3IoKSkgewotICAgICAgICAgICAgICAgIGFkZFN0cmluZ1RvU0hBMShhdHRyc1NIQTEs
IGF0dHJpYnV0ZS5uYW1lKCkudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgYWRkU3RyaW5n
VG9TSEExKGF0dHJzU0hBMSwgYXR0cmlidXRlLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIGF0
dHJzU0hBMS5hZGRCeXRlcyhhdHRyaWJ1dGUubmFtZSgpLnRvU3RyaW5nKCkudXRmOCgpLmJ5dGVz
KCkpOworICAgICAgICAgICAgICAgIGF0dHJzU0hBMS5hZGRCeXRlcyhhdHRyaWJ1dGUudmFsdWUo
KS5zdHJpbmcoKS51dGY4KCkuYnl0ZXMoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBT
SEExOjpEaWdlc3QgYXR0cnNIYXNoOwogICAgICAgICAgICAgYXR0cnNTSEExLmNvbXB1dGVIYXNo
KGF0dHJzSGFzaCk7Ci0gICAgICAgICAgICBkaWdlc3QtPmF0dHJzU0hBMSA9IGJhc2U2NEVuY29k
ZVRvU3RyaW5nKGF0dHJzSGFzaC5kYXRhKCksIDEwKTsKLSAgICAgICAgICAgIGFkZFN0cmluZ1Rv
U0hBMShzaGExLCBkaWdlc3QtPmF0dHJzU0hBMSk7CisgICAgICAgICAgICBkaWdlc3QtPmF0dHJz
U0hBMSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGF0dHJzSGFzaCk7CisgICAgICAgICAgICBzaGEx
LmFkZEJ5dGVzKGRpZ2VzdC0+YXR0cnNTSEExLnV0ZjgoKS5ieXRlcygpKTsKICAgICAgICAgfQog
ICAgIH0KIAogICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwogICAgIHNoYTEuY29tcHV0ZUhhc2goaGFz
aCk7Ci0gICAgZGlnZXN0LT5zaGExID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaGFzaC5kYXRhKCks
IDEwKTsKKyAgICBkaWdlc3QtPnNoYTEgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhoYXNoKTsKICAg
ICBpZiAodW51c2VkTm9kZXNNYXApCiAgICAgICAgIHVudXNlZE5vZGVzTWFwLT5hZGQoZGlnZXN0
LT5zaGExLCBkaWdlc3QuZ2V0KCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysg
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYwMiw3ICs2MDIsNyBAQCBib29sIEluc3BlY3RvckZyb250ZW5kSG9zdDo6
c2hvd0NlcnRpZmljCiAgICAgaWYgKCFkYXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YS0+ZGF0YSgpLCBkYXRhLT5z
aXplKCkpOworICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlciB7ICpkYXRhIH07
CiAgICAgc3RkOjpvcHRpb25hbDxDZXJ0aWZpY2F0ZUluZm8+IGNlcnRpZmljYXRlSW5mbzsKICAg
ICBkZWNvZGVyID4+IGNlcnRpZmljYXRlSW5mbzsKICAgICBpZiAoIWNlcnRpZmljYXRlSW5mbykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNE
YXRhLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05l
dHdvcmtSZXNvdXJjZXNEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBA
IHVuc2lnbmVkIE5ldHdvcmtSZXNvdXJjZXNEYXRhOjpSZXNvdXJjZUQKICAgICAgICAgbV9jb250
ZW50ID0gbV9kZWNvZGVyLT5kZWNvZGVBbmRGbHVzaChtX2RhdGFCdWZmZXItPmRhdGEoKSwgZGF0
YUxlbmd0aCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9iYXNlNjRFbmNvZGVkID0gdHJ1ZTsK
LSAgICAgICAgbV9jb250ZW50ID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcobV9kYXRhQnVmZmVyLT5k
YXRhKCksIGRhdGFMZW5ndGgpOworICAgICAgICBtX2NvbnRlbnQgPSBiYXNlNjRFbmNvZGVUb1N0
cmluZyhtX2RhdGFCdWZmZXItPmJ5dGVzKCkpOwogICAgIH0KIAogICAgIG1fZGF0YUJ1ZmZlciA9
IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckRPTUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE2OTgsNyArMTY5OCw3IEBAIHN0YXRpYyBTdHJpbmcgY29tcHV0ZUNvbnRlbnRTZWN1
cml0eVBvbGkKICAgICBhdXRvIGNyeXB0b0RpZ2VzdCA9IFBBTDo6Q3J5cHRvRGlnZXN0OjpjcmVh
dGUoUEFMOjpDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzI1Nik7CiAgICAgY3J5cHRvRGln
ZXN0LT5hZGRCeXRlcyhjb250ZW50LmRhdGEoKSwgY29udGVudC5zaXplKCkpOwogICAgIGF1dG8g
ZGlnZXN0ID0gY3J5cHRvRGlnZXN0LT5jb21wdXRlSGFzaCgpOwotICAgIHJldHVybiBtYWtlU3Ry
aW5nKCJzaGEyNTYtIiwgYmFzZTY0RW5jb2RlZChkaWdlc3QuZGF0YSgpLCBkaWdlc3Quc2l6ZSgp
KSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoInNoYTI1Ni0iLCBiYXNlNjRFbmNvZGVkKGRpZ2Vz
dCkpOwogfQogCiBSZWY8UHJvdG9jb2w6OkRPTTo6Tm9kZT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1
aWxkT2JqZWN0Rm9yTm9kZShOb2RlKiBub2RlLCBpbnQgZGVwdGgpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdl
bnQuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NSw3ICsx
NzUsNyBAQCBSZWY8UHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldEZyYW1lPiBiCiAgICAgcmV0
dXJuIFByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRGcmFtZTo6Y3JlYXRlKCkKICAgICAgICAg
LnNldE9wY29kZShmcmFtZS5vcENvZGUpCiAgICAgICAgIC5zZXRNYXNrKGZyYW1lLm1hc2tlZCkK
LSAgICAgICAgLnNldFBheWxvYWREYXRhKGZyYW1lLm9wQ29kZSA9PSAxID8gU3RyaW5nOjpmcm9t
VVRGOFdpdGhMYXRpbjFGYWxsYmFjayhmcmFtZS5wYXlsb2FkLCBmcmFtZS5wYXlsb2FkTGVuZ3Ro
KSA6IGJhc2U2NEVuY29kZVRvU3RyaW5nKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5n
dGgpKQorICAgICAgICAuc2V0UGF5bG9hZERhdGEoZnJhbWUub3BDb2RlID09IDEgPyBTdHJpbmc6
OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRM
ZW5ndGgpIDogYmFzZTY0RW5jb2RlVG9TdHJpbmcoU3BhbiB7IGZyYW1lLnBheWxvYWQsIGZyYW1l
LnBheWxvYWRMZW5ndGggfSkpCiAgICAgICAgIC5zZXRQYXlsb2FkTGVuZ3RoKGZyYW1lLnBheWxv
YWRMZW5ndGgpCiAgICAgICAgIC5yZWxlYXNlKCk7CiB9CkBAIC01ODksNyArNTg5LDcgQEAgdm9p
ZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRpZFJlY2VpdmVEYQogICAgICAgICAvLyBPZnRlbiB0
aGUgZGF0YSBpcyB0ZXh0IGFuZCB3ZSB3b3VsZCBoYXZlIGEgZGVjb2RlciwgYnV0IGZvciBub24t
dGV4dCB3ZSB3b24ndCBoYXZlIGEgZGVjb2Rlci4KICAgICAgICAgLy8gU3luYyBYSFJzIG1heSBu
b3QgaGF2ZSBhIGNhY2hlZCByZXNvdXJjZSwgd2hpbGUgbm9uLXN5bmMgWEhScyB1c3VhbGx5IHRy
YW5zZmVyIGRhdGEgb3ZlciBvbiBjb21wbGV0aW9uLgogICAgICAgICBpZiAobV9sb2FkaW5nWEhS
U3luY2hyb25vdXNseSAmJiByZXNvdXJjZURhdGEgJiYgIXJlc291cmNlRGF0YS0+aGFzQnVmZmVy
ZWREYXRhKCkgJiYgIXJlc291cmNlRGF0YS0+Y2FjaGVkUmVzb3VyY2UoKSkKLSAgICAgICAgICAg
IG1fcmVzb3VyY2VzRGF0YS0+c2V0UmVzb3VyY2VDb250ZW50KHJlcXVlc3RJZCwgYmFzZTY0RW5j
b2RlVG9TdHJpbmcoZGF0YSwgZGF0YUxlbmd0aCksIHRydWUpOworICAgICAgICAgICAgbV9yZXNv
dXJjZXNEYXRhLT5zZXRSZXNvdXJjZUNvbnRlbnQocmVxdWVzdElkLCBiYXNlNjRFbmNvZGVUb1N0
cmluZyhTcGFuIHsgZGF0YSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRhdGFMZW5ndGgpIH0pLCB0
cnVlKTsKICAgICB9CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZGF0YVJlY2VpdmVkKHJl
cXVlc3RJZCwgdGltZXN0YW1wKCksIGRhdGFMZW5ndGgsIGVuY29kZWREYXRhTGVuZ3RoKTsKQEAg
LTEwMDUsNyArMTAwNSw3IEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVj
dG8KIAogICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2RlcjsKICAgICBXVEY6OlBl
cnNpc3RlbmNlOjpDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUoZW5jb2Rl
ciwgY2VydGlmaWNhdGUudmFsdWUoKSk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5n
KGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICByZXR1cm4gYmFz
ZTY0RW5jb2RlVG9TdHJpbmcoZW5jb2Rlci5idWZmZXIoKSk7CiB9CiAKIFdlYlNvY2tldCogSW5z
cGVjdG9yTmV0d29ya0FnZW50Ojp3ZWJTb2NrZXRGb3JSZXF1ZXN0SWQoY29uc3QgUHJvdG9jb2w6
Ok5ldHdvcms6OlJlcXVlc3RJZCYgcmVxdWVzdElkKQpAQCAtMTQxMCw3ICsxNDEwLDcgQEAgYm9v
bCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmNhY2hlZFJlc291cgogICAgICAgICB9CiAKICAgICAg
ICAgKmJhc2U2NEVuY29kZWQgPSB0cnVlOwotICAgICAgICAqcmVzdWx0ID0gYmFzZTY0RW5jb2Rl
VG9TdHJpbmcoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKTsKKyAgICAgICAgKnJlc3Vs
dCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGJ1ZmZlci0+Ynl0ZXMoKSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yUGFnZUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsNyBAQAogCiAjaWYgRU5BQkxFKFdFQl9BUkNISVZF
KSAmJiBVU0UoQ0YpCiAjaW5jbHVkZSAiTGVnYWN5V2ViQXJjaGl2ZS5oIgorI2luY2x1ZGUgPHd0
Zi9jZi9TcGFuQ0YuaD4KICNlbmRpZgogCiAKQEAgLTExMyw3ICsxMTQsNyBAQCBib29sIEluc3Bl
Y3RvclBhZ2VBZ2VudDo6c2hhcmVkQnVmZmVyQ29uCiBib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6
ZGF0YUNvbnRlbnQoY29uc3QgdWludDhfdCogZGF0YSwgdW5zaWduZWQgc2l6ZSwgY29uc3QgU3Ry
aW5nJiB0ZXh0RW5jb2RpbmdOYW1lLCBib29sIHdpdGhCYXNlNjRFbmNvZGUsIFN0cmluZyogcmVz
dWx0KQogewogICAgIGlmICh3aXRoQmFzZTY0RW5jb2RlKSB7Ci0gICAgICAgICpyZXN1bHQgPSBi
YXNlNjRFbmNvZGVUb1N0cmluZyhkYXRhLCBzaXplKTsKKyAgICAgICAgKnJlc3VsdCA9IGJhc2U2
NEVuY29kZVRvU3RyaW5nKFNwYW4geyBkYXRhLCBzaXplIH0pOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKQEAgLTExMDIsNyArMTEwMyw3IEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09y
PFN0cmluZz4gSW5zcGVjdG8KICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBu
b3QgY3JlYXRlIHdlYiBhcmNoaXZlIGZvciBtYWluIGZyYW1lIl9zKTsKIAogICAgIFJldGFpblB0
cjxDRkRhdGFSZWY+IGJ1ZmZlciA9IGFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigpOwot
ICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhDRkRhdGFHZXRCeXRlUHRyKGJ1ZmZlci5n
ZXQoKSksIENGRGF0YUdldExlbmd0aChidWZmZXIuZ2V0KCkpKTsKKyAgICByZXR1cm4gYmFzZTY0
RW5jb2RlVG9TdHJpbmcoYXNCeXRlcyhidWZmZXIuZ2V0KCkpKTsKIH0KICNlbmRpZgogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJj
aGl2ZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNo
aXZlL21odG1sL01IVE1MQXJjaGl2ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MSwxNiArMTgx
LDE0IEBAIFJlZjxTaGFyZWRCdWZmZXI+IE1IVE1MQXJjaGl2ZTo6Z2VuZXJhdGUKICAgICAgICAg
bWh0bWxEYXRhLT5hcHBlbmQoYXNjaWlTdHJpbmcuZGF0YSgpLCBhc2NpaVN0cmluZy5sZW5ndGgo
KSk7CiAKICAgICAgICAgLy8gRklYTUU6IGlkZWFsbHkgd2Ugd291bGQgZW5jb2RlIHRoZSBjb250
ZW50IGFzIGEgc3RyZWFtIHdpdGhvdXQgaGF2aW5nIHRvIGZldGNoIGl0IGFsbC4KLSAgICAgICAg
YXV0byogZGF0YSA9IHJlc291cmNlLmRhdGEtPmRhdGEoKTsKLSAgICAgICAgc2l6ZV90IGRhdGFM
ZW5ndGggPSByZXNvdXJjZS5kYXRhLT5zaXplKCk7CiAgICAgICAgIGlmICghc3RyY21wKGNvbnRl
bnRFbmNvZGluZywgcXVvdGVkUHJpbnRhYmxlKSkgewotICAgICAgICAgICAgYXV0byBlbmNvZGVk
RGF0YSA9IHF1b3RlZFByaW50YWJsZUVuY29kZShkYXRhLCBkYXRhTGVuZ3RoKTsKKyAgICAgICAg
ICAgIGF1dG8gZW5jb2RlZERhdGEgPSBxdW90ZWRQcmludGFibGVFbmNvZGUocmVzb3VyY2UuZGF0
YS0+Ynl0ZXMoKSk7CiAgICAgICAgICAgICBtaHRtbERhdGEtPmFwcGVuZChlbmNvZGVkRGF0YS5k
YXRhKCksIGVuY29kZWREYXRhLnNpemUoKSk7CiAgICAgICAgICAgICBtaHRtbERhdGEtPmFwcGVu
ZCgiXHJcbiIsIDIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKCFzdHJj
bXAoY29udGVudEVuY29kaW5nLCBiYXNlNjQpKTsKICAgICAgICAgICAgIC8vIFdlIGFyZSBub3Qg
c3BlY2lmeWluZyBpbnNlcnRMRnMgPSB0cnVlIGJlbG93IGFzIGl0IHdvdWxkIGN1dCB0aGUgbGlu
ZXMgd2l0aCBMRnMgYW5kIE1IVE1MIHJlcXVpcmVzIENSTEZzLgotICAgICAgICAgICAgYXV0byBl
bmNvZGVkRGF0YSA9IGJhc2U2NEVuY29kZVRvVmVjdG9yKGRhdGEsIGRhdGFMZW5ndGgpOworICAg
ICAgICAgICAgYXV0byBlbmNvZGVkRGF0YSA9IGJhc2U2NEVuY29kZVRvVmVjdG9yKHJlc291cmNl
LmRhdGEtPmJ5dGVzKCkpOwogICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG1heGltdW1MaW5lTGVu
Z3RoID0gNzY7CiAgICAgICAgICAgICBzaXplX3QgaW5kZXggPSAwOwogICAgICAgICAgICAgc2l6
ZV90IGVuY29kZWREYXRhTGVuZ3RoID0gZW5jb2RlZERhdGEuc2l6ZSgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxQYXJzZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MUGFyc2VyLmNwcAko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwv
TUhUTUxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTUsNyArMTk1LDcgQEAgUmVmUHRy
PEFyY2hpdmVSZXNvdXJjZT4gTUhUTUxQYXJzZXI6OnBhcgogICAgIFZlY3Rvcjx1aW50OF90PiBk
YXRhOwogICAgIHN3aXRjaCAobWltZUhlYWRlci5jb250ZW50VHJhbnNmZXJFbmNvZGluZygpKSB7
CiAgICAgY2FzZSBNSU1FSGVhZGVyOjpCYXNlNjQ6IHsKLSAgICAgICAgYXV0byBkZWNvZGVkRGF0
YSA9IGJhc2U2NERlY29kZShjb250ZW50LT5kYXRhKCksIGNvbnRlbnQtPnNpemUoKSk7CisgICAg
ICAgIGF1dG8gZGVjb2RlZERhdGEgPSBiYXNlNjREZWNvZGUoY29udGVudC0+Ynl0ZXMoKSk7CiAg
ICAgICAgIGlmICghZGVjb2RlZERhdGEpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiSW52YWxp
ZCBiYXNlNjQgY29udGVudCBmb3IgTUhUTUwgcGFydC4iKTsKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwpAQCAtMjA0LDcgKzIwNCw3IEBAIFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IE1IVE1M
UGFyc2VyOjpwYXIKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgTUlNRUhlYWRlcjo6
UXVvdGVkUHJpbnRhYmxlOgotICAgICAgICBkYXRhID0gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNv
bnRlbnQtPmRhdGEoKSwgY29udGVudC0+c2l6ZSgpKTsKKyAgICAgICAgZGF0YSA9IHF1b3RlZFBy
aW50YWJsZURlY29kZShjb250ZW50LT5ieXRlcygpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBNSU1FSGVhZGVyOjpTZXZlbkJpdDoKICAgICBjYXNlIE1JTUVIZWFkZXI6OkJpbmFyeToKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25Mb2FkZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25Mb2FkZXIuY3BwCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgSWNvbkxvYWRlcjo6bm90aWZ5Rmlu
aXNoZWQoQ2FjaGVkUmUKICAgICAgICAgZGF0YSA9IG51bGxwdHI7CiAKICAgICBjb25zdGV4cHIg
dWludDhfdCBwZGZNYWdpY051bWJlcltdID0geyAnJScsICdQJywgJ0QnLCAnRicgfTsKLSAgICBp
ZiAoZGF0YSAmJiBkYXRhLT5zdGFydHNXaXRoKFNwYW4geyBwZGZNYWdpY051bWJlciwgc3RkOjpz
aXplKHBkZk1hZ2ljTnVtYmVyKSB9KSkgeworICAgIGlmIChkYXRhICYmIGRhdGEtPnN0YXJ0c1dp
dGgocGRmTWFnaWNOdW1iZXIpKSB7CiAgICAgICAgIExPRyhJY29uRGF0YWJhc2UsICJJY29uTG9h
ZGVyOjpmaW5pc2hMb2FkaW5nKCkgLSBJZ25vcmluZyBpY29uIGF0ICVzIGJlY2F1c2UgaXQgYXBw
ZWFycyB0byBiZSBhIFBERiIsIG1fcmVzb3VyY2UtPnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0
YSgpKTsKICAgICAgICAgZGF0YSA9IG51bGxwdHI7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9CYXNlNjRVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9CYXNlNjRVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICsz
OCw3IEBAIEV4Y2VwdGlvbk9yPFN0cmluZz4gQmFzZTY0VXRpbGl0aWVzOjpidG8KICAgICBpZiAo
IXN0cmluZ1RvRW5jb2RlLmlzQWxsTGF0aW4xKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IgfTsKIAotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0
cmluZyhzdHJpbmdUb0VuY29kZS5sYXRpbjEoKSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRv
U3RyaW5nKHN0cmluZ1RvRW5jb2RlLmxhdGluMSgpLmJ5dGVzKCkpOwogfQogCiBFeGNlcHRpb25P
cjxTdHJpbmc+IEJhc2U2NFV0aWxpdGllczo6YXRvYihjb25zdCBTdHJpbmcmIGVuY29kZWRTdHJp
bmcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1c3Rv
bURhdGEuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Q
YXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAg
UmVmPFNoYXJlZEJ1ZmZlcj4gUGFzdGVib2FyZEN1c3RvbURhdGE6OgogICAgIGVuY29kZXIgPDwg
bV9vcmlnaW47CiAgICAgZW5jb2RlciA8PCBzYW1lT3JpZ2luQ3VzdG9tU3RyaW5nRGF0YSgpOwog
ICAgIGVuY29kZXIgPDwgb3JkZXJlZFR5cGVzKCk7Ci0gICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6
Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICByZXR1
cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZW5jb2Rlci5idWZmZXIoKSk7CiB9CiAKIFBhc3RlYm9h
cmRDdXN0b21EYXRhIFBhc3RlYm9hcmRDdXN0b21EYXRhOjpmcm9tUGVyc2lzdGVuY2VEZWNvZGVy
KFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXImJiBkZWNvZGVyKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwy
MCArMzQsMTkgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVk
ZSA8d3RmL3VuaWNvZGUvVVRGOENvbnZlcnNpb24uaD4KIAotbmFtZXNwYWNlIFdlYkNvcmUgewor
I2lmIFVTRShDRikKKyNpbmNsdWRlIDx3dGYvY2YvU3BhbkNGLmg+CisjZW5kaWYKIAotU2hhcmVk
QnVmZmVyOjpTaGFyZWRCdWZmZXIoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCi17
Ci0gICAgYXBwZW5kKGRhdGEsIHNpemUpOwotfQorbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TaGFy
ZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkKK1No
YXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRhKQogewot
ICAgIGFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgc2l6ZSk7
CisgICAgYXBwZW5kKGRhdGEpOwogfQogCiBTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihGaWxl
U3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIGZpbGVEYXRhKQotICAgIDogbV9zaXplKGZpbGVEYXRh
LnNpemUoKSkKKyAgICA6IG1fc2l6ZShmaWxlRGF0YS5kYXRhKCkuc2l6ZSgpKQogewogICAgIG1f
c2VnbWVudHMuYXBwZW5kKHswLCBEYXRhU2VnbWVudDo6Y3JlYXRlKFdURk1vdmUoZmlsZURhdGEp
KX0pOwogfQpAQCAtMTg4LDEzICsxODcsMTMgQEAgdm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVuZChj
b25zdCBTaGFyZWRCdQogICAgIEFTU0VSVChpbnRlcm5hbGx5Q29uc2lzdGVudCgpKTsKIH0KIAot
dm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVuZChjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVu
Z3RoKQordm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVuZChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0
YSkKIHsKICAgICBBU1NFUlQoIW1faGFzQmVlbkNvbWJpbmVkSW50b09uZVNlZ21lbnQpOwogICAg
IFZlY3Rvcjx1aW50OF90PiB2ZWN0b3I7Ci0gICAgdmVjdG9yLmFwcGVuZChkYXRhLCBsZW5ndGgp
OwotICAgIG1fc2VnbWVudHMuYXBwZW5kKHttX3NpemUsIERhdGFTZWdtZW50OjpjcmVhdGUoV1RG
TW92ZSh2ZWN0b3IpKX0pOwotICAgIG1fc2l6ZSArPSBsZW5ndGg7CisgICAgdmVjdG9yLmFwcGVu
ZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6
ZSgpKTsKKyAgICBtX3NlZ21lbnRzLmFwcGVuZCh7IG1fc2l6ZSwgRGF0YVNlZ21lbnQ6OmNyZWF0
ZShXVEZNb3ZlKHZlY3RvcikpIH0pOworICAgIG1fc2l6ZSArPSBkYXRhLnNpemUoKTsKICAgICBB
U1NFUlQoaW50ZXJuYWxseUNvbnNpc3RlbnQoKSk7CiB9CiAKQEAgLTIzMiw3ICsyMzEsNyBAQCB2
b2lkIFNoYXJlZEJ1ZmZlcjo6Zm9yRWFjaFNlZ21lbnQoY29uc3QgCiAgICAgICAgIGFwcGx5KFNw
YW4geyBzZWdtZW50LnNlZ21lbnQtPmRhdGEoKSwgc2VnbWVudC5zZWdtZW50LT5zaXplKCkgfSk7
CiB9CiAKLWJvb2wgU2hhcmVkQnVmZmVyOjpzdGFydHNXaXRoKGNvbnN0IFNwYW48Y29uc3QgdWlu
dDhfdD4mIHByZWZpeCkgY29uc3QKK2Jvb2wgU2hhcmVkQnVmZmVyOjpzdGFydHNXaXRoKGNvbnN0
IFNwYW48Y29uc3Qgc3RkOjpieXRlPiYgcHJlZml4KSBjb25zdAogewogICAgIGlmIChwcmVmaXgu
ZW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNDAsNyArMjM5LDcgQEAgYm9vbCBT
aGFyZWRCdWZmZXI6OnN0YXJ0c1dpdGgoY29uc3QgU3BhbgogICAgIGlmIChzaXplKCkgPCBwcmVm
aXguc2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBjb25zdCB1aW50OF90KiBw
cmVmaXhQdHIgPSBwcmVmaXguZGF0YSgpOworICAgIGF1dG8qIHByZWZpeFB0ciA9IHByZWZpeC5k
YXRhKCk7CiAgICAgc2l6ZV90IHJlbWFpbmluZyA9IHByZWZpeC5zaXplKCk7CiAgICAgZm9yIChh
dXRvJiBzZWdtZW50IDogbV9zZWdtZW50cykgewogICAgICAgICBzaXplX3QgYW1vdW50VG9Db21w
YXJlVGhpc1RpbWUgPSBzdGQ6Om1pbihyZW1haW5pbmcsIHNlZ21lbnQuc2VnbWVudC0+c2l6ZSgp
KTsKQEAgLTMwMSw5ICszMDAsMzggQEAgY29uc3QgdWludDhfdCogU2hhcmVkQnVmZmVyOjpEYXRh
U2VnbWVudAogI2lmIFVTRShHU1RSRUFNRVIpCiAgICAgICAgIFtdKGNvbnN0IFJlZlB0cjxHc3RN
YXBwZWRPd25lZEJ1ZmZlcj4mIGRhdGEpIHsgcmV0dXJuIGRhdGEtPmRhdGEoKTsgfSwKICNlbmRp
ZgotICAgICAgICBbXShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuZGF0YSgpKTsgfQorICAgICAg
ICBbXShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeyByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5kYXRhKCkuZGF0YSgpKTsgfQorICAg
ICk7CisgICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwgbV9pbW11dGFibGVEYXRhKTsKK30K
KworU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmJ5dGVz
KCkgY29uc3QKK3sKKyAgICBhdXRvIHZpc2l0b3IgPSBXVEY6Om1ha2VWaXNpdG9yKAorICAgICAg
ICBbXShjb25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBh
c0J5dGVzKFNwYW4geyBkYXRhIH0pOworICAgICAgICB9LAorI2lmIFVTRShDRikKKyAgICAgICAg
W10oY29uc3QgUmV0YWluUHRyPENGRGF0YVJlZj4mIGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVy
biBhc0J5dGVzKGRhdGEuZ2V0KCkpOworICAgICAgICB9LAorI2VuZGlmCisjaWYgVVNFKEdMSUIp
CisgICAgICAgIFtdKGNvbnN0IEdSZWZQdHI8R0J5dGVzPiYgZGF0YSkgeworICAgICAgICAgICAg
cmV0dXJuIGFzQnl0ZXMoU3BhbiB7IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihnX2J5dGVz
X2dldF9kYXRhKGRhdGEuZ2V0KCksIG51bGxwdHIpKSwgZ19ieXRlc19nZXRfc2l6ZShkYXRhLmdl
dCgpKSB9KTsKKyAgICAgICAgfSwKKyNlbmRpZgorI2lmIFVTRShHU1RSRUFNRVIpCisgICAgICAg
IFtdKGNvbnN0IFJlZlB0cjxHc3RNYXBwZWRPd25lZEJ1ZmZlcj4mIGRhdGEpIHsKKyAgICAgICAg
ICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBkYXRhLT5kYXRhKCksIGRhdGEtPnNpemUoKSB9KTsK
KyAgICAgICAgfSwKKyNlbmRpZgorICAgICAgICBbXShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRG
aWxlRGF0YSYgZGF0YSkgeworICAgICAgICAgICAgcmV0dXJuIGRhdGEuZGF0YSgpOworICAgICAg
ICB9CiAgICAgKTsKICAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBtX2ltbXV0YWJsZURh
dGEpOworCiB9CiAKIGJvb2wgU2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVudDo6Y29udGFpbnNNYXBw
ZWRGaWxlRGF0YSgpIGNvbnN0CkBAIC0zMTksNyArMzQ3LDcgQEAgdm9pZCBTaGFyZWRCdWZmZXI6
OmhpbnRNZW1vcnlOb3ROZWVkZWRTbwogCiBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIFNoYXJl
ZEJ1ZmZlcjo6ZGVjb2RlcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHsgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4oZGF0YSgpKSwgc2l6ZSgpIH07CisgICAgcmV0dXJuIHsgYnl0ZXMo
KSB9OwogfQogCiBib29sIFNoYXJlZEJ1ZmZlcjo6b3BlcmF0b3I9PShjb25zdCBTaGFyZWRCdWZm
ZXImIG90aGVyKSBjb25zdApAQCAtMzg0LDcgKzQxMiw3IEBAIHNpemVfdCBTaGFyZWRCdWZmZXI6
OkRhdGFTZWdtZW50OjpzaXplKCkKICNpZiBVU0UoR1NUUkVBTUVSKQogICAgICAgICBbXShjb25z
dCBSZWZQdHI8R3N0TWFwcGVkT3duZWRCdWZmZXI+JiBkYXRhKSB7IHJldHVybiBkYXRhLT5zaXpl
KCk7IH0sCiAjZW5kaWYKLSAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURh
dGEmIGRhdGEpIHsgcmV0dXJuIGRhdGEuc2l6ZSgpOyB9CisgICAgICAgIFtdKGNvbnN0IEZpbGVT
eXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBkYXRhKSB7IHJldHVybiBkYXRhLmRhdGEoKS5zaXplKCk7
IH0KICAgICApOwogICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIG1faW1tdXRhYmxlRGF0
YSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY3LDggKzY3LDEyIEBAIGNsYXNzIFNoYXJlZEJ1ZmZlckRhdGFWaWV3
OwogY2xhc3MgV0VCQ09SRV9FWFBPUlQgU2hhcmVkQnVmZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8
U2hhcmVkQnVmZmVyPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNy
ZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hhcmVkQnVmZmVyKTsgfQotICAgIHN0YXRp
YyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNp
emUpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hhcmVkQnVmZmVyKGRhdGEsIHNpemUpKTsgfQot
ICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoY29uc3QgY2hhciogZGF0YSwgc2l6
ZV90IHNpemUpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hhcmVkQnVmZmVyKGRhdGEsIHNpemUp
KTsgfQorICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoU3Bhbjxjb25zdCBzdGQ6
OmJ5dGU+IGRhdGEpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hhcmVkQnVmZmVyKGRhdGEpKTsg
fQorICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoU3Bhbjxjb25zdCB1aW50OF90
PiBkYXRhKSB7IHJldHVybiBjcmVhdGUoYXNCeXRlcyhkYXRhKSk7IH0KKyAgICBzdGF0aWMgUmVm
PFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKFNwYW48Y29uc3QgY2hhcj4gZGF0YSkgeyByZXR1cm4gY3Jl
YXRlKGFzQnl0ZXMoZGF0YSkpOyB9CisgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0
ZShjb25zdCBzdGQ6OmJ5dGUqIGRhdGEsIHNpemVfdCBzaXplKSB7IHJldHVybiBjcmVhdGUoU3Bh
biB7IGRhdGEsIHNpemUgfSk7IH0KKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRl
KGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7IHJldHVybiBjcmVhdGUoU3BhbiB7
IGRhdGEsIHNpemUgfSk7IH0KKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNv
bnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKSB7IHJldHVybiBjcmVhdGUoU3BhbiB7IGRhdGEs
IHNpemUgfSk7IH0KICAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKEZpbGVTeXN0
ZW06Ok1hcHBlZEZpbGVEYXRhJiYgbWFwcGVkRmlsZURhdGEpIHsgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU2hhcmVkQnVmZmVyKFdURk1vdmUobWFwcGVkRmlsZURhdGEpKSk7IH0KIAogICAgIGVudW0g
Y2xhc3MgTWF5VXNlRmlsZU1hcHBpbmcgOiBib29sIHsgTm8sIFllcyB9OwpAQCAtMTAxLDYgKzEw
NSw4IEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTogQXVkaXQgdGhlIGNhbGwgc2l0ZXMgb2YgdGhp
cyBmdW5jdGlvbiBhbmQgcmVwbGFjZSB0aGVtIHdpdGggaXRlcmF0aW9uIGlmIHBvc3NpYmxlLgog
ICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEoKSBjb25zdDsKICAgICBjb25zdCBjaGFyKiBkYXRhQXND
aGFyUHRyKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZGF0
YSgpKTsgfQorICAgIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0IHsgcmV0dXJu
IGFzQnl0ZXMoU3BhbiB7IGRhdGEoKSwgc2l6ZSgpIH0pOyB9CisKICAgICBWZWN0b3I8dWludDhf
dD4gY29weURhdGEoKSB7IHJldHVybiB7IGRhdGEoKSwgc2l6ZSgpIH07IH0KIAogICAgIC8vIENv
bWJpbmVzIGFsbCB0aGUgc2VnbWVudHMgaW50byBhIFZlY3RvciBhbmQgcmV0dXJucyB0aGF0IHZl
Y3RvciBhZnRlciBjbGVhcmluZyB0aGUgU2hhcmVkQnVmZmVyLgpAQCAtMTE1LDggKzEyMSwxMiBA
QCBwdWJsaWM6CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIXNpemUoKTsgfQog
CiAgICAgdm9pZCBhcHBlbmQoY29uc3QgU2hhcmVkQnVmZmVyJik7Ci0gICAgdm9pZCBhcHBlbmQo
Y29uc3QgdWludDhfdCosIHNpemVfdCk7Ci0gICAgdm9pZCBhcHBlbmQoY29uc3QgY2hhciogZGF0
YSwgc2l6ZV90IGxlbmd0aCkgeyBhcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oZGF0YSksIGxlbmd0aCk7IH0KKyAgICB2b2lkIGFwcGVuZChTcGFuPGNvbnN0IHN0ZDo6Ynl0
ZT4pOworICAgIHZvaWQgYXBwZW5kKFNwYW48Y29uc3QgdWludDhfdD4gZGF0YSkgeyBhcHBlbmQo
YXNCeXRlcyhkYXRhKSk7IH0KKyAgICB2b2lkIGFwcGVuZChTcGFuPGNvbnN0IGNoYXI+IGRhdGEp
IHsgYXBwZW5kKGFzQnl0ZXMoZGF0YSkpOyB9CisgICAgdm9pZCBhcHBlbmQoY29uc3Qgc3RkOjpi
eXRlKiBkYXRhLCBzaXplX3QgbGVuZ3RoKSB7IGFwcGVuZChTcGFuIHsgZGF0YSwgbGVuZ3RoIH0p
OyB9CisgICAgdm9pZCBhcHBlbmQoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCkg
eyBhcHBlbmQoU3BhbiB7IGRhdGEsIGxlbmd0aCB9KTsgfQorICAgIHZvaWQgYXBwZW5kKGNvbnN0
IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpIHsgYXBwZW5kKFNwYW4geyBkYXRhLCBsZW5ndGgg
fSk7IH0KICAgICB2b2lkIGFwcGVuZChWZWN0b3I8dWludDhfdD4mJik7CiAKICAgICB2b2lkIGNs
ZWFyKCk7CkBAIC0xMzEsNiArMTQxLDggQEAgcHVibGljOgogICAgICAgICBXRUJDT1JFX0VYUE9S
VCBjb25zdCB1aW50OF90KiBkYXRhKCkgY29uc3Q7CiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIHNp
emVfdCBzaXplKCkgY29uc3Q7CiAKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+IGJ5dGVzKCkgY29uc3Q7CisKICAgICAgICAgc3RhdGljIFJlZjxEYXRhU2VnbWVu
dD4gY3JlYXRlKFZlY3Rvcjx1aW50OF90PiYmIGRhdGEpCiAgICAgICAgIHsKICAgICAgICAgICAg
IGRhdGEuc2hyaW5rVG9GaXQoKTsKQEAgLTE4Nyw3ICsxOTksOSBAQCBwdWJsaWM6CiAgICAgfTsK
IAogICAgIHZvaWQgZm9yRWFjaFNlZ21lbnQoY29uc3QgRnVuY3Rpb248dm9pZChjb25zdCBTcGFu
PGNvbnN0IHVpbnQ4X3Q+Jik+JikgY29uc3Q7Ci0gICAgYm9vbCBzdGFydHNXaXRoKGNvbnN0IFNw
YW48Y29uc3QgdWludDhfdD4mIHByZWZpeCkgY29uc3Q7CisKKyAgICBib29sIHN0YXJ0c1dpdGgo
Y29uc3QgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+JiBwcmVmaXgpIGNvbnN0OworICAgIGJvb2wgc3Rh
cnRzV2l0aChjb25zdCBTcGFuPGNvbnN0IHVpbnQ4X3Q+JiBwcmVmaXgpIGNvbnN0IHsgcmV0dXJu
IHN0YXJ0c1dpdGgoYXNCeXRlcyhwcmVmaXgpKTsgfQogCiAgICAgc3RydWN0IERhdGFTZWdtZW50
VmVjdG9yRW50cnkgewogICAgICAgICBzaXplX3QgYmVnaW5Qb3NpdGlvbjsKQEAgLTIxMiw4ICsy
MjYsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgU2hhcmVkQnVmZmVyKCkg
PSBkZWZhdWx0OwotICAgIGV4cGxpY2l0IFNoYXJlZEJ1ZmZlcihjb25zdCB1aW50OF90Kiwgc2l6
ZV90KTsKLSAgICBleHBsaWNpdCBTaGFyZWRCdWZmZXIoY29uc3QgY2hhciosIHNpemVfdCk7Cisg
ICAgZXhwbGljaXQgU2hhcmVkQnVmZmVyKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7CiAgICAgZXhw
bGljaXQgU2hhcmVkQnVmZmVyKFZlY3Rvcjx1aW50OF90PiYmKTsKICAgICBleHBsaWNpdCBTaGFy
ZWRCdWZmZXIoRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmJik7CiAjaWYgVVNFKENGKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQ0FBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29j
b2EvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJBdWRpb1N0cmVh
bURlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSA8Q29yZUF1ZGlvL0NvcmVBdWRpb1R5cGVzLmg+Cisj
aW5jbHVkZSA8d3RmL1NwYW4uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC04MCwxMyAr
ODEsMTMgQEAgcHJpdmF0ZToKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIENBQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7Ci0gICAg
ZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90Kj4oJm1fc3RyZWFtRGVzY3JpcHRpb24pLCBzaXplb2YobV9zdHJlYW1EZXNjcmlwdGlvbiks
IDEpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmbV9zdHJlYW1E
ZXNjcmlwdGlvbiwgMSB9LCAxKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KIGJvb2wg
Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgQ0FBdWRp
b1N0cmVhbURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKIHsKLSAgICByZXR1cm4gZGVjb2Rlci5k
ZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJmRlc2NyaXB0
aW9uLm1fc3RyZWFtRGVzY3JpcHRpb24pLCBzaXplb2YoZGVzY3JpcHRpb24ubV9zdHJlYW1EZXNj
cmlwdGlvbiksIDEpOworICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShT
cGFuIHsgJmRlc2NyaXB0aW9uLm1fc3RyZWFtRGVzY3JpcHRpb24sIDEgfSwgMSk7CiB9CiAKIGlu
bGluZSBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24gdG9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24o
Y29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xl
YXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5OCwxNSArMTk4LDEzIEBAIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBl
eHRyYWN0S2V5aWRzRnIKIHsKICAgICBSZWY8U2hhcmVkQnVmZmVyPiBrZXlJZHMgPSBTaGFyZWRC
dWZmZXI6OmNyZWF0ZSgpOwogCi0gICAgc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4ga2V5
SWRzTWFwID0gZXh0cmFjdEtleWlkc0xvY2F0aW9uRnJvbUNlbmNJbml0RGF0YShpbml0RGF0YSk7
Ci0gICAgdW5zaWduZWQga2V5SWRDb3VudCA9IGtleUlkc01hcC5maXJzdDsKLSAgICB1bnNpZ25l
ZCBpbmRleCA9IGtleUlkc01hcC5zZWNvbmQ7CisgICAgYXV0byBba2V5SWRDb3VudCwgaW5kZXhd
ID0gZXh0cmFjdEtleWlkc0xvY2F0aW9uRnJvbUNlbmNJbml0RGF0YShpbml0RGF0YSk7CiAKICAg
ICAvLyBDaGVjayBpZiBpbml0RGF0YSBpcyBhIHZhbGlkIENFTkMgaW5pdERhdGEuCiAgICAgaWYg
KCFrZXlJZENvdW50IHx8ICFpbmRleCkKICAgICAgICAgcmV0dXJuIGtleUlkczsKIAotICAgIGF1
dG8qIGRhdGEgPSBpbml0RGF0YS5kYXRhKCk7CisgICAgYXV0byBkYXRhID0gaW5pdERhdGEuYnl0
ZXMoKTsKIAogICAgIGF1dG8gb2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBh
dXRvIGtleUlkc0FycmF5ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwpAQCAtMjE4LDcgKzIxNiw3
IEBAIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBleHRyYWN0S2V5aWRzRnIKICAgICAvLyAia2lk
cyIKICAgICAvLyBBbiBhcnJheSBvZiBrZXkgSURzLiBFYWNoIGVsZW1lbnQgb2YgdGhlIGFycmF5
IGlzIHRoZSBiYXNlNjR1cmwgZW5jb2Rpbmcgb2YgdGhlIG9jdGV0IHNlcXVlbmNlIGNvbnRhaW5p
bmcgdGhlIGtleSBJRCB2YWx1ZS4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5SWRD
b3VudDsgaSsrKSB7Ci0gICAgICAgIGtleUlkc0FycmF5LT5wdXNoU3RyaW5nKGJhc2U2NFVSTEVu
Y29kZVRvU3RyaW5nKCZkYXRhW2luZGV4XSwgQ2xlYXJLZXk6OktleUlEU2l6ZUluQnl0ZXMpKTsK
KyAgICAgICAga2V5SWRzQXJyYXktPnB1c2hTdHJpbmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmco
ZGF0YS5zdWJzcGFuKGluZGV4LCBDbGVhcktleTo6S2V5SURTaXplSW5CeXRlcykpKTsKICAgICAg
ICAgaW5kZXggKz0gQ2xlYXJLZXk6OktleUlEU2l6ZUluQnl0ZXM7CiAgICAgfQogCkBAIC0yNDUs
NyArMjQzLDcgQEAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGV4dHJhY3RLZXlJZEZybwogICAg
IC8vIFRoZSBmb3JtYXQgaXMgYSBKU09OIG9iamVjdCBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcg
bWVtYmVyczoKICAgICAvLyAia2lkcyIKICAgICAvLyBBbiBhcnJheSBvZiBrZXkgSURzLiBFYWNo
IGVsZW1lbnQgb2YgdGhlIGFycmF5IGlzIHRoZSBiYXNlNjR1cmwgZW5jb2Rpbmcgb2YgdGhlIG9j
dGV0IHNlcXVlbmNlIGNvbnRhaW5pbmcgdGhlIGtleSBJRCB2YWx1ZS4KLSAgICBrZXlJZHNBcnJh
eS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhpbml0RGF0YS5kYXRhKCksIGlu
aXREYXRhLnNpemUoKSkpOworICAgIGtleUlkc0FycmF5LT5wdXNoU3RyaW5nKGJhc2U2NFVSTEVu
Y29kZVRvU3RyaW5nKGluaXREYXRhLmJ5dGVzKCkpKTsKIAogICAgIG9iamVjdC0+c2V0QXJyYXko
ImtpZHMiLCBXVEZNb3ZlKGtleUlkc0FycmF5KSk7CiAgICAgQ1N0cmluZyBqc29uRGF0YSA9IG9i
amVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgpOwpAQCAtNTc4LDkgKzU3Niw4IEBAIHZvaWQgQ0RN
SW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlbW92ZVMKIAogICAgIC8vIENvbnN0cnVjdCB0aGUg
S2V5U3RhdHVzVmVjdG9yIG9iamVjdCwgcmVwcmVzZW50aW5nIHJlbGVhc2VkIGtleXMsIGFuZCB0
aGUgbWVzc2FnZSBpbiB0aGUKICAgICAvLyAnbGljZW5zZSByZWxlYXNlJyBmb3JtYXQuCi0gICAg
S2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvciA9IG1fa2V5U3RvcmUuYWxsS2V5c0FzKENE
TUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpSZWxlYXNlZCk7Ci0gICAgUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gbWVzc2FnZTsKLSAgICB7CisgICAgYXV0byBrZXlTdGF0dXNWZWN0b3IgPSBtX2tl
eVN0b3JlLmFsbEtleXNBcyhDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6UmVsZWFzZWQp
OworICAgIGF1dG8gbWVzc2FnZSA9IFsmXXsKICAgICAgICAgLy8gQ29uc3RydWN0IEpTT04gdGhh
dCByZXByZXNlbnRzIHRoZSAnbGljZW5zZSByZWxlYXNlJyBmb3JtYXQsIGNyZWF0aW5nIGEgJ2tp
ZHMnIGFycmF5CiAgICAgICAgIC8vIG9mIGJhc2U2NFVSTC1lbmNvZGVkIGtleSBJRHMgZm9yIGFs
bCBrZXlzIHRoYXQgd2VyZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzZXNzaW9uLgogICAgICAgICBh
dXRvIHJvb3RPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwpAQCAtNTg4LDcgKzU4NSw3
IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlbW92ZVMKICAgICAgICAgICAg
IGF1dG8gYXJyYXkgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBmb3IgKGNv
bnN0IGF1dG8mIGtleSA6IG1fa2V5U3RvcmUpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoa2V5
LT5pZCgpLnNpemUoKSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOwot
ICAgICAgICAgICAgICAgIGFycmF5LT5wdXNoU3RyaW5nKGJhc2U2NFVSTEVuY29kZVRvU3RyaW5n
KGtleS0+aWQoKS5kYXRhKCksIGtleS0+aWQoKS5zaXplKCkpKTsKKyAgICAgICAgICAgICAgICBh
cnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhrZXktPmlkKCkpKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIHJvb3RPYmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RG
TW92ZShhcnJheSkpOwogICAgICAgICB9CkBAIC01OTYsMTEgKzU5MywxMSBAQCB2b2lkIENETUlu
c3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTCiAgICAgICAgIC8vIENvcHkgdGhlIEpTT04g
ZGF0YSBpbnRvIGEgU2hhcmVkQnVmZmVyIG9iamVjdC4KICAgICAgICAgU3RyaW5nIG1lc3NhZ2VT
dHJpbmcgPSByb290T2JqZWN0LT50b0pTT05TdHJpbmcoKTsKICAgICAgICAgQ1N0cmluZyBtZXNz
YWdlQ1N0cmluZyA9IG1lc3NhZ2VTdHJpbmcudXRmOCgpOwotICAgICAgICBtZXNzYWdlID0gU2hh
cmVkQnVmZmVyOjpjcmVhdGUobWVzc2FnZUNTdHJpbmcuZGF0YSgpLCBtZXNzYWdlQ1N0cmluZy5s
ZW5ndGgoKSk7Ci0gICAgfQorICAgICAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUobWVz
c2FnZUNTdHJpbmcuZGF0YSgpLCBtZXNzYWdlQ1N0cmluZy5sZW5ndGgoKSk7CisgICAgfSgpOwog
CiAgICAgbV9rZXlTdG9yZS5yZW1vdmVBbGxLZXlzKCk7Ci0gICAgZGlzcGF0Y2hDYWxsYmFjayhX
VEZNb3ZlKGtleVN0YXR1c1ZlY3RvciksIFJlZjxTaGFyZWRCdWZmZXI+KCptZXNzYWdlKSwgU3Vj
Y2Vzc1ZhbHVlOjpTdWNjZWVkZWQpOworICAgIGRpc3BhdGNoQ2FsbGJhY2soV1RGTW92ZShrZXlT
dGF0dXNWZWN0b3IpLCBXVEZNb3ZlKG1lc3NhZ2UpLCBTdWNjZXNzVmFsdWU6OlN1Y2NlZWRlZCk7
CiB9CiAKIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnN0b3JlUmVjb3JkT2ZLZXlV
c2FnZShjb25zdCBTdHJpbmcmKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJp
Yy9LZXllZERlY29kZXJHZW5lcmljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9nZW5lcmljL0tleWVkRGVjb2RlckdlbmVyaWMuY3BwCShyZXZpc2lvbiAyNzg4MDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL0tleWVkRGVjb2RlckdlbmVyaWMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFs
PFN0cmluZz4gcmVhZFN0cmluZygKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKICAg
ICBWZWN0b3I8dWludDhfdD4gYnVmZmVyKHNpemUudmFsdWUoKSk7Ci0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZUZpeGVkTGVuZ3RoRGF0YShidWZmZXIuZGF0YSgpLCBzaXplLnZhbHVlKCkpKQorICAg
IGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyKSkKICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKICAgICBhdXRvIHJlc3VsdCA9IFN0cmluZzo6ZnJvbVVURjgoYnVm
ZmVyLmRhdGEoKSwgc2l6ZS52YWx1ZSgpKTsKICAgICBpZiAocmVzdWx0LmlzTnVsbCgpKQpAQCAt
ODgsNyArODgsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8S2V5ZWREZWNvZGVyPiBLZXllZERlY29kCiAK
IEtleWVkRGVjb2RlckdlbmVyaWM6OktleWVkRGVjb2RlckdlbmVyaWMoY29uc3QgdWludDhfdCog
ZGF0YSwgc2l6ZV90IHNpemUpCiB7Ci0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNv
ZGVyKGRhdGEsIHNpemUpOworICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihT
cGFuIHsgZGF0YSwgc2l6ZSB9KTsKIAogICAgIG1fcm9vdERpY3Rpb25hcnkgPSBtYWtlVW5pcXVl
PERpY3Rpb25hcnk+KCk7CiAgICAgbV9kaWN0aW9uYXJ5U3RhY2suYXBwZW5kKG1fcm9vdERpY3Rp
b25hcnkuZ2V0KCkpOwpAQCAtMTE3LDcgKzExNyw3IEBAIEtleWVkRGVjb2RlckdlbmVyaWM6Oktl
eWVkRGVjb2RlckdlbmVyaWMKICAgICAgICAgICAgIGlmICghb2spCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyKCpzaXplKTsKLSAgICAg
ICAgICAgIG9rID0gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLmRhdGEoKSwg
KnNpemUpOworICAgICAgICAgICAgb2sgPSBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShi
dWZmZXIpOwogICAgICAgICAgICAgaWYgKCFvaykKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKS0+YWRkKCprZXksIFdURk1vdmUoYnVm
ZmVyKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL0tleWVkRW5jb2Rl
ckdlbmVyaWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVy
aWMvS2V5ZWRFbmNvZGVyR2VuZXJpYy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvS2V5ZWRFbmNvZGVyR2VuZXJpYy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDcgKzQwLDcgQEAgdm9pZCBLZXllZEVuY29kZXJHZW5lcmljOjplbmNvZGVT
dHJpbmcoYwogewogICAgIGF1dG8gdXRmOCA9IGtleS51dGY4KCk7CiAgICAgbV9lbmNvZGVyIDw8
IHV0ZjgubGVuZ3RoKCk7Ci0gICAgbV9lbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YSh1dGY4
LmRhdGFBc1VJbnQ4UHRyKCksIHV0ZjgubGVuZ3RoKCkpOworICAgIG1fZW5jb2Rlci5lbmNvZGVG
aXhlZExlbmd0aERhdGEodXRmOC5ieXRlcygpKTsKIH0KIAogdm9pZCBLZXllZEVuY29kZXJHZW5l
cmljOjplbmNvZGVCeXRlcyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgdWludDhfdCogYnl0ZXMs
IHNpemVfdCBzaXplKQpAQCAtNDgsNyArNDgsNyBAQCB2b2lkIEtleWVkRW5jb2RlckdlbmVyaWM6
OmVuY29kZUJ5dGVzKGNvCiAgICAgbV9lbmNvZGVyIDw8IFR5cGU6OkJ5dGVzOwogICAgIGVuY29k
ZVN0cmluZyhrZXkpOwogICAgIG1fZW5jb2RlciA8PCBzaXplOwotICAgIG1fZW5jb2Rlci5lbmNv
ZGVGaXhlZExlbmd0aERhdGEoYnl0ZXMsIHNpemUpOworICAgIG1fZW5jb2Rlci5lbmNvZGVGaXhl
ZExlbmd0aERhdGEoU3BhbiB7IGJ5dGVzLCBzaXplIH0pOwogfQogCiB2b2lkIEtleWVkRW5jb2Rl
ckdlbmVyaWM6OmVuY29kZUJvb2woY29uc3QgU3RyaW5nJiBrZXksIGJvb2wgdmFsdWUpCkBAIC0x
NDEsNyArMTQxLDcgQEAgdm9pZCBLZXllZEVuY29kZXJHZW5lcmljOjplbmRBcnJheSgpCiAKIFJl
ZlB0cjxTaGFyZWRCdWZmZXI+IEtleWVkRW5jb2RlckdlbmVyaWM6OmZpbmlzaEVuY29kaW5nKCkK
IHsKLSAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUobV9lbmNvZGVyLmJ1ZmZlcigpLCBt
X2VuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUo
bV9lbmNvZGVyLmJ1ZmZlcigpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTW9kZWwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Nb2RlbC5oCShyZXZpc2lvbiAyNzg4MDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Nb2RlbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Niw3ICs1Niw3IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIE1vZGVs
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IHN0YXRp
Y19jYXN0PHNpemVfdD4obV9kYXRhLT5zaXplKCkpOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSwgMSk7CisgICAgZW5jb2Rl
ci5lbmNvZGVGaXhlZExlbmd0aERhdGEobV9kYXRhLT5ieXRlcygpLCAxKTsKIH0KIAogdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KQEAgLTc0LDcgKzc0LDcgQEAgUmVmUHRyPE1vZGVsPiBNb2RlbDo6
ZGVjb2RlKERlY29kZXImIGRlYwogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CiAgICAgZGF0
YS5ncm93KCpsZW5ndGgpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEo
ZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAxKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4
ZWRMZW5ndGhEYXRhKGRhdGEsIDEpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJl
dHVybiBNb2RlbDo6Y3JlYXRlKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoZGF0YSkpKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIu
aAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGl4ZWxCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCB0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPiB2b2lkIFBpeGVsQnVmZmVyCiAKICAgICBlbmNvZGVyIDw8IG1fZm9ybWF0
OwogICAgIGVuY29kZXIgPDwgbV9zaXplOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPmJ5dGVMZW5ndGgoKSwgMSk7CisgICAgZW5jb2Rl
ci5lbmNvZGVGaXhlZExlbmd0aERhdGEobV9kYXRhLT5ieXRlcygpLCAxKTsKIH0KIAogdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4gc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gUGl4ZWxCdWZmZXI6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQpAQCAtMTEzLDcgKzExMyw3IEBAIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0ZDo6b3B0aW9uYWw8UGkKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0
aERhdGEocmVzdWx0LT5tX2RhdGEtPmRhdGEoKSwgcmVzdWx0LT5tX2RhdGEtPmJ5dGVMZW5ndGgo
KSwgMSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZXN1bHQtPm1f
ZGF0YS0+d3JpdGFibGVCeXRlcygpLCAxKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
IAogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2Jq
Qy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAKICNpbXBvcnQgPHd0Zi9GaWxlU3lzdGVtLmg+CiAj
aW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgogI2ltcG9ydCA8d3RmL0xvZ2dlckhlbHBlci5oPgor
I2ltcG9ydCA8d3RmL2NvY29hL1NwYW5Db2NvYS5oPgogI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3Rv
ckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4KICNpbXBvcnQgPHd0Zi90ZXh0
L1N0cmluZ0hhc2guaD4KQEAgLTcxNSw3ICs3MTYsNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lv
bkZhaXJQbGF5U3RyZWFtaW5nCiAgICAgICAgIGlkZW50aWZpZXIgPSBhZG9wdE5TKFtbTlNTdHJp
bmcgYWxsb2NdIGluaXRXaXRoRGF0YTppbml0RGF0YS0+Y3JlYXRlTlNEYXRhKCkuZ2V0KCkgZW5j
b2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddKTsKICNpZiBIQVZFKEZBSVJQTEFZU1RSRUFNSU5H
X0NFTkNfSU5JVERBVEEpCiAgICAgZWxzZSBpZiAoaW5pdERhdGFUeXBlID09IEluaXREYXRhUmVn
aXN0cnk6OmNlbmNOYW1lKCkpIHsKLSAgICAgICAgYXV0byBwc3NoU3RyaW5nID0gYmFzZTY0RW5j
b2RlVG9TdHJpbmcoaW5pdERhdGEtPmRhdGEoKSwgaW5pdERhdGEtPnNpemUoKSk7CisgICAgICAg
IGF1dG8gcHNzaFN0cmluZyA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGluaXREYXRhLT5ieXRlcygp
KTsKICAgICAgICAgaW5pdGlhbGl6YXRpb25EYXRhID0gW05TSlNPTlNlcmlhbGl6YXRpb24gZGF0
YVdpdGhKU09OT2JqZWN0OkB7IEAicHNzaCI6IChOU1N0cmluZyopcHNzaFN0cmluZyB9IG9wdGlv
bnM6TlNKU09OV3JpdGluZ1ByZXR0eVByaW50ZWQgZXJyb3I6bmlsXTsKICAgICB9CiAjZW5kaWYK
QEAgLTExOTEsMTIgKzExOTIsMTAgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0
cmVhbWluZwogICAgICAgICB9CiAKICAgICAgICAgYXV0byByZXF1ZXN0SlNPTiA9IEpTT046OkFy
cmF5OjpjcmVhdGUoKTsKLSAgICAgICAgZm9yIChhdXRvJiByZXF1ZXN0RGF0YSA6IHJlcXVlc3Rz
RGF0YSkgeworICAgICAgICBmb3IgKGF1dG8mIFtrZXlJRCwgcGF5bG9hZF0gOiByZXF1ZXN0c0Rh
dGEpIHsKICAgICAgICAgICAgIGF1dG8gZW50cnkgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwot
ICAgICAgICAgICAgYXV0byYga2V5SUQgPSByZXF1ZXN0RGF0YS5maXJzdDsKLSAgICAgICAgICAg
IGF1dG8mIHBheWxvYWQgPSByZXF1ZXN0RGF0YS5zZWNvbmQ7Ci0gICAgICAgICAgICBlbnRyeS0+
c2V0U3RyaW5nKCJrZXlJRCIsIGJhc2U2NEVuY29kZVRvU3RyaW5nKGtleUlELT5kYXRhKCksIGtl
eUlELT5zaXplKCkpKTsKLSAgICAgICAgICAgIGVudHJ5LT5zZXRTdHJpbmcoInBheWxvYWQiLCBi
YXNlNjRFbmNvZGVUb1N0cmluZyhwYXlsb2FkLmdldCgpLmJ5dGVzLCBwYXlsb2FkLmdldCgpLmxl
bmd0aCkpOworICAgICAgICAgICAgZW50cnktPnNldFN0cmluZygia2V5SUQiLCBiYXNlNjRFbmNv
ZGVUb1N0cmluZyhrZXlJRC0+Ynl0ZXMoKSkpOworICAgICAgICAgICAgZW50cnktPnNldFN0cmlu
ZygicGF5bG9hZCIsIGJhc2U2NEVuY29kZVRvU3RyaW5nKGFzQnl0ZXMocGF5bG9hZC5nZXQoKSkp
KTsKICAgICAgICAgICAgIHJlcXVlc3RKU09OLT5wdXNoT2JqZWN0KFdURk1vdmUoZW50cnkpKTsK
ICAgICAgICAgfQogICAgICAgICBhdXRvIHJlcXVlc3RCdWZmZXIgPSB1dGY4QnVmZmVyKHJlcXVl
c3RKU09OLT50b0pTT05TdHJpbmcoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzMiw3ICsxMzIsNyBAQCBTdHJpbmcgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0
YVVSCiAgICAgaWYgKGVuY29kZWRJbWFnZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAiZGF0
YTosIjsKIAotICAgIHJldHVybiBtYWtlU3RyaW5nKCJkYXRhOiIsIG1pbWVUeXBlLCAiO2Jhc2U2
NCwiLCBiYXNlNjRFbmNvZGVkKGVuY29kZWRJbWFnZS5kYXRhKCksIGVuY29kZWRJbWFnZS5zaXpl
KCkpKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygiZGF0YToiLCBtaW1lVHlwZSwgIjtiYXNlNjQs
IiwgYmFzZTY0RW5jb2RlZChlbmNvZGVkSW1hZ2UpKTsKIH0KIAogVmVjdG9yPHVpbnQ4X3Q+IElt
YWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3Rk
OjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0
Zm9ybURhdGEuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwMCw3ICsxMDAsNyBAQCBzdGF0aWMgU3RyaW5nIGNyZWF0ZVVuaXF1ZUZvbnROYW1lKCkK
ICAgICBHVUlEIGZvbnRVdWlkOwogICAgIENvQ3JlYXRlR3VpZCgmZm9udFV1aWQpOwogCi0gICAg
YXV0byBmb250TmFtZSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KCZmb250VXVpZCksIHNpemVvZihmb250VXVpZCkpOworICAgIGF1dG8gZm9udE5hbWUgPSBi
YXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgJmZvbnRVdWlkLCAxIH0pOwogICAgIEFTU0VSVChm
b250TmFtZS5sZW5ndGgoKSA8IExGX0ZBQ0VTSVpFKTsKICAgICByZXR1cm4gZm9udE5hbWU7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBs
YXRmb3JtRGF0YUNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0
b21QbGF0Zm9ybURhdGFDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAg
c3RhdGljIFN0cmluZyBjcmVhdGVVbmlxdWVGb250TmFtZSgpCiAgICAgR1VJRCBmb250VXVpZDsK
ICAgICBDb0NyZWF0ZUd1aWQoJmZvbnRVdWlkKTsKIAotICAgIGF1dG8gZm9udE5hbWUgPSBiYXNl
NjRFbmNvZGVUb1N0cmluZyhyZWludGVycHJldF9jYXN0PGNoYXIqPigmZm9udFV1aWQpLCBzaXpl
b2YoZm9udFV1aWQpKTsKKyAgICBhdXRvIGZvbnROYW1lID0gYmFzZTY0RW5jb2RlVG9TdHJpbmco
U3BhbiB7ICZmb250VXVpZCwgMSB9KTsKICAgICBBU1NFUlQoZm9udE5hbWUubGVuZ3RoKCkgPCBM
Rl9GQUNFU0laRSk7CiAgICAgcmV0dXJuIGZvbnROYW1lOwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU1NMS2V5R2VuZXJhdG9yTWFjLm1tCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU1NMS2V5R2VuZXJhdG9yTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksNyArMjE5LDcgQEAgc3RhdGljIFN0cmluZyBzaWdu
ZWRQdWJsaWNLZXlBbmRDaGFsbGVuZwogICAgIGlmIChTZWNBc24xRW5jb2RlSXRlbShjb2Rlciwg
JnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZSwgc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdl
VGVtcGxhdGUsICZlbmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlKSAhPSBub0VycikK
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3Ry
aW5nKGVuY29kZWRTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2UuRGF0YSwgZW5jb2RlZFNpZ25l
ZFB1YmxpY0tleUFuZENoYWxsZW5nZS5MZW5ndGgpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVU
b1N0cmluZyhTcGFuIHsgZW5jb2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZS5EYXRhLCBl
bmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlLkxlbmd0aCB9KTsKIH0KIAogQUxMT1df
REVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNv
dXJjZUNhcGFiaWxpdGllcy5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTExNCwxNiArMTE0LDE2IEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPgogdm9pZCBDYXBhYmlsaXR5VmFsdWVPclJhbmdlOjplbmNvZGUoRW5jb2RlciYg
ZW5jb2RlcikgY29uc3QKIHsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmbV9taW5PclZhbHVlKSwgc2l6ZW9mKFZhbHVl
VW5pb24pLCBhbGlnbm9mKFZhbHVlVW5pb24pKTsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmbV9tYXgpLCBzaXplb2Yo
VmFsdWVVbmlvbiksIGFsaWdub2YoVmFsdWVVbmlvbikpOworICAgIGVuY29kZXIuZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKFNwYW4geyAmbV9taW5PclZhbHVlLCAxIH0sIGFsaWdub2YoVmFsdWVVbmlv
bikpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmbV9tYXgsIDEg
fSwgYWxpZ25vZihWYWx1ZVVuaW9uKSk7CiAgICAgZW5jb2RlciA8PCBtX3R5cGU7CiB9CiAKIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+CiBib29sIENhcGFiaWxpdHlWYWx1ZU9yUmFuZ2U6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyLCBDYXBhYmlsaXR5VmFsdWVPclJhbmdlJiB2YWx1ZU9yUmFuZ2Up
CiB7Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KCZ2YWx1ZU9yUmFuZ2UubV9taW5PclZhbHVlKSwgc2l6ZW9mKFZhbHVl
VW5pb24pLCBhbGlnbm9mKFZhbHVlVW5pb24pKQotICAgICAgICAmJiBkZWNvZGVyLmRlY29kZUZp
eGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWVPclJhbmdlLm1f
bWF4KSwgc2l6ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZhbHVlVW5pb24pKQorICAgIHJldHVy
biBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJnZhbHVlT3JSYW5nZS5tX21p
bk9yVmFsdWUsIDEgfSwgYWxpZ25vZihWYWx1ZVVuaW9uKSkKKyAgICAgICAgJiYgZGVjb2Rlci5k
ZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZ2YWx1ZU9yUmFuZ2UubV9tYXgsIDEgfSwgYWxp
Z25vZihWYWx1ZVVuaW9uKSkKICAgICAgICAgJiYgZGVjb2Rlci5kZWNvZGUodmFsdWVPclJhbmdl
Lm1fdHlwZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9S
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDEzICsx
MzksMTMgQEAgc3RhdGljIHZvaWQgYWRkU3RyaW5nVG9TSEExKFNIQTEmIHNoYTEsIAogCiAgICAg
aWYgKHN0cmluZy5pczhCaXQoKSAmJiBzdHJpbmcuaXNBbGxBU0NJSSgpKSB7CiAgICAgICAgIGNv
bnN0IHVpbnQ4X3QgbnVsbEJ5dGUgPSAwOwotICAgICAgICBzaGExLmFkZEJ5dGVzKHN0cmluZy5j
aGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAgICAgICBzaGExLmFkZEJ5dGVzKCZu
dWxsQnl0ZSwgMSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IHN0cmluZy5jaGFyYWN0
ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkgfSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7
ICZudWxsQnl0ZSwgMSB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGF1dG8gdXRm
OCA9IHN0cmluZy51dGY4KCk7Ci0gICAgc2hhMS5hZGRCeXRlcyh1dGY4LmRhdGFBc1VJbnQ4UHRy
KCksIHV0ZjgubGVuZ3RoKCkgKyAxKTsgLy8gSW5jbHVkZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUu
CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgdXRmOC5kYXRhQXNVSW50OFB0cigpLCB1dGY4Lmxl
bmd0aCgpICsgMSB9KTsgLy8gSW5jbHVkZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUuCiB9CiAKIFN0
cmluZyBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpoYXNoU3RyaW5nV2l0aFNhbHQoY29uc3Qg
U3RyaW5nJiBpZCwgY29uc3QgU3RyaW5nJiBoYXNoU2FsdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3BwCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxCYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsOCArOTcsOSBAQCBib29sIENyZWRlbnRpYWxCYXNl
Ojpjb21wYXJlKGNvbnN0IENyZWRlCiAKIFN0cmluZyBDcmVkZW50aWFsQmFzZTo6c2VyaWFsaXph
dGlvbkZvckJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcigpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6
IEFkZCBtYWtlU3RyaW5nIHZhcmlhbnQgdGhhdCBjcmVhdGVzIGEgdXRmOCBidWZmZXIgZGlyZWN0
bHkuCiAgICAgYXV0byBjcmVkZW50aWFsU3RyaW5nRGF0YSA9IG1ha2VTdHJpbmcobV91c2VyLCAn
OicsIG1fcGFzc3dvcmQpLnV0ZjgoKTsKLSAgICByZXR1cm4gbWFrZVN0cmluZygiQmFzaWMgIiwg
YmFzZTY0RW5jb2RlZChjcmVkZW50aWFsU3RyaW5nRGF0YSkpOworICAgIHJldHVybiBtYWtlU3Ry
aW5nKCJCYXNpYyAiLCBiYXNlNjRFbmNvZGVkKGNyZWRlbnRpYWxTdHJpbmdEYXRhLmJ5dGVzKCkp
KTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0
aWZpY2F0ZUluZm9DRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHAJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ2VydGlmaWNhdGVJbmZvQ0ZO
ZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNyArMjEwLDcgQEAgc3RhdGljIHZvaWQgZW5j
b2RlQ0ZEYXRhKEVuY29kZXImIGVuY29kZQogICAgIGNvbnN0IHVpbnQ4X3QqIGJ5dGVQdHIgPSBD
RkRhdGFHZXRCeXRlUHRyKGRhdGEpOwogCiAgICAgZW5jb2RlciA8PCBsZW5ndGg7Ci0gICAgZW5j
b2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYnl0ZVB0ciwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihs
ZW5ndGgpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgYnl0ZVB0
ciwgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpIH0pOwogfQogCiBzdGF0aWMgc3RkOjpvcHRp
b25hbDxSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4gZGVjb2RlQ0ZEYXRhKERlY29kZXImIGRlY29kZXIp
CkBAIC0yMjUsNyArMjI1LDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0YWluUHRyPENGRGF0
YVJlZgogICAgIGlmICghcG9pbnRlcikKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAot
ICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0ZShudWxscHRyLCBwb2ludGVyLCAqc2l6ZSkp
OworICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0ZShudWxscHRyLCByZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPihwb2ludGVyKSwgKnNpemUpKTsKIH0KIAogI2lmIEhBVkUoU0VD
X1RSVVNUX1NFUklBTElaQVRJT04pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybENhY2hlRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ2FjaGVFbnRyeS5jcHAJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ2FjaGVFbnRy
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMiw3ICsyMTIsNyBAQCB2b2lkIEN1cmxDYWNoZUVu
dHJ5OjpkaWRGaW5pc2hMb2FkaW5nKCkKIHZvaWQgQ3VybENhY2hlRW50cnk6OmdlbmVyYXRlQmFz
ZUZpbGVuYW1lKGNvbnN0IENTdHJpbmcmIHVybCkKIHsKICAgICBTSEExIHNoYTE7Ci0gICAgc2hh
MS5hZGRCeXRlcyh1cmwuZGF0YUFzVUludDhQdHIoKSwgdXJsLmxlbmd0aCgpKTsKKyAgICBzaGEx
LmFkZEJ5dGVzKHVybC5ieXRlcygpKTsKIAogICAgIFNIQTE6OkRpZ2VzdCBzdW07CiAgICAgc2hh
MS5jb21wdXRlSGFzaChzdW0pOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL0NlcnRpZmljYXRlSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9DZXJ0aWZpY2F0ZUluZm8uaAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0NlcnRpZmljYXRlSW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHRlbXBsYXRlPD4gc3RydWN0IENvZGVy
PEdSZWZQdHI8R0J5dGVBcnIKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciAmZW5jb2Rl
ciwgY29uc3QgR1JlZlB0cjxHQnl0ZUFycmF5PiYgYnl0ZUFycmF5KQogICAgIHsKICAgICAgICAg
ZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYnl0ZUFycmF5LT5sZW4pOwotICAgICAg
ICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShieXRlQXJyYXktPmRhdGEsIGJ5dGVBcnJh
eS0+bGVuKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IGJ5
dGVBcnJheS0+ZGF0YSwgYnl0ZUFycmF5LT5sZW4gfSk7CiAgICAgfQogCiAgICAgc3RhdGljIHN0
ZDo6b3B0aW9uYWw8R1JlZlB0cjxHQnl0ZUFycmF5Pj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIp
CkBAIC04Nyw3ICs4Nyw3IEBAIHRlbXBsYXRlPD4gc3RydWN0IENvZGVyPEdSZWZQdHI8R0J5dGVB
cnIKIAogICAgICAgICBHUmVmUHRyPEdCeXRlQXJyYXk+IGJ5dGVBcnJheSA9IGFkb3B0R1JlZihn
X2J5dGVfYXJyYXlfc2l6ZWRfbmV3KCpzaXplKSk7CiAgICAgICAgIGdfYnl0ZV9hcnJheV9zZXRf
c2l6ZShieXRlQXJyYXkuZ2V0KCksICpzaXplKTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZUZpeGVkTGVuZ3RoRGF0YShieXRlQXJyYXktPmRhdGEsICpzaXplKSkKKyAgICAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgYnl0ZUFycmF5LT5kYXRhLCAqc2l6
ZSB9KSkKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIHJldHVybiBi
eXRlQXJyYXk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0
ZVN0YXRlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3Fs
L1NRTGl0ZVN0YXRlbWVudC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3
ICs4NSw3IEBAIGJvb2wgU1FMaXRlU3RhdGVtZW50OjpleGVjdXRlQ29tbWFuZCgpCiAgICAgcmV0
dXJuIHN0ZXAoKSA9PSBTUUxJVEVfRE9ORTsKIH0KIAotaW50IFNRTGl0ZVN0YXRlbWVudDo6Ymlu
ZEJsb2IoaW50IGluZGV4LCBTcGFuPGNvbnN0IHVpbnQ4X3Q+IGJsb2IpCitpbnQgU1FMaXRlU3Rh
dGVtZW50OjpiaW5kQmxvYihpbnQgaW5kZXgsIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBibG9iKQog
ewogICAgIEFTU0VSVChpbmRleCA+IDApOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oaW5kZXgpIDw9IGJpbmRQYXJhbWV0ZXJDb3VudCgpKTsKQEAgLTk1LDYgKzk1LDExIEBAIGlu
dCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwKICAgICByZXR1cm4gc3FsaXRl
M19iaW5kX2Jsb2IobV9zdGF0ZW1lbnQsIGluZGV4LCBibG9iLmRhdGEoKSwgYmxvYi5zaXplKCks
IFNRTElURV9UUkFOU0lFTlQpOwogfQogCitpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kQmxvYihp
bnQgaW5kZXgsIFNwYW48Y29uc3QgdWludDhfdD4gYmxvYikKK3sKKyAgICByZXR1cm4gYmluZEJs
b2IoaW5kZXgsIGFzQnl0ZXMoYmxvYikpOworfQorCiBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5k
QmxvYihpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKICAgICAvLyBTdHJpbmc6OmNo
YXJhY3RlcnMoKSByZXR1cm5zIDAgZm9yIHRoZSBlbXB0eSBzdHJpbmcsIHdoaWNoIFNRTGl0ZQpA
QCAtMTA3LDcgKzExMiw3IEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRl
eCwKICAgICBlbHNlCiAgICAgICAgIGNoYXJhY3RlcnMgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7
CiAKLSAgICByZXR1cm4gYmluZEJsb2IoaW5kZXgsIFNwYW4geyByZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQ4X3QqPihjaGFyYWN0ZXJzKSwgdGV4dC5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcikg
fSk7CisgICAgcmV0dXJuIGJpbmRCbG9iKGluZGV4LCBTcGFuIHsgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBzdGQ6OmJ5dGUqPihjaGFyYWN0ZXJzKSwgdGV4dC5sZW5ndGgoKSAqIHNpemVvZihVQ2hh
cikgfSk7CiB9CiAKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRUZXh0KGludCBpbmRleCwgU3Ry
aW5nVmlldyB0ZXh0KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0
YXRlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxp
dGVTdGF0ZW1lbnQuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBA
IHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB+U1FMaXRlU3RhdGVtZW50KCk7CiAgICAgV0VC
Q09SRV9FWFBPUlQgU1FMaXRlU3RhdGVtZW50KFNRTGl0ZVN0YXRlbWVudCYmKTsKICAgICAKKyAg
ICBXRUJDT1JFX0VYUE9SVCBpbnQgYmluZEJsb2IoaW50IGluZGV4LCBTcGFuPGNvbnN0IHN0ZDo6
Ynl0ZT4pOwogICAgIFdFQkNPUkVfRVhQT1JUIGludCBiaW5kQmxvYihpbnQgaW5kZXgsIFNwYW48
Y29uc3QgdWludDhfdD4pOwogICAgIFdFQkNPUkVfRVhQT1JUIGludCBiaW5kQmxvYihpbnQgaW5k
ZXgsIGNvbnN0IFN0cmluZyYpOwogICAgIFdFQkNPUkVfRVhQT1JUIGludCBiaW5kVGV4dChpbnQg
aW5kZXgsIFN0cmluZ1ZpZXcpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9R
dW90ZWRQcmludGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvUXVvdGVkUHJpbnRhYmxlLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NSwxMiArNTUsNyBAQCBzdGF0aWMgc2l6ZV90IGxlbmd0aE9mTGluZUVuZGluZ0F0SW5kZXgo
CiAgICAgcmV0dXJuIDA7CiB9CiAKLVZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNv
ZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKLXsKLSAgICByZXR1cm4gcXVvdGVkUHJp
bnRhYmxlRW5jb2RlKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpKTsKLX0KLQotVmVjdG9yPHVp
bnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90
IGlucHV0TGVuZ3RoKQorc3RhdGljIFZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNv
ZGUoY29uc3QgdWludDhfdCogaW5wdXQsIHNpemVfdCBpbnB1dExlbmd0aCkKIHsKICAgICBWZWN0
b3I8dWludDhfdD4gb3V0OwogICAgIG91dC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGlucHV0TGVu
Z3RoKTsKQEAgLTExNiwxMiArMTExLDEyIEBAIFZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFi
bGVFbmNvZGUoY28KICAgICByZXR1cm4gb3V0OwogfQogCi1WZWN0b3I8dWludDhfdD4gcXVvdGVk
UHJpbnRhYmxlRGVjb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQpCitWZWN0b3I8dWlu
dDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCkK
IHsKLSAgICByZXR1cm4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGlucHV0LmRhdGEoKSwgaW5wdXQu
c2l6ZSgpKTsKKyAgICByZXR1cm4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KGlucHV0LmRhdGEoKSksIGlucHV0LnNpemUoKSk7CiB9CiAKLVZl
Y3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgdWludDhfdCogZGF0YSwg
c2l6ZV90IGRhdGFMZW5ndGgpCitzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJs
ZURlY29kZShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCkKIHsKICAgICBW
ZWN0b3I8dWludDhfdD4gb3V0OwogICAgIGlmICghZGF0YUxlbmd0aCkKQEAgLTE1Niw0ICsxNTEs
OSBAQCBWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvCiAgICAgcmV0dXJu
IG91dDsKIH0KIAorVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShTcGFuPGNv
bnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCit7CisgICAgcmV0dXJuIHF1b3RlZFByaW50YWJsZURlY29k
ZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5z
aXplKCkpOworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3Rl
ZFByaW50YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
UXVvdGVkUHJpbnRhYmxlLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvUXVvdGVkUHJpbnRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEzICsz
MSwxMSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1
ZGUgPHd0Zi9TcGFuLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVmVjdG9yPHVpbnQ4X3Q+
IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mKTsKLVZlY3Rvcjx1
aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNvZGUoY29uc3QgdWludDhfdCosIHNpemVfdCk7Ci0K
LVZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+Jik7Ci1WZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0IHVpbnQ4
X3QqLCBzaXplX3QpOworVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShTcGFu
PGNvbnN0IHN0ZDo6Ynl0ZT4pOworVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29k
ZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCShyZXZp
c2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MSw3ICsyNTEsNyBAQCBzdGQ6Om9wdGlvbmFsPFBh
c3RlYm9hcmRDdXN0b21EYXRhPiBQYXN0CiAgICAgICAgIGlmIChIQU5ETEUgY2JEYXRhID0gOjpH
ZXRDbGlwYm9hcmREYXRhKEN1c3RvbURhdGFDbGlwYm9hcmRGb3JtYXQpKSB7CiAgICAgICAgICAg
ICBzaXplX3Qgc2l6ZSA9IEdsb2JhbFNpemUoY2JEYXRhKTsKICAgICAgICAgICAgIGF1dG8gZGF0
YSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihHbG9iYWxMb2NrKGNiRGF0YSkpOwotICAgICAgICAg
ICAgYXV0byBjdXN0b21EYXRhID0gUGFzdGVib2FyZEN1c3RvbURhdGE6OmZyb21QZXJzaXN0ZW5j
ZURlY29kZXIoe2RhdGEsIHNpemV9KTsKKyAgICAgICAgICAgIGF1dG8gY3VzdG9tRGF0YSA9IFBh
c3RlYm9hcmRDdXN0b21EYXRhOjpmcm9tUGVyc2lzdGVuY2VEZWNvZGVyKFNwYW4geyBkYXRhLCBz
aXplIH0pOwogCiAgICAgICAgICAgICBHbG9iYWxVbmxvY2soY2JEYXRhKTsKICAgICAgICAgICAg
IDo6Q2xvc2VDbGlwYm9hcmQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2Vydmlj
ZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVy
L1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU5LDEwICs0NTks
MTAgQEAgYm9vbCBSZWdpc3RyYXRpb25EYXRhYmFzZTo6ZG9QdXNoQ2hhbmdlcwogICAgICAgICAg
ICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCg2LCB1cGRhdGVWaWFDYWNoZVRvU3RyaW5n
KGRhdGEucmVnaXN0cmF0aW9uLnVwZGF0ZVZpYUNhY2hlKSkgIT0gU1FMSVRFX09LCiAgICAgICAg
ICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDcsIGRhdGEuc2NyaXB0VVJMLnN0cmlu
ZygpKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRl
eHQoOCwgd29ya2VyVHlwZVRvU3RyaW5nKGRhdGEud29ya2VyVHlwZSkpICE9IFNRTElURV9PSwot
ICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kQmxvYig5LCBTcGFuIHsgY3NwRW5j
b2Rlci5idWZmZXIoKSwgY3NwRW5jb2Rlci5idWZmZXJTaXplKCkgfSkgIT0gU1FMSVRFX09LCisg
ICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDksIGNzcEVuY29kZXIuYnVm
ZmVyKCkpICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5k
VGV4dCgxMCwgZGF0YS5yZWZlcnJlclBvbGljeSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8
fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDExLCBTcGFuIHsgc2NyaXB0UmVzb3VyY2VNYXBF
bmNvZGVyLmJ1ZmZlcigpLCBzY3JpcHRSZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVyU2l6ZSgpIH0p
ICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kQmxvYigx
MiwgU3BhbiB7IGNlcnRpZmljYXRlSW5mb0VuY29kZXIuYnVmZmVyKCksIGNlcnRpZmljYXRlSW5m
b0VuY29kZXIuYnVmZmVyU2l6ZSgpIH0pICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5z
ZXJ0U3RhdGVtZW50LT5iaW5kQmxvYigxMSwgc2NyaXB0UmVzb3VyY2VNYXBFbmNvZGVyLmJ1ZmZl
cigpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJs
b2IoMTIsIGNlcnRpZmljYXRlSW5mb0VuY29kZXIuYnVmZmVyKCkpICE9IFNRTElURV9PSwogICAg
ICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAg
ICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIsICJGYWlsZWQgdG8gc3Rv
cmUgcmVnaXN0cmF0aW9uIGRhdGEgaW50byByZWNvcmRzIHRhYmxlICglaSkgLSAlcyIsIG1fZGF0
YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC01MTcsNyArNTE3LDcgQEAgU3RyaW5nIFJlZ2lzdHJhdGlv
bkRhdGFiYXNlOjppbXBvcnRSZWNvcgogICAgICAgICBzdGQ6Om9wdGlvbmFsPENvbnRlbnRTZWN1
cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycz4gY29udGVudFNlY3VyaXR5UG9saWN5OwogICAgICAg
ICBhdXRvIGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGFTcGFuID0gc3FsLT5jb2x1bW5CbG9iQXNT
cGFuKDgpOwogICAgICAgICBpZiAoY29udGVudFNlY3VyaXR5UG9saWN5RGF0YVNwYW4uc2l6ZSgp
KSB7Ci0gICAgICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGNzcERlY29kZXIoY29u
dGVudFNlY3VyaXR5UG9saWN5RGF0YVNwYW4uZGF0YSgpLCBjb250ZW50U2VjdXJpdHlQb2xpY3lE
YXRhU3Bhbi5zaXplKCkpOworICAgICAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBj
c3BEZWNvZGVyIHsgY29udGVudFNlY3VyaXR5UG9saWN5RGF0YVNwYW4gfTsKICAgICAgICAgICAg
IGNzcERlY29kZXIgPj4gY29udGVudFNlY3VyaXR5UG9saWN5OwogICAgICAgICAgICAgaWYgKCFj
b250ZW50U2VjdXJpdHlQb2xpY3kpIHsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJP
UihTZXJ2aWNlV29ya2VyLCAiUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yZHM6IEZh
aWxlZCB0byBkZWNvZGUgY29udGVudFNlY3VyaXR5UG9saWN5Iik7CkBAIC01MzAsNyArNTMwLDcg
QEAgU3RyaW5nIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcgogICAgICAgICBIYXNo
TWFwPFVSTCwgU2VydmljZVdvcmtlckNvbnRleHREYXRhOjpJbXBvcnRlZFNjcmlwdD4gc2NyaXB0
UmVzb3VyY2VNYXA7CiAgICAgICAgIGF1dG8gc2NyaXB0UmVzb3VyY2VNYXBEYXRhU3BhbiA9IHNx
bC0+Y29sdW1uQmxvYkFzU3BhbigxMCk7CiAgICAgICAgIGlmIChzY3JpcHRSZXNvdXJjZU1hcERh
dGFTcGFuLnNpemUoKSkgewotICAgICAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBz
Y3JpcHRSZXNvdXJjZU1hcERlY29kZXIoc2NyaXB0UmVzb3VyY2VNYXBEYXRhU3Bhbi5kYXRhKCks
IHNjcmlwdFJlc291cmNlTWFwRGF0YVNwYW4uc2l6ZSgpKTsKKyAgICAgICAgICAgIFdURjo6UGVy
c2lzdGVuY2U6OkRlY29kZXIgc2NyaXB0UmVzb3VyY2VNYXBEZWNvZGVyIHsgc2NyaXB0UmVzb3Vy
Y2VNYXBEYXRhU3BhbiB9OwogICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxIYXNoTWFwPFVSTCwg
SW1wb3J0ZWRTY3JpcHRBdHRyaWJ1dGVzPj4gc2NyaXB0UmVzb3VyY2VNYXBXaXRob3V0U2NyaXB0
czsKICAgICAgICAgICAgIHNjcmlwdFJlc291cmNlTWFwRGVjb2RlciA+PiBzY3JpcHRSZXNvdXJj
ZU1hcFdpdGhvdXRTY3JpcHRzOwogICAgICAgICAgICAgaWYgKCFzY3JpcHRSZXNvdXJjZU1hcFdp
dGhvdXRTY3JpcHRzKSB7CkBAIC01NDMsNyArNTQzLDcgQEAgU3RyaW5nIFJlZ2lzdHJhdGlvbkRh
dGFiYXNlOjppbXBvcnRSZWNvcgogICAgICAgICBhdXRvIGNlcnRpZmljYXRlSW5mb0RhdGFTcGFu
ID0gc3FsLT5jb2x1bW5CbG9iQXNTcGFuKDExKTsKICAgICAgICAgc3RkOjpvcHRpb25hbDxDZXJ0
aWZpY2F0ZUluZm8+IGNlcnRpZmljYXRlSW5mbzsKIAotICAgICAgICBXVEY6OlBlcnNpc3RlbmNl
OjpEZWNvZGVyIGNlcnRpZmljYXRlSW5mb0RlY29kZXIoY2VydGlmaWNhdGVJbmZvRGF0YVNwYW4u
ZGF0YSgpLCBjZXJ0aWZpY2F0ZUluZm9EYXRhU3Bhbi5zaXplKCkpOworICAgICAgICBXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyIGNlcnRpZmljYXRlSW5mb0RlY29kZXIgeyBjZXJ0aWZpY2F0ZUlu
Zm9EYXRhU3BhbiB9OwogICAgICAgICBjZXJ0aWZpY2F0ZUluZm9EZWNvZGVyID4+IGNlcnRpZmlj
YXRlSW5mbzsKICAgICAgICAgaWYgKCFjZXJ0aWZpY2F0ZUluZm8pIHsKICAgICAgICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIsICJSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1w
b3J0UmVjb3JkczogRmFpbGVkIHRvIGRlY29kZSBjZXJ0aWZpY2F0ZUluZm8iKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTY3JpcHRTdG9yYWdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2Ny
aXB0U3RvcmFnZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvc2VydmljZS9zZXJ2ZXIvU1dTY3JpcHRTdG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTYsNyArNTYsNyBAQCBTdHJpbmcgU1dTY3JpcHRTdG9yYWdlOjpzaGEySGFzaChjb25zdCBTCiAg
ICAgYXV0byBpbnB1dFV0ZjggPSBpbnB1dC51dGY4KCk7CiAgICAgY3J5cHRvLT5hZGRCeXRlcyhp
bnB1dFV0ZjguZGF0YSgpLCBpbnB1dFV0ZjgubGVuZ3RoKCkpOwogICAgIGF1dG8gaGFzaCA9IGNy
eXB0by0+Y29tcHV0ZUhhc2goKTsKLSAgICByZXR1cm4gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmco
aGFzaC5kYXRhKCksIGhhc2guc2l6ZSgpKTsKKyAgICByZXR1cm4gYmFzZTY0VVJMRW5jb2RlVG9T
dHJpbmcoaGFzaCk7CiB9CiAKIFN0cmluZyBTV1NjcmlwdFN0b3JhZ2U6OnNoYTJIYXNoKGNvbnN0
IFVSTCYgaW5wdXQpIGNvbnN0CkBAIC04Niw5ICs4Niw5IEBAIFNjcmlwdEJ1ZmZlciBTV1Njcmlw
dFN0b3JhZ2U6OnN0b3JlKGNvbnMKICAgICBhdXRvIHNjcmlwdFBhdGggPSB0aGlzLT5zY3JpcHRQ
YXRoKHJlZ2lzdHJhdGlvbktleSwgc2NyaXB0VVJMKTsKICAgICBGaWxlU3lzdGVtOjptYWtlQWxs
RGlyZWN0b3JpZXMoRmlsZVN5c3RlbTo6cGFyZW50UGF0aChzY3JpcHRQYXRoKSk7CiAKLSAgICBh
dXRvIGl0ZXJhdGVPdmVyQnVmZmVyQW5kV3JpdGVEYXRhID0gWyZdKGNvbnN0IEZ1bmN0aW9uPGJv
b2woY29uc3QgdWludDhfdCosIHNpemVfdCk+JiB3cml0ZURhdGEpIHsKLSAgICAgICAgZm9yIChh
dXRvIGl0ID0gc2NyaXB0LmJ1ZmZlcigpLT5iZWdpbigpOyBpdCAhPSBzY3JpcHQuYnVmZmVyKCkt
PmVuZCgpOyArK2l0KQotICAgICAgICAgICAgd3JpdGVEYXRhKGl0LT5zZWdtZW50LT5kYXRhKCks
IGl0LT5zZWdtZW50LT5zaXplKCkpOworICAgIGF1dG8gaXRlcmF0ZU92ZXJCdWZmZXJBbmRXcml0
ZURhdGEgPSBbJl0oY29uc3QgRnVuY3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYg
d3JpdGVEYXRhKSB7CisgICAgICAgIGZvciAoYXV0byYgc2VnbWVudEVudHJ5IDogKnNjcmlwdC5i
dWZmZXIoKSkKKyAgICAgICAgICAgIHdyaXRlRGF0YShzZWdtZW50RW50cnkuc2VnbWVudC0+Ynl0
ZXMoKSk7CiAgICAgfTsKIAogICAgIGlmICghc2hvdWxkVXNlRmlsZU1hcHBpbmcoc2NyaXB0LmJ1
ZmZlcigpLT5zaXplKCkpKSB7CkBAIC05Nyw4ICs5Nyw4IEBAIFNjcmlwdEJ1ZmZlciBTV1Njcmlw
dFN0b3JhZ2U6OnN0b3JlKGNvbnMKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZp
Y2VXb3JrZXIsICJTV1NjcmlwdFN0b3JhZ2U6OnN0b3JlOiBGYWlsdXJlIHRvIHN0b3JlICVzLCBG
aWxlU3lzdGVtOjpvcGVuRmlsZSgpIGZhaWxlZCIsIHNjcmlwdFBhdGgudXRmOCgpLmRhdGEoKSk7
CiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9Ci0gICAgICAgIGl0ZXJhdGVPdmVy
QnVmZmVyQW5kV3JpdGVEYXRhKFsmXShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkg
ewotICAgICAgICAgICAgRmlsZVN5c3RlbTo6d3JpdGVUb0ZpbGUoaGFuZGxlLCBkYXRhLCBzaXpl
KTsKKyAgICAgICAgaXRlcmF0ZU92ZXJCdWZmZXJBbmRXcml0ZURhdGEoWyZdKFNwYW48Y29uc3Qg
c3RkOjpieXRlPiBkYXRhKSB7CisgICAgICAgICAgICBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZSho
YW5kbGUsIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfSk7CiAgICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShoYW5kbGUpOwpJ
bmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODEgQEAKKzIwMjEtMDYtMTEgIFNhbSBXZWluaWcg
IDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIEFkb3B0IFNwYW4gaW4gbW9yZSBwbGFjZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjg4Nwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtXSVBdCisK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OmVuY29kZSk6CisgICAg
ICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OmRlY29kZVJlY29yZEhlYWRlcik6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnN0b3JlT3JpZ2luKToK
KyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnJlYWRPcmlnaW4pOgorICAg
ICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OmVuY29kZUNhY2hlTmFtZXMpOgorICAgICAgICAo
V2ViS2l0OjpDYWNoZVN0b3JhZ2U6OmRlY29kZUNhY2hlc05hbWVzKToKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhY2hlOjpEYXRhOjptYXBUb0ZpbGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FjaGU6OmNvbXB1dGVTSEExKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVEYXRhLmg6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0
YTo6RGF0YSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0
YUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6OmFwcGx5IGNv
bnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhOjphZG9wdE1hcCk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVudHJ5OjplbmNvZGVBc1N0b3JhZ2VSZWNvcmQg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVudHJ5OjpkZWNvZGVTdG9y
YWdlUmVjb3JkKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVL
ZXkuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6Omhhc2hTdHJpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OktleTo6Y29tcHV0ZUhhc2ggY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OktleTo6Y29tcHV0ZVBhcnRpdGlvbkhhc2ggY29u
c3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2Uu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmRlY29kZVJlY29yZE1ldGFEYXRh
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjplbmNvZGVSZWNvcmRNZXRhRGF0YSk6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2Vz
RW50cnkuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN1YnJlc291cmNlc0Vu
dHJ5OjplbmNvZGVBc1N0b3JhZ2VSZWNvcmQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ2FjaGU6OlN1YnJlc291cmNlc0VudHJ5OjpkZWNvZGVTdG9yYWdlUmVjb3JkKToKKyAgICAg
ICAgKiBQbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2Rlci5oOgorICAgICAgICAqIFBsYXRmb3JtL0lQ
Qy9Bcmd1bWVudENvZGVycy5jcHA6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8Q1N0cmlu
Zz46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8Q1N0cmluZz46OmRlY29k
ZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8U3RyaW5nPjo6ZW5jb2RlKToKKyAgICAg
ICAgKElQQzo6ZGVjb2RlU3RyaW5nVGV4dCk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8
U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxTSEEx
OjpEaWdlc3Q+OjpkZWNvZGUpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVy
cy5oOgorICAgICAgICAoSVBDOjpTaW1wbGVBcmd1bWVudENvZGVyOjplbmNvZGUpOgorICAgICAg
ICAoSVBDOjpTaW1wbGVBcmd1bWVudENvZGVyOjpkZWNvZGUpOgorICAgICAgICAqIFBsYXRmb3Jt
L0lQQy9BcnJheVJlZmVyZW5jZS5oOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9EZWNvZGVyLmNw
cDoKKyAgICAgICAgKElQQzo6RGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKToKKyAgICAg
ICAgKiBQbGF0Zm9ybS9JUEMvRGVjb2Rlci5oOgorICAgICAgICAoSVBDOjpEZWNvZGVyOjpkZWNv
ZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9FbmNvZGVyLmNwcDoK
KyAgICAgICAgKElQQzo6RW5jb2Rlcjo6ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKToKKyAgICAgICAg
KiBQbGF0Zm9ybS9JUEMvRW5jb2Rlci5oOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9TaGFyZWRC
dWZmZXJDb3B5LmNwcDoKKyAgICAgICAgKElQQzo6U2hhcmVkQnVmZmVyQ29weTo6ZW5jb2RlIGNv
bnN0KToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlvbkVuY29kZXIuaDoK
KyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQ
Qzo6ZW5jb2RlU2hhcmVkQnVmZmVyKToKKyAgICAgICAgKElQQzo6ZGVjb2RlU2hhcmVkQnVmZmVy
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNwcDoK
KyAgICAgICAgKEFQSTo6ZW5jb2RlQ29udGVudFJ1bGVMaXN0TWV0YURhdGEpOgorICAgICAgICAo
QVBJOjpnZXREYXRhKToKKyAgICAgICAgKEFQSTo6ZGVjb2RlQ29udGVudFJ1bGVMaXN0TWV0YURh
dGEpOgorICAgICAgICAoQVBJOjp3cml0ZURhdGFUb0ZpbGUpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9tYWMvTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SGlz
dG9yeUVudHJ5RGF0YUVuY29kZXI6Om9wZXJhdG9yPDwpOgorICAgICAgICAoV2ViS2l0OjpIaXN0
b3J5RW50cnlEYXRhRW5jb2Rlcjo6ZW5jb2RlQXJpdGhtZXRpY1R5cGUpOgorICAgICAgICAoV2Vi
S2l0OjpIaXN0b3J5RW50cnlEYXRhRW5jb2Rlcjo6ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKToKKyAg
ICAgICAgKFdlYktpdDo6SGlzdG9yeUVudHJ5RGF0YURlY29kZXI6Om9wZXJhdG9yPj4pOgorICAg
ICAgICAoV2ViS2l0OjpIaXN0b3J5RW50cnlEYXRhRGVjb2Rlcjo6ZGVjb2RlQXJpdGhtZXRpY1R5
cGUpOgorICAgICAgICAoV2ViS2l0OjpIaXN0b3J5RW50cnlEYXRhRGVjb2Rlcjo6ZGVjb2RlRml4
ZWRMZW5ndGhEYXRhKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQ
SS5jcHA6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OmVuY29kZVR5cGVkQXJyYXkp
OgorCiAyMDIxLTA2LTExICBSeWFuIEhhZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyByMjc4NzU0LgpJbmRleDogU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnRNYW5hZ2VyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMjMsNyArMzIzLDcgQEAgdm9pZCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFn
ZXI6OmZpcgogICAgICAgICBjcnlwdG8tPmFkZEJ5dGVzKHB1YmxpY0tleURhdGEtPmRhdGEoKSwg
cHVibGljS2V5RGF0YS0+c2l6ZSgpKTsKICAgICAgICAgYXV0byBwdWJsaWNLZXlEYXRhSGFzaCA9
IGNyeXB0by0+Y29tcHV0ZUhhc2goKTsKIAotICAgICAgICBhdXRvIGtleUlEID0gYmFzZTY0VVJM
RW5jb2RlVG9TdHJpbmcocHVibGljS2V5RGF0YUhhc2guZGF0YSgpLCBwdWJsaWNLZXlEYXRhSGFz
aC5zaXplKCkpOworICAgICAgICBhdXRvIGtleUlEID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmco
cHVibGljS2V5RGF0YUhhc2gpOwogICAgICAgICBpZiAoa2V5SUQgIT0gYXR0cmlidXRpb24uc291
cmNlVW5saW5rYWJsZVRva2VuKCktPmtleUlEQmFzZTY0VVJMKQogICAgICAgICAgICAgcmV0dXJu
OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFn
ZUVuZ2luZUNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVD
YWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2NSw3ICs1NjUsNyBAQCBTdG9yYWdlOjpSZWNv
cmQgQ2FjaGU6OmVuY29kZShjb25zdCBSZWNvCiAKICAgICBlbmNvZGVyLmVuY29kZUNoZWNrc3Vt
KCk7CiAKLSAgICBEYXRhIGhlYWRlcihlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNp
emUoKSk7CisgICAgRGF0YSBoZWFkZXIoZW5jb2Rlci5idWZmZXIoKSk7CiAgICAgRGF0YSBib2R5
OwogICAgIFdURjo6c3dpdGNoT24ocmVjb3JkLnJlc3BvbnNlQm9keSwgW10oY29uc3QgUmVmPFdl
YkNvcmU6OkZvcm1EYXRhPiYgZm9ybURhdGEpIHsKICAgICAgICAgLy8gRklYTUU6IFN0b3JlIGZv
cm0gZGF0YSBib2R5LgpAQCAtNjI4LDkgKzYyOCw5IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdl
YkNvcmU6OkRPTUNhY2hlRW4KICAgICB9fTsKIH0KIAotc3RkOjpvcHRpb25hbDxDYWNoZTo6RGVj
b2RlZFJlY29yZD4gQ2FjaGU6OmRlY29kZVJlY29yZEhlYWRlcihjb25zdCBTdG9yYWdlOjpSZWNv
cmQmIHN0b3JhZ2UpCitzdGQ6Om9wdGlvbmFsPENhY2hlOjpEZWNvZGVkUmVjb3JkPiBDYWNoZTo6
ZGVjb2RlUmVjb3JkSGVhZGVyKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYgc3RvcmFnZUVudHJ5KQog
ewotICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihzdG9yYWdlLmhlYWRlci5k
YXRhKCksIHN0b3JhZ2UuaGVhZGVyLnNpemUoKSk7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVj
b2RlciBkZWNvZGVyIHsgc3RvcmFnZUVudHJ5LmhlYWRlciB9OwogCiAgICAgc3RkOjpvcHRpb25h
bDxkb3VibGU+IGluc2VydGlvblRpbWU7CiAgICAgZGVjb2RlciA+PiBpbnNlcnRpb25UaW1lOwpA
QCAtNjUzLDE1ICs2NTMsMTUgQEAgc3RkOjpvcHRpb25hbDxDYWNoZTo6RGVjb2RlZFJlY29yZD4g
Q2FjaAogICAgIH19OwogfQogCi1zdGQ6Om9wdGlvbmFsPFJlY29yZD4gQ2FjaGU6OmRlY29kZShj
b25zdCBTdG9yYWdlOjpSZWNvcmQmIHN0b3JhZ2UpCitzdGQ6Om9wdGlvbmFsPFJlY29yZD4gQ2Fj
aGU6OmRlY29kZShjb25zdCBTdG9yYWdlOjpSZWNvcmQmIHN0b3JhZ2VFbnRyeSkKIHsKLSAgICBh
dXRvIHJlc3VsdCA9IGRlY29kZVJlY29yZEhlYWRlcihzdG9yYWdlKTsKKyAgICBhdXRvIHJlc3Vs
dCA9IGRlY29kZVJlY29yZEhlYWRlcihzdG9yYWdlRW50cnkpOwogCiAgICAgaWYgKCFyZXN1bHQp
CiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKICAgICBhdXRvIHJlY29yZCA9IFdURk1v
dmUocmVzdWx0LT5yZWNvcmQpOwotICAgIHJlY29yZC5yZXNwb25zZUJvZHkgPSBXZWJDb3JlOjpT
aGFyZWRCdWZmZXI6OmNyZWF0ZShzdG9yYWdlLmJvZHkuZGF0YSgpLCBzdG9yYWdlLmJvZHkuc2l6
ZSgpKTsKKyAgICByZWNvcmQucmVzcG9uc2VCb2R5ID0gV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpj
cmVhdGUoc3RvcmFnZUVudHJ5LmJvZHkpOwogCiAgICAgcmV0dXJuIHJlY29yZDsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2Fj
aGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDE0ICsxMDUsMTQgQEAgdm9pZCBDYWNoZXM6OnN0b3Jl
T3JpZ2luKENvbXBsZXRpb25DYWxsYgogICAgIGVuY29kZXIgPDwgbV9vcmlnaW4uY2xpZW50T3Jp
Z2luLnByb3RvY29sOwogICAgIGVuY29kZXIgPDwgbV9vcmlnaW4uY2xpZW50T3JpZ2luLmhvc3Q7
CiAgICAgZW5jb2RlciA8PCBtX29yaWdpbi5jbGllbnRPcmlnaW4ucG9ydDsKLSAgICBtX2VuZ2lu
ZS0+d3JpdGVGaWxlKGNhY2hlc09yaWdpbkZpbGVuYW1lKG1fcm9vdFBhdGgpLCBEYXRhIHsgZW5j
b2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkgfSwgW3Byb3RlY3RlZFRoaXMgPSBt
YWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0gKHN0ZDo6b3B0aW9uYWw8RXJyb3I+JiYgZXJyb3IpIG11dGFibGUgeworICAgIG1fZW5n
aW5lLT53cml0ZUZpbGUoY2FjaGVzT3JpZ2luRmlsZW5hbWUobV9yb290UGF0aCksIERhdGEgeyBl
bmNvZGVyLmJ1ZmZlcigpIH0sIFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChzdGQ6Om9wdGlvbmFs
PEVycm9yPiYmIGVycm9yKSBtdXRhYmxlIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RG
TW92ZShlcnJvcikpOwogICAgIH0pOwogfQogCiBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkNsaWVu
dE9yaWdpbj4gQ2FjaGVzOjpyZWFkT3JpZ2luKGNvbnN0IERhdGEmIGRhdGEpCiB7Ci0gICAgV1RG
OjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7
CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyIHsgZGF0YSB9OwogCiAgICAg
c3RkOjpvcHRpb25hbDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IHRvcE9yaWdpbjsKICAg
ICBkZWNvZGVyID4+IHRvcE9yaWdpbjsKQEAgLTQwNCwxMiArNDA0LDEzIEBAIHN0YXRpYyBpbmxp
bmUgRGF0YSBlbmNvZGVDYWNoZU5hbWVzKGNvbnMKICAgICAgICAgZW5jb2RlciA8PCBjYWNoZS51
bmlxdWVOYW1lKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIERhdGEgeyBlbmNvZGVyLmJ1ZmZlcigp
LCBlbmNvZGVyLmJ1ZmZlclNpemUoKSB9OworICAgIHJldHVybiBEYXRhIHsgZW5jb2Rlci5idWZm
ZXIoKSB9OwogfQogCiBzdGF0aWMgaW5saW5lIEV4cGVjdGVkPFZlY3RvcjxzdGQ6OnBhaXI8U3Ry
aW5nLCBTdHJpbmc+PiwgRXJyb3I+IGRlY29kZUNhY2hlc05hbWVzKGNvbnN0IERhdGEmIGRhdGEp
CiB7Ci0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEuZGF0YSgpLCBk
YXRhLnNpemUoKSk7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyIHsgZGF0
YSB9OworCiAgICAgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gY291bnQ7CiAgICAgZGVjb2RlciA+
PiBjb3VudDsKICAgICBpZiAoIWNvdW50KQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBOZXR3
b3JrQ2FjaGUgewogRGF0YSBEYXRhOjptYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKSBjb25z
dAogewogICAgIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGU7Ci0gICAgYXV0
byBhcHBseURhdGEgPSBbJl0oY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6
ZV90KT4mIGFwcGxpZXIpIHsgYXBwbHkoYXBwbGllcik7IH07CisgICAgYXV0byBhcHBseURhdGEg
PSBbJl0oY29uc3QgRnVuY3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYgYXBwbGll
cikgeyBhcHBseShhcHBsaWVyKTsgfTsKICAgICBhdXRvIG1hcHBlZEZpbGUgPSBGaWxlU3lzdGVt
OjptYXBUb0ZpbGUocGF0aCwgc2l6ZSgpLCBXVEZNb3ZlKGFwcGx5RGF0YSksICZoYW5kbGUpOwog
ICAgIGlmICghbWFwcGVkRmlsZSkKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTg2LDkgKzg2LDkg
QEAgRGF0YSBhZG9wdEFuZE1hcEZpbGUoRmlsZVN5c3RlbTo6UGxhdGZvcgogU0hBMTo6RGlnZXN0
IGNvbXB1dGVTSEExKGNvbnN0IERhdGEmIGRhdGEsIGNvbnN0IFNhbHQmIHNhbHQpCiB7CiAgICAg
U0hBMSBzaGExOwotICAgIHNoYTEuYWRkQnl0ZXMoc2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKTsK
LSAgICBkYXRhLmFwcGx5KFsmc2hhMV0oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUp
IHsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhkYXRhLCBzaXplKTsKKyAgICBzaGExLmFkZEJ5dGVz
KHNhbHQpOworICAgIGRhdGEuYXBwbHkoWyZzaGExXShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0
YSkgeworICAgICAgICBzaGExLmFkZEJ5dGVzKGRhdGEpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9KTsKIApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KICNpbmNs
dWRlIDx3dGYvRnVuY3Rpb25EaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8d3RmL1NIQTEuaD4KKyNp
bmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC01Miw4ICs1MywxNCBAQCBu
YW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIAogY2xhc3MgRGF0YSB7CiBwdWJsaWM6CisgICAgdXNp
bmcgdmFsdWVfdHlwZSA9IHVpbnQ4X3Q7CisKICAgICBEYXRhKCkgeyB9CiAgICAgRGF0YShjb25z
dCB1aW50OF90Kiwgc2l6ZV90KTsKKyAgICBEYXRhKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBkYXRh
KQorICAgICAgICA6IERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5k
YXRhKCkpLCBkYXRhLnNpemUoKSkKKyAgICB7CisgICAgfQogCiAgICAgfkRhdGEoKSB7IH0KIApA
QCAtNzQsMTIgKzgxLDEzIEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEoKSBj
b25zdDsKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorCiAgICAg
Ym9vbCBpc01hcCgpIGNvbnN0IHsgcmV0dXJuIG1faXNNYXA7IH0KICAgICBSZWZQdHI8U2hhcmVk
TWVtb3J5PiB0cnlDcmVhdGVTaGFyZWRNZW1vcnkoKSBjb25zdDsKIAogICAgIERhdGEgc3VicmFu
Z2Uoc2l6ZV90IG9mZnNldCwgc2l6ZV90KSBjb25zdDsKIAotICAgIGJvb2wgYXBwbHkoY29uc3Qg
RnVuY3Rpb248Ym9vbCAoY29uc3QgdWludDhfdCosIHNpemVfdCk+JikgY29uc3Q7CisgICAgYm9v
bCBhcHBseShjb25zdCBGdW5jdGlvbjxib29sIChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYpIGNv
bnN0OwogCiAgICAgRGF0YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKSBjb25zdDsKIApJ
bmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRh
Q29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0JKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OSwxMiArNjksMTIgQEAgYm9vbCBEYXRhOjppc051bGwoKSBjb25zdAog
ICAgIHJldHVybiAhbV9kaXNwYXRjaERhdGE7CiB9CiAKLWJvb2wgRGF0YTo6YXBwbHkoY29uc3Qg
RnVuY3Rpb248Ym9vbCAoY29uc3QgdWludDhfdCosIHNpemVfdCk+JiBhcHBsaWVyKSBjb25zdAor
Ym9vbCBEYXRhOjphcHBseShjb25zdCBGdW5jdGlvbjxib29sIChTcGFuPGNvbnN0IHN0ZDo6Ynl0
ZT4pPiYgYXBwbGllcikgY29uc3QKIHsKICAgICBpZiAoIW1fc2l6ZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIHJldHVybiBkaXNwYXRjaF9kYXRhX2FwcGx5KG1fZGlzcGF0Y2hEYXRhLmdl
dCgpLCBbJmFwcGxpZXJdKGRpc3BhdGNoX2RhdGFfdCwgc2l6ZV90LCBjb25zdCB2b2lkKiBkYXRh
LCBzaXplX3Qgc2l6ZSkgewotICAgICAgICByZXR1cm4gYXBwbGllcihzdGF0aWNfY2FzdDxjb25z
dCB1aW50OF90Kj4oZGF0YSksIHNpemUpOworICAgICAgICByZXR1cm4gYXBwbGllcihTcGFuIHsg
c3RhdGljX2Nhc3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSksIHNpemUgfSk7CiAgICAgfSk7CiB9
CiAKQEAgLTk0LDE0ICs5NCwxMSBAQCBEYXRhIGNvbmNhdGVuYXRlKGNvbnN0IERhdGEmIGEsIGNv
bnN0IERhCiAKIERhdGEgRGF0YTo6YWRvcHRNYXAoRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEm
JiBtYXBwZWRGaWxlLCBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmQpCiB7Ci0gICAg
c2l6ZV90IHNpemUgPSBtYXBwZWRGaWxlLnNpemUoKTsKLSAgICB2b2lkKiBtYXAgPSBtYXBwZWRG
aWxlLmxlYWtIYW5kbGUoKTsKLSAgICBBU1NFUlQobWFwKTsKLSAgICBBU1NFUlQobWFwICE9IE1B
UF9GQUlMRUQpOworICAgIGF1dG8gbWFwID0gbWFwcGVkRmlsZS5sZWFrSGFuZGxlKCk7CisgICAg
QVNTRVJUKG1hcC5kYXRhKCkpOworICAgIEFTU0VSVChtYXAuZGF0YSgpICE9IE1BUF9GQUlMRUQp
OwogICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShmZCk7Ci0gICAgYXV0byBib2R5TWFwID0gYWRv
cHRPU09iamVjdChkaXNwYXRjaF9kYXRhX2NyZWF0ZShtYXAsIHNpemUsIGRpc3BhdGNoX2dldF9n
bG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIFttYXAsIHNp
emVdIHsKLSAgICAgICAgbXVubWFwKG1hcCwgc2l6ZSk7Ci0gICAgfSkpOworICAgIGF1dG8gYm9k
eU1hcCA9IGFkb3B0T1NPYmplY3QoZGlzcGF0Y2hfZGF0YV9jcmVhdGUobWFwLmRhdGEoKSwgbWFw
LnNpemUoKSwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklU
WV9ERUZBVUxULCAwKSwgRElTUEFUQ0hfREFUQV9ERVNUUlVDVE9SX01VTk1BUCkpOwogICAgIHJl
dHVybiB7IFdURk1vdmUoYm9keU1hcCksIERhdGE6OkJhY2tpbmc6Ok1hcCB9OwogfQogCkluZGV4
OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFHTGli
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZURhdGFHTGliLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhR0xpYi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTczLDE0ICs3MywxNCBAQCBib29sIERhdGE6OmlzTnVsbCgpIGNvbnN0CiAgICAg
cmV0dXJuICFtX2J1ZmZlcjsKIH0KIAotYm9vbCBEYXRhOjphcHBseShjb25zdCBGdW5jdGlvbjxi
b29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYgYXBwbGllcikgY29uc3QKK2Jvb2wgRGF0YTo6
YXBwbHkoY29uc3QgRnVuY3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYgYXBwbGll
cikgY29uc3QKIHsKICAgICBpZiAoIW1fc2l6ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgZ3NpemUgbGVuZ3RoOwogICAgIGNvbnN0IGF1dG8qIGRhdGEgPSBnX2J5dGVzX2dldF9kYXRh
KG1fYnVmZmVyLmdldCgpLCAmbGVuZ3RoKTsKLSAgICByZXR1cm4gYXBwbGllcihyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgbGVuZ3RoKTsKKyAgICByZXR1cm4gYXBwbGll
cihTcGFuIHsgc3RhdGljX2Nhc3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSksIGxlbmd0aCB9KTsK
IH0KIAogRGF0YSBEYXRhOjpzdWJyYW5nZShzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkgY29u
c3QKQEAgLTExNSwxMiArMTE1LDExIEBAIHN0cnVjdCBNYXBXcmFwcGVyIHsKIAogICAgIH5NYXBX
cmFwcGVyKCkKICAgICB7Ci0gICAgICAgIG11bm1hcChtYXAsIHNpemUpOworICAgICAgICBGaWxl
U3lzdGVtOjp1bm1hcFZpZXdPZkZpbGUobWFwKTsKICAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VG
aWxlKGZpbGVEZXNjcmlwdG9yKTsKICAgICB9CiAKLSAgICB2b2lkKiBtYXA7Ci0gICAgc2l6ZV90
IHNpemU7CisgICAgU3BhbjxzdGQ6OmJ5dGU+IG1hcDsKICAgICBGaWxlU3lzdGVtOjpQbGF0Zm9y
bUZpbGVIYW5kbGUgZmlsZURlc2NyaXB0b3I7CiB9OwogCkBAIC0xMzEsMTIgKzEzMCwxMSBAQCBz
dGF0aWMgdm9pZCBkZWxldGVNYXBXcmFwcGVyKE1hcFdyYXBwZXIqCiAKIERhdGEgRGF0YTo6YWRv
cHRNYXAoRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmJiBtYXBwZWRGaWxlLCBGaWxlU3lzdGVt
OjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmQpCiB7Ci0gICAgc2l6ZV90IHNpemUgPSBtYXBwZWRGaWxl
LnNpemUoKTsKLSAgICB2b2lkKiBtYXAgPSBtYXBwZWRGaWxlLmxlYWtIYW5kbGUoKTsKLSAgICBB
U1NFUlQobWFwKTsKLSAgICBBU1NFUlQobWFwICE9IE1BUF9GQUlMRUQpOwotICAgIE1hcFdyYXBw
ZXIqIHdyYXBwZXIgPSBuZXcgTWFwV3JhcHBlciB7IG1hcCwgc2l6ZSwgZmQgfTsKLSAgICByZXR1
cm4geyBhZG9wdEdSZWYoZ19ieXRlc19uZXdfd2l0aF9mcmVlX2Z1bmMobWFwLCBzaXplLCByZWlu
dGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5PihkZWxldGVNYXBXcmFwcGVyKSwgd3JhcHBlcikp
LCBmZCB9OworICAgIGF1dG8gbWFwID0gbWFwcGVkRmlsZS5sZWFrSGFuZGxlKCk7CisgICAgQVNT
RVJUKG1hcC5kYXRhKCkpOworICAgIEFTU0VSVChtYXAuZGF0YSgpICE9IE1BUF9GQUlMRUQpOwor
ICAgIE1hcFdyYXBwZXIqIHdyYXBwZXIgPSBuZXcgTWFwV3JhcHBlciB7IG1hcCwgZmQgfTsKKyAg
ICByZXR1cm4geyBhZG9wdEdSZWYoZ19ieXRlc19uZXdfd2l0aF9mcmVlX2Z1bmMobWFwLmRhdGEo
KSwgbWFwLnNpemUoKSwgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oZGVsZXRlTWFw
V3JhcHBlciksIHdyYXBwZXIpKSwgZmQgfTsKIH0KIAogUmVmUHRyPFNoYXJlZE1lbW9yeT4gRGF0
YTo6dHJ5Q3JlYXRlU2hhcmVkTWVtb3J5KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZUVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksMTAgKzk5LDEwIEBAIFN0
b3JhZ2U6OlJlY29yZCBFbnRyeTo6ZW5jb2RlQXNTdG9yYWdlUmUKICAgICAKICAgICBlbmNvZGVy
LmVuY29kZUNoZWNrc3VtKCk7CiAKLSAgICBEYXRhIGhlYWRlcihlbmNvZGVyLmJ1ZmZlcigpLCBl
bmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgRGF0YSBoZWFkZXIgeyBlbmNvZGVyLmJ1ZmZlcigp
IH07CiAgICAgRGF0YSBib2R5OwogICAgIGlmIChtX2J1ZmZlcikKLSAgICAgICAgYm9keSA9IHsg
bV9idWZmZXItPmRhdGEoKSwgbV9idWZmZXItPnNpemUoKSB9OworICAgICAgICBib2R5ID0geyBt
X2J1ZmZlci0+Ynl0ZXMoKSB9OwogCiAgICAgcmV0dXJuIHsgbV9rZXksIG1fdGltZVN0YW1wLCBo
ZWFkZXIsIGJvZHksIHsgfSB9OwogfQpAQCAtMTExLDcgKzExMSw3IEBAIHN0ZDo6dW5pcXVlX3B0
cjxFbnRyeT4gRW50cnk6OmRlY29kZVN0b3IKIHsKICAgICBhdXRvIGVudHJ5ID0gbWFrZVVuaXF1
ZTxFbnRyeT4oc3RvcmFnZUVudHJ5KTsKIAotICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIg
ZGVjb2RlcihzdG9yYWdlRW50cnkuaGVhZGVyLmRhdGEoKSwgc3RvcmFnZUVudHJ5LmhlYWRlci5z
aXplKCkpOworICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlciB7IHN0b3JhZ2VF
bnRyeS5oZWFkZXIgfTsKICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwog
ICAgIGlmICghV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZTo6ZGVjb2RlKGRlY29kZXIsIHJlc3Bv
bnNlKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xOTEsNyArMTkxLDcgQEAgdm9pZCBF
bnRyeTo6aW5pdGlhbGl6ZUJ1ZmZlckZyb21TdG9yYWdlUgogICAgICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICNlbmRpZgotICAgIG1fYnVmZmVyID0gV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVh
dGUobV9zb3VyY2VTdG9yYWdlUmVjb3JkLmJvZHkuZGF0YSgpLCBtX3NvdXJjZVN0b3JhZ2VSZWNv
cmQuYm9keS5zaXplKCkpOworICAgIG1fYnVmZmVyID0gV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpj
cmVhdGUobV9zb3VyY2VTdG9yYWdlUmVjb3JkLmJvZHkpOwogfQogCiBXZWJDb3JlOjpTaGFyZWRC
dWZmZXIqIEVudHJ5OjpidWZmZXIoKSBjb25zdApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVLZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxMyArODgsMTMgQEAgc3RhdGljIHZvaWQg
aGFzaFN0cmluZyhTSEExJiBzaGExLCBjb25zdAogCiAgICAgaWYgKHN0cmluZy5pczhCaXQoKSAm
JiBzdHJpbmcuaXNBbGxBU0NJSSgpKSB7CiAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbnVsbEJ5dGUg
PSAwOwotICAgICAgICBzaGExLmFkZEJ5dGVzKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcu
bGVuZ3RoKCkpOwotICAgICAgICBzaGExLmFkZEJ5dGVzKCZudWxsQnl0ZSwgMSk7CisgICAgICAg
IHNoYTEuYWRkQnl0ZXMoU3BhbiB7IHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3Ro
KCkgfSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZudWxsQnl0ZSwgMSB9KTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvIGNTdHJpbmcgPSBzdHJpbmcudXRmOCgpOwog
ICAgIC8vIEluY2x1ZGUgdGVybWluYXRpbmcgbnVsbCBieXRlLgotICAgIHNoYTEuYWRkQnl0ZXMo
Y1N0cmluZy5kYXRhQXNVSW50OFB0cigpLCBjU3RyaW5nLmxlbmd0aCgpICsgMSk7CisgICAgc2hh
MS5hZGRCeXRlcyhTcGFuIHsgY1N0cmluZy5kYXRhQXNVSW50OFB0cigpLCBjU3RyaW5nLmxlbmd0
aCgpICsgMSB9KTsKIH0KIAogS2V5OjpIYXNoVHlwZSBLZXk6OmNvbXB1dGVIYXNoKGNvbnN0IFNh
bHQmIHNhbHQpIGNvbnN0CkBAIC0xMDIsNyArMTAyLDcgQEAgS2V5OjpIYXNoVHlwZSBLZXk6OmNv
bXB1dGVIYXNoKGNvbnN0IFNhbAogICAgIC8vIFdlIGRvbid0IHJlYWxseSBuZWVkIGEgY3J5cHRv
Z3JhcGhpYyBoYXNoLiBUaGUga2V5IGlzIGFsd2F5cyB2ZXJpZmllZCBhZ2FpbnN0IHRoZSBlbnRy
eSBoZWFkZXIuCiAgICAgLy8gU0hBMSBqdXN0IGhhcHBlbnMgdG8gYmUgc3VpdGFibHkgc2l6ZWQs
IGZhc3QgYW5kIGF2YWlsYWJsZS4KICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhz
YWx0LmRhdGEoKSwgc2FsdC5zaXplKCkpOworICAgIHNoYTEuYWRkQnl0ZXMoc2FsdCk7CiAKICAg
ICBoYXNoU3RyaW5nKHNoYTEsIG1fcGFydGl0aW9uKTsKICAgICBoYXNoU3RyaW5nKHNoYTEsIG1f
dHlwZSk7CkBAIC0xMTcsNyArMTE3LDcgQEAgS2V5OjpIYXNoVHlwZSBLZXk6OmNvbXB1dGVIYXNo
KGNvbnN0IFNhbAogS2V5OjpIYXNoVHlwZSBLZXk6OmNvbXB1dGVQYXJ0aXRpb25IYXNoKGNvbnN0
IFNhbHQmIHNhbHQpIGNvbnN0CiB7CiAgICAgU0hBMSBzaGExOwotICAgIHNoYTEuYWRkQnl0ZXMo
c2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKTsKKyAgICBzaGExLmFkZEJ5dGVzKHNhbHQpOwogCiAg
ICAgaGFzaFN0cmluZyhzaGExLCBtX3BhcnRpdGlvbik7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdl
LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU0LDggKzQ1
NCw4IEBAIHN0cnVjdCBSZWNvcmRNZXRhRGF0YSB7CiBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJO
IGJvb2wgZGVjb2RlUmVjb3JkTWV0YURhdGEoUmVjb3JkTWV0YURhdGEmIG1ldGFEYXRhLCBjb25z
dCBEYXRhJiBmaWxlRGF0YSkKIHsKICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBmaWxl
RGF0YS5hcHBseShbJm1ldGFEYXRhLCAmc3VjY2Vzc10oY29uc3QgdWludDhfdCogZGF0YSwgc2l6
ZV90IHNpemUpIHsKLSAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRh
dGEsIHNpemUpOworICAgIGZpbGVEYXRhLmFwcGx5KFsmbWV0YURhdGEsICZzdWNjZXNzXShTcGFu
PGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkgeworICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNv
ZGVyIGRlY29kZXIgeyBkYXRhIH07CiAgICAgICAgIAogICAgICAgICBzdGQ6Om9wdGlvbmFsPHVu
c2lnbmVkPiBjYWNoZVN0b3JhZ2VWZXJzaW9uOwogICAgICAgICBkZWNvZGVyID4+IGNhY2hlU3Rv
cmFnZVZlcnNpb247CkBAIC01ODYsNyArNTg2LDcgQEAgc3RhdGljIERhdGEgZW5jb2RlUmVjb3Jk
TWV0YURhdGEoY29uc3QgUgogCiAgICAgZW5jb2Rlci5lbmNvZGVDaGVja3N1bSgpOwogCi0gICAg
cmV0dXJuIERhdGEoZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOworICAg
IHJldHVybiB7IGVuY29kZXIuYnVmZmVyKCkgfTsKIH0KIAogc3RkOjpvcHRpb25hbDxCbG9iU3Rv
cmFnZTo6QmxvYj4gU3RvcmFnZTo6c3RvcmVCb2R5QXNCbG9iKFdyaXRlT3BlcmF0aW9uJiB3cml0
ZU9wZXJhdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIz
LDE0ICsxMjMsMTQgQEAgU3RvcmFnZTo6UmVjb3JkIFN1YnJlc291cmNlc0VudHJ5OjplbmNvZAog
CiAgICAgZW5jb2Rlci5lbmNvZGVDaGVja3N1bSgpOwogCi0gICAgcmV0dXJuIHsgbV9rZXksIG1f
dGltZVN0YW1wLCB7IGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpIH0sIHsg
fSwgeyB9fTsKKyAgICByZXR1cm4geyBtX2tleSwgbV90aW1lU3RhbXAsIHsgZW5jb2Rlci5idWZm
ZXIoKSB9LCB7IH0sIHsgfX07CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTdWJyZXNvdXJjZXNFbnRy
eT4gU3VicmVzb3VyY2VzRW50cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQoY29uc3QgU3RvcmFnZTo6
UmVjb3JkJiBzdG9yYWdlRW50cnkpCiB7CiAgICAgYXV0byBlbnRyeSA9IG1ha2VVbmlxdWU8U3Vi
cmVzb3VyY2VzRW50cnk+KHN0b3JhZ2VFbnRyeSk7CiAKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpE
ZWNvZGVyIGRlY29kZXIoc3RvcmFnZUVudHJ5LmhlYWRlci5kYXRhKCksIHN0b3JhZ2VFbnRyeS5o
ZWFkZXIuc2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyBz
dG9yYWdlRW50cnkuaGVhZGVyIH07CiAgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8U3VicmVzb3Vy
Y2VJbmZvPj4gc3VicmVzb3VyY2VzOwogICAgIGRlY29kZXIgPj4gc3VicmVzb3VyY2VzOwogICAg
IGlmICghc3VicmVzb3VyY2VzKQpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJn
dW1lbnRDb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Fy
Z3VtZW50Q29kZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvQXJndW1lbnRDb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSwxMyArNzksMTMgQEAg
c3RydWN0IEFyZ3VtZW50Q29kZXI8VCwgdHlwZW5hbWUgc3RkOjplbgogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEVuY29kZXI+CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIs
IFQgdmFsdWUpCiAgICAgewotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmdmFsdWUpLCBzaXplb2YoVCksIGFsaWdu
b2YoVCkpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJnZh
bHVlLCAxIH0pOwogICAgIH0KIAogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFQ+IGRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKICAgICAgICAgVCByZXN1bHQ7Ci0gICAgICAgIGlmIChk
ZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigm
cmVzdWx0KSwgc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKSkKKyAgICAgICAgaWYgKGRlY29kZXIuZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmcmVzdWx0LCAxIH0pKQogICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuY3BwCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBBcmd1bWVudENvZGVyPENT
dHJpbmc+OjplbmNvZGUoRW5jbwogCiAgICAgdWludDMyX3QgbGVuZ3RoID0gc3RyaW5nLmxlbmd0
aCgpOwogICAgIGVuY29kZXIgPDwgbGVuZ3RoOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKHN0cmluZy5kYXRhQXNVSW50OFB0cigpLCBsZW5ndGgsIDEpOworICAgIGVuY29kZXIu
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0cmluZy5ieXRlcygpKTsKIH0KIAogV0FSTl9VTlVTRURf
UkVUVVJOIGJvb2wgQXJndW1lbnRDb2RlcjxDU3RyaW5nPjo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIsIENTdHJpbmcmIHJlc3VsdCkKQEAgLTEwMyw3ICsxMDMsNyBAQCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYm9vbCBBcmd1bWVudENvZGVyPENTCiAKICAgICBjaGFyKiBidWZmZXI7CiAgICAgQ1N0cmlu
ZyBzdHJpbmcgPSBDU3RyaW5nOjpuZXdVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDhfdCo+KGJ1ZmZlciksIGxlbmd0aCwgMSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVk
TGVuZ3RoRGF0YShTcGFuIHsgYnVmZmVyLCBsZW5ndGggfSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIHJlc3VsdCA9IHN0cmluZzsKQEAgLTEyMywxMSArMTIzLDcgQEAgdm9pZCBBcmd1
bWVudENvZGVyPFN0cmluZz46OmVuY29kZShFbmNvZAogICAgIGJvb2wgaXM4Qml0ID0gc3RyaW5n
LmlzOEJpdCgpOwogCiAgICAgZW5jb2RlciA8PCBsZW5ndGggPDwgaXM4Qml0OwotCi0gICAgaWYg
KGlzOEJpdCkKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RyaW5nLmNo
YXJhY3RlcnM4KCksIGxlbmd0aCAqIHNpemVvZihMQ2hhciksIGFsaWdub2YoTENoYXIpKTsKLSAg
ICBlbHNlCi0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHN0cmluZy5jaGFyYWN0ZXJzMTYoKSksIGxlbmd0aCAqIHNp
emVvZihVQ2hhciksIGFsaWdub2YoVUNoYXIpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShzdHJpbmcuYnl0ZXMoKSk7CiB9CiB0ZW1wbGF0ZQogdm9pZCBBcmd1bWVudENvZGVy
PFN0cmluZz46OmVuY29kZTxFbmNvZGVyPihFbmNvZGVyJiwgY29uc3QgU3RyaW5nJik7CkBAIC0x
NDMsNyArMTM5LDcgQEAgc3RhdGljIGlubGluZSBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gZGVjbwog
ICAgIAogICAgIENoYXJhY3RlclR5cGUqIGJ1ZmZlcjsKICAgICBTdHJpbmcgc3RyaW5nID0gU3Ry
aW5nOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1ZmZl
ciksIGxlbmd0aCAqIHNpemVvZihDaGFyYWN0ZXJUeXBlKSwgYWxpZ25vZihDaGFyYWN0ZXJUeXBl
KSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgYnVmZmVy
LCBsZW5ndGggfSkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgCiAgICAgcmV0
dXJuIHN0cmluZzsKQEAgLTE4MSwxMiArMTc3LDEyIEBAIFdBUk5fVU5VU0VEX1JFVFVSTiBib29s
IEFyZ3VtZW50Q29kZXI8U3QKIAogdm9pZCBBcmd1bWVudENvZGVyPFNIQTE6OkRpZ2VzdD46OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTSEExOjpEaWdlc3QmIGRpZ2VzdCkKIHsKLSAg
ICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3QuZGF0YSgpLCBzaXplb2YoZGln
ZXN0KSwgMSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0KTsKIH0K
IAogV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgQXJndW1lbnRDb2RlcjxTSEExOjpEaWdlc3Q+Ojpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgU0hBMTo6RGlnZXN0JiBkaWdlc3QpCiB7Ci0gICAgcmV0
dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihk
aWdlc3QpLCAxKTsKKyAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoZGln
ZXN0KTsKIH0KIAogI2lmIEhBVkUoQVVESVRfVE9LRU4pCkluZGV4OiBTb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ1LDEyICs0NSwxMiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgU2ltcGxlQXJndW1l
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KICAgICBzdGF0aWMgdm9pZCBlbmNvZGUo
RW5jb2RlciYgZW5jb2RlciwgY29uc3QgVCYgdCkKICAgICB7Ci0gICAgICAgIGVuY29kZXIuZW5j
b2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZ0KSwg
c2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEoU3BhbiB7ICZ0LCAxIH0pOwogICAgIH0KIAogICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9S
RVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVCYgdCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVp
bnQ4X3QqPigmdCksIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAgIHJldHVybiBkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJnQsIDEgfSk7CiAgICAgfQogfTsKIApA
QCAtNjEsMTMgKzYxLDE0IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBFeHRlbnQ+IHN0
cnUKICAgICB7CiAgICAgICAgIGlmICghRXh0ZW50KQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihhcnJheVJlZmVyZW5jZS5kYXRhKCkpLCBhcnJheVJlZmVyZW5jZS5zaXplKCkg
KiBzaXplb2YoVCksIGFsaWdub2YoVCkpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShTcGFuIHsgYXJyYXlSZWZlcmVuY2UuZGF0YSgpLCBhcnJheVJlZmVyZW5jZS5zaXpl
KCkgfSk7CiAgICAgfQogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEFycmF5UmVmZXJlbmNlVHlw
ZT4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewogICAgICAgICBpZiAoIUV4dGVudCkK
ICAgICAgICAgICAgIHJldHVybiBBcnJheVJlZmVyZW5jZVR5cGUoKTsKLSAgICAgICAgY29uc3Qg
dWludDhfdCogZGF0YSA9IGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhSZWZlcmVuY2UoRXh0ZW50
ICogc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKKworICAgICAgICBjb25zdCBhdXRvKiBkYXRhID0g
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aFJlZmVyZW5jZShFeHRlbnQgKiBzaXplb2YoVCksIGFs
aWdub2YoVCkpOwogICAgICAgICBpZiAoIWRhdGEpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwogICAgICAgICByZXR1cm4gQXJyYXlSZWZlcmVuY2VUeXBlKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgVCo+KGRhdGEpLCBFeHRlbnQpOwpAQCAtODIsNyArODMsNyBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgQXJndW1lbnRDb2RlCiAgICAgICAgIGVuY29kZXIgPDwgc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KGFycmF5UmVmZXJlbmNlLnNpemUoKSk7CiAgICAgICAgIGlmICghYXJy
YXlSZWZlcmVuY2Uuc2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBlbmNvZGVy
LmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihh
cnJheVJlZmVyZW5jZS5kYXRhKCkpLCBhcnJheVJlZmVyZW5jZS5zaXplKCkgKiBzaXplb2YoVCks
IGFsaWdub2YoVCkpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFu
IHsgYXJyYXlSZWZlcmVuY2UuZGF0YSgpLCBhcnJheVJlZmVyZW5jZS5zaXplKCkgfSk7CiAgICAg
fQogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEFycmF5UmVmZXJlbmNlVHlwZT4gZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCiAgICAgewpAQCAtOTYsNyArOTcsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgQXJndW1lbnRDb2RlCiAgICAgICAgIGlmIChVTkxJS0VMWShkYXRhU2l6ZS5o
YXNPdmVyZmxvd2VkKCkpKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAg
ICAgICBjb25zdCB1aW50OF90KiBkYXRhID0gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aFJlZmVy
ZW5jZShkYXRhU2l6ZSwgYWxpZ25vZihUKSk7CisgICAgICAgIGNvbnN0IGF1dG8qIGRhdGEgPSBk
ZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoUmVmZXJlbmNlKGRhdGFTaXplLCBhbGlnbm9mKFQpKTsK
ICAgICAgICAgaWYgKCFkYXRhKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAg
ICAgICAgcmV0dXJuIEFycmF5UmVmZXJlbmNlVHlwZShyZWludGVycHJldF9jYXN0PGNvbnN0IFQq
PihkYXRhKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihzaXplKSk7CkBAIC00MjMsNyArNDI0LDcgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAgIHN0YXRpYyB2b2lk
IGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiB2ZWN0b3IpCiAgICAgewogICAgICAgICBl
bmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2ZWN0b3Iuc2l6ZSgpKTsKLSAgICAgICAg
ZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90Kj4odmVjdG9yLmRhdGEoKSksIHZlY3Rvci5zaXplKCkgKiBzaXplb2YoVCksIGFsaWdub2Yo
VCkpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YSh2ZWN0b3IpOwogICAg
IH0KICAgICAKICAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29k
ZXImIGRlY29kZXIsIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBt
aW5DYXBhY2l0eT4mIHZlY3RvcikKQEAgLTQ0Niw3ICs0NDcsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpCiAgICAgICAgIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4gdGVtcDsKICAgICAgICAgdGVtcC5ncm93
KHNpemUpOwogCi0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4odGVtcC5kYXRhKCkpLCBzaXplICogc2l6ZW9mKFQpLCBh
bGlnbm9mKFQpKSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YSh0
ZW1wKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICB2ZWN0b3Iuc3dhcCh0
ZW1wKTsKQEAgLTQ3Myw3ICs0NzQsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpCiAgICAgICAgIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5k
bGVyLCBtaW5DYXBhY2l0eT4gdmVjdG9yOwogICAgICAgICB2ZWN0b3IuZ3JvdyhzaXplKTsKIAot
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCBzaXplICogc2l6ZW9mKFQpLCBhbGlnbm9mKFQp
KSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YSh2ZWN0b3IpKQog
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgICAgICByZXR1cm4gdmVjdG9y
OwpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJyYXlSZWZlcmVuY2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9BcnJheVJlZmVyZW5jZS5oCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9BcnJheVJlZmVy
ZW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw4IEBACiAKIG5hbWVzcGFjZSBJUEMg
ewogCisvLyBGSVhNRTogUmVwbGFjZSB3aXRoIDx3dGYvU3Bhbi5oPgorCiBpbmxpbmUgY29uc3Rl
eHByIHNpemVfdCBhcnJheVJlZmVyZW5jZUR5bmFtaWNFeHRlbnQgPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPHNpemVfdD46Om1heCgpOwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IEV4dGVu
dCA9IGFycmF5UmVmZXJlbmNlRHluYW1pY0V4dGVudD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL0RlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vSVBDL0RlY29kZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0lQQy9EZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDEzICsyMDYsMTMg
QEAgYm9vbCBEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YQogICAgIHJldHVybiBh
bGlnbmVkQnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihyb3VuZFVwVG9BbGlnbm1lbnQobV9i
dWZmZXJQb3MsIGFsaWdubWVudCksIG1fYnVmZmVyLCBtX2J1ZmZlckVuZCwgc2l6ZSk7CiB9CiAK
LWJvb2wgRGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqIGRhdGEsIHNpemVf
dCBzaXplLCBzaXplX3QgYWxpZ25tZW50KQorYm9vbCBEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0
aERhdGEoU3BhbjxzdGQ6OmJ5dGU+IGRhdGEsIHNpemVfdCBhbGlnbm1lbnQpCiB7Ci0gICAgaWYg
KCFhbGlnbkJ1ZmZlclBvc2l0aW9uKGFsaWdubWVudCwgc2l6ZSkpCisgICAgaWYgKCFhbGlnbkJ1
ZmZlclBvc2l0aW9uKGFsaWdubWVudCwgZGF0YS5zaXplKCkpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBtZW1jcHkoZGF0YSwgbV9idWZmZXJQb3MsIHNpemUpOwotICAgIG1fYnVmZmVy
UG9zICs9IHNpemU7CisgICAgbWVtY3B5KGRhdGEuZGF0YSgpLCBtX2J1ZmZlclBvcywgZGF0YS5z
aXplKCkpOworICAgIG1fYnVmZmVyUG9zICs9IGRhdGEuc2l6ZSgpOwogCiAgICAgcmV0dXJuIHRy
dWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5oCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc5LDcgKzc5LDEzIEBAIHB1YmxpYzoKICAgICBXQVJOX1VOVVNFRF9SRVRVUk4g
Ym9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXJQb3MgIT0gbnVsbHB0cjsgfQog
ICAgIHZvaWQgbWFya0ludmFsaWQoKSB7IG1fYnVmZmVyUG9zID0gbnVsbHB0cjsgfQogCi0gICAg
V0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqIGRh
dGEsIHNpemVfdCwgc2l6ZV90IGFsaWdubWVudCk7CisgICAgV0FSTl9VTlVTRURfUkVUVVJOIGJv
b2wgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48c3RkOjpieXRlPiwgc2l6ZV90IGFsaWdubWVu
dCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBi
b29sIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShUJiYgZGF0YSwgc2l6ZV90IGFsaWdubWVudCA9IGFs
aWdub2YodHlwZW5hbWUgZGVjbHR5cGUoU3BhbihzdGQ6OmRlY2x2YWw8VD4oKSkpOjp2YWx1ZV90
eXBlKSkKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVGaXhlZExlbmd0aERhdGEoYXNXcml0
YWJsZUJ5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSksIGFsaWdubWVudCk7Cisg
ICAgfQogCiAgICAgLy8gVGhlIGRhdGEgaW4gdGhlIHJldHVybmVkIHBvaW50ZXIgaGVyZSB3aWxs
IG9ubHkgYmUgdmFsaWQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgRGVjb2RlciBvYmplY3QuCiAg
ICAgLy8gUmV0dXJucyBudWxscHRyIG9uIGZhaWx1cmUuCkluZGV4OiBTb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0lQQy9FbmNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9FbmNvZGVyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9JUEMvRW5jb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiwxMiArMjAyLDEy
IEBAIHVpbnQ4X3QqIEVuY29kZXI6Omdyb3coc2l6ZV90IGFsaWdubWVudCwKICAgICByZXR1cm4g
bV9idWZmZXIgKyBhbGlnbmVkU2l6ZTsKIH0KIAotdm9pZCBFbmNvZGVyOjplbmNvZGVGaXhlZExl
bmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1l
bnQpCit2b2lkIEVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6
Ynl0ZT4gZGF0YSwgc2l6ZV90IGFsaWdubWVudCkKIHsKLSAgICBBU1NFUlQoIShyZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4oZGF0YSkgJSBhbGlnbm1lbnQpKTsKKyAgICBBU1NFUlQoIShyZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZGF0YS5kYXRhKCkpICUgYWxpZ25tZW50KSk7CiAKLSAg
ICB1aW50OF90KiBidWZmZXIgPSBncm93KGFsaWdubWVudCwgc2l6ZSk7Ci0gICAgbWVtY3B5KGJ1
ZmZlciwgZGF0YSwgc2l6ZSk7CisgICAgYXV0byogYnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQsIGRh
dGEuc2l6ZSgpKTsKKyAgICBtZW1jcHkoYnVmZmVyLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkp
OwogfQogCiB2b2lkIEVuY29kZXI6OmFkZEF0dGFjaG1lbnQoQXR0YWNobWVudCYmIGF0dGFjaG1l
bnQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5oCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorI2lu
Y2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2Ug
SVBDIHsKQEAgLTYwLDcgKzYxLDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgd3JhcEZvclRlc3Rp
bmcoVW5pcXVlUmVmPEVuY29kZXI+JiYpOwogCi0gICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERh
dGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90LCBzaXplX3QgYWxpZ25tZW50KTsKKyAgICB2
b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSwgc2l6
ZV90IGFsaWdubWVudCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgZW5j
b2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCBzaXplX3QgYWxpZ25tZW50ID0gYWxpZ25vZih0
eXBlbmFtZSBkZWNsdHlwZShTcGFuKHN0ZDo6ZGVjbHZhbDxUPigpKSk6OnZhbHVlX3R5cGUpKQor
ICAgIHsKKyAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGFzQnl0ZXMoU3BhbiB7IHN0ZDo6
Zm9yd2FyZDxUPihkYXRhKSB9KSwgYWxpZ25tZW50KTsKKyAgICB9CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgogICAgIEVuY29kZXImIG9wZXJhdG9yPDwoVCYmIHQpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9TaGFyZWRCdWZmZXJDb3B5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TaGFyZWRCdWZmZXJDb3B5LmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU2hhcmVkQnVmZmVyQ29weS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgdm9pZCBTaGFyZWRCdWZmZXJDb3B5
OjplbmNvZGUoRW5jb2RlciYgZQogICAgIGlmICghYnVmZmVyU2l6ZSkKICAgICAgICAgcmV0dXJu
OwogICAgIGZvciAoYXV0byYgc2VnbWVudCA6ICptX2J1ZmZlcikKLSAgICAgICAgZW5jb2Rlci5l
bmNvZGVGaXhlZExlbmd0aERhdGEoc2VnbWVudC5zZWdtZW50LT5kYXRhKCksIHNlZ21lbnQuc2Vn
bWVudC0+c2l6ZSgpLCAxKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEo
c2VnbWVudC5zZWdtZW50LT5ieXRlcygpKTsKIH0KIAogc3RkOjpvcHRpb25hbDxTaGFyZWRCdWZm
ZXJDb3B5PiBTaGFyZWRCdWZmZXJDb3B5OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25FbmNvZGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlvbkVu
Y29kZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
U3RyZWFtQ29ubmVjdGlvbkVuY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBA
QAogCiAjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJNZXNzYWdlTmFtZXMu
aCIKKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
IAogbmFtZXNwYWNlIElQQyB7CkBAIC01MywyMiArNTQsMjggQEAgcHVibGljOgogCiAgICAgflN0
cmVhbUNvbm5lY3Rpb25FbmNvZGVyKCkgPSBkZWZhdWx0OwogCi0gICAgYm9vbCBlbmNvZGVGaXhl
ZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGln
bm1lbnQpCisgICAgYm9vbCBlbmNvZGVGaXhlZExlbmd0aERhdGEoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGRhdGEsIHNpemVfdCBhbGlnbm1lbnQpCiAgICAgewogICAgICAgICBzaXplX3QgYnVmZmVy
UG9pbnRlciA9IHN0YXRpY19jYXN0PHNpemVfdD4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
bV9idWZmZXIgKyBtX2VuY29kZWRTaXplKSk7CiAgICAgICAgIHNpemVfdCBuZXdCdWZmZXJQb2lu
dGVyID0gcm91bmRVcFRvTXVsdGlwbGVPZihhbGlnbm1lbnQsIGJ1ZmZlclBvaW50ZXIpOwogICAg
ICAgICBpZiAobmV3QnVmZmVyUG9pbnRlciA8IGJ1ZmZlclBvaW50ZXIpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIGludHB0cl90IGFsaWduZWRTaXplID0gbV9lbmNvZGVkU2l6
ZSArIChuZXdCdWZmZXJQb2ludGVyIC0gYnVmZmVyUG9pbnRlcik7Ci0gICAgICAgIGlmICghcmVz
ZXJ2ZShhbGlnbmVkU2l6ZSwgc2l6ZSkpCisgICAgICAgIGlmICghcmVzZXJ2ZShhbGlnbmVkU2l6
ZSwgZGF0YS5zaXplKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB1aW50
OF90KiBidWZmZXIgPSBtX2J1ZmZlciArIGFsaWduZWRTaXplOwotICAgICAgICBtZW1jcHkoYnVm
ZmVyLCBkYXRhLCBzaXplKTsKLSAgICAgICAgbV9lbmNvZGVkU2l6ZSA9IGFsaWduZWRTaXplICsg
c2l6ZTsKKyAgICAgICAgYXV0byogYnVmZmVyID0gbV9idWZmZXIgKyBhbGlnbmVkU2l6ZTsKKyAg
ICAgICAgbWVtY3B5KGJ1ZmZlciwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICAgICAg
bV9lbmNvZGVkU2l6ZSA9IGFsaWduZWRTaXplICsgZGF0YS5zaXplKCk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBlbmNv
ZGVGaXhlZExlbmd0aERhdGEoVCYmIGRhdGEsIHNpemVfdCBhbGlnbm1lbnQgPSBhbGlnbm9mKHR5
cGVuYW1lIGRlY2x0eXBlKFNwYW4oc3RkOjpkZWNsdmFsPFQ+KCkpKTo6dmFsdWVfdHlwZSkpCisg
ICAgeworICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEoYXNCeXRlcyhTcGFuIHsgc3RkOjpm
b3J3YXJkPFQ+KGRhdGEpIH0pLCBhbGlnbm1lbnQpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CiAgICAgU3RyZWFtQ29ubmVjdGlvbkVuY29kZXImIG9wZXJhdG9yPDwoVCYmIHQp
CiAgICAgewogICAgICAgICBBcmd1bWVudENvZGVyPHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpy
ZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCB2b2lkPjo6ZW5jb2RlKCp0aGlzLCBzdGQ6OmZvcndhcmQ8
VD4odCkpOwpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJD
b3JlQXJndW1lbnRDb2RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNyArMTQ0LDcgQEAg
c3RhdGljIHZvaWQgZW5jb2RlU2hhcmVkQnVmZmVyKEVuY29kZXImIAogICAgIC8vIG92ZXIgdGhl
IElQQy4gQ29ubmVjdGlvblVuaXguY3BwIGFscmVhZHkgdXNlcyBzaGFyZWQgbWVtb3J5IHRvIHNl
bmQgYW55IElQQyBtZXNzYWdlIHRoYXQgaXMKICAgICAvLyB0b28gbGFyZ2UuIFNlZSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4NTcxLgogICAgIGZvciAoY29uc3Qg
YXV0byYgZWxlbWVudCA6ICpidWZmZXIpCi0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKGVsZW1lbnQuc2VnbWVudC0+ZGF0YSgpLCBlbGVtZW50LnNlZ21lbnQtPnNpemUoKSwg
MSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGVsZW1lbnQuc2VnbWVu
dC0+Ynl0ZXMoKSk7CiAjZWxzZQogICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKICAg
ICBhdXRvIHNoYXJlZE1lbW9yeUJ1ZmZlciA9IFNoYXJlZE1lbW9yeTo6Y29weUJ1ZmZlcigqYnVm
ZmVyKTsKQEAgLTE4MCw3ICsxODAsNyBAQCBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wg
ZGVjb2RlU2hhCiAKICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKICAgICBkYXRhLmdyb3coYnVm
ZmVyU2l6ZSk7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShkYXRhLmRh
dGEoKSwgZGF0YS5zaXplKCksIDEpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0
aERhdGEoZGF0YSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJ1ZmZlciA9IFNoYXJl
ZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoZGF0YSkpOwpJbmRleDogU291cmNlL1dlYktpdC9TaGFy
ZWQvbWFjL0F1eGlsaWFyeVByb2Nlc3NNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9TaGFyZWQvbWFjL0F1eGlsaWFyeVByb2Nlc3NNYWMubW0JKHJldmlzaW9uIDI3ODgwOSkKKysr
IFNvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9BdXhpbGlhcnlQcm9jZXNzTWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0zMjEsNyArMzIxLDcgQEAgc3RhdGljIFN0cmluZyBzYW5kYm94RmlsZVBhdGgo
Y29uc3QgU3RyaQogICAgIGNyeXB0by0+YWRkQnl0ZXMoaGVhZGVyLmRhdGEoKSwgaGVhZGVyLmxl
bmd0aCgpKTsKICAgICBhdXRvIGhhc2ggPSBjcnlwdG8tPmNvbXB1dGVIYXNoKCk7CiAKLSAgICBy
ZXR1cm4gbWFrZVN0cmluZyhkaXJlY3RvcnlQYXRoLCAiL0NvbXBpbGVkU2FuZGJveCsiLCBiYXNl
NjRVUkxFbmNvZGVkKGhhc2guZGF0YSgpLCBoYXNoLnNpemUoKSkpOworICAgIHJldHVybiBtYWtl
U3RyaW5nKGRpcmVjdG9yeVBhdGgsICIvQ29tcGlsZWRTYW5kYm94KyIsIGJhc2U2NFVSTEVuY29k
ZWQoaGFzaCkpOwogfQogCiBzdGF0aWMgYm9vbCBlbnN1cmVTYW5kYm94Q2FjaGVEaXJlY3Rvcnko
Y29uc3QgU2FuZGJveEluZm8mIGluZm8pCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4v
V2ViQ29yZUFyZ3VtZW50Q29kZXJzV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1NoYXJlZC93aW4vV2ViQ29yZUFyZ3VtZW50Q29kZXJzV2luLmNwcAkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvd2luL1dlYkNvcmVBcmd1bWVudENvZGVyc1dpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDEyICs1MSwxMiBAQCBzdGQ6Om9wdGlvbmFsPEZvbnRB
dHRyaWJ1dGVzPiBBcmd1bWVudENvCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPExP
R0ZPTlQ+IHsKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qg
TE9HRk9OVCYgbG9nRm9udCkKICAgICB7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZsb2dGb250KSwgc2l6ZW9m
IGxvZ0ZvbnQsIDEpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFu
IHsgJmxvZ0ZvbnQsIDEgfSwgMSk7CiAgICAgfQogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPExP
R0ZPTlQ+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKICAgICAgICAgTE9HRk9OVCBs
b2dGb250OwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZsb2dGb250KSwgc2l6ZW9mKGxvZ0ZvbnQpLCAxKSkKKyAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJmxvZ0ZvbnQs
IDEgfSwgMSkpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAgICByZXR1
cm4gbG9nRm9udDsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJ
Q29udGVudFJ1bGVMaXN0U3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSwxOCArMTMxLDIwIEBAIHN0YXRpYyBXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6RGF0YSBlbmNvZGUKICAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmNvbmRpdGlv
bmVkRmlsdGVyc0J5dGVjb2RlU2l6ZTsKICAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmNvbmRpdGlv
bnNBcHBseU9ubHlUb0RvbWFpbjsKIAotICAgIEFTU0VSVChlbmNvZGVyLmJ1ZmZlclNpemUoKSA9
PSBDb250ZW50UnVsZUxpc3RGaWxlSGVhZGVyU2l6ZSk7Ci0gICAgcmV0dXJuIFdlYktpdDo6TmV0
d29ya0NhY2hlOjpEYXRhKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsK
KyAgICBBU1NFUlQoZW5jb2Rlci5idWZmZXIoKS5zaXplKCkgPT0gQ29udGVudFJ1bGVMaXN0Rmls
ZUhlYWRlclNpemUpOworICAgIHJldHVybiBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YSB7IGVu
Y29kZXIuYnVmZmVyKCkgfTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBnZXREYXRh
KGNvbnN0IFQmLCBjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYp
OwotdGVtcGxhdGU8PiB2b2lkIGdldERhdGEoY29uc3QgV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRh
dGEmIGRhdGEsIGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCosIHNpemVfdCk+JiBm
dW5jdGlvbikKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgZ2V0RGF0YShjb25zdCBUJiwgY29u
c3QgRnVuY3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYpOworCit0ZW1wbGF0ZTw+
IHZvaWQgZ2V0RGF0YShjb25zdCBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YSYgZGF0YSwgY29u
c3QgRnVuY3Rpb248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYgZnVuY3Rpb24pCiB7CiAg
ICAgZGF0YS5hcHBseShmdW5jdGlvbik7CiB9Ci10ZW1wbGF0ZTw+IHZvaWQgZ2V0RGF0YShjb25z
dCBXZWJDb3JlOjpTaGFyZWRCdWZmZXImIGRhdGEsIGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3Qg
dWludDhfdCosIHNpemVfdCk+JiBmdW5jdGlvbikKKwordGVtcGxhdGU8PiB2b2lkIGdldERhdGEo
Y29uc3QgV2ViQ29yZTo6U2hhcmVkQnVmZmVyJiBkYXRhLCBjb25zdCBGdW5jdGlvbjxib29sKFNw
YW48Y29uc3Qgc3RkOjpieXRlPik+JiBmdW5jdGlvbikKIHsKLSAgICBmdW5jdGlvbihkYXRhLmRh
dGEoKSwgZGF0YS5zaXplKCkpOworICAgIGZ1bmN0aW9uKGRhdGEuYnl0ZXMoKSk7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC0xNTAsMTMgKzE1MiwxMyBAQCBzdGF0aWMgc3RkOjpvcHRp
b25hbDxDb250ZW50UnVsZUxpc3RNZXRhCiB7CiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CiAg
ICAgQ29udGVudFJ1bGVMaXN0TWV0YURhdGEgbWV0YURhdGE7Ci0gICAgZ2V0RGF0YShmaWxlRGF0
YSwgWyZtZXRhRGF0YSwgJnN1Y2Nlc3MsICZmaWxlRGF0YV0oY29uc3QgdWludDhfdCogZGF0YSwg
c2l6ZV90IHNpemUpIHsKKyAgICBnZXREYXRhKGZpbGVEYXRhLCBbJm1ldGFEYXRhLCAmc3VjY2Vz
cywgJmZpbGVEYXRhXShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkgewogICAgICAgICAvLyBU
aGUgZmlsZSBkYXRhIHNob3VsZCBiZSBtYXBwZWQgaW50byBvbmUgY29udGludW91cyBtZW1vcnkg
c2VnbWVudCBzbyB0aGUgc2l6ZQogICAgICAgICAvLyBwYXNzZWQgdG8gdGhlIGFwcGxpZXIgc2hv
dWxkIGFsd2F5cyBlcXVhbCB0aGUgZGF0YSBzaXplLgotICAgICAgICBpZiAoc2l6ZSAhPSBmaWxl
RGF0YS5zaXplKCkpCisgICAgICAgIGlmIChkYXRhLnNpemUoKSAhPSBmaWxlRGF0YS5zaXplKCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6
RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOworICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpE
ZWNvZGVyIGRlY29kZXIgeyBkYXRhIH07CiAgICAgICAgIAogICAgICAgICBzdGQ6Om9wdGlvbmFs
PHVpbnQzMl90PiB2ZXJzaW9uOwogICAgICAgICBkZWNvZGVyID4+IHZlcnNpb247CkBAIC0yMjgs
OCArMjMwLDggQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TWFwcGVkRGF0YT4gb3BlbkFuZAogc3Rh
dGljIGJvb2wgd3JpdGVEYXRhVG9GaWxlKGNvbnN0IFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRh
JiBmaWxlRGF0YSwgUGxhdGZvcm1GaWxlSGFuZGxlIGZkKQogewogICAgIGJvb2wgc3VjY2VzcyA9
IHRydWU7Ci0gICAgZmlsZURhdGEuYXBwbHkoW2ZkLCAmc3VjY2Vzc10oY29uc3QgdWludDhfdCog
ZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgaWYgKHdyaXRlVG9GaWxlKGZkLCBkYXRhLCBz
aXplKSA9PSAtMSkgeworICAgIGZpbGVEYXRhLmFwcGx5KFtmZCwgJnN1Y2Nlc3NdKFNwYW48Y29u
c3Qgc3RkOjpieXRlPiBkYXRhKSB7CisgICAgICAgIGlmICh3cml0ZVRvRmlsZShmZCwgZGF0YS5k
YXRhKCksIGRhdGEuc2l6ZSgpKSA9PSAtMSkgewogICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNl
OwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVu
dGljYXRpb25QYW5lbC5tbQkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTU1LDYgKzU1LDcgQEAKICNpbXBvcnQgPHBhbC9jcnlwdG8vQ3J5cHRvRGlnZXN0Lmg+
CiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNp
bXBvcnQgPHd0Zi9jb2NvYS9TcGFuQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JD
b2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+CiAKQEAgLTcwLDcgKzcxLDcgQEAg
c3RhdGljIFJldGFpblB0cjxOU0RhdGE+IHByb2R1Y2VDbGllbnREYQogICAgICAgICBbZGljdGlv
bmFyeSBzZXRPYmplY3Q6QCJ3ZWJhdXRobi5nZXQiIGZvcktleTpAInR5cGUiXTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQotICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpiYXNlNjRVUkxFbmNvZGVU
b1N0cmluZyhjaGFsbGVuZ2UuYnl0ZXMsIGNoYWxsZW5nZS5sZW5ndGgpIGZvcktleTpAImNoYWxs
ZW5nZSJdOworICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpiYXNlNjRVUkxFbmNvZGVUb1N0cmlu
Zyhhc0J5dGVzKGNoYWxsZW5nZSkpIGZvcktleTpAImNoYWxsZW5nZSJdOwogICAgIFtkaWN0aW9u
YXJ5IHNldE9iamVjdDpvcmlnaW4gZm9yS2V5OkAib3JpZ2luIl07CiAKICAgICByZXR1cm4gW05T
SlNPTlNlcmlhbGl6YXRpb24gZGF0YVdpdGhKU09OT2JqZWN0OmRpY3Rpb25hcnkuZ2V0KCkgb3B0
aW9uczpOU0pTT05Xcml0aW5nU29ydGVkS2V5cyBlcnJvcjpuaWxdOwpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9y
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0
aW9uL0NvY29hL0xvY2FsQXV0aGVudGljYXRvci5tbQkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxBdXRoZW50
aWNhdG9yLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIHN0YXRpYyBpbmxpbmUg
SGFzaFNldDxTdHJpbmc+IHByb2R1Y2VIYXMKICAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0Owog
ICAgIGZvciAoYXV0byYgY3JlZGVudGlhbERlc2NyaXB0b3IgOiBjcmVkZW50aWFsRGVzY3JpcHRv
cnMpIHsKICAgICAgICAgaWYgKGVtcHR5VHJhbnNwb3J0c09yQ29udGFpbihjcmVkZW50aWFsRGVz
Y3JpcHRvci50cmFuc3BvcnRzLCBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpJbnRlcm5hbCkgJiYg
Y3JlZGVudGlhbERlc2NyaXB0b3IudHlwZSA9PSBQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVi
bGljS2V5ICYmIGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9yLnNpemUoKSA9PSBjcmVkZW50
aWFsSWRMZW5ndGgpCi0gICAgICAgICAgICByZXN1bHQuYWRkKGJhc2U2NEVuY29kZVRvU3RyaW5n
KGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9yLmRhdGEoKSwgY3JlZGVudGlhbERlc2NyaXB0
b3IuaWRWZWN0b3Iuc2l6ZSgpKSk7CisgICAgICAgICAgICByZXN1bHQuYWRkKGJhc2U2NEVuY29k
ZVRvU3RyaW5nKGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9yKSk7CiAgICAgfQogICAgIHJl
dHVybiByZXN1bHQ7CiB9CkBAIC0yMzMsNyArMjMzLDcgQEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0
b3I6Om1ha2VDcmVkZW50aWFsKAogICAgICAgICBpZiAobm90Rm91bmQgIT0gbV9leGlzdGluZ0Ny
ZWRlbnRpYWxzLmZpbmRNYXRjaGluZyhbJmV4Y2x1ZGVDcmVkZW50aWFsSWRzXSAoYXV0byYgY3Jl
ZGVudGlhbCkgewogICAgICAgICAgICAgYXV0byogcmF3SWQgPSBjcmVkZW50aWFsLT5yYXdJZCgp
OwogICAgICAgICAgICAgQVNTRVJUKHJhd0lkKTsKLSAgICAgICAgICAgIHJldHVybiBleGNsdWRl
Q3JlZGVudGlhbElkcy5jb250YWlucyhiYXNlNjRFbmNvZGVUb1N0cmluZyhyYXdJZC0+ZGF0YSgp
LCByYXdJZC0+Ynl0ZUxlbmd0aCgpKSk7CisgICAgICAgICAgICByZXR1cm4gZXhjbHVkZUNyZWRl
bnRpYWxJZHMuY29udGFpbnMoYmFzZTY0RW5jb2RlVG9TdHJpbmcocmF3SWQtPmJ5dGVzKCkpKTsK
ICAgICAgICAgfSkpIHsKICAgICAgICAgICAgIHJlY2VpdmVFeGNlcHRpb24oeyBOb3RBbGxvd2Vk
RXJyb3IsICJBdCBsZWFzdCBvbmUgY3JlZGVudGlhbCBtYXRjaGVzIGFuIGVudHJ5IG9mIHRoZSBl
eGNsdWRlQ3JlZGVudGlhbHMgbGlzdCBpbiB0aGUgcGxhdGZvcm0gYXR0YWNoZWQgYXV0aGVudGlj
YXRvci4iX3MgfSwgV2ViQXV0aGVudGljYXRpb25TdGF0dXM6OkxBRXhjbHVkZUNyZWRlbnRpYWxz
TWF0Y2hlZCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC01MTAsNyArNTEwLDcgQEAgdm9pZCBM
b2NhbEF1dGhlbnRpY2F0b3I6OmdldEFzc2VydGlvbigpCiAgICAgICAgIH0KIAogICAgICAgICBh
dXRvKiByYXdJZCA9IGNyZWRlbnRpYWwtPnJhd0lkKCk7Ci0gICAgICAgIGlmIChhbGxvd0NyZWRl
bnRpYWxJZHMuY29udGFpbnMoYmFzZTY0RW5jb2RlVG9TdHJpbmcocmF3SWQtPmRhdGEoKSwgcmF3
SWQtPmJ5dGVMZW5ndGgoKSkpKQorICAgICAgICBpZiAoYWxsb3dDcmVkZW50aWFsSWRzLmNvbnRh
aW5zKGJhc2U2NEVuY29kZVRvU3RyaW5nKHJhd0lkLT5ieXRlcygpKSkpCiAgICAgICAgICAgICBh
c3NlcnRpb25SZXNwb25zZXMudW5jaGVja2VkQXBwZW5kKGNyZWRlbnRpYWwuY29weVJlZigpKTsK
ICAgICB9CiAgICAgaWYgKGFzc2VydGlvblJlc3BvbnNlcy5pc0VtcHR5KCkpIHsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0xvY2FsQ29u
bmVjdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRo
ZW50aWNhdGlvbi9Nb2NrL01vY2tMb2NhbENvbm5lY3Rpb24ubW0JKHJldmlzaW9uIDI3ODgwOSkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0xv
Y2FsQ29ubmVjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQg
TW9ja0xvY2FsQ29ubmVjdGlvbjo6ZmlsdGVyUmVzcG9uc2UKICAgICBmb3IgKDsgaXRyICE9IHJl
c3BvbnNlcy5lbmQoKTsgKytpdHIpIHsKICAgICAgICAgYXV0byogcmF3SWQgPSBpdHItPmdldCgp
LnJhd0lkKCk7CiAgICAgICAgIEFTU0VSVChyYXdJZCk7Ci0gICAgICAgIGF1dG8gcmF3SWRCYXNl
NjQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhyYXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0
aCgpKTsKKyAgICAgICAgYXV0byByYXdJZEJhc2U2NCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKHJh
d0lkLT5ieXRlcygpKTsKICAgICAgICAgaWYgKHJhd0lkQmFzZTY0ID09IHByZWZlcnJlZENyZWRl
bnRpYWxJZEJhc2U2NCkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL21hYy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9MZWdhY3lTZXNzaW9uU3RhdGVDb2Rp
bmcuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMv
TGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDcgKzEy
OSw3IEBAIHB1YmxpYzoKICAgICAgICAgKnRoaXMgPDwgbGVuZ3RoOwogCiAgICAgICAgICp0aGlz
IDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihsZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKLSAgICAg
ICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+
KFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpLmdldCgpKSwgbGVuZ3Ro
ICogc2l6ZW9mKFVDaGFyKSwgYWxpZ25vZihVQ2hhcikpOworICAgICAgICBlbmNvZGVGaXhlZExl
bmd0aERhdGEoU3BhbiB7IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygp
LmdldCgpLCBsZW5ndGggfSk7CiAKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KQEAgLTEz
Nyw3ICsxMzcsNyBAQCBwdWJsaWM6CiAgICAgSGlzdG9yeUVudHJ5RGF0YUVuY29kZXImIG9wZXJh
dG9yPDwoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2YWx1ZSkKICAgICB7CiAgICAgICAgICp0aGlz
IDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1ZS5zaXplKCkpOwotICAgICAgICBlbmNvZGVG
aXhlZExlbmd0aERhdGEodmFsdWUuZGF0YSgpLCB2YWx1ZS5zaXplKCksIDEpOworICAgICAgICBl
bmNvZGVGaXhlZExlbmd0aERhdGEodmFsdWUpOwogCiAgICAgICAgIHJldHVybiAqdGhpczsKICAg
ICB9CkBAIC0xNDUsNyArMTQ1LDcgQEAgcHVibGljOgogICAgIEhpc3RvcnlFbnRyeURhdGFFbmNv
ZGVyJiBvcGVyYXRvcjw8KGNvbnN0IFZlY3RvcjxjaGFyPiYgdmFsdWUpCiAgICAgewogICAgICAg
ICAqdGhpcyA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUuc2l6ZSgpKTsKLSAgICAgICAg
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZh
bHVlLmRhdGEoKSksIHZhbHVlLnNpemUoKSwgMSk7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3Ro
RGF0YSh2YWx1ZSk7CiAKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KQEAgLTIwNiwxNyAr
MjA2LDIzIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
YXJpdGhtZXRpYzxUeXBlPjo6dmFsdWUsICIiKTsKIAotICAgICAgICBlbmNvZGVGaXhlZExlbmd0
aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnZhbHVlKSwgc2l6ZW9mKHZhbHVlKSwg
c2l6ZW9mKHZhbHVlKSk7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJnZh
bHVlLCAxIH0sIHNpemVvZih2YWx1ZSkpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQog
Ci0gICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6
ZV90IHNpemUsIHVuc2lnbmVkIGFsaWdubWVudCkKKyAgICB2b2lkIGVuY29kZUZpeGVkTGVuZ3Ro
RGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSwgdW5zaWduZWQgYWxpZ25tZW50KQogICAg
IHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGF0YSB8fCAhc2l6ZSk7Ci0gICAgICAgIEFTU0VS
VCghKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihkYXRhKSAlIGFsaWdubWVudCkpOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChkYXRhLmRhdGEoKSB8fCAhZGF0YS5zaXplKCkpOworICAgICAg
ICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZGF0YS5kYXRhKCkpICUgYWxp
Z25tZW50KSk7CiAKLSAgICAgICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQsIHNp
emUpOwotICAgICAgICBtZW1jcHkoYnVmZmVyLCBkYXRhLCBzaXplKTsKKyAgICAgICAgYXV0byog
YnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQsIGRhdGEuc2l6ZSgpKTsKKyAgICAgICAgbWVtY3B5KGJ1
ZmZlciwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCB1bnNp
Z25lZCBhbGlnbm1lbnQgPSBhbGlnbm9mKHR5cGVuYW1lIGRlY2x0eXBlKFNwYW4oc3RkOjpkZWNs
dmFsPFQ+KCkpKTo6dmFsdWVfdHlwZSkpCisgICAgeworICAgICAgICBlbmNvZGVGaXhlZExlbmd0
aERhdGEoYXNCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pLCBhbGlnbm1lbnQp
OwogICAgIH0KIAogICAgIHVpbnQ4X3QqIGdyb3codW5zaWduZWQgYWxpZ25tZW50LCBzaXplX3Qg
c2l6ZSkKQEAgLTYwMSw3ICs2MDcsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgVUNoYXIqIGJ1ZmZl
cjsKICAgICAgICAgYXV0byBzdHJpbmcgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVu
Z3RoLCBidWZmZXIpOwotICAgICAgICBkZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSwgYWxpZ25vZihV
Q2hhcikpOworICAgICAgICBkZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IGJ1ZmZlciwgbGVu
Z3RoIH0pOwogCiAgICAgICAgIHZhbHVlID0gc3RyaW5nOwogICAgICAgICByZXR1cm4gKnRoaXM7
CkBAIC03MzcsMTcgKzc0MywyMyBAQCBwcml2YXRlOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfYXJpdGhtZXRpYzxUeXBlPjo6dmFsdWUsICIiKTsKICAgICAgICAgdmFsdWUgPSBUeXBl
KCk7CiAKLSAgICAgICAgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDhfdCo+KCZ2YWx1ZSksIHNpemVvZih2YWx1ZSksIHNpemVvZih2YWx1ZSkpOworICAgICAgICBk
ZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZ2YWx1ZSwgMSB9LCBzaXplb2YodmFsdWUpKTsK
ICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAotICAgIHZvaWQgZGVjb2RlRml4ZWRMZW5n
dGhEYXRhKHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBhbGlnbm1lbnQpCisg
ICAgdm9pZCBkZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbjxzdGQ6OmJ5dGU+IGRhdGEsIHVuc2ln
bmVkIGFsaWdubWVudCkKICAgICB7Ci0gICAgICAgIGlmICghYWxpZ25CdWZmZXJQb3NpdGlvbihh
bGlnbm1lbnQsIHNpemUpKQorICAgICAgICBpZiAoIWFsaWduQnVmZmVyUG9zaXRpb24oYWxpZ25t
ZW50LCBkYXRhLnNpemUoKSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbWVtY3B5
KGRhdGEsIG1fYnVmZmVyLCBzaXplKTsKLSAgICAgICAgbV9idWZmZXIgKz0gc2l6ZTsKKyAgICAg
ICAgbWVtY3B5KGRhdGEuZGF0YSgpLCBtX2J1ZmZlciwgZGF0YS5zaXplKCkpOworICAgICAgICBt
X2J1ZmZlciArPSBkYXRhLnNpemUoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIHZvaWQgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCB1bnNpZ25lZCBhbGln
bm1lbnQgPSBhbGlnbm9mKHR5cGVuYW1lIGRlY2x0eXBlKFNwYW4oc3RkOjpkZWNsdmFsPFQ+KCkp
KTo6dmFsdWVfdHlwZSkpCisgICAgeworICAgICAgICBkZWNvZGVGaXhlZExlbmd0aERhdGEoYXNX
cml0YWJsZUJ5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSksIGFsaWdubWVudCk7
CiAgICAgfQogCiAgICAgYm9vbCBhbGlnbkJ1ZmZlclBvc2l0aW9uKHVuc2lnbmVkIGFsaWdubWVu
dCwgc2l6ZV90IHNpemUpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9X
ZWJTb2NrZXRDaGFubmVsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvTmV0d29yay9XZWJTb2NrZXRDaGFubmVsLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU5LDggKzU5LDggQEAgTmV0d29ya1NlbmRRdWV1ZSBXZWJTb2NrZXRDaGFu
bmVsOjpjcmVhdAogICAgICAgICBjaGFubmVsLm5vdGlmeVNlbmRGcmFtZShXZWJTb2NrZXRGcmFt
ZTo6T3BDb2RlOjpPcENvZGVUZXh0LCB1dGY4U3RyaW5nLmRhdGFBc1VJbnQ4UHRyKCksIHV0ZjhT
dHJpbmcubGVuZ3RoKCkpOwogICAgICAgICBjaGFubmVsLnNlbmRNZXNzYWdlKE1lc3NhZ2VzOjpO
ZXR3b3JrU29ja2V0Q2hhbm5lbDo6U2VuZFN0cmluZyB7IElQQzo6RGF0YVJlZmVyZW5jZSB7IHV0
ZjhTdHJpbmcuZGF0YUFzVUludDhQdHIoKSwgdXRmOFN0cmluZy5sZW5ndGgoKSB9IH0sIHV0ZjhT
dHJpbmcubGVuZ3RoKCkpOwogICAgIH0sIFsmY2hhbm5lbF0oYXV0byYgc3BhbikgewotICAgICAg
ICBjaGFubmVsLm5vdGlmeVNlbmRGcmFtZShXZWJTb2NrZXRGcmFtZTo6T3BDb2RlOjpPcENvZGVC
aW5hcnksIHNwYW4uZGF0YSgpLCBzcGFuLnNpemUoKSk7Ci0gICAgICAgIGNoYW5uZWwuc2VuZE1l
c3NhZ2UoTWVzc2FnZXM6Ok5ldHdvcmtTb2NrZXRDaGFubmVsOjpTZW5kRGF0YSB7IElQQzo6RGF0
YVJlZmVyZW5jZSB7IHNwYW4uZGF0YSgpLCBzcGFuLnNpemUoKSB9IH0sIHNwYW4uc2l6ZSgpKTsK
KyAgICAgICAgY2hhbm5lbC5ub3RpZnlTZW5kRnJhbWUoV2ViU29ja2V0RnJhbWU6Ok9wQ29kZTo6
T3BDb2RlQmluYXJ5LCByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzcGFuLmRhdGEo
KSksIHNwYW4uc2l6ZSgpKTsKKyAgICAgICAgY2hhbm5lbC5zZW5kTWVzc2FnZShNZXNzYWdlczo6
TmV0d29ya1NvY2tldENoYW5uZWw6OlNlbmREYXRhIHsgSVBDOjpEYXRhUmVmZXJlbmNlIHsgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3Bhbi5kYXRhKCkpLCBzcGFuLnNpemUoKSB9
IH0sIHNwYW4uc2l6ZSgpKTsKICAgICB9LCBbJmNoYW5uZWxdKEV4Y2VwdGlvbkNvZGUgZXhjZXB0
aW9uQ29kZSkgewogICAgICAgICBhdXRvIGNvZGUgPSBzdGF0aWNfY2FzdDxpbnQ+KGV4Y2VwdGlv
bkNvZGUpOwogICAgICAgICBjaGFubmVsLmZhaWwobWFrZVN0cmluZygiRmFpbGVkIHRvIGxvYWQg
QmxvYjogZXhjZXB0aW9uIGNvZGUgPSAiLCBjb2RlKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcAkocmV2aXNpb24gMjc4
ODA5KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0MywxMiArNDQzLDcgQEAgSlNWYWx1ZVJlZiBKU1NoYXJl
ZE1lbW9yeTo6cmVhZEJ5dGVzKEpTQwogICAgIHJldHVybiB0b1JlZihqc0FycmF5QnVmZmVyKTsK
IH0KIAotc3RydWN0IEFycmF5QnVmZmVyRGF0YSB7Ci0gICAgdm9pZCogYnVmZmVyIHsgbnVsbHB0
ciB9OwotICAgIHNpemVfdCBsZW5ndGggeyAwIH07Ci19OwotCi1zdGF0aWMgQXJyYXlCdWZmZXJE
YXRhIGFycmF5QnVmZmVyRGF0YUZyb21WYWx1ZVJlZihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNU
eXBlZEFycmF5VHlwZSB0eXBlLCBKU1ZhbHVlUmVmIHZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCitzdGF0aWMgU3BhbjxzdGQ6OmJ5dGU+IGFycmF5QnVmZmVyRGF0YUZyb21WYWx1ZVJl
ZihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNUeXBlZEFycmF5VHlwZSB0eXBlLCBKU1ZhbHVlUmVm
IHZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgYXV0byBvYmplY3RSZWYg
PSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgdmFsdWVSZWYsIGV4Y2VwdGlvbik7CiAgICAgaWYg
KCFvYmplY3RSZWYpCkBAIC00NjksNyArNDY0LDcgQEAgc3RhdGljIEFycmF5QnVmZmVyRGF0YSBh
cnJheUJ1ZmZlckRhdGFGcgogICAgIGVsc2UKICAgICAgICAgbGVuZ3RoID0gSlNPYmplY3RHZXRU
eXBlZEFycmF5Qnl0ZUxlbmd0aChjb250ZXh0LCBvYmplY3RSZWYsIGV4Y2VwdGlvbik7CiAKLSAg
ICByZXR1cm4geyBidWZmZXIsIGxlbmd0aCB9OworICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHN0
ZDo6Ynl0ZSo+KGJ1ZmZlciksIGxlbmd0aCB9OwogfQogCiBKU1ZhbHVlUmVmIEpTU2hhcmVkTWVt
b3J5Ojp3cml0ZUJ5dGVzKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYg
YXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKQEAgLTQ4NywxMyArNDgyLDEzIEBA
IEpTVmFsdWVSZWYgSlNTaGFyZWRNZW1vcnk6OndyaXRlQnl0ZXMoSlMKICAgICB9CiAKICAgICBh
dXRvIGRhdGEgPSBhcnJheUJ1ZmZlckRhdGFGcm9tVmFsdWVSZWYoY29udGV4dCwgdHlwZSwgYXJn
dW1lbnRzWzBdLCBleGNlcHRpb24pOwotICAgIGlmICghZGF0YS5idWZmZXIpIHsKKyAgICBpZiAo
IWRhdGEuZGF0YSgpKSB7CiAgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29u
dGV4dCwgIkNvdWxkIG5vdCByZWFkIHRoZSBidWZmZXIiX3MpOwogICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAgICAgfQogCiAgICAgc2l6ZV90IG9mZnNldCA9
IDA7Ci0gICAgc2l6ZV90IGxlbmd0aCA9IGRhdGEubGVuZ3RoOworICAgIHNpemVfdCBsZW5ndGgg
PSBkYXRhLnNpemUoKTsKICAgICBzaXplX3Qgc2hhcmVkTWVtb3J5U2l6ZSA9IGpzU2hhcmVkTWVt
b3J5LT5tX3NoYXJlZE1lbW9yeS0+c2l6ZSgpOwogCiAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0g
dG9KUyhjb250ZXh0KTsKQEAgLTUyNiw3ICs1MjEsNyBAQCBKU1ZhbHVlUmVmIEpTU2hhcmVkTWVt
b3J5Ojp3cml0ZUJ5dGVzKEpTCiAgICAgICAgIGxlbmd0aCA9ICpsZW5ndGhWYWx1ZTsKICAgICB9
CiAKLSAgICBtZW1jcHkoc3RhdGljX2Nhc3Q8dWludDhfdCo+KGpzU2hhcmVkTWVtb3J5LT5tX3No
YXJlZE1lbW9yeS0+ZGF0YSgpKSArIG9mZnNldCwgZGF0YS5idWZmZXIsIGxlbmd0aCk7CisgICAg
bWVtY3B5KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihqc1NoYXJlZE1lbW9yeS0+bV9zaGFyZWRNZW1v
cnktPmRhdGEoKSkgKyBvZmZzZXQsIGRhdGEuZGF0YSgpLCBsZW5ndGgpOwogCiAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQpAQCAtNjg4LDEwICs2ODMsMTAgQEAg
c3RhdGljIGJvb2wgZW5jb2RlVHlwZWRBcnJheShJUEM6OkVuY29kZQogICAgIEFTU0VSVCh0eXBl
ICE9IGtKU1R5cGVkQXJyYXlUeXBlTm9uZSk7CiAKICAgICBhdXRvIGRhdGEgPSBhcnJheUJ1ZmZl
ckRhdGFGcm9tVmFsdWVSZWYoY29udGV4dCwgdHlwZSwgdmFsdWVSZWYsIGV4Y2VwdGlvbik7Ci0g
ICAgaWYgKCFkYXRhLmJ1ZmZlcikKKyAgICBpZiAoIWRhdGEuZGF0YSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmJ1ZmZlciksIGRhdGEubGVuZ3RoLCAxKTsKKyAg
ICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShkYXRhKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9FbnZpcm9ubWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9FbnZpcm9ubWVudC5jcHAJKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRW52aXJvbm1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTYsNyArMTU2LDcgQEAgYm9vbCBFbnZpcm9ubWVudDo6Y29tcHV0ZUlz
RGVidWdIZWFwRW5hYgogICAgIHJldHVybiB0cnVlOwogI2VuZGlmCiAKLSAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKSW5kZXg6
IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDI3ODgwOSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3
IEBACisyMDIxLTA2LTExICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAg
ICBBZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2Fp
cm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmNwcDoKKyAgICAgICAgKGNvbXB1dGVTSEExSGFzaFN0
cmluZ0ZvckJpdG1hcENvbnRleHQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2NnL1BpeGVs
RHVtcFN1cHBvcnRDRy5jcHA6CisgICAgICAgIChjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JCaXRt
YXBDb250ZXh0KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9CbG9vbUZpbHRl
ci5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpnZW5lcmF0ZVJhbmRvbURpZ2VzdHMpOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2NvY29h
L0hUVFBTZXJ2ZXIubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9uOjp3ZWJT
b2NrZXRIYW5kc2hha2UpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvY2Fpcm8vVGVzdElu
dm9jYXRpb25DYWlyby5jcHA6CisgICAgICAgIChXVFI6OmNvbXB1dGVTSEExSGFzaFN0cmluZ0Zv
ckNhaXJvU3VyZmFjZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2Nh
dGlvbkNHLmNwcDoKKyAgICAgICAgKFdUUjo6Y29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQ29udGV4
dCk6CisKIDIwMjEtMDYtMTEgIEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5j
b20+CiAKICAgICAgICAgW1dpbl1bRHVtcFJlbmRlclRyZWVdIC0tbm8tdGltZW91dCBzd2l0Y2gg
ZG9lc24ndCB3b3JrCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBT
dXBwb3J0Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NhaXJv
L1BpeGVsRHVtcFN1cHBvcnRDYWlyby5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2NhaXJvL1BpeGVsRHVtcFN1cHBvcnRDYWlyby5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JCaXRtYXBD
b250ZQogICAgIFNIQTEgc2hhMTsKICAgICB1bnNpZ25lZCBjaGFyKiBiaXRtYXBEYXRhID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3Vy
ZmFjZSkpOwogICAgIGZvciAodW5zaWduZWQgcm93ID0gMDsgcm93IDwgcGl4ZWxzSGlnaDsgcm93
KyspIHsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lkZSk7
CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRl
IH0pOwogICAgICAgICBiaXRtYXBEYXRhICs9IGJ5dGVzUGVyUm93OwogICAgIH0KICAgICBTSEEx
OjpEaWdlc3QgaGFzaDsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1
cHBvcnRDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxE
dW1wU3VwcG9ydENHLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2cvUGl4ZWxEdW1wU3VwcG9ydENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTQgKzg4
LDE0IEBAIHZvaWQgY29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQml0bWFwQ29udGUKICAgICAgICAg
ICAgIHVpbnQzMl90IGJ1ZmZlcltwaXhlbHNXaWRlXTsKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgY29sdW1uID0gMDsgY29sdW1uIDwgcGl4ZWxzV2lkZTsgY29sdW1uKyspCiAgICAgICAgICAg
ICAgICAgYnVmZmVyW2NvbHVtbl0gPSBPU1JlYWRMaXR0bGVJbnQzMihiaXRtYXBEYXRhLCA0ICog
Y29sdW1uKTsKLSAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OF90Kj4oYnVmZmVyKSwgNCAqIHBpeGVsc1dpZGUpOworICAgICAgICAgICAgc2hhMS5h
ZGRCeXRlcyhTcGFuIHsgYnVmZmVyLCBwaXhlbHNXaWRlIH0pOwogICAgICAgICAgICAgYml0bWFw
RGF0YSArPSBieXRlc1BlclJvdzsKICAgICAgICAgfQogICAgIH0gZWxzZQogI2VuZGlmCiAgICAg
ewogICAgICAgICBmb3IgKHVuc2lnbmVkIHJvdyA9IDA7IHJvdyA8IHBpeGVsc0hpZ2g7IHJvdysr
KSB7Ci0gICAgICAgICAgICBzaGExLmFkZEJ5dGVzKGJpdG1hcERhdGEsIDQgKiBwaXhlbHNXaWRl
KTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IGJpdG1hcERhdGEsIDQgKiBwaXhl
bHNXaWRlIH0pOwogICAgICAgICAgICAgYml0bWFwRGF0YSArPSBieXRlc1BlclJvdzsKICAgICAg
ICAgfQogICAgIH0KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0Jsb29tRmls
dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9CbG9v
bUZpbHRlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL0Jsb29tRmlsdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBz
dGF0aWMgVmVjdG9yPFNIQTE6OkRpZ2VzdD4gZ2VuZXJhdGVSYW5kCiAgICAgU0hBMSBzaGExOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBoYXNoQ291bnQ7ICsraSkgewogICAgICAgICBk
b3VibGUgcmFuZG9tID0gcmFuZG9tTnVtYmVyKCk7Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMocmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnJhbmRvbSksIHNpemVvZihkb3VibGUpKTsKKyAgICAg
ICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgJnJhbmRvbSwgMSB9KTsKICAgICAgICAgU0hBMTo6RGln
ZXN0IGRpZ2VzdDsKICAgICAgICAgc2hhMS5jb21wdXRlSGFzaChkaWdlc3QpOwogICAgICAgICBo
YXNoZXMuYXBwZW5kKGRpZ2VzdCk7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9GaWxlU3lzdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9GaWxlU3lzdGVtLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw4ICsx
MzMsOCBAQCBURVNUX0YoRmlsZVN5c3RlbVRlc3QsIE1hcHBpbmdFeGlzdGluZ0ZpCiAgICAgRmls
ZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEgbWFwcGVkRmlsZURhdGEodGVtcEZpbGVQYXRoKCksIEZp
bGVTeXN0ZW06Ok1hcHBlZEZpbGVNb2RlOjpTaGFyZWQsIHN1Y2Nlc3MpOwogICAgIEVYUEVDVF9U
UlVFKHN1Y2Nlc3MpOwogICAgIEVYUEVDVF9UUlVFKCEhbWFwcGVkRmlsZURhdGEpOwotICAgIEVY
UEVDVF9UUlVFKG1hcHBlZEZpbGVEYXRhLnNpemUoKSA9PSBzdHJsZW4oRmlsZVN5c3RlbVRlc3RE
YXRhKSk7Ci0gICAgRVhQRUNUX1RSVUUoc3RybnN0cihGaWxlU3lzdGVtVGVzdERhdGEsIHN0YXRp
Y19jYXN0PGNvbnN0IGNoYXIqPihtYXBwZWRGaWxlRGF0YS5kYXRhKCkpLCBtYXBwZWRGaWxlRGF0
YS5zaXplKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShtYXBwZWRGaWxlRGF0YS5kYXRhKCkuc2l6ZSgp
ID09IHN0cmxlbihGaWxlU3lzdGVtVGVzdERhdGEpKTsKKyAgICBFWFBFQ1RfVFJVRShzdHJuc3Ry
KEZpbGVTeXN0ZW1UZXN0RGF0YSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4obWFwcGVk
RmlsZURhdGEuZGF0YSgpLmRhdGEoKSksIG1hcHBlZEZpbGVEYXRhLmRhdGEoKS5zaXplKCkpKTsK
IH0KIAogVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBNYXBwaW5nRXhpc3RpbmdFbXB0eUZpbGUpCklu
ZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TSEExLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TSEExLmNwcAkocmV2aXNpb24gMjc4ODA5
KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU0hBMS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDcgKzM4LDcgQEAgc3RhdGljIHZvaWQgZXhwZWN0U0hBMShDU3RyaW5nIGlucHV0
LCBpbgogewogICAgIFNIQTEgc2hhMTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcGVhdDsg
KytpKQotICAgICAgICBzaGExLmFkZEJ5dGVzKGlucHV0KTsKKyAgICAgICAgc2hhMS5hZGRCeXRl
cyhpbnB1dC5ieXRlcygpKTsKICAgICBDU3RyaW5nIGFjdHVhbCA9IHNoYTEuY29tcHV0ZUhleERp
Z2VzdCgpOwogCiAgICAgQVNTRVJUX0VRKGV4cGVjdGVkLmxlbmd0aCgpLCBhY3R1YWwubGVuZ3Ro
KCkpOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbQkocmV2aXNp
b24gMjc4ODA5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0zNDAsMTEgKzM0MCwxMSBAQCB2b2lkIENvbm5lY3Rpb246OndlYlNv
Y2tldEhhbmRzaGFrZShDb21wCiAKICAgICAgICAgICAgIGNvbnN0ZXhwciBhdXRvKiB3ZWJTb2Nr
ZXRLZXlHVUlEID0gIjI1OEVBRkE1LUU5MTQtNDdEQS05NUNBLUM1QUIwREM4NUIxMSI7CiAgICAg
ICAgICAgICBTSEExIHNoYTE7Ci0gICAgICAgICAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGtleUJlZ2luKSwga2V5RW5kIC0ga2V5QmVnaW4pOwotICAg
ICAgICAgICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih3
ZWJTb2NrZXRLZXlHVUlEKSwgc3RybGVuKHdlYlNvY2tldEtleUdVSUQpKTsKKyAgICAgICAgICAg
IHNoYTEuYWRkQnl0ZXMoU3BhbiB7IGtleUJlZ2luLCBrZXlFbmQgfSk7CisgICAgICAgICAgICBz
aGExLmFkZEJ5dGVzKFNwYW4geyB3ZWJTb2NrZXRLZXlHVUlELCBzdHJsZW4od2ViU29ja2V0S2V5
R1VJRCkgfSk7CiAgICAgICAgICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAgICAgICAgICAgIHNo
YTEuY29tcHV0ZUhhc2goaGFzaCk7Ci0gICAgICAgICAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9T
dHJpbmcoaGFzaC5kYXRhKCksIFNIQTE6Omhhc2hTaXplKTsKKyAgICAgICAgICAgIHJldHVybiBi
YXNlNjRFbmNvZGVUb1N0cmluZyhoYXNoKTsKICAgICAgICAgfTsKIAogICAgICAgICBjb25uZWN0
aW9uLnNlbmQoSFRUUFJlc3BvbnNlKDEwMSwgewpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9jYWlyby9UZXN0SW52b2NhdGlvbkNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJL
aXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwCShyZXZpc2lvbiAyNzg4
MDkpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVT
SEExSGFzaFN0cmluZ0ZvckNhaXIKICAgICBTSEExIHNoYTE7CiAgICAgdW5zaWduZWQgY2hhciog
Yml0bWFwRGF0YSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF9kYXRhKHN1cmZhY2UpKTsKICAgICBmb3IgKHNpemVfdCByb3cgPSAwOyByb3cgPCBw
aXhlbHNIaWdoOyArK3JvdykgewotICAgICAgICBzaGExLmFkZEJ5dGVzKGJpdG1hcERhdGEsIDQg
KiBwaXhlbHNXaWRlKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgYml0bWFwRGF0YSwg
NCAqIHBpeGVsc1dpZGUgfSk7CiAgICAgICAgIGJpdG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7CiAg
ICAgfQogICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0
UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05NCw3ICs5NCw3IEBAIHZvaWQgY29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQ29udGV4dChD
R0MKICNlbmRpZgogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCByb3cgPSAwOyByb3cgPCBw
aXhlbHNIaWdoOyByb3crKykgewotICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhiaXRtYXBEYXRh
LCA0ICogcGl4ZWxzV2lkZSk7CisgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyBiaXRt
YXBEYXRhLCA0ICogcGl4ZWxzV2lkZSB9KTsKICAgICAgICAgICAgIGJpdG1hcERhdGEgKz0gYnl0
ZXNQZXJSb3c7CiAgICAgICAgIH0KICAgICB9Cg==
</data>
<flag name="commit-queue"
          id="453085"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431341</attachid>
            <date>2021-06-14 10:10:49 -0700</date>
            <delta_ts>2021-06-14 11:38:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226887-20210614101048.patch</filename>
            <type>text/plain</type>
            <size>207269</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBA
CisyMDIxLTA2LTEyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogQVBJL0pTU2NyaXB0Lm1tOgorICAg
ICAgICAoK1tKU1NjcmlwdCBzY3JpcHRPZlR5cGU6bWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTp3
aXRoU291cmNlVVJMOmFuZEJ5dGVjb2RlQ2FjaGU6aW5WaXJ0dWFsTWFjaGluZTplcnJvcjpdKToK
KyAgICAgICAgKC1bSlNTY3JpcHQgcmVhZENhY2hlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHdy
aXRlQ2FjaGU6XSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9ja0hhc2g6OkNvZGVCbG9ja0hhc2gpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHA6CisgICAgICAgIChJbnNw
ZWN0b3I6OmJhY2tlbmRDb21tYW5kc0hhc2gpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZm
ZXIuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJDb250ZW50czo6d3JpdGFibGVCeXRlcyk6
CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyQ29udGVudHM6OmJ5dGVzIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6QXJyYXlCdWZmZXI6OndyaXRhYmxlQnl0ZXMpOgorICAgICAgICAoSlNDOjpBcnJh
eUJ1ZmZlcjo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
Lmg6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6d3JpdGFibGVCeXRlcyk6CisgICAg
ICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6Ynl0ZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRp
bWUvQ2FjaGVQYXlsb2FkLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVQYXlsb2FkOjptYWtlTWFw
cGVkUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6bWFrZU1hbGxvY1BheWxv
YWQpOgorICAgICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6Om1ha2VFbXB0eVBheWxvYWQpOgorICAg
ICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6OkNhY2hlUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkNh
Y2hlUGF5bG9hZDo6ZnJlZURhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVQYXlsb2FkLmg6
CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6ZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlUGF5bG9hZDo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6
Q2FjaGVQYXlsb2FkKToKKyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKToKKwogMjAyMS0w
Ni0xMSAgUGF0cmljayBBbmdsZSAgPHBhbmdsZUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogQWRkIGluc3RydW1lbnRhdGlvbiB0byBub2RlIGRlc3RydWN0aW9uIGZvciBJbnNw
ZWN0b3JET01BZ2VudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMTMgKzEzNCwxMyBAQCArIChpbnN0YW5jZXR5cGUpc2Ny
aXB0T2ZUeXBlOihKU1NjcmlwdFR5CiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4g
Y3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJGaWxlIGF0IHBhdGggJUAg
Y291bGQgbm90IGJlIG1hcHBlZC4iLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihzeXN0ZW1QYXRo
KV0sIGVycm9yKTsKIAotICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCkpKQor
ICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmlsZURhdGEuZGF0YSgpLnNpemUoKSkpCiAg
ICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIk5v
dCBhbGwgY2hhcmFjdGVycyBpbiBmaWxlIGF0ICVAIGFyZSBBU0NJSS4iLCBzdGF0aWNfY2FzdDxO
U1N0cmluZyAqPihzeXN0ZW1QYXRoKV0sIGVycm9yKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gYWRv
cHROUyhbW0pTU2NyaXB0IGFsbG9jXSBpbml0XSk7CiAgICAgcmVzdWx0LT5tX3ZpcnR1YWxNYWNo
aW5lID0gdm07CiAgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOwotICAgIHJlc3VsdC0+bV9zb3Vy
Y2UgPSBTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcoYml0d2lzZV9jYXN0
PGNvbnN0IExDaGFyKj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpKSk7CisgICAg
cmVzdWx0LT5tX3NvdXJjZSA9IFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWlu
ZyhiaXR3aXNlX2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkuZGF0YSgpKSwgZmls
ZURhdGEuZGF0YSgpLnNpemUoKSkpOwogICAgIHJlc3VsdC0+bV9tYXBwZWRTb3VyY2UgPSBXVEZN
b3ZlKGZpbGVEYXRhKTsKICAgICByZXN1bHQtPm1fc291cmNlVVJMID0gc291cmNlVVJMOwogICAg
IHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7CkBAIC0xNjgsMjQgKzE2OCwyMyBAQCAt
ICh2b2lkKXJlYWRDYWNoZQogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgY29uc3QgdWludDhfdCogZmlsZURhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihtYXBwZWRGaWxlLmRhdGEoKSk7Ci0gICAgdW5zaWduZWQgZmlsZVRvdGFsU2l6ZSA9IG1h
cHBlZEZpbGUuc2l6ZSgpOworICAgIGF1dG8gZmlsZURhdGEgPSBtYXBwZWRGaWxlLmRhdGEoKTsK
IAogICAgIC8vIEVuc3VyZSB3ZSBhdCBsZWFzdCBoYXZlIGEgU0hBMTo6RGlnZXN0IHRvIHJlYWQu
Ci0gICAgaWYgKGZpbGVUb3RhbFNpemUgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgeworICAgIGlm
IChmaWxlRGF0YS5zaXplKCkgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgewogICAgICAgICBGaWxl
U3lzdGVtOjpkZWxldGVGaWxlKGNhY2hlRmlsZW5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgdW5zaWduZWQgZmlsZURhdGFTaXplID0gZmlsZVRvdGFsU2l6ZSAtIHNpemVvZihT
SEExOjpEaWdlc3QpOworICAgIHVuc2lnbmVkIGZpbGVEYXRhU2l6ZSA9IGZpbGVEYXRhLnNpemUo
KSAtIHNpemVvZihTSEExOjpEaWdlc3QpOwogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFz
aDsKICAgICBTSEExIHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhmaWxlRGF0YSwgZmlsZURhdGFT
aXplKTsKKyAgICBzaGExLmFkZEJ5dGVzKGZpbGVEYXRhLmZpcnN0KGZpbGVEYXRhU2l6ZSkpOwog
ICAgIHNoYTEuY29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2VzdCBm
aWxlSGFzaDsKLSAgICBtZW1jcHkoJmZpbGVIYXNoLCBmaWxlRGF0YSArIGZpbGVEYXRhU2l6ZSwg
c2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOworICAgIG1lbWNweSgmZmlsZUhhc2gsIGZpbGVEYXRhLmRh
dGEoKSArIGZpbGVEYXRhU2l6ZSwgc2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOwogCiAgICAgaWYgKGNv
bXB1dGVkSGFzaCAhPSBmaWxlSGFzaCkgewogICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxl
KGNhY2hlRmlsZW5hbWUpOwpAQCAtMzQzLDcgKzM0Miw3IEBAIC0gKEJPT0wpd3JpdGVDYWNoZToo
U3RyaW5nJillcnJvcgogCiAgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFzaDsKICAgICBTSEEx
IHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhtX2NhY2hlZEJ5dGVjb2RlLT5kYXRhKCksIG1fY2Fj
aGVkQnl0ZWNvZGUtPnNpemUoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgbV9jYWNoZWRC
eXRlY29kZS0+ZGF0YSgpLCBtX2NhY2hlZEJ5dGVjb2RlLT5zaXplKCkgfSk7CiAgICAgc2hhMS5j
b21wdXRlSGFzaChjb21wdXRlZEhhc2gpOwogICAgIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKHRl
bXBGRCwgY29tcHV0ZWRIYXNoLmRhdGEoKSwgc2l6ZW9mKGNvbXB1dGVkSGFzaCkpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0hhc2guY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgQ29kZUJsb2Nr
SGFzaDo6Q29kZUJsb2NrSGFzaChjb25zdCBTb3VyYwogICAgIEFTU0VSVChzb3VyY2VDb2RlLmxl
bmd0aCgpID49IDApOwogICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhTb3VyY2VDb2RlTGVuZ3Ro
VG9IYXNoID0gNTAwICogTUI7CiAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzb3VyY2VD
b2RlLmxlbmd0aCgpKSA8IG1heFNvdXJjZUNvZGVMZW5ndGhUb0hhc2gpCi0gICAgICAgIHNoYTEu
YWRkQnl0ZXMoc291cmNlQ29kZS50b1VURjgoKSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoc291
cmNlQ29kZS50b1VURjgoKS5ieXRlcygpKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gSnVzdCBo
YXNoIHdpdGggdGhlIGxlbmd0aCBhbmQgc2FtcGxlcyBvZiB0aGUgc291cmNlIHN0cmluZyBpbnN0
ZWFkLgogICAgICAgICBTdHJpbmdWaWV3IHN0ciA9IHNvdXJjZUNvZGUucHJvdmlkZXIoKS0+c291
cmNlKCk7CkBAIC02MiwxMCArNjIsMTAgQEAgQ29kZUJsb2NrSGFzaDo6Q29kZUJsb2NrSGFzaChj
b25zdCBTb3VyYwogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHIubGVuZ3RoKCk7CiAgICAg
ICAgIHVuc2lnbmVkIHN0ZXAgPSAobGVuZ3RoID4+IDEwKSArIDE7CiAKLSAgICAgICAgc2hhMS5h
ZGRCeXRlcyhiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KCZsZW5ndGgpLCBzaXplb2YobGVuZ3RoKSk7
CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZsZW5ndGgsIDEgfSk7CiAgICAgICAgIGRv
IHsKICAgICAgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IHN0cltpbmRleF07Ci0gICAgICAgICAg
ICBzaGExLmFkZEJ5dGVzKGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oJmNoYXJhY3RlciksIHNpemVv
ZihjaGFyYWN0ZXIpKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7ICZjaGFyYWN0
ZXIsIDEgfSk7CiAgICAgICAgICAgICBvbGRJbmRleCA9IGluZGV4OwogICAgICAgICAgICAgaW5k
ZXggKz0gc3RlcDsKICAgICAgICAgfSB3aGlsZSAoaW5kZXggPiBvbGRJbmRleCAmJiBpbmRleCA8
IGxlbmd0aCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VIYXNo
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VI
YXNoLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BhcnNlSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiBQYXJzZUhhc2g6OlBhcnNlSGFzaChjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VD
b2RlKQogewogICAgIFNIQTEgc2hhMTsKLSAgICBzaGExLmFkZEJ5dGVzKHNvdXJjZUNvZGUudG9V
VEY4KCkpOworICAgIHNoYTEuYWRkQnl0ZXMoc291cmNlQ29kZS50b1VURjgoKS5ieXRlcygpKTsK
ICAgICBTSEExOjpEaWdlc3QgZGlnZXN0OwogICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsK
ICAgICB1bnNpZ25lZCBoYXNoID0gZGlnZXN0WzBdIHwgKGRpZ2VzdFsxXSA8PCA4KSB8IChkaWdl
c3RbMl0gPDwgMTYpIHwgKGRpZ2VzdFszXSA8PCAyNCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1JlbW90ZUluc3BlY3RvclV0aWxzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1Jl
bW90ZUluc3BlY3RvclV0aWxzLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgY29uc3QgQ1N0cmluZyYgYmFja2VuZENv
bW1hbmRzSGFzaCgpCiAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSA9IGdfYnl0ZXNfZ2V0X2Rh
dGEoYnl0ZXMuZ2V0KCksICZkYXRhU2l6ZSk7CiAgICAgICAgIEFTU0VSVChkYXRhU2l6ZSk7CiAg
ICAgICAgIFNIQTEgc2hhMTsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhzdGF0aWNfY2FzdDxjb25z
dCB1aW50OF90Kj4oZGF0YSksIGRhdGFTaXplKTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFu
IHsgc3RhdGljX2Nhc3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSksIGRhdGFTaXplIH0pOwogICAg
ICAgICBoZXhEaWdlc3QgPSBzaGExLmNvbXB1dGVIZXhEaWdlc3QoKTsKICAgICB9CiAgICAgcmV0
dXJuIGhleERpZ2VzdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXIuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogI2luY2x1ZGUgPHd0Zi9QYWNrZWRSZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZl
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtODAsNyAr
ODEsMTAgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBt
X2RhdGEuZ2V0TWF5QmVOdWxsKHNpemVJbkJ5dGVzKCkpOyB9CiAgICAgdW5zaWduZWQgc2l6ZUlu
Qnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX3NpemVJbkJ5dGVzOyB9Ci0gICAgCisKKyAgICBTcGFu
PHN0ZDo6Ynl0ZT4gd3JpdGFibGVCeXRlcygpIHsgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8c3RkOjpi
eXRlKj4oZGF0YSgpKSwgc2l6ZUluQnl0ZXMoKSB9OyB9CisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4geyBzdGF0aWNfY2FzdDxjb25zdCBzdGQ6OmJ5dGUq
PihkYXRhKCkpLCBzaXplSW5CeXRlcygpIH07IH0KKwogICAgIGJvb2wgaXNTaGFyZWQoKSBjb25z
dCB7IHJldHVybiBtX3NoYXJlZDsgfQogICAgIAogcHJpdmF0ZToKQEAgLTEyNyw3ICsxMzEsOSBA
QCBwdWJsaWM6CiAgICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKICAgICBpbmxpbmUgY29uc3Qgdm9p
ZCogZGF0YSgpIGNvbnN0OwogICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7
Ci0gICAgCisgICAgaW5saW5lIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCk7CisgICAg
aW5saW5lIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAgICAgdm9pZCBt
YWtlU2hhcmVkKCk7CiAgICAgdm9pZCBzZXRTaGFyaW5nTW9kZShBcnJheUJ1ZmZlclNoYXJpbmdN
b2RlKTsKICAgICBpbmxpbmUgYm9vbCBpc1NoYXJlZCgpIGNvbnN0OwpAQCAtMTk3LDYgKzIwMywx
NiBAQCB1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJu
IG1fY29udGVudHMuc2l6ZUluQnl0ZXMoKTsKIH0KIAorU3BhbjxzdGQ6OmJ5dGU+IEFycmF5QnVm
ZmVyOjp3cml0YWJsZUJ5dGVzKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZW50cy53cml0YWJsZUJ5
dGVzKCk7Cit9CisKK1NwYW48Y29uc3Qgc3RkOjpieXRlPiBBcnJheUJ1ZmZlcjo6Ynl0ZXMoKSBj
b25zdAoreworICAgIHJldHVybiBtX2NvbnRlbnRzLmJ5dGVzKCk7Cit9CisKIGJvb2wgQXJyYXlC
dWZmZXI6OmlzU2hhcmVkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb250ZW50cy5pc1NoYXJl
ZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZm
ZXJWaWV3LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4Niw5IEBAIHB1
YmxpYzoKIAogICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVM
ZW5ndGg7IH0KIAorICAgIFNwYW48c3RkOjpieXRlPiB3cml0YWJsZUJ5dGVzKCkgeyByZXR1cm4g
eyBzdGF0aWNfY2FzdDxzdGQ6OmJ5dGUqPihkYXRhKCkpLCBieXRlTGVuZ3RoKCkgfTsgfQorICAg
IFNwYW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0IHsgcmV0dXJuIHsgc3RhdGljX2Nh
c3Q8Y29uc3Qgc3RkOjpieXRlKj4oZGF0YSgpKSwgYnl0ZUxlbmd0aCgpIH07IH0KKwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0RGV0YWNoYWJsZShib29sKTsKICAgICBib29sIGlzRGV0
YWNoYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNEZXRhY2hhYmxlOyB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlUGF5bG9hZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsMjcgKzMwLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogCiBD
YWNoZVBheWxvYWQgQ2FjaGVQYXlsb2FkOjptYWtlTWFwcGVkUGF5bG9hZChGaWxlU3lzdGVtOjpN
YXBwZWRGaWxlRGF0YSYmIGRhdGEpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZCh0cnVlLCBk
YXRhLmxlYWtIYW5kbGUoKSwgZGF0YS5zaXplKCkpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQo
dHJ1ZSwgZGF0YS5sZWFrSGFuZGxlKCkpOwogfQogCiBDYWNoZVBheWxvYWQgQ2FjaGVQYXlsb2Fk
OjptYWtlTWFsbG9jUGF5bG9hZChNYWxsb2NQdHI8dWludDhfdCwgVk1NYWxsb2M+JiYgZGF0YSwg
c2l6ZV90IHNpemUpCiB7Ci0gICAgcmV0dXJuIENhY2hlUGF5bG9hZChmYWxzZSwgZGF0YS5sZWFr
UHRyKCksIHNpemUpOworICAgIHJldHVybiBDYWNoZVBheWxvYWQoZmFsc2UsIGFzV3JpdGFibGVC
eXRlcyhTcGFuIHsgZGF0YS5sZWFrUHRyKCksIHNpemUgfSkpOwogfQogCiBDYWNoZVBheWxvYWQg
Q2FjaGVQYXlsb2FkOjptYWtlRW1wdHlQYXlsb2FkKCkKIHsKLSAgICByZXR1cm4gQ2FjaGVQYXls
b2FkKHRydWUsIG51bGxwdHIsIDApOworICAgIHJldHVybiBDYWNoZVBheWxvYWQodHJ1ZSwgeyB9
KTsKIH0KIAogQ2FjaGVQYXlsb2FkOjpDYWNoZVBheWxvYWQoQ2FjaGVQYXlsb2FkJiYgb3RoZXIp
CiB7Ci0gICAgbV9tYXBwZWQgPSBvdGhlci5tX21hcHBlZDsKLSAgICBtX3NpemUgPSBvdGhlci5t
X3NpemU7Ci0gICAgbV9kYXRhID0gb3RoZXIubV9kYXRhOwotICAgIG90aGVyLm1fbWFwcGVkID0g
ZmFsc2U7Ci0gICAgb3RoZXIubV9kYXRhID0gbnVsbHB0cjsKLSAgICBvdGhlci5tX3NpemUgPSAw
OworICAgIG1fbWFwcGVkID0gc3RkOjpleGNoYW5nZShvdGhlci5tX21hcHBlZCwgZmFsc2UpOwor
ICAgIG1fZGF0YSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLCB7IH0pOwogfQogCiBDYWNo
ZVBheWxvYWQ6On5DYWNoZVBheWxvYWQoKQpAQCAtNjcsMTIgKzYzLDEzIEBAIENhY2hlUGF5bG9h
ZCYgQ2FjaGVQYXlsb2FkOjpvcGVyYXRvcj0oQ2EKIAogdm9pZCBDYWNoZVBheWxvYWQ6OmZyZWVE
YXRhKCkKIHsKLSAgICBpZiAoIW1fZGF0YSkKKyAgICBpZiAoIW1fZGF0YS5kYXRhKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBpZiAobV9tYXBwZWQpIHsKLSAgICAgICAgRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1fZGF0YSwgbV9zaXplKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZmFzdEZy
ZWUobV9kYXRhKTsKKworICAgIGlmIChtX21hcHBlZCkKKyAgICAgICAgRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1fZGF0YSk7CisgICAgZWxzZQorICAgICAgICBmYXN0RnJlZShtX2RhdGEu
ZGF0YSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHd0Zi9GaWxlU3lz
dGVtLmg+CiAjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MSwyMiArNDIsMjAgQEAgcHVibGljOgogICAgIEpT
X0VYUE9SVF9QUklWQVRFIH5DYWNoZVBheWxvYWQoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBD
YWNoZVBheWxvYWQmIG9wZXJhdG9yPShDYWNoZVBheWxvYWQmJiBvdGhlcik7CiAKLSAgICBjb25z
dCB1aW50OF90KiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBjb25zdCB1aW50OF90KiBkYXRhKCkg
Y29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9kYXRhLmRhdGEoKSk7
IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5zaXplKCk7IH0KIAog
cHJpdmF0ZToKLSAgICBDYWNoZVBheWxvYWQoYm9vbCBtYXBwZWQsIHZvaWQqIGRhdGEsIHNpemVf
dCBzaXplKQorICAgIENhY2hlUGF5bG9hZChib29sIG1hcHBlZCwgU3BhbjxzdGQ6OmJ5dGU+IGRh
dGEpCiAgICAgICAgIDogbV9tYXBwZWQobWFwcGVkKQotICAgICAgICAsIG1fc2l6ZShzaXplKQot
ICAgICAgICAsIG1fZGF0YShzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGF0YSkpCisgICAgICAgICwg
bV9kYXRhKGRhdGEpCiAgICAgewogICAgIH0KIAogICAgIHZvaWQgZnJlZURhdGEoKTsKIAogICAg
IGJvb2wgbV9tYXBwZWQ7Ci0gICAgc2l6ZV90IG1fc2l6ZTsKLSAgICB1aW50OF90KiBtX2RhdGE7
CisgICAgU3BhbjxzdGQ6OmJ5dGU+IG1fZGF0YTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1Bh
cnNlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNyArMjYxLDcg
QEAgYXV0byBTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKGNvbnN0IHVpbgogICAgIH0KIAogICAg
IGlmIChVTkxJS0VMWShPcHRpb25zOjp1c2VFYWdlcldlYkFzc2VtYmx5TW9kdWxlSGFzaGluZygp
KSkKLSAgICAgICAgbV9oYXNoZXIuYWRkQnl0ZXMoYnl0ZXMsIGJ5dGVzU2l6ZSk7CisgICAgICAg
IG1faGFzaGVyLmFkZEJ5dGVzKFNwYW4geyBieXRlcywgYnl0ZXNTaXplIH0pOwogCiAgICAgc2l6
ZV90IG9mZnNldEluQnl0ZXMgPSAwOwogICAgIHdoaWxlICh0cnVlKSB7CkluZGV4OiBTb3VyY2Uv
V1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw2OCBAQAorMjAyMS0wNi0xMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgQWRvcHQgU3BhbiBpbiBtb3JlIHBsYWNlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIFdURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmNwcDoKKyAgICAg
ICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjp+TWFwcGVkRmlsZURhdGEp
OgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6TWFwcGVkRmlsZURhdGE6Om1hcEZpbGVI
YW5kbGUpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6dW5tYXBWaWV3T2ZGaWxlKToK
KyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Om1hcFRvRmlsZSk6CisgICAgICAgICogd3Rm
L0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVE
YXRhOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6
Ok1hcHBlZEZpbGVEYXRhOjpkYXRhIGNvbnN0KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUlt
cGw6Ok1hcHBlZEZpbGVEYXRhOjpsZWFrSGFuZGxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3Rl
bUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YSk6CisgICAgICAgIChXVEY6OkZp
bGVTeXN0ZW1JbXBsOjpNYXBwZWRGaWxlRGF0YTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6
RmlsZVN5c3RlbUltcGw6Ok1hcHBlZEZpbGVEYXRhOjpzaXplIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1NIQTEuY3BwOgorICAgICAgICAoV1RG
OjpTSEExOjphZGRCeXRlcyk6CisgICAgICAgIChXVEY6OlNIQTE6OmZpbmFsaXplKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6U0hBMTo6cHJvY2Vzc0Jsb2NrKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6U0hBMTo6cmVzZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTSEExOjpoZXhEaWdl
c3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTSEExOjpjb21wdXRlSGV4RGlnZXN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3dGYvU0hBMS5oOgorICAgICAgICAoV1RGOjpTSEExOjphZGRCeXRl
cyk6CisgICAgICAgICogd3RmL1ZlY3Rvci5oOgorICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZS9Q
ZXJzaXN0ZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPENT
dHJpbmc+OjplbmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8Q1N0cmlu
Zz46OmRlY29kZSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTdHJpbmc+Ojpl
bmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVjb2RlU3RyaW5nVGV4dCk6Cisg
ICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUpOgor
ICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKToK
KyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oOgorICAgICAgICAq
IHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5jcHA6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyOjpEZWNvZGVyKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6
OkRlY29kZXI6OmJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFkKToKKyAgICAgICAgKFdURjo6UGVy
c2lzdGVuY2U6OkRlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjp2ZXJpZnlDaGVja3N1bSk6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyOjp+RGVjb2Rlcik6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3Bl
cnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmg6CisgICAgICAgICogd3RmL3BlcnNpc3RlbmNl
L1BlcnNpc3RlbnRFbmNvZGVyLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29k
ZXI6Omdyb3cpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6dXBkYXRlQ2hl
Y2tzdW1Gb3JEYXRhKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXI6OmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjpl
bmNvZGVOdW1iZXIpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6ZW5jb2Rl
Q2hlY2tzdW0pOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6RW5jb2Rlcik6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjp+RW5jb2Rlcik6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmg6
CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyOjpidWZmZXIgY29uc3QpOgorICAg
ICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIp
OgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6YnVmZmVyU2l6ZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL3RleHQvQmFzZTY0Lmg6CisgICAgICAgIChXVEY6OmJh
c2U2NEVuY29kZVRvVmVjdG9yKToKKyAgICAgICAgKFdURjo6YmFzZTY0RW5jb2RlVG9TdHJpbmcp
OgorICAgICAgICAqIHd0Zi90ZXh0L0NTdHJpbmcuaDoKKwogMjAyMS0wNi0xMSAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgV2Vha0hhc2hNYXAKSW5kZXg6
IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtNjkyLDYgKzY5Miw4IEBACiAJCUFEODlCNkI5MUU2NDE1MEYwMDkwNzA3RiAvKiBN
ZW1vcnlQcmVzc3VyZUhhbmRsZXJDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IE1lbW9yeVByZXNzdXJlSGFuZGxlckNvY29hLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBREYyQ0U2NDFFMzlGMTA2MDA2ODg5REIgLyogTWVtb3J5Rm9vdHBy
aW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lbW9yeUZvb3RwcmludC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREYyQ0U2NTFFMzlGMTA2MDA2ODg5REIg
LyogTWVtb3J5Rm9vdHByaW50Q29jb2EuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTWVtb3J5Rm9vdHByaW50Q29jb2EuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlCQzcwMEI0NDI2NzY2ODM0MDA0OUVERjIgLyogU3BhbkNvY29hLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNwYW5Db2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzcwMEI0
NTI2NzY2OUMxMDA0OUVERjIgLyogU3BhbkNGLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwYW5DRi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0EzMEM3RjI2NkQzMDM0MDAwRDIzMEMgLyog
U3Bhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTcGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyQkNGQzNFMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5ndWFnZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYW5ndWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyQkNGQzNGMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5ndWFnZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYW5ndWFnZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtODQwLDYgKzg0Miw3IEBACiAJCQkJQzJCQ0ZDNDExRjYxRDYxNjAwQzky
MjJDIC8qIExhbmd1YWdlQ0YuY3BwICovLAogCQkJCTJDREVEMEVFMTgxMTVDMzgwMDREQkE3MCAv
KiBSdW5Mb29wQ0YuY3BwICovLAogCQkJCUEzRUU1QzNCMjFGRkFDN0MwMEZBQkQ2MSAvKiBTY2hl
ZHVsZVBhaXJDRi5jcHAgKi8sCisJCQkJQkM3MDBCNDUyNjc2NjlDMTAwNDlFREYyIC8qIFNwYW5D
Ri5oICovLAogCQkJCTFBRkRFNjQ3MTk1MjAxQzMwMEM0OEZGQSAvKiBUeXBlQ2FzdHNDRi5oICov
LAogCQkJCTVDMUYwNTk0MjE2NDM3QjMwMDM5MzAyQyAvKiBVUkxDRi5jcHAgKi8sCiAJCQkpOwpA
QCAtMTU4MSw2ICsxNTg0LDcgQEAKIAkJCQkxQ0E4NUNBODI0MUIwQjI2MDA3MUMyRjUgLyogUnVu
dGltZUFwcGxpY2F0aW9uQ2hlY2tzQ29jb2EuY3BwICovLAogCQkJCTFDQTg1Q0E3MjQxQjBCMTEw
MDcxQzJGNSAvKiBSdW50aW1lQXBwbGljYXRpb25DaGVja3NDb2NvYS5oICovLAogCQkJCUEzMEQ0
MTJDMUYwREUwQkEwMEI3MTk1NCAvKiBTb2Z0TGlua2luZy5oICovLAorCQkJCUJDNzAwQjQ0MjY3
NjY4MzQwMDQ5RURGMiAvKiBTcGFuQ29jb2EuaCAqLywKIAkJCQlFQjYxRURDNjI0MDlDQ0MwMDAx
RUZFMzYgLyogU3lzdGVtVHJhY2luZ0NvY29hLmNwcCAqLywKIAkJCQk1Q0MwRUU4NjIxNjJCQzIy
MDBBMUE4NDIgLyogVVJMQ29jb2EubW0gKi8sCiAJCQkJOTMyNDE2NTcyNDNCQzJFNTAwMzJGQUFF
IC8qIFZlY3RvckNvY29hLmggKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcAkocmV2aXNpb24g
Mjc4ODA5KQorKysgU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxOSw5ICszMTksOSBAQCBib29sIGV4Y2x1ZGVGcm9tQmFja3VwKGNvbnN0IFN0cmluZyYp
CiAKIE1hcHBlZEZpbGVEYXRhOjp+TWFwcGVkRmlsZURhdGEoKQogewotICAgIGlmICghbV9maWxl
RGF0YSkKKyAgICBpZiAoIW1fZmlsZURhdGEuZGF0YSgpKQogICAgICAgICByZXR1cm47Ci0gICAg
dW5tYXBWaWV3T2ZGaWxlKG1fZmlsZURhdGEsIG1fZmlsZVNpemUpOworICAgIHVubWFwVmlld09m
RmlsZShtX2ZpbGVEYXRhKTsKIH0KIAogTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKGNv
bnN0IFN0cmluZyYgZmlsZVBhdGgsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUsIGJvb2wmIHN1Y2Nl
c3MpCkBAIC0zODMsMTQgKzM4MywxMyBAQCBib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFu
ZGxlKFBsYXRmCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBtX2ZpbGVEYXRh
ID0gZGF0YTsKLSAgICBtX2ZpbGVTaXplID0gc2l6ZTsKKyAgICBtX2ZpbGVEYXRhID0gU3BhbiB7
IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpieXRlKj4oZGF0YSksIHNpemUgfTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCB1bm1hcFZpZXdPZkZpbGUodm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6
ZSkKK2Jvb2wgdW5tYXBWaWV3T2ZGaWxlKFNwYW48c3RkOjpieXRlPiBkYXRhKQogewotICAgIHJl
dHVybiAhbXVubWFwKGJ1ZmZlciwgc2l6ZSk7CisgICAgcmV0dXJuICFtdW5tYXAoZGF0YS5kYXRh
KCksIGRhdGEuc2l6ZSgpKTsKIH0KIAogI2VuZGlmCkBAIC00MzgsNyArNDM3LDcgQEAgU3RyaW5n
IGNyZWF0ZVRlbXBvcmFyeVppcEFyY2hpdmUoY29uc3QgUwogfQogI2VuZGlmCiAKLU1hcHBlZEZp
bGVEYXRhIG1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIHNpemVfdCBieXRlc1NpemUsIEZ1
bmN0aW9uPHZvaWQoY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4m
KT4mJiBhcHBseSwgUGxhdGZvcm1GaWxlSGFuZGxlKiBvdXRwdXRIYW5kbGUpCitNYXBwZWRGaWxl
RGF0YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBzaXplX3QgYnl0ZXNTaXplLCBGdW5j
dGlvbjx2b2lkKGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mKT4m
JiBhcHBseSwgUGxhdGZvcm1GaWxlSGFuZGxlKiBvdXRwdXRIYW5kbGUpCiB7CiAgICAgY29uc3Rl
eHByIGJvb2wgZmFpbElmRmlsZUV4aXN0cyA9IHRydWU7CiAgICAgYXV0byBoYW5kbGUgPSBGaWxl
U3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWRXcml0
ZSwgRmlsZVN5c3RlbTo6RmlsZUFjY2Vzc1Blcm1pc3Npb246OlVzZXIsIGZhaWxJZkZpbGVFeGlz
dHMpOwpAQCAtNDU1LDEyICs0NTQsMTIgQEAgTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxlKGNvbnN0
IFN0cmluZyYgcAogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIHZvaWQqIG1hcCA9
IGNvbnN0X2Nhc3Q8dm9pZCo+KG1hcHBlZEZpbGUuZGF0YSgpKTsKLSAgICB1aW50OF90KiBtYXBE
YXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1hcCk7CisgICAgYXV0byBtYXAgPSBtYXBwZWRG
aWxlLmRhdGEoKS5kYXRhKCk7CisgICAgYXV0byBtYXBEYXRhID0gbWFwOwogCi0gICAgYXBwbHko
WyZtYXBEYXRhXShjb25zdCB1aW50OF90KiBjaHVuaywgc2l6ZV90IGNodW5rU2l6ZSkgewotICAg
ICAgICBtZW1jcHkobWFwRGF0YSwgY2h1bmssIGNodW5rU2l6ZSk7Ci0gICAgICAgIG1hcERhdGEg
Kz0gY2h1bmtTaXplOworICAgIGFwcGx5KFsmbWFwRGF0YV0oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+
IGNodW5rKSB7CisgICAgICAgIG1lbWNweShtYXBEYXRhLCBjaHVuay5kYXRhKCksIGNodW5rLnNp
emUoKSk7CisgICAgICAgIG1hcERhdGEgKz0gY2h1bmsuc2l6ZSgpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9KTsKIApJbmRleDogU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICsz
NCw3IEBACiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KQEAgLTIxMCw3ICsyMTEsNyBAQCBXVEZfRVhQT1JUX1BSSVZBVEUg
U3RyaW5nIHJlYWxQYXRoKGNvbnN0CiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc1NhZmVUb1Vz
ZU1lbW9yeU1hcEZvclBhdGgoY29uc3QgU3RyaW5nJik7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBtYWtlU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChjb25zdCBTdHJpbmcmKTsKIAotV1RGX0VY
UE9SVF9QUklWQVRFIGJvb2wgdW5tYXBWaWV3T2ZGaWxlKHZvaWQqIGJ1ZmZlciwgc2l6ZV90KTsK
K1dURl9FWFBPUlRfUFJJVkFURSBib29sIHVubWFwVmlld09mRmlsZShTcGFuPHN0ZDo6Ynl0ZT4p
OwogCiBjbGFzcyBNYXBwZWRGaWxlRGF0YSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CkBAIC0yMjMsMTcgKzIyNCwxNSBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5N
YXBwZWRGaWxlRGF0YSgpOwogICAgIE1hcHBlZEZpbGVEYXRhJiBvcGVyYXRvcj0oTWFwcGVkRmls
ZURhdGEmJik7CiAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
ISFtX2ZpbGVEYXRhOyB9Ci0gICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZmlsZURhdGE7IH0KLSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9maWxlU2l6
ZTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fZmls
ZURhdGEuZGF0YSgpOyB9CisgICAgU3BhbjxzdGQ6OmJ5dGU+IGRhdGEoKSBjb25zdCB7IHJldHVy
biBtX2ZpbGVEYXRhOyB9CiAKLSAgICB2b2lkKiBsZWFrSGFuZGxlKCkgeyByZXR1cm4gc3RkOjpl
eGNoYW5nZShtX2ZpbGVEYXRhLCBudWxscHRyKTsgfQorICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBT
cGFuPHN0ZDo6Ynl0ZT4gbGVha0hhbmRsZSgpIHsgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9maWxl
RGF0YSwgeyB9KTsgfQogCiBwcml2YXRlOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIG1h
cEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBGaWxlT3Blbk1vZGUsIE1hcHBlZEZpbGVN
b2RlKTsKIAotICAgIHZvaWQqIG1fZmlsZURhdGEgeyBudWxscHRyIH07Ci0gICAgdW5zaWduZWQg
bV9maWxlU2l6ZSB7IDAgfTsKKyAgICBTcGFuPHN0ZDo6Ynl0ZT4gbV9maWxlRGF0YTsKIH07CiAK
IGlubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGxhdGZvcm1GaWxlSGFuZGxl
IGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUgbWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKQEAgLTI0Nywy
MSArMjQ2LDE5IEBAIGlubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGwKIH0K
IAogaW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShNYXBwZWRGaWxlRGF0YSYm
IG90aGVyKQotICAgIDogbV9maWxlRGF0YShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEs
IG51bGxwdHIpKQotICAgICwgbV9maWxlU2l6ZShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZVNp
emUsIDApKQorICAgIDogbV9maWxlRGF0YShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEs
IHsgfSkpCiB7CiB9CiAKIGlubGluZSBNYXBwZWRGaWxlRGF0YSYgTWFwcGVkRmlsZURhdGE6Om9w
ZXJhdG9yPShNYXBwZWRGaWxlRGF0YSYmIG90aGVyKQogewotICAgIG1fZmlsZURhdGEgPSBzdGQ6
OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEsIG51bGxwdHIpOwotICAgIG1fZmlsZVNpemUgPSBz
dGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZVNpemUsIDApOworICAgIG1fZmlsZURhdGEgPSBzdGQ6
OmV4Y2hhbmdlKG90aGVyLm1fZmlsZURhdGEsIHsgfSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQog
CiAvLyBUaGlzIGNyZWF0ZXMgdGhlIGRlc3RpbmF0aW9uIGZpbGUsIG1hcHMgaXQsIHdyaXRlIHRo
ZSBwcm92aWRlZCBkYXRhIHRvIGl0IGFuZCByZXR1cm5zIHRoZSBtYXBwZWQgZmlsZS4KIC8vIFRo
aXMgZnVuY3Rpb24gZmFpbHMgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIGZpbGUgYXQgdGhlIGRlc3Rp
bmF0aW9uIHBhdGguCi1XVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVuY3Rpb248dm9pZChjb25z
dCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYpPiYmIGFwcGx5LCBQbGF0
Zm9ybUZpbGVIYW5kbGUqID0gbnVsbHB0cik7CitXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmls
ZURhdGEgbWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVu
Y3Rpb248dm9pZChjb25zdCBGdW5jdGlvbjxib29sKFNwYW48Y29uc3Qgc3RkOjpieXRlPik+Jik+
JiYgYXBwbHksIFBsYXRmb3JtRmlsZUhhbmRsZSogPSBudWxscHRyKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgRmlsZVN5c3RlbUltcGwKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93
dGYvUGxhdGZvcm1GVFcuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGxhdGZv
cm1GVFcuY21ha2UJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3Jt
RlRXLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBAIGxpc3QoQVBQRU5EIFdU
Rl9TT1VSQ0VTCiBpZiAoVVNFX0NGKQogICAgIGxpc3QoQVBQRU5EIFdURl9QVUJMSUNfSEVBREVS
UwogICAgICAgICBjZi9DRlVSTEV4dHJhcy5oCisgICAgICAgIGNmL1NwYW5DRi5oCiAgICAgICAg
IGNmL1R5cGVDYXN0c0NGLmgKIAogICAgICAgICB0ZXh0L2NmL1N0cmluZ0NvbmNhdGVuYXRlQ0Yu
aApJbmRleDogU291cmNlL1dURi93dGYvUGxhdGZvcm1NYWMuY21ha2UKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvUGxhdGZvcm1NYWMuY21ha2UJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtTWFjLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xMSw2ICsx
MSw3IEBAIGxpc3QoQVBQRU5EIFdURl9QVUJMSUNfSEVBREVSUwogICAgIFdlYWtPYmpDUHRyLmgK
IAogICAgIGNmL0NGVVJMRXh0cmFzLmgKKyAgICBjZi9TcGFuQ0YuaAogICAgIGNmL1R5cGVDYXN0
c0NGLmgKIAogICAgIGNvY29hL0NyYXNoUmVwb3J0ZXIuaApAQCAtMTgsNiArMTksNyBAQCBsaXN0
KEFQUEVORCBXVEZfUFVCTElDX0hFQURFUlMKICAgICBjb2NvYS9OU1VSTEV4dHJhcy5oCiAgICAg
Y29jb2EvUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzQ29jb2EuaAogICAgIGNvY29hL1NvZnRMaW5r
aW5nLmgKKyAgICBjb2NvYS9TcGFuQ29jb2EuaAogICAgIGNvY29hL1ZlY3RvckNvY29hLmgKIAog
ICAgIGRhcndpbi9XZWFrTGlua2luZy5oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVdp
bi5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVdpbi5jbWFrZQko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvUGxhdGZvcm1XaW4uY21ha2UJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAgbGlzdChBUFBFTkQgV1RGX0xJQlJBUklFUwog
aWYgKFVTRV9DRikKICAgICBsaXN0KEFQUEVORCBXVEZfUFVCTElDX0hFQURFUlMKICAgICAgICAg
Y2YvQ0ZVUkxFeHRyYXMuaAorICAgICAgICBjZi9TcGFuQ0YuaAogICAgICAgICBjZi9UeXBlQ2Fz
dHNDRi5oCiAKICAgICAgICAgdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmgKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL1NIQTEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NIQTEu
Y3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9TSEExLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsMTAgKzQ2LDEwIEBAIFNIQTE6OlNIQTEoKQogICAgIEFMTE9XX0RFUFJF
Q0FURURfREVDTEFSQVRJT05TX0VORAogfQogCi12b2lkIFNIQTE6OmFkZEJ5dGVzKGNvbnN0IHVp
bnQ4X3QqIGlucHV0LCBzaXplX3QgbGVuZ3RoKQordm9pZCBTSEExOjphZGRCeXRlcyhTcGFuPGNv
bnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCiB7CiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElP
TlNfQkVHSU4KLSAgICBDQ19TSEExX1VwZGF0ZSgmbV9jb250ZXh0LCBpbnB1dCwgbGVuZ3RoKTsK
KyAgICBDQ19TSEExX1VwZGF0ZSgmbV9jb250ZXh0LCBpbnB1dC5kYXRhKCksIGlucHV0LnNpemUo
KSk7CiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiB9CiAKQEAgLTEwMSwx
MSArMTAxLDExIEBAIFNIQTE6OlNIQTEoKQogICAgIHJlc2V0KCk7CiB9CiAKLXZvaWQgU0hBMTo6
YWRkQnl0ZXMoY29uc3QgdWludDhfdCogaW5wdXQsIHNpemVfdCBsZW5ndGgpCit2b2lkIFNIQTE6
OmFkZEJ5dGVzKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCkKIHsKLSAgICB3aGlsZSAobGVu
Z3RoLS0pIHsKKyAgICBmb3IgKGF1dG8gYnl0ZSA6IGlucHV0KSB7CiAgICAgICAgIEFTU0VSVCht
X2N1cnNvciA8IDY0KTsKLSAgICAgICAgbV9idWZmZXJbbV9jdXJzb3IrK10gPSAqaW5wdXQrKzsK
KyAgICAgICAgbV9idWZmZXJbbV9jdXJzb3IrK10gPSBzdGQ6OnRvX2ludGVnZXI8dWludDhfdD4o
Ynl0ZSk7CiAgICAgICAgICsrbV90b3RhbEJ5dGVzOwogICAgICAgICBpZiAobV9jdXJzb3IgPT0g
NjQpCiAgICAgICAgICAgICBwcm9jZXNzQmxvY2soKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1NI
QTEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TSEExLmgJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XVEYvd3RmL1NIQTEuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEs
NyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxhcnJheT4KKyNpbmNsdWRlIDx3dGYvU3Bh
bi5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CiAKQEAgLTQ1LDE1ICs0NiwxMSBAQCBjbGFzcyBTSEExIHsKIHB1YmxpYzoKICAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgU0hBMSgpOwogCi0gICAgdm9pZCBhZGRCeXRlcyhjb25zdCBWZWN0b3I8
dWludDhfdD4mIGlucHV0KQorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGFkZEJ5dGVzKFNw
YW48Y29uc3Qgc3RkOjpieXRlPik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBhZGRC
eXRlcyhUJiYgZGF0YSkKICAgICB7Ci0gICAgICAgIGFkZEJ5dGVzKGlucHV0LmRhdGEoKSwgaW5w
dXQuc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIGFkZEJ5dGVzKFNwYW48Y29uc3Qgc3RkOjpieXRl
Pihhc0J5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSkpKTsKICAgICB9Ci0gICAg
dm9pZCBhZGRCeXRlcyhjb25zdCBDU3RyaW5nJiBpbnB1dCkKLSAgICB7Ci0gICAgICAgIGFkZEJ5
dGVzKGlucHV0LmRhdGFBc1VJbnQ4UHRyKCksIGlucHV0Lmxlbmd0aCgpKTsKLSAgICB9Ci0gICAg
V1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkQnl0ZXMoY29uc3QgdWludDhfdCogaW5wdXQsIHNp
emVfdCBsZW5ndGgpOwogCiAgICAgLy8gU2l6ZSBvZiB0aGUgU0hBMSBoYXNoCiAgICAgV1RGX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGhhc2hTaXplID0gMjA7CkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9W
ZWN0b3IuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dURi93dGYvVmVjdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTYxMyw2ICs2MTMsNyBAQCBwcml2YXRlOgogCiBwdWJsaWM6CiAgICAg
dHlwZWRlZiBUIFZhbHVlVHlwZTsKKyAgICB0eXBlZGVmIFQgdmFsdWVfdHlwZTsKIAogICAgIHR5
cGVkZWYgVCogaXRlcmF0b3I7CiAgICAgdHlwZWRlZiBjb25zdCBUKiBjb25zdF9pdGVyYXRvcjsK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL2NmL1NwYW5DRi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL2NmL1NwYW5DRi5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL2NmL1Nw
YW5DRi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+Cisj
aW5jbHVkZSA8d3RmL1NwYW4uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2lubGluZSBTcGFuPGNv
bnN0IHN0ZDo6Ynl0ZT4gYXNCeXRlcyhDRkRhdGFSZWYgZGF0YSkKK3sKKyAgICByZXR1cm4geyBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KENGRGF0YUdldEJ5dGVQdHIoZGF0YSkp
LCBzdGF0aWNfY2FzdDxzaXplX3Q+KENGRGF0YUdldExlbmd0aChkYXRhKSkgfTsKK30KKworfQor
Cit1c2luZyBXVEY6OmFzQnl0ZXM7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9jb2NvYS9TcGFuQ29j
b2EuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9jb2NvYS9TcGFuQ29jb2EuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9jb2NvYS9TcGFuQ29jb2EuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlIDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgorCitu
YW1lc3BhY2UgV1RGIHsKKworaW5saW5lIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBhc0J5dGVzKE5T
RGF0YSAqZGF0YSkKK3sKKyAgICByZXR1cm4geyByZWludGVycHJldF9jYXN0PGNvbnN0IHN0ZDo6
Ynl0ZSo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxlbmd0aCB9OworfQorCit9CisKK3VzaW5nIFdURjo6
YXNCeXRlczsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2Rl
cnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3Rl
bnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0
ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBA
QCB2b2lkIENvZGVyPENTdHJpbmc+OjplbmNvZGUoRW5jb2RlciYgZW5jCiAKICAgICB1aW50MzJf
dCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAgZW5jb2RlciA8PCBsZW5ndGg7Ci0gICAg
ZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RyaW5nLmRhdGFBc1VJbnQ4UHRyKCksIGxl
bmd0aCk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RyaW5nLmJ5dGVzKCkp
OwogfQogCiBzdGQ6Om9wdGlvbmFsPENTdHJpbmc+IENvZGVyPENTdHJpbmc+OjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKQEAgLTc4LDcgKzc4LDcgQEAgc3RkOjpvcHRpb25hbDxDU3RyaW5nPiBD
b2RlcjxDU3RyaW5nPjo6ZAogCiAgICAgY2hhciogYnVmZmVyOwogICAgIENTdHJpbmcgc3RyaW5n
ID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZCgqbGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4o
YnVmZmVyKSwgKmxlbmd0aCkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0
YShTcGFuIHsgcmVpbnRlcnByZXRfY2FzdDxzdGQ6OmJ5dGUqPihidWZmZXIpLCAqbGVuZ3RoIH0p
KQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgcmV0dXJuIHN0cmluZzsKQEAg
LTk2LDExICs5Niw3IEBAIHZvaWQgQ29kZXI8U3RyaW5nPjo6ZW5jb2RlKEVuY29kZXImIGVuY28K
ICAgICBib29sIGlzOEJpdCA9IHN0cmluZy5pczhCaXQoKTsKIAogICAgIGVuY29kZXIgPDwgbGVu
Z3RoIDw8IGlzOEJpdDsKLQotICAgIGlmIChpczhCaXQpCi0gICAgICAgIGVuY29kZXIuZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgpOwotICAgIGVsc2UK
LSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnMxNigpKSwgbGVuZ3RoICogc2l6ZW9mKFVD
aGFyKSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RyaW5nLmJ5dGVzKCkp
OwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KQEAgLTExMiw3ICsxMDgs
NyBAQCBzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBkZWNvCiAKICAgICBDaGFy
YWN0ZXJUeXBlKiBidWZmZXI7CiAgICAgU3RyaW5nIHN0cmluZyA9IFN0cmluZzo6Y3JlYXRlVW5p
bml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVk
TGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIpLCBsZW5ndGggKiBz
aXplb2YoQ2hhcmFjdGVyVHlwZSkpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0
aERhdGEoU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpieXRlKj4oYnVmZmVyKSwgbGVuZ3Ro
ICogc2l6ZW9mKENoYXJhY3RlclR5cGUpIH0pKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwogICAgIAogICAgIHJldHVybiBzdHJpbmc7CkBAIC0xNDIsMTMgKzEzOCwxMyBAQCBzdGQ6Om9w
dGlvbmFsPFN0cmluZz4gQ29kZXI8U3RyaW5nPjo6ZGVjCiAKIHZvaWQgQ29kZXI8U0hBMTo6RGln
ZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNIQTE6OkRpZ2VzdCYgZGlnZXN0
KQogewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNp
emVvZihkaWdlc3QpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3Qp
OwogfQogCiBzdGQ6Om9wdGlvbmFsPFNIQTE6OkRpZ2VzdD4gQ29kZXI8U0hBMTo6RGlnZXN0Pjo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgU0hBMTo6RGlnZXN0IHRtcDsKLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHRtcC5kYXRhKCksIHNpemVvZih0bXAp
KSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHRtcCkpCiAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgcmV0dXJuIHRtcDsKIH0KSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmgJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVf
dCBpbmxpbmVDYXBhY2kKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQogICAgIHsKICAgICAgICAg
ZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odmVjdG9yLnNpemUoKSk7Ci0gICAgICAg
IGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6ZSgpICogc2l6ZW9mKFQpKTsKKyAgICAg
ICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEodmVjdG9yKTsKICAgICB9CiAgICAgCiAg
ICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pj4gZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCkBAIC0xNzMsNyArMTczLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAgICAgICBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+
IHRlbXA7CiAgICAgICAgIHRlbXAuZ3JvdyhzaXplKTsKIAotICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHRlbXAuZGF0
YSgpKSwgc2l6ZSAqIHNpemVvZihUKSkpCisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhl
ZExlbmd0aERhdGEodGVtcCkpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAg
ICAgICAgIHJldHVybiB0ZW1wOwpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVy
c2lzdGVudERlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3Rl
bmNlL1BlcnNpc3RlbnREZWNvZGVyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dU
Ri93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSwyMyArMzEsMjEgQEAKIG5hbWVzcGFjZSBXVEYgewogbmFtZXNwYWNlIFBlcnNpc3RlbmNl
IHsKIAotRGVjb2Rlcjo6RGVjb2Rlcihjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZm
ZXJTaXplKQotICAgIDogbV9idWZmZXIoYnVmZmVyKQotICAgICwgbV9idWZmZXJQb3NpdGlvbihi
dWZmZXIpCi0gICAgLCBtX2J1ZmZlckVuZChidWZmZXIgKyBidWZmZXJTaXplKQorRGVjb2Rlcjo6
RGVjb2RlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnVmZmVyKQorICAgIDogbV9idWZmZXIoYnVm
ZmVyLmRhdGEoKSkKKyAgICAsIG1fYnVmZmVyUG9zaXRpb24oYnVmZmVyLmRhdGEoKSkKKyAgICAs
IG1fYnVmZmVyRW5kKGJ1ZmZlci5kYXRhKCkgKyBidWZmZXIuc2l6ZSgpKQogewogfQogCi1EZWNv
ZGVyOjp+RGVjb2RlcigpCi17Ci19CitEZWNvZGVyOjp+RGVjb2RlcigpID0gZGVmYXVsdDsKIAog
Ym9vbCBEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKHNpemVfdCBzaXplKSBj
b25zdAogewogICAgIHJldHVybiBzaXplIDw9IHN0YXRpY19jYXN0PHNpemVfdD4obV9idWZmZXJF
bmQgLSBtX2J1ZmZlclBvc2l0aW9uKTsKIH0KIAotY29uc3QgdWludDhfdCogRGVjb2Rlcjo6YnVm
ZmVyUG9pbnRlckZvckRpcmVjdFJlYWQoc2l6ZV90IHNpemUpCitjb25zdCBzdGQ6OmJ5dGUqIERl
Y29kZXI6OmJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFkKHNpemVfdCBzaXplKQogewogICAgIGlm
ICghYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihzaXplKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CkBAIC01NSwxNiArNTMsMTYgQEAgY29uc3QgdWludDhfdCogRGVjb2Rlcjo6YnVmZmVy
UG9pbnRlckZvcgogICAgIGF1dG8gZGF0YSA9IG1fYnVmZmVyUG9zaXRpb247CiAgICAgbV9idWZm
ZXJQb3NpdGlvbiArPSBzaXplOwogCi0gICAgRW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRh
KG1fc2hhMSwgZGF0YSwgc2l6ZSk7CisgICAgRW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRh
KG1fc2hhMSwgU3BhbiB7IGRhdGEsIHNpemUgfSk7CiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKLWJv
b2wgRGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBz
aXplKQorYm9vbCBEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbjxzdGQ6OmJ5dGU+
IGRhdGEpCiB7Ci0gICAgYXV0byBidWZmZXIgPSBidWZmZXJQb2ludGVyRm9yRGlyZWN0UmVhZChz
aXplKTsKKyAgICBhdXRvIGJ1ZmZlciA9IGJ1ZmZlclBvaW50ZXJGb3JEaXJlY3RSZWFkKGRhdGEu
c2l6ZSgpKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1l
bWNweShkYXRhLCBidWZmZXIsIHNpemUpOworICAgIG1lbWNweShkYXRhLmRhdGEoKSwgYnVmZmVy
LCBkYXRhLnNpemUoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEzOSw3ICsxMzcsNyBA
QCBib29sIERlY29kZXI6OnZlcmlmeUNoZWNrc3VtKCkKICAgICBtX3NoYTEuY29tcHV0ZUhhc2go
Y29tcHV0ZWRIYXNoKTsKIAogICAgIFNIQTE6OkRpZ2VzdCBzYXZlZEhhc2g7Ci0gICAgaWYgKCFk
ZWNvZGVGaXhlZExlbmd0aERhdGEoc2F2ZWRIYXNoLmRhdGEoKSwgc2l6ZW9mKHNhdmVkSGFzaCkp
KQorICAgIGlmICghZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHNhdmVkSGFzaCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIHJldHVybiBjb21wdXRlZEhhc2ggPT0gc2F2ZWRIYXNoOwpJbmRl
eDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oCShy
ZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50
RGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlIDx3
dGYvRW51bVRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9TSEExLmg+CisjaW5jbHVkZSA8d3RmL1Nw
YW4uaD4KICNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVyLmg+CiAKIG5h
bWVzcGFjZSBXVEYgewpAQCAtMzUsNyArMzYsMTIgQEAgbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsK
IGNsYXNzIERlY29kZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgot
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6
ZV90IGJ1ZmZlclNpemUpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IERlY29kZXIoVCYmIGRh
dGEpCisgICAgICAgIDogRGVjb2RlciB7IFNwYW48Y29uc3Qgc3RkOjpieXRlPihhc0J5dGVzKFNw
YW4geyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSkpIH0KKyAgICB7CisgICAgfQorCisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIERlY29kZXIoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KTsKICAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgfkRlY29kZXIoKTsKIAogICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7
IHJldHVybiBtX2J1ZmZlckVuZCAtIG1fYnVmZmVyOyB9CkBAIC00Myw3ICs0OSwxMSBAQCBwdWJs
aWM6CiAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgdmVy
aWZ5Q2hlY2tzdW0oKTsKIAotICAgIFdURl9FWFBPUlRfUFJJVkFURSBXQVJOX1VOVVNFRF9SRVRV
Uk4gYm9vbCBkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCosIHNpemVfdCk7CisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZUZpeGVkTGVuZ3Ro
RGF0YShTcGFuPHN0ZDo6Ynl0ZT4pOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29k
ZUZpeGVkTGVuZ3RoRGF0YShTcGFuPHN0ZDo6Ynl0ZT4oYXNXcml0YWJsZUJ5dGVzKFNwYW4geyBz
dGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSkpKTsKKyAgICB9CiAKICAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgRGVjb2RlciYgb3BlcmF0b3I+PihzdGQ6Om9wdGlvbmFsPGJvb2w+Jik7CiAgICAgV1RGX0VY
UE9SVF9QUklWQVRFIERlY29kZXImIG9wZXJhdG9yPj4oc3RkOjpvcHRpb25hbDx1aW50OF90PiYp
OwpAQCAtODQsNyArOTQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBudW1FbGVtZW50cyA8
PSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIC8gc2l6ZW9mKFQpICYmIGJ1ZmZl
cklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4obnVtRWxlbWVudHMgKiBzaXplb2YoVCkpOwogICAgIH0K
IAotICAgIFdURl9FWFBPUlRfUFJJVkFURSBXQVJOX1VOVVNFRF9SRVRVUk4gY29uc3QgdWludDhf
dCogYnVmZmVyUG9pbnRlckZvckRpcmVjdFJlYWQoc2l6ZV90IG51bUJ5dGVzKTsKKyAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgV0FSTl9VTlVTRURfUkVUVVJOIGNvbnN0IHN0ZDo6Ynl0ZSogYnVmZmVy
UG9pbnRlckZvckRpcmVjdFJlYWQoc2l6ZV90IG51bUJ5dGVzKTsKIAogICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBpc0lQQ0RlY29kZXIgPSBmYWxzZTsKIApAQCAtOTIsOSArMTAyLDkgQEAgcHJp
dmF0ZToKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgYnVm
ZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihzaXplX3QpIGNvbnN0OwogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFR5cGU+IERlY29kZXImIGRlY29kZU51bWJlcihzdGQ6Om9wdGlvbmFsPFR5cGU+Jik7
CiAKLSAgICBjb25zdCB1aW50OF90KiBtX2J1ZmZlcjsKLSAgICBjb25zdCB1aW50OF90KiBtX2J1
ZmZlclBvc2l0aW9uOwotICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyRW5kOworICAgIGNvbnN0
IHN0ZDo6Ynl0ZSogbV9idWZmZXI7CisgICAgY29uc3Qgc3RkOjpieXRlKiBtX2J1ZmZlclBvc2l0
aW9uOworICAgIGNvbnN0IHN0ZDo6Ynl0ZSogbV9idWZmZXJFbmQ7CiAKICAgICBTSEExIG1fc2hh
MTsKIH07CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVu
dEVuY29kZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0
ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDM0ICszMSwz
NCBAQAogbmFtZXNwYWNlIFdURiB7CiBuYW1lc3BhY2UgUGVyc2lzdGVuY2UgewogCi1FbmNvZGVy
OjpFbmNvZGVyKCkKLXsKLX0KLQotRW5jb2Rlcjo6fkVuY29kZXIoKQotewotfQorRW5jb2Rlcjo6
RW5jb2RlcigpID0gZGVmYXVsdDsKK0VuY29kZXI6On5FbmNvZGVyKCkgPSBkZWZhdWx0OwogCi11
aW50OF90KiBFbmNvZGVyOjpncm93KHNpemVfdCBzaXplKQorc3RkOjpieXRlKiBFbmNvZGVyOjpn
cm93KHNpemVfdCBzaXplKQogewogICAgIHNpemVfdCBuZXdQb3NpdGlvbiA9IG1fYnVmZmVyLnNp
emUoKTsKICAgICBtX2J1ZmZlci5ncm93KG1fYnVmZmVyLnNpemUoKSArIHNpemUpOwogICAgIHJl
dHVybiBtX2J1ZmZlci5kYXRhKCkgKyBuZXdQb3NpdGlvbjsKIH0KIAotdm9pZCBFbmNvZGVyOjp1
cGRhdGVDaGVja3N1bUZvckRhdGEoU0hBMSYgc2hhMSwgY29uc3QgdWludDhfdCogZGF0YSwgc2l6
ZV90IHNpemUpCit2b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yRGF0YShTSEExJiBzaGEx
LCBTcGFuPGNvbnN0IHVpbnQ4X3Q+IGRhdGEpCit7CisgICAgcmV0dXJuIHVwZGF0ZUNoZWNrc3Vt
Rm9yRGF0YShzaGExLCBhc0J5dGVzKGRhdGEpKTsKK30KKwordm9pZCBFbmNvZGVyOjp1cGRhdGVD
aGVja3N1bUZvckRhdGEoU0hBMSYgc2hhMSwgU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpCiB7
CiAgICAgYXV0byB0eXBlU2FsdCA9IFNhbHQ8dWludDhfdCo+Ojp2YWx1ZTsKLSAgICBzaGExLmFk
ZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ0eXBlU2FsdCksIHNpemVvZih0eXBl
U2FsdCkpOwotICAgIHNoYTEuYWRkQnl0ZXMoZGF0YSwgc2l6ZSk7CisgICAgc2hhMS5hZGRCeXRl
cyhTcGFuIHsgJnR5cGVTYWx0LCAxIH0pOworICAgIHNoYTEuYWRkQnl0ZXMoZGF0YSk7CiB9CiAK
LXZvaWQgRW5jb2Rlcjo6ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEs
IHNpemVfdCBzaXplKQordm9pZCBFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEoU3Bhbjxj
b25zdCBzdGQ6OmJ5dGU+IGRhdGEpCiB7Ci0gICAgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKG1fc2hh
MSwgZGF0YSwgc2l6ZSk7CisgICAgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgZGF0YSk7
CiAKLSAgICB1aW50OF90KiBidWZmZXIgPSBncm93KHNpemUpOwotICAgIG1lbWNweShidWZmZXIs
IGRhdGEsIHNpemUpOworICAgIGF1dG8qIGJ1ZmZlciA9IGdyb3coZGF0YS5zaXplKCkpOworICAg
IG1lbWNweShidWZmZXIsIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIFR5cGU+CkBAIC02Niw3ICs2Niw3IEBAIEVuY29kZXImIEVuY29kZXI6OmVuY29k
ZU51bWJlcihUeXBlIHZhbHUKIHsKICAgICBFbmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvck51bWJl
cihtX3NoYTEsIHZhbHVlKTsKIAotICAgIHVpbnQ4X3QqIGJ1ZmZlciA9IGdyb3coc2l6ZW9mKFR5
cGUpKTsKKyAgICBhdXRvKiBidWZmZXIgPSBncm93KHNpemVvZihUeXBlKSk7CiAgICAgbWVtY3B5
KGJ1ZmZlciwgJnZhbHVlLCBzaXplb2YoVHlwZSkpOwogICAgIHJldHVybiAqdGhpczsKIH0KQEAg
LTEyNSw3ICsxMjUsNyBAQCB2b2lkIEVuY29kZXI6OmVuY29kZUNoZWNrc3VtKCkKIHsKICAgICBT
SEExOjpEaWdlc3QgaGFzaDsKICAgICBtX3NoYTEuY29tcHV0ZUhhc2goaGFzaCk7Ci0gICAgZW5j
b2RlRml4ZWRMZW5ndGhEYXRhKGhhc2guZGF0YSgpLCBoYXNoLnNpemUoKSk7CisgICAgZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKGhhc2gpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJz
aXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+CiAjaW5j
bHVkZSA8d3RmL1NIQTEuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVyLmg+CiAK
QEAgLTQzLDcgKzQ0LDExIEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfkVuY29k
ZXIoKTsKIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZUNoZWNrc3VtKCk7Ci0g
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVp
bnQ4X3QqLCBzaXplX3QpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZUZpeGVk
TGVuZ3RoRGF0YShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhKQorICAgIHsKKyAgICAgICAg
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48Y29uc3Qgc3RkOjpieXRlPihhc0J5dGVzKFNwYW4o
c3RkOjpmb3J3YXJkPFQ+KGRhdGEpKSkpKTsKKyAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZW51bTxUPjo6dmFsdWU+KiA9IG51bGxwdHI+
CiAgICAgRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBUJiB0KQpAQCAtNzAsMjMgKzc1LDIyIEBA
IHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRW5jb2RlciYgb3BlcmF0b3I8PChmbG9h
dCk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwoZG91YmxlKTsK
IAotICAgIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLmRh
dGEoKTsgfQotICAgIHNpemVfdCBidWZmZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIu
c2l6ZSgpOyB9Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdXBkYXRlQ2hl
Y2tzdW1Gb3JEYXRhKFNIQTEmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKKyAgICBTcGFuPGNv
bnN0IHN0ZDo6Ynl0ZT4gYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXI7IH0KKyAgICAK
KyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRh
KFNIQTEmLCBTcGFuPGNvbnN0IHVpbnQ4X3Q+KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBTcGFuPGNvbnN0IHN0ZDo6Ynl0
ZT4pOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPiBzdGF0aWMgdm9pZCB1cGRhdGVDaGVj
a3N1bUZvck51bWJlcihTSEExJiwgVHlwZSk7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNJUENFbmNvZGVyID0gZmFsc2U7CiAKIHByaXZhdGU6Ci0KICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUeXBlPiBFbmNvZGVyJiBlbmNvZGVOdW1iZXIoVHlwZSk7CiAKLSAgICB1aW50OF90KiBncm93
KHNpemVfdCk7CisgICAgc3RkOjpieXRlKiBncm93KHNpemVfdCk7CiAKICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVHlwZT4gc3RydWN0IFNhbHQ7CiAKLSAgICBWZWN0b3I8dWludDhfdCwgNDA5Nj4g
bV9idWZmZXI7CisgICAgVmVjdG9yPHN0ZDo6Ynl0ZSwgNDA5Nj4gbV9idWZmZXI7CiAgICAgU0hB
MSBtX3NoYTE7CiB9OwogCkBAIC0xMDYsOCArMTEwLDggQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFR5
cGU+CiB2b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKFNIQTEmIHNoYTEsIFR5
cGUgdmFsdWUpCiB7CiAgICAgYXV0byB0eXBlU2FsdCA9IFNhbHQ8VHlwZT46OnZhbHVlOwotICAg
IHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnR5cGVTYWx0KSwgc2l6
ZW9mKHR5cGVTYWx0KSk7Ci0gICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPigmdmFsdWUpLCBzaXplb2YodmFsdWUpKTsKKyAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAm
dHlwZVNhbHQsIDEgfSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgJnZhbHVlLCAxIH0pOwog
fQogCiB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBT
b3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MCwzOSAr
MTQwLDM5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyAKICAgICAg
ICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSAnPSc7CiB9CiAKLXN0YXRpYyBWZWN0
b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoY29uc3QgdWludDhfdCogaW5wdXREYXRh
QnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwg
QmFzZTY0RW5jb2RlTWFwIG1hcCkKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2Rl
SW50ZXJuYWwoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kg
cG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewotICAgIGF1dG8gZGVzdGluYXRpb25MZW5n
dGggPSBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShpbnB1dExlbmd0aCwgcG9saWN5KTsKKyAg
ICBhdXRvIGRlc3RpbmF0aW9uTGVuZ3RoID0gY2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUoaW5w
dXQuc2l6ZSgpLCBwb2xpY3kpOwogICAgIGlmICghZGVzdGluYXRpb25MZW5ndGgpCiAgICAgICAg
IHJldHVybiB7IH07CiAKICAgICBWZWN0b3I8dWludDhfdD4gZGVzdGluYXRpb25WZWN0b3IoZGVz
dGluYXRpb25MZW5ndGgpOwotICAgIGJhc2U2NEVuY29kZUludGVybmFsKGlucHV0RGF0YUJ1ZmZl
ciwgaW5wdXRMZW5ndGgsIGRlc3RpbmF0aW9uVmVjdG9yLmRhdGEoKSwgZGVzdGluYXRpb25MZW5n
dGgsIHBvbGljeSwgbWFwKTsKKyAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCksIGRlc3RpbmF0
aW9uVmVjdG9yLmRhdGEoKSwgZGVzdGluYXRpb25MZW5ndGgsIHBvbGljeSwgbWFwKTsKICAgICBy
ZXR1cm4gZGVzdGluYXRpb25WZWN0b3I7CiB9CiAKLXZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IHZv
aWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIFVDaGFyKiBkZXN0aW5h
dGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uTGVuZ3RoLCBCYXNlNjRFbmNvZGVQ
b2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordm9pZCBiYXNlNjRFbmNvZGUoU3Bh
bjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0LCBVQ2hhciogZGVzdGluYXRpb25EYXRhQnVmZmVyLCB1
bnNpZ25lZCBkZXN0aW5hdGlvbkxlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFz
ZTY0RW5jb2RlTWFwIG1hcCkKIHsKICAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQogICAgICAg
ICByZXR1cm47Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KGlucHV0RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvbkRhdGFCdWZm
ZXIsIGRlc3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7CisgICAgYmFzZTY0RW5jb2RlSW50
ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0YSgpKSwgaW5w
dXQuc2l6ZSgpLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3RoLCBwb2xp
Y3ksIG1hcCk7CiB9CiAKLXZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1
ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIExDaGFyKiBkZXN0aW5hdGlvbkRhdGFCdWZmZXIs
IHVuc2lnbmVkIGRlc3RpbmF0aW9uTGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBC
YXNlNjRFbmNvZGVNYXAgbWFwKQordm9pZCBiYXNlNjRFbmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGlucHV0LCBMQ2hhciogZGVzdGluYXRpb25EYXRhQnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5h
dGlvbkxlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1h
cCkKIHsKICAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQogICAgICAgICByZXR1cm47Ci0gICAg
YmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0RGF0
YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0aW9u
TGVuZ3RoLCBwb2xpY3ksIG1hcCk7CisgICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpLCBkZXN0
aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7CiB9CiAK
LVZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCB2b2lkKiBpbnB1dERh
dGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5
LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQorVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVj
dG9yKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGlj
eSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlSW50ZXJu
YWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZlciksIGlucHV0TGVu
Z3RoLCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZUludGVybmFsKGlucHV0
LCBwb2xpY3ksIG1hcCk7CiB9CiAKLVN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdCB2
b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNlNjRFbmNvZGVQ
b2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQorU3RyaW5nIGJhc2U2NEVuY29kZVRv
U3RyaW5nKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBv
bGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gbWFrZVN0cmluZyhiYXNl
NjRFbmNvZGVkKGlucHV0RGF0YUJ1ZmZlciwgaW5wdXRMZW5ndGgsIHBvbGljeSwgbWFwKSk7Cisg
ICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChpbnB1dCwgcG9saWN5LCBtYXApKTsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVp
bnQ4X3Q+PiBiYXNlNjREZWNvZGVJbnRlcm5hbChjb25zdCBUKiBpbnB1dERhdGFCdWZmZXIsIHVu
c2lnbmVkIGlucHV0TGVuZ3RoLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9u
cywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKQEAgLTI1NCw4NCArMjU0LDI3IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0YXRpYyBzdGQ6Om9wdGlvbmEKICAgICByZXR1cm4gZGVzdGluYXRpb247CiB9
CiAKLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgU3Ry
aW5nJiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2
NERlY29kZU1hcCBtYXApCi17Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7
Ci0gICAgaWYgKCFsZW5ndGggfHwgaW5wdXQuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNl
NjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG9wdGlvbnMsIG1h
cCk7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnMxNigp
LCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBiYXNlNjREZWNvZGUoU3RyaW5nVmlldyBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29k
ZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgdW5zaWduZWQg
bGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGggfHwgaW5wdXQuaXM4Qml0
KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJz
OCgpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVy
bmFsKGlucHV0LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7Ci19Ci0KLXN0
ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+JiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJh
c2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgaWYgKGlucHV0LnNpemUoKSA+IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
LSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXpl
KCksIG9wdGlvbnMsIG1hcCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjREZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERl
Y29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCitzdGQ6Om9wdGlvbmFs
PFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1
dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1h
cCBtYXApCiB7CiAgICAgaWYgKGlucHV0LnNpemUoKSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5z
aWduZWQ+OjptYXgoKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICByZXR1cm4g
YmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5w
dXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpLCBvcHRpb25zLCBtYXApOwogfQogCi1zdGQ6Om9wdGlv
bmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHVu
c2lnbmVkIGxlbmd0aCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJh
c2U2NERlY29kZU1hcCBtYXApCi17Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGRh
dGEsIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKLX0KLQotc3RkOjpvcHRpb25hbDxWZWN0b3I8dWlu
dDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgsIE9w
dGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRpb25zLCBCYXNlNjREZWNvZGVNYXAgbWFw
KQotewotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oZGF0YSksIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKLX0KLQotc3RkOjpvcHRp
b25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBTdHJpbmcmIGlucHV0
KQorc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBTdHJp
bmcmIGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0
RGVjb2RlTWFwIG1hcCkKIHsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBpbnB1dC5sZW5ndGgoKTsK
ICAgICBpZiAoIWxlbmd0aCB8fCBpbnB1dC5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGJhc2U2
NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgeyB9LCBCYXNlNjRE
ZWNvZGVNYXA6OlVSTCk7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNo
YXJhY3RlcnMxNigpLCBsZW5ndGgsIHsgfSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOworICAgICAg
ICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3Ro
LCBvcHRpb25zLCBtYXApOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5j
aGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOwogfQogCi1zdGQ6Om9wdGlvbmFs
PFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFN0cmluZ1ZpZXcgaW5wdXQpCitzdGQ6
Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKFN0cmluZ1ZpZXcgaW5wdXQs
IE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRpb25zLCBCYXNlNjREZWNvZGVNYXAg
bWFwKQogewogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgpOwogICAgIGlmICgh
bGVuZ3RoIHx8IGlucHV0LmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50
ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6
VVJMKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczE2
KCksIGxlbmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7Ci19Ci0KLXN0ZDo6b3B0aW9u
YWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiBpbnB1dCkKLXsKLSAgICBpZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHJldHVy
biBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgeyB9LCBC
YXNlNjREZWNvZGVNYXA6OlVSTCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+
PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCkKLXsKLSAgICBpZiAo
aW5wdXQuc2l6ZSgpID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQotICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5h
bChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5z
aXplKCksIHsgfSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOwotfQotCi1zdGQ6Om9wdGlvbmFsPFZl
Y3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2ln
bmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoZGF0YSwgbGVu
Z3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKLX0KLQotc3RkOjpvcHRpb25hbDxWZWN0
b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBs
ZW5ndGgpCi17Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBsZW5ndGgsIHsgfSwgQmFzZTY0RGVjb2RlTWFwOjpV
UkwpOworICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVy
czgoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRl
cm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuaAkocmV2aXNpb24gMjc4ODA5
KQorKysgU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuaAkod29ya2luZyBjb3B5KQpAQCAtMjks
NiArMjksNyBAQAogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvT3B0
aW9uU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdDb25jYXRlbmF0ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC01
Niw1NCArNTcsMzUgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhpbXVtQmFzZTY0TAog
Ly8gUmF0aGVyIHRoYW4gYmVpbmcgcGVyZmVjdGx5IHByZWNpc2UsIHRoaXMgaXMgYSBiaXQgY29u
c2VydmF0aXZlLgogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhpbXVtQmFzZTY0RW5jb2Rl
cklucHV0QnVmZmVyU2l6ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAv
IDc3ICogNzYgLyA0ICogMyAtIDI7CiAKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVu
Y29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQsIFVDaGFyKiwgdW5zaWduZWQsIEJhc2U2NEVuY29k
ZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29k
ZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVkLCBMQ2hhciosIHVuc2lnbmVkLCBC
YXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBC
YXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOworV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQgYmFzZTY0RW5jb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPiwgVUNoYXIqIGRl
c3RpbmF0aW9uQnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkJ1ZmZlclNpemUsIEJhc2U2NEVu
Y29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVu
Y29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCBiYXNlNjRFbmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+LCBMQ2hhciogZGVzdGluYXRp
b25CdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uQnVmZmVyU2l6ZSwgQmFzZTY0RW5jb2RlUG9s
aWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFw
ID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKIAotV1RGX0VYUE9SVF9QUklWQVRFIFZlY3Rv
cjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCB2b2lkKiwgdW5zaWduZWQsIEJh
c2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJh
c2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci1WZWN0b3I8dWludDhf
dD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgQmFzZTY0RW5j
b2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5j
b2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKLVZlY3Rvcjx1aW50OF90PiBiYXNl
NjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8Y2hhcj4mLCBCYXNlNjRFbmNvZGVQb2xpY3kg
PSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBC
YXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRv
VmVjdG9yKGNvbnN0IENTdHJpbmcmLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQ
b2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6
OkRlZmF1bHQpOwotCi1XVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIGJhc2U2NEVuY29kZVRvU3Ry
aW5nKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5j
b2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2Rl
TWFwOjpEZWZhdWx0KTsKLVN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdCBWZWN0b3I8
dWludDhfdD4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90
SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwot
U3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3RvcjxjaGFyPiYsIEJhc2U2NEVu
Y29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVu
Y29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7Ci1TdHJpbmcgYmFzZTY0RW5jb2Rl
VG9TdHJpbmcoY29uc3QgQ1N0cmluZyYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29k
ZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1h
cDo6RGVmYXVsdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVu
Y29kZVRvVmVjdG9yKFNwYW48Y29uc3Qgc3RkOjpieXRlPiwgQmFzZTY0RW5jb2RlUG9saWN5ID0g
QmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFz
ZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFZlY3Rvcjx1aW50
OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihUJiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2
NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVu
Y29kZU1hcDo6RGVmYXVsdCk7CiAKK1dURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgYmFzZTY0RW5j
b2RlVG9TdHJpbmcoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+LCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBC
YXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNl
NjRFbmNvZGVNYXA6OkRlZmF1bHQpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGJhc2U2
NEVuY29kZVRvU3RyaW5nKFQmJiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9s
aWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpE
ZWZhdWx0KTsKKworV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBiYXNlNjREZWNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+LCBPcHRpb25TZXQ8QmFzZTY0
RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6
RGVmYXVsdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGJhc2U2NERlY29kZShjb25zdCBTdHJpbmcmLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0
aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7
CiBXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2
NERlY29kZShTdHJpbmdWaWV3LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0s
IEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7Ci1XVEZfRVhQT1JU
X1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25z
dCBWZWN0b3I8dWludDhfdD4mLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0s
IEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7Ci1XVEZfRVhQT1JU
X1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25z
dCBWZWN0b3I8Y2hhcj4mLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJh
c2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7Ci1XVEZfRVhQT1JUX1BS
SVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCB1
aW50OF90KiwgdW5zaWduZWQsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwg
QmFzZTY0RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKLVdURl9FWFBPUlRf
UFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0
IGNoYXIqLCB1bnNpZ25lZCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+ID0geyB9LCBC
YXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRlZmF1bHQpOwotCi1pbmxpbmUgVmVj
dG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
aW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCi17
Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6
ZSgpLCBwb2xpY3ksIG1hcCk7Ci19Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OmVuYWJsZV9p
Zl90PCFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3ZlX3JlZmVy
ZW5jZV90PFQ+PiwgU3RyaW5nPiAmJiAhc3RkOjppc19zYW1lX3Y8c3RkOjpyZW1vdmVfY29uc3Rf
dDxzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxUPj4sIFN0cmluZ1ZpZXc+PiogPSBudWxscHRyPgor
c3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShUJiYsIE9wdGlvblNl
dDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFwID0gQmFzZTY0RGVj
b2RlTWFwOjpEZWZhdWx0KTsKIAotaW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVU
b1ZlY3Rvcihjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9s
aWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQordGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVjdG9yPHVp
bnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKFQmJiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5
IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2Rl
VG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSwgbWFwKTsKKyAgICBy
ZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KGFzQnl0ZXMo
U3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCkgfSkpLCBwb2xpY3ksIG1hcCk7CiB9CiAKLWlu
bGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgQ1N0cmluZyYg
aW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoVCYmIGlucHV0
LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewotICAg
IHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRhKCksIGlucHV0Lmxlbmd0aCgp
LCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKFNwYW48Y29u
c3Qgc3RkOjpieXRlPihhc0J5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oaW5wdXQpIH0pKSwg
cG9saWN5LCBtYXApOwogfQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJh
c2U2NEVuY29kZU1hcCBtYXApCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90
PCFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5j
ZV90PFQ+PiwgU3RyaW5nPiAmJiAhc3RkOjppc19zYW1lX3Y8c3RkOjpyZW1vdmVfY29uc3RfdDxz
dGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxUPj4sIFN0cmluZ1ZpZXc+Pio+CitzdGQ6Om9wdGlvbmFs
PFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKFQmJiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2
NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7Ci0gICAgcmV0
dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xp
Y3ksIG1hcCk7Ci19Ci0KLWlubGluZSBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3Qg
VmVjdG9yPGNoYXI+JiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5j
b2RlTWFwIG1hcCkKLXsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5wdXQuZGF0
YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSwgbWFwKTsKLX0KLQotaW5saW5lIFN0cmluZyBiYXNl
NjRFbmNvZGVUb1N0cmluZyhjb25zdCBDU3RyaW5nJiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5
IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKLXsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2Rl
VG9TdHJpbmcoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwgcG9saWN5LCBtYXApOworICAg
IHJldHVybiBiYXNlNjREZWNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KGFzQnl0ZXMoU3BhbiB7
IHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCkgfSkpLCBvcHRpb25zLCBtYXApOwogfQogCiAKQEAgLTEx
Miw2MSArOTQsNTcgQEAgaW5saW5lIFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdAog
Ly8gVGhpcyBmb3JtYXQgdXNlcyAnLScgYW5kICdfJyBpbnN0ZWFkIG9mICcrJyBhbmQgJy8nIHJl
c3BlY3RpdmVseS4KIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVZlY3Rvcjx1
aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihjb25zdCB2b2lkKiwgdW5zaWduZWQpOwot
VmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKGNvbnN0IFZl
Y3RvcjxjaGFyPiYpOwotVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKGNv
bnN0IENTdHJpbmcmKTsKK1ZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3RvcihT
cGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVjdG9yPHVpbnQ4
X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKFQmJik7CiAKLVN0cmluZyBiYXNlNjRVUkxFbmNv
ZGVUb1N0cmluZyhjb25zdCB2b2lkKiwgdW5zaWduZWQpOwotU3RyaW5nIGJhc2U2NFVSTEVuY29k
ZVRvU3RyaW5nKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOwotU3RyaW5nIGJhc2U2NFVSTEVuY29k
ZVRvU3RyaW5nKGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRv
U3RyaW5nKGNvbnN0IENTdHJpbmcmKTsKK1N0cmluZyBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhT
cGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGJhc2U2
NFVSTEVuY29kZVRvU3RyaW5nKFQmJik7CiAKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlv
bmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFN0cmluZyYpOwotV1RG
X0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxE
ZWNvZGUoU3RyaW5nVmlldyk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxWZWN0
b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mKTsKLVdU
Rl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJM
RGVjb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3B0
aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgdWludDhfdCosIHVu
c2lnbmVkKTsKLVdURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90
Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCk7CitzdGQ6Om9wdGlvbmFs
PFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFNwYW48Y29uc3Qgc3RkOjpieXRlPik7
CitzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFN0
cmluZyYpOworc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShT
dHJpbmdWaWV3KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6
aXNfc2FtZV92PHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+
LCBTdHJpbmc+ICYmICFzdGQ6OmlzX3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVt
b3ZlX3JlZmVyZW5jZV90PFQ+PiwgU3RyaW5nVmlldz4+KiA9IG51bGxwdHI+CitzdGQ6Om9wdGlv
bmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFQmJik7CiAKLWlubGluZSBWZWN0
b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3Qgdm9pZCogaW5wdXQsIHVu
c2lnbmVkIGxlbmd0aCkKK2lubGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9W
ZWN0b3IoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRF
bmNvZGVUb1ZlY3RvcihpbnB1dCwgbGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFz
ZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1
dCwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKIH0KIAot
aW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0
b3I8dWludDhfdD4mIGlucHV0KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVjdG9yPHVpbnQ4X3Q+
IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKFQmJiBpbnB1dCkKIHsKLSAgICByZXR1cm4gYmFzZTY0
RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29k
ZVRvVmVjdG9yKHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCksIEJhc2U2NEVuY29kZVBvbGljeTo6VVJM
LCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBWZWN0b3I8dWludDhfdD4gYmFz
ZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCkKK2lubGluZSBT
dHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0
KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRhKCksIGlucHV0
LnNpemUoKSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsK
KyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5wdXQsIEJhc2U2NEVuY29kZVBvbGlj
eTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBWZWN0b3I8dWludDhf
dD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgQ1N0cmluZyYgaW5wdXQpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoVCYmIGlucHV0KQog
ewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRhKCksIGlucHV0Lmxl
bmd0aCgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwor
ICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhzdGQ6OmZvcndhcmQ8VD4oaW5wdXQpLCBC
YXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQogCi1pbmxp
bmUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqIGlucHV0LCB1bnNp
Z25lZCBsZW5ndGgpCitpbmxpbmUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2
NFVSTERlY29kZShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gaW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJh
c2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LCBsZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeTo6VVJM
LCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZShpbnB1dCwg
eyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBTdHJpbmcgYmFzZTY0VVJM
RW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKK2lubGluZSBzdGQ6
Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFN0cmluZyYg
aW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LmRhdGEoKSwg
aW5wdXQuc2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpV
UkwpOworICAgIHJldHVybiBiYXNlNjREZWNvZGUoaW5wdXQsIHsgfSwgQmFzZTY0RGVjb2RlTWFw
OjpVUkwpOwogfQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0
IFZlY3RvcjxjaGFyPiYgaW5wdXQpCitpbmxpbmUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGJhc2U2NFVSTERlY29kZShTdHJpbmdWaWV3IGlucHV0KQogewotICAgIHJldHVybiBiYXNl
NjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgQmFzZTY0RW5jb2Rl
UG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKKyAgICByZXR1cm4gYmFzZTY0RGVj
b2RlKGlucHV0LCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKIH0KIAotaW5saW5lIFN0cmlu
ZyBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhjb25zdCBDU3RyaW5nJiBpbnB1dCkKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZV92PHN0ZDo6cmVtb3Zl
X2NvbnN0X3Q8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8VD4+LCBTdHJpbmc+ICYmICFzdGQ6Omlz
X3NhbWVfdjxzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+Piwg
U3RyaW5nVmlldz4+Kj4KK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxE
ZWNvZGUoVCYmIGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1
dC5kYXRhKCksIGlucHV0Lmxlbmd0aCgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0
RW5jb2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjRVUkxEZWNvZGUoU3Bhbjxjb25zdCBz
dGQ6OmJ5dGU+KGFzQnl0ZXMoU3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCkgfSkpKTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGlubGluZSBib29sIGlz
QmFzZTY0T3JCYXNlNjRVUkxDaGFyYWN0ZXIoQ2hhcmFjdGVyVHlwZSBjKQpAQCAtMjA4LDU3ICsx
ODYsMzYgQEAgaW5saW5lIHVuc2lnbmVkIGNhbGN1bGF0ZUJhc2U2NEVuY29kZWRTaQogfQogCiBz
dHJ1Y3QgQmFzZTY0U3BlY2lmaWNhdGlvbiB7Ci0gICAgY29uc3Qgdm9pZCogaW5wdXREYXRhOwot
ICAgIHVuc2lnbmVkIGlucHV0TGVuZ3RoOworICAgIFNwYW48Y29uc3Qgc3RkOjpieXRlPiBpbnB1
dERhdGE7CiAgICAgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeTsKICAgICBCYXNlNjRFbmNvZGVN
YXAgbWFwOwogfTsKIAotaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChj
b25zdCB2b2lkKiBpbnB1dERhdGEsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNlNjRFbmNvZGVQ
b2xpY3kgcG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0
RW5jb2RlTWFwIG1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCkKLXsKLSAgICByZXR1cm4g
eyBpbnB1dERhdGEsIGlucHV0TGVuZ3RoLCBwb2xpY3ksIG1hcCB9OwotfQotCi1pbmxpbmUgQmFz
ZTY0U3BlY2lmaWNhdGlvbiBiYXNlNjRFbmNvZGVkKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaW5w
dXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90
SW5zZXJ0TEZzKQotewotICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5w
dXQuc2l6ZSgpLCBwb2xpY3kpOwotfQotCi1pbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlvbiBiYXNl
NjRFbmNvZGVkKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBw
b2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzKQotewotICAgIHJldHVy
biBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3kpOwotfQot
Ci1pbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlvbiBiYXNlNjRFbmNvZGVkKGNvbnN0IENTdHJpbmcm
IGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpE
b05vdEluc2VydExGcykKLXsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5kYXRhKCks
IGlucHV0Lmxlbmd0aCgpLCBwb2xpY3kpOwotfQotCi1pbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlv
biBiYXNlNjRVUkxFbmNvZGVkKGNvbnN0IHZvaWQqIGlucHV0RGF0YSwgdW5zaWduZWQgaW5wdXRM
ZW5ndGgpCitpbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlvbiBiYXNlNjRFbmNvZGVkKFNwYW48Y29u
c3Qgc3RkOjpieXRlPiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9IEJhc2U2NEVu
Y29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCBtYXAgPSBCYXNlNjRF
bmNvZGVNYXA6OkRlZmF1bHQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXREYXRh
LCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6
VVJMKTsKKyAgICByZXR1cm4geyBpbnB1dCwgcG9saWN5LCBtYXAgfTsKIH0KIAotaW5saW5lIEJh
c2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChjb25zdCBWZWN0b3I8dWludDhfdD4m
IGlucHV0KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gQmFzZTY0U3BlY2lmaWNhdGlvbiBiYXNlNjRF
bmNvZGVkKFQmJiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9IEJhc2U2NEVuY29k
ZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCBtYXAgPSBCYXNlNjRFbmNv
ZGVNYXA6OkRlZmF1bHQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQuZGF0YSgp
LCBpbnB1dC5zaXplKCksIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6
OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KGFz
Qnl0ZXMoU3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihpbnB1dCkgfSkpLCBwb2xpY3ksIG1hcCk7CiB9
CiAKLWlubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NFVSTEVuY29kZWQoY29uc3QgVmVj
dG9yPGNoYXI+JiBpbnB1dCkKK2lubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NFVSTEVu
Y29kZWQoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQogewotICAgIHJldHVybiBiYXNlNjRF
bmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVS
TCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0
LCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQogCi1p
bmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlvbiBiYXNlNjRVUkxFbmNvZGVkKGNvbnN0IENTdHJpbmcm
IGlucHV0KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gQmFzZTY0U3BlY2lmaWNhdGlvbiBiYXNlNjRV
UkxFbmNvZGVkKFQmJiBpbnB1dCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5k
YXRhKCksIGlucHV0Lmxlbmd0aCgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5j
b2RlTWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKFNwYW48Y29uc3Qgc3RkOjpi
eXRlPihhc0J5dGVzKFNwYW4geyBzdGQ6OmZvcndhcmQ8VD4oaW5wdXQpIH0pKSwgQmFzZTY0RW5j
b2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKIH0KIAogdGVtcGxhdGU8PiBj
bGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxCYXNlNjRTcGVjaWZpY2F0aW9uPiB7CiBwdWJsaWM6CiAg
ICAgU3RyaW5nVHlwZUFkYXB0ZXIoY29uc3QgQmFzZTY0U3BlY2lmaWNhdGlvbiYgYmFzZTY0KQog
ICAgICAgICA6IG1fYmFzZTY0IHsgYmFzZTY0IH0KLSAgICAgICAgLCBtX2VuY29kZWRMZW5ndGgg
eyBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShiYXNlNjQuaW5wdXRMZW5ndGgsIGJhc2U2NC5w
b2xpY3kpIH0KKyAgICAgICAgLCBtX2VuY29kZWRMZW5ndGggeyBjYWxjdWxhdGVCYXNlNjRFbmNv
ZGVkU2l6ZShiYXNlNjQuaW5wdXREYXRhLnNpemUoKSwgYmFzZTY0LnBvbGljeSkgfQogICAgIHsK
ICAgICB9CiAKQEAgLTI2Nyw3ICsyMjQsNyBAQCBwdWJsaWM6CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPiB2b2lkIHdyaXRlVG8oQ2hhcmFjdGVyVHlwZSogZGVzdGluYXRp
b24pIGNvbnN0CiAgICAgewotICAgICAgICBiYXNlNjRFbmNvZGUobV9iYXNlNjQuaW5wdXREYXRh
LCBtX2Jhc2U2NC5pbnB1dExlbmd0aCwgZGVzdGluYXRpb24sIG1fZW5jb2RlZExlbmd0aCwgbV9i
YXNlNjQucG9saWN5LCBtX2Jhc2U2NC5tYXApOworICAgICAgICBiYXNlNjRFbmNvZGUobV9iYXNl
NjQuaW5wdXREYXRhLCBkZXN0aW5hdGlvbiwgbV9lbmNvZGVkTGVuZ3RoLCBtX2Jhc2U2NC5wb2xp
Y3ksIG1fYmFzZTY0Lm1hcCk7CiAgICAgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dURi93
dGYvdGV4dC9DU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9DU3Ry
aW5nLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFp
dHMuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtMzksOSArNDAs
MTEgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoQwogY2xhc3MgQ1N0
cmluZ0J1ZmZlciBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPENTdHJpbmdCdWZmZXI+IHsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihDU3RyaW5nQnVm
ZmVyKTsKIHB1YmxpYzoKLSAgICBjb25zdCBjaGFyKiBkYXRhKCkgeyByZXR1cm4gbXV0YWJsZURh
dGEoKTsgfQorICAgIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0
PENTdHJpbmdCdWZmZXIqPih0aGlzKS0+bXV0YWJsZURhdGEoKTsgfQogICAgIHNpemVfdCBsZW5n
dGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQogCisgICAgU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4gYXNCeXRlcyhTcGFuIHsgZGF0YSgpLCBsZW5ndGgo
KSB9KTsgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDU3RyaW5nOwogCkBAIC02Niw2
ICs2OSwyMCBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBDU3RyaW5n
IG5ld1VuaW5pdGlhbGl6ZWQoc2l6ZV90IGxlbmd0aCwgY2hhciomIGNoYXJhY3RlckJ1ZmZlcik7
CiAgICAgQ1N0cmluZyhIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IG1fYnVmZmVyKEhhc2hU
YWJsZURlbGV0ZWRWYWx1ZSkgeyB9CiAKKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMo
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fYnVmZmVyKQorICAgICAgICAgICAgcmV0dXJu
IG1fYnVmZmVyLT5ieXRlcygpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFNw
YW48c3RkOjpieXRlPiBtdXRhYmxlQnl0ZXMoKQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8gbXV0
YWJsZURhdGEgPSB0aGlzLT5tdXRhYmxlRGF0YSgpKQorICAgICAgICAgICAgcmV0dXJuIGFzV3Jp
dGFibGVCeXRlcyhTcGFuIHsgbXV0YWJsZURhdGEsIG1fYnVmZmVyLT5sZW5ndGgoKSB9KTsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKICAgICBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3QK
ICAgICB7CiAgICAgICAgIHJldHVybiBtX2J1ZmZlciA/IG1fYnVmZmVyLT5kYXRhKCkgOiBudWxs
cHRyOwpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgJKHJldmlzaW9uIDI3ODgwOSkKKysr
IFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2
ICs5NCw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBMQ2hhciogY2hhcmFjdGVyczgoKSBjb25zdDsK
ICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVyczE2KCkgY29uc3Q7CiAKKyAgICBTcGFuPGNvbnN0
IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25zdDsKKwogICAgIGJvb2wgaXNBbGxBU0NJSSgpIGNvbnN0
OwogCiAgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CkBAIC00MjQsNiArNDI2LDEzIEBAIGlu
bGluZSBjb25zdCBVQ2hhciogU3RyaW5nVmlldzo6Y2hhcmFjdGUKICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y29uc3QgVUNoYXIqPihtX2NoYXJhY3RlcnMpOwogfQogCitpbmxpbmUgU3Bhbjxjb25z
dCBzdGQ6OmJ5dGU+IFN0cmluZ1ZpZXc6OmJ5dGVzKCkgY29uc3QKK3sKKyAgICBpZiAoaXM4Qml0
KCkpCisgICAgICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBjaGFyYWN0ZXJzOCgpLCBsZW5ndGgo
KSB9KTsKKyAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgY2hhcmFjdGVyczE2KCksIGxlbmd0aCgp
IH0pOworfQorCiBpbmxpbmUgYm9vbCBTdHJpbmdWaWV3Ojppc0FsbEFTQ0lJKCkgY29uc3QKIHsK
ICAgICBpZiAoaXM4Qml0KCkpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPHd0
Zi9GdW5jdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
QVNDSUlMaXRlcmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvSW50ZWdlclRvU3RyaW5nQ29udmVy
c2lvbi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KQEAgLTEzNCw2ICsxMzUs
NyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiAhbV9pbXBsIHx8
IG1faW1wbC0+aXM4Qml0KCk7IH0KIAogICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgY29uc3Qg
eyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5sZW5ndGgoKSAqIChpczhCaXQoKSA/IHNpemVvZihM
Q2hhcikgOiBzaXplb2YoVUNoYXIpKSA6IDA7IH0KKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
Ynl0ZXMoKSBjb25zdDsKIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBDU3RyaW5nIGFzY2lpKCkg
Y29uc3Q7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIENTdHJpbmcgbGF0aW4xKCkgY29uc3Q7CkBA
IC00ODMsNiArNDg1LDE2IEBAIHRlbXBsYXRlPD4gaW5saW5lIGNvbnN0IFVDaGFyKiBTdHJpbmc6
OmMKICAgICByZXR1cm4gY2hhcmFjdGVyczE2KCk7CiB9CiAKK2lubGluZSBTcGFuPGNvbnN0IHN0
ZDo6Ynl0ZT4gU3RyaW5nOjpieXRlcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ltcGwpCisgICAg
ICAgIHJldHVybiB7IH07CisKKyAgICBpZiAobV9pbXBsLT5pczhCaXQoKSkKKyAgICAgICAgcmV0
dXJuIGFzQnl0ZXMoU3BhbiB7IG1faW1wbC0+Y2hhcmFjdGVyczgoKSwgbV9pbXBsLT5sZW5ndGgo
KSB9KTsKKyAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgbV9pbXBsLT5jaGFyYWN0ZXJzMTYoKSwg
bV9pbXBsLT5sZW5ndGgoKSB9KTsKK30KKwogaW5saW5lIFVDaGFyIFN0cmluZzo6Y2hhcmFjdGVy
QXQodW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ltcGwgfHwgaW5kZXggPj0g
bV9pbXBsLT5sZW5ndGgoKSkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2lu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzYzLDkgKzM2Myw5IEBAIFN0cmluZyBjcmVhdGVUZW1wb3Jh
cnlEaXJlY3RvcnkoKQogICAgIH0pOwogfQogCi1ib29sIHVubWFwVmlld09mRmlsZSh2b2lkKiBi
dWZmZXIsIHNpemVfdCkKK2Jvb2wgdW5tYXBWaWV3T2ZGaWxlKFNwYW48c3RkOjpieXRlPiBkYXRh
KQogewotICAgIHJldHVybiBVbm1hcFZpZXdPZkZpbGUoYnVmZmVyKTsKKyAgICByZXR1cm4gVW5t
YXBWaWV3T2ZGaWxlKGRhdGEuZGF0YSgpKTsKIH0KIAogYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFw
RmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBGaWxlT3Blbk1vZGUgb3Blbk1v
ZGUsIE1hcHBlZEZpbGVNb2RlKQpAQCAtMzc0LDcgKzM3NCw3IEBAIGJvb2wgTWFwcGVkRmlsZURh
dGE6Om1hcEZpbGVIYW5kbGUoUGxhdGYKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0
byBzaXplID0gZmlsZVNpemUoaGFuZGxlKTsKLSAgICBpZiAoIXNpemUgfHwgKnNpemUgPiBzdGQ6
Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIHx8ICpzaXplID4gc3RkOjpudW1lcmljX2xp
bWl0czxkZWNsdHlwZShtX2ZpbGVTaXplKT46Om1heCgpKSB7CisgICAgaWYgKCFzaXplIHx8ICpz
aXplID4gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSB8fCAqc2l6ZSA+IHN0ZDo6
bnVtZXJpY19saW1pdHM8ZGVjbHR5cGUobV9maWxlRGF0YS5zaXplKCkpPjo6bWF4KCkpIHsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNDAzLDExICs0MDMsMTIgQEAgYm9vbCBN
YXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0ZgogICAgIGlmICghbWFwcGluZykKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9maWxlRGF0YSA9IE1hcFZpZXdPZkZpbGUobWFw
cGluZywgZGVzaXJlZEFjY2VzcywgMCwgMCwgKnNpemUpOworICAgIGF1dG8gZGF0YSA9IE1hcFZp
ZXdPZkZpbGUobWFwcGluZywgZGVzaXJlZEFjY2VzcywgMCwgMCwgKnNpemUpOwogICAgIENsb3Nl
SGFuZGxlKG1hcHBpbmcpOwotICAgIGlmICghbV9maWxlRGF0YSkKKyAgICBpZiAoIWRhdGEpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2ZpbGVTaXplID0gKnNpemU7CisKKyAgICBtX2Zp
bGVEYXRhID0gU3BhbiB7IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpieXRlKj4oZGF0YSksICpzaXpl
IH07CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDgwIEBACisyMDIxLTA2LTExICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAg
ICAgICBBZG9wdCBTcGFuIGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogTW9kdWxlcy9oaWdobGln
aHQvQXBwSGlnaGxpZ2h0Lmg6CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHQ6OmVuY29k
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHQ6OmRlY29kZSk6CisgICAg
ICAgICogTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6dG9TaGFyZWRCdWZmZXIgY29uc3Qp
OgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvclJlc3BvbnNlRGF0YS5o
OgorICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlQXJyYXlCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6ZGVjb2RlQXJyYXlCdWZmZXIpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGlj
S2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oOgorICAgICAgICAoV2ViQ29yZTo6UHVibGlj
S2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmg6CisgICAgICAg
IChXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcjo6ZW5jb2RlIGNvbnN0KToK
KyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRXZWJTb2NrZXRB
Y2NlcHQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0J1ZmZlclNvdXJjZS5oOgorICAgICAgICAo
V2ViQ29yZTo6QnVmZmVyU291cmNlOjpieXRlcyBjb25zdCk6CisgICAgICAgICogYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVk
U2NyaXB0VmFsdWU6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVk
U2NyaXB0VmFsdWU6OmRlY29kZSk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvU2VyaWFs
aXplZE5GQS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6U2VyaWFs
aXplZE5GQTo6cG9pbnRlckF0T2Zmc2V0SW5GaWxlIGNvbnN0KToKKyAgICAgICAgKiBjcnlwdG8v
bWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlQW5kU3RvcmVNYXN0ZXJLZXkpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Omhhc2hQb2ludGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBw
b3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBhdGNoU3VwcG9ydDo6Y3JlYXRlRGlnZXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OmFkZFN0cmluZ1RvU0hBMSk6IERlbGV0ZWQuCisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZpY2F0ZSk6CisgICAgICAgICogaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yTmV0d29ya0FnZW50OjpnZXRTZXJpYWxpemVkQ2VydGlmaWNhdGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpjcmVhdGVTaGFyZWRCdWZmZXIgY29uc3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFy
ZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6
OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50Ojpk
YXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6
OmJ5dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6ZGVjb2RlciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpzaXpl
IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaDoKKyAgICAgICAg
KFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZW5jb2RlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZGVjb2RlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Nb2RlbC5oOgorICAgICAgICAoV2ViQ29yZTo6TW9kZWw6OmVu
Y29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNb2RlbDo6ZGVjb2RlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6UGl4
ZWxCdWZmZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6
ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291
cmNlQ2FwYWJpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpDYXBhYmlsaXR5VmFsdWVPclJh
bmdlOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FwYWJpbGl0eVZhbHVlT3JS
YW5nZTo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1l
ZGlhU291cmNlQ2VudGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZFN0cmluZ1RvU0hBMSk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHA6
CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjplbmNvZGVDRkRhdGEpOgorICAgICAgICAoV1RG
OjpQZXJzaXN0ZW5jZTo6ZGVjb2RlQ0ZEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FM
aXRlU3RhdGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6Ymlu
ZEJsb2IpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaDoKKyAgICAg
ICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzKToKKyAg
ICAgICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTV1NjcmlwdFN0b3JhZ2U6OnN0b3JlKToKKwogMjAyMS0wNi0xMSAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIExhemlseSBjb21wdXRlIFNl
Y3VyaXR5T3JpZ2luOjptX2lzUG90ZW50aWFsbHlUcnVzdHdvcnRoeSBmb3IgcGVyZm9ybWFuY2UK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvSW5pdERhdGFSZWdp
c3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRt
ZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIHN0YXRpYyBSZWZQdHI8U2hhcmVkQnVmZmVyPiBz
YW5pdGl6ZUtleWkKICAgICBhdXRvIG9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAg
ICAgYXV0byBraWRzQXJyYXkgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgZm9yIChhdXRv
JiBidWZmZXIgOiBrZXlJREJ1ZmZlci52YWx1ZSgpKQotICAgICAgICBraWRzQXJyYXktPnB1c2hT
dHJpbmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6
ZSgpKSk7CisgICAgICAgIGtpZHNBcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVUb1N0
cmluZyhidWZmZXItPmJ5dGVzKCkpKTsKICAgICBvYmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RG
TW92ZShraWRzQXJyYXkpKTsKIAogICAgIENTdHJpbmcganNvbkRhdGEgPSBvYmplY3QtPnRvSlNP
TlN0cmluZygpLnV0ZjgoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0
L0FwcEhpZ2hsaWdodC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGln
aGxpZ2h0L0FwcEhpZ2hsaWdodC5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTIs
NyArNTIsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBBcHBIaWdobGlnaHQ6OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nh
c3Q8c2l6ZV90PihoaWdobGlnaHQtPnNpemUoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEoaGlnaGxpZ2h0LT5kYXRhKCksIGhpZ2hsaWdodC0+c2l6ZSgpLCAxKTsKKyAgICBl
bmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YSgqaGlnaGxpZ2h0LCAxKTsKIAogICAgIGVuY29k
ZXIgPDwgdGV4dDsKIApAQCAtNzUsNyArNzUsNyBAQCBzdGQ6Om9wdGlvbmFsPEFwcEhpZ2hsaWdo
dD4gQXBwSGlnaGxpZ2h0CiAKICAgICBWZWN0b3I8dWludDhfdD4gaGlnaGxpZ2h0OwogICAgIGhp
Z2hsaWdodC5ncm93KCpsZW5ndGgpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0
aERhdGEoaGlnaGxpZ2h0LmRhdGEoKSwgaGlnaGxpZ2h0LnNpemUoKSwgMSkpCisgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShoaWdobGlnaHQsIDEpKQogICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwogCiAgICAgc3RkOjpvcHRpb25hbDxzdGQ6Om9wdGlvbmFsPFN0cmlu
Zz4+IHRleHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdo
bGlnaHRSYW5nZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFJhbmdlRGF0YS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFJhbmdlRGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgUmVmPFNoYXJlZEJ1ZmZlcj4gQXBw
SGlnaGxpZ2h0UmFuZ2VEYXRhOgogewogICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5j
b2RlcjsKICAgICBlbmNvZGVyIDw8ICp0aGlzOwotICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNy
ZWF0ZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgcmV0dXJu
IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCkpOwogfQogCiB0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPiB2b2lkIEFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6Tm9kZVBhdGhDb21wb25l
bnQ6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0
YUNoYW5uZWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIE5ldHdvcmtTZW5k
UXVldWUgUlRDRGF0YUNoYW5uZWw6OmNyZWF0ZU0KICAgICAgICAgaWYgKCFjaGFubmVsLm1faGFu
ZGxlci0+c2VuZFN0cmluZ0RhdGEodXRmOCkpCiAgICAgICAgICAgICBjaGFubmVsLnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1l
c3NhZ2VMZXZlbDo6RXJyb3IsICJFcnJvciBzZW5kaW5nIHN0cmluZyB0aHJvdWdoIFJUQ0RhdGFD
aGFubmVsLiJfcyk7CiAgICAgfSwgWyZjaGFubmVsXShhdXRvJiBzcGFuKSB7Ci0gICAgICAgIGlm
ICghY2hhbm5lbC5tX2hhbmRsZXItPnNlbmRSYXdEYXRhKHNwYW4uZGF0YSgpLCBzcGFuLnNpemUo
KSkpCisgICAgICAgIGlmICghY2hhbm5lbC5tX2hhbmRsZXItPnNlbmRSYXdEYXRhKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNwYW4uZGF0YSgpKSwgc3Bhbi5zaXplKCkpKQogICAg
ICAgICAgICAgY2hhbm5lbC5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFkZENvbnNvbGVNZXNz
YWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAiRXJyb3Igc2VuZGlu
ZyBiaW5hcnkgZGF0YSB0aHJvdWdoIFJUQ0RhdGFDaGFubmVsLiJfcyk7CiAgICAgfSwgWyZjaGFu
bmVsXShFeGNlcHRpb25Db2RlIGVycm9yQ29kZSkgewogICAgICAgICBpZiAoYXV0byogY29udGV4
dCA9IGNoYW5uZWwuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJl
cGxhY2VtZW50Lm1tCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0JKHdvcmtpbmcgY29weSkKQEAg
LTUyLDYgKzUyLDcgQEAKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0NhdGNoU2NvcGUuaD4KICNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CiAjaW1wb3J0IDxvYmpjL3J1
bnRpbWUuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9TcGFuQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi90
ZXh0L0Jhc2U2NC5oPgogCiAjaW1wb3J0IDxwYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaD4KQEAg
LTI0Niw5ICsyNDcsOSBAQCBzdGF0aWMgSlNWYWx1ZSAqanNWYWx1ZVdpdGhEYXRhSW5Db250ZXh0
CiAgICAgLy8gRklYTUU6IEFkZCBtYWtlQ0ZTdHJpbmcvbWFrZU5TU3RyaW5nIHRvIGF2b2lkIHVu
bmVjZXNzYXJ5IFN0cmluZyBhbGxvY2F0aW9uLgogICAgIFN0cmluZyBkYXRhNjQ7CiAgICAgaWYg
KCFtaW1lVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6
IiwgbWltZVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoW2RhdGEgYnl0ZXNdLCBbZGF0
YSBsZW5ndGhdKSk7CisgICAgICAgIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgbWltZVR5
cGUsICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoYXNCeXRlcyhkYXRhKSkpOwogICAgIGVsc2UK
LSAgICAgICAgZGF0YTY0ID0gbWFrZVN0cmluZygiZGF0YTp0ZXh0L3BsYWluO2Jhc2U2NCwiLCBi
YXNlNjRFbmNvZGVkKFtkYXRhIGJ5dGVzXSwgW2RhdGEgbGVuZ3RoXSkpOworICAgICAgICBkYXRh
NjQgPSBtYWtlU3RyaW5nKCJkYXRhOnRleHQvcGxhaW47YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQo
YXNCeXRlcyhkYXRhKSkpOwogCiAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aE9iamVjdDoo
aWQpZGF0YTY0LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkgaW5Db250ZXh0OmNvbnRleHRdOwogfQpA
QCAtMzQwLDcgKzM0MSw3IEBAIHN0YXRpYyBKU1ZhbHVlICpqc1ZhbHVlV2l0aEFWTWV0YWRhdGFJ
dGUKICAgICAgICAgaWQgdmFsdWUgPSBpdGVtLnZhbHVlOwogICAgICAgICBOU1N0cmluZyAqbWlt
ZVR5cGUgPSBbW2l0ZW0gZXh0cmFBdHRyaWJ1dGVzXSBvYmplY3RGb3JLZXk6QCJNSU1FdHlwZSJd
OwogICAgICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TRGF0YSBjbGFzc11dICYmIG1p
bWVUeXBlKSB7Ci0gICAgICAgICAgICBhdXRvIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6Iiwg
U3RyaW5nKG1pbWVUeXBlKSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChbdmFsdWUgYnl0ZXNd
LCBbdmFsdWUgbGVuZ3RoXSkpOworICAgICAgICAgICAgYXV0byBkYXRhNjQgPSBtYWtlU3RyaW5n
KCJkYXRhOiIsIFN0cmluZyhtaW1lVHlwZSksICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoYXNC
eXRlcygoTlNEYXRhICopdmFsdWUpKSk7CiAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmpl
Y3Q6KF9fYnJpZGdlIE5TU3RyaW5nICopZGF0YTY0LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkgZm9y
S2V5OkAidmFsdWUiXTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBbZGljdGlvbmFyeSBz
ZXRPYmplY3Q6dmFsdWUgZm9yS2V5OkAidmFsdWUiXTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRpY2F0b3JDb29yZGluYXRv
ci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0
aG4vQXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyAr
NjQsNyBAQCBzdGF0aWMgUmVmPEFycmF5QnVmZmVyPiBwcm9kdWNlQ2xpZW50RGF0CiAgICAgICAg
IG9iamVjdC0+c2V0U3RyaW5nKCJ0eXBlIl9zLCAid2ViYXV0aG4uZ2V0Il9zKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQotICAgIG9iamVjdC0+c2V0U3RyaW5nKCJjaGFsbGVuZ2UiX3MsIGJhc2U2
NFVSTEVuY29kZVRvU3RyaW5nKGNoYWxsZW5nZS5kYXRhKCksIGNoYWxsZW5nZS5sZW5ndGgoKSkp
OworICAgIG9iamVjdC0+c2V0U3RyaW5nKCJjaGFsbGVuZ2UiX3MsIGJhc2U2NFVSTEVuY29kZVRv
U3RyaW5nKGNoYWxsZW5nZS5ieXRlcygpKSk7CiAgICAgb2JqZWN0LT5zZXRTdHJpbmcoIm9yaWdp
biJfcywgb3JpZ2luLnRvUmF3U3RyaW5nKCkpOwogCiAgICAgYXV0byB1dGY4SlNPTlN0cmluZyA9
IG9iamVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yUmVzcG9uc2VEYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yUmVzcG9uc2VEYXRh
LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4v
QXV0aGVudGljYXRvclJlc3BvbnNlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3
IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiBzdGF0aWMgdm9pZCBlbmNvZGVBcnJheUJ1ZmZl
cihFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBBcnJheUJ1ZmZlciYgYnVmZmVyKQogewogICAgIGVu
Y29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ1ZmZlci5ieXRlTGVuZ3RoKCkpOwotICAg
IGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihidWZmZXIuZGF0YSgpKSwgYnVmZmVyLmJ5dGVMZW5ndGgoKSwgMSk7CisgICAgZW5jb2Rlci5l
bmNvZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLmJ5dGVzKCksIDEpOwogfQogCiB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPgpAQCAtNzUsNyArNzUsNyBAQCBSZWZQdHI8QXJyYXlCdWZmZXI+IGRlY29k
ZUFycmF5QnVmZmVyKERlCiAgICAgYXV0byBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRl
KGxlbmd0aC52YWx1ZSgpLCBzaXplb2YodWludDhfdCkpOwogICAgIGlmICghYnVmZmVyKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhE
YXRhKHN0YXRpY19jYXN0PHVpbnQ4X3QqPihidWZmZXItPmRhdGEoKSksIGxlbmd0aC52YWx1ZSgp
LCAxKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ1ZmZlci0+d3Jp
dGFibGVCeXRlcygpLCAxKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIGJ1
ZmZlcjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5
Q3JlZGVudGlhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRP
dXRwdXRzIFB1CiB9CiAKIFB1YmxpY0tleUNyZWRlbnRpYWw6OlB1YmxpY0tleUNyZWRlbnRpYWwo
UmVmPEF1dGhlbnRpY2F0b3JSZXNwb25zZT4mJiByZXNwb25zZSkKLSAgICA6IEJhc2ljQ3JlZGVu
dGlhbChiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhyZXNwb25zZS0+cmF3SWQoKS0+ZGF0YSgpLCBy
ZXNwb25zZS0+cmF3SWQoKS0+Ynl0ZUxlbmd0aCgpKSwgVHlwZTo6UHVibGljS2V5LCBEaXNjb3Zl
cnk6OlJlbW90ZSkKKyAgICA6IEJhc2ljQ3JlZGVudGlhbChiYXNlNjRVUkxFbmNvZGVUb1N0cmlu
ZyhyZXNwb25zZS0+cmF3SWQoKS0+Ynl0ZXMoKSksIFR5cGU6OlB1YmxpY0tleSwgRGlzY292ZXJ5
OjpSZW1vdGUpCiAgICAgLCBtX3Jlc3BvbnNlKFdURk1vdmUocmVzcG9uc2UpKQogewogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3Jl
YXRpb25PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmgJKHJldmlzaW9uIDI3ODgw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlh
bENyZWF0aW9uT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsOCArMTQxLDggQEAgdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0
aW9uczo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBy
cC5pZCA8PCBycC5uYW1lIDw8IHJwLmljb247Ci0gICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1
aW50NjRfdD4odXNlci5pZC5sZW5ndGgoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEodXNlci5pZC5kYXRhKCksIHVzZXIuaWQubGVuZ3RoKCksIDEpOworICAgIGVuY29kZXIg
PDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHVzZXIuaWQuYnl0ZXMoKS5zaXplKCkpOworICAgIGVu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHVzZXIuaWQuYnl0ZXMoKSwgMSk7CiAgICAgZW5j
b2RlciA8PCB1c2VyLmRpc3BsYXlOYW1lIDw8IHVzZXIubmFtZSA8PCB1c2VyLmljb24gPDwgcHVi
S2V5Q3JlZFBhcmFtcyA8PCB0aW1lb3V0IDw8IGV4Y2x1ZGVDcmVkZW50aWFscyA8PCBhdXRoZW50
aWNhdG9yU2VsZWN0aW9uIDw8IGF0dGVzdGF0aW9uIDw8IGV4dGVuc2lvbnM7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbERlc2Ny
aXB0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1
YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsOCBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
Pgogdm9pZCBQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcjo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCB0eXBlOwotICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KGlkLmxlbmd0aCgpKTsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVk
TGVuZ3RoRGF0YShpZC5kYXRhKCksIGlkLmxlbmd0aCgpLCAxKTsKKyAgICBlbmNvZGVyIDw8IHN0
YXRpY19jYXN0PHVpbnQ2NF90PihpZC5ieXRlcygpLnNpemUoKSk7CisgICAgZW5jb2Rlci5lbmNv
ZGVGaXhlZExlbmd0aERhdGEoaWQuYnl0ZXMoKSwgMSk7CiAgICAgZW5jb2RlciA8PCB0cmFuc3Bv
cnRzOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29j
a2V0SGFuZHNoYWtlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk3LDE5ICs5NywyMCBAQCBzdGF0aWMgU3RyaW5nIGdlbmVyYXRlU2Vj
V2ViU29ja2V0S2V5KCkKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG5vbmNlU2l6ZSA9IDE2Owog
ICAgIHVuc2lnbmVkIGNoYXIga2V5W25vbmNlU2l6ZV07CiAgICAgY3J5cHRvZ3JhcGhpY2FsbHlS
YW5kb21WYWx1ZXMoa2V5LCBub25jZVNpemUpOwotICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0
cmluZyhrZXksIG5vbmNlU2l6ZSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGtl
eSk7CiB9CiAKIFN0cmluZyBXZWJTb2NrZXRIYW5kc2hha2U6OmdldEV4cGVjdGVkV2ViU29ja2V0
QWNjZXB0KGNvbnN0IFN0cmluZyYgc2VjV2ViU29ja2V0S2V5KQogewogICAgIGNvbnN0ZXhwciB1
aW50OF90IHdlYlNvY2tldEtleUdVSURbXSA9ICIyNThFQUZBNS1FOTE0LTQ3REEtOTVDQS1DNUFC
MERDODVCMTEiOworCiAgICAgU0hBMSBzaGExOwotICAgIENTdHJpbmcga2V5RGF0YSA9IHNlY1dl
YlNvY2tldEtleS5hc2NpaSgpOwotICAgIHNoYTEuYWRkQnl0ZXMoa2V5RGF0YS5kYXRhQXNVSW50
OFB0cigpLCBrZXlEYXRhLmxlbmd0aCgpKTsKLSAgICBzaGExLmFkZEJ5dGVzKHdlYlNvY2tldEtl
eUdVSUQsIHN0ZDo6c2l6ZSh3ZWJTb2NrZXRLZXlHVUlEKSAtIDEpOworICAgIHNoYTEuYWRkQnl0
ZXMoc2VjV2ViU29ja2V0S2V5LmFzY2lpKCkuYnl0ZXMoKSk7CisgICAgc2hhMS5hZGRCeXRlcyh3
ZWJTb2NrZXRLZXlHVUlEKTsKKwogICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwogICAgIHNoYTEuY29t
cHV0ZUhhc2goaGFzaCk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGhhc2guZGF0
YSgpLCBTSEExOjpoYXNoU2l6ZSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGhh
c2gpOwogfQogCiBXZWJTb2NrZXRIYW5kc2hha2U6OldlYlNvY2tldEhhbmRzaGFrZShjb25zdCBV
UkwmIHVybCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQs
IGNvbnN0IFN0cmluZyYgY2xpZW50T3JpZ2luLCBib29sIGFsbG93Q29va2llcykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvV2Vi
Q29yZS54Y3NjaGVtZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai94Y3NoYXJlZGRhdGEveGNzY2hlbWVzL1dlYkNvcmUueGNzY2hlbWUJKHJldmlzaW9uIDI3
ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94
Y3NjaGVtZXMvV2ViQ29yZS54Y3NjaGVtZQkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksOSBA
QAogICAgICAgaWdub3Jlc1BlcnNpc3RlbnRTdGF0ZU9uTGF1bmNoID0gIk5PIgogICAgICAgZGVi
dWdEb2N1bWVudFZlcnNpb25pbmcgPSAiWUVTIgogICAgICAgZGVidWdTZXJ2aWNlRXh0ZW5zaW9u
ID0gImludGVybmFsIgotICAgICAgYWxsb3dMb2NhdGlvblNpbXVsYXRpb24gPSAiWUVTIj4KKyAg
ICAgIGVuYWJsZUdQVUZyYW1lQ2FwdHVyZU1vZGUgPSAiMyIKKyAgICAgIGFsbG93TG9jYXRpb25T
aW11bGF0aW9uID0gIllFUyIKKyAgICAgIEdQVVByb2ZpbGVyRW5hYmxlZCA9ICJObyI+CiAgICA8
L0xhdW5jaEFjdGlvbj4KICAgIDxQcm9maWxlQWN0aW9uCiAgICAgICBidWlsZENvbmZpZ3VyYXRp
b24gPSAiUmVsZWFzZSIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0J1ZmZlclNv
dXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0J1ZmZlclNv
dXJjZS5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9C
dWZmZXJTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsMTMgQEAgcHVibGljOgog
ICAgICAgICB9LCBtX3ZhcmlhbnQpOwogICAgIH0KIAorICAgIFNwYW48Y29uc3QgdWludDhfdD4g
Ynl0ZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQoW10oYXV0byYg
YnVmZmVyKSAtPiBTcGFuPGNvbnN0IHVpbnQ4X3Q+IHsKKyAgICAgICAgICAgIHJldHVybiBidWZm
ZXIgPyBTcGFuPGNvbnN0IHVpbnQ4X3Q+IHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1
ZmZlci0+ZGF0YSgpKSwgYnVmZmVyLT5ieXRlTGVuZ3RoKCkgfSA6IFNwYW48Y29uc3QgdWludDhf
dD4geyB9OworICAgICAgICB9LCBtX3ZhcmlhbnQpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBW
YXJpYW50VHlwZSBtX3ZhcmlhbnQ7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgJKHJldmlzaW9uIDI3ODgwOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjQsMTUgKzE2NCwxNSBAQCB2b2lkIFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6ZW5jb2RlKEVuY29kCiAKICAgICBpZiAoaGFzQXJyYXkpIHsKICAgICAgICAgZW5jb2RlciA8
PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4obV9hcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXktPnNpemUo
KSk7Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byAmYXJyYXlCdWZmZXJDb250ZW50cyA6ICptX2Fy
cmF5QnVmZmVyQ29udGVudHNBcnJheSkgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGFycmF5
QnVmZmVyQ29udGVudHMgOiAqbV9hcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkpIHsKICAgICAgICAg
ICAgIGVuY29kZXIgPDwgYXJyYXlCdWZmZXJDb250ZW50cy5zaXplSW5CeXRlcygpOwotICAgICAg
ICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoc3RhdGljX2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KGFycmF5QnVmZmVyQ29udGVudHMuZGF0YSgpKSwgYXJyYXlCdWZmZXJDb250ZW50cy5z
aXplSW5CeXRlcygpLCAxKTsKKyAgICAgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKGFycmF5QnVmZmVyQ29udGVudHMuYnl0ZXMoKSwgMSk7CiAgICAgICAgIH0KICAgICB9CiAK
ICNpZiBFTkFCTEUoV0VCX1JUQykKICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90
PihtX2RldGFjaGVkUlRDRGF0YUNoYW5uZWxzLnNpemUoKSk7Ci0gICAgZm9yIChjb25zdCBhdXRv
ICZjaGFubmVsIDogbV9kZXRhY2hlZFJUQ0RhdGFDaGFubmVscykKKyAgICBmb3IgKGNvbnN0IGF1
dG8mIGNoYW5uZWwgOiBtX2RldGFjaGVkUlRDRGF0YUNoYW5uZWxzKQogICAgICAgICBlbmNvZGVy
IDw8ICpjaGFubmVsOwogI2VuZGlmCiB9CkBAIC0yMDYsNyArMjA2LDcgQEAgUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZAogICAgICAgICAgICAgYXV0byBidWZmZXIgPSBH
aWdhY2FnZTo6dHJ5TWFsbG9jKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJ1ZmZlclNpemUpOwogICAg
ICAgICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHN0YXRpY19jYXN0
PHVpbnQ4X3QqPihidWZmZXIpLCBidWZmZXJTaXplLCAxKSkgeworICAgICAgICAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgc3RhdGljX2Nhc3Q8c3RkOjpieXRl
Kj4oYnVmZmVyKSwgYnVmZmVyU2l6ZSB9LCAxKSkgewogICAgICAgICAgICAgICAgIEdpZ2FjYWdl
OjpmcmVlKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9TZXJpYWxpemVkTkZBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9TZXJpYWxpemVkTkZBLmNwcAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvU2VyaWFsaXplZE5GQS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBTZXJpYWxpemVkTkZBOjpTZXJpYWxpemVk
TkZBKEZpbGVTeXN0ZW06CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogY29uc3QgVCogU2VyaWFsaXpl
ZE5GQTo6cG9pbnRlckF0T2Zmc2V0SW5GaWxlKHNpemVfdCBvZmZzZXQpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4
X3QqPihtX2ZpbGUuZGF0YSgpKSArIG9mZnNldCk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgVCo+KG1fZmlsZS5kYXRhKCkuZGF0YSgpICsgb2Zmc2V0KTsKIH0KIAogYXV0byBT
ZXJpYWxpemVkTkZBOjpub2RlcygpIGNvbnN0IC0+IGNvbnN0IFJhbmdlPEltbXV0YWJsZU5GQU5v
ZGU+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNw
cAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9L
ZXlFQ01hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NywxMCArMTk3LDEwIEBAIGJvb2wgQ3J5
cHRvS2V5RUM6OnBsYXRmb3JtQWRkRmllbGRFbGVtZW4KIAogICAgIGlmIChVTkxJS0VMWSgoc2l6
ZSAhPSBwdWJsaWNLZXlTaXplKSAmJiAoc2l6ZSAhPSBwcml2YXRlS2V5U2l6ZSkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgandrLnggPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhyZXN1
bHQuZGF0YSgpICsgMSwga2V5U2l6ZUluQnl0ZXMpOwotICAgIGp3ay55ID0gYmFzZTY0VVJMRW5j
b2RlVG9TdHJpbmcocmVzdWx0LmRhdGEoKSArIGtleVNpemVJbkJ5dGVzICsgMSwga2V5U2l6ZUlu
Qnl0ZXMpOworICAgIGp3ay54ID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoU3BhbiB7IHJlc3Vs
dCB9LnN1YnNwYW4oMSwga2V5U2l6ZUluQnl0ZXMpKTsKKyAgICBqd2sueSA9IGJhc2U2NFVSTEVu
Y29kZVRvU3RyaW5nKFNwYW4geyByZXN1bHQgfS5zdWJzcGFuKDEgKyBrZXlTaXplSW5CeXRlcywg
a2V5U2l6ZUluQnl0ZXMpKTsKICAgICBpZiAoc2l6ZSA+IHB1YmxpY0tleVNpemUpCi0gICAgICAg
IGp3ay5kID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcocmVzdWx0LmRhdGEoKSArIHB1YmxpY0tl
eVNpemUsIGtleVNpemVJbkJ5dGVzKTsKKyAgICAgICAgandrLmQgPSBiYXNlNjRVUkxFbmNvZGVU
b1N0cmluZyhTcGFuIHsgcmVzdWx0IH0uc3Vic3BhbihwdWJsaWNLZXlTaXplLCBrZXlTaXplSW5C
eXRlcykpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlw
dG8vbWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9tYWMvU2VyaWFsaXplZENyeXB0b0tleVdyYXBNYWMubW0JKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvU2VyaWFsaXplZENyeXB0
b0tleVdyYXBNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbXBvcnQg
PHd0Zi9DcnlwdG9ncmFwaGljVXRpbGl0aWVzLmg+CiAjaW1wb3J0IDx3dGYvUHJvY2Vzc1ByaXZp
bGVnZS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL2NmL1NwYW5D
Ri5oPgogI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvc3Bp
L2NvY29hL1NlY3VyaXR5U1BJLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4KQEAgLTE2
Nyw3ICsxNjgsNyBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGZpCiAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQogICAgIFJldGFpblB0cjxDRkRhdGFS
ZWY+IGtleURhdGEgPSBhZG9wdENGKGtleURhdGFSZWYpOwotICAgIHJldHVybiBiYXNlNjREZWNv
ZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihrZXlEYXRhLmdldCgpKSwgQ0ZEYXRhR2V0TGVuZ3RoKGtleURh
dGEuZ2V0KCkpKTsKKyAgICByZXR1cm4gYmFzZTY0RGVjb2RlKGFzQnl0ZXMoa2V5RGF0YS5nZXQo
KSkpOwogfQogCiBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZGVmYXVsdFdlYkNyeXB0
b01hc3RlcktleSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MDYsNyArMTYw
Niw4IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IE5vZGU6OnNldFRleHRDb250ZW50KGMKIHN0YXRpYyBT
SEExOjpEaWdlc3QgaGFzaFBvaW50ZXIoY29uc3Qgdm9pZCogcG9pbnRlcikKIHsKICAgICBTSEEx
IHNoYTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3Qq
PigmcG9pbnRlciksIHNpemVvZihwb2ludGVyKSk7CisgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsg
JnBvaW50ZXIsIDEgfSk7CisKICAgICBTSEExOjpEaWdlc3QgZGlnZXN0OwogICAgIHNoYTEuY29t
cHV0ZUhhc2goZGlnZXN0KTsKICAgICByZXR1cm4gZGlnZXN0OwpJbmRleDogU291cmNlL1dlYkNv
cmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMzgsNyArMzM4LDcgQEAgdm9pZCBGaWxlUmVhZGVyTG9hZGVyOjpjb252ZXJ0VG9EYXRh
VVJMKAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9zdHJpbmdSZXN1bHQgPSBtYWtl
U3RyaW5nKCJkYXRhOiIsIG1fZGF0YVR5cGUuaXNFbXB0eSgpID8gImFwcGxpY2F0aW9uL29jdGV0
LXN0cmVhbSIgOiBtX2RhdGFUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKG1fcmF3RGF0
YS0+ZGF0YSgpLCBtX2J5dGVzTG9hZGVkKSk7CisgICAgbV9zdHJpbmdSZXN1bHQgPSBtYWtlU3Ry
aW5nKCJkYXRhOiIsIG1fZGF0YVR5cGUuaXNFbXB0eSgpID8gImFwcGxpY2F0aW9uL29jdGV0LXN0
cmVhbSIgOiBtX2RhdGFUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKG1fcmF3RGF0YS0+
Ynl0ZXMoKSkpOwogfQogCiBib29sIEZpbGVSZWFkZXJMb2FkZXI6OmlzQ29tcGxldGVkKCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTmV0d29ya1NlbmRRdWV1ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmNwcAko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1
ZXVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTEgKzUzLDEwIEBAIHZvaWQgTmV0d29ya1Nl
bmRRdWV1ZTo6ZW5xdWV1ZShDU3RyaW5nJiYKIHZvaWQgTmV0d29ya1NlbmRRdWV1ZTo6ZW5xdWV1
ZShjb25zdCBKU0M6OkFycmF5QnVmZmVyJiBiaW5hcnlEYXRhLCB1bnNpZ25lZCBieXRlT2Zmc2V0
LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQogewogICAgIGlmIChtX3F1ZXVlLmlzRW1wdHkoKSkgewot
ICAgICAgICBhdXRvKiBkYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJpbmFyeURh
dGEuZGF0YSgpKTsKLSAgICAgICAgbV93cml0ZVJhd0RhdGEoU3BhbiB7IGRhdGEgKyBieXRlT2Zm
c2V0LCBieXRlTGVuZ3RoIH0pOworICAgICAgICBtX3dyaXRlUmF3RGF0YShiaW5hcnlEYXRhLmJ5
dGVzKCkuc3Vic3BhbihieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgbV9xdWV1ZS5hcHBlbmQoU2hhcmVkQnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nh
c3Q8Y29uc3QgdWludDhfdCo+KGJpbmFyeURhdGEuZGF0YSgpKSArIGJ5dGVPZmZzZXQsIGJ5dGVM
ZW5ndGgpKTsKKyAgICBtX3F1ZXVlLmFwcGVuZChTaGFyZWRCdWZmZXI6OmNyZWF0ZShiaW5hcnlE
YXRhLmJ5dGVzKCkuc3Vic3BhbihieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSkpOwogfQogCiB2b2lk
IE5ldHdvcmtTZW5kUXVldWU6OmVucXVldWUoV2ViQ29yZTo6QmxvYiYgYmxvYikKQEAgLTkzLDcg
KzkyLDkgQEAgdm9pZCBOZXR3b3JrU2VuZFF1ZXVlOjpwcm9jZXNzTWVzc2FnZXMoKQogICAgICAg
ICBzd2l0Y2hPbihtX3F1ZXVlLmZpcnN0KCksIFt0aGlzXShjb25zdCBDU3RyaW5nJiB1dGY4KSB7
CiAgICAgICAgICAgICBtX3dyaXRlU3RyaW5nKHV0ZjgpOwogICAgICAgICB9LCBbdGhpc10oUmVm
PFNoYXJlZEJ1ZmZlcj4mIGRhdGEpIHsKLSAgICAgICAgICAgIGRhdGEtPmZvckVhY2hTZWdtZW50
KG1fd3JpdGVSYXdEYXRhKTsKKyAgICAgICAgICAgIGRhdGEtPmZvckVhY2hTZWdtZW50KFt0aGlz
XShhdXRvJiBzcGFuKSB7CisgICAgICAgICAgICAgICAgbV93cml0ZVJhd0RhdGEoYXNCeXRlcyhz
cGFuKSk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfSwgW3RoaXMsICZzaG91bGRTdG9wUHJv
Y2Vzc2luZ10oVW5pcXVlUmVmPEJsb2JMb2FkZXI+JiBsb2FkZXIpIHsKICAgICAgICAgICAgIGF1
dG8gZXJyb3JDb2RlID0gbG9hZGVyLT5lcnJvckNvZGUoKTsKICAgICAgICAgICAgIGlmIChsb2Fk
ZXItPmlzTG9hZGluZygpIHx8IChlcnJvckNvZGUgJiYgZXJyb3JDb2RlLnZhbHVlKCkgPT0gQWJv
cnRFcnJvcikpIHsKQEAgLTEwMiw3ICsxMDMsNyBAQCB2b2lkIE5ldHdvcmtTZW5kUXVldWU6OnBy
b2Nlc3NNZXNzYWdlcygpCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChjb25zdCBh
dXRvJiByZXN1bHQgPSBsb2FkZXItPmFycmF5QnVmZmVyUmVzdWx0KCkpIHsKLSAgICAgICAgICAg
ICAgICBtX3dyaXRlUmF3RGF0YShTcGFuIHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KHJl
c3VsdC0+ZGF0YSgpKSwgcmVzdWx0LT5ieXRlTGVuZ3RoKCkgfSk7CisgICAgICAgICAgICAgICAg
bV93cml0ZVJhd0RhdGEocmVzdWx0LT5ieXRlcygpKTsKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBBU1NFUlQoZXJyb3JDb2RlKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2ZpbGVhcGkvTmV0d29ya1NlbmRRdWV1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2ZpbGVhcGkvTmV0d29ya1NlbmRRdWV1ZS5oCShyZXZpc2lvbiAyNzg4MDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL05ldHdvcmtTZW5kUXVldWUuaAkod29ya2luZyBj
b3B5KQpAQCAtNDgsNyArNDgsNyBAQCBjbGFzcyBTaGFyZWRCdWZmZXI7CiBjbGFzcyBXRUJDT1JF
X0VYUE9SVCBOZXR3b3JrU2VuZFF1ZXVlIDogcHVibGljIENvbnRleHREZXN0cnVjdGlvbk9ic2Vy
dmVyIHsKIHB1YmxpYzoKICAgICB1c2luZyBXcml0ZVN0cmluZyA9IEZ1bmN0aW9uPHZvaWQoY29u
c3QgQ1N0cmluZyYgdXRmOCk+OwotICAgIHVzaW5nIFdyaXRlUmF3RGF0YSA9IEZ1bmN0aW9uPHZv
aWQoY29uc3QgU3Bhbjxjb25zdCB1aW50OF90PiYpPjsKKyAgICB1c2luZyBXcml0ZVJhd0RhdGEg
PSBGdW5jdGlvbjx2b2lkKGNvbnN0IFNwYW48Y29uc3Qgc3RkOjpieXRlPiYpPjsKICAgICBlbnVt
IGNsYXNzIENvbnRpbnVlIHsgTm8sIFllcyB9OwogICAgIHVzaW5nIFByb2Nlc3NFcnJvciA9IEZ1
bmN0aW9uPENvbnRpbnVlKEV4Y2VwdGlvbkNvZGUpPjsKICAgICBOZXR3b3JrU2VuZFF1ZXVlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBXcml0ZVN0cmluZyYmLCBXcml0ZVJhd0RhdGEmJiwgUHJv
Y2Vzc0Vycm9yJiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3Vw
cG9ydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNo
U3VwcG9ydC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9ET01QYXRjaFN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQsMjggKzM5NCwyMyBA
QCBFeGNlcHRpb25Pcjx2b2lkPiBET01QYXRjaFN1cHBvcnQ6OmlubmVyCiAgICAgcmV0dXJuIHsg
fTsKIH0KIAotc3RhdGljIHZvaWQgYWRkU3RyaW5nVG9TSEExKFNIQTEmIHNoYTEsIGNvbnN0IFN0
cmluZyYgc3RyaW5nKQotewotICAgIENTdHJpbmcgY1N0cmluZyA9IHN0cmluZy51dGY4KCk7Ci0g
ICAgc2hhMS5hZGRCeXRlcyhjU3RyaW5nLmRhdGFBc1VJbnQ4UHRyKCksIGNTdHJpbmcubGVuZ3Ro
KCkpOwotfQotCiBzdGQ6OnVuaXF1ZV9wdHI8RE9NUGF0Y2hTdXBwb3J0OjpEaWdlc3Q+IERPTVBh
dGNoU3VwcG9ydDo6Y3JlYXRlRGlnZXN0KE5vZGUmIG5vZGUsIFVudXNlZE5vZGVzTWFwKiB1bnVz
ZWROb2Rlc01hcCkKIHsKICAgICBhdXRvIGRpZ2VzdCA9IG1ha2VVbmlxdWU8RGlnZXN0PigpOwog
ICAgIGRpZ2VzdC0+bm9kZSA9ICZub2RlOworCiAgICAgU0hBMSBzaGExOwogCiAgICAgYXV0byBu
b2RlVHlwZSA9IG5vZGUubm9kZVR5cGUoKTsKLSAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZub2RlVHlwZSksIHNpemVvZihub2RlVHlwZSkpOwotICAg
IGFkZFN0cmluZ1RvU0hBMShzaGExLCBub2RlLm5vZGVOYW1lKCkpOwotICAgIGFkZFN0cmluZ1Rv
U0hBMShzaGExLCBub2RlLm5vZGVWYWx1ZSgpKTsKKyAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAm
bm9kZVR5cGUsIDEgfSk7CisgICAgc2hhMS5hZGRCeXRlcyhub2RlLm5vZGVOYW1lKCkudXRmOCgp
LmJ5dGVzKCkpOworICAgIHNoYTEuYWRkQnl0ZXMobm9kZS5ub2RlVmFsdWUoKS51dGY4KCkuYnl0
ZXMoKSk7CiAKICAgICBpZiAobm9kZS5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSkg
ewogICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUuZmlyc3RDaGlsZCgpOwogICAgICAgICB3aGls
ZSAoY2hpbGQpIHsKICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxEaWdlc3Q+IGNoaWxkSW5m
byA9IGNyZWF0ZURpZ2VzdCgqY2hpbGQsIHVudXNlZE5vZGVzTWFwKTsKLSAgICAgICAgICAgIGFk
ZFN0cmluZ1RvU0hBMShzaGExLCBjaGlsZEluZm8tPnNoYTEpOworICAgICAgICAgICAgc2hhMS5h
ZGRCeXRlcyhjaGlsZEluZm8tPnNoYTEudXRmOCgpLmJ5dGVzKCkpOwogICAgICAgICAgICAgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAgIGRpZ2VzdC0+Y2hpbGRyZW4u
YXBwZW5kKFdURk1vdmUoY2hpbGRJbmZvKSk7CiAgICAgICAgIH0KQEAgLTQyNCwxOSArNDE5LDE5
IEBAIHN0ZDo6dW5pcXVlX3B0cjxET01QYXRjaFN1cHBvcnQ6OkRpZ2VzdD4KICAgICAgICAgaWYg
KGVsZW1lbnQuaGFzQXR0cmlidXRlc1dpdGhvdXRVcGRhdGUoKSkgewogICAgICAgICAgICAgU0hB
MSBhdHRyc1NIQTE7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGF0dHJpYnV0ZSA6IGVsZW1lbnQu
YXR0cmlidXRlc0l0ZXJhdG9yKCkpIHsKLSAgICAgICAgICAgICAgICBhZGRTdHJpbmdUb1NIQTEo
YXR0cnNTSEExLCBhdHRyaWJ1dGUubmFtZSgpLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAg
IGFkZFN0cmluZ1RvU0hBMShhdHRyc1NIQTEsIGF0dHJpYnV0ZS52YWx1ZSgpKTsKKyAgICAgICAg
ICAgICAgICBhdHRyc1NIQTEuYWRkQnl0ZXMoYXR0cmlidXRlLm5hbWUoKS50b1N0cmluZygpLnV0
ZjgoKS5ieXRlcygpKTsKKyAgICAgICAgICAgICAgICBhdHRyc1NIQTEuYWRkQnl0ZXMoYXR0cmli
dXRlLnZhbHVlKCkuc3RyaW5nKCkudXRmOCgpLmJ5dGVzKCkpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgU0hBMTo6RGlnZXN0IGF0dHJzSGFzaDsKICAgICAgICAgICAgIGF0dHJzU0hBMS5j
b21wdXRlSGFzaChhdHRyc0hhc2gpOwotICAgICAgICAgICAgZGlnZXN0LT5hdHRyc1NIQTEgPSBi
YXNlNjRFbmNvZGVUb1N0cmluZyhhdHRyc0hhc2guZGF0YSgpLCAxMCk7Ci0gICAgICAgICAgICBh
ZGRTdHJpbmdUb1NIQTEoc2hhMSwgZGlnZXN0LT5hdHRyc1NIQTEpOworICAgICAgICAgICAgZGln
ZXN0LT5hdHRyc1NIQTEgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhhdHRyc0hhc2gpOworICAgICAg
ICAgICAgc2hhMS5hZGRCeXRlcyhkaWdlc3QtPmF0dHJzU0hBMS51dGY4KCkuYnl0ZXMoKSk7CiAg
ICAgICAgIH0KICAgICB9CiAKICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAgICBzaGExLmNvbXB1
dGVIYXNoKGhhc2gpOwotICAgIGRpZ2VzdC0+c2hhMSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGhh
c2guZGF0YSgpLCAxMCk7CisgICAgZGlnZXN0LT5zaGExID0gYmFzZTY0RW5jb2RlVG9TdHJpbmco
aGFzaCk7CiAgICAgaWYgKHVudXNlZE5vZGVzTWFwKQogICAgICAgICB1bnVzZWROb2Rlc01hcC0+
YWRkKGRpZ2VzdC0+c2hhMSwgZGlnZXN0LmdldCgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAJKHJldmlzaW9uIDI3
ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDIsNyArNjAyLDcgQEAgYm9vbCBJbnNwZWN0b3JGcm9u
dGVuZEhvc3Q6OnNob3dDZXJ0aWZpYwogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEtPmRhdGEo
KSwgZGF0YS0+c2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIg
eyAqZGF0YSB9OwogICAgIHN0ZDo6b3B0aW9uYWw8Q2VydGlmaWNhdGVJbmZvPiBjZXJ0aWZpY2F0
ZUluZm87CiAgICAgZGVjb2RlciA+PiBjZXJ0aWZpY2F0ZUluZm87CiAgICAgaWYgKCFjZXJ0aWZp
Y2F0ZUluZm8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNl
c0RhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3Jr
UmVzb3VyY2VzRGF0YS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3
ICsxMDYsNyBAQCB1bnNpZ25lZCBOZXR3b3JrUmVzb3VyY2VzRGF0YTo6UmVzb3VyY2VECiAgICAg
ICAgIG1fY29udGVudCA9IG1fZGVjb2Rlci0+ZGVjb2RlQW5kRmx1c2gobV9kYXRhQnVmZmVyLT5k
YXRhKCksIGRhdGFMZW5ndGgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fYmFzZTY0RW5jb2Rl
ZCA9IHRydWU7Ci0gICAgICAgIG1fY29udGVudCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKG1fZGF0
YUJ1ZmZlci0+ZGF0YSgpLCBkYXRhTGVuZ3RoKTsKKyAgICAgICAgbV9jb250ZW50ID0gYmFzZTY0
RW5jb2RlVG9TdHJpbmcobV9kYXRhQnVmZmVyLT5ieXRlcygpKTsKICAgICB9CiAKICAgICBtX2Rh
dGFCdWZmZXIgPSBudWxscHRyOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JET01BZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjk4LDcgKzE2OTgsNyBAQCBzdGF0aWMgU3RyaW5nIGNvbXB1dGVD
b250ZW50U2VjdXJpdHlQb2xpCiAgICAgYXV0byBjcnlwdG9EaWdlc3QgPSBQQUw6OkNyeXB0b0Rp
Z2VzdDo6Y3JlYXRlKFBBTDo6Q3J5cHRvRGlnZXN0OjpBbGdvcml0aG06OlNIQV8yNTYpOwogICAg
IGNyeXB0b0RpZ2VzdC0+YWRkQnl0ZXMoY29udGVudC5kYXRhKCksIGNvbnRlbnQuc2l6ZSgpKTsK
ICAgICBhdXRvIGRpZ2VzdCA9IGNyeXB0b0RpZ2VzdC0+Y29tcHV0ZUhhc2goKTsKLSAgICByZXR1
cm4gbWFrZVN0cmluZygic2hhMjU2LSIsIGJhc2U2NEVuY29kZWQoZGlnZXN0LmRhdGEoKSwgZGln
ZXN0LnNpemUoKSkpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCJzaGEyNTYtIiwgYmFzZTY0RW5j
b2RlZChkaWdlc3QpKTsKIH0KIAogUmVmPFByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRP
TUFnZW50OjpidWlsZE9iamVjdEZvck5vZGUoTm9kZSogbm9kZSwgaW50IGRlcHRoKQpJbmRleDog
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
TmV0d29ya0FnZW50LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzUsNyArMTc1LDcgQEAgUmVmPFByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRGcmFtZT4g
YgogICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0RnJhbWU6OmNyZWF0ZSgp
CiAgICAgICAgIC5zZXRPcGNvZGUoZnJhbWUub3BDb2RlKQogICAgICAgICAuc2V0TWFzayhmcmFt
ZS5tYXNrZWQpCi0gICAgICAgIC5zZXRQYXlsb2FkRGF0YShmcmFtZS5vcENvZGUgPT0gMSA/IFN0
cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soZnJhbWUucGF5bG9hZCwgZnJhbWUucGF5
bG9hZExlbmd0aCkgOiBiYXNlNjRFbmNvZGVUb1N0cmluZyhmcmFtZS5wYXlsb2FkLCBmcmFtZS5w
YXlsb2FkTGVuZ3RoKSkKKyAgICAgICAgLnNldFBheWxvYWREYXRhKGZyYW1lLm9wQ29kZSA9PSAx
ID8gU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhmcmFtZS5wYXlsb2FkLCBmcmFt
ZS5wYXlsb2FkTGVuZ3RoKSA6IGJhc2U2NEVuY29kZVRvU3RyaW5nKFNwYW4geyBmcmFtZS5wYXls
b2FkLCBmcmFtZS5wYXlsb2FkTGVuZ3RoIH0pKQogICAgICAgICAuc2V0UGF5bG9hZExlbmd0aChm
cmFtZS5wYXlsb2FkTGVuZ3RoKQogICAgICAgICAucmVsZWFzZSgpOwogfQpAQCAtNTg5LDcgKzU4
OSw3IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlRGEKICAgICAgICAg
Ly8gT2Z0ZW4gdGhlIGRhdGEgaXMgdGV4dCBhbmQgd2Ugd291bGQgaGF2ZSBhIGRlY29kZXIsIGJ1
dCBmb3Igbm9uLXRleHQgd2Ugd29uJ3QgaGF2ZSBhIGRlY29kZXIuCiAgICAgICAgIC8vIFN5bmMg
WEhScyBtYXkgbm90IGhhdmUgYSBjYWNoZWQgcmVzb3VyY2UsIHdoaWxlIG5vbi1zeW5jIFhIUnMg
dXN1YWxseSB0cmFuc2ZlciBkYXRhIG92ZXIgb24gY29tcGxldGlvbi4KICAgICAgICAgaWYgKG1f
bG9hZGluZ1hIUlN5bmNocm9ub3VzbHkgJiYgcmVzb3VyY2VEYXRhICYmICFyZXNvdXJjZURhdGEt
Pmhhc0J1ZmZlcmVkRGF0YSgpICYmICFyZXNvdXJjZURhdGEtPmNhY2hlZFJlc291cmNlKCkpCi0g
ICAgICAgICAgICBtX3Jlc291cmNlc0RhdGEtPnNldFJlc291cmNlQ29udGVudChyZXF1ZXN0SWQs
IGJhc2U2NEVuY29kZVRvU3RyaW5nKGRhdGEsIGRhdGFMZW5ndGgpLCB0cnVlKTsKKyAgICAgICAg
ICAgIG1fcmVzb3VyY2VzRGF0YS0+c2V0UmVzb3VyY2VDb250ZW50KHJlcXVlc3RJZCwgYmFzZTY0
RW5jb2RlVG9TdHJpbmcoU3BhbiB7IGRhdGEsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihkYXRhTGVu
Z3RoKSB9KSwgdHJ1ZSk7CiAgICAgfQogCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRhdGFS
ZWNlaXZlZChyZXF1ZXN0SWQsIHRpbWVzdGFtcCgpLCBkYXRhTGVuZ3RoLCBlbmNvZGVkRGF0YUxl
bmd0aCk7CkBAIC0xMDA1LDcgKzEwMDUsNyBAQCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJp
bmc+IEluc3BlY3RvCiAKICAgICBXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyIGVuY29kZXI7CiAg
ICAgV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPjo6ZW5j
b2RlKGVuY29kZXIsIGNlcnRpZmljYXRlLnZhbHVlKCkpOwotICAgIHJldHVybiBiYXNlNjRFbmNv
ZGVUb1N0cmluZyhlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAg
cmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGVuY29kZXIuYnVmZmVyKCkpOwogfQogCiBXZWJT
b2NrZXQqIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6d2ViU29ja2V0Rm9yUmVxdWVzdElkKGNvbnN0
IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCkKQEAgLTE0MTAsNyArMTQx
MCw3IEBAIGJvb2wgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpjYWNoZWRSZXNvdXIKICAgICAgICAg
fQogCiAgICAgICAgICpiYXNlNjRFbmNvZGVkID0gdHJ1ZTsKLSAgICAgICAgKnJlc3VsdCA9IGJh
c2U2NEVuY29kZVRvU3RyaW5nKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7CisgICAg
ICAgICpyZXN1bHQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhidWZmZXItPmJ5dGVzKCkpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VB
Z2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDcgQEAKIAogI2lmIEVOQUJMRShX
RUJfQVJDSElWRSkgJiYgVVNFKENGKQogI2luY2x1ZGUgIkxlZ2FjeVdlYkFyY2hpdmUuaCIKKyNp
bmNsdWRlIDx3dGYvY2YvU3BhbkNGLmg+CiAjZW5kaWYKIAogCkBAIC0xMTMsNyArMTE0LDcgQEAg
Ym9vbCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNoYXJlZEJ1ZmZlckNvbgogYm9vbCBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmRhdGFDb250ZW50KGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIHNpemUs
IGNvbnN0IFN0cmluZyYgdGV4dEVuY29kaW5nTmFtZSwgYm9vbCB3aXRoQmFzZTY0RW5jb2RlLCBT
dHJpbmcqIHJlc3VsdCkKIHsKICAgICBpZiAod2l0aEJhc2U2NEVuY29kZSkgewotICAgICAgICAq
cmVzdWx0ID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoZGF0YSwgc2l6ZSk7CisgICAgICAgICpyZXN1
bHQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhTcGFuIHsgZGF0YSwgc2l6ZSB9KTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xMTAyLDcgKzExMDMsNyBAQCBQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjxTdHJpbmc+IEluc3BlY3RvCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiQ291bGQgbm90IGNyZWF0ZSB3ZWIgYXJjaGl2ZSBmb3IgbWFpbiBmcmFtZSJfcyk7CiAKICAg
ICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBidWZmZXIgPSBhcmNoaXZlLT5yYXdEYXRhUmVwcmVzZW50
YXRpb24oKTsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoQ0ZEYXRhR2V0Qnl0ZVB0
cihidWZmZXIuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgoYnVmZmVyLmdldCgpKSk7CisgICAgcmV0
dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGFzQnl0ZXMoYnVmZmVyLmdldCgpKSk7CiB9CiAjZW5k
aWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNo
aXZlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRt
bC9NSFRNTEFyY2hpdmUuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODEsMTYgKzE4MSwxNCBAQCBSZWY8U2hhcmVkQnVmZmVyPiBNSFRNTEFyY2hpdmU6OmdlbmVyYXRl
CiAgICAgICAgIG1odG1sRGF0YS0+YXBwZW5kKGFzY2lpU3RyaW5nLmRhdGEoKSwgYXNjaWlTdHJp
bmcubGVuZ3RoKCkpOwogCiAgICAgICAgIC8vIEZJWE1FOiBpZGVhbGx5IHdlIHdvdWxkIGVuY29k
ZSB0aGUgY29udGVudCBhcyBhIHN0cmVhbSB3aXRob3V0IGhhdmluZyB0byBmZXRjaCBpdCBhbGwu
Ci0gICAgICAgIGF1dG8qIGRhdGEgPSByZXNvdXJjZS5kYXRhLT5kYXRhKCk7Ci0gICAgICAgIHNp
emVfdCBkYXRhTGVuZ3RoID0gcmVzb3VyY2UuZGF0YS0+c2l6ZSgpOwogICAgICAgICBpZiAoIXN0
cmNtcChjb250ZW50RW5jb2RpbmcsIHF1b3RlZFByaW50YWJsZSkpIHsKLSAgICAgICAgICAgIGF1
dG8gZW5jb2RlZERhdGEgPSBxdW90ZWRQcmludGFibGVFbmNvZGUoZGF0YSwgZGF0YUxlbmd0aCk7
CisgICAgICAgICAgICBhdXRvIGVuY29kZWREYXRhID0gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKHJl
c291cmNlLmRhdGEtPmJ5dGVzKCkpOwogICAgICAgICAgICAgbWh0bWxEYXRhLT5hcHBlbmQoZW5j
b2RlZERhdGEuZGF0YSgpLCBlbmNvZGVkRGF0YS5zaXplKCkpOwogICAgICAgICAgICAgbWh0bWxE
YXRhLT5hcHBlbmQoIlxyXG4iLCAyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFT
U0VSVCghc3RyY21wKGNvbnRlbnRFbmNvZGluZywgYmFzZTY0KSk7CiAgICAgICAgICAgICAvLyBX
ZSBhcmUgbm90IHNwZWNpZnlpbmcgaW5zZXJ0TEZzID0gdHJ1ZSBiZWxvdyBhcyBpdCB3b3VsZCBj
dXQgdGhlIGxpbmVzIHdpdGggTEZzIGFuZCBNSFRNTCByZXF1aXJlcyBDUkxGcy4KLSAgICAgICAg
ICAgIGF1dG8gZW5jb2RlZERhdGEgPSBiYXNlNjRFbmNvZGVUb1ZlY3RvcihkYXRhLCBkYXRhTGVu
Z3RoKTsKKyAgICAgICAgICAgIGF1dG8gZW5jb2RlZERhdGEgPSBiYXNlNjRFbmNvZGVUb1ZlY3Rv
cihyZXNvdXJjZS5kYXRhLT5ieXRlcygpKTsKICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBtYXhp
bXVtTGluZUxlbmd0aCA9IDc2OwogICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gMDsKICAgICAg
ICAgICAgIHNpemVfdCBlbmNvZGVkRGF0YUxlbmd0aCA9IGVuY29kZWREYXRhLnNpemUoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MUGFyc2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTFBh
cnNlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNo
aXZlL21odG1sL01IVE1MUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDcgKzE5NSw3
IEBAIFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IE1IVE1MUGFyc2VyOjpwYXIKICAgICBWZWN0b3I8
dWludDhfdD4gZGF0YTsKICAgICBzd2l0Y2ggKG1pbWVIZWFkZXIuY29udGVudFRyYW5zZmVyRW5j
b2RpbmcoKSkgewogICAgIGNhc2UgTUlNRUhlYWRlcjo6QmFzZTY0OiB7Ci0gICAgICAgIGF1dG8g
ZGVjb2RlZERhdGEgPSBiYXNlNjREZWNvZGUoY29udGVudC0+ZGF0YSgpLCBjb250ZW50LT5zaXpl
KCkpOworICAgICAgICBhdXRvIGRlY29kZWREYXRhID0gYmFzZTY0RGVjb2RlKGNvbnRlbnQtPmJ5
dGVzKCkpOwogICAgICAgICBpZiAoIWRlY29kZWREYXRhKSB7CiAgICAgICAgICAgICBMT0dfRVJS
T1IoIkludmFsaWQgYmFzZTY0IGNvbnRlbnQgZm9yIE1IVE1MIHBhcnQuIik7CiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKQEAgLTIwNCw3ICsyMDQsNyBAQCBSZWZQdHI8QXJjaGl2ZVJlc291
cmNlPiBNSFRNTFBhcnNlcjo6cGFyCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIE1J
TUVIZWFkZXI6OlF1b3RlZFByaW50YWJsZToKLSAgICAgICAgZGF0YSA9IHF1b3RlZFByaW50YWJs
ZURlY29kZShjb250ZW50LT5kYXRhKCksIGNvbnRlbnQtPnNpemUoKSk7CisgICAgICAgIGRhdGEg
PSBxdW90ZWRQcmludGFibGVEZWNvZGUoY29udGVudC0+Ynl0ZXMoKSk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgTUlNRUhlYWRlcjo6U2V2ZW5CaXQ6CiAgICAgY2FzZSBNSU1FSGVhZGVyOjpC
aW5hcnk6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcAko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkxvYWRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIEljb25Mb2FkZXI6
Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlCiAgICAgICAgIGRhdGEgPSBudWxscHRyOwogCiAgICAg
Y29uc3RleHByIHVpbnQ4X3QgcGRmTWFnaWNOdW1iZXJbXSA9IHsgJyUnLCAnUCcsICdEJywgJ0Yn
IH07Ci0gICAgaWYgKGRhdGEgJiYgZGF0YS0+c3RhcnRzV2l0aChTcGFuIHsgcGRmTWFnaWNOdW1i
ZXIsIHN0ZDo6c2l6ZShwZGZNYWdpY051bWJlcikgfSkpIHsKKyAgICBpZiAoZGF0YSAmJiBkYXRh
LT5zdGFydHNXaXRoKHBkZk1hZ2ljTnVtYmVyKSkgewogICAgICAgICBMT0coSWNvbkRhdGFiYXNl
LCAiSWNvbkxvYWRlcjo6ZmluaXNoTG9hZGluZygpIC0gSWdub3JpbmcgaWNvbiBhdCAlcyBiZWNh
dXNlIGl0IGFwcGVhcnMgdG8gYmUgYSBQREYiLCBtX3Jlc291cmNlLT51cmwoKS5zdHJpbmcoKS5h
c2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIGRhdGEgPSBudWxscHRyOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0Jhc2U2NFV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzgsNyArMzgsNyBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IEJhc2U2NFV0aWxpdGllczo6YnRv
CiAgICAgaWYgKCFzdHJpbmdUb0VuY29kZS5pc0FsbExhdGluMSgpKQogICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSW52YWxpZENoYXJhY3RlckVycm9yIH07CiAKLSAgICByZXR1cm4gYmFzZTY0
RW5jb2RlVG9TdHJpbmcoc3RyaW5nVG9FbmNvZGUubGF0aW4xKCkpOworICAgIHJldHVybiBiYXNl
NjRFbmNvZGVUb1N0cmluZyhzdHJpbmdUb0VuY29kZS5sYXRpbjEoKS5ieXRlcygpKTsKIH0KIAog
RXhjZXB0aW9uT3I8U3RyaW5nPiBCYXNlNjRVdGlsaXRpZXM6OmF0b2IoY29uc3QgU3RyaW5nJiBl
bmNvZGVkU3RyaW5nKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1
c3RvbURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3Rl
Ym9hcmRDdXN0b21EYXRhLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3
ICs4OSw3IEBAIFJlZjxTaGFyZWRCdWZmZXI+IFBhc3RlYm9hcmRDdXN0b21EYXRhOjoKICAgICBl
bmNvZGVyIDw8IG1fb3JpZ2luOwogICAgIGVuY29kZXIgPDwgc2FtZU9yaWdpbkN1c3RvbVN0cmlu
Z0RhdGEoKTsKICAgICBlbmNvZGVyIDw8IG9yZGVyZWRUeXBlcygpOwotICAgIHJldHVybiBTaGFy
ZWRCdWZmZXI6OmNyZWF0ZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7
CisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCkpOwogfQog
CiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6ZnJvbVBlcnNpc3Rl
bmNlRGVjb2RlcihXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyJiYgZGVjb2RlcikKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkocmV2aXNpb24gMjc4ODA5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQsMjAgKzM0LDE5IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VURjhDb252ZXJzaW9uLmg+CiAKLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKKyNpZiBVU0UoQ0YpCisjaW5jbHVkZSA8d3RmL2NmL1NwYW5DRi5oPgorI2VuZGlm
CiAKLVNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVf
dCBzaXplKQotewotICAgIGFwcGVuZChkYXRhLCBzaXplKTsKLX0KK25hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90
IHNpemUpCitTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4g
ZGF0YSkKIHsKLSAgICBhcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0
YSksIHNpemUpOworICAgIGFwcGVuZChkYXRhKTsKIH0KIAogU2hhcmVkQnVmZmVyOjpTaGFyZWRC
dWZmZXIoRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmJiBmaWxlRGF0YSkKLSAgICA6IG1fc2l6
ZShmaWxlRGF0YS5zaXplKCkpCisgICAgOiBtX3NpemUoZmlsZURhdGEuZGF0YSgpLnNpemUoKSkK
IHsKICAgICBtX3NlZ21lbnRzLmFwcGVuZCh7MCwgRGF0YVNlZ21lbnQ6OmNyZWF0ZShXVEZNb3Zl
KGZpbGVEYXRhKSl9KTsKIH0KQEAgLTE4OCwxMyArMTg3LDEzIEBAIHZvaWQgU2hhcmVkQnVmZmVy
OjphcHBlbmQoY29uc3QgU2hhcmVkQnUKICAgICBBU1NFUlQoaW50ZXJuYWxseUNvbnNpc3RlbnQo
KSk7CiB9CiAKLXZvaWQgU2hhcmVkQnVmZmVyOjphcHBlbmQoY29uc3QgdWludDhfdCogZGF0YSwg
c2l6ZV90IGxlbmd0aCkKK3ZvaWQgU2hhcmVkQnVmZmVyOjphcHBlbmQoU3Bhbjxjb25zdCBzdGQ6
OmJ5dGU+IGRhdGEpCiB7CiAgICAgQVNTRVJUKCFtX2hhc0JlZW5Db21iaW5lZEludG9PbmVTZWdt
ZW50KTsKICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yOwotICAgIHZlY3Rvci5hcHBlbmQoZGF0
YSwgbGVuZ3RoKTsKLSAgICBtX3NlZ21lbnRzLmFwcGVuZCh7bV9zaXplLCBEYXRhU2VnbWVudDo6
Y3JlYXRlKFdURk1vdmUodmVjdG9yKSl9KTsKLSAgICBtX3NpemUgKz0gbGVuZ3RoOworICAgIHZl
Y3Rvci5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5kYXRhKCkp
LCBkYXRhLnNpemUoKSk7CisgICAgbV9zZWdtZW50cy5hcHBlbmQoeyBtX3NpemUsIERhdGFTZWdt
ZW50OjpjcmVhdGUoV1RGTW92ZSh2ZWN0b3IpKSB9KTsKKyAgICBtX3NpemUgKz0gZGF0YS5zaXpl
KCk7CiAgICAgQVNTRVJUKGludGVybmFsbHlDb25zaXN0ZW50KCkpOwogfQogCkBAIC0yMzIsNyAr
MjMxLDcgQEAgdm9pZCBTaGFyZWRCdWZmZXI6OmZvckVhY2hTZWdtZW50KGNvbnN0IAogICAgICAg
ICBhcHBseShTcGFuIHsgc2VnbWVudC5zZWdtZW50LT5kYXRhKCksIHNlZ21lbnQuc2VnbWVudC0+
c2l6ZSgpIH0pOwogfQogCi1ib29sIFNoYXJlZEJ1ZmZlcjo6c3RhcnRzV2l0aChjb25zdCBTcGFu
PGNvbnN0IHVpbnQ4X3Q+JiBwcmVmaXgpIGNvbnN0Citib29sIFNoYXJlZEJ1ZmZlcjo6c3RhcnRz
V2l0aChjb25zdCBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4mIHByZWZpeCkgY29uc3QKIHsKICAgICBp
ZiAocHJlZml4LmVtcHR5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjQwLDcgKzIzOSw3
IEBAIGJvb2wgU2hhcmVkQnVmZmVyOjpzdGFydHNXaXRoKGNvbnN0IFNwYW4KICAgICBpZiAoc2l6
ZSgpIDwgcHJlZml4LnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29uc3Qg
dWludDhfdCogcHJlZml4UHRyID0gcHJlZml4LmRhdGEoKTsKKyAgICBhdXRvKiBwcmVmaXhQdHIg
PSBwcmVmaXguZGF0YSgpOwogICAgIHNpemVfdCByZW1haW5pbmcgPSBwcmVmaXguc2l6ZSgpOwog
ICAgIGZvciAoYXV0byYgc2VnbWVudCA6IG1fc2VnbWVudHMpIHsKICAgICAgICAgc2l6ZV90IGFt
b3VudFRvQ29tcGFyZVRoaXNUaW1lID0gc3RkOjptaW4ocmVtYWluaW5nLCBzZWdtZW50LnNlZ21l
bnQtPnNpemUoKSk7CkBAIC0zMDEsOSArMzAwLDM4IEBAIGNvbnN0IHVpbnQ4X3QqIFNoYXJlZEJ1
ZmZlcjo6RGF0YVNlZ21lbnQKICNpZiBVU0UoR1NUUkVBTUVSKQogICAgICAgICBbXShjb25zdCBS
ZWZQdHI8R3N0TWFwcGVkT3duZWRCdWZmZXI+JiBkYXRhKSB7IHJldHVybiBkYXRhLT5kYXRhKCk7
IH0sCiAjZW5kaWYKLSAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEm
IGRhdGEpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmRhdGEoKSk7
IH0KKyAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuZGF0YSgpLmRhdGEo
KSk7IH0KKyAgICApOworICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIG1faW1tdXRhYmxl
RGF0YSk7Cit9CisKK1NwYW48Y29uc3Qgc3RkOjpieXRlPiBTaGFyZWRCdWZmZXI6OkRhdGFTZWdt
ZW50OjpieXRlcygpIGNvbnN0Cit7CisgICAgYXV0byB2aXNpdG9yID0gV1RGOjptYWtlVmlzaXRv
cigKKyAgICAgICAgW10oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKSB7CisgICAgICAgICAg
ICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgZGF0YSB9KTsKKyAgICAgICAgfSwKKyNpZiBVU0UoQ0Yp
CisgICAgICAgIFtdKGNvbnN0IFJldGFpblB0cjxDRkRhdGFSZWY+JiBkYXRhKSB7CisgICAgICAg
ICAgICByZXR1cm4gYXNCeXRlcyhkYXRhLmdldCgpKTsKKyAgICAgICAgfSwKKyNlbmRpZgorI2lm
IFVTRShHTElCKQorICAgICAgICBbXShjb25zdCBHUmVmUHRyPEdCeXRlcz4mIGRhdGEpIHsKKyAg
ICAgICAgICAgIHJldHVybiBhc0J5dGVzKFNwYW4geyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90
Kj4oZ19ieXRlc19nZXRfZGF0YShkYXRhLmdldCgpLCBudWxscHRyKSksIGdfYnl0ZXNfZ2V0X3Np
emUoZGF0YS5nZXQoKSkgfSk7CisgICAgICAgIH0sCisjZW5kaWYKKyNpZiBVU0UoR1NUUkVBTUVS
KQorICAgICAgICBbXShjb25zdCBSZWZQdHI8R3N0TWFwcGVkT3duZWRCdWZmZXI+JiBkYXRhKSB7
CisgICAgICAgICAgICByZXR1cm4gYXNCeXRlcyhTcGFuIHsgZGF0YS0+ZGF0YSgpLCBkYXRhLT5z
aXplKCkgfSk7CisgICAgICAgIH0sCisjZW5kaWYKKyAgICAgICAgW10oY29uc3QgRmlsZVN5c3Rl
bTo6TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBkYXRhLmRhdGEo
KTsKKyAgICAgICAgfQogICAgICk7CiAgICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwgbV9p
bW11dGFibGVEYXRhKTsKKwogfQogCiBib29sIFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmNv
bnRhaW5zTWFwcGVkRmlsZURhdGEoKSBjb25zdApAQCAtMzE5LDcgKzM0Nyw3IEBAIHZvaWQgU2hh
cmVkQnVmZmVyOjpoaW50TWVtb3J5Tm90TmVlZGVkU28KIAogV1RGOjpQZXJzaXN0ZW5jZTo6RGVj
b2RlciBTaGFyZWRCdWZmZXI6OmRlY29kZXIoKSBjb25zdAogewotICAgIHJldHVybiB7IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEoKSksIHNpemUoKSB9OworICAgIHJldHVy
biB7IGJ5dGVzKCkgfTsKIH0KIAogYm9vbCBTaGFyZWRCdWZmZXI6Om9wZXJhdG9yPT0oY29uc3Qg
U2hhcmVkQnVmZmVyJiBvdGhlcikgY29uc3QKQEAgLTM4NCw3ICs0MTIsNyBAQCBzaXplX3QgU2hh
cmVkQnVmZmVyOjpEYXRhU2VnbWVudDo6c2l6ZSgpCiAjaWYgVVNFKEdTVFJFQU1FUikKICAgICAg
ICAgW10oY29uc3QgUmVmUHRyPEdzdE1hcHBlZE93bmVkQnVmZmVyPiYgZGF0YSkgeyByZXR1cm4g
ZGF0YS0+c2l6ZSgpOyB9LAogI2VuZGlmCi0gICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1h
cHBlZEZpbGVEYXRhJiBkYXRhKSB7IHJldHVybiBkYXRhLnNpemUoKTsgfQorICAgICAgICBbXShj
b25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeyByZXR1cm4gZGF0YS5kYXRh
KCkuc2l6ZSgpOyB9CiAgICAgKTsKICAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBtX2lt
bXV0YWJsZURhdGEpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVm
ZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVy
LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1
ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw4ICs2NywxMiBAQCBjbGFzcyBTaGFyZWRCdWZm
ZXJEYXRhVmlldzsKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIFNoYXJlZEJ1ZmZlciA6IHB1YmxpYyBS
ZWZDb3VudGVkPFNoYXJlZEJ1ZmZlcj4gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8U2hhcmVk
QnVmZmVyPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcik7IH0K
LSAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGRhdGEs
IHNpemVfdCBzaXplKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihkYXRhLCBz
aXplKSk7IH0KLSAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IGNoYXIq
IGRhdGEsIHNpemVfdCBzaXplKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihk
YXRhLCBzaXplKSk7IH0KKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKFNwYW48
Y29uc3Qgc3RkOjpieXRlPiBkYXRhKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZl
cihkYXRhKSk7IH0KKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKFNwYW48Y29u
c3QgdWludDhfdD4gZGF0YSkgeyByZXR1cm4gY3JlYXRlKGFzQnl0ZXMoZGF0YSkpOyB9CisgICAg
c3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShTcGFuPGNvbnN0IGNoYXI+IGRhdGEpIHsg
cmV0dXJuIGNyZWF0ZShhc0J5dGVzKGRhdGEpKTsgfQorICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVm
ZmVyPiBjcmVhdGUoY29uc3Qgc3RkOjpieXRlKiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4g
Y3JlYXRlKFNwYW4geyBkYXRhLCBzaXplIH0pOyB9CisgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZm
ZXI+IGNyZWF0ZShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gY3Jl
YXRlKFNwYW4geyBkYXRhLCBzaXplIH0pOyB9CisgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+
IGNyZWF0ZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gY3JlYXRlKFNw
YW4geyBkYXRhLCBzaXplIH0pOyB9CiAgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0
ZShGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIG1hcHBlZEZpbGVEYXRhKSB7IHJldHVybiBh
ZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihXVEZNb3ZlKG1hcHBlZEZpbGVEYXRhKSkpOyB9CiAK
ICAgICBlbnVtIGNsYXNzIE1heVVzZUZpbGVNYXBwaW5nIDogYm9vbCB7IE5vLCBZZXMgfTsKQEAg
LTEwMSw2ICsxMDUsOCBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IEF1ZGl0IHRoZSBjYWxsIHNp
dGVzIG9mIHRoaXMgZnVuY3Rpb24gYW5kIHJlcGxhY2UgdGhlbSB3aXRoIGl0ZXJhdGlvbiBpZiBw
b3NzaWJsZS4KICAgICBjb25zdCB1aW50OF90KiBkYXRhKCkgY29uc3Q7CiAgICAgY29uc3QgY2hh
ciogZGF0YUFzQ2hhclB0cigpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Y2hhcio+KGRhdGEoKSk7IH0KKyAgICBTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gYnl0ZXMoKSBjb25z
dCB7IHJldHVybiBhc0J5dGVzKFNwYW4geyBkYXRhKCksIHNpemUoKSB9KTsgfQorCiAgICAgVmVj
dG9yPHVpbnQ4X3Q+IGNvcHlEYXRhKCkgeyByZXR1cm4geyBkYXRhKCksIHNpemUoKSB9OyB9CiAK
ICAgICAvLyBDb21iaW5lcyBhbGwgdGhlIHNlZ21lbnRzIGludG8gYSBWZWN0b3IgYW5kIHJldHVy
bnMgdGhhdCB2ZWN0b3IgYWZ0ZXIgY2xlYXJpbmcgdGhlIFNoYXJlZEJ1ZmZlci4KQEAgLTExNSw4
ICsxMjEsMTIgQEAgcHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFz
aXplKCk7IH0KIAogICAgIHZvaWQgYXBwZW5kKGNvbnN0IFNoYXJlZEJ1ZmZlciYpOwotICAgIHZv
aWQgYXBwZW5kKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwotICAgIHZvaWQgYXBwZW5kKGNvbnN0
IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpIHsgYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDhfdCo+KGRhdGEpLCBsZW5ndGgpOyB9CisgICAgdm9pZCBhcHBlbmQoU3Bhbjxjb25z
dCBzdGQ6OmJ5dGU+KTsKKyAgICB2b2lkIGFwcGVuZChTcGFuPGNvbnN0IHVpbnQ4X3Q+IGRhdGEp
IHsgYXBwZW5kKGFzQnl0ZXMoZGF0YSkpOyB9CisgICAgdm9pZCBhcHBlbmQoU3Bhbjxjb25zdCBj
aGFyPiBkYXRhKSB7IGFwcGVuZChhc0J5dGVzKGRhdGEpKTsgfQorICAgIHZvaWQgYXBwZW5kKGNv
bnN0IHN0ZDo6Ynl0ZSogZGF0YSwgc2l6ZV90IGxlbmd0aCkgeyBhcHBlbmQoU3BhbiB7IGRhdGEs
IGxlbmd0aCB9KTsgfQorICAgIHZvaWQgYXBwZW5kKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVf
dCBsZW5ndGgpIHsgYXBwZW5kKFNwYW4geyBkYXRhLCBsZW5ndGggfSk7IH0KKyAgICB2b2lkIGFw
cGVuZChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKSB7IGFwcGVuZChTcGFuIHsgZGF0
YSwgbGVuZ3RoIH0pOyB9CiAgICAgdm9pZCBhcHBlbmQoVmVjdG9yPHVpbnQ4X3Q+JiYpOwogCiAg
ICAgdm9pZCBjbGVhcigpOwpAQCAtMTMxLDYgKzE0MSw4IEBAIHB1YmxpYzoKICAgICAgICAgV0VC
Q09SRV9FWFBPUlQgY29uc3QgdWludDhfdCogZGF0YSgpIGNvbnN0OwogICAgICAgICBXRUJDT1JF
X0VYUE9SVCBzaXplX3Qgc2l6ZSgpIGNvbnN0OwogCisgICAgICAgIFdFQkNPUkVfRVhQT1JUIFNw
YW48Y29uc3Qgc3RkOjpieXRlPiBieXRlcygpIGNvbnN0OworCiAgICAgICAgIHN0YXRpYyBSZWY8
RGF0YVNlZ21lbnQ+IGNyZWF0ZShWZWN0b3I8dWludDhfdD4mJiBkYXRhKQogICAgICAgICB7CiAg
ICAgICAgICAgICBkYXRhLnNocmlua1RvRml0KCk7CkBAIC0xODcsNyArMTk5LDkgQEAgcHVibGlj
OgogICAgIH07CiAKICAgICB2b2lkIGZvckVhY2hTZWdtZW50KGNvbnN0IEZ1bmN0aW9uPHZvaWQo
Y29uc3QgU3Bhbjxjb25zdCB1aW50OF90PiYpPiYpIGNvbnN0OwotICAgIGJvb2wgc3RhcnRzV2l0
aChjb25zdCBTcGFuPGNvbnN0IHVpbnQ4X3Q+JiBwcmVmaXgpIGNvbnN0OworCisgICAgYm9vbCBz
dGFydHNXaXRoKGNvbnN0IFNwYW48Y29uc3Qgc3RkOjpieXRlPiYgcHJlZml4KSBjb25zdDsKKyAg
ICBib29sIHN0YXJ0c1dpdGgoY29uc3QgU3Bhbjxjb25zdCB1aW50OF90PiYgcHJlZml4KSBjb25z
dCB7IHJldHVybiBzdGFydHNXaXRoKGFzQnl0ZXMocHJlZml4KSk7IH0KIAogICAgIHN0cnVjdCBE
YXRhU2VnbWVudFZlY3RvckVudHJ5IHsKICAgICAgICAgc2l6ZV90IGJlZ2luUG9zaXRpb247CkBA
IC0yMTIsOCArMjI2LDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFNoYXJl
ZEJ1ZmZlcigpID0gZGVmYXVsdDsKLSAgICBleHBsaWNpdCBTaGFyZWRCdWZmZXIoY29uc3QgdWlu
dDhfdCosIHNpemVfdCk7Ci0gICAgZXhwbGljaXQgU2hhcmVkQnVmZmVyKGNvbnN0IGNoYXIqLCBz
aXplX3QpOworICAgIGV4cGxpY2l0IFNoYXJlZEJ1ZmZlcihTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4p
OwogICAgIGV4cGxpY2l0IFNoYXJlZEJ1ZmZlcihWZWN0b3I8dWludDhfdD4mJik7CiAgICAgZXhw
bGljaXQgU2hhcmVkQnVmZmVyKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYpOwogI2lmIFVT
RShDRikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0NBQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL2NvY29hL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCShyZXZpc2lvbiAyNzg4MDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAi
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgPENvcmVBdWRpby9Db3JlQXVkaW9U
eXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtODAsMTMgKzgxLDEzIEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9p
ZCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25z
dAogewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDhfdCo+KCZtX3N0cmVhbURlc2NyaXB0aW9uKSwgc2l6ZW9mKG1fc3RyZWFtRGVz
Y3JpcHRpb24pLCAxKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsg
Jm1fc3RyZWFtRGVzY3JpcHRpb24sIDEgfSwgMSk7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+CiBib29sIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIsIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7Ci0gICAgcmV0dXJu
IGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+
KCZkZXNjcmlwdGlvbi5tX3N0cmVhbURlc2NyaXB0aW9uKSwgc2l6ZW9mKGRlc2NyaXB0aW9uLm1f
c3RyZWFtRGVzY3JpcHRpb24pLCAxKTsKKyAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExl
bmd0aERhdGEoU3BhbiB7ICZkZXNjcmlwdGlvbi5tX3N0cmVhbURlc2NyaXB0aW9uLCAxIH0sIDEp
OwogfQogCiBpbmxpbmUgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uIHRvQ0FBdWRpb1N0cmVhbURl
c2NyaXB0aW9uKGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xl
YXJLZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRl
ZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgsMTUgKzE5OCwxMyBAQCBzdGF0aWMgUmVmPFNoYXJl
ZEJ1ZmZlcj4gZXh0cmFjdEtleWlkc0ZyCiB7CiAgICAgUmVmPFNoYXJlZEJ1ZmZlcj4ga2V5SWRz
ID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoKTsKIAotICAgIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5z
aWduZWQ+IGtleUlkc01hcCA9IGV4dHJhY3RLZXlpZHNMb2NhdGlvbkZyb21DZW5jSW5pdERhdGEo
aW5pdERhdGEpOwotICAgIHVuc2lnbmVkIGtleUlkQ291bnQgPSBrZXlJZHNNYXAuZmlyc3Q7Ci0g
ICAgdW5zaWduZWQgaW5kZXggPSBrZXlJZHNNYXAuc2Vjb25kOworICAgIGF1dG8gW2tleUlkQ291
bnQsIGluZGV4XSA9IGV4dHJhY3RLZXlpZHNMb2NhdGlvbkZyb21DZW5jSW5pdERhdGEoaW5pdERh
dGEpOwogCiAgICAgLy8gQ2hlY2sgaWYgaW5pdERhdGEgaXMgYSB2YWxpZCBDRU5DIGluaXREYXRh
LgogICAgIGlmICgha2V5SWRDb3VudCB8fCAhaW5kZXgpCiAgICAgICAgIHJldHVybiBrZXlJZHM7
CiAKLSAgICBhdXRvKiBkYXRhID0gaW5pdERhdGEuZGF0YSgpOworICAgIGF1dG8gZGF0YSA9IGlu
aXREYXRhLmJ5dGVzKCk7CiAKICAgICBhdXRvIG9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CiAgICAgYXV0byBrZXlJZHNBcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKQEAgLTIx
OCw3ICsyMTYsNyBAQCBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gZXh0cmFjdEtleWlkc0ZyCiAg
ICAgLy8gImtpZHMiCiAgICAgLy8gQW4gYXJyYXkgb2Yga2V5IElEcy4gRWFjaCBlbGVtZW50IG9m
IHRoZSBhcnJheSBpcyB0aGUgYmFzZTY0dXJsIGVuY29kaW5nIG9mIHRoZSBvY3RldCBzZXF1ZW5j
ZSBjb250YWluaW5nIHRoZSBrZXkgSUQgdmFsdWUuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGtleUlkQ291bnQ7IGkrKykgewotICAgICAgICBrZXlJZHNBcnJheS0+cHVzaFN0cmluZyhi
YXNlNjRVUkxFbmNvZGVUb1N0cmluZygmZGF0YVtpbmRleF0sIENsZWFyS2V5OjpLZXlJRFNpemVJ
bkJ5dGVzKSk7CisgICAgICAgIGtleUlkc0FycmF5LT5wdXNoU3RyaW5nKGJhc2U2NFVSTEVuY29k
ZVRvU3RyaW5nKGRhdGEuc3Vic3BhbihpbmRleCwgQ2xlYXJLZXk6OktleUlEU2l6ZUluQnl0ZXMp
KSk7CiAgICAgICAgIGluZGV4ICs9IENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVzOwogICAgIH0K
IApAQCAtMjQ1LDcgKzI0Myw3IEBAIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBleHRyYWN0S2V5
SWRGcm8KICAgICAvLyBUaGUgZm9ybWF0IGlzIGEgSlNPTiBvYmplY3QgY29udGFpbmluZyB0aGUg
Zm9sbG93aW5nIG1lbWJlcnM6CiAgICAgLy8gImtpZHMiCiAgICAgLy8gQW4gYXJyYXkgb2Yga2V5
IElEcy4gRWFjaCBlbGVtZW50IG9mIHRoZSBhcnJheSBpcyB0aGUgYmFzZTY0dXJsIGVuY29kaW5n
IG9mIHRoZSBvY3RldCBzZXF1ZW5jZSBjb250YWluaW5nIHRoZSBrZXkgSUQgdmFsdWUuCi0gICAg
a2V5SWRzQXJyYXktPnB1c2hTdHJpbmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoaW5pdERhdGEu
ZGF0YSgpLCBpbml0RGF0YS5zaXplKCkpKTsKKyAgICBrZXlJZHNBcnJheS0+cHVzaFN0cmluZyhi
YXNlNjRVUkxFbmNvZGVUb1N0cmluZyhpbml0RGF0YS5ieXRlcygpKSk7CiAKICAgICBvYmplY3Qt
PnNldEFycmF5KCJraWRzIiwgV1RGTW92ZShrZXlJZHNBcnJheSkpOwogICAgIENTdHJpbmcganNv
bkRhdGEgPSBvYmplY3QtPnRvSlNPTlN0cmluZygpLnV0ZjgoKTsKQEAgLTU3OCw5ICs1NzYsOCBA
QCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTCiAKICAgICAvLyBDb25z
dHJ1Y3QgdGhlIEtleVN0YXR1c1ZlY3RvciBvYmplY3QsIHJlcHJlc2VudGluZyByZWxlYXNlZCBr
ZXlzLCBhbmQgdGhlIG1lc3NhZ2UgaW4gdGhlCiAgICAgLy8gJ2xpY2Vuc2UgcmVsZWFzZScgZm9y
bWF0LgotICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3IgPSBtX2tleVN0b3JlLmFs
bEtleXNBcyhDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6UmVsZWFzZWQpOwotICAgIFJl
ZlB0cjxTaGFyZWRCdWZmZXI+IG1lc3NhZ2U7Ci0gICAgeworICAgIGF1dG8ga2V5U3RhdHVzVmVj
dG9yID0gbV9rZXlTdG9yZS5hbGxLZXlzQXMoQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6
OlJlbGVhc2VkKTsKKyAgICBhdXRvIG1lc3NhZ2UgPSBbJl17CiAgICAgICAgIC8vIENvbnN0cnVj
dCBKU09OIHRoYXQgcmVwcmVzZW50cyB0aGUgJ2xpY2Vuc2UgcmVsZWFzZScgZm9ybWF0LCBjcmVh
dGluZyBhICdraWRzJyBhcnJheQogICAgICAgICAvLyBvZiBiYXNlNjRVUkwtZW5jb2RlZCBrZXkg
SURzIGZvciBhbGwga2V5cyB0aGF0IHdlcmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2Vzc2lvbi4K
ICAgICAgICAgYXV0byByb290T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKQEAgLTU4
OCw3ICs1ODUsNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTCiAg
ICAgICAgICAgICBhdXRvIGFycmF5ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICAg
ICAgZm9yIChjb25zdCBhdXRvJiBrZXkgOiBtX2tleVN0b3JlKSB7CiAgICAgICAgICAgICAgICAg
QVNTRVJUKGtleS0+aWQoKS5zaXplKCkgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46
Om1heCgpKTsKLSAgICAgICAgICAgICAgICBhcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNv
ZGVUb1N0cmluZyhrZXktPmlkKCkuZGF0YSgpLCBrZXktPmlkKCkuc2l6ZSgpKSk7CisgICAgICAg
ICAgICAgICAgYXJyYXktPnB1c2hTdHJpbmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoa2V5LT5p
ZCgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByb290T2JqZWN0LT5zZXRBcnJheSgi
a2lkcyIsIFdURk1vdmUoYXJyYXkpKTsKICAgICAgICAgfQpAQCAtNTk2LDExICs1OTMsMTEgQEAg
dm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlUwogICAgICAgICAvLyBDb3B5
IHRoZSBKU09OIGRhdGEgaW50byBhIFNoYXJlZEJ1ZmZlciBvYmplY3QuCiAgICAgICAgIFN0cmlu
ZyBtZXNzYWdlU3RyaW5nID0gcm9vdE9iamVjdC0+dG9KU09OU3RyaW5nKCk7CiAgICAgICAgIENT
dHJpbmcgbWVzc2FnZUNTdHJpbmcgPSBtZXNzYWdlU3RyaW5nLnV0ZjgoKTsKLSAgICAgICAgbWVz
c2FnZSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKG1lc3NhZ2VDU3RyaW5nLmRhdGEoKSwgbWVzc2Fn
ZUNTdHJpbmcubGVuZ3RoKCkpOwotICAgIH0KKyAgICAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6
Y3JlYXRlKG1lc3NhZ2VDU3RyaW5nLmRhdGEoKSwgbWVzc2FnZUNTdHJpbmcubGVuZ3RoKCkpOwor
ICAgIH0oKTsKIAogICAgIG1fa2V5U3RvcmUucmVtb3ZlQWxsS2V5cygpOwotICAgIGRpc3BhdGNo
Q2FsbGJhY2soV1RGTW92ZShrZXlTdGF0dXNWZWN0b3IpLCBSZWY8U2hhcmVkQnVmZmVyPigqbWVz
c2FnZSksIFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVkKTsKKyAgICBkaXNwYXRjaENhbGxiYWNrKFdU
Rk1vdmUoa2V5U3RhdHVzVmVjdG9yKSwgV1RGTW92ZShtZXNzYWdlKSwgU3VjY2Vzc1ZhbHVlOjpT
dWNjZWVkZWQpOwogfQogCiB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpzdG9yZVJl
Y29yZE9mS2V5VXNhZ2UoY29uc3QgU3RyaW5nJikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dlbmVyaWMvS2V5ZWREZWNvZGVyR2VuZXJpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9LZXllZERlY29kZXJHZW5lcmljLmNwcAkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9LZXllZERlY29k
ZXJHZW5lcmljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBzdGF0aWMgc3Rk
OjpvcHRpb25hbDxTdHJpbmc+IHJlYWRTdHJpbmcoCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOwogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcihzaXplLnZhbHVlKCkpOwotICAgIGlm
ICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLmRhdGEoKSwgc2l6ZS52YWx1
ZSgpKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ1ZmZlcikpCiAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgYXV0byByZXN1bHQgPSBTdHJpbmc6OmZy
b21VVEY4KGJ1ZmZlci5kYXRhKCksIHNpemUudmFsdWUoKSk7CiAgICAgaWYgKHJlc3VsdC5pc051
bGwoKSkKQEAgLTg4LDcgKzg4LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEtleWVkRGVjb2Rlcj4gS2V5
ZWREZWNvZAogCiBLZXllZERlY29kZXJHZW5lcmljOjpLZXllZERlY29kZXJHZW5lcmljKGNvbnN0
IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQogewotICAgIFdURjo6UGVyc2lzdGVuY2U6OkRl
Y29kZXIgZGVjb2RlcihkYXRhLCBzaXplKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVy
IGRlY29kZXIoU3BhbiB7IGRhdGEsIHNpemUgfSk7CiAKICAgICBtX3Jvb3REaWN0aW9uYXJ5ID0g
bWFrZVVuaXF1ZTxEaWN0aW9uYXJ5PigpOwogICAgIG1fZGljdGlvbmFyeVN0YWNrLmFwcGVuZCht
X3Jvb3REaWN0aW9uYXJ5LmdldCgpKTsKQEAgLTExNyw3ICsxMTcsNyBAQCBLZXllZERlY29kZXJH
ZW5lcmljOjpLZXllZERlY29kZXJHZW5lcmljCiAgICAgICAgICAgICBpZiAoIW9rKQogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcigqc2l6
ZSk7Ci0gICAgICAgICAgICBvayA9IGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ1ZmZl
ci5kYXRhKCksICpzaXplKTsKKyAgICAgICAgICAgIG9rID0gZGVjb2Rlci5kZWNvZGVGaXhlZExl
bmd0aERhdGEoYnVmZmVyKTsKICAgICAgICAgICAgIGlmICghb2spCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCktPmFkZCgqa2V5LCBX
VEZNb3ZlKGJ1ZmZlcikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9L
ZXllZEVuY29kZXJHZW5lcmljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9nZW5lcmljL0tleWVkRW5jb2RlckdlbmVyaWMuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL0tleWVkRW5jb2RlckdlbmVyaWMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHZvaWQgS2V5ZWRFbmNvZGVyR2VuZXJp
Yzo6ZW5jb2RlU3RyaW5nKGMKIHsKICAgICBhdXRvIHV0ZjggPSBrZXkudXRmOCgpOwogICAgIG1f
ZW5jb2RlciA8PCB1dGY4Lmxlbmd0aCgpOwotICAgIG1fZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEodXRmOC5kYXRhQXNVSW50OFB0cigpLCB1dGY4Lmxlbmd0aCgpKTsKKyAgICBtX2VuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHV0ZjguYnl0ZXMoKSk7CiB9CiAKIHZvaWQgS2V5ZWRF
bmNvZGVyR2VuZXJpYzo6ZW5jb2RlQnl0ZXMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IHVpbnQ4
X3QqIGJ5dGVzLCBzaXplX3Qgc2l6ZSkKQEAgLTQ4LDcgKzQ4LDcgQEAgdm9pZCBLZXllZEVuY29k
ZXJHZW5lcmljOjplbmNvZGVCeXRlcyhjbwogICAgIG1fZW5jb2RlciA8PCBUeXBlOjpCeXRlczsK
ICAgICBlbmNvZGVTdHJpbmcoa2V5KTsKICAgICBtX2VuY29kZXIgPDwgc2l6ZTsKLSAgICBtX2Vu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGJ5dGVzLCBzaXplKTsKKyAgICBtX2VuY29kZXIu
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBieXRlcywgc2l6ZSB9KTsKIH0KIAogdm9pZCBL
ZXllZEVuY29kZXJHZW5lcmljOjplbmNvZGVCb29sKGNvbnN0IFN0cmluZyYga2V5LCBib29sIHZh
bHVlKQpAQCAtMTQxLDcgKzE0MSw3IEBAIHZvaWQgS2V5ZWRFbmNvZGVyR2VuZXJpYzo6ZW5kQXJy
YXkoKQogCiBSZWZQdHI8U2hhcmVkQnVmZmVyPiBLZXllZEVuY29kZXJHZW5lcmljOjpmaW5pc2hF
bmNvZGluZygpCiB7Ci0gICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKG1fZW5jb2Rlci5i
dWZmZXIoKSwgbV9lbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKG1fZW5jb2Rlci5idWZmZXIoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01vZGVsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTW9kZWwuaAkocmV2aXNp
b24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTW9kZWwuaAko
d29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgog
dm9pZCBNb2RlbDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2Rl
ciA8PCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fZGF0YS0+c2l6ZSgpKTsKLSAgICBlbmNvZGVyLmVu
Y29kZUZpeGVkTGVuZ3RoRGF0YShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCksIDEpOwor
ICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKG1fZGF0YS0+Ynl0ZXMoKSwgMSk7CiB9
CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CkBAIC03NCw3ICs3NCw3IEBAIFJlZlB0cjxNb2Rl
bD4gTW9kZWw6OmRlY29kZShEZWNvZGVyJiBkZWMKIAogICAgIFZlY3Rvcjx1aW50OF90PiBkYXRh
OwogICAgIGRhdGEuZ3JvdygqbGVuZ3RoKTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgMSkpCisgICAgaWYgKCFkZWNvZGVy
LmRlY29kZUZpeGVkTGVuZ3RoRGF0YShkYXRhLCAxKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICByZXR1cm4gTW9kZWw6OmNyZWF0ZShTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3Zl
KGRhdGEpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1
ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bp
eGVsQnVmZmVyLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BpeGVsQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAg
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBQaXhlbEJ1ZmZlcgogCiAgICAgZW5jb2RlciA8
PCBtX2Zvcm1hdDsKICAgICBlbmNvZGVyIDw8IG1fc2l6ZTsKLSAgICBlbmNvZGVyLmVuY29kZUZp
eGVkTGVuZ3RoRGF0YShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5ieXRlTGVuZ3RoKCksIDEpOwor
ICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKG1fZGF0YS0+Ynl0ZXMoKSwgMSk7CiB9
CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IFBp
eGVsQnVmZmVyOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKQEAgLTExMyw3ICsxMTMsNyBAQCB0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGQ6Om9wdGlvbmFsPFBpCiAgICAgaWYgKCFyZXN1bHQp
CiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKHJlc3VsdC0+bV9kYXRhLT5kYXRhKCksIHJlc3VsdC0+bV9kYXRhLT5i
eXRlTGVuZ3RoKCksIDEpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEo
cmVzdWx0LT5tX2RhdGEtPndyaXRhYmxlQnl0ZXMoKSwgMSkpCiAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CiAKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVh
bWluZ0FWRk9iakMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9i
akMubW0JKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpD
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBACiAjaW1wb3J0IDx3dGYvRmlsZVN5
c3RlbS5oPgogI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbXBvcnQgPHd0Zi9Mb2dnZXJI
ZWxwZXIuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9TcGFuQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi9j
b2NvYS9WZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+CiAjaW1wb3J0
IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBAIC03MTUsNyArNzE2LDcgQEAgdm9pZCBDRE1JbnN0
YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZwogICAgICAgICBpZGVudGlmaWVyID0gYWRvcHRO
UyhbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aERhdGE6aW5pdERhdGEtPmNyZWF0ZU5TRGF0YSgp
LmdldCgpIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSk7CiAjaWYgSEFWRShGQUlSUExB
WVNUUkVBTUlOR19DRU5DX0lOSVREQVRBKQogICAgIGVsc2UgaWYgKGluaXREYXRhVHlwZSA9PSBJ
bml0RGF0YVJlZ2lzdHJ5OjpjZW5jTmFtZSgpKSB7Ci0gICAgICAgIGF1dG8gcHNzaFN0cmluZyA9
IGJhc2U2NEVuY29kZVRvU3RyaW5nKGluaXREYXRhLT5kYXRhKCksIGluaXREYXRhLT5zaXplKCkp
OworICAgICAgICBhdXRvIHBzc2hTdHJpbmcgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbml0RGF0
YS0+Ynl0ZXMoKSk7CiAgICAgICAgIGluaXRpYWxpemF0aW9uRGF0YSA9IFtOU0pTT05TZXJpYWxp
emF0aW9uIGRhdGFXaXRoSlNPTk9iamVjdDpAeyBAInBzc2giOiAoTlNTdHJpbmcqKXBzc2hTdHJp
bmcgfSBvcHRpb25zOk5TSlNPTldyaXRpbmdQcmV0dHlQcmludGVkIGVycm9yOm5pbF07CiAgICAg
fQogI2VuZGlmCkBAIC0xMTkxLDEyICsxMTkyLDEwIEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9u
RmFpclBsYXlTdHJlYW1pbmcKICAgICAgICAgfQogCiAgICAgICAgIGF1dG8gcmVxdWVzdEpTT04g
PSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7Ci0gICAgICAgIGZvciAoYXV0byYgcmVxdWVzdERhdGEg
OiByZXF1ZXN0c0RhdGEpIHsKKyAgICAgICAgZm9yIChhdXRvJiBba2V5SUQsIHBheWxvYWRdIDog
cmVxdWVzdHNEYXRhKSB7CiAgICAgICAgICAgICBhdXRvIGVudHJ5ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKLSAgICAgICAgICAgIGF1dG8mIGtleUlEID0gcmVxdWVzdERhdGEuZmlyc3Q7Ci0g
ICAgICAgICAgICBhdXRvJiBwYXlsb2FkID0gcmVxdWVzdERhdGEuc2Vjb25kOwotICAgICAgICAg
ICAgZW50cnktPnNldFN0cmluZygia2V5SUQiLCBiYXNlNjRFbmNvZGVUb1N0cmluZyhrZXlJRC0+
ZGF0YSgpLCBrZXlJRC0+c2l6ZSgpKSk7Ci0gICAgICAgICAgICBlbnRyeS0+c2V0U3RyaW5nKCJw
YXlsb2FkIiwgYmFzZTY0RW5jb2RlVG9TdHJpbmcocGF5bG9hZC5nZXQoKS5ieXRlcywgcGF5bG9h
ZC5nZXQoKS5sZW5ndGgpKTsKKyAgICAgICAgICAgIGVudHJ5LT5zZXRTdHJpbmcoImtleUlEIiwg
YmFzZTY0RW5jb2RlVG9TdHJpbmcoa2V5SUQtPmJ5dGVzKCkpKTsKKyAgICAgICAgICAgIGVudHJ5
LT5zZXRTdHJpbmcoInBheWxvYWQiLCBiYXNlNjRFbmNvZGVUb1N0cmluZyhhc0J5dGVzKHBheWxv
YWQuZ2V0KCkpKSk7CiAgICAgICAgICAgICByZXF1ZXN0SlNPTi0+cHVzaE9iamVjdChXVEZNb3Zl
KGVudHJ5KSk7CiAgICAgICAgIH0KICAgICAgICAgYXV0byByZXF1ZXN0QnVmZmVyID0gdXRmOEJ1
ZmZlcihyZXF1ZXN0SlNPTi0+dG9KU09OU3RyaW5nKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzIsNyArMTMyLDcgQEAgU3RyaW5nIEltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kOjp0b0RhdGFVUgogICAgIGlmIChlbmNvZGVkSW1hZ2UuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gImRhdGE6LCI7CiAKLSAgICByZXR1cm4gbWFrZVN0cmluZygiZGF0YToiLCBtaW1lVHlw
ZSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChlbmNvZGVkSW1hZ2UuZGF0YSgpLCBlbmNvZGVk
SW1hZ2Uuc2l6ZSgpKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoImRhdGE6IiwgbWltZVR5cGUs
ICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoZW5jb2RlZEltYWdlKSk7CiB9CiAKIFZlY3Rvcjx1
aW50OF90PiBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDAsNyArMTAwLDcgQEAgc3RhdGljIFN0cmluZyBjcmVhdGVVbmlxdWVG
b250TmFtZSgpCiAgICAgR1VJRCBmb250VXVpZDsKICAgICBDb0NyZWF0ZUd1aWQoJmZvbnRVdWlk
KTsKIAotICAgIGF1dG8gZm9udE5hbWUgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhyZWludGVycHJl
dF9jYXN0PGNoYXIqPigmZm9udFV1aWQpLCBzaXplb2YoZm9udFV1aWQpKTsKKyAgICBhdXRvIGZv
bnROYW1lID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoU3BhbiB7ICZmb250VXVpZCwgMSB9KTsKICAg
ICBBU1NFUlQoZm9udE5hbWUubGVuZ3RoKCkgPCBMRl9GQUNFU0laRSk7CiAgICAgcmV0dXJuIGZv
bnROYW1lOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5jcHAJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3
ICs4MSw3IEBAIHN0YXRpYyBTdHJpbmcgY3JlYXRlVW5pcXVlRm9udE5hbWUoKQogICAgIEdVSUQg
Zm9udFV1aWQ7CiAgICAgQ29DcmVhdGVHdWlkKCZmb250VXVpZCk7CiAKLSAgICBhdXRvIGZvbnRO
YW1lID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJmZvbnRV
dWlkKSwgc2l6ZW9mKGZvbnRVdWlkKSk7CisgICAgYXV0byBmb250TmFtZSA9IGJhc2U2NEVuY29k
ZVRvU3RyaW5nKFNwYW4geyAmZm9udFV1aWQsIDEgfSk7CiAgICAgQVNTRVJUKGZvbnROYW1lLmxl
bmd0aCgpIDwgTEZfRkFDRVNJWkUpOwogICAgIHJldHVybiBmb250TmFtZTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0b3JNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRvck1hYy5tbQko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NTTEtleUdl
bmVyYXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjE5LDcgKzIxOSw3IEBAIHN0YXRpYyBT
dHJpbmcgc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmcKICAgICBpZiAoU2VjQXNuMUVuY29kZUl0
ZW0oY29kZXIsICZzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2UsIHNpZ25lZFB1YmxpY0tleUFu
ZENoYWxsZW5nZVRlbXBsYXRlLCAmZW5jb2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZSkg
IT0gbm9FcnIpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIHJldHVybiBiYXNlNjRF
bmNvZGVUb1N0cmluZyhlbmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlLkRhdGEsIGVu
Y29kZWRTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2UuTGVuZ3RoKTsKKyAgICByZXR1cm4gYmFz
ZTY0RW5jb2RlVG9TdHJpbmcoU3BhbiB7IGVuY29kZWRTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVu
Z2UuRGF0YSwgZW5jb2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZS5MZW5ndGggfSk7CiB9
CiAKIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0
aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxp
dGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTYgKzExNCwxNiBAQCBwcml2YXRlOgogdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZTo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oJm1fbWluT3JWYWx1ZSksIHNp
emVvZihWYWx1ZVVuaW9uKSwgYWxpZ25vZihWYWx1ZVVuaW9uKSk7Ci0gICAgZW5jb2Rlci5lbmNv
ZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oJm1fbWF4
KSwgc2l6ZW9mKFZhbHVlVW5pb24pLCBhbGlnbm9mKFZhbHVlVW5pb24pKTsKKyAgICBlbmNvZGVy
LmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJm1fbWluT3JWYWx1ZSwgMSB9LCBhbGlnbm9m
KFZhbHVlVW5pb24pKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsg
Jm1fbWF4LCAxIH0sIGFsaWdub2YoVmFsdWVVbmlvbikpOwogICAgIGVuY29kZXIgPDwgbV90eXBl
OwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgogYm9vbCBDYXBhYmlsaXR5VmFsdWVPclJh
bmdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZSYgdmFs
dWVPclJhbmdlKQogewotICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWVPclJhbmdlLm1fbWluT3JWYWx1ZSksIHNp
emVvZihWYWx1ZVVuaW9uKSwgYWxpZ25vZihWYWx1ZVVuaW9uKSkKLSAgICAgICAgJiYgZGVjb2Rl
ci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnZhbHVl
T3JSYW5nZS5tX21heCksIHNpemVvZihWYWx1ZVVuaW9uKSwgYWxpZ25vZihWYWx1ZVVuaW9uKSkK
KyAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZ2YWx1ZU9y
UmFuZ2UubV9taW5PclZhbHVlLCAxIH0sIGFsaWdub2YoVmFsdWVVbmlvbikpCisgICAgICAgICYm
IGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmdmFsdWVPclJhbmdlLm1fbWF4
LCAxIH0sIGFsaWdub2YoVmFsdWVVbmlvbikpCiAgICAgICAgICYmIGRlY29kZXIuZGVjb2RlKHZh
bHVlT3JSYW5nZS5tX3R5cGUpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2Vu
dGVyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzOSwxMyArMTM5LDEzIEBAIHN0YXRpYyB2b2lkIGFkZFN0cmluZ1RvU0hBMShTSEExJiBzaGEx
LCAKIAogICAgIGlmIChzdHJpbmcuaXM4Qml0KCkgJiYgc3RyaW5nLmlzQWxsQVNDSUkoKSkgewog
ICAgICAgICBjb25zdCB1aW50OF90IG51bGxCeXRlID0gMDsKLSAgICAgICAgc2hhMS5hZGRCeXRl
cyhzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpKTsKLSAgICAgICAgc2hhMS5h
ZGRCeXRlcygmbnVsbEJ5dGUsIDEpOworICAgICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyBzdHJp
bmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpIH0pOworICAgICAgICBzaGExLmFkZEJ5
dGVzKFNwYW4geyAmbnVsbEJ5dGUsIDEgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBhdXRvIHV0ZjggPSBzdHJpbmcudXRmOCgpOwotICAgIHNoYTEuYWRkQnl0ZXModXRmOC5kYXRh
QXNVSW50OFB0cigpLCB1dGY4Lmxlbmd0aCgpICsgMSk7IC8vIEluY2x1ZGUgdGVybWluYXRpbmcg
bnVsbCBieXRlLgorICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IHV0ZjguZGF0YUFzVUludDhQdHIo
KSwgdXRmOC5sZW5ndGgoKSArIDEgfSk7IC8vIEluY2x1ZGUgdGVybWluYXRpbmcgbnVsbCBieXRl
LgogfQogCiBTdHJpbmcgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6aGFzaFN0cmluZ1dpdGhT
YWx0KGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0IFN0cmluZyYgaGFzaFNhbHQpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxCYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxCYXNlLmNwcAko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVk
ZW50aWFsQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDggKzk3LDkgQEAgYm9vbCBDcmVk
ZW50aWFsQmFzZTo6Y29tcGFyZShjb25zdCBDcmVkZQogCiBTdHJpbmcgQ3JlZGVudGlhbEJhc2U6
OnNlcmlhbGl6YXRpb25Gb3JCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIoKSBjb25zdAogeworICAg
IC8vIEZJWE1FOiBBZGQgbWFrZVN0cmluZyB2YXJpYW50IHRoYXQgY3JlYXRlcyBhIHV0ZjggYnVm
ZmVyIGRpcmVjdGx5LgogICAgIGF1dG8gY3JlZGVudGlhbFN0cmluZ0RhdGEgPSBtYWtlU3RyaW5n
KG1fdXNlciwgJzonLCBtX3Bhc3N3b3JkKS51dGY4KCk7Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmco
IkJhc2ljICIsIGJhc2U2NEVuY29kZWQoY3JlZGVudGlhbFN0cmluZ0RhdGEpKTsKKyAgICByZXR1
cm4gbWFrZVN0cmluZygiQmFzaWMgIiwgYmFzZTY0RW5jb2RlZChjcmVkZW50aWFsU3RyaW5nRGF0
YS5ieXRlcygpKSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2YvQ2VydGlmaWNhdGVJbmZvQ0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ2VydGlmaWNhdGVJbmZvQ0ZOZXQuY3BwCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0NlcnRpZmlj
YXRlSW5mb0NGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEwLDcgKzIxMCw3IEBAIHN0YXRp
YyB2b2lkIGVuY29kZUNGRGF0YShFbmNvZGVyJiBlbmNvZGUKICAgICBjb25zdCB1aW50OF90KiBi
eXRlUHRyID0gQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKTsKIAogICAgIGVuY29kZXIgPDwgbGVuZ3Ro
OwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGJ5dGVQdHIsIHN0YXRpY19jYXN0
PHNpemVfdD4obGVuZ3RoKSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoU3Bh
biB7IGJ5dGVQdHIsIHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSB9KTsKIH0KIAogc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8UmV0YWluUHRyPENGRGF0YVJlZj4+IGRlY29kZUNGRGF0YShEZWNvZGVy
JiBkZWNvZGVyKQpAQCAtMjI1LDcgKzIyNSw3IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldGFp
blB0cjxDRkRhdGFSZWYKICAgICBpZiAoIXBvaW50ZXIpCiAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CiAKLSAgICByZXR1cm4gYWRvcHRDRihDRkRhdGFDcmVhdGUobnVsbHB0ciwgcG9pbnRl
ciwgKnNpemUpKTsKKyAgICByZXR1cm4gYWRvcHRDRihDRkRhdGFDcmVhdGUobnVsbHB0ciwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4ocG9pbnRlciksICpzaXplKSk7CiB9CiAKICNp
ZiBIQVZFKFNFQ19UUlVTVF9TRVJJQUxJWkFUSU9OKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0N1cmxDYWNoZUVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlRW50cnkuY3BwCShyZXZp
c2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3Vy
bENhY2hlRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTIsNyArMjEyLDcgQEAgdm9pZCBD
dXJsQ2FjaGVFbnRyeTo6ZGlkRmluaXNoTG9hZGluZygpCiB2b2lkIEN1cmxDYWNoZUVudHJ5Ojpn
ZW5lcmF0ZUJhc2VGaWxlbmFtZShjb25zdCBDU3RyaW5nJiB1cmwpCiB7CiAgICAgU0hBMSBzaGEx
OwotICAgIHNoYTEuYWRkQnl0ZXModXJsLmRhdGFBc1VJbnQ4UHRyKCksIHVybC5sZW5ndGgoKSk7
CisgICAgc2hhMS5hZGRCeXRlcyh1cmwuYnl0ZXMoKSk7CiAKICAgICBTSEExOjpEaWdlc3Qgc3Vt
OwogICAgIHNoYTEuY29tcHV0ZUhhc2goc3VtKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9DZXJ0aWZpY2F0ZUluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ2VydGlmaWNhdGVJbmZvLmgJKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9DZXJ0aWZp
Y2F0ZUluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCB0ZW1wbGF0ZTw+IHN0
cnVjdCBDb2RlcjxHUmVmUHRyPEdCeXRlQXJyCiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29k
ZXIgJmVuY29kZXIsIGNvbnN0IEdSZWZQdHI8R0J5dGVBcnJheT4mIGJ5dGVBcnJheSkKICAgICB7
CiAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGJ5dGVBcnJheS0+bGVu
KTsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYnl0ZUFycmF5LT5kYXRh
LCBieXRlQXJyYXktPmxlbik7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KFNwYW4geyBieXRlQXJyYXktPmRhdGEsIGJ5dGVBcnJheS0+bGVuIH0pOwogICAgIH0KIAogICAg
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEdSZWZQdHI8R0J5dGVBcnJheT4+IGRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQpAQCAtODcsNyArODcsNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxHUmVm
UHRyPEdCeXRlQXJyCiAKICAgICAgICAgR1JlZlB0cjxHQnl0ZUFycmF5PiBieXRlQXJyYXkgPSBh
ZG9wdEdSZWYoZ19ieXRlX2FycmF5X3NpemVkX25ldygqc2l6ZSkpOwogICAgICAgICBnX2J5dGVf
YXJyYXlfc2V0X3NpemUoYnl0ZUFycmF5LmdldCgpLCAqc2l6ZSk7Ci0gICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoYnl0ZUFycmF5LT5kYXRhLCAqc2l6ZSkpCisgICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IGJ5dGVBcnJheS0+
ZGF0YSwgKnNpemUgfSkpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAg
ICByZXR1cm4gYnl0ZUFycmF5OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODUsNyArODUsNyBAQCBib29sIFNRTGl0ZVN0YXRlbWVudDo6ZXhlY3V0ZUNvbW1hbmQo
KQogICAgIHJldHVybiBzdGVwKCkgPT0gU1FMSVRFX0RPTkU7CiB9CiAKLWludCBTUUxpdGVTdGF0
ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgU3Bhbjxjb25zdCB1aW50OF90PiBibG9iKQoraW50
IFNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IoaW50IGluZGV4LCBTcGFuPGNvbnN0IHN0ZDo6Ynl0
ZT4gYmxvYikKIHsKICAgICBBU1NFUlQoaW5kZXggPiAwKTsKICAgICBBU1NFUlQoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGluZGV4KSA8PSBiaW5kUGFyYW1ldGVyQ291bnQoKSk7CkBAIC05NSw2ICs5
NSwxMSBAQCBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kQmxvYihpbnQgaW5kZXgsCiAgICAgcmV0
dXJuIHNxbGl0ZTNfYmluZF9ibG9iKG1fc3RhdGVtZW50LCBpbmRleCwgYmxvYi5kYXRhKCksIGJs
b2Iuc2l6ZSgpLCBTUUxJVEVfVFJBTlNJRU5UKTsKIH0KIAoraW50IFNRTGl0ZVN0YXRlbWVudDo6
YmluZEJsb2IoaW50IGluZGV4LCBTcGFuPGNvbnN0IHVpbnQ4X3Q+IGJsb2IpCit7CisgICAgcmV0
dXJuIGJpbmRCbG9iKGluZGV4LCBhc0J5dGVzKGJsb2IpKTsKK30KKwogaW50IFNRTGl0ZVN0YXRl
bWVudDo6YmluZEJsb2IoaW50IGluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQpCiB7CiAgICAgLy8g
U3RyaW5nOjpjaGFyYWN0ZXJzKCkgcmV0dXJucyAwIGZvciB0aGUgZW1wdHkgc3RyaW5nLCB3aGlj
aCBTUUxpdGUKQEAgLTEwNyw3ICsxMTIsNyBAQCBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kQmxv
YihpbnQgaW5kZXgsCiAgICAgZWxzZQogICAgICAgICBjaGFyYWN0ZXJzID0gdXBjb252ZXJ0ZWRD
aGFyYWN0ZXJzOwogCi0gICAgcmV0dXJuIGJpbmRCbG9iKGluZGV4LCBTcGFuIHsgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oY2hhcmFjdGVycyksIHRleHQubGVuZ3RoKCkgKiBzaXpl
b2YoVUNoYXIpIH0pOworICAgIHJldHVybiBiaW5kQmxvYihpbmRleCwgU3BhbiB7IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3Qgc3RkOjpieXRlKj4oY2hhcmFjdGVycyksIHRleHQubGVuZ3RoKCkgKiBz
aXplb2YoVUNoYXIpIH0pOwogfQogCiBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kVGV4dChpbnQg
aW5kZXgsIFN0cmluZ1ZpZXcgdGV4dCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Nx
bC9TUUxpdGVTdGF0ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9zcWwvU1FMaXRlU3RhdGVtZW50LmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzks
NiArMzksNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgflNRTGl0ZVN0YXRlbWVudCgp
OwogICAgIFdFQkNPUkVfRVhQT1JUIFNRTGl0ZVN0YXRlbWVudChTUUxpdGVTdGF0ZW1lbnQmJik7
CiAgICAgCisgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJpbmRCbG9iKGludCBpbmRleCwgU3Bhbjxj
b25zdCBzdGQ6OmJ5dGU+KTsKICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgYmluZEJsb2IoaW50IGlu
ZGV4LCBTcGFuPGNvbnN0IHVpbnQ4X3Q+KTsKICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgYmluZEJs
b2IoaW50IGluZGV4LCBjb25zdCBTdHJpbmcmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgYmlu
ZFRleHQoaW50IGluZGV4LCBTdHJpbmdWaWV3KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvUXVvdGVkUHJpbnRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVvdGVkUHJpbnRhYmxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTUsMTIgKzU1LDcgQEAgc3RhdGljIHNpemVfdCBsZW5ndGhPZkxpbmVFbmRp
bmdBdEluZGV4KAogICAgIHJldHVybiAwOwogfQogCi1WZWN0b3I8dWludDhfdD4gcXVvdGVkUHJp
bnRhYmxlRW5jb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQpCi17Ci0gICAgcmV0dXJu
IHF1b3RlZFByaW50YWJsZUVuY29kZShpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSk7Ci19Ci0K
LVZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNvZGUoY29uc3QgdWludDhfdCogaW5w
dXQsIHNpemVfdCBpbnB1dExlbmd0aCkKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJp
bnRhYmxlRW5jb2RlKGNvbnN0IHVpbnQ4X3QqIGlucHV0LCBzaXplX3QgaW5wdXRMZW5ndGgpCiB7
CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IG91dDsKICAgICBvdXQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShpbnB1dExlbmd0aCk7CkBAIC0xMTYsMTIgKzExMSwxMiBAQCBWZWN0b3I8dWludDhfdD4gcXVv
dGVkUHJpbnRhYmxlRW5jb2RlKGNvCiAgICAgcmV0dXJuIG91dDsKIH0KIAotVmVjdG9yPHVpbnQ4
X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQor
VmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShTcGFuPGNvbnN0IHN0ZDo6Ynl0
ZT4gaW5wdXQpCiB7Ci0gICAgcmV0dXJuIHF1b3RlZFByaW50YWJsZURlY29kZShpbnB1dC5kYXRh
KCksIGlucHV0LnNpemUoKSk7CisgICAgcmV0dXJuIHF1b3RlZFByaW50YWJsZUVuY29kZShyZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCkp
OwogfQogCi1WZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0IHVpbnQ4
X3QqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3RoKQorc3RhdGljIFZlY3Rvcjx1aW50OF90PiBxdW90
ZWRQcmludGFibGVEZWNvZGUoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGRhdGFMZW5ndGgp
CiB7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IG91dDsKICAgICBpZiAoIWRhdGFMZW5ndGgpCkBAIC0x
NTYsNCArMTUxLDkgQEAgVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShjbwog
ICAgIHJldHVybiBvdXQ7CiB9CiAKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNv
ZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGlucHV0KQoreworICAgIHJldHVybiBxdW90ZWRQcmlu
dGFibGVEZWNvZGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0YSgp
KSwgaW5wdXQuc2l6ZSgpKTsKK30KKwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9RdW90ZWRQcmludGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5oCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSwxMyArMzEsMTEgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVZlY3Rv
cjx1aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik7
Ci1WZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IHVpbnQ4X3QqLCBz
aXplX3QpOwotCi1WZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYpOwotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShj
b25zdCB1aW50OF90Kiwgc2l6ZV90KTsKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVF
bmNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KTsKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmlu
dGFibGVEZWNvZGUoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2lu
LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bh
c3RlYm9hcmRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsNyArMjUxLDcgQEAgc3RkOjpv
cHRpb25hbDxQYXN0ZWJvYXJkQ3VzdG9tRGF0YT4gUGFzdAogICAgICAgICBpZiAoSEFORExFIGNi
RGF0YSA9IDo6R2V0Q2xpcGJvYXJkRGF0YShDdXN0b21EYXRhQ2xpcGJvYXJkRm9ybWF0KSkgewog
ICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBHbG9iYWxTaXplKGNiRGF0YSk7CiAgICAgICAgICAg
ICBhdXRvIGRhdGEgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oR2xvYmFsTG9jayhjYkRhdGEpKTsK
LSAgICAgICAgICAgIGF1dG8gY3VzdG9tRGF0YSA9IFBhc3RlYm9hcmRDdXN0b21EYXRhOjpmcm9t
UGVyc2lzdGVuY2VEZWNvZGVyKHtkYXRhLCBzaXplfSk7CisgICAgICAgICAgICBhdXRvIGN1c3Rv
bURhdGEgPSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6ZnJvbVBlcnNpc3RlbmNlRGVjb2RlcihTcGFu
IHsgZGF0YSwgc2l6ZSB9KTsKIAogICAgICAgICAgICAgR2xvYmFsVW5sb2NrKGNiRGF0YSk7CiAg
ICAgICAgICAgICA6OkNsb3NlQ2xpcGJvYXJkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFi
YXNlLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2
aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1
OSwxMCArNDU5LDEwIEBAIGJvb2wgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmRvUHVzaENoYW5nZXMK
ICAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRleHQoNiwgdXBkYXRlVmlhQ2Fj
aGVUb1N0cmluZyhkYXRhLnJlZ2lzdHJhdGlvbi51cGRhdGVWaWFDYWNoZSkpICE9IFNRTElURV9P
SwogICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCg3LCBkYXRhLnNjcmlw
dFVSTC5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1l
bnQtPmJpbmRUZXh0KDgsIHdvcmtlclR5cGVUb1N0cmluZyhkYXRhLndvcmtlclR5cGUpKSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoOSwgU3Bh
biB7IGNzcEVuY29kZXIuYnVmZmVyKCksIGNzcEVuY29kZXIuYnVmZmVyU2l6ZSgpIH0pICE9IFNR
TElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kQmxvYig5LCBjc3BF
bmNvZGVyLmJ1ZmZlcigpKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAgIHx8IGluc2VydFN0YXRl
bWVudC0+YmluZFRleHQoMTAsIGRhdGEucmVmZXJyZXJQb2xpY3kpICE9IFNRTElURV9PSwotICAg
ICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kQmxvYigxMSwgU3BhbiB7IHNjcmlwdFJl
c291cmNlTWFwRW5jb2Rlci5idWZmZXIoKSwgc2NyaXB0UmVzb3VyY2VNYXBFbmNvZGVyLmJ1ZmZl
clNpemUoKSB9KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+
YmluZEJsb2IoMTIsIFNwYW4geyBjZXJ0aWZpY2F0ZUluZm9FbmNvZGVyLmJ1ZmZlcigpLCBjZXJ0
aWZpY2F0ZUluZm9FbmNvZGVyLmJ1ZmZlclNpemUoKSB9KSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
ICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoMTEsIHNjcmlwdFJlc291cmNlTWFwRW5j
b2Rlci5idWZmZXIoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1l
bnQtPmJpbmRCbG9iKDEyLCBjZXJ0aWZpY2F0ZUluZm9FbmNvZGVyLmJ1ZmZlcigpKSAhPSBTUUxJ
VEVfT0sKICAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9E
T05FKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTZXJ2aWNlV29ya2VyLCAiRmFp
bGVkIHRvIHN0b3JlIHJlZ2lzdHJhdGlvbiBkYXRhIGludG8gcmVjb3JkcyB0YWJsZSAoJWkpIC0g
JXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkp
OwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTE3LDcgKzUxNyw3IEBAIFN0cmluZyBS
ZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3IKICAgICAgICAgc3RkOjpvcHRpb25hbDxD
b250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnM+IGNvbnRlbnRTZWN1cml0eVBvbGlj
eTsKICAgICAgICAgYXV0byBjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhU3BhbiA9IHNxbC0+Y29s
dW1uQmxvYkFzU3Bhbig4KTsKICAgICAgICAgaWYgKGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGFT
cGFuLnNpemUoKSkgewotICAgICAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBjc3BE
ZWNvZGVyKGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGFTcGFuLmRhdGEoKSwgY29udGVudFNlY3Vy
aXR5UG9saWN5RGF0YVNwYW4uc2l6ZSgpKTsKKyAgICAgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6
OkRlY29kZXIgY3NwRGVjb2RlciB7IGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGFTcGFuIH07CiAg
ICAgICAgICAgICBjc3BEZWNvZGVyID4+IGNvbnRlbnRTZWN1cml0eVBvbGljeTsKICAgICAgICAg
ICAgIGlmICghY29udGVudFNlY3VyaXR5UG9saWN5KSB7CiAgICAgICAgICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRS
ZWNvcmRzOiBGYWlsZWQgdG8gZGVjb2RlIGNvbnRlbnRTZWN1cml0eVBvbGljeSIpOwpAQCAtNTMw
LDcgKzUzMCw3IEBAIFN0cmluZyBSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3IKICAg
ICAgICAgSGFzaE1hcDxVUkwsIFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YTo6SW1wb3J0ZWRTY3Jp
cHQ+IHNjcmlwdFJlc291cmNlTWFwOwogICAgICAgICBhdXRvIHNjcmlwdFJlc291cmNlTWFwRGF0
YVNwYW4gPSBzcWwtPmNvbHVtbkJsb2JBc1NwYW4oMTApOwogICAgICAgICBpZiAoc2NyaXB0UmVz
b3VyY2VNYXBEYXRhU3Bhbi5zaXplKCkpIHsKLSAgICAgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6
OkRlY29kZXIgc2NyaXB0UmVzb3VyY2VNYXBEZWNvZGVyKHNjcmlwdFJlc291cmNlTWFwRGF0YVNw
YW4uZGF0YSgpLCBzY3JpcHRSZXNvdXJjZU1hcERhdGFTcGFuLnNpemUoKSk7CisgICAgICAgICAg
ICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIHNjcmlwdFJlc291cmNlTWFwRGVjb2RlciB7IHNj
cmlwdFJlc291cmNlTWFwRGF0YVNwYW4gfTsKICAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8SGFz
aE1hcDxVUkwsIEltcG9ydGVkU2NyaXB0QXR0cmlidXRlcz4+IHNjcmlwdFJlc291cmNlTWFwV2l0
aG91dFNjcmlwdHM7CiAgICAgICAgICAgICBzY3JpcHRSZXNvdXJjZU1hcERlY29kZXIgPj4gc2Ny
aXB0UmVzb3VyY2VNYXBXaXRob3V0U2NyaXB0czsKICAgICAgICAgICAgIGlmICghc2NyaXB0UmVz
b3VyY2VNYXBXaXRob3V0U2NyaXB0cykgewpAQCAtNTQzLDcgKzU0Myw3IEBAIFN0cmluZyBSZWdp
c3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3IKICAgICAgICAgYXV0byBjZXJ0aWZpY2F0ZUlu
Zm9EYXRhU3BhbiA9IHNxbC0+Y29sdW1uQmxvYkFzU3BhbigxMSk7CiAgICAgICAgIHN0ZDo6b3B0
aW9uYWw8Q2VydGlmaWNhdGVJbmZvPiBjZXJ0aWZpY2F0ZUluZm87CiAKLSAgICAgICAgV1RGOjpQ
ZXJzaXN0ZW5jZTo6RGVjb2RlciBjZXJ0aWZpY2F0ZUluZm9EZWNvZGVyKGNlcnRpZmljYXRlSW5m
b0RhdGFTcGFuLmRhdGEoKSwgY2VydGlmaWNhdGVJbmZvRGF0YVNwYW4uc2l6ZSgpKTsKKyAgICAg
ICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBjZXJ0aWZpY2F0ZUluZm9EZWNvZGVyIHsgY2Vy
dGlmaWNhdGVJbmZvRGF0YVNwYW4gfTsKICAgICAgICAgY2VydGlmaWNhdGVJbmZvRGVjb2RlciA+
PiBjZXJ0aWZpY2F0ZUluZm87CiAgICAgICAgIGlmICghY2VydGlmaWNhdGVJbmZvKSB7CiAgICAg
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTZXJ2aWNlV29ya2VyLCAiUmVnaXN0cmF0aW9uRGF0
YWJhc2U6OmltcG9ydFJlY29yZHM6IEZhaWxlZCB0byBkZWNvZGUgY2VydGlmaWNhdGVJbmZvIik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3Rv
cmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3Nl
cnZlci9TV1NjcmlwdFN0b3JhZ2UuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU2LDcgKzU2LDcgQEAgU3RyaW5nIFNXU2NyaXB0U3RvcmFnZTo6c2hhMkhhc2go
Y29uc3QgUwogICAgIGF1dG8gaW5wdXRVdGY4ID0gaW5wdXQudXRmOCgpOwogICAgIGNyeXB0by0+
YWRkQnl0ZXMoaW5wdXRVdGY4LmRhdGEoKSwgaW5wdXRVdGY4Lmxlbmd0aCgpKTsKICAgICBhdXRv
IGhhc2ggPSBjcnlwdG8tPmNvbXB1dGVIYXNoKCk7Ci0gICAgcmV0dXJuIGJhc2U2NFVSTEVuY29k
ZVRvU3RyaW5nKGhhc2guZGF0YSgpLCBoYXNoLnNpemUoKSk7CisgICAgcmV0dXJuIGJhc2U2NFVS
TEVuY29kZVRvU3RyaW5nKGhhc2gpOwogfQogCiBTdHJpbmcgU1dTY3JpcHRTdG9yYWdlOjpzaGEy
SGFzaChjb25zdCBVUkwmIGlucHV0KSBjb25zdApAQCAtODYsOSArODYsOSBAQCBTY3JpcHRCdWZm
ZXIgU1dTY3JpcHRTdG9yYWdlOjpzdG9yZShjb25zCiAgICAgYXV0byBzY3JpcHRQYXRoID0gdGhp
cy0+c2NyaXB0UGF0aChyZWdpc3RyYXRpb25LZXksIHNjcmlwdFVSTCk7CiAgICAgRmlsZVN5c3Rl
bTo6bWFrZUFsbERpcmVjdG9yaWVzKEZpbGVTeXN0ZW06OnBhcmVudFBhdGgoc2NyaXB0UGF0aCkp
OwogCi0gICAgYXV0byBpdGVyYXRlT3ZlckJ1ZmZlckFuZFdyaXRlRGF0YSA9IFsmXShjb25zdCBG
dW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYgd3JpdGVEYXRhKSB7Ci0gICAg
ICAgIGZvciAoYXV0byBpdCA9IHNjcmlwdC5idWZmZXIoKS0+YmVnaW4oKTsgaXQgIT0gc2NyaXB0
LmJ1ZmZlcigpLT5lbmQoKTsgKytpdCkKLSAgICAgICAgICAgIHdyaXRlRGF0YShpdC0+c2VnbWVu
dC0+ZGF0YSgpLCBpdC0+c2VnbWVudC0+c2l6ZSgpKTsKKyAgICBhdXRvIGl0ZXJhdGVPdmVyQnVm
ZmVyQW5kV3JpdGVEYXRhID0gWyZdKGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6
OmJ5dGU+KT4mIHdyaXRlRGF0YSkgeworICAgICAgICBmb3IgKGF1dG8mIHNlZ21lbnRFbnRyeSA6
ICpzY3JpcHQuYnVmZmVyKCkpCisgICAgICAgICAgICB3cml0ZURhdGEoc2VnbWVudEVudHJ5LnNl
Z21lbnQtPmJ5dGVzKCkpOwogICAgIH07CiAKICAgICBpZiAoIXNob3VsZFVzZUZpbGVNYXBwaW5n
KHNjcmlwdC5idWZmZXIoKS0+c2l6ZSgpKSkgewpAQCAtOTcsOCArOTcsOCBAQCBTY3JpcHRCdWZm
ZXIgU1dTY3JpcHRTdG9yYWdlOjpzdG9yZShjb25zCiAgICAgICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihTZXJ2aWNlV29ya2VyLCAiU1dTY3JpcHRTdG9yYWdlOjpzdG9yZTogRmFpbHVyZSB0byBz
dG9yZSAlcywgRmlsZVN5c3RlbTo6b3BlbkZpbGUoKSBmYWlsZWQiLCBzY3JpcHRQYXRoLnV0Zjgo
KS5kYXRhKCkpOwogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgfQotICAgICAgICBp
dGVyYXRlT3ZlckJ1ZmZlckFuZFdyaXRlRGF0YShbJl0oY29uc3QgdWludDhfdCogZGF0YSwgc2l6
ZV90IHNpemUpIHsKLSAgICAgICAgICAgIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKGhhbmRsZSwg
ZGF0YSwgc2l6ZSk7CisgICAgICAgIGl0ZXJhdGVPdmVyQnVmZmVyQW5kV3JpdGVEYXRhKFsmXShT
cGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkgeworICAgICAgICAgICAgRmlsZVN5c3RlbTo6d3Jp
dGVUb0ZpbGUoaGFuZGxlLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0pOwogICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUo
aGFuZGxlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgxIEBACisyMDIxLTA2LTExICBT
YW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBBZG9wdCBTcGFuIGluIG1v
cmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjY4ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBbV0lQXQorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5n
aW5lQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjplbmNv
ZGUpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpkZWNvZGVSZWNvcmRI
ZWFkZXIpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2lu
ZUNhY2hlcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpzdG9y
ZU9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpyZWFkT3Jp
Z2luKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjplbmNvZGVDYWNoZU5hbWVzKToK
KyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpkZWNvZGVDYWNoZXNOYW1lcyk6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHA6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YTo6bWFwVG9GaWxlIGNvbnN0KToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0NhY2hlOjpjb21wdXRlU0hBMSk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FjaGU6OkRhdGE6OkRhdGEpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZURhdGFDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRh
OjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YTo6YWRv
cHRNYXApOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpFbnRyeTo6ZW5jb2RlQXNTdG9y
YWdlUmVjb3JkIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpFbnRyeTo6
ZGVjb2RlU3RvcmFnZVJlY29yZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlS2V5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpoYXNoU3Ry
aW5nKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpLZXk6OmNvbXB1dGVIYXNoIGNv
bnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpLZXk6OmNvbXB1dGVQYXJ0aXRp
b25IYXNoIGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpkZWNvZGVSZWNv
cmRNZXRhRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6ZW5jb2RlUmVjb3Jk
TWV0YURhdGEpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1
YnJlc291cmNlc0VudHJ5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdWJy
ZXNvdXJjZXNFbnRyeTo6ZW5jb2RlQXNTdG9yYWdlUmVjb3JkIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhY2hlOjpTdWJyZXNvdXJjZXNFbnRyeTo6ZGVjb2RlU3RvcmFnZVJlY29y
ZCk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXIuaDoKKyAgICAgICAgKiBQ
bGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoSVBDOjpBcmd1bWVudENv
ZGVyPENTdHJpbmc+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPENTdHJp
bmc+OjpkZWNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFN0cmluZz46OmVuY29k
ZSk6CisgICAgICAgIChJUEM6OmRlY29kZVN0cmluZ1RleHQpOgorICAgICAgICAoSVBDOjpBcmd1
bWVudENvZGVyPFNIQTE6OkRpZ2VzdD46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50
Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvQXJn
dW1lbnRDb2RlcnMuaDoKKyAgICAgICAgKElQQzo6U2ltcGxlQXJndW1lbnRDb2Rlcjo6ZW5jb2Rl
KToKKyAgICAgICAgKElQQzo6U2ltcGxlQXJndW1lbnRDb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAg
KiBQbGF0Zm9ybS9JUEMvQXJyYXlSZWZlcmVuY2UuaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMv
RGVjb2Rlci5jcHA6CisgICAgICAgIChJUEM6OkRlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0
YSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0RlY29kZXIuaDoKKyAgICAgICAgKElQQzo6RGVj
b2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvRW5j
b2Rlci5jcHA6CisgICAgICAgIChJUEM6OkVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YSk6
CisgICAgICAgICogUGxhdGZvcm0vSVBDL0VuY29kZXIuaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9J
UEMvU2hhcmVkQnVmZmVyQ29weS5jcHA6CisgICAgICAgIChJUEM6OlNoYXJlZEJ1ZmZlckNvcHk6
OmVuY29kZSBjb25zdCk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25F
bmNvZGVyLmg6CisgICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHA6Cisg
ICAgICAgIChJUEM6OmVuY29kZVNoYXJlZEJ1ZmZlcik6CisgICAgICAgIChJUEM6OmRlY29kZVNo
YXJlZEJ1ZmZlcik6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RT
dG9yZS5jcHA6CisgICAgICAgIChBUEk6OmVuY29kZUNvbnRlbnRSdWxlTGlzdE1ldGFEYXRhKToK
KyAgICAgICAgKEFQSTo6Z2V0RGF0YSk6CisgICAgICAgIChBUEk6OmRlY29kZUNvbnRlbnRSdWxl
TGlzdE1ldGFEYXRhKToKKyAgICAgICAgKEFQSTo6d3JpdGVEYXRhVG9GaWxlKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvbWFjL0xlZ2FjeVNlc3Npb25TdGF0ZUNvZGluZy5jcHA6CisgICAgICAgIChX
ZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFFbmNvZGVyOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdl
YktpdDo6SGlzdG9yeUVudHJ5RGF0YUVuY29kZXI6OmVuY29kZUFyaXRobWV0aWNUeXBlKToKKyAg
ICAgICAgKFdlYktpdDo6SGlzdG9yeUVudHJ5RGF0YUVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3Ro
RGF0YSk6CisgICAgICAgIChXZWJLaXQ6Okhpc3RvcnlFbnRyeURhdGFEZWNvZGVyOjpvcGVyYXRv
cj4+KToKKyAgICAgICAgKFdlYktpdDo6SGlzdG9yeUVudHJ5RGF0YURlY29kZXI6OmRlY29kZUFy
aXRobWV0aWNUeXBlKToKKyAgICAgICAgKFdlYktpdDo6SGlzdG9yeUVudHJ5RGF0YURlY29kZXI6
OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0lQ
Q1Rlc3RpbmdBUEkuY3BwOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjplbmNvZGVU
eXBlZEFycmF5KToKKwogMjAyMS0wNi0xMSAgUnlhbiBIYWRkYWQgIDxyeWFuaGFkZGFkQGFwcGxl
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI3ODc1NC4KSW5kZXg6IFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVD
bGlja01lYXN1cmVtZW50TWFuYWdlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzIzLDcgKzMyMyw3IEBAIHZvaWQgUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnRNYW5hZ2VyOjpmaXIKICAgICAgICAgY3J5cHRvLT5hZGRCeXRlcyhwdWJsaWNLZXlEYXRh
LT5kYXRhKCksIHB1YmxpY0tleURhdGEtPnNpemUoKSk7CiAgICAgICAgIGF1dG8gcHVibGljS2V5
RGF0YUhhc2ggPSBjcnlwdG8tPmNvbXB1dGVIYXNoKCk7CiAKLSAgICAgICAgYXV0byBrZXlJRCA9
IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKHB1YmxpY0tleURhdGFIYXNoLmRhdGEoKSwgcHVibGlj
S2V5RGF0YUhhc2guc2l6ZSgpKTsKKyAgICAgICAgYXV0byBrZXlJRCA9IGJhc2U2NFVSTEVuY29k
ZVRvU3RyaW5nKHB1YmxpY0tleURhdGFIYXNoKTsKICAgICAgICAgaWYgKGtleUlEICE9IGF0dHJp
YnV0aW9uLnNvdXJjZVVubGlua2FibGVUb2tlbigpLT5rZXlJREJhc2U2NFVSTCkKICAgICAgICAg
ICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9D
YWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAJKHJldmlzaW9u
IDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9y
YWdlRW5naW5lQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjUsNyArNTY1LDcgQEAgU3Rv
cmFnZTo6UmVjb3JkIENhY2hlOjplbmNvZGUoY29uc3QgUmVjbwogCiAgICAgZW5jb2Rlci5lbmNv
ZGVDaGVja3N1bSgpOwogCi0gICAgRGF0YSBoZWFkZXIoZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rl
ci5idWZmZXJTaXplKCkpOworICAgIERhdGEgaGVhZGVyKGVuY29kZXIuYnVmZmVyKCkpOwogICAg
IERhdGEgYm9keTsKICAgICBXVEY6OnN3aXRjaE9uKHJlY29yZC5yZXNwb25zZUJvZHksIFtdKGNv
bnN0IFJlZjxXZWJDb3JlOjpGb3JtRGF0YT4mIGZvcm1EYXRhKSB7CiAgICAgICAgIC8vIEZJWE1F
OiBTdG9yZSBmb3JtIGRhdGEgYm9keS4KQEAgLTYyOCw5ICs2MjgsOSBAQCBzdGF0aWMgc3RkOjpv
cHRpb25hbDxXZWJDb3JlOjpET01DYWNoZUVuCiAgICAgfX07CiB9CiAKLXN0ZDo6b3B0aW9uYWw8
Q2FjaGU6OkRlY29kZWRSZWNvcmQ+IENhY2hlOjpkZWNvZGVSZWNvcmRIZWFkZXIoY29uc3QgU3Rv
cmFnZTo6UmVjb3JkJiBzdG9yYWdlKQorc3RkOjpvcHRpb25hbDxDYWNoZTo6RGVjb2RlZFJlY29y
ZD4gQ2FjaGU6OmRlY29kZVJlY29yZEhlYWRlcihjb25zdCBTdG9yYWdlOjpSZWNvcmQmIHN0b3Jh
Z2VFbnRyeSkKIHsKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoc3RvcmFn
ZS5oZWFkZXIuZGF0YSgpLCBzdG9yYWdlLmhlYWRlci5zaXplKCkpOworICAgIFdURjo6UGVyc2lz
dGVuY2U6OkRlY29kZXIgZGVjb2RlciB7IHN0b3JhZ2VFbnRyeS5oZWFkZXIgfTsKIAogICAgIHN0
ZDo6b3B0aW9uYWw8ZG91YmxlPiBpbnNlcnRpb25UaW1lOwogICAgIGRlY29kZXIgPj4gaW5zZXJ0
aW9uVGltZTsKQEAgLTY1MywxNSArNjUzLDE1IEBAIHN0ZDo6b3B0aW9uYWw8Q2FjaGU6OkRlY29k
ZWRSZWNvcmQ+IENhY2gKICAgICB9fTsKIH0KIAotc3RkOjpvcHRpb25hbDxSZWNvcmQ+IENhY2hl
OjpkZWNvZGUoY29uc3QgU3RvcmFnZTo6UmVjb3JkJiBzdG9yYWdlKQorc3RkOjpvcHRpb25hbDxS
ZWNvcmQ+IENhY2hlOjpkZWNvZGUoY29uc3QgU3RvcmFnZTo6UmVjb3JkJiBzdG9yYWdlRW50cnkp
CiB7Ci0gICAgYXV0byByZXN1bHQgPSBkZWNvZGVSZWNvcmRIZWFkZXIoc3RvcmFnZSk7CisgICAg
YXV0byByZXN1bHQgPSBkZWNvZGVSZWNvcmRIZWFkZXIoc3RvcmFnZUVudHJ5KTsKIAogICAgIGlm
ICghcmVzdWx0KQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgYXV0byByZWNv
cmQgPSBXVEZNb3ZlKHJlc3VsdC0+cmVjb3JkKTsKLSAgICByZWNvcmQucmVzcG9uc2VCb2R5ID0g
V2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUoc3RvcmFnZS5ib2R5LmRhdGEoKSwgc3RvcmFn
ZS5ib2R5LnNpemUoKSk7CisgICAgcmVjb3JkLnJlc3BvbnNlQm9keSA9IFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlcjo6Y3JlYXRlKHN0b3JhZ2VFbnRyeS5ib2R5KTsKIAogICAgIHJldHVybiByZWNvcmQ7
CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFn
ZUVuZ2luZUNhY2hlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCShyZXZpc2lvbiAyNzg4MDkp
CisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2lu
ZUNhY2hlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSwxNCArMTA1LDE0IEBAIHZvaWQgQ2Fj
aGVzOjpzdG9yZU9yaWdpbihDb21wbGV0aW9uQ2FsbGIKICAgICBlbmNvZGVyIDw8IG1fb3JpZ2lu
LmNsaWVudE9yaWdpbi5wcm90b2NvbDsKICAgICBlbmNvZGVyIDw8IG1fb3JpZ2luLmNsaWVudE9y
aWdpbi5ob3N0OwogICAgIGVuY29kZXIgPDwgbV9vcmlnaW4uY2xpZW50T3JpZ2luLnBvcnQ7Ci0g
ICAgbV9lbmdpbmUtPndyaXRlRmlsZShjYWNoZXNPcmlnaW5GaWxlbmFtZShtX3Jvb3RQYXRoKSwg
RGF0YSB7IGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpIH0sIFtwcm90ZWN0
ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildIChzdGQ6Om9wdGlvbmFsPEVycm9yPiYmIGVycm9yKSBtdXRhYmxlIHsK
KyAgICBtX2VuZ2luZS0+d3JpdGVGaWxlKGNhY2hlc09yaWdpbkZpbGVuYW1lKG1fcm9vdFBhdGgp
LCBEYXRhIHsgZW5jb2Rlci5idWZmZXIoKSB9LCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoc3Rk
OjpvcHRpb25hbDxFcnJvcj4mJiBlcnJvcikgbXV0YWJsZSB7CiAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKFdURk1vdmUoZXJyb3IpKTsKICAgICB9KTsKIH0KIAogc3RkOjpvcHRpb25hbDxXZWJD
b3JlOjpDbGllbnRPcmlnaW4+IENhY2hlczo6cmVhZE9yaWdpbihjb25zdCBEYXRhJiBkYXRhKQog
ewotICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihkYXRhLmRhdGEoKSwgZGF0
YS5zaXplKCkpOworICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlciB7IGRhdGEg
fTsKIAogICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiB0b3BP
cmlnaW47CiAgICAgZGVjb2RlciA+PiB0b3BPcmlnaW47CkBAIC00MDQsMTIgKzQwNCwxMyBAQCBz
dGF0aWMgaW5saW5lIERhdGEgZW5jb2RlQ2FjaGVOYW1lcyhjb25zCiAgICAgICAgIGVuY29kZXIg
PDwgY2FjaGUudW5pcXVlTmFtZSgpOwogICAgIH0KIAotICAgIHJldHVybiBEYXRhIHsgZW5jb2Rl
ci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkgfTsKKyAgICByZXR1cm4gRGF0YSB7IGVu
Y29kZXIuYnVmZmVyKCkgfTsKIH0KIAogc3RhdGljIGlubGluZSBFeHBlY3RlZDxWZWN0b3I8c3Rk
OjpwYWlyPFN0cmluZywgU3RyaW5nPj4sIEVycm9yPiBkZWNvZGVDYWNoZXNOYW1lcyhjb25zdCBE
YXRhJiBkYXRhKQogewotICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihkYXRh
LmRhdGEoKSwgZGF0YS5zaXplKCkpOworICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVj
b2RlciB7IGRhdGEgfTsKKwogICAgIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGNvdW50OwogICAg
IGRlY29kZXIgPj4gY291bnQ7CiAgICAgaWYgKCFjb3VudCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcAko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBuYW1l
c3BhY2UgTmV0d29ya0NhY2hlIHsKIERhdGEgRGF0YTo6bWFwVG9GaWxlKGNvbnN0IFN0cmluZyYg
cGF0aCkgY29uc3QKIHsKICAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxl
OwotICAgIGF1dG8gYXBwbHlEYXRhID0gWyZdKGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWlu
dDhfdCosIHNpemVfdCk+JiBhcHBsaWVyKSB7IGFwcGx5KGFwcGxpZXIpOyB9OworICAgIGF1dG8g
YXBwbHlEYXRhID0gWyZdKGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+
KT4mIGFwcGxpZXIpIHsgYXBwbHkoYXBwbGllcik7IH07CiAgICAgYXV0byBtYXBwZWRGaWxlID0g
RmlsZVN5c3RlbTo6bWFwVG9GaWxlKHBhdGgsIHNpemUoKSwgV1RGTW92ZShhcHBseURhdGEpLCAm
aGFuZGxlKTsKICAgICBpZiAoIW1hcHBlZEZpbGUpCiAgICAgICAgIHJldHVybiB7IH07CkBAIC04
Niw5ICs4Niw5IEBAIERhdGEgYWRvcHRBbmRNYXBGaWxlKEZpbGVTeXN0ZW06OlBsYXRmb3IKIFNI
QTE6OkRpZ2VzdCBjb21wdXRlU0hBMShjb25zdCBEYXRhJiBkYXRhLCBjb25zdCBTYWx0JiBzYWx0
KQogewogICAgIFNIQTEgc2hhMTsKLSAgICBzaGExLmFkZEJ5dGVzKHNhbHQuZGF0YSgpLCBzYWx0
LnNpemUoKSk7Ci0gICAgZGF0YS5hcHBseShbJnNoYTFdKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNp
emVfdCBzaXplKSB7Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMoZGF0YSwgc2l6ZSk7CisgICAgc2hh
MS5hZGRCeXRlcyhzYWx0KTsKKyAgICBkYXRhLmFwcGx5KFsmc2hhMV0oU3Bhbjxjb25zdCBzdGQ6
OmJ5dGU+IGRhdGEpIHsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhkYXRhKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVt
Lmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPHd0Zi9T
SEExLmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJl
ZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNTIsOCAr
NTMsMTQgQEAgbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAKIGNsYXNzIERhdGEgewogcHVibGlj
OgorICAgIHVzaW5nIHZhbHVlX3R5cGUgPSB1aW50OF90OworCiAgICAgRGF0YSgpIHsgfQogICAg
IERhdGEoY29uc3QgdWludDhfdCosIHNpemVfdCk7CisgICAgRGF0YShTcGFuPGNvbnN0IHN0ZDo6
Ynl0ZT4gZGF0YSkKKyAgICAgICAgOiBEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGRhdGEuZGF0YSgpKSwgZGF0YS5zaXplKCkpCisgICAgeworICAgIH0KIAogICAgIH5EYXRh
KCkgeyB9CiAKQEAgLTc0LDEyICs4MSwxMyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCB1aW50OF90
KiBkYXRhKCkgY29uc3Q7CiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7
IH0KKwogICAgIGJvb2wgaXNNYXAoKSBjb25zdCB7IHJldHVybiBtX2lzTWFwOyB9CiAgICAgUmVm
UHRyPFNoYXJlZE1lbW9yeT4gdHJ5Q3JlYXRlU2hhcmVkTWVtb3J5KCkgY29uc3Q7CiAKICAgICBE
YXRhIHN1YnJhbmdlKHNpemVfdCBvZmZzZXQsIHNpemVfdCkgY29uc3Q7CiAKLSAgICBib29sIGFw
cGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2wgKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYpIGNvbnN0
OworICAgIGJvb2wgYXBwbHkoY29uc3QgRnVuY3Rpb248Ym9vbCAoU3Bhbjxjb25zdCBzdGQ6OmJ5
dGU+KT4mKSBjb25zdDsKIAogICAgIERhdGEgbWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkg
Y29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlRGF0YUNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1tCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2Nv
YS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjksMTIgKzY5LDEyIEBAIGJvb2wgRGF0YTo6aXNOdWxs
KCkgY29uc3QKICAgICByZXR1cm4gIW1fZGlzcGF0Y2hEYXRhOwogfQogCi1ib29sIERhdGE6OmFw
cGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2wgKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYgYXBwbGll
cikgY29uc3QKK2Jvb2wgRGF0YTo6YXBwbHkoY29uc3QgRnVuY3Rpb248Ym9vbCAoU3Bhbjxjb25z
dCBzdGQ6OmJ5dGU+KT4mIGFwcGxpZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3NpemUpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gZGlzcGF0Y2hfZGF0YV9hcHBseShtX2Rpc3Bh
dGNoRGF0YS5nZXQoKSwgWyZhcHBsaWVyXShkaXNwYXRjaF9kYXRhX3QsIHNpemVfdCwgY29uc3Qg
dm9pZCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgcmV0dXJuIGFwcGxpZXIoc3RhdGlj
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBzaXplKTsKKyAgICAgICAgcmV0dXJuIGFwcGxp
ZXIoU3BhbiB7IHN0YXRpY19jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGRhdGEpLCBzaXplIH0pOwog
ICAgIH0pOwogfQogCkBAIC05NCwxNCArOTQsMTEgQEAgRGF0YSBjb25jYXRlbmF0ZShjb25zdCBE
YXRhJiBhLCBjb25zdCBEYQogCiBEYXRhIERhdGE6OmFkb3B0TWFwKEZpbGVTeXN0ZW06Ok1hcHBl
ZEZpbGVEYXRhJiYgbWFwcGVkRmlsZSwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZk
KQogewotICAgIHNpemVfdCBzaXplID0gbWFwcGVkRmlsZS5zaXplKCk7Ci0gICAgdm9pZCogbWFw
ID0gbWFwcGVkRmlsZS5sZWFrSGFuZGxlKCk7Ci0gICAgQVNTRVJUKG1hcCk7Ci0gICAgQVNTRVJU
KG1hcCAhPSBNQVBfRkFJTEVEKTsKKyAgICBhdXRvIG1hcCA9IG1hcHBlZEZpbGUubGVha0hhbmRs
ZSgpOworICAgIEFTU0VSVChtYXAuZGF0YSgpKTsKKyAgICBBU1NFUlQobWFwLmRhdGEoKSAhPSBN
QVBfRkFJTEVEKTsKICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmQpOwotICAgIGF1dG8gYm9k
eU1hcCA9IGFkb3B0T1NPYmplY3QoZGlzcGF0Y2hfZGF0YV9jcmVhdGUobWFwLCBzaXplLCBkaXNw
YXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDAp
LCBbbWFwLCBzaXplXSB7Ci0gICAgICAgIG11bm1hcChtYXAsIHNpemUpOwotICAgIH0pKTsKKyAg
ICBhdXRvIGJvZHlNYXAgPSBhZG9wdE9TT2JqZWN0KGRpc3BhdGNoX2RhdGFfY3JlYXRlKG1hcC5k
YXRhKCksIG1hcC5zaXplKCksIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVF
VUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIERJU1BBVENIX0RBVEFfREVTVFJVQ1RPUl9NVU5NQVAp
KTsKICAgICByZXR1cm4geyBXVEZNb3ZlKGJvZHlNYXApLCBEYXRhOjpCYWNraW5nOjpNYXAgfTsK
IH0KIApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVEYXRhR0xpYi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhR0xpYi5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUdMaWIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MywxNCArNzMsMTQgQEAgYm9vbCBEYXRhOjppc051bGwoKSBj
b25zdAogICAgIHJldHVybiAhbV9idWZmZXI7CiB9CiAKLWJvb2wgRGF0YTo6YXBwbHkoY29uc3Qg
RnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIGFwcGxpZXIpIGNvbnN0Citi
b29sIERhdGE6OmFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+
KT4mIGFwcGxpZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3NpemUpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIGdzaXplIGxlbmd0aDsKICAgICBjb25zdCBhdXRvKiBkYXRhID0gZ19ieXRl
c19nZXRfZGF0YShtX2J1ZmZlci5nZXQoKSwgJmxlbmd0aCk7Ci0gICAgcmV0dXJuIGFwcGxpZXIo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSksIGxlbmd0aCk7CisgICAgcmV0
dXJuIGFwcGxpZXIoU3BhbiB7IHN0YXRpY19jYXN0PGNvbnN0IHN0ZDo6Ynl0ZSo+KGRhdGEpLCBs
ZW5ndGggfSk7CiB9CiAKIERhdGEgRGF0YTo6c3VicmFuZ2Uoc2l6ZV90IG9mZnNldCwgc2l6ZV90
IHNpemUpIGNvbnN0CkBAIC0xMTUsMTIgKzExNSwxMSBAQCBzdHJ1Y3QgTWFwV3JhcHBlciB7CiAK
ICAgICB+TWFwV3JhcHBlcigpCiAgICAgewotICAgICAgICBtdW5tYXAobWFwLCBzaXplKTsKKyAg
ICAgICAgRmlsZVN5c3RlbTo6dW5tYXBWaWV3T2ZGaWxlKG1hcCk7CiAgICAgICAgIEZpbGVTeXN0
ZW06OmNsb3NlRmlsZShmaWxlRGVzY3JpcHRvcik7CiAgICAgfQogCi0gICAgdm9pZCogbWFwOwot
ICAgIHNpemVfdCBzaXplOworICAgIFNwYW48c3RkOjpieXRlPiBtYXA7CiAgICAgRmlsZVN5c3Rl
bTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZpbGVEZXNjcmlwdG9yOwogfTsKIApAQCAtMTMxLDEyICsx
MzAsMTEgQEAgc3RhdGljIHZvaWQgZGVsZXRlTWFwV3JhcHBlcihNYXBXcmFwcGVyKgogCiBEYXRh
IERhdGE6OmFkb3B0TWFwKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYgbWFwcGVkRmlsZSwg
RmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkKQogewotICAgIHNpemVfdCBzaXplID0g
bWFwcGVkRmlsZS5zaXplKCk7Ci0gICAgdm9pZCogbWFwID0gbWFwcGVkRmlsZS5sZWFrSGFuZGxl
KCk7Ci0gICAgQVNTRVJUKG1hcCk7Ci0gICAgQVNTRVJUKG1hcCAhPSBNQVBfRkFJTEVEKTsKLSAg
ICBNYXBXcmFwcGVyKiB3cmFwcGVyID0gbmV3IE1hcFdyYXBwZXIgeyBtYXAsIHNpemUsIGZkIH07
Ci0gICAgcmV0dXJuIHsgYWRvcHRHUmVmKGdfYnl0ZXNfbmV3X3dpdGhfZnJlZV9mdW5jKG1hcCwg
c2l6ZSwgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oZGVsZXRlTWFwV3JhcHBlciks
IHdyYXBwZXIpKSwgZmQgfTsKKyAgICBhdXRvIG1hcCA9IG1hcHBlZEZpbGUubGVha0hhbmRsZSgp
OworICAgIEFTU0VSVChtYXAuZGF0YSgpKTsKKyAgICBBU1NFUlQobWFwLmRhdGEoKSAhPSBNQVBf
RkFJTEVEKTsKKyAgICBNYXBXcmFwcGVyKiB3cmFwcGVyID0gbmV3IE1hcFdyYXBwZXIgeyBtYXAs
IGZkIH07CisgICAgcmV0dXJuIHsgYWRvcHRHUmVmKGdfYnl0ZXNfbmV3X3dpdGhfZnJlZV9mdW5j
KG1hcC5kYXRhKCksIG1hcC5zaXplKCksIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+
KGRlbGV0ZU1hcFdyYXBwZXIpLCB3cmFwcGVyKSksIGZkIH07CiB9CiAKIFJlZlB0cjxTaGFyZWRN
ZW1vcnk+IERhdGE6OnRyeUNyZWF0ZVNoYXJlZE1lbW9yeSgpIGNvbnN0CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVu
dHJ5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDEwICs5
OSwxMCBAQCBTdG9yYWdlOjpSZWNvcmQgRW50cnk6OmVuY29kZUFzU3RvcmFnZVJlCiAgICAgCiAg
ICAgZW5jb2Rlci5lbmNvZGVDaGVja3N1bSgpOwogCi0gICAgRGF0YSBoZWFkZXIoZW5jb2Rlci5i
dWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOworICAgIERhdGEgaGVhZGVyIHsgZW5jb2Rl
ci5idWZmZXIoKSB9OwogICAgIERhdGEgYm9keTsKICAgICBpZiAobV9idWZmZXIpCi0gICAgICAg
IGJvZHkgPSB7IG1fYnVmZmVyLT5kYXRhKCksIG1fYnVmZmVyLT5zaXplKCkgfTsKKyAgICAgICAg
Ym9keSA9IHsgbV9idWZmZXItPmJ5dGVzKCkgfTsKIAogICAgIHJldHVybiB7IG1fa2V5LCBtX3Rp
bWVTdGFtcCwgaGVhZGVyLCBib2R5LCB7IH0gfTsKIH0KQEAgLTExMSw3ICsxMTEsNyBAQCBzdGQ6
OnVuaXF1ZV9wdHI8RW50cnk+IEVudHJ5OjpkZWNvZGVTdG9yCiB7CiAgICAgYXV0byBlbnRyeSA9
IG1ha2VVbmlxdWU8RW50cnk+KHN0b3JhZ2VFbnRyeSk7CiAKLSAgICBXVEY6OlBlcnNpc3RlbmNl
OjpEZWNvZGVyIGRlY29kZXIoc3RvcmFnZUVudHJ5LmhlYWRlci5kYXRhKCksIHN0b3JhZ2VFbnRy
eS5oZWFkZXIuc2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIg
eyBzdG9yYWdlRW50cnkuaGVhZGVyIH07CiAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSBy
ZXNwb25zZTsKICAgICBpZiAoIVdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2U6OmRlY29kZShkZWNv
ZGVyLCByZXNwb25zZSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTkxLDcgKzE5MSw3
IEBAIHZvaWQgRW50cnk6OmluaXRpYWxpemVCdWZmZXJGcm9tU3RvcmFnZVIKICAgICAgICAgICAg
IHJldHVybjsKICAgICB9CiAjZW5kaWYKLSAgICBtX2J1ZmZlciA9IFdlYkNvcmU6OlNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKG1fc291cmNlU3RvcmFnZVJlY29yZC5ib2R5LmRhdGEoKSwgbV9zb3VyY2VT
dG9yYWdlUmVjb3JkLmJvZHkuc2l6ZSgpKTsKKyAgICBtX2J1ZmZlciA9IFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlcjo6Y3JlYXRlKG1fc291cmNlU3RvcmFnZVJlY29yZC5ib2R5KTsKIH0KIAogV2ViQ29y
ZTo6U2hhcmVkQnVmZmVyKiBFbnRyeTo6YnVmZmVyKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5jcHAJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlS2V5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTMgKzg4LDEzIEBAIHN0
YXRpYyB2b2lkIGhhc2hTdHJpbmcoU0hBMSYgc2hhMSwgY29uc3QKIAogICAgIGlmIChzdHJpbmcu
aXM4Qml0KCkgJiYgc3RyaW5nLmlzQWxsQVNDSUkoKSkgewogICAgICAgICBjb25zdCB1aW50OF90
IG51bGxCeXRlID0gMDsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhzdHJpbmcuY2hhcmFjdGVyczgo
KSwgc3RyaW5nLmxlbmd0aCgpKTsKLSAgICAgICAgc2hhMS5hZGRCeXRlcygmbnVsbEJ5dGUsIDEp
OworICAgICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyBzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3Ry
aW5nLmxlbmd0aCgpIH0pOworICAgICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyAmbnVsbEJ5dGUs
IDEgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byBjU3RyaW5nID0gc3RyaW5n
LnV0ZjgoKTsKICAgICAvLyBJbmNsdWRlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4KLSAgICBzaGEx
LmFkZEJ5dGVzKGNTdHJpbmcuZGF0YUFzVUludDhQdHIoKSwgY1N0cmluZy5sZW5ndGgoKSArIDEp
OworICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IGNTdHJpbmcuZGF0YUFzVUludDhQdHIoKSwgY1N0
cmluZy5sZW5ndGgoKSArIDEgfSk7CiB9CiAKIEtleTo6SGFzaFR5cGUgS2V5Ojpjb21wdXRlSGFz
aChjb25zdCBTYWx0JiBzYWx0KSBjb25zdApAQCAtMTAyLDcgKzEwMiw3IEBAIEtleTo6SGFzaFR5
cGUgS2V5Ojpjb21wdXRlSGFzaChjb25zdCBTYWwKICAgICAvLyBXZSBkb24ndCByZWFsbHkgbmVl
ZCBhIGNyeXB0b2dyYXBoaWMgaGFzaC4gVGhlIGtleSBpcyBhbHdheXMgdmVyaWZpZWQgYWdhaW5z
dCB0aGUgZW50cnkgaGVhZGVyLgogICAgIC8vIFNIQTEganVzdCBoYXBwZW5zIHRvIGJlIHN1aXRh
Ymx5IHNpemVkLCBmYXN0IGFuZCBhdmFpbGFibGUuCiAgICAgU0hBMSBzaGExOwotICAgIHNoYTEu
YWRkQnl0ZXMoc2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKTsKKyAgICBzaGExLmFkZEJ5dGVzKHNh
bHQpOwogCiAgICAgaGFzaFN0cmluZyhzaGExLCBtX3BhcnRpdGlvbik7CiAgICAgaGFzaFN0cmlu
ZyhzaGExLCBtX3R5cGUpOwpAQCAtMTE3LDcgKzExNyw3IEBAIEtleTo6SGFzaFR5cGUgS2V5Ojpj
b21wdXRlSGFzaChjb25zdCBTYWwKIEtleTo6SGFzaFR5cGUgS2V5Ojpjb21wdXRlUGFydGl0aW9u
SGFzaChjb25zdCBTYWx0JiBzYWx0KSBjb25zdAogewogICAgIFNIQTEgc2hhMTsKLSAgICBzaGEx
LmFkZEJ5dGVzKHNhbHQuZGF0YSgpLCBzYWx0LnNpemUoKSk7CisgICAgc2hhMS5hZGRCeXRlcyhz
YWx0KTsKIAogICAgIGhhc2hTdHJpbmcoc2hhMSwgbV9wYXJ0aXRpb24pOwogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlU3RvcmFnZS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ1NCw4ICs0NTQsOCBAQCBzdHJ1Y3QgUmVjb3JkTWV0YURhdGEgewogc3RhdGljIFdBUk5fVU5V
U0VEX1JFVFVSTiBib29sIGRlY29kZVJlY29yZE1ldGFEYXRhKFJlY29yZE1ldGFEYXRhJiBtZXRh
RGF0YSwgY29uc3QgRGF0YSYgZmlsZURhdGEpCiB7CiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7
Ci0gICAgZmlsZURhdGEuYXBwbHkoWyZtZXRhRGF0YSwgJnN1Y2Nlc3NdKGNvbnN0IHVpbnQ4X3Qq
IGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIg
ZGVjb2RlcihkYXRhLCBzaXplKTsKKyAgICBmaWxlRGF0YS5hcHBseShbJm1ldGFEYXRhLCAmc3Vj
Y2Vzc10oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpIHsKKyAgICAgICAgV1RGOjpQZXJzaXN0
ZW5jZTo6RGVjb2RlciBkZWNvZGVyIHsgZGF0YSB9OwogICAgICAgICAKICAgICAgICAgc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4gY2FjaGVTdG9yYWdlVmVyc2lvbjsKICAgICAgICAgZGVjb2RlciA+
PiBjYWNoZVN0b3JhZ2VWZXJzaW9uOwpAQCAtNTg2LDcgKzU4Niw3IEBAIHN0YXRpYyBEYXRhIGVu
Y29kZVJlY29yZE1ldGFEYXRhKGNvbnN0IFIKIAogICAgIGVuY29kZXIuZW5jb2RlQ2hlY2tzdW0o
KTsKIAotICAgIHJldHVybiBEYXRhKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6
ZSgpKTsKKyAgICByZXR1cm4geyBlbmNvZGVyLmJ1ZmZlcigpIH07CiB9CiAKIHN0ZDo6b3B0aW9u
YWw8QmxvYlN0b3JhZ2U6OkJsb2I+IFN0b3JhZ2U6OnN0b3JlQm9keUFzQmxvYihXcml0ZU9wZXJh
dGlvbiYgd3JpdGVPcGVyYXRpb24pCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNl
c0VudHJ5LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyMywxNCArMTIzLDE0IEBAIFN0b3JhZ2U6OlJlY29yZCBTdWJyZXNvdXJjZXNFbnRy
eTo6ZW5jb2QKIAogICAgIGVuY29kZXIuZW5jb2RlQ2hlY2tzdW0oKTsKIAotICAgIHJldHVybiB7
IG1fa2V5LCBtX3RpbWVTdGFtcCwgeyBlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNp
emUoKSB9LCB7IH0sIHsgfX07CisgICAgcmV0dXJuIHsgbV9rZXksIG1fdGltZVN0YW1wLCB7IGVu
Y29kZXIuYnVmZmVyKCkgfSwgeyB9LCB7IH19OwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8U3VicmVz
b3VyY2VzRW50cnk+IFN1YnJlc291cmNlc0VudHJ5OjpkZWNvZGVTdG9yYWdlUmVjb3JkKGNvbnN0
IFN0b3JhZ2U6OlJlY29yZCYgc3RvcmFnZUVudHJ5KQogewogICAgIGF1dG8gZW50cnkgPSBtYWtl
VW5pcXVlPFN1YnJlc291cmNlc0VudHJ5PihzdG9yYWdlRW50cnkpOwogCi0gICAgV1RGOjpQZXJz
aXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKHN0b3JhZ2VFbnRyeS5oZWFkZXIuZGF0YSgpLCBzdG9y
YWdlRW50cnkuaGVhZGVyLnNpemUoKSk7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBk
ZWNvZGVyIHsgc3RvcmFnZUVudHJ5LmhlYWRlciB9OwogICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9y
PFN1YnJlc291cmNlSW5mbz4+IHN1YnJlc291cmNlczsKICAgICBkZWNvZGVyID4+IHN1YnJlc291
cmNlczsKICAgICBpZiAoIXN1YnJlc291cmNlcykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vSVBDL0FyZ3VtZW50Q29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9Bcmd1bWVudENvZGVyLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzksMTMg
Kzc5LDEzIEBAIHN0cnVjdCBBcmd1bWVudENvZGVyPFQsIHR5cGVuYW1lIHN0ZDo6ZW4KICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBUIHZhbHVlKQogICAgIHsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oJnZhbHVlKSwgc2l6ZW9m
KFQpLCBhbGlnbm9mKFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEo
U3BhbiB7ICZ2YWx1ZSwgMSB9KTsKICAgICB9CiAKICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxU
PiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7CiAgICAgICAgIFQgcmVzdWx0OwotICAg
ICAgICBpZiAoZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4oJnJlc3VsdCksIHNpemVvZihUKSwgYWxpZ25vZihUKSkpCisgICAgICAgIGlmIChk
ZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuIHsgJnJlc3VsdCwgMSB9KSkKICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAg
fQpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmNw
cAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1l
bnRDb2RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgQXJndW1l
bnRDb2RlcjxDU3RyaW5nPjo6ZW5jb2RlKEVuY28KIAogICAgIHVpbnQzMl90IGxlbmd0aCA9IHN0
cmluZy5sZW5ndGgoKTsKICAgICBlbmNvZGVyIDw8IGxlbmd0aDsKLSAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShzdHJpbmcuZGF0YUFzVUludDhQdHIoKSwgbGVuZ3RoLCAxKTsKKyAg
ICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShzdHJpbmcuYnl0ZXMoKSk7CiB9CiAKIFdB
Uk5fVU5VU0VEX1JFVFVSTiBib29sIEFyZ3VtZW50Q29kZXI8Q1N0cmluZz46OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyLCBDU3RyaW5nJiByZXN1bHQpCkBAIC0xMDMsNyArMTAzLDcgQEAgV0FSTl9V
TlVTRURfUkVUVVJOIGJvb2wgQXJndW1lbnRDb2RlcjxDUwogCiAgICAgY2hhciogYnVmZmVyOwog
ICAgIENTdHJpbmcgc3RyaW5nID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChsZW5ndGgsIGJ1
ZmZlcik7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPihidWZmZXIpLCBsZW5ndGgsIDEpKQorICAgIGlmICghZGVjb2Rlci5k
ZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IGJ1ZmZlciwgbGVuZ3RoIH0pKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICByZXN1bHQgPSBzdHJpbmc7CkBAIC0xMjMsMTEgKzEyMyw3IEBA
IHZvaWQgQXJndW1lbnRDb2RlcjxTdHJpbmc+OjplbmNvZGUoRW5jb2QKICAgICBib29sIGlzOEJp
dCA9IHN0cmluZy5pczhCaXQoKTsKIAogICAgIGVuY29kZXIgPDwgbGVuZ3RoIDw8IGlzOEJpdDsK
LQotICAgIGlmIChpczhCaXQpCi0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBsZW5ndGggKiBzaXplb2YoTENoYXIpLCBhbGlnbm9mKExD
aGFyKSk7Ci0gICAgZWxzZQotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzdHJpbmcuY2hhcmFjdGVyczE2KCkpLCBs
ZW5ndGggKiBzaXplb2YoVUNoYXIpLCBhbGlnbm9mKFVDaGFyKSk7CisgICAgZW5jb2Rlci5lbmNv
ZGVGaXhlZExlbmd0aERhdGEoc3RyaW5nLmJ5dGVzKCkpOwogfQogdGVtcGxhdGUKIHZvaWQgQXJn
dW1lbnRDb2RlcjxTdHJpbmc+OjplbmNvZGU8RW5jb2Rlcj4oRW5jb2RlciYsIGNvbnN0IFN0cmlu
ZyYpOwpAQCAtMTQzLDcgKzEzOSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RkOjpvcHRpb25hbDxTdHJp
bmc+IGRlY28KICAgICAKICAgICBDaGFyYWN0ZXJUeXBlKiBidWZmZXI7CiAgICAgU3RyaW5nIHN0
cmluZyA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihidWZmZXIpLCBsZW5ndGggKiBzaXplb2YoQ2hhcmFjdGVyVHlwZSksIGFsaWdub2YoQ2hh
cmFjdGVyVHlwZSkpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3Bh
biB7IGJ1ZmZlciwgbGVuZ3RoIH0pKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAg
IAogICAgIHJldHVybiBzdHJpbmc7CkBAIC0xODEsMTIgKzE3NywxMiBAQCBXQVJOX1VOVVNFRF9S
RVRVUk4gYm9vbCBBcmd1bWVudENvZGVyPFN0CiAKIHZvaWQgQXJndW1lbnRDb2RlcjxTSEExOjpE
aWdlc3Q+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU0hBMTo6RGlnZXN0JiBkaWdl
c3QpCiB7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0LmRhdGEoKSwg
c2l6ZW9mKGRpZ2VzdCksIDEpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGRp
Z2VzdCk7CiB9CiAKIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIEFyZ3VtZW50Q29kZXI8U0hBMTo6
RGlnZXN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQog
ewotICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3QuZGF0YSgp
LCBzaXplb2YoZGlnZXN0KSwgMSk7CisgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5n
dGhEYXRhKGRpZ2VzdCk7CiB9CiAKICNpZiBIQVZFKEFVRElUX1RPS0VOKQpJbmRleDogU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oCShyZXZpc2lvbiAyNzg4MDkp
CisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NSwxMiArNDUsMTIgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFNp
bXBsZUFyZ3VtZQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+CiAgICAgc3RhdGljIHZv
aWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFQmIHQpCiAgICAgewotICAgICAgICBl
bmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPigmdCksIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKFNwYW4geyAmdCwgMSB9KTsKICAgICB9CiAKICAgICBzdGF0aWMgV0FS
Tl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFQmIHQpCiAgICAg
ewotICAgICAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oJnQpLCBzaXplb2YoVCksIGFsaWdub2YoVCkpOworICAgICAgICBy
ZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZ0LCAxIH0pOwogICAg
IH0KIH07CiAKQEAgLTYxLDEzICs2MSwxNCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
RXh0ZW50PiBzdHJ1CiAgICAgewogICAgICAgICBpZiAoIUV4dGVudCkKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50OF90Kj4oYXJyYXlSZWZlcmVuY2UuZGF0YSgpKSwgYXJyYXlSZWZlcmVu
Y2Uuc2l6ZSgpICogc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNv
ZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7IGFycmF5UmVmZXJlbmNlLmRhdGEoKSwgYXJyYXlSZWZl
cmVuY2Uuc2l6ZSgpIH0pOwogICAgIH0KICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxBcnJheVJl
ZmVyZW5jZVR5cGU+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKICAgICAgICAgaWYg
KCFFeHRlbnQpCiAgICAgICAgICAgICByZXR1cm4gQXJyYXlSZWZlcmVuY2VUeXBlKCk7Ci0gICAg
ICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEgPSBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoUmVmZXJl
bmNlKEV4dGVudCAqIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CisKKyAgICAgICAgY29uc3QgYXV0
byogZGF0YSA9IGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhSZWZlcmVuY2UoRXh0ZW50ICogc2l6
ZW9mKFQpLCBhbGlnbm9mKFQpKTsKICAgICAgICAgaWYgKCFkYXRhKQogICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAgICAgcmV0dXJuIEFycmF5UmVmZXJlbmNlVHlwZShyZWlu
dGVycHJldF9jYXN0PGNvbnN0IFQqPihkYXRhKSwgRXh0ZW50KTsKQEAgLTgyLDcgKzgzLDcgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEFyZ3VtZW50Q29kZQogICAgICAgICBlbmNvZGVy
IDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihhcnJheVJlZmVyZW5jZS5zaXplKCkpOwogICAgICAg
ICBpZiAoIWFycmF5UmVmZXJlbmNlLnNpemUoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50OF90Kj4oYXJyYXlSZWZlcmVuY2UuZGF0YSgpKSwgYXJyYXlSZWZlcmVuY2Uuc2l6ZSgpICog
c2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEoU3BhbiB7IGFycmF5UmVmZXJlbmNlLmRhdGEoKSwgYXJyYXlSZWZlcmVuY2Uuc2l6ZSgp
IH0pOwogICAgIH0KICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxBcnJheVJlZmVyZW5jZVR5cGU+
IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKQEAgLTk2LDcgKzk3LDcgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IEFyZ3VtZW50Q29kZQogICAgICAgICBpZiAoVU5MSUtFTFko
ZGF0YVNpemUuaGFzT3ZlcmZsb3dlZCgpKSkKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CiAKLSAgICAgICAgY29uc3QgdWludDhfdCogZGF0YSA9IGRlY29kZXIuZGVjb2RlRml4ZWRM
ZW5ndGhSZWZlcmVuY2UoZGF0YVNpemUsIGFsaWdub2YoVCkpOworICAgICAgICBjb25zdCBhdXRv
KiBkYXRhID0gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aFJlZmVyZW5jZShkYXRhU2l6ZSwgYWxp
Z25vZihUKSk7CiAgICAgICAgIGlmICghZGF0YSkKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CiAgICAgICAgIHJldHVybiBBcnJheVJlZmVyZW5jZVR5cGUocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBUKj4oZGF0YSksIHN0YXRpY19jYXN0PHNpemVfdD4oc2l6ZSkpOwpAQCAtNDIzLDcg
KzQyNCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICBz
dGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiYgdmVjdG9yKQogICAgIHsK
ICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odmVjdG9yLnNpemUoKSk7
Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6ZSgpICogc2l6ZW9mKFQp
LCBhbGlnbm9mKFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEodmVj
dG9yKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyLCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93
SGFuZGxlciwgbWluQ2FwYWNpdHk+JiB2ZWN0b3IpCkBAIC00NDYsNyArNDQ3LDcgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAgICAgICBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+IHRlbXA7CiAgICAgICAg
IHRlbXAuZ3JvdyhzaXplKTsKIAotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5n
dGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHRlbXAuZGF0YSgpKSwgc2l6ZSAqIHNp
emVvZihUKSwgYWxpZ25vZihUKSkpCisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExl
bmd0aERhdGEodGVtcCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgdmVj
dG9yLnN3YXAodGVtcCk7CkBAIC00NzMsNyArNDc0LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IGlubGluZUNhcGFjaQogICAgICAgICBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92
ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+IHZlY3RvcjsKICAgICAgICAgdmVjdG9yLmdyb3co
c2l6ZSk7CiAKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWlu
dGVycHJldF9jYXN0PHVpbnQ4X3QqPih2ZWN0b3IuZGF0YSgpKSwgc2l6ZSAqIHNpemVvZihUKSwg
YWxpZ25vZihUKSkpCisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEo
dmVjdG9yKSkKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKICAgICAgICAgcmV0
dXJuIHZlY3RvcjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FycmF5UmVmZXJl
bmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJyYXlSZWZl
cmVuY2UuaAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
QXJyYXlSZWZlcmVuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOCBAQAogCiBuYW1l
c3BhY2UgSVBDIHsKIAorLy8gRklYTUU6IFJlcGxhY2Ugd2l0aCA8d3RmL1NwYW4uaD4KKwogaW5s
aW5lIGNvbnN0ZXhwciBzaXplX3QgYXJyYXlSZWZlcmVuY2VEeW5hbWljRXh0ZW50ID0gc3RkOjpu
dW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNp
emVfdCBFeHRlbnQgPSBhcnJheVJlZmVyZW5jZUR5bmFtaWNFeHRlbnQ+CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiwx
MyArMjA2LDEzIEBAIGJvb2wgRGVjb2Rlcjo6YnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGEKICAg
ICByZXR1cm4gYWxpZ25lZEJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4ocm91bmRVcFRvQWxp
Z25tZW50KG1fYnVmZmVyUG9zLCBhbGlnbm1lbnQpLCBtX2J1ZmZlciwgbV9idWZmZXJFbmQsIHNp
emUpOwogfQogCi1ib29sIERlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSh1aW50OF90KiBk
YXRhLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVudCkKK2Jvb2wgRGVjb2Rlcjo6ZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKFNwYW48c3RkOjpieXRlPiBkYXRhLCBzaXplX3QgYWxpZ25tZW50KQog
ewotICAgIGlmICghYWxpZ25CdWZmZXJQb3NpdGlvbihhbGlnbm1lbnQsIHNpemUpKQorICAgIGlm
ICghYWxpZ25CdWZmZXJQb3NpdGlvbihhbGlnbm1lbnQsIGRhdGEuc2l6ZSgpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgbWVtY3B5KGRhdGEsIG1fYnVmZmVyUG9zLCBzaXplKTsKLSAg
ICBtX2J1ZmZlclBvcyArPSBzaXplOworICAgIG1lbWNweShkYXRhLmRhdGEoKSwgbV9idWZmZXJQ
b3MsIGRhdGEuc2l6ZSgpKTsKKyAgICBtX2J1ZmZlclBvcyArPSBkYXRhLnNpemUoKTsKIAogICAg
IHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuaAko
cmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSwxMyBAQCBwdWJsaWM6CiAgICAgV0FSTl9VTlVT
RURfUkVUVVJOIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyUG9zICE9IG51
bGxwdHI7IH0KICAgICB2b2lkIG1hcmtJbnZhbGlkKCkgeyBtX2J1ZmZlclBvcyA9IG51bGxwdHI7
IH0KIAotICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZUZpeGVkTGVuZ3RoRGF0YSh1
aW50OF90KiBkYXRhLCBzaXplX3QsIHNpemVfdCBhbGlnbm1lbnQpOworICAgIFdBUk5fVU5VU0VE
X1JFVFVSTiBib29sIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShTcGFuPHN0ZDo6Ynl0ZT4sIHNpemVf
dCBhbGlnbm1lbnQpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBXQVJOX1VOVVNF
RF9SRVRVUk4gYm9vbCBkZWNvZGVGaXhlZExlbmd0aERhdGEoVCYmIGRhdGEsIHNpemVfdCBhbGln
bm1lbnQgPSBhbGlnbm9mKHR5cGVuYW1lIGRlY2x0eXBlKFNwYW4oc3RkOjpkZWNsdmFsPFQ+KCkp
KTo6dmFsdWVfdHlwZSkpCisgICAgeworICAgICAgICByZXR1cm4gZGVjb2RlRml4ZWRMZW5ndGhE
YXRhKGFzV3JpdGFibGVCeXRlcyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pLCBhbGln
bm1lbnQpOworICAgIH0KIAogICAgIC8vIFRoZSBkYXRhIGluIHRoZSByZXR1cm5lZCBwb2ludGVy
IGhlcmUgd2lsbCBvbmx5IGJlIHZhbGlkIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIERlY29kZXIg
b2JqZWN0LgogICAgIC8vIFJldHVybnMgbnVsbHB0ciBvbiBmYWlsdXJlLgpJbmRleDogU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIs
MTIgKzIwMiwxMiBAQCB1aW50OF90KiBFbmNvZGVyOjpncm93KHNpemVfdCBhbGlnbm1lbnQsCiAg
ICAgcmV0dXJuIG1fYnVmZmVyICsgYWxpZ25lZFNpemU7CiB9CiAKLXZvaWQgRW5jb2Rlcjo6ZW5j
b2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBzaXpl
X3QgYWxpZ25tZW50KQordm9pZCBFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEoU3Bhbjxj
b25zdCBzdGQ6OmJ5dGU+IGRhdGEsIHNpemVfdCBhbGlnbm1lbnQpCiB7Ci0gICAgQVNTRVJUKCEo
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGRhdGEpICUgYWxpZ25tZW50KSk7CisgICAgQVNT
RVJUKCEocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGRhdGEuZGF0YSgpKSAlIGFsaWdubWVu
dCkpOwogCi0gICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhhbGlnbm1lbnQsIHNpemUpOwotICAg
IG1lbWNweShidWZmZXIsIGRhdGEsIHNpemUpOworICAgIGF1dG8qIGJ1ZmZlciA9IGdyb3coYWxp
Z25tZW50LCBkYXRhLnNpemUoKSk7CisgICAgbWVtY3B5KGJ1ZmZlciwgZGF0YS5kYXRhKCksIGRh
dGEuc2l6ZSgpKTsKIH0KIAogdm9pZCBFbmNvZGVyOjphZGRBdHRhY2htZW50KEF0dGFjaG1lbnQm
JiBhdHRhY2htZW50KQpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29kZXIuaAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRC
dWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25T
ZXQuaD4KKyNpbmNsdWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAog
bmFtZXNwYWNlIElQQyB7CkBAIC02MCw3ICs2MSwxMyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHdy
YXBGb3JUZXN0aW5nKFVuaXF1ZVJlZjxFbmNvZGVyPiYmKTsKIAotICAgIHZvaWQgZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCwgc2l6ZV90IGFsaWdubWVu
dCk7CisgICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+
IGRhdGEsIHNpemVfdCBhbGlnbm1lbnQpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAg
ICB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShUJiYgZGF0YSwgc2l6ZV90IGFsaWdubWVudCA9
IGFsaWdub2YodHlwZW5hbWUgZGVjbHR5cGUoU3BhbihzdGQ6OmRlY2x2YWw8VD4oKSkpOjp2YWx1
ZV90eXBlKSkKKyAgICB7CisgICAgICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShhc0J5dGVzKFNw
YW4geyBzdGQ6OmZvcndhcmQ8VD4oZGF0YSkgfSksIGFsaWdubWVudCk7CisgICAgfQogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBFbmNvZGVyJiBvcGVyYXRvcjw8KFQmJiB0KQpJbmRl
eDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU2hhcmVkQnVmZmVyQ29weS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU2hhcmVkQnVmZmVyQ29weS5jcHAJ
KHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1NoYXJlZEJ1
ZmZlckNvcHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHZvaWQgU2hhcmVk
QnVmZmVyQ29weTo6ZW5jb2RlKEVuY29kZXImIGUKICAgICBpZiAoIWJ1ZmZlclNpemUpCiAgICAg
ICAgIHJldHVybjsKICAgICBmb3IgKGF1dG8mIHNlZ21lbnQgOiAqbV9idWZmZXIpCi0gICAgICAg
IGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHNlZ21lbnQuc2VnbWVudC0+ZGF0YSgpLCBz
ZWdtZW50LnNlZ21lbnQtPnNpemUoKSwgMSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKHNlZ21lbnQuc2VnbWVudC0+Ynl0ZXMoKSk7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8
U2hhcmVkQnVmZmVyQ29weT4gU2hhcmVkQnVmZmVyQ29weTo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uRW5j
b2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNv
bm5lY3Rpb25FbmNvZGVyLmgJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25FbmNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiTWVz
c2FnZU5hbWVzLmgiCisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBJUEMgewpAQCAtNTMsMjIgKzU0LDI4IEBAIHB1YmxpYzoK
IAogICAgIH5TdHJlYW1Db25uZWN0aW9uRW5jb2RlcigpID0gZGVmYXVsdDsKIAotICAgIGJvb2wg
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBz
aXplX3QgYWxpZ25tZW50KQorICAgIGJvb2wgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48Y29u
c3Qgc3RkOjpieXRlPiBkYXRhLCBzaXplX3QgYWxpZ25tZW50KQogICAgIHsKICAgICAgICAgc2l6
ZV90IGJ1ZmZlclBvaW50ZXIgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KG1fYnVmZmVyICsgbV9lbmNvZGVkU2l6ZSkpOwogICAgICAgICBzaXplX3QgbmV3
QnVmZmVyUG9pbnRlciA9IHJvdW5kVXBUb011bHRpcGxlT2YoYWxpZ25tZW50LCBidWZmZXJQb2lu
dGVyKTsKICAgICAgICAgaWYgKG5ld0J1ZmZlclBvaW50ZXIgPCBidWZmZXJQb2ludGVyKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpbnRwdHJfdCBhbGlnbmVkU2l6ZSA9IG1f
ZW5jb2RlZFNpemUgKyAobmV3QnVmZmVyUG9pbnRlciAtIGJ1ZmZlclBvaW50ZXIpOwotICAgICAg
ICBpZiAoIXJlc2VydmUoYWxpZ25lZFNpemUsIHNpemUpKQorICAgICAgICBpZiAoIXJlc2VydmUo
YWxpZ25lZFNpemUsIGRhdGEuc2l6ZSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgdWludDhfdCogYnVmZmVyID0gbV9idWZmZXIgKyBhbGlnbmVkU2l6ZTsKLSAgICAgICAg
bWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7Ci0gICAgICAgIG1fZW5jb2RlZFNpemUgPSBhbGln
bmVkU2l6ZSArIHNpemU7CisgICAgICAgIGF1dG8qIGJ1ZmZlciA9IG1fYnVmZmVyICsgYWxpZ25l
ZFNpemU7CisgICAgICAgIG1lbWNweShidWZmZXIsIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7
CisgICAgICAgIG1fZW5jb2RlZFNpemUgPSBhbGlnbmVkU2l6ZSArIGRhdGEuc2l6ZSgpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAg
IHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFQmJiBkYXRhLCBzaXplX3QgYWxpZ25tZW50ID0g
YWxpZ25vZih0eXBlbmFtZSBkZWNsdHlwZShTcGFuKHN0ZDo6ZGVjbHZhbDxUPigpKSk6OnZhbHVl
X3R5cGUpKQorICAgIHsKKyAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGFzQnl0ZXMoU3Bh
biB7IHN0ZDo6Zm9yd2FyZDxUPihkYXRhKSB9KSwgYWxpZ25tZW50KTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyJiBvcGVyYXRv
cjw8KFQmJiB0KQogICAgIHsKICAgICAgICAgQXJndW1lbnRDb2RlcjxzdGQ6OnJlbW92ZV9jb25z
dF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+Piwgdm9pZD46OmVuY29kZSgqdGhpcywgc3Rk
Ojpmb3J3YXJkPFQ+KHQpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1
bWVudENvZGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9T
aGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDcg
KzE0NCw3IEBAIHN0YXRpYyB2b2lkIGVuY29kZVNoYXJlZEJ1ZmZlcihFbmNvZGVyJiAKICAgICAv
LyBvdmVyIHRoZSBJUEMuIENvbm5lY3Rpb25Vbml4LmNwcCBhbHJlYWR5IHVzZXMgc2hhcmVkIG1l
bW9yeSB0byBzZW5kIGFueSBJUEMgbWVzc2FnZSB0aGF0IGlzCiAgICAgLy8gdG9vIGxhcmdlLiBT
ZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODU3MS4KICAgICBm
b3IgKGNvbnN0IGF1dG8mIGVsZW1lbnQgOiAqYnVmZmVyKQotICAgICAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShlbGVtZW50LnNlZ21lbnQtPmRhdGEoKSwgZWxlbWVudC5zZWdtZW50
LT5zaXplKCksIDEpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShlbGVt
ZW50LnNlZ21lbnQtPmJ5dGVzKCkpOwogI2Vsc2UKICAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBo
YW5kbGU7CiAgICAgYXV0byBzaGFyZWRNZW1vcnlCdWZmZXIgPSBTaGFyZWRNZW1vcnk6OmNvcHlC
dWZmZXIoKmJ1ZmZlcik7CkBAIC0xODAsNyArMTgwLDcgQEAgc3RhdGljIFdBUk5fVU5VU0VEX1JF
VFVSTiBib29sIGRlY29kZVNoYQogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CiAgICAgZGF0
YS5ncm93KGJ1ZmZlclNpemUpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERh
dGEoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAxKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKGRhdGEpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBidWZm
ZXIgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGRhdGEpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL21hYy9BdXhpbGlhcnlQcm9jZXNzTWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvU2hhcmVkL21hYy9BdXhpbGlhcnlQcm9jZXNzTWFjLm1tCShyZXZpc2lvbiAy
Nzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQXV4aWxpYXJ5UHJvY2Vzc01hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMzIxLDcgKzMyMSw3IEBAIHN0YXRpYyBTdHJpbmcgc2FuZGJv
eEZpbGVQYXRoKGNvbnN0IFN0cmkKICAgICBjcnlwdG8tPmFkZEJ5dGVzKGhlYWRlci5kYXRhKCks
IGhlYWRlci5sZW5ndGgoKSk7CiAgICAgYXV0byBoYXNoID0gY3J5cHRvLT5jb21wdXRlSGFzaCgp
OwogCi0gICAgcmV0dXJuIG1ha2VTdHJpbmcoZGlyZWN0b3J5UGF0aCwgIi9Db21waWxlZFNhbmRi
b3grIiwgYmFzZTY0VVJMRW5jb2RlZChoYXNoLmRhdGEoKSwgaGFzaC5zaXplKCkpKTsKKyAgICBy
ZXR1cm4gbWFrZVN0cmluZyhkaXJlY3RvcnlQYXRoLCAiL0NvbXBpbGVkU2FuZGJveCsiLCBiYXNl
NjRVUkxFbmNvZGVkKGhhc2gpKTsKIH0KIAogc3RhdGljIGJvb2wgZW5zdXJlU2FuZGJveENhY2hl
RGlyZWN0b3J5KGNvbnN0IFNhbmRib3hJbmZvJiBpbmZvKQpJbmRleDogU291cmNlL1dlYktpdC9T
aGFyZWQvd2luL1dlYkNvcmVBcmd1bWVudENvZGVyc1dpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9TaGFyZWQvd2luL1dlYkNvcmVBcmd1bWVudENvZGVyc1dpbi5jcHAJKHJldmlz
aW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9XZWJDb3JlQXJndW1lbnRD
b2RlcnNXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxMiArNTEsMTIgQEAgc3RkOjpvcHRp
b25hbDxGb250QXR0cmlidXRlcz4gQXJndW1lbnRDbwogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1l
bnRDb2RlcjxMT0dGT05UPiB7CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IExPR0ZPTlQmIGxvZ0ZvbnQpCiAgICAgewotICAgICAgICBlbmNvZGVyLmVuY29k
ZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmbG9nRm9u
dCksIHNpemVvZiBsb2dGb250LCAxKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEoU3BhbiB7ICZsb2dGb250LCAxIH0sIDEpOwogICAgIH0KICAgICBzdGF0aWMgc3RkOjpv
cHRpb25hbDxMT0dGT05UPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7CiAgICAgICAg
IExPR0ZPTlQgbG9nRm9udDsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3Ro
RGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmbG9nRm9udCksIHNpemVvZihsb2dGb250
KSwgMSkpCisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7
ICZsb2dGb250LCAxIH0sIDEpKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAg
ICAgICAgcmV0dXJuIGxvZ0ZvbnQ7CiAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuY3BwCShyZXZpc2lv
biAyNzg4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVM
aXN0U3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsMTggKzEzMSwyMCBAQCBzdGF0aWMg
V2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGEgZW5jb2RlCiAgICAgZW5jb2RlciA8PCBtZXRhRGF0
YS5jb25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNpemU7CiAgICAgZW5jb2RlciA8PCBtZXRhRGF0
YS5jb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW47CiAKLSAgICBBU1NFUlQoZW5jb2Rlci5idWZm
ZXJTaXplKCkgPT0gQ29udGVudFJ1bGVMaXN0RmlsZUhlYWRlclNpemUpOwotICAgIHJldHVybiBX
ZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZl
clNpemUoKSk7CisgICAgQVNTRVJUKGVuY29kZXIuYnVmZmVyKCkuc2l6ZSgpID09IENvbnRlbnRS
dWxlTGlzdEZpbGVIZWFkZXJTaXplKTsKKyAgICByZXR1cm4gV2ViS2l0OjpOZXR3b3JrQ2FjaGU6
OkRhdGEgeyBlbmNvZGVyLmJ1ZmZlcigpIH07CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZv
aWQgZ2V0RGF0YShjb25zdCBUJiwgY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwg
c2l6ZV90KT4mKTsKLXRlbXBsYXRlPD4gdm9pZCBnZXREYXRhKGNvbnN0IFdlYktpdDo6TmV0d29y
a0NhY2hlOjpEYXRhJiBkYXRhLCBjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBz
aXplX3QpPiYgZnVuY3Rpb24pCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGdldERhdGEoY29u
c3QgVCYsIGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mKTsKKwor
dGVtcGxhdGU8PiB2b2lkIGdldERhdGEoY29uc3QgV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGEm
IGRhdGEsIGNvbnN0IEZ1bmN0aW9uPGJvb2woU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+KT4mIGZ1bmN0
aW9uKQogewogICAgIGRhdGEuYXBwbHkoZnVuY3Rpb24pOwogfQotdGVtcGxhdGU8PiB2b2lkIGdl
dERhdGEoY29uc3QgV2ViQ29yZTo6U2hhcmVkQnVmZmVyJiBkYXRhLCBjb25zdCBGdW5jdGlvbjxi
b29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYgZnVuY3Rpb24pCisKK3RlbXBsYXRlPD4gdm9p
ZCBnZXREYXRhKGNvbnN0IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlciYgZGF0YSwgY29uc3QgRnVuY3Rp
b248Ym9vbChTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4pPiYgZnVuY3Rpb24pCiB7Ci0gICAgZnVuY3Rp
b24oZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICBmdW5jdGlvbihkYXRhLmJ5dGVzKCkp
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpAQCAtMTUwLDEzICsxNTIsMTMgQEAgc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8Q29udGVudFJ1bGVMaXN0TWV0YQogewogICAgIGJvb2wgc3VjY2VzcyA9
IGZhbHNlOwogICAgIENvbnRlbnRSdWxlTGlzdE1ldGFEYXRhIG1ldGFEYXRhOwotICAgIGdldERh
dGEoZmlsZURhdGEsIFsmbWV0YURhdGEsICZzdWNjZXNzLCAmZmlsZURhdGFdKGNvbnN0IHVpbnQ4
X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7CisgICAgZ2V0RGF0YShmaWxlRGF0YSwgWyZtZXRhRGF0
YSwgJnN1Y2Nlc3MsICZmaWxlRGF0YV0oU3Bhbjxjb25zdCBzdGQ6OmJ5dGU+IGRhdGEpIHsKICAg
ICAgICAgLy8gVGhlIGZpbGUgZGF0YSBzaG91bGQgYmUgbWFwcGVkIGludG8gb25lIGNvbnRpbnVv
dXMgbWVtb3J5IHNlZ21lbnQgc28gdGhlIHNpemUKICAgICAgICAgLy8gcGFzc2VkIHRvIHRoZSBh
cHBsaWVyIHNob3VsZCBhbHdheXMgZXF1YWwgdGhlIGRhdGEgc2l6ZS4KLSAgICAgICAgaWYgKHNp
emUgIT0gZmlsZURhdGEuc2l6ZSgpKQorICAgICAgICBpZiAoZGF0YS5zaXplKCkgIT0gZmlsZURh
dGEuc2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIFdURjo6UGVy
c2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihkYXRhLCBzaXplKTsKKyAgICAgICAgV1RGOjpQZXJz
aXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyIHsgZGF0YSB9OwogICAgICAgICAKICAgICAgICAgc3Rk
OjpvcHRpb25hbDx1aW50MzJfdD4gdmVyc2lvbjsKICAgICAgICAgZGVjb2RlciA+PiB2ZXJzaW9u
OwpAQCAtMjI4LDggKzIzMCw4IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPE1hcHBlZERhdGE+IG9w
ZW5BbmQKIHN0YXRpYyBib29sIHdyaXRlRGF0YVRvRmlsZShjb25zdCBXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6RGF0YSYgZmlsZURhdGEsIFBsYXRmb3JtRmlsZUhhbmRsZSBmZCkKIHsKICAgICBib29s
IHN1Y2Nlc3MgPSB0cnVlOwotICAgIGZpbGVEYXRhLmFwcGx5KFtmZCwgJnN1Y2Nlc3NdKGNvbnN0
IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gICAgICAgIGlmICh3cml0ZVRvRmlsZShm
ZCwgZGF0YSwgc2l6ZSkgPT0gLTEpIHsKKyAgICBmaWxlRGF0YS5hcHBseShbZmQsICZzdWNjZXNz
XShTcGFuPGNvbnN0IHN0ZDo6Ynl0ZT4gZGF0YSkgeworICAgICAgICBpZiAod3JpdGVUb0ZpbGUo
ZmQsIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSkgPT0gLTEpIHsKICAgICAgICAgICAgIHN1Y2Nl
c3MgPSBmYWxzZTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFu
ZWwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19X
S1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0JKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3IEBACiAjaW1wb3J0IDxwYWwvY3J5cHRvL0NyeXB0
b0RpZ2VzdC5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWlu
UHRyLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvU3BhbkNvY29hLmg+CiAjaW1wb3J0IDx3dGYvY29j
b2EvVmVjdG9yQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogCkBAIC03MCw3
ICs3MSw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNEYXRhPiBwcm9kdWNlQ2xpZW50RGEKICAgICAg
ICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0OkAid2ViYXV0aG4uZ2V0IiBmb3JLZXk6QCJ0eXBlIl07
CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6YmFzZTY0
VVJMRW5jb2RlVG9TdHJpbmcoY2hhbGxlbmdlLmJ5dGVzLCBjaGFsbGVuZ2UubGVuZ3RoKSBmb3JL
ZXk6QCJjaGFsbGVuZ2UiXTsKKyAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6YmFzZTY0VVJMRW5j
b2RlVG9TdHJpbmcoYXNCeXRlcyhjaGFsbGVuZ2UpKSBmb3JLZXk6QCJjaGFsbGVuZ2UiXTsKICAg
ICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6b3JpZ2luIGZvcktleTpAIm9yaWdpbiJdOwogCiAgICAg
cmV0dXJuIFtOU0pTT05TZXJpYWxpemF0aW9uIGRhdGFXaXRoSlNPTk9iamVjdDpkaWN0aW9uYXJ5
LmdldCgpIG9wdGlvbnM6TlNKU09OV3JpdGluZ1NvcnRlZEtleXMgZXJyb3I6bmlsXTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3RvckNs
aWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
L2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk4LDcgKzE5OCw3IEBAIHZvaWQgUmVtb3RlSW5zcGVj
dG9yQ2xpZW50OjpzZXRCYWNrZW5kQ28KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1f
YmFja2VuZENvbW1hbmRzVVJMID0gbWFrZVN0cmluZygiZGF0YTp0ZXh0L2phdmFzY3JpcHQ7YmFz
ZTY0LCIsIGJhc2U2NEVuY29kZWQoYmFja2VuZENvbW1hbmRzLCBzdHJsZW4oYmFja2VuZENvbW1h
bmRzKSkpOworICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0gbWFrZVN0cmluZygiZGF0YTp0ZXh0
L2phdmFzY3JpcHQ7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoU3BhbiB7IGJhY2tlbmRDb21tYW5k
cywgc3RybGVuKGJhY2tlbmRDb21tYW5kcykgfSkpOwogfQogCiB2b2lkIFJlbW90ZUluc3BlY3Rv
ckNsaWVudDo6Y29ubmVjdGlvbkRpZENsb3NlKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsQXV0aGVudGljYXRvci5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9M
b2NhbEF1dGhlbnRpY2F0b3IubW0JKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsQXV0aGVudGljYXRvci5tbQko
d29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCBzdGF0aWMgaW5saW5lIEhhc2hTZXQ8U3Ry
aW5nPiBwcm9kdWNlSGFzCiAgICAgSGFzaFNldDxTdHJpbmc+IHJlc3VsdDsKICAgICBmb3IgKGF1
dG8mIGNyZWRlbnRpYWxEZXNjcmlwdG9yIDogY3JlZGVudGlhbERlc2NyaXB0b3JzKSB7CiAgICAg
ICAgIGlmIChlbXB0eVRyYW5zcG9ydHNPckNvbnRhaW4oY3JlZGVudGlhbERlc2NyaXB0b3IudHJh
bnNwb3J0cywgQXV0aGVudGljYXRvclRyYW5zcG9ydDo6SW50ZXJuYWwpICYmIGNyZWRlbnRpYWxE
ZXNjcmlwdG9yLnR5cGUgPT0gUHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSAmJiBj
cmVkZW50aWFsRGVzY3JpcHRvci5pZFZlY3Rvci5zaXplKCkgPT0gY3JlZGVudGlhbElkTGVuZ3Ro
KQotICAgICAgICAgICAgcmVzdWx0LmFkZChiYXNlNjRFbmNvZGVUb1N0cmluZyhjcmVkZW50aWFs
RGVzY3JpcHRvci5pZFZlY3Rvci5kYXRhKCksIGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9y
LnNpemUoKSkpOworICAgICAgICAgICAgcmVzdWx0LmFkZChiYXNlNjRFbmNvZGVUb1N0cmluZyhj
cmVkZW50aWFsRGVzY3JpcHRvci5pZFZlY3RvcikpOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0
OwogfQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgTG9jYWxBdXRoZW50aWNhdG9yOjptYWtlQ3Jl
ZGVudGlhbCgKICAgICAgICAgaWYgKG5vdEZvdW5kICE9IG1fZXhpc3RpbmdDcmVkZW50aWFscy5m
aW5kTWF0Y2hpbmcoWyZleGNsdWRlQ3JlZGVudGlhbElkc10gKGF1dG8mIGNyZWRlbnRpYWwpIHsK
ICAgICAgICAgICAgIGF1dG8qIHJhd0lkID0gY3JlZGVudGlhbC0+cmF3SWQoKTsKICAgICAgICAg
ICAgIEFTU0VSVChyYXdJZCk7Ci0gICAgICAgICAgICByZXR1cm4gZXhjbHVkZUNyZWRlbnRpYWxJ
ZHMuY29udGFpbnMoYmFzZTY0RW5jb2RlVG9TdHJpbmcocmF3SWQtPmRhdGEoKSwgcmF3SWQtPmJ5
dGVMZW5ndGgoKSkpOworICAgICAgICAgICAgcmV0dXJuIGV4Y2x1ZGVDcmVkZW50aWFsSWRzLmNv
bnRhaW5zKGJhc2U2NEVuY29kZVRvU3RyaW5nKHJhd0lkLT5ieXRlcygpKSk7CiAgICAgICAgIH0p
KSB7CiAgICAgICAgICAgICByZWNlaXZlRXhjZXB0aW9uKHsgTm90QWxsb3dlZEVycm9yLCAiQXQg
bGVhc3Qgb25lIGNyZWRlbnRpYWwgbWF0Y2hlcyBhbiBlbnRyeSBvZiB0aGUgZXhjbHVkZUNyZWRl
bnRpYWxzIGxpc3QgaW4gdGhlIHBsYXRmb3JtIGF0dGFjaGVkIGF1dGhlbnRpY2F0b3IuIl9zIH0s
IFdlYkF1dGhlbnRpY2F0aW9uU3RhdHVzOjpMQUV4Y2x1ZGVDcmVkZW50aWFsc01hdGNoZWQpOwog
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtNTEwLDcgKzUxMCw3IEBAIHZvaWQgTG9jYWxBdXRoZW50
aWNhdG9yOjpnZXRBc3NlcnRpb24oKQogICAgICAgICB9CiAKICAgICAgICAgYXV0byogcmF3SWQg
PSBjcmVkZW50aWFsLT5yYXdJZCgpOwotICAgICAgICBpZiAoYWxsb3dDcmVkZW50aWFsSWRzLmNv
bnRhaW5zKGJhc2U2NEVuY29kZVRvU3RyaW5nKHJhd0lkLT5kYXRhKCksIHJhd0lkLT5ieXRlTGVu
Z3RoKCkpKSkKKyAgICAgICAgaWYgKGFsbG93Q3JlZGVudGlhbElkcy5jb250YWlucyhiYXNlNjRF
bmNvZGVUb1N0cmluZyhyYXdJZC0+Ynl0ZXMoKSkpKQogICAgICAgICAgICAgYXNzZXJ0aW9uUmVz
cG9uc2VzLnVuY2hlY2tlZEFwcGVuZChjcmVkZW50aWFsLmNvcHlSZWYoKSk7CiAgICAgfQogICAg
IGlmIChhc3NlcnRpb25SZXNwb25zZXMuaXNFbXB0eSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tMb2NhbENvbm5lY3Rpb24ubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24v
TW9jay9Nb2NrTG9jYWxDb25uZWN0aW9uLm1tCShyZXZpc2lvbiAyNzg4MDkpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tMb2NhbENvbm5lY3Rp
b24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIE1vY2tMb2NhbENv
bm5lY3Rpb246OmZpbHRlclJlc3BvbnNlCiAgICAgZm9yICg7IGl0ciAhPSByZXNwb25zZXMuZW5k
KCk7ICsraXRyKSB7CiAgICAgICAgIGF1dG8qIHJhd0lkID0gaXRyLT5nZXQoKS5yYXdJZCgpOwog
ICAgICAgICBBU1NFUlQocmF3SWQpOwotICAgICAgICBhdXRvIHJhd0lkQmFzZTY0ID0gYmFzZTY0
RW5jb2RlVG9TdHJpbmcocmF3SWQtPmRhdGEoKSwgcmF3SWQtPmJ5dGVMZW5ndGgoKSk7CisgICAg
ICAgIGF1dG8gcmF3SWRCYXNlNjQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhyYXdJZC0+Ynl0ZXMo
KSk7CiAgICAgICAgIGlmIChyYXdJZEJhc2U2NCA9PSBwcmVmZXJyZWRDcmVkZW50aWFsSWRCYXNl
NjQpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9tYWMvTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nLmNwcAkocmV2
aXNpb24gMjc4ODA5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL0xlZ2FjeVNlc3Np
b25TdGF0ZUNvZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3ICsxMjksNyBAQCBwdWJs
aWM6CiAgICAgICAgICp0aGlzIDw8IGxlbmd0aDsKIAogICAgICAgICAqdGhpcyA8PCBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4obGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgICAgIGVuY29kZUZp
eGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihTdHJpbmdWaWV3
KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKS5nZXQoKSksIGxlbmd0aCAqIHNpemVvZihV
Q2hhciksIGFsaWdub2YoVUNoYXIpKTsKKyAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKFNw
YW4geyBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKS5nZXQoKSwgbGVu
Z3RoIH0pOwogCiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CkBAIC0xMzcsNyArMTM3LDcg
QEAgcHVibGljOgogICAgIEhpc3RvcnlFbnRyeURhdGFFbmNvZGVyJiBvcGVyYXRvcjw8KGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYgdmFsdWUpCiAgICAgewogICAgICAgICAqdGhpcyA8PCBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4odmFsdWUuc2l6ZSgpKTsKLSAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKHZhbHVlLmRhdGEoKSwgdmFsdWUuc2l6ZSgpLCAxKTsKKyAgICAgICAgZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKHZhbHVlKTsKIAogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQpAQCAtMTQ1
LDcgKzE0NSw3IEBAIHB1YmxpYzoKICAgICBIaXN0b3J5RW50cnlEYXRhRW5jb2RlciYgb3BlcmF0
b3I8PChjb25zdCBWZWN0b3I8Y2hhcj4mIHZhbHVlKQogICAgIHsKICAgICAgICAgKnRoaXMgPDwg
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZhbHVlLnNpemUoKSk7Ci0gICAgICAgIGVuY29kZUZpeGVk
TGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih2YWx1ZS5kYXRhKCkp
LCB2YWx1ZS5zaXplKCksIDEpOworICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEodmFsdWUp
OwogCiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CkBAIC0yMDYsMTcgKzIwNiwyMyBAQCBw
cml2YXRlOgogICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2FyaXRobWV0aWM8
VHlwZT46OnZhbHVlLCAiIik7CiAKLSAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2YWx1ZSksIHNpemVvZih2YWx1ZSksIHNpemVvZih2YWx1
ZSkpOworICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEoU3BhbiB7ICZ2YWx1ZSwgMSB9LCBz
aXplb2YodmFsdWUpKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAotICAgIHZvaWQg
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCB1
bnNpZ25lZCBhbGlnbm1lbnQpCisgICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoU3Bhbjxj
b25zdCBzdGQ6OmJ5dGU+IGRhdGEsIHVuc2lnbmVkIGFsaWdubWVudCkKICAgICB7Ci0gICAgICAg
IFJFTEVBU0VfQVNTRVJUKGRhdGEgfHwgIXNpemUpOwotICAgICAgICBBU1NFUlQoIShyZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdD4oZGF0YSkgJSBhbGlnbm1lbnQpKTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoZGF0YS5kYXRhKCkgfHwgIWRhdGEuc2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUKCEo
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGRhdGEuZGF0YSgpKSAlIGFsaWdubWVudCkpOwog
Ci0gICAgICAgIHVpbnQ4X3QqIGJ1ZmZlciA9IGdyb3coYWxpZ25tZW50LCBzaXplKTsKLSAgICAg
ICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7CisgICAgICAgIGF1dG8qIGJ1ZmZlciA9IGdy
b3coYWxpZ25tZW50LCBkYXRhLnNpemUoKSk7CisgICAgICAgIG1lbWNweShidWZmZXIsIGRhdGEu
ZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
KyAgICB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShUJiYgZGF0YSwgdW5zaWduZWQgYWxpZ25t
ZW50ID0gYWxpZ25vZih0eXBlbmFtZSBkZWNsdHlwZShTcGFuKHN0ZDo6ZGVjbHZhbDxUPigpKSk6
OnZhbHVlX3R5cGUpKQorICAgIHsKKyAgICAgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGFzQnl0
ZXMoU3BhbiB7IHN0ZDo6Zm9yd2FyZDxUPihkYXRhKSB9KSwgYWxpZ25tZW50KTsKICAgICB9CiAK
ICAgICB1aW50OF90KiBncm93KHVuc2lnbmVkIGFsaWdubWVudCwgc2l6ZV90IHNpemUpCkBAIC02
MDEsNyArNjA3LDcgQEAgcHVibGljOgogCiAgICAgICAgIFVDaGFyKiBidWZmZXI7CiAgICAgICAg
IGF1dG8gc3RyaW5nID0gU3RyaW5nOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVy
KTsKLSAgICAgICAgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KGJ1ZmZlciksIGxlbmd0aCAqIHNpemVvZihVQ2hhciksIGFsaWdub2YoVUNoYXIpKTsKKyAg
ICAgICAgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKFNwYW4geyBidWZmZXIsIGxlbmd0aCB9KTsKIAog
ICAgICAgICB2YWx1ZSA9IHN0cmluZzsKICAgICAgICAgcmV0dXJuICp0aGlzOwpAQCAtNzM3LDE3
ICs3NDMsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2FyaXRo
bWV0aWM8VHlwZT46OnZhbHVlLCAiIik7CiAgICAgICAgIHZhbHVlID0gVHlwZSgpOwogCi0gICAg
ICAgIGRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFs
dWUpLCBzaXplb2YodmFsdWUpLCBzaXplb2YodmFsdWUpKTsKKyAgICAgICAgZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKFNwYW4geyAmdmFsdWUsIDEgfSwgc2l6ZW9mKHZhbHVlKSk7CiAgICAgICAgIHJl
dHVybiAqdGhpczsKICAgICB9CiAKLSAgICB2b2lkIGRlY29kZUZpeGVkTGVuZ3RoRGF0YSh1aW50
OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgYWxpZ25tZW50KQorICAgIHZvaWQgZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKFNwYW48c3RkOjpieXRlPiBkYXRhLCB1bnNpZ25lZCBhbGlnbm1l
bnQpCiAgICAgewotICAgICAgICBpZiAoIWFsaWduQnVmZmVyUG9zaXRpb24oYWxpZ25tZW50LCBz
aXplKSkKKyAgICAgICAgaWYgKCFhbGlnbkJ1ZmZlclBvc2l0aW9uKGFsaWdubWVudCwgZGF0YS5z
aXplKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIG1lbWNweShkYXRhLCBtX2J1
ZmZlciwgc2l6ZSk7Ci0gICAgICAgIG1fYnVmZmVyICs9IHNpemU7CisgICAgICAgIG1lbWNweShk
YXRhLmRhdGEoKSwgbV9idWZmZXIsIGRhdGEuc2l6ZSgpKTsKKyAgICAgICAgbV9idWZmZXIgKz0g
ZGF0YS5zaXplKCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lk
IGRlY29kZUZpeGVkTGVuZ3RoRGF0YShUJiYgZGF0YSwgdW5zaWduZWQgYWxpZ25tZW50ID0gYWxp
Z25vZih0eXBlbmFtZSBkZWNsdHlwZShTcGFuKHN0ZDo6ZGVjbHZhbDxUPigpKSk6OnZhbHVlX3R5
cGUpKQorICAgIHsKKyAgICAgICAgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGFzV3JpdGFibGVCeXRl
cyhTcGFuIHsgc3RkOjpmb3J3YXJkPFQ+KGRhdGEpIH0pLCBhbGlnbm1lbnQpOwogICAgIH0KIAog
ICAgIGJvb2wgYWxpZ25CdWZmZXJQb3NpdGlvbih1bnNpZ25lZCBhbGlnbm1lbnQsIHNpemVfdCBz
aXplKQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hh
bm5lbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsv
V2ViU29ja2V0Q2hhbm5lbC5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01OSw4ICs1OSw4IEBAIE5ldHdvcmtTZW5kUXVldWUgV2ViU29ja2V0Q2hhbm5lbDo6Y3JlYXQK
ICAgICAgICAgY2hhbm5lbC5ub3RpZnlTZW5kRnJhbWUoV2ViU29ja2V0RnJhbWU6Ok9wQ29kZTo6
T3BDb2RlVGV4dCwgdXRmOFN0cmluZy5kYXRhQXNVSW50OFB0cigpLCB1dGY4U3RyaW5nLmxlbmd0
aCgpKTsKICAgICAgICAgY2hhbm5lbC5zZW5kTWVzc2FnZShNZXNzYWdlczo6TmV0d29ya1NvY2tl
dENoYW5uZWw6OlNlbmRTdHJpbmcgeyBJUEM6OkRhdGFSZWZlcmVuY2UgeyB1dGY4U3RyaW5nLmRh
dGFBc1VJbnQ4UHRyKCksIHV0ZjhTdHJpbmcubGVuZ3RoKCkgfSB9LCB1dGY4U3RyaW5nLmxlbmd0
aCgpKTsKICAgICB9LCBbJmNoYW5uZWxdKGF1dG8mIHNwYW4pIHsKLSAgICAgICAgY2hhbm5lbC5u
b3RpZnlTZW5kRnJhbWUoV2ViU29ja2V0RnJhbWU6Ok9wQ29kZTo6T3BDb2RlQmluYXJ5LCBzcGFu
LmRhdGEoKSwgc3Bhbi5zaXplKCkpOwotICAgICAgICBjaGFubmVsLnNlbmRNZXNzYWdlKE1lc3Nh
Z2VzOjpOZXR3b3JrU29ja2V0Q2hhbm5lbDo6U2VuZERhdGEgeyBJUEM6OkRhdGFSZWZlcmVuY2Ug
eyBzcGFuLmRhdGEoKSwgc3Bhbi5zaXplKCkgfSB9LCBzcGFuLnNpemUoKSk7CisgICAgICAgIGNo
YW5uZWwubm90aWZ5U2VuZEZyYW1lKFdlYlNvY2tldEZyYW1lOjpPcENvZGU6Ok9wQ29kZUJpbmFy
eSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3Bhbi5kYXRhKCkpLCBzcGFuLnNp
emUoKSk7CisgICAgICAgIGNoYW5uZWwuc2VuZE1lc3NhZ2UoTWVzc2FnZXM6Ok5ldHdvcmtTb2Nr
ZXRDaGFubmVsOjpTZW5kRGF0YSB7IElQQzo6RGF0YVJlZmVyZW5jZSB7IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KHNwYW4uZGF0YSgpKSwgc3Bhbi5zaXplKCkgfSB9LCBzcGFuLnNp
emUoKSk7CiAgICAgfSwgWyZjaGFubmVsXShFeGNlcHRpb25Db2RlIGV4Y2VwdGlvbkNvZGUpIHsK
ICAgICAgICAgYXV0byBjb2RlID0gc3RhdGljX2Nhc3Q8aW50PihleGNlcHRpb25Db2RlKTsKICAg
ICAgICAgY2hhbm5lbC5mYWlsKG1ha2VTdHJpbmcoIkZhaWxlZCB0byBsb2FkIEJsb2I6IGV4Y2Vw
dGlvbiBjb2RlID0gIiwgY29kZSkpOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NDMsMTIgKzQ0Myw3IEBAIEpTVmFsdWVSZWYgSlNTaGFyZWRNZW1vcnk6OnJl
YWRCeXRlcyhKU0MKICAgICByZXR1cm4gdG9SZWYoanNBcnJheUJ1ZmZlcik7CiB9CiAKLXN0cnVj
dCBBcnJheUJ1ZmZlckRhdGEgewotICAgIHZvaWQqIGJ1ZmZlciB7IG51bGxwdHIgfTsKLSAgICBz
aXplX3QgbGVuZ3RoIHsgMCB9OwotfTsKLQotc3RhdGljIEFycmF5QnVmZmVyRGF0YSBhcnJheUJ1
ZmZlckRhdGFGcm9tVmFsdWVSZWYoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVHlwZWRBcnJheVR5
cGUgdHlwZSwgSlNWYWx1ZVJlZiB2YWx1ZVJlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorc3Rh
dGljIFNwYW48c3RkOjpieXRlPiBhcnJheUJ1ZmZlckRhdGFGcm9tVmFsdWVSZWYoSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTVHlwZWRBcnJheVR5cGUgdHlwZSwgSlNWYWx1ZVJlZiB2YWx1ZVJlZiwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIGF1dG8gb2JqZWN0UmVmID0gSlNWYWx1ZVRv
T2JqZWN0KGNvbnRleHQsIHZhbHVlUmVmLCBleGNlcHRpb24pOwogICAgIGlmICghb2JqZWN0UmVm
KQpAQCAtNDY5LDcgKzQ2NCw3IEBAIHN0YXRpYyBBcnJheUJ1ZmZlckRhdGEgYXJyYXlCdWZmZXJE
YXRhRnIKICAgICBlbHNlCiAgICAgICAgIGxlbmd0aCA9IEpTT2JqZWN0R2V0VHlwZWRBcnJheUJ5
dGVMZW5ndGgoY29udGV4dCwgb2JqZWN0UmVmLCBleGNlcHRpb24pOwogCi0gICAgcmV0dXJuIHsg
YnVmZmVyLCBsZW5ndGggfTsKKyAgICByZXR1cm4geyBzdGF0aWNfY2FzdDxzdGQ6OmJ5dGUqPihi
dWZmZXIpLCBsZW5ndGggfTsKIH0KIAogSlNWYWx1ZVJlZiBKU1NoYXJlZE1lbW9yeTo6d3JpdGVC
eXRlcyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCkBAIC00ODcsMTMgKzQ4MiwxMyBAQCBKU1ZhbHVlUmVm
IEpTU2hhcmVkTWVtb3J5Ojp3cml0ZUJ5dGVzKEpTCiAgICAgfQogCiAgICAgYXV0byBkYXRhID0g
YXJyYXlCdWZmZXJEYXRhRnJvbVZhbHVlUmVmKGNvbnRleHQsIHR5cGUsIGFyZ3VtZW50c1swXSwg
ZXhjZXB0aW9uKTsKLSAgICBpZiAoIWRhdGEuYnVmZmVyKSB7CisgICAgaWYgKCFkYXRhLmRhdGEo
KSkgewogICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJDb3Vs
ZCBub3QgcmVhZCB0aGUgYnVmZmVyIl9zKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOwogICAgIH0KIAogICAgIHNpemVfdCBvZmZzZXQgPSAwOwotICAgIHNp
emVfdCBsZW5ndGggPSBkYXRhLmxlbmd0aDsKKyAgICBzaXplX3QgbGVuZ3RoID0gZGF0YS5zaXpl
KCk7CiAgICAgc2l6ZV90IHNoYXJlZE1lbW9yeVNpemUgPSBqc1NoYXJlZE1lbW9yeS0+bV9zaGFy
ZWRNZW1vcnktPnNpemUoKTsKIAogICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHRvSlMoY29udGV4
dCk7CkBAIC01MjYsNyArNTIxLDcgQEAgSlNWYWx1ZVJlZiBKU1NoYXJlZE1lbW9yeTo6d3JpdGVC
eXRlcyhKUwogICAgICAgICBsZW5ndGggPSAqbGVuZ3RoVmFsdWU7CiAgICAgfQogCi0gICAgbWVt
Y3B5KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihqc1NoYXJlZE1lbW9yeS0+bV9zaGFyZWRNZW1vcnkt
PmRhdGEoKSkgKyBvZmZzZXQsIGRhdGEuYnVmZmVyLCBsZW5ndGgpOworICAgIG1lbWNweShzdGF0
aWNfY2FzdDx1aW50OF90Kj4oanNTaGFyZWRNZW1vcnktPm1fc2hhcmVkTWVtb3J5LT5kYXRhKCkp
ICsgb2Zmc2V0LCBkYXRhLmRhdGEoKSwgbGVuZ3RoKTsKIAogICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KQEAgLTY4OCwxMCArNjgzLDEwIEBAIHN0YXRpYyBib29s
IGVuY29kZVR5cGVkQXJyYXkoSVBDOjpFbmNvZGUKICAgICBBU1NFUlQodHlwZSAhPSBrSlNUeXBl
ZEFycmF5VHlwZU5vbmUpOwogCiAgICAgYXV0byBkYXRhID0gYXJyYXlCdWZmZXJEYXRhRnJvbVZh
bHVlUmVmKGNvbnRleHQsIHR5cGUsIHZhbHVlUmVmLCBleGNlcHRpb24pOwotICAgIGlmICghZGF0
YS5idWZmZXIpCisgICAgaWYgKCFkYXRhLmRhdGEoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OF90Kj4oZGF0YS5idWZmZXIpLCBkYXRhLmxlbmd0aCwgMSk7CisgICAgZW5jb2Rlci5l
bmNvZGVGaXhlZExlbmd0aERhdGEoZGF0YSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRW52aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvRW52aXJvbm1lbnQuY3BwCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0Vudmlyb25tZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTU2LDcgKzE1Niw3IEBAIGJvb2wgRW52aXJvbm1lbnQ6OmNvbXB1dGVJc0RlYnVnSGVhcEVu
YWIKICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiB0cnVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCkluZGV4OiBUb29scy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzg4MDkpCisr
KyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNyBAQAorMjAyMS0w
Ni0xMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRvcHQgU3Bh
biBpbiBtb3JlIHBsYWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjI2ODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgW1dJUF0KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2NhaXJvL1BpeGVsRHVt
cFN1cHBvcnRDYWlyby5jcHA6CisgICAgICAgIChjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JCaXRt
YXBDb250ZXh0KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jZy9QaXhlbER1bXBTdXBwb3J0
Q0cuY3BwOgorICAgICAgICAoY29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQml0bWFwQ29udGV4dCk6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQmxvb21GaWx0ZXIuY3BwOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6Z2VuZXJhdGVSYW5kb21EaWdlc3RzKToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlRFU1RfRik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVy
Lm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Q29ubmVjdGlvbjo6d2ViU29ja2V0SGFuZHNo
YWtlKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fp
cm8uY3BwOgorICAgICAgICAoV1RSOjpjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JDYWlyb1N1cmZh
Y2UpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvY2cvVGVzdEludm9jYXRpb25DRy5jcHA6
CisgICAgICAgIChXVFI6OmNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckNvbnRleHQpOgorCiAyMDIx
LTA2LTExICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAg
ICAgIFtXaW5dW0R1bXBSZW5kZXJUcmVlXSAtLW5vLXRpbWVvdXQgc3dpdGNoIGRvZXNuJ3Qgd29y
awpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2Fpcm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJv
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBT
dXBwb3J0Q2Fpcm8uY3BwCShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9EdW1wUmVuZGVyVHJl
ZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3
ICs3NSw3IEBAIHZvaWQgY29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQml0bWFwQ29udGUKICAgICBT
SEExIHNoYTE7CiAgICAgdW5zaWduZWQgY2hhciogYml0bWFwRGF0YSA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpKTsKICAg
ICBmb3IgKHVuc2lnbmVkIHJvdyA9IDA7IHJvdyA8IHBpeGVsc0hpZ2g7IHJvdysrKSB7Ci0gICAg
ICAgIHNoYTEuYWRkQnl0ZXMoYml0bWFwRGF0YSwgNCAqIHBpeGVsc1dpZGUpOworICAgICAgICBz
aGExLmFkZEJ5dGVzKFNwYW4geyBiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lkZSB9KTsKICAgICAg
ICAgYml0bWFwRGF0YSArPSBieXRlc1BlclJvdzsKICAgICB9CiAgICAgU0hBMTo6RGlnZXN0IGhh
c2g7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jZy9QaXhlbER1bXBTdXBwb3J0Q0cuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRD
Ry5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NnL1BpeGVs
RHVtcFN1cHBvcnRDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDE0ICs4OCwxNCBAQCB2b2lk
IGNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckJpdG1hcENvbnRlCiAgICAgICAgICAgICB1aW50MzJf
dCBidWZmZXJbcGl4ZWxzV2lkZV07CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNvbHVtbiA9
IDA7IGNvbHVtbiA8IHBpeGVsc1dpZGU7IGNvbHVtbisrKQogICAgICAgICAgICAgICAgIGJ1ZmZl
cltjb2x1bW5dID0gT1NSZWFkTGl0dGxlSW50MzIoYml0bWFwRGF0YSwgNCAqIGNvbHVtbik7Ci0g
ICAgICAgICAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+
KGJ1ZmZlciksIDQgKiBwaXhlbHNXaWRlKTsKKyAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3Bh
biB7IGJ1ZmZlciwgcGl4ZWxzV2lkZSB9KTsKICAgICAgICAgICAgIGJpdG1hcERhdGEgKz0gYnl0
ZXNQZXJSb3c7CiAgICAgICAgIH0KICAgICB9IGVsc2UKICNlbmRpZgogICAgIHsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCByb3cgPSAwOyByb3cgPCBwaXhlbHNIaWdoOyByb3crKykgewotICAgICAg
ICAgICAgc2hhMS5hZGRCeXRlcyhiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lkZSk7CisgICAgICAg
ICAgICBzaGExLmFkZEJ5dGVzKFNwYW4geyBiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lkZSB9KTsK
ICAgICAgICAgICAgIGJpdG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7CiAgICAgICAgIH0KICAgICB9
CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9CbG9vbUZpbHRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQmxvb21GaWx0ZXIuY3Bw
CShyZXZpc2lvbiAyNzg4MDkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9CbG9v
bUZpbHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgc3RhdGljIFZlY3Rv
cjxTSEExOjpEaWdlc3Q+IGdlbmVyYXRlUmFuZAogICAgIFNIQTEgc2hhMTsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgaGFzaENvdW50OyArK2kpIHsKICAgICAgICAgZG91YmxlIHJhbmRv
bSA9IHJhbmRvbU51bWJlcigpOwotICAgICAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDhfdCo+KCZyYW5kb20pLCBzaXplb2YoZG91YmxlKSk7CisgICAgICAgIHNoYTEuYWRk
Qnl0ZXMoU3BhbiB7ICZyYW5kb20sIDEgfSk7CiAgICAgICAgIFNIQTE6OkRpZ2VzdCBkaWdlc3Q7
CiAgICAgICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsKICAgICAgICAgaGFzaGVzLmFwcGVu
ZChkaWdlc3QpOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3Rl
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5
c3RlbS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL0ZpbGVTeXN0ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsOCArMTMzLDggQEAgVEVT
VF9GKEZpbGVTeXN0ZW1UZXN0LCBNYXBwaW5nRXhpc3RpbmdGaQogICAgIEZpbGVTeXN0ZW06Ok1h
cHBlZEZpbGVEYXRhIG1hcHBlZEZpbGVEYXRhKHRlbXBGaWxlUGF0aCgpLCBGaWxlU3lzdGVtOjpN
YXBwZWRGaWxlTW9kZTo6U2hhcmVkLCBzdWNjZXNzKTsKICAgICBFWFBFQ1RfVFJVRShzdWNjZXNz
KTsKICAgICBFWFBFQ1RfVFJVRSghIW1hcHBlZEZpbGVEYXRhKTsKLSAgICBFWFBFQ1RfVFJVRSht
YXBwZWRGaWxlRGF0YS5zaXplKCkgPT0gc3RybGVuKEZpbGVTeXN0ZW1UZXN0RGF0YSkpOwotICAg
IEVYUEVDVF9UUlVFKHN0cm5zdHIoRmlsZVN5c3RlbVRlc3REYXRhLCBzdGF0aWNfY2FzdDxjb25z
dCBjaGFyKj4obWFwcGVkRmlsZURhdGEuZGF0YSgpKSwgbWFwcGVkRmlsZURhdGEuc2l6ZSgpKSk7
CisgICAgRVhQRUNUX1RSVUUobWFwcGVkRmlsZURhdGEuZGF0YSgpLnNpemUoKSA9PSBzdHJsZW4o
RmlsZVN5c3RlbVRlc3REYXRhKSk7CisgICAgRVhQRUNUX1RSVUUoc3RybnN0cihGaWxlU3lzdGVt
VGVzdERhdGEsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KG1hcHBlZEZpbGVEYXRhLmRh
dGEoKS5kYXRhKCkpLCBtYXBwZWRGaWxlRGF0YS5kYXRhKCkuc2l6ZSgpKSk7CiB9CiAKIFRFU1Rf
RihGaWxlU3lzdGVtVGVzdCwgTWFwcGluZ0V4aXN0aW5nRW1wdHlGaWxlKQpJbmRleDogVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU0hBMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvU0hBMS5jcHAJKHJldmlzaW9uIDI3ODgwOSkKKysrIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1NIQTEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3
ICszOCw3IEBAIHN0YXRpYyB2b2lkIGV4cGVjdFNIQTEoQ1N0cmluZyBpbnB1dCwgaW4KIHsKICAg
ICBTSEExIHNoYTE7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXBlYXQ7ICsraSkKLSAgICAg
ICAgc2hhMS5hZGRCeXRlcyhpbnB1dCk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoaW5wdXQuYnl0
ZXMoKSk7CiAgICAgQ1N0cmluZyBhY3R1YWwgPSBzaGExLmNvbXB1dGVIZXhEaWdlc3QoKTsKIAog
ICAgIEFTU0VSVF9FUShleHBlY3RlZC5sZW5ndGgoKSwgYWN0dWFsLmxlbmd0aCgpKTsKSW5kZXg6
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW0JKHJldmlzaW9uIDI3ODgwOSkK
KysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbQkod29ya2luZyBjb3B5
KQpAQCAtMzQwLDExICszNDAsMTEgQEAgdm9pZCBDb25uZWN0aW9uOjp3ZWJTb2NrZXRIYW5kc2hh
a2UoQ29tcAogCiAgICAgICAgICAgICBjb25zdGV4cHIgYXV0byogd2ViU29ja2V0S2V5R1VJRCA9
ICIyNThFQUZBNS1FOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTEiOwogICAgICAgICAgICAgU0hB
MSBzaGExOwotICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihrZXlCZWdpbiksIGtleUVuZCAtIGtleUJlZ2luKTsKLSAgICAgICAgICAgIHNo
YTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4od2ViU29ja2V0S2V5
R1VJRCksIHN0cmxlbih3ZWJTb2NrZXRLZXlHVUlEKSk7CisgICAgICAgICAgICBzaGExLmFkZEJ5
dGVzKFNwYW4geyBrZXlCZWdpbiwga2V5RW5kIH0pOworICAgICAgICAgICAgc2hhMS5hZGRCeXRl
cyhTcGFuIHsgd2ViU29ja2V0S2V5R1VJRCwgc3RybGVuKHdlYlNvY2tldEtleUdVSUQpIH0pOwog
ICAgICAgICAgICAgU0hBMTo6RGlnZXN0IGhhc2g7CiAgICAgICAgICAgICBzaGExLmNvbXB1dGVI
YXNoKGhhc2gpOwotICAgICAgICAgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGhhc2gu
ZGF0YSgpLCBTSEExOjpoYXNoU2l6ZSk7CisgICAgICAgICAgICByZXR1cm4gYmFzZTY0RW5jb2Rl
VG9TdHJpbmcoaGFzaCk7CiAgICAgICAgIH07CiAKICAgICAgICAgY29ubmVjdGlvbi5zZW5kKEhU
VFBSZXNwb25zZSgxMDEsIHsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2Fpcm8vVGVz
dEludm9jYXRpb25DYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9jYWlyby9UZXN0SW52b2NhdGlvbkNhaXJvLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9jYWlyby9UZXN0SW52b2NhdGlvbkNhaXJvLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBzdGF0aWMgdm9pZCBjb21wdXRlU0hBMUhhc2hTdHJp
bmdGb3JDYWlyCiAgICAgU0hBMSBzaGExOwogICAgIHVuc2lnbmVkIGNoYXIqIGJpdG1hcERhdGEg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0
YShzdXJmYWNlKSk7CiAgICAgZm9yIChzaXplX3Qgcm93ID0gMDsgcm93IDwgcGl4ZWxzSGlnaDsg
Kytyb3cpIHsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lk
ZSk7CisgICAgICAgIHNoYTEuYWRkQnl0ZXMoU3BhbiB7IGJpdG1hcERhdGEsIDQgKiBwaXhlbHNX
aWRlIH0pOwogICAgICAgICBiaXRtYXBEYXRhICs9IGJ5dGVzUGVyUm93OwogICAgIH0KICAgICBT
SEExOjpEaWdlc3QgaGFzaDsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2cvVGVzdElu
dm9jYXRpb25DRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9U
ZXN0SW52b2NhdGlvbkNHLmNwcAkocmV2aXNpb24gMjc4ODA5KQorKysgVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyAr
OTQsNyBAQCB2b2lkIGNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckNvbnRleHQoQ0dDCiAjZW5kaWYK
ICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgcm93ID0gMDsgcm93IDwgcGl4ZWxzSGlnaDsg
cm93KyspIHsKLSAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMoYml0bWFwRGF0YSwgNCAqIHBpeGVs
c1dpZGUpOworICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhTcGFuIHsgYml0bWFwRGF0YSwgNCAq
IHBpeGVsc1dpZGUgfSk7CiAgICAgICAgICAgICBiaXRtYXBEYXRhICs9IGJ5dGVzUGVyUm93Owog
ICAgICAgICB9CiAgICAgfQo=
</data>
<flag name="commit-queue"
          id="453094"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>